Browse Source

卡券和订单码调整

zhangxiaobin 1 year ago
parent
commit
5ddd595664

+ 2 - 2
application/api/controller/Order.php

@@ -180,11 +180,11 @@ class Order extends Api
                 throw new Exception('未找到相关信息');
             }
 
-            $text = 'hexiaoorder_'.$id;
+            $text = 'order_'.$modelData['check_code'];
             $logo = '';
             $filRoute = '/uploads/temp/';
             $saveDir = ROOT_PATH.'public'.DS.'uploads'.DS.'temp'.DS;
-            $fileStr = md5('order_'.$id);
+            $fileStr = md5($text);
             $localpng = $saveDir.$fileStr.'.png';
             //验证存在直接返回
             $userCouponsUrl = $_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['HTTP_HOST'].$filRoute.$fileStr.'.png';

+ 12 - 0
application/api/controller/Pay.php

@@ -5,6 +5,7 @@ namespace app\api\controller;
 use app\common\controller\Api;
 use app\common\service\OrderService;
 use app\common\service\UserService;
+use fast\Random;
 use think\Db;
 use addons\epay\library\Service;
 use think\Exception;
@@ -303,9 +304,20 @@ class Pay extends Api
             ->join($c,$c.'.id = '.$rg.'.coupon_id','LEFT')->where($rechargeGiftWhere)->select();
         if (!empty($rechargeGift)) {
             $time = time();
+            foreach ($rechargeGift as $k => $v) {
+                $checkCode[] = Random::alnum(8);
+            }
+            $orderService = new OrderService();//防重复
+            $checkCodeRes = $orderService->getCheckCoupons($checkCode);
             foreach ($rechargeGift as $key => $value) {
                 $endtime = $time + 86400 * $value['days'];
+                if ($checkCodeRes['status']) {
+                    $checkCodeStr = isset($checkCodeRes['data'][$key]) ? $checkCodeRes['data'][$key] : '';
+                } else {
+                    $checkCodeStr = Random::alnum(8);
+                }
                 $userCouponsData[] = [
+                    'check_code' => $checkCodeStr,
                     'user_id' => $orderInfo['user_id'],
                     'company_id' => $orderInfo['company_id'],
                     'coupons_id' => $value['coupon_id'],

+ 2 - 2
application/api/controller/UserCoupons.php

@@ -76,11 +76,11 @@ class UserCoupons extends Api
             if ($modelData['endtime'] < time() || $modelData['remain'] < 1) {
                 throw new Exception('该券已无法使用');
             }
-            $text = 'hexiaocoupon_'.$id;
+            $text = 'coupon_'.$modelData['check_code'];
             $logo = '';
             $filRoute = '/uploads/temp/';
             $saveDir = ROOT_PATH.'public'.DS.'uploads'.DS.'temp'.DS;
-            $fileStr = md5('coupon_'.$id);
+            $fileStr = md5($text);
             $localpng = $saveDir.$fileStr.'.png';
             //验证存在直接返回
             $userCouponsUrl = $_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['HTTP_HOST'].$filRoute.$fileStr.'.png';

+ 72 - 0
application/common/service/OrderService.php

@@ -2,6 +2,7 @@
 namespace app\common\service;
 
 use addons\epay\library\Service;
+use fast\Random;
 use think\Db;
 use think\Exception;
 
@@ -188,7 +189,16 @@ class OrderService
             $userCarWhere['id'] = $carId;
             $userCar = Db::name('user_car')->where($userCarWhere)->find();
             //生成订单
+            $checkCode[] = Random::alnum(8);
+            $orderService = new OrderService();//防重复
+            $checkCodeRes = $orderService->getCheckOrder($checkCode);
+            if ($checkCodeRes['status']) {
+                $checkCodeStr = isset($checkCodeRes['data'][0]) ? $checkCodeRes['data'][0] : '';
+            } else {
+                $checkCodeStr = Random::alnum(8);
+            }
             $orderData = [
+                'check_code'      => $checkCodeStr,
                 'orderno'         => createUniqueNo('O', $userId),//订单号
                 'ordertype'       => 3,//类型:1=预约下单,2=在线下单,3=套餐订单
                 'company_id'      => $companyId,//门店ID
@@ -269,4 +279,66 @@ class OrderService
         }
         return $result;
     }
+
+    /**
+     * 查看是否重复-卡券
+     * @return void
+     */
+    public function getCheckCoupons($checkCode=[])
+    {
+        try {
+            if (!empty($checkCode)) {
+                $where['check_code'] = ['in', $checkCode];
+                $userCoupons = Db::name('user_coupon')->field('id,check_code')->where($where)->select();
+                if (!empty($userCoupons)) {
+                    $checkCodeDbArr = array_column($userCoupons,'check_code');
+                    foreach ($checkCode as $key => $code) {
+                        if (in_array($code,$checkCodeDbArr)) {
+                            $checkCode[$key] = Random::alnum(8);
+                        }
+                    }
+                    $checkCodeRes = $this->getCheckCoupons($checkCode);
+                    if ($checkCodeRes['status']) {
+                        $checkCode = $checkCodeRes['data'];
+                    }
+                }
+            }
+            $result['data'] = $checkCode;
+        } catch (Exception $e) {
+            $result['status'] = 0;
+            $result['msg'] = $e->getMessage();
+        }
+        return $result;
+    }
+
+    /**
+     * 查看是否重复-订单
+     * @return void
+     */
+    public function getCheckOrder($checkCode=[])
+    {
+        try {
+            if (!empty($checkCode)) {
+                $where['check_code'] = ['in', $checkCode];
+                $userCoupons = Db::name('order')->field('id,check_code')->where($where)->select();
+                if (!empty($userCoupons)) {
+                    $checkCodeDbArr = array_column($userCoupons,'check_code');
+                    foreach ($checkCode as $key => $code) {
+                        if (in_array($code,$checkCodeDbArr)) {
+                            $checkCode[$key] = Random::alnum(8);
+                        }
+                    }
+                    $checkCodeRes = $this->getCheckOrder($checkCode);
+                    if ($checkCodeRes['status']) {
+                        $checkCode = $checkCodeRes['data'];
+                    }
+                }
+            }
+            $result['data'] = $checkCode;
+        } catch (Exception $e) {
+            $result['status'] = 0;
+            $result['msg'] = $e->getMessage();
+        }
+        return $result;
+    }
 }