Jelajahi Sumber

optimize: 優化客戶端下單的流程,整理出其過程中的各個API

joe 4 tahun lalu
induk
melakukan
85bd46fa9f

+ 1 - 1
app/api/controller/PublicController.php

@@ -270,7 +270,7 @@ class PublicController
             ['page', 1],
             ['limit', 10]
         ], $request, true);
-        $list = SystemStore::lst($latitude, $longitude, $page, $limit);
+        $list = null; // TIP: 屏蔽门店信息 SystemStore::lst($latitude, $longitude, $page, $limit);
         if (!$list) $list = [];
         $data['list'] = $list;
         $data['tengxun_map_key'] = sys_config('tengxun_map_key');

+ 32 - 14
app/api/controller/order/StoreOrderController.php

@@ -47,16 +47,21 @@ class StoreOrderController
      */
     public function confirm(Request $request)
     {
+        // TODO: 运费模板只能选择 ID 为 1 的模板?
         $temp = ShippingTemplates::get(1);
         if (!$temp) return app('json')->fail('默认模板未配置,无法下单');
         list($cartId) = UtilService::postMore(['cartId'], $request, true);
         if (!is_string($cartId) || !$cartId) return app('json')->fail('请提交购买的商品');
         $uid = $request->uid();
         $cartGroup = StoreCart::getUserProductCartList($uid, $cartId, 1);
-        if (count($cartGroup['invalid'])) return app('json')->fail($cartGroup['invalid'][0]['productInfo']['store_name'] . '已失效!');
-        if (!$cartGroup['valid']) return app('json')->fail('请提交购买的商品');
+        if (count($cartGroup['invalid'])) {
+            return app('json')->fail($cartGroup['invalid'][0]['productInfo']['store_name'] . '已失效!');
+        }
+        if (!$cartGroup['valid']) {
+            return app('json')->fail('请提交购买的商品');
+        }
         $cartInfo = $cartGroup['valid'];
-        $addr = UserAddress::where('uid', $uid)->where('is_default', 1)->find();
+        $addr = UserAddress::getUserDefaultAddress($uid); //UserAddress::where('uid', $uid)->where('is_default', 1)->find();
         $priceGroup = StoreOrder::getOrderPriceGroup($cartInfo, $addr);
         if ($priceGroup === false) {
             return app('json')->fail(StoreOrder::getErrorInfo('运费模板不存在'));
@@ -65,20 +70,22 @@ class StoreOrderController
             'offlinePostage' => sys_config('offline_postage'),
             'integralRatio' => sys_config('integral_ratio')
         ];
-        $usableCoupons = StoreCouponUser::getUsableCouponList($uid, $cartGroup, $priceGroup['totalPrice']);
+        $usableCoupons = []; // TIP 屏蔽优惠券 StoreCouponUser::getUsableCouponList($uid, $cartGroup, $priceGroup['totalPrice']);
         $usableCoupon = isset($usableCoupons[0]) ? $usableCoupons[0] : null;
-        $cartIdA = explode(',', $cartId);
+        // $cartIdA = explode(',', $cartId);
         $seckill_id = 0;
         $combination_id = 0;
         $bargain_id = 0;
-        if (count($cartIdA) == 1) {
-            $seckill_id = StoreCart::where('id', $cartId)->value('seckill_id');
-            $combination_id = StoreCart::where('id', $cartId)->value('combination_id');
-            $bargain_id = StoreCart::where('id', $cartId)->value('bargain_id');
-        }
+        // TIP 屏蔽三个活动
+        // if (count($cartIdA) == 1) {
+        //     $seckill_id = StoreCart::where('id', $cartId)->value('seckill_id');
+        //     $combination_id = StoreCart::where('id', $cartId)->value('combination_id');
+        //     $bargain_id = StoreCart::where('id', $cartId)->value('bargain_id');
+        // }
+
         $data['deduction'] = $seckill_id || $combination_id || $bargain_id;
         $data['usableCoupon'] = $usableCoupon;
-        $data['addressInfo'] = UserAddress::getUserDefaultAddress($uid);
+        $data['addressInfo'] = $addr; //UserAddress::getUserDefaultAddress($uid);
         $data['seckill_id'] = $seckill_id;
         $data['combination_id'] = $combination_id;
         $data['bargain_id'] = $bargain_id;
@@ -98,7 +105,7 @@ class StoreOrderController
         $data['integralRatio'] = $other['integralRatio'];
         $data['offline_pay_status'] = (int)sys_config('offline_pay_status') ?? (int)2;
         $data['store_self_mention'] = (int)sys_config('store_self_mention') ?? 0;//门店自提是否开启
-        $data['system_store'] = ($res = SystemStore::getStoreDispose()) ? $res : [];//门店信息
+        $data['system_store'] = []; // TIP: 屏蔽门店信息 ($res = SystemStore::getStoreDispose()) ? $res : [];//门店信息
         return app('json')->successful($data);
     }
 
