request->input('limit', 20); $orderList = $this->orderModel ->where('user_id', $this->userId) ->when($this->request->input('status'), function ($query) { $query->where('status', $this->request->input('status')); }) ->select([ 'id', 'order_sno', 'user_id', 'site_id', 'copies', 'type', 'actual_price', 'total_price', 'status', ]) ->orderByDesc('id') ->paginate($limit) ->toArray(); if (!empty($orderList['data'])) { $this->buildData($orderList['data']); } return $this->return->success('success', ['list' => $orderList]); } /** * 构建订单列表数据 * @param array $orderList * @return void * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface */ private function buildData(array &$orderList): void { $orderIds = array_column($orderList, 'id'); $orderSkuList = $this->orderGoodModel->whereIn('order_id', $orderIds)->get()->toArray(); $skuIds = []; $newOrderSkuList = []; foreach ($orderSkuList as $orderSku) { if (empty($newOrderSkuList[$orderSku['order_id']])) { $newOrderSkuList[$orderSku['order_id']] = []; } if (empty($newOrderSkuList[$orderSku['order_id']][$orderSku['copies']])) { $newOrderSkuList[$orderSku['order_id']][$orderSku['copies']] = []; } $newOrderSkuList[$orderSku['order_id']][$orderSku['copies']][] = $orderSku; if (in_array($orderSku['sku_id'], $skuIds)) continue; $skuIds[] = $orderSku['sku_id']; } unset($orderSkuList); // $skuIds = array_unique(array_column($orderSkuList, 'sku_id')); $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); foreach ($orderList as &$order) { $orderCopiesList = []; $addStapleFood = []; if ($order['type'] == OrderCode::ORDER_TYPE_MEAL) { $addStapleFood = [ 'total_price' => '0.00', 'total_quantity' => 0, 'sku_list' => [], 'take_food_code' => '', //取餐码 'is_add_staple_food' => GoodCode::IS_ADD_STAPLE_FOOD, ]; } for ($i = 1; $i <= ($order['copies'] ?? 0); $i++) { $oneCopiesInfo = [ 'total_price' => '0.00', 'total_quantity' => 0, // 'sku_list' => [], 'image_list' => [], 'take_food_code' => [], //todo 取餐码 // 'copies_type' => 0, ]; foreach ($newOrderSkuList[$order['id']][$i] 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] : []; 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'] ?? ''; continue; } $oneCopiesInfo['total_price'] = bcadd($oneCopiesInfo['total_price'], bcmul($item['unit_price'],(string)$item['quantity'],2), 2); $oneCopiesInfo['total_quantity'] += $item['quantity']; // $oneCopiesInfo['sku_list'][] = []; $oneCopiesInfo['image_list'][] = $imageList[$imageId]['url'] ?? []; // 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] ?? []; // } if (!empty($addStapleFood)) $oneCopiesInfo[] = $addStapleFood; $orderCopiesList[] = $oneCopiesInfo; } $order['copies_list'] = $orderCopiesList; $order['site'] = $this->siteCache->getSiteInfo((int)$order['site_id']) ?? []; } } }