Browse Source

优化用户下单方法-进行中

sunxbiao 1 year ago
parent
commit
d84b3852c0

+ 12 - 0
app/common/enum/CommonEnum.php

@@ -0,0 +1,12 @@
1
+<?php
2
+
3
+namespace app\common\enum;
4
+
5
+class CommonEnum
6
+{
7
+    const IS_DEL = [
8
+        'No' => ['code' => 0, 'name' => '未删除'],
9
+        'Yes' => ['code' => 1, 'name' => '已删除'],
10
+        'Pending' => ['code' => 2, 'name' => '待删除']
11
+    ];
12
+}

+ 13 - 0
app/common/enum/user/UserEnum.php

@@ -0,0 +1,13 @@
1
+<?php
2
+
3
+namespace app\common\enum\user;
4
+
5
+use app\common\enum\CommonEnum;
6
+
7
+class UserEnum extends CommonEnum
8
+{
9
+    const STATUS = [
10
+        'Disabled' => ['code' => 0, 'name' => '禁用'],
11
+        'Normal' => ['code' => 1, 'name' => '正常']
12
+    ];
13
+}

+ 34 - 21
app/controller/api/store/order/StoreOrder.php

@@ -11,6 +11,7 @@
11
 namespace app\controller\api\store\order;
11
 namespace app\controller\api\store\order;
12
 
12
 
13
 
13
 
14
+use app\common\enum\user\UserEnum;
14
 use app\common\model\store\order\StoreRefundOrder;
15
 use app\common\model\store\order\StoreRefundOrder;
15
 use app\common\model\system\admin\Log;
16
 use app\common\model\system\admin\Log;
16
 use app\common\repositories\merchant\MerchantRepository;
17
 use app\common\repositories\merchant\MerchantRepository;
@@ -18,6 +19,7 @@ use app\common\repositories\store\product\ProductAttrValueRepository;
18
 use app\common\repositories\user\UserAddressRepository;
19
 use app\common\repositories\user\UserAddressRepository;
19
 use app\common\repositories\user\UserRepository;
20
 use app\common\repositories\user\UserRepository;
20
 use app\traits\ShouxinyiApiRequest;
21
 use app\traits\ShouxinyiApiRequest;
22
+use app\validate\api\store\order\CreateValidate;
21
 use crmeb\basic\BaseController;
23
 use crmeb\basic\BaseController;
22
 use app\common\repositories\store\order\StoreCartRepository;
24
 use app\common\repositories\store\order\StoreCartRepository;
23
 use app\common\repositories\store\order\StoreGroupOrderRepository;
25
 use app\common\repositories\store\order\StoreGroupOrderRepository;
@@ -692,16 +694,27 @@ class StoreOrder extends BaseController
692
     }
694
     }
693
 
695
 
694
     /**
696
     /**
695
-     * @param StoreCartRepository $cartRepository
696
-     * @return mixed
697
-     * @author xaboy
698
-     * @day 2020/6/10
697
+     * @param CreateValidate $createValidate
698
+     * @return false|string|\think\response\Json
699
+     * @throws DataNotFoundException
700
+     * @throws DbException
701
+     * @throws ModelNotFoundException
702
+     * @throws \Throwable
699
      */
703
      */