@@ -120,8 +127,18 @@ class StoreOrderController
         $uid = $request->uid();
         if (StoreOrder::be(['order_id|unique' => $key, 'uid' => $uid, 'is_del' => 0]))
             return app('json')->status('extend_order', '订单已生成', ['orderId' => $key, 'key' => $key]);
-        list($addressId, $couponId, $payType, $useIntegral, $mark, $combinationId, $pinkId, $seckill_id, $formId, $bargainId, $shipping_type) = UtilService::postMore([
-            'addressId', 'couponId', ['payType', 'yue'], ['useIntegral', 0], 'mark', ['combinationId', 0], ['pinkId', 0], ['seckill_id', 0], ['formId', ''], ['bargainId', ''],
+        list($addressId, $couponId, $payType, $useIntegral, $mark, 
+            $combinationId, $pinkId, $seckill_id, $formId, $bargainId, $shipping_type) = UtilService::postMore([
+            'addressId', 
+            'couponId', 
+            ['payType', 'yue'], 
+            ['useIntegral', 0], 
+            'mark', 
+            ['combinationId', 0], 
+            ['pinkId', 0], 
+            ['seckill_id', 0], 
+            ['formId', ''], 
+            ['bargainId', ''],
             ['shipping_type', 1],
         ], $request, true);
         $payType = strtolower($payType);
@@ -145,6 +162,7 @@ class StoreOrderController
                 return app('json')->status('ORDER_EXIST', '订单生成失败,你已经参加该团了,请先支付订单', ['orderId' => StoreOrder::getStoreIdPink($pinkId, $request->uid())]);
         }
         $priceGroup = StoreOrder::cacheKeyCreateOrder($request->uid(), $key, $addressId, $payType, (int)$useIntegral, $couponId, $mark, $combinationId, $pinkId, $seckill_id, $bargainId, true, 0, $shipping_type);
+        // return app('json')->fail(StoreOrder::getErrorInfo('计算失败'));
         if ($priceGroup)
             return app('json')->status('NONE', 'ok', $priceGroup);
         else

+ 1 - 1
app/api/controller/store/StoreCouponsController.php

@@ -119,6 +119,6 @@ class StoreCouponsController
      */
     public function order(Request $request, $cartId, $price)
     {
-        return app('json')->successful(StoreCouponUser::beUsableCouponList($request->uid(), $cartId, $price));
+        return app('json')->successful([]); // TIP: 屏蔽优惠券 (StoreCouponUser::beUsableCouponList($request->uid(), $cartId, $price));
     }
 }

+ 13 - 1
app/models/store/StoreCart.php

@@ -130,6 +130,13 @@ class StoreCart extends BaseModel
         return self::where('uid', $uid)->where('id', $cartId)->update(['cart_num' => $cartNum]);
     }
 
