request->input('order_id'); $orderInfo = $this->orderModel->getInfoById($orderId); if (empty($orderInfo)) throw new ErrException('订单不存在'); $orderInfo = $orderInfo->toArray(); $this->buildData($orderInfo); return $this->return->success('success', $orderInfo); } /** * @var PickupCode */ #[Inject] protected PickupCode $pickupCodeModel; /** * @param array $orderInfo * @return void * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface */ private function buildData(array &$orderInfo): void { $orderSkuList = $this->orderGoodModel->where('order_id', $orderInfo['id'])->get()->toArray(); $skuIds = []; $newOrderSkuList = []; foreach ($orderSkuList as $orderSku) { if (empty($newOrderSkuList[$orderSku['copies']])) { $newOrderSkuList[$orderSku['copies']] = []; } $newOrderSkuList[$orderSku['copies']][] = $orderSku; if (in_array($orderSku['sku_id'], $skuIds)) continue; $skuIds[] = $orderSku['sku_id']; } unset($orderSkuList); $skuList = $this->skuModel->getDataArrByIds($skuIds); $skuList = array_column($skuList, null,'id'); $imageList = $this->getOssObjects(array_column($skuList,'image_ids')); $chefId = array_unique(array_column($skuList,'chef_id')); $chefList = $this->adminUserModel->getDataArrByIds($chefId); $chefList = array_column($chefList, null,'id'); $pickupCodeList = $this->pickupCodeModel ->where('order_id',$orderInfo['id']) ->pluck('pickup_code','copies') ->toArray(); $orderCopiesList = []; $addStapleFood = []; if ($orderInfo['type'] == OrderCode::ORDER_TYPE_MEAL) { $addStapleFood = [ 'total_price' => '0.00', 'total_quantity' => 0, 'sku_list' => [], 'pickup_code' => '', //取餐码 'url' => '', 'is_add_staple_food' => GoodCode::IS_ADD_STAPLE_FOOD, ]; } for ($i = 1; $i <= (count($newOrderSkuList) ?? 0); $i++) { $pickupCodeOneCopies = $pickupCodeArrList[$order['id']][$i]['pickup_code'] ?? null; $boxNum = 0; if (!empty($pickupCodeOneCopies)) { $pickupCodeOneCopiesArr = explode('-', $pickupCodeOneCopies); $boxNum = ceil(end($pickupCodeOneCopiesArr) ?? '0' / (int)$this->configCache->getConfigValueByKey(ConfigCode::MAXIMUM_VALUE_IN_FULL_BOX)); } $oneCopiesInfo = [ 'total_price' => '0.00', 'total_quantity' => 0, 'sku_list' => [], 'pickup_code' => $pickupCodeOneCopies ?? '', // 取餐码 'box_num' => $boxNum, 'is_add_staple_food' => GoodCode::IS_NOT_ADD_STAPLE_FOOD, ]; $breakFlag = 0; foreach ($newOrderSkuList[$i] as $item) { if ($item['order_id'] != $orderInfo['id'] || $item['copies'] != $i) continue; $skuInfo = $skuList[$item['sku_id']] ?? []; $imageId = !empty($skuInfo) && !empty(explode(',',$skuInfo['image_ids'])[0]) ? explode(',',$skuInfo['image_ids'])[0] : []; if ($skuInfo['is_add_staple_food'] == GoodCode::IS_ADD_STAPLE_FOOD) { $addStapleFood['total_price'] = bcadd((string)$oneCopiesInfo['total_price'], bcmul((string)$item['unit_price'],(string)$item['quantity'],2), 2); $addStapleFood['total_quantity'] += $item['quantity']; $addStapleFood['url'] = $imageList[$imageId]['url'] ?? ''; $addStapleFood['title'] = $skuList[$item['sku_id']]['title'] ?? ''; $addStapleFood['unit_price'] = $item['unit_price']; $breakFlag = 1; continue; } // $skuInfo['url'] = $imageList[$imageId]['url'] ?? ''; // $oneCopiesInfo['image_list'][] = $imageList[$imageId] ?? []; $oneCopiesInfo['sku_list'][] = [ 'url' => $imageList[$imageId]['url'] ?? '', 'title' => $skuList[$item['sku_id']]['title'] ?? '', 'unit_price' => $item['unit_price'], 'quantity' => $item['quantity'], 'price' => bcmul((string)$item['unit_price'], (string)$item['quantity'], 2), 'chef_name' => $chefList[$item['sku_id']]['chinese_name'] ?? '', 'order_good_id' => $item['id'], 'is_comment' => $item['is_comment'], 'sku_id' => $item['sku_id'], 'id' => $item['id'], ]; $oneCopiesInfo['total_price'] = bcadd((string)$oneCopiesInfo['total_price'], bcmul((string)$item['unit_price'],(string)$item['quantity'],2), 2); $oneCopiesInfo['total_quantity'] += $item['quantity']; } if ($breakFlag == 0) $orderCopiesList[] = $oneCopiesInfo; } if (!empty($addStapleFood) && $addStapleFood['total_quantity'] >= 0) $orderCopiesList[] = $addStapleFood; $orderInfo['copies_list'] = $orderCopiesList; $orderInfo['site'] = $this->siteCache->getSiteInfo($orderInfo['site_id']); } }