소스 검색

零售端订单列表查询订单商品bug

ouyang 3 주 전
부모
커밋
eb5a2ac72c

+ 11 - 0
app-mall/controllers/OrderController.php

@@ -1262,11 +1262,22 @@ class OrderController extends BaseController
     {
         $get = Yii::$app->request->get();
         $status = $get['status'] ?? 0;
+        $hdId = $get['hdId'] ?? ($get['id'] ?? 0);
         $userId = $this->userId;
         $where = ['userId' => $userId];
         if (!empty($status)) {
             $where['status'] = $status;
         }
+        if (!empty($hdId)) {
+            $hd = \bizMall\hd\classes\HdClass::getById($hdId, true);
+            if (empty($hd)) {
+                util::fail('无效的花店');
+            }
+            if ($hd['userId'] != $userId) {
+                util::fail('不是你的花店');
+            }
+            $where['hdId'] = $hdId;
+        }
         $list = OrderService::getOrderList($where);
         util::success($list);
     }

+ 40 - 0
biz-mall/order/classes/OrderItemClass.php

@@ -4,6 +4,7 @@ namespace bizMall\order\classes;
 
 use biz\stat\classes\StatItemClass;
 use common\components\dict;
+use common\components\imgUtil;
 use Yii;
 use bizMall\base\classes\BaseClass;
 use bizGhs\product\classes\ProductClass;
@@ -65,4 +66,43 @@ class OrderItemClass extends BaseClass
         return $result;
     }
 
+    /**
+     * 按订单号批量取花材/商品明细
+     * @param array $sns 订单号列表
+     * @return array [orderSn => [item...]]
+     */
+    public static function getItemListByOrderSns($sns)
+    {
+        $sns = array_values(array_filter(array_unique($sns)));
+        if (empty($sns)) {
+            return [];
+        }
+        $arr = self::getAllByCondition(['orderSn' => ['in', $sns]], null, '*');
+        if (empty($arr)) {
+            return [];
+        }
+        $data = [];
+        foreach ($arr as $info) {
+            $orderSn = $info['orderSn'] ?? '';
+            if (empty($orderSn)) {
+                continue;
+            }
+            $info = self::formatItemCover($info);
+            $data[$orderSn][] = $info;
+        }
+        return $data;
+    }
+
+    /**
+     * 处理订单明细封面,与详情页展示字段保持一致
+     */
+    private static function formatItemCover($info)
+    {
+        $shortCover = !empty($info['cover']) ? $info['cover'] : 'hhb_small.png';
+        $info['shortCover'] = $shortCover;
+        $info['cover'] = imgUtil::groupImg($shortCover);
+        $info['smallCover'] = imgUtil::groupImg($shortCover) . "?x-oss-process=image/resize,m_fill,h_130,w_130";
+        return $info;
+    }
+
 }

+ 9 - 0
biz-mall/order/services/OrderItemService.php

@@ -3,6 +3,7 @@
 namespace bizMall\order\services;
 
 use bizMall\base\services\BaseService;
+use bizMall\order\classes\OrderItemClass;
 use Yii;
 
 class OrderItemService extends BaseService
@@ -10,4 +11,12 @@ class OrderItemService extends BaseService
 
     public static $baseFile = '\bizMall\order\classes\OrderItemClass';
 
+    /**
+     * 按订单号批量取明细,供订单列表组装 goodsInfoList
+     */
+    public static function getItemListByOrderSns($sns)
+    {
+        return OrderItemClass::getItemListByOrderSns($sns);
+    }
+
 }

+ 6 - 5
biz-mall/order/services/OrderService.php

@@ -229,12 +229,13 @@ class OrderService extends BaseService
             return $data;
         }
         $list = $data['list'];
-        $orderSns = array_column($list, 'orderSn');
-        $goodsList = OrderGoodsService::getGoodsListByOrderSns($orderSns);
+        $orderSns = array_values(array_filter(array_unique(array_column($list, 'orderSn'))));
+        // 商城订单明细在 xhOrderItem,不在 xhOrderGoods
+        $itemListMap = OrderItemService::getItemListByOrderSns($orderSns);
         $periodData = [0 => '上午', 1 => '下午', 2 => '晚上'];
         foreach ($data['list'] as $key => $val) {
-            $id = $val['id'];
-            $goodsInfoList = isset($goodsList[$id]) ? $goodsList[$id] : [];
+            $orderSn = $val['orderSn'] ?? '';
+            $goodsInfoList = !empty($orderSn) && isset($itemListMap[$orderSn]) ? $itemListMap[$orderSn] : [];
             $data['list'][$key]['goodsInfoList'] = $goodsInfoList;
             $reachTime = OrderClass::getReachTime($val);
             $data['list'][$key]['reachTime'] = $reachTime;
@@ -393,4 +394,4 @@ class OrderService extends BaseService
         return ['price' => $discountPrice, 'discountType' => $discountType, 'discountAmount' => $discountAmount];
     }
 
-}
+}