siteModel ->where('delivered_id',$this->adminInfo->id) ->orderBy('sequence') ->get(); if ($siteArr->isEmpty()) throw new ErrException('该司机并未绑定站点'); $siteArr = array_column($siteArr->toArray(),null,'id'); $this->siteIds = array_keys($siteArr); $optionArr = $this->getOptionData(); $mealArr = $this->getMealData(); $res = []; foreach ($siteArr as $site) { if (empty($res[$site['id']])) { $res[$site['id']] = [ 'site_id' => $site['id'], 'site_name' => $site['name'], 'name' => '', 'meal_order_quantity' => 0, 'meal_add_staple_food_num' => 0, 'option_order_quantity' => 0, 'option_add_staple_food_num' => 0, ]; } } } /** * @return array */ private function getMealData(): array { $mealArr = $this->orderMealCateringLogModel ->where('cycle_id',$this->cycleId) ->where('status',CateringCode::CATERING_STATUS_FINISH) ->whereIn('site_id', $this->siteIds) ->select(['quantity','site_id','sku_id']) ->get(); if ($mealArr->isEmpty()) $mealArr = []; $mealArr = $mealArr->toArray(); $skuIds = array_column($mealArr, 'sku_id'); $skuArr = $this->skuModel->getDataArrByIds($skuIds); $skuArr = array_column($skuArr,null,'id'); $res = []; foreach ($mealArr as $oneLog) { if (empty($res[$oneLog['site_id']])) { $res[$oneLog['site_id']] = [ 'total_copies' => 0, 'add_staple_food_num' => 0, 'sku' => [] ]; } if (empty($res[$oneLog['site_id']]['sku'][$oneLog['sku_id']])) { $res[$oneLog['site_id']]['sku'][$oneLog['sku_id']] = [ 'sku_id' => $oneLog['sku_id'], 'sku_name' => $skuArr[$oneLog['sku_id']]['title'] ?? '', 'quantity' => 0, ]; } if ($skuArr[$oneLog['sku_id']]['is_add_staple_food'] == GoodCode::IS_ADD_STAPLE_FOOD) { $res[$oneLog['site_id']]['add_staple_food_num'] += $oneLog['quantity']; } else { $res[$oneLog['site_id']]['total_copies'] += $oneLog['quantity']; } $res[$oneLog['site_id']]['sku'][$oneLog['sku_id']]['quantity'] += $oneLog['quantity']; } return $res; } /** * @return array */ private function getOptionData(): array { $optionArr = $this->orderOptionCateringLogModel ->where('cycle_id',$this->cycleId) ->where('status',CateringCode::CATERING_STATUS_FINISH) ->whereIn('site_id', $this->siteIds) ->select(['quantity','site_id','add_staple_food_num']) ->get(); if ($optionArr->isEmpty()) $optionArr = []; $optionArr = $optionArr->toArray(); $res = []; foreach ($optionArr as $oneSite) { if (empty($res[$oneSite['site_id']])) { $res[$oneSite['site_id']] = [ 'copies' => 0, 'add_staple_food_num' => 0 ]; } $res[$oneSite['site_id']]['copies'] = $oneSite['quantity'] + $res[$oneSite['site_id']]['copies']; $res[$oneSite['site_id']]['add_staple_food_num'] = $oneSite['add_staple_food_num'] + $res[$oneSite['site_id']]['add_staple_food_num']; } return $res; } }