700
-    public function createOrderNew(StoreCartRepository $cartRepository)
704
+    public function createOrderNew(CreateValidate $createValidate)
701
     {
705
     {
702
         // 1、接收参数
706
         // 1、接收参数
707
+        $validationResult = $createValidate->validateRequest();
708
+        // 如果验证失败,返回错误
709
+        if ($validationResult['status'] == 'error') {
710
+            return json($validationResult);
711
+        }
712
+        // 验证通过,继续处理数据
713
+        $allParams = $validationResult['data'];
714
+
715
+
703
         $allParams = input();
716
         $allParams = input();
704
-        \think\facade\Log::info("createOrder params" . json_encode($allParams));
717
+
705
         $cartId = $allParams['cart_id'] ?? null;
718
         $cartId = $allParams['cart_id'] ?? null;
706
         if (is_null($cartId)) {
719
         if (is_null($cartId)) {
707
             return app('json')->fail("缺少购物车ID参数!");
720
             return app('json')->fail("缺少购物车ID参数!");
@@ -718,6 +731,15 @@ class StoreOrder extends BaseController
718
         $mer_id = $this->request->param('mer_id', '');//分享id
731
         $mer_id = $this->request->param('mer_id', '');//分享id
719
         $uid = $this->request->uid();
732
         $uid = $this->request->uid();
720
 
733
 
734
+        // 验证用户信息
735
+        try {
736
+            $userData = Db::name('user')
737
+                ->where('uid', $uid)
738
+                ->where('is_del', '=', UserEnum::IS_DEL['No']['code'])
739
+                ->find();
740
+        } catch (\Exception $e) {
741
+            return app('json')->fail('获取当前用户信息失败');
742
+        }
721
 
743
 
722
         // 2、加锁,他之前加的锁好像在锁狗屎,毛线都没锁住, 而且为什么要锁用户
744
         // 2、加锁,他之前加的锁好像在锁狗屎,毛线都没锁住, 而且为什么要锁用户
723
         // 增加锁,防止同一用户重读点击
745
         // 增加锁,防止同一用户重读点击
@@ -759,27 +781,18 @@ class StoreOrder extends BaseController
759
         $userAddressRepository = app()->make(UserAddressRepository::class);
781
         $userAddressRepository = app()->make(UserAddressRepository::class);
760
         try {
782
         try {
761
             $addressData = $userAddressRepository->getWhere(['uid' => $uid, 'address_id' => $addressId]);
783
             $addressData = $userAddressRepository->getWhere(['uid' => $uid, 'address_id' => $addressId]);
762
-        } catch (\Exception $e) {
763
-            return app('json')->fail('获取用户收货地址失败');
764
-        }
765
-        // 如果不是会员专区的商品,则一定要用户完善的收货地址
766
-        if ($mer_id != 496) {
767
-            if (!$addressData['city_id']) {
784
+            // 如果不是会员专区的商品,则一定要用户完善的收货地址
785
+            if (empty($addressData['city_id'] ?? null)) {
768
                 return app('json')->fail('请选择正确的收货地址');
786
                 return app('json')->fail('请选择正确的收货地址');
769
             }
787
             }
770
-            if ($addressData['code_list'] == '') {
788
+            if (empty($addressData['code_list'] ?? null)) {
771
                 return app('json')->fail('地址需要选择4级地址!请修改地址!');
789
                 return app('json')->fail('地址需要选择4级地址!请修改地址!');
772
             }
790
             }
773
-        }
774
-
775
-        // 判断组合支付逻辑,积分、VR、京豆
776
-        try {
777
-            $userData = Db::name("user")
778
-                ->where("uid", $uid)
779
-                ->find();
780
         } catch (\Exception $e) {
791
         } catch (\Exception $e) {
781
-            return app('json')->fail('获取当前用户信息失败');
792
+            return app('json')->fail('获取用户收货地址失败');
782
         }
793
         }
794
+
795
+
783
         $array_fzone_paytype_all = [
796
         $array_fzone_paytype_all = [
784
             'fzone_pay_jingdou' => 0,
797
             'fzone_pay_jingdou' => 0,
785
             'fzone_pay_vr' => 0,
798
             'fzone_pay_vr' => 0,

+ 55 - 0
app/validate/api/store/order/CreateValidate.php

@@ -0,0 +1,55 @@
1
+<?php
2
+
3
+namespace app\validate\api\store\order;
4
+
5
+use app\Request;
6
+use think\facade\Log;
7
+use think\Validate;
8
+
9
+class CreateValidate extends Validate
10
+{
11
+    protected $request;
12
+
13
+    public function __construct(Request $request)
14
+    {
15
+        $this->request = $request;
16
+        parent::__construct();
17
+    }
18
+
19
+    protected $rule = [
20
+        'cart_id' => 'require|integer',
21
+        'fzone_paytype' => 'require|json',
22
+        'address_id' => 'require|integer|gt:0',
23
+        'pay_type' => 'require|integer',
24
+        'share_id' => 'integer',  // share_id 变为非必填项
25
+    ];
26
+
27
+    protected $message = [
28
+        'cart_id.require' => '购物车ID不能为空!',
29
+        'cart_id.integer' => '购物车ID必须是整数!',
30
+        'fzone_paytype.require' => '支付方式不能为空!',
31
+        'fzone_paytype.json' => '支付方式必须是有效的JSON格式!',
32
+        'address_id.require' => '地址ID不能为空!',
33
+        'address_id.integer' => '地址ID必须是整数!',
34
+        'address_id.gt' => '地址ID必须大于0!',
35
+        'pay_type.require' => '支付方式不能为空!',
36
+        'pay_type.integer' => '支付方式类型错误!',
37
+        'share_id.integer' => 'share_id 必须是整数!',  // 错误信息,适用于share_id
38
+    ];
39
+
40
+
41
+    /**
42
+     * 将Request参数获取与验证封装到验证类中
43
+     *
44
+     * @return array
45
+     */
46
+    public function validateRequest(): array
47
+    {
48
+        $data = $this->request->post();
49
+        Log::info('request-api-store-order-create-params:' . json_encode($data));
50
+        if (!$this->check($data)) {
51
+            return ['status' => 'error', 'message' => $this->getError()];
52
+        }
53
+        return ['status' => 'success', 'data' => $data];
54
+    }
55
+}