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); } /** * @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')); $orderCopiesList = []; for ($i = 1; $i <= ($orderInfo['copies'] ?? 0); $i++) { $oneCopiesInfo = [ 'total_price' => '0.00', 'total_quantity' => 0, 'sku_list' => [], // 'image_list' => [], 'take_food_code' => '', //todo 取餐码 ]; 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] : []; $skuInfo['url'] = $imageList[$imageId]['url'] ?? ''; $oneCopiesInfo['image_list'][] = $imageList[$imageId] ?? []; $oneCopiesInfo['sku_list'][] = $skuInfo; $oneCopiesInfo['total_price'] = bcadd($oneCopiesInfo['total_price'], bcmul($item['unit_price'],(string)$item['quantity'],2), 2); $oneCopiesInfo['total_quantity'] += $item['quantity']; } $orderCopiesList[] = $oneCopiesInfo; } $orderInfo['copies_list'] = $orderCopiesList; $orderInfo['site'] = $this->siteCache->getSiteInfo($orderInfo['site_id']); } }