vd/app/Domains/Virtual/Services/StatService.php
2018-12-26 18:04:37 +08:00

67 lines
2.2 KiB
PHP

<?php
namespace App\Domains\Virtual\Services;
use App\Core\Service;
use App\Models\Virtual\Order;
use Illuminate\Support\Facades\DB;
use App\Domains\Virtual\Repositories\OrderRepository;
use App\Domains\Virtual\Repositories\CompanyRepository;
class StatService extends Service
{
protected $orderRepository;
/**
* 构造函数
*
* @return void
*/
public function __construct(OrderRepository $orderRepository)
{
$this->orderRepository = $orderRepository;
}
/**
* 企业统计
*
* @return void
*/
public function companyIndex(array $conditions = [])
{
$companies = app(CompanyRepository::class)->withConditions(array_only($conditions, ['name']))
->select(['id', 'name'])->applyConditions()->withTrashed()->paginate($conditions['limit']);
if (empty($companies)) {
return $companies;
}
$groupBy = 'company_id';
$select = [$groupBy, DB::raw('count(*) as count')];
$model = Order::select($select)->whereIn('company_id', $companies->pluck('id')->toArray())->groupBy($groupBy);
$total = $this->orderRepository->setModel($model)->withConditions(['type' => 0])->get()->pluck('count', 'company_id')->toArray();
$conditions = array_only($conditions, ['starttime', 'endtime']);
$count = $this->orderRepository->setModel($model)->withConditions(array_merge($conditions, ['type' => 0]))
->get()->pluck('count', 'company_id')->toArray();
$renewed_count = $this->orderRepository->setModel($model)->withConditions(array_merge($conditions, ['type' => [1, 2]]))
->get()->pluck('count', 'company_id')->toArray();
$valid_count = $this->orderRepository->setModel($model)->withConditions(array_merge($conditions, ['type' => [1, 2]]))
->get()->pluck('count', 'company_id')->toArray();
$companies->map(function ($item) use ($total, $count, $renewed_count, $valid_count) {
$item->total = $total[$item['id']] ?? 0;
$item->count = $count[$item['id']] ?? 0;
$item->renewed_count = $renewed_count[$item['id']] ?? 0;
$item->valid_count = $valid_count[$item['id']] ?? 0;
});
return $companies;
}
}