+    /**
+     * 获取购物车商品列表
+     * 
+     * @uid
+     * @cartIds: string
+     * @status: 1/0 是否为立即购买
+     */
     public static function getUserProductCartList($uid, $cartIds = '', $status = 0)
     {
         $productInfoField = 'id,image,price,ot_price,vip_price,postage,give_integral,sales,stock,store_name,unit_name,is_show,is_del,is_postage,cost,is_sub,temp_id';
@@ -138,7 +145,10 @@ class StoreCart extends BaseModel
         $combinationInfoField = 'id,image,price,postage,sales,stock,title as store_name,is_show,is_del,is_postage,cost,temp_id,weight,volume';
         $model = new self();
         $valid = $invalid = [];
-        $model = $model->alias('c')->field('c.*')->join('store_product p', 'c.product_id = p.id')->where('c.uid', $uid)->where('c.type', 'product')->where('c.is_pay', 0)
+        $model = $model->alias('c')->field('c.*')->join('store_product p', 'c.product_id = p.id')
+            ->where('c.uid', $uid)
+            ->where('c.type', 'product')
+            ->where('c.is_pay', 0)
             ->where('c.is_del', 0);
         if (!$status) $model = $model->where('c.is_new', 0);
         if ($cartIds) $model = $model->where('c.id', 'IN', $cartIds);
@@ -146,6 +156,7 @@ class StoreCart extends BaseModel
         $list = $model->select()->toArray();
         if (!count($list)) return compact('valid', 'invalid');
         $now = time();
+        // TODO: for 里调 sql
         foreach ($list as $k => $cart) {
             if ($cart['seckill_id']) {
                 $product = StoreSeckill::field($seckillInfoField)
@@ -241,6 +252,7 @@ class StoreCart extends BaseModel
                 }
             }
         }
