companyRepository = $companyRepository; $this->packageRepository = $packageRepository; $this->orderRepository = $orderRepository; } /** * 统计 * * @return void */ public function index($type, array $conditions = []) { $conditions['type'] = $type; $conditions['source'] = 1; $companies = $this->companyRepository->withTrashed()->get()->pluck('name', 'id')->toArray(); $packages = $this->packageRepository->withTrashed()->get()->pluck('name', 'id')->toArray(); $select = [ DB::raw("string_agg(DISTINCT id, ',') as id"), 'company_id', 'package_id', 'product_id', 'unit_price', 'pay_channel', DB::raw('SUM(counts) as counts'), DB::raw('SUM(custom_price) as custom_price'), ]; $orders = $this->orderRepository->select($select)->withConditions($conditions)->applyConditions() ->groupBy(['company_id', 'product_id', 'pay_channel'])->paginate($conditions['limit']); $orders->map(function ($item) use ($companies, $packages) { $item->company_name = $packages[$item->company_id]; $item->package_name = $packages[$item->package_id]; $item->pay_channel_name = CommonService::namePayChannel($item->pay_channel); }); return $orders; } /** * 明细 * * @return void */ public function detail(array $conditions = []) { if (!$class = self::$classes[$conditions['type']]) { throw new NotAllowedException('统计类型不存在'); } $repository = app($class); $companies = $this->companyRepository->withTrashed()->get()->pluck('name', 'id')->toArray(); $packages = $this->packageRepository->withTrashed()->get()->pluck('name', 'id')->toArray(); $repository->withConditions($conditions)->applyConditions()->paginate($conditions['limit']); $select = [ 'id', 'company_id', 'package_id', 'unit_price', 'pay_channel', DB::raw('SUM(counts) as counts'), DB::raw('SUM(custom_price) as custom_price'), ]; $orders = $this->orderRepository->select($select)->withConditions($conditions)->applyConditions() ->groupBy(['company_id', 'product_id', 'pay_channel'])->paginate($conditions['limit']); $orders->map(function ($item) use ($companies, $packages) { $item->company_name = $packages[$item->company_id]; $item->package_name = $packages[$item->package_id]; $item->pay_channel_name = CommonService::namePayChannel($item->pay_channel); }); return $orders; } }