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); $imageIdArr = array_column($skuList,'image_ids'); $skuList = array_column($skuList, null,'id'); $imageIds = array_unique(explode(',',implode(',',$imageIdArr))); $imageList = $this->getOssObjects($imageIds); $orderCopiesList = []; for ($i = 1; $i <= ($orderInfo['meal_copies'] + $orderInfo['optional_copies']); $i++) { $oneCopiesInfo = [ 'total_price' => '0.00', 'total_quantity' => 0, 'sku_list' => [], 'image_list' => [], 'take_food_code' => '', //todo 取餐码 'copies_type' => 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] : []; $oneCopiesInfo['total_price'] = bcadd($oneCopiesInfo['total_price'], bcmul($item['unit_price'],(string)$item['quantity'],2), 2); $oneCopiesInfo['total_quantity'] += $item['quantity']; $oneCopiesInfo['sku_list'][] = $skuInfo; $oneCopiesInfo['image_list'][] = $imageList[$imageId] ?? []; if ($oneCopiesInfo['copies_type'] == 0) $oneCopiesInfo['copies_type'] = $item['type']; } // foreach ($newOrderSkuList as $item) { // if ($item['order_id'] != $order['id'] || $item['copies'] != $i) continue; // // $skuInfo = $skuList[$item['sku_id']] ?? []; // $imageId = !empty($skuInfo) && !empty(explode(',',$skuInfo['image_ids'])[0]) ? explode(',',$skuInfo['image_ids'])[0] : []; // $oneCopiesInfo['total_price'] = bcadd($oneCopiesInfo['total_price'], bcmul($item['unit_price'],$item['quantity'],2), 2); // $oneCopiesInfo['total_quantity'] += $item['quantity']; // $oneCopiesInfo['sku_list'][] = $skuInfo; // $oneCopiesInfo['image_list'][] = $imageList[$imageId] ?? []; // } $orderCopiesList[] = $oneCopiesInfo; } $orderInfo['copies_list'] = $orderCopiesList; $orderInfo['site'] = $this->siteCache->getSiteInfo($orderInfo['site_id']); } }