+        // TODO: for 里 sql
         foreach ($valid as $k => $cart) {
             if ($cart['trueStock'] < $cart['cart_num']) {
                 $cart['cart_num'] = $cart['trueStock'];

+ 5 - 2
app/models/store/StoreOrder.php

@@ -87,6 +87,7 @@ class StoreOrder extends BaseModel
                 //按照运费模板计算每个运费模板下商品的件数/重量/体积以及总金额 按照首重倒序排列
                 $temp_num = [];
                 foreach ($cartInfo as $cart) {
+                    // 运费
                     $temp = ShippingTemplates::get($cart['productInfo']['temp_id']);
                     if (!$temp) $temp = ShippingTemplates::get(1);
                     if ($temp->getData('type') == 1) {
@@ -277,7 +278,7 @@ class StoreOrder extends BaseModel
         self::beginTrans();
         try {
             $shipping_type = (int)$shipping_type;
-            $offlinePayStatus = (int)sys_config('offline_pay_status') ?? (int)2;
+            $offlinePayStatus = (int)sys_config('offline_pay_status') ?? (int)2;    //线下支付状态 2 关闭
             if ($offlinePayStatus == 2) unset(self::$payType['offline']);
             if (!array_key_exists($payType, self::$payType)) return self::setErrorInfo('选择支付方式有误!', true);
             if (self::be(['unique' => $key, 'uid' => $uid])) return self::setErrorInfo('请勿重复提交订单', true);
@@ -362,7 +363,9 @@ class StoreOrder extends BaseModel
             if (!$store_self_mention) $shipping_type = 1;
             if ($shipping_type === 1) {
                 //是否包邮
-                if ((isset($other['offlinePostage']) && $other['offlinePostage'] && $payType == 'offline')) $payPostage = 0;
+                if ((isset($other['offlinePostage']) && $other['offlinePostage'] && $payType == 'offline')) {
+                    $payPostage = 0;
+                }
                 $payPrice = (float)bcadd($payPrice, $payPostage, 2);
             } else if ($shipping_type === 2) {
                 //门店自提没有邮费支付

+ 344 - 0
docs/已有协议分析/order.md

@@ -0,0 +1,344 @@
+## confirm 订单确认
+
+POST order/confirm
+参数
+```json
+{"cartId":"17,16"}
+```
+返回
+```json
+{
+    "status":200,
+    "msg":"ok",
+    "data":{
+        "deduction":false,
+        "usableCoupon":null,
+        "addressInfo":{
+            "id":2,"real_name":"fd",
+            "phone":"13222224444",
+            "province":"北京市","city":"北京市",
+            "city_id":2,
+            "district":"东城区",
+            "detail":"dfdf",
+            "post_code":0,
+            "longitude":"0",
+            "latitude":"0",
+            "is_default":1
+        },
+        "seckill_id":0,
+        "combination_id":0,
+        "bargain_id":0,
+        "cartInfo":[{
+            "id":17,
+            "type":"product",
+            "product_id":38,
+            "product_attr_unique":"735daac5",
+            "cart_num":1,
+            "combination_id":0,
+            "seckill_id":0,
+            "bargain_id":0,
+            "productInfo":{
+                "id":38,
+                "image":"http:\/\/kaifa.crmeb.net\/uploads\/attach\/2019\/12\/28\/471f2447ac8bceb5c8569b9645f39582.jpg",
+                "price":"90.00",
+                "ot_price":"0.00",
+                "vip_price":"0.00",
+                "postage":"0.00",
+                "give_integral":"0.00",
+                "sales":28,    
+                "stock":34,
+                "store_name":"【轻奢定制名师制版】【CF联名限量典藏版】Sipv纯手工制作男鞋潮流百搭高帮休闲鞋(加绒可选)沙漠灰专柜品质44",  
+                "unit_name":"件",
+                "is_postage":0,
+                "cost":"65.00",
+                "is_sub":1,
+                "temp_id":6,
+                "attrInfo":{
+                    "product_id":38,
+                    "suk":"白色",
+                    "stock":16,
+                    "sales":14,
+                    "price":"99.00",
+                    "image":"http:\/\/kaifa.crmeb.net\/uploads\/attach\/2019\/12\/28\/471f2447ac8bceb5c8569b9645f39582. jpg",
+                    "unique":"735daac5",
+                    "cost":"65.00",
+                    "bar_code":"",
+                    "ot_price":"0.00",
+                    "weight":"1.00",
+                    "volume":"0.00", 
+                    "brokerage":"20.00",
+                    "brokerage_two":"10.00",
+                    "type":0,
+                    "quota":0,
+                    "quota_show":0
+                }
+            },
+            "truePrice":98.01,
+            "vip_truePrice":0.99,
+            "trueStock":16,
+            "costPrice":"65.00"
+        },{
+            "id":16,
+            "type":"product",
+            "product_id":46,
+            "product_attr_unique":"66c546fb",
+            "cart_num":1,
+            "combination_id":0,
+            "seckill_id":0,
+            "bargain_id":0,
+            "productInfo":{
+                "id":46,
+                "image":"http:\/\/kaifa.crmeb.net\/uploads\/attach\/2019\/11\/23\/08efb3e21bee99c130995aebe5781af0.jpg",    
+                "price":"99.00",
+                "ot_price":"168.00",
+                "vip_price":"0.00",
+                "postage":"0.00",
+                "give_integral":"0.00",
+                "sales":11,
+                "stock":789,
+                "store_name":"测试活动商品",
+                "unit_name":"件",
+                "is_postage":0,
+                "cost":"40.00",
+                "is_sub":0,
+                "temp_id":1,
+                "attrInfo":{
+                    "product_id":46,"suk":"L,红色","stock":89,"sales":11,"price":"99.00",
+                    "image":"http:\/\/kaifa.crmeb.net\/uploads\/attach\/2019\/11\/23\/08efb3e21bee99c130995aebe5781af0.jpg",
+                    "unique":"66c546fb",
+                    "cost":"40.00",
+                    "bar_code":"",
+                    "ot_price":"168.00",
+                    "weight":"0.00",
+                    "volume":"0.00",
+                    "brokerage":"10.00",
+                    "brokerage_two":"5.00",
+                    "type":0,
+                    "quota":0,
+                    "quota_show":0
+                }
+            },
+            "truePrice":98.01,
+            "vip_truePrice":0.99,
+            "trueStock":89,
+            "costPrice":"40.00"
+        }],
+        "priceGroup":{
+            "storePostage":"2.00",
+            "storeFreePostage":1000,
+            "totalPrice":"196.02",
+            "costPrice":"105.00",
+            "vipPrice":"1.98"
+        },
+        "orderKey":"2a86d962c530dfc07a3f7b68605a649a",
+        "offlinePostage":"0",
+        "userInfo":{
+            "uid":3,
+            "real_name":"",
+            "birthday":0,
+            "card_id":"",
+            "partner_id":0,
+            "group_id":0,
+            "nickname":"Holiday",
+            "avatar":"https:\/\/thirdwx.qlogo.cn\/mmopen\/vi_32\/DYAIOgq83eoFkYic0RzPfgI1LqAUGgzsWlmQfN4Ta799VZfXR3tLvia4s0apiaLiahk2PS9F9eNKib3zJQ0WwQr4dXw\/132","phone":"12122223333",
+            "now_money":"8885.00",
+            "brokerage_price":"1700.00",
+            "integral":"380.00",
+            "sign_num":0,
+            "level":1,
+            "spread_uid":0,
+            "spread_time":0,
+            "user_type":"routine",
+            "is_promoter":1,
+            "pay_count":3,
+            "spread_count":0,
+            "addres":"",
+            "adminid":0,
+            "login_type":"",
+            "vip":true,
+            "vip_id":1,
+            "discount":"99.00"
+        },
+        "integralRatio":"1",
+        "offline_pay_status":2,
+        "store_self_mention":1,
+        "system_store":[]
+    }
+}
+```
+
+## store_list?latitude=11.5541&longitude=104.9246&page=1&limit=10 自体门店列表
+
+GET store_list
+
+returns
+```json
+{
+    "status":200,
+    "msg":"ok",
+    "data":{
+        "list":[],
+        "tengxun_map_key":"BLOBZ-KRICU-WMXVX-2225W-XEPTQ-HKFFV"
+    }
+}
+```
+
+## coupons/order/:price?cartId=18,19 优惠券订单列表
+
+GET
+
+returns
+```json
+{"status":200,"msg":"ok","data":[]}
+```
+
+## computed 计算订单
+
+POST computed/0654a378edfc547e42aa539da68acb93
+
+params:
+```json
+{"addressId":2,"useIntegral":0,"couponId":0,"shipping_type":1,"payType":"yue"}
+```
+
+returns
+```json
+
+```
+
+## /order/create/:key 创建订单
+
+POST
+
+params
+```json
+{
+    "real_name":"",
+    "phone":"",
+    "addressId":2,
+    "useIntegral":0,
+    "couponId":0,
+    "payType":"yue",
+    "pinkId":0,
+    "seckill_id":0,
+    "combinationId":0,
+    "bargainId":0,
+    "from":"weixinh5",
+    "mark":"",
+    "shipping_type":1,
+    "store_id":0
+}
+```
+
+returns
+```json
+{
+    "status":200,
+    "msg":"余额支付成功",
+    "data":{
+        "status":"SUCCESS",
+        "result":{
+            "orderId":"wx163030474548336531",
+            "key":"825e7facf89cd222f0db8e72c8cbd9f3"
+        }
+    }
+}
+```
+
+## order/detail/wx163030474548336531 订单详情
+
+GET
+
+returns
+```json
+{
+    "status":200,
+    "msg":"ok",
+    "data":{
+        "id":10,
+        "order_id":"wx163030474548336531",
+        "uid":3,
+        "real_name":"fd",
+        "user_phone":"13222224444",
+        "user_address":"北京市 北京市 东城区 dfdf",
+        "cart_id":[19,18],
+        "freight_price":"0.00",
+        "total_num":2,"total_price":"196.02","total_postage":"2.00","pay_price":"198.02",
+        "pay_postage":"2.00",
+        "deduction_price":"0.00","coupon_id":0,"coupon_price":"0.00",
+        "paid":1,"pay_time":1630304745,"pay_type":"yue","add_time":1630304745,"status":0,"refund_status":0,"refund_reason_wap_img":null,
+        "refund_reason_wap_explain":null,
+        "refund_reason_time":null,"refund_reason_wap":null,
+        "refund_reason":null,"refund_price":"0.00","delivery_name":null,"delivery_type":null,"delivery_id":null,"gain_integral":"0.00","use_integral":"0.00",
+        "back_integral":null,"mark":"","is_del":0,
+        "unique":"825e7facf89cd222f0db8e72c8cbd9f3",
+        "remark":null,"mer_id":0,"is_mer_check":0,
+        "combination_id":0,"pink_id":0,"cost":"105.00",
+        "seckill_id":0,"bargain_id":0,"verify_code":"",
+        "store_id":0,"shipping_type":1,"clerk_id":0,"is_channel":2,
+        "is_remind":0,"is_system_del":0,"add_time_y":"2021-08-30",
+        "add_time_h":"14:25:45","system_store":null,"mapKey":"BLOBZ-KRICU-WMXVX-2225W-XEPTQ-HKFFV",
+        "cartInfo":[{
+            "id":18,
+            "type":"product",
+            "product_id":46,"product_attr_unique":"66c546fb",
+            "cart_num":1,"combination_id":0,"seckill_id":0,
+            "bargain_id":0,
+            "productInfo":{
+                "id":46,
+                "image":"http:\/\/kaifa.crmeb.net\/uploads\/attach\/2019\/11\/23\/08efb3e21bee99c130995aebe5781af0.jpg",
+                "price":"99.00",
+                "ot_price":"168.00","vip_price":"0.00",
+                "postage":"0.00","give_integral":"0.00","sales":12,"stock":788,
+                "store_name":"测试活动商品","unit_name":"件",
+                "is_postage":0,"cost":"40.00","is_sub":0,
+                "temp_id":1,
+                "attrInfo":{
+                    "product_id":46,
+                    "suk":"L,红色","stock":88,"sales":12,"price":"99.00",
+                    "image":"http:\/\/kaifa.crmeb.net\/uploads\/attach\/2019\/11\/23\/08efb3e21bee99c130995aebe5781af0.jpg",
+                    "unique":"66c546fb",
+                    "cost":"40.00","bar_code":"","ot_price":"168.00","weight":"0.00",
+                    "volume":"0.00","brokerage":"10.00","brokerage_two":"5.00","type":0,"quota":0,
+                    "quota_show":0
+                }
+            },
+            "truePrice":98.01,"vip_truePrice":0.99,
+            "trueStock":88,"costPrice":"40.00","unique":"6e79ed05baec2754e25b4eac73a332d2",
+            "is_reply":0,"activity":"","result":null,
+            "reparation":0,
+            "mine":0
+        },{
+            "id":19,"type":"product","product_id":38,"product_attr_unique":"735daac5","cart_num":1,
+            "combination_id":0,"seckill_id":0,"bargain_id":0,
+            "productInfo":{
+                "id":38,
+                "image":"http:\/\/kaifa.crmeb.net\/uploads\/attach\/2019\/12\/28\/471f2447ac8bceb5c8569b9645f39582.jpg",
+                "price":"90.00","ot_price":"0.00","vip_price":"0.00","postage":"0.00","give_integral":"0.00","sales":29,"stock":33,
+                "store_name":"【轻奢定制名师制版】【CF联名限量典藏版】Sipv纯手工制作男鞋潮流百搭高帮休闲鞋(加绒可选)沙漠灰专柜品质44","unit_name":"件","is_postage":0,"cost":"65.00","is_sub":1,"temp_id":6,
+                "attrInfo":{
+                    "product_id":38,"suk":"白色","stock":15,"sales":15,"price":"99.00",
+                    "image":"http:\/\/kaifa.crmeb.net\/uploads\/attach\/2019\/12\/28\/471f2447ac8bceb5c8569b9645f39582.jpg",
+                    "unique":"735daac5","cost":"65.00","bar_code":"","ot_price":"0.00","weight":"1.00","volume":"0.00","brokerage":"20.00","brokerage_two":"10.00","type":0,"quota":0,
+                    "quota_show":0
+                }
+            },
+            "truePrice":98.01,"vip_truePrice":0.99,
+            "trueStock":15,"costPrice":"65.00",
+            "unique":"ab7314887865c4265e896c6e209d1cd6",
+            "is_reply":0,"activity":"","result":null,"reparation":0,
+            "mine":0
+        }],
+        "_status":{
+            "_type":1,
+            "_title":"未发货",
+            "_msg":"商家未发货,请耐心等待","_class":"state-nfh",
+            "_payType":"余额支付"
+        },
+        "_pay_time":"2021-08-30 14:25:45",
+        "_add_time":"2021-08-30 14:25:45",
+        "status_pic":"http:\/\/twongstatic.shotshock.shop\/order_1.gif",
+        "offlinePayStatus":2
+    }
+}
+```