Преглед изворни кода

会员端订单列表API修改

kevin_zhangl пре 3 година
родитељ
комит
b6251a249d

+ 5 - 0
common/models/ApproachOrder.php

@@ -136,4 +136,9 @@ class ApproachOrder extends \common\components\ActiveRecord
             'EMAIL' => 'Email'
         ];
     }
+
+    public function getUserByUserId()
+    {
+        return $this->hasOne(User::class, ['ID' => 'USER_ID']);
+    }
 }

+ 5 - 0
common/models/Order.php

@@ -172,4 +172,9 @@ class Order extends \common\components\ActiveRecord
     {
         return $this->hasOne(User::class, ['ID' => 'USER_ID']);
     }
+
+    public function getOrderGoods()
+    {
+        return $this->hasMany(OrderGoods::class, ['SN' => 'ORDER_SN']);
+    }
 }

+ 5 - 0
common/models/OrderGoods.php

@@ -74,4 +74,9 @@ class OrderGoods extends \common\components\ActiveRecord
             'EMAIL' => 'Email'
         ];
     }
+
+    public function getShopGoods()
+    {
+        return $this->hasMany(ShopGoods::class, ['ID' => 'GOODS_ID']);
+    }
 }

+ 1 - 0
common/models/Region.php

@@ -71,6 +71,7 @@ class Region extends \common\components\ActiveRecord
      */
     public static function getCnName($regionCode){
 //        self::updateToCache();
+        if (!$regionCode) return '';
         $allData = self::getFromCache();
         return $allData[$regionCode]['REGION_NAME'] ?? '';
     }

+ 97 - 37
frontendApi/modules/v1/controllers/ShopController.php

@@ -332,6 +332,87 @@ class ShopController extends BaseController {
         return static::notice($data);
     }
 
