companyRepository = $companyRepository; $this->packageRepository = $packageRepository; $this->orderRepository = $orderRepository; } /** * 统计 * * @return void */ public function index(array $conditions = []) { $conditions['source'] = 1; $companies = $this->companyRepository->withTrashed()->get()->pluck('name', 'id')->toArray(); $packages = $this->packageRepository->withTrashed()->get()->pluck('name', 'id')->toArray(); $select = [ DB::raw("array_to_string(array_agg(id), ',') as order_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', 'package_id', 'product_id', 'unit_price', 'pay_channel'])->paginate($conditions['limit']); $orders->map(function ($item) use ($companies, $packages) { $item->unit_price = floatval(sprintf('%.02f', $item->unit_price/100)); $item->custom_price = floatval(sprintf('%.02f', $item->custom_price/100)); $item->company_name = $companies[$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()->keyBy('id')->toArray(); $cards = $repository->with('order:id,unit_price,pay_channel,order_at')->withConditions($conditions)->applyConditions()->paginate($conditions['limit']); $cards->map(function ($item) use ($companies, $packages) { $item->company_name = $packages[$item->company_id]; $item->package_name = $packages[$item->package_id]['name']; $item->service_months = $packages[$item->package_id]['service_months']; $item->unit_price = $item->order['unit_price']; $item->pay_channel_name = CommonService::namePayChannel($item->order['pay_channel']); $item->order_at = $item->order['order_at']; }); return $cards; } }