+//    /**
+//     * 我的订单
+//     * @return mixed
+//     * @throws HttpException
+//     */
+//    public function actionOrderList() {
+//        $uname = Info::getUserNameByUserId(\Yii::$app->user->id);
+//        $condition = " (USER_ID=:USER_ID OR CREATE_USER='$uname') AND O.IS_DELETE = 0";
+//        $params[':USER_ID'] = \Yii::$app->user->id;
+//        $orderQuery = Order::find()
+//            ->alias('O')
+//            ->where($condition, $params)
+//            ->select('O.*,U.REAL_NAME,SG.CATEGORY_TYPE,OG.REAL_PRICE,OG.TAX_RATE,OG.BUY_NUMS,OG.SKU_CODE,OG.GOODS_TITLE,OG.REAL_PV,SG.COVER')
+//            ->join('LEFT JOIN', User::tableName() . ' AS U', 'U.ID=O.USER_ID')
+//            ->join('LEFT JOIN', OrderGoods::tableName() . ' AS OG', 'OG.ORDER_SN=O.SN')
+//            ->join('LEFT JOIN', ShopGoods::tableName() . ' AS SG', 'SG.ID=OG.GOODS_ID')
+//            ->orderBy('O.CREATED_AT DESC');
+//
+//        // 订单中间表只查询待支付和支付失败的订单
+//        $params[':NOT_PAID'] = \Yii::$app->params['orderStatus']['notPaid']['value'];   // 待支付
+//        $params[':FAIL_PAID'] = \Yii::$app->params['orderStatus']['failPaid']['value'];   // 支付失败
+//        $orderStandardQuery = ApproachOrder::find()
+//            ->alias('O')
+//            ->where($condition . ' AND (O.STATUS = :NOT_PAID OR O.STATUS = :FAIL_PAID)', $params)
+//            ->select('O.*,U.REAL_NAME,SG.CATEGORY_TYPE,OG.REAL_PRICE,OG.TAX_RATE,OG.BUY_NUMS,OG.SKU_CODE,OG.GOODS_TITLE,OG.REAL_PV,SG.COVER')
+//            ->join('LEFT JOIN', User::tableName() . ' AS U', 'U.ID=O.USER_ID')
+//            ->join('LEFT JOIN', ApproachOrderGoods::tableName() . ' AS OG', 'OG.ORDER_SN=O.SN')
+//            ->join('LEFT JOIN', ShopGoods::tableName() . ' AS SG', 'SG.ID=OG.GOODS_ID')
+//            ->orderBy('O.CREATED_AT DESC');
+//
+//        $queryAll = $orderQuery->union($orderStandardQuery, true);
+//        $query = (new Query())->from(['Q' => $queryAll])->select('Q.*')->distinct()->orderBy(['CREATED_AT' => SORT_DESC]);
+//
+//        $totalCount = $query->count();
+//        $pagination = new Pagination(['totalCount' => $totalCount, 'pageSize' => \Yii::$app->request->get('pageSize')]);
+//        $lists = $query->offset($pagination->offset)->limit($pagination->limit)->all();
+//
+//        $data = [
+//            'list' => $lists,
+//            'currentPage'=>$pagination->page,
+//            'totalPages'=>$pagination->pageCount,
+//            'startNum' => $pagination->page * $pagination->pageSize + 1,
+//            'totalCount' => $pagination->totalCount,
+//            'pageSize' => $pagination->pageSize,
+//        ];
+//
+//        foreach ($data['list'] as $key => $value) {
+//            if($value['ORDER_TYPE']=='ZC'){
+//                $data['list'][$key]['ORDER_TYPE'] = 'Welcome Pack';
+//            }else{
+//                $data['list'][$key]['ORDER_TYPE'] = in_array($value['PAY_TYPE'], ['cash', 'pay_stack']) ? 'Repeat Purchase': 'Points';
+//            }
+//            $data['list'][$key]['PAY_AT'] = $value['PAY_AT'] ? Date::convert($value['PAY_AT'],'Y-m-d H:i:s') : '';
+//            $data['list'][$key]['CREATED_AT'] = $value['CREATED_AT'] ? Date::convert($value['CREATED_AT'],'Y-m-d H:i:s') : '';
+//            $data['list'][$key]['CATEGORY_TYPE'] = intval($value['CATEGORY_TYPE']);
+//            $data['list'][$key]['PAY_TYPE'] = array_column(ShopGoods::SALE_TYPE, NULL, 'label')[$value['PAY_TYPE']]['name'] ?? '';
+//            $data['list'][$key]['STATUS'] = \Yii::$app->params['orderStatus'][$value['STATUS']]['label'] ?? '';
+//            $data['list'][$key]['CATEGORY'] = array_column(ShopGoods::CATEGORY_TYPE, NULL, 'id')[$value['CATEGORY_TYPE']]['name'] ?? ShopGoods::CATEGORY_TYPE[0]['name'];
+//            $data['list'][$key]['FULL_ADDRESS'] = $value['ADDRESS'];//.', '.$value['CITY_NAME'].', '.$value['LGA_NAME'];
+//            if($value['CITY_NAME']){
+//                $data['list'][$key]['FULL_ADDRESS'] .= ', ' . $value['CITY_NAME'];
+//            }
+//            if($value['LGA_NAME']){
+//                $data['list'][$key]['FULL_ADDRESS'] .= ', ' . $value['LGA_NAME'];
+//            }
+//            if($value['PROVINCE']){
+//                $data['list'][$key]['FULL_ADDRESS'] .= ', ' . Region::getCnName($value['PROVINCE']);
+//            }
+////            if($value['CITY']){
+////                $data['list'][$key]['FULL_ADDRESS'] .= Region::getCnName($value['CITY']);
+////            }
+////            if($value['COUNTY']){
+////                $data['list'][$key]['FULL_ADDRESS'] .= Region::getCnName($value['COUNTY']);
+////            }
+//            $data['list'][$key]['TAX_AMOUNT'] = Tool::formatPrice(($value['REAL_PRICE'] - $value['REAL_PRICE'] / (1 + $value['TAX_RATE'] / 100)) * $value['BUY_NUMS']);
+//            $data['list'][$key]['TOTAL_AMOUNT'] = Tool::formatPrice($value['REAL_PRICE'] * $value['BUY_NUMS']);
+//        }
+//
+//        return static::notice($data);
+//    }
+
     /**
      * 我的订单
      * @return mixed
@@ -339,16 +420,13 @@ class ShopController extends BaseController {
      */
     public function actionOrderList() {
         $uname = Info::getUserNameByUserId(\Yii::$app->user->id);
-        $condition = " (USER_ID=:USER_ID OR CREATE_USER='$uname') AND O.IS_DELETE = 0";
+        $condition = " (O.USER_ID=:USER_ID OR O.CREATE_USER='{$uname}') AND O.IS_DELETE = 0";
         $params[':USER_ID'] = \Yii::$app->user->id;
         $orderQuery = Order::find()
             ->alias('O')
             ->where($condition, $params)
-            ->select('O.*,U.REAL_NAME,SG.CATEGORY_TYPE,OG.REAL_PRICE,OG.TAX_RATE,OG.BUY_NUMS,OG.SKU_CODE,OG.GOODS_TITLE,OG.REAL_PV')
-            ->join('LEFT JOIN', User::tableName() . ' AS U', 'U.ID=O.USER_ID')
-            ->join('LEFT JOIN', OrderGoods::tableName() . ' AS OG', 'OG.ORDER_SN=O.SN')
-            ->join('LEFT JOIN', ShopGoods::tableName() . ' AS SG', 'SG.ID=OG.GOODS_ID')
-            ->orderBy('O.CREATED_AT DESC');
+            ->select('O.ID,O.SN,O.USER_NAME,O.ORDER_TYPE,O.ORDER_AMOUNT,O.STATUS,O.CREATED_AT,O.PAY_TYPE,O.PAY_AT,O.CONSIGNEE,O.MOBILE,O.ADDRESS,O.CITY_NAME,O.LGA_NAME,O.PROVINCE,U.REAL_NAME')
+            ->join('LEFT JOIN', User::tableName() . ' AS U', 'U.ID=O.USER_ID');
 
         // 订单中间表只查询待支付和支付失败的订单
         $params[':NOT_PAID'] = \Yii::$app->params['orderStatus']['notPaid']['value'];   // 待支付
@@ -356,11 +434,8 @@ class ShopController extends BaseController {
         $orderStandardQuery = ApproachOrder::find()
             ->alias('O')
             ->where($condition . ' AND (O.STATUS = :NOT_PAID OR O.STATUS = :FAIL_PAID)', $params)
-            ->select('O.*,U.REAL_NAME,SG.CATEGORY_TYPE,OG.REAL_PRICE,OG.TAX_RATE,OG.BUY_NUMS,OG.SKU_CODE,OG.GOODS_TITLE,OG.REAL_PV')
-            ->join('LEFT JOIN', User::tableName() . ' AS U', 'U.ID=O.USER_ID')
-            ->join('LEFT JOIN', ApproachOrderGoods::tableName() . ' AS OG', 'OG.ORDER_SN=O.SN')
-            ->join('LEFT JOIN', ShopGoods::tableName() . ' AS SG', 'SG.ID=OG.GOODS_ID')
-            ->orderBy('O.CREATED_AT DESC');
+            ->select('O.ID,O.SN,O.USER_NAME,O.ORDER_TYPE,O.ORDER_AMOUNT,O.STATUS,O.CREATED_AT,O.PAY_TYPE,O.PAY_AT,O.CONSIGNEE,O.MOBILE,O.ADDRESS,O.CITY_NAME,O.LGA_NAME,O.PROVINCE,U.REAL_NAME')
+            ->join('LEFT JOIN', User::tableName() . ' AS U', 'U.ID=O.USER_ID');
 
         $queryAll = $orderQuery->union($orderStandardQuery, true);
         $query = (new Query())->from(['Q' => $queryAll])->select('Q.*')->distinct()->orderBy(['CREATED_AT' => SORT_DESC]);
@@ -379,35 +454,20 @@ class ShopController extends BaseController {
         ];
 
         foreach ($data['list'] as $key => $value) {
-            if($value['ORDER_TYPE']=='ZC'){
-                $data['list'][$key]['ORDER_TYPE'] = 'Welcome Pack';
-            }else{
-                $data['list'][$key]['ORDER_TYPE'] = in_array($value['PAY_TYPE'], ['cash', 'pay_stack']) ? 'Repeat Purchase': 'Points';
+            if (($value['PAY_TYPE'] == 'pay_stack') && in_array($value['STATUS'], [\Yii::$app->params['orderStatus']['notPaid']['value'], \Yii::$app->params['orderStatus']['failPaid']['value']])) {
+                // 订单中间表
+                $orderGoods = ApproachOrderGoods::findAllAsArray('ORDER_SN=:SN', [':SN' => $value['SN']], 'SKU_CODE,GOODS_TITLE,BUY_NUMS,TAX_RATE,REAL_PV,REAL_PRICE');
+            } else {
+                // 订单表
+                $orderGoods = OrderGoods::findAllAsArray('ORDER_SN=:SN', [':SN' => $value['SN']], 'SKU_CODE,GOODS_TITLE,BUY_NUMS,TAX_RATE,REAL_PV,REAL_PRICE');
             }
-            $data['list'][$key]['PAY_AT'] = $value['PAY_AT'] ? Date::convert($value['PAY_AT'],'Y-m-d H:i:s') : '';
-            $data['list'][$key]['CREATED_AT'] = $value['CREATED_AT'] ? Date::convert($value['CREATED_AT'],'Y-m-d H:i:s') : '';
-            $data['list'][$key]['CATEGORY_TYPE'] = intval($value['CATEGORY_TYPE']);
+            $data['list'][$key]['hasChildren'] = $orderGoods;
+            $data['list'][$key]['ORDER_TYPE'] = $value['ORDER_TYPE']=='ZC' ? 'Welcome Pack' : (in_array($value['PAY_TYPE'], ['cash', 'pay_stack']) ? 'Repeat Purchase': 'Points');
             $data['list'][$key]['PAY_TYPE'] = array_column(ShopGoods::SALE_TYPE, NULL, 'label')[$value['PAY_TYPE']]['name'] ?? '';
             $data['list'][$key]['STATUS'] = \Yii::$app->params['orderStatus'][$value['STATUS']]['label'] ?? '';
-            $data['list'][$key]['CATEGORY'] = array_column(ShopGoods::CATEGORY_TYPE, NULL, 'id')[$value['CATEGORY_TYPE']]['name'] ?? ShopGoods::CATEGORY_TYPE[0]['name'];
-            $data['list'][$key]['FULL_ADDRESS'] = $value['ADDRESS'];//.', '.$value['CITY_NAME'].', '.$value['LGA_NAME'];
-            if($value['CITY_NAME']){
-                $data['list'][$key]['FULL_ADDRESS'] .= ', ' . $value['CITY_NAME'];
-            }
-            if($value['LGA_NAME']){
-                $data['list'][$key]['FULL_ADDRESS'] .= ', ' . $value['LGA_NAME'];
-            }
-            if($value['PROVINCE']){
-                $data['list'][$key]['FULL_ADDRESS'] .= ', ' . Region::getCnName($value['PROVINCE']);
-            }
-//            if($value['CITY']){
-//                $data['list'][$key]['FULL_ADDRESS'] .= Region::getCnName($value['CITY']);
-//            }
-//            if($value['COUNTY']){
-//                $data['list'][$key]['FULL_ADDRESS'] .= Region::getCnName($value['COUNTY']);
-//            }
-            $data['list'][$key]['TAX_AMOUNT'] = Tool::formatPrice(($value['REAL_PRICE'] - $value['REAL_PRICE'] / (1 + $value['TAX_RATE'] / 100)) * $value['BUY_NUMS']);
-            $data['list'][$key]['TOTAL_AMOUNT'] = Tool::formatPrice($value['REAL_PRICE'] * $value['BUY_NUMS']);
+            $data['list'][$key]['FULL_ADDRESS'] = implode(', ', [$value['ADDRESS'], $value['CITY_NAME'], $value['LGA_NAME'], Region::getCnName($value['PROVINCE'])]);
+
+            unset($data['list'][$key]['ADDRESS'], $data['list'][$key]['CITY_NAME'], $data['list'][$key]['LGA_NAME'], $data['list'][$key]['PROVINCE']);
         }
 
         return static::notice($data);