Browse Source

Merge branch 'master' into custom_manager
合并

yb 6 months ago
parent
commit
92de5c0733

+ 62 - 23
app/admin/controller/coupon/CouponController.php

@@ -6,6 +6,7 @@ use app\admin\validate\coupon\CouponValidate;
 use app\admin\validate\device\DeviceValidate;
 use app\controller\Curd;
 use app\model\Coupon;
+use app\model\CouponDetail;
 use app\model\CouponGoods;
 use app\model\Device;
 use app\model\Member;
@@ -37,10 +38,10 @@ class CouponController extends Curd
      */
     public function select(Request $request): Response
     {
-        $joinCouponCategoryId = $request->get('join_coupon_category_id',[]);
+        $joinCouponCategoryId = $request->get('join_coupon_category_id', []);
         [$where, $format, $limit, $field, $order] = $this->selectInput($request);
-        if (!empty($joinCouponCategoryId)){
-            $where['join_coupon_category_id'] = ['in',implode(',',$joinCouponCategoryId)];
+        if (!empty($joinCouponCategoryId)) {
+            $where['join_coupon_category_id'] = ['in', implode(',', $joinCouponCategoryId)];
         }
         $order = $request->get('order', 'desc');
         $field = $field ?? 'coupon_addtimes';
@@ -126,9 +127,9 @@ class CouponController extends Curd
                     $item['premises_range'] = 'all';
                 }
             }
-            if (!empty($item['coupon_validdate_begin']) && !empty($item['coupon_validdate_end'])){
+            if (!empty($item['coupon_validdate_begin']) && !empty($item['coupon_validdate_end'])) {
                 $item['coupon_use_time'] = 'date';
-            }elseif ($item['coupon_validdate_day']){
+            } elseif ($item['coupon_validdate_day']) {
                 $item['coupon_use_time'] = 'day';
             }
         }
@@ -181,6 +182,9 @@ class CouponController extends Curd
             $this->doInsert($data);
             // 关联优惠券和商品、规格
             $this->insertCouponGoods($goods, $data['coupon_id']);
+            if ($data['coupon_number'] > 0) {
+                $this->generateCouponDetail($data['coupon_id'], $data['coupon_number']);
+            }
             Db::commit();
 
             return json_success('success');
@@ -228,18 +232,21 @@ class CouponController extends Curd
         $params = $request->post();
         $data = $this->inputFilter($params);
         $data['coupon_id'] = "CU" . str_pad(SysSerial::getSerial(), 6, '0') . random_string(6, 'up');
-        if (!empty($params['coupon_use_time']) && $params['coupon_use_time'] == 'date'){
+        if (!empty($params['coupon_use_time']) && $params['coupon_use_time'] == 'date') {
             $data['coupon_validdate_day'] = null;
             $data['coupon_validdate_begin'] = date("Y-m-d H:i:s", strtotime($data['coupon_validdate_begin']));
             $data['coupon_validdate_end'] = date("Y-m-d H:i:s", strtotime($data['coupon_validdate_end']));
-        }elseif (!empty($params['coupon_use_time']) && $params['coupon_use_time'] == 'day'){
+        } elseif (!empty($params['coupon_use_time']) && $params['coupon_use_time'] == 'day') {
             $data['coupon_validdate_begin'] = null;
             $data['coupon_validdate_end'] = null;
         }
         $couponJson = [];
         if ($params['coupon_use_member'] == 'member' && isset($params['member_list'])) {
             $couponJson['member']['list'] = $params['member_list'];
+            $couponJson['member']['range'] = '';
+            $couponJson['member']['where'] = '';
         } else if ($params['coupon_use_member'] == 'condition') {
+            $couponJson['member']['list'] = [];
             if (isset($params['condition']) && $params['condition'] == 'is_vip') {
                 $couponJson['member']['range'] = 'VIP会员';
                 $couponJson['member']['where'] = urlencode(" `member_is_vip` = 'Y'");
@@ -251,8 +258,9 @@ class CouponController extends Curd
                 $couponJson['member']['where'] = urlencode(" `member_classify` = 'MEMBER'");
             }
         } else if ($params['coupon_use_member'] == 'all') {
-            $couponJson['member']['range'] = '不限';
-            $couponJson['member']['where'] = urlencode(" 1");
+            $couponJson['member']['list'] = [];
+            $couponJson['member']['range'] = '全部员工';
+            $couponJson['member']['where'] = '';
         }
 
         if (!empty($params['premises_range']) && $params['premises_range'] == 'all') {
@@ -284,8 +292,24 @@ class CouponController extends Curd
         Db::beginTransaction();
         try {
             [$id, $data] = $this->updateInput($request);
+            $originCouponNumber = $data['origin_coupon_number'];
+            unset($data['origin_coupon_number']);
             $this->updateCouponGoods($request->post('goodsContentList'), $id);
             $this->doUpdate($id, $data);
+            if ($originCouponNumber == 0 && $data['coupon_number'] != 0) {
+                // 查已领取多少了
+                $detailCount = CouponDetail::where('join_detail_coupon_id', $id)->count();
+                if ($detailCount < $data['coupon_number']) {
+                    $this->generateCouponDetail($id, $data['coupon_number'] - $detailCount);
+                }
+            }else if($originCouponNumber < $data['coupon_number']){
+                $this->generateCouponDetail($id, $data['coupon_number'] - $originCouponNumber);
+            }else if($originCouponNumber > $data['coupon_number']){
+                CouponDetail::where('join_detail_coupon_id',$id)
+                    ->where('join_coupon_detail_member_id','')
+                    ->limit($originCouponNumber-$data['coupon_number'])
+                    ->delete();
+            }
             Db::commit();
 
             return json_success('success');
@@ -340,15 +364,17 @@ class CouponController extends Curd
         $primary_key = $this->model->getKeyName();
         $id = $request->post($primary_key);
         $data = $this->inputFilter($params);
-        if (!empty($params['coupon_use_time']) && $params['coupon_use_time'] == 'date'){
+        if (!empty($params['coupon_use_time']) && $params['coupon_use_time'] == 'date') {
             $data['coupon_validdate_day'] = null;
             $data['coupon_validdate_begin'] = date("Y-m-d H:i:s", strtotime($data['coupon_validdate_begin']));
             $data['coupon_validdate_end'] = date("Y-m-d H:i:s", strtotime($data['coupon_validdate_end']));
-        }elseif (!empty($params['coupon_use_time']) && $params['coupon_use_time'] == 'day'){
+        } elseif (!empty($params['coupon_use_time']) && $params['coupon_use_time'] == 'day') {
             $data['coupon_validdate_begin'] = null;
             $data['coupon_validdate_end'] = null;
         }
         $model = $this->model->find($id);
+        // 原数量
+        $data['origin_coupon_number'] = $model->coupon_number;
         if (!$model) {
             throw new BusinessException('记录不存在', 2);
         }
@@ -358,12 +384,12 @@ class CouponController extends Curd
         }
         if ($params['coupon_use_member'] == 'member' && isset($params['member_list'])) {
             $couponJson['member']['list'] = $params['member_list'];
-            if (isset($couponJson['member']['range'])) {
-                $couponJson['member']['range'] = '';
-            }
-            if (isset($couponJson['member']['where'])) {
-                $couponJson['member']['where'] = '';
-            }
+//            if (isset($couponJson['member']['range'])) {
+            $couponJson['member']['range'] = '';
+//            }
+//            if (isset($couponJson['member']['where'])) {
+            $couponJson['member']['where'] = '';
+//            }
         } else if ($params['coupon_use_member'] == 'condition') {
             if (isset($params['condition']) && $params['condition'] == 'is_vip') {
                 $couponJson['member']['range'] = 'VIP会员';
@@ -375,12 +401,13 @@ class CouponController extends Curd
                 $couponJson['member']['range'] = '会员';
                 $couponJson['member']['where'] = urlencode(" `member_classify` = 'MEMBER'");
             }
-            if (isset($couponJson['member']['list'])) {
-                $couponJson['member']['list'] = [];
-            }
+//            if (isset($couponJson['member']['list'])) {
+            $couponJson['member']['list'] = [];
+//            }
         } else if ($params['coupon_use_member'] == 'all') {
-            $couponJson['member']['range'] = '不限';
-            $couponJson['member']['where'] = urlencode(" 1");
+            $couponJson['member']['list'] = [];
+            $couponJson['member']['range'] = '全部员工';
+            $couponJson['member']['where'] = '';
 
             if (isset($couponJson['member']['list'])) {
                 $couponJson['member']['list'] = [];
@@ -435,7 +462,7 @@ class CouponController extends Curd
             if (isset($couponGood['goods'])) {
                 $content['goods_name'] = $couponGood['goods']['name'];
                 $content['goods_classify'] = $couponGood['goods']['goods_classify'];
-                $content['goods_cover'] = getenv('STORAGE_DOMAIN').$couponGood['goods']['goods_cover'];
+                $content['goods_cover'] = getenv('STORAGE_DOMAIN') . $couponGood['goods']['goods_cover'];
             }
             if (isset($couponGood['sku']) && isset($couponGood['sku']['goods_sku_specs_json'])) {
 //                $skuSpecsJson = json_decode($couponGood['sku']['goods_sku_specs_json'], true);
@@ -544,4 +571,16 @@ class CouponController extends Curd
             return json_fail('删除失败');
         }
     }
+
+    private function generateCouponDetail($couponId, $nbr)
+    {
+        for ($i = 0; $i < intval($nbr); $i++) {
+            CouponDetail::insert([
+                'coupon_detail_id' => 'CUDT' . str_pad(SysSerial::getSerial(), 6, '0') . random_string(6, 'up'),
+                'join_detail_coupon_id' => $couponId,
+                'coupon_detail_status' => 'PENDING',
+                'coupon_detail_addtimes' => time()
+            ]);
+        }
+    }
 }

+ 52 - 9
app/admin/controller/order/WholeController.php

@@ -767,6 +767,7 @@ class WholeController extends Curd
         if ($order->order_status_system != 'PAYING') {
             return json_fail('订单不是可支付状态');
         }
+
         if (!empty($order->order_config_json)) {
             $orderConfigJson = json_decode($order->order_config_json, true);
             if (isset($orderConfigJson['premises'])) {
@@ -794,6 +795,9 @@ class WholeController extends Curd
         }
         Db::beginTransaction();
         try {
+            // 存储优惠信息
+            $order->order_discount_json = json_encode($this->discountRecord($order->order_discount_json, $params));
+
             // 组合支付时,付款码应收金额
             $qrcodePayAmount = 0;
             if ($params['pay_category'] == 'OFFLINE') {
@@ -1047,9 +1051,6 @@ class WholeController extends Curd
             if ($order->order_status_payment == 'SUCCESS' && $params['goods_classify'] == 'VIP') {
                 $order->order_is_complete = 'Y';
             }
-            // 存储优惠信息
-
-
             // 主订单
             $order->save();
 
@@ -1197,6 +1198,11 @@ class WholeController extends Curd
             }
             _syslog("订单", "订单支付成功");
             return json_success('支付成功');
+        }catch (BusinessException $e){
+            dump($e->getMessage());
+            Db::rollBack();
+            _syslog("订单", "订单支付失败:".$e->getMessage());
+            return json_fail("支付失败:".$e->getMessage());
         } catch (\Exception $e) {
             dump($e->getMessage());
             Db::rollBack();
@@ -1211,14 +1217,44 @@ class WholeController extends Curd
         if (!empty($orderDiscountJson)) {
             $json = json_decode($orderDiscountJson, true);
         }
-        $orderDiscountAmount = 0;
-        
-        $data = [
-            'coupon_id'=>$params['coupon_id'] ?? null,
-            'coupon_value' =>''
-        ];
+        try {
+            if ($params['preferential'] == 'wipe') {
+                if (intval($params['order_amount_total'] / 10) * 10 != $params['order_amount_pay']) {
+                    throw new BusinessException("抹零后实际支付金额错误");
+                }
+                $params['order_discount_amount'] = $params['order_amount_total'] - $params['order_amount_pay'];
+                $couponClassifyDesc = $couponClassify = '抹零';
+            } else if ($params['preferential'] == 'custom') {
+                if ($params['order_amount_total'] - $params['order_discount_amount'] != $params['order_amount_pay']) {
+                    throw new BusinessException("餐厅前台优惠后实际支付金额错误");
+                }
+                $couponClassifyDesc = $couponClassify = '餐厅前台优惠';
+            } else if (intval($params['preferential']) < 100 && intval($params['preferential']) >= 50) {
+                if (($params['order_amount_total'] * intval($params['preferential'])) / 100 !== $params['order_amount_pay']) {
+                    throw new BusinessException("折扣后实际支付金额错误");
+                }
+                $couponClassify = '折扣';
+                $couponClassifyDesc = $params['preferential'] . '折';
+                $params['order_discount_amount'] = $params['order_amount_total'] - $params['order_amount_pay'];
+            } else{
+                return $json;
+            }
+            $json[date('Y-m-d H:i:s')] = [
+                'coupon_id' => $params['coupon_id'] ?? null,
+                'coupon_value' => $params['order_discount_amount'] ?? '',
+                'coupon_classify' => $couponClassify,
+                'coupon_detail_id' => [$couponClassifyDesc],
+                'coupon_classify_en' => $params['preferential']
+            ];
+            return $json;
+        }catch (BusinessException $e){
+            throw new BusinessException($e->getMessage());
+        } catch (\Exception $e) {
+            throw new BusinessException("优惠数据错误");
+        }
     }
 
+
     /**
      * 组合支付
      */
@@ -1283,6 +1319,8 @@ class WholeController extends Curd
         $payDetail = PayDetail::where('join_pay_order_id', $order->order_groupby)->first();
         Db::beginTransaction();
         try {
+            // 存储优惠信息
+            $order->order_discount_json = json_encode($this->discountRecord($order->order_discount_json, $params));
             $orderAmountPay = $params['order_amount_pay'];
             $constituteList = array_column($params['pay_category_constitute_list'], 'amount', 'category');// 验证金额
             $constituteAmount = 0;
@@ -1652,6 +1690,8 @@ class WholeController extends Curd
         $params['goods_classify'] = $goodsClassifys[0];
         Db::beginTransaction();
         try {
+            // 存储优惠信息
+            $params['order_discount_json'] = json_encode($this->discountRecord([], $params));
             // 验证库存
             foreach ($params['goodsContentList'] as $goods) {
                 // 减库存,规格和总库存
@@ -2214,6 +2254,8 @@ class WholeController extends Curd
 
         Db::beginTransaction();
         try {
+            // 存储优惠信息
+            $params['order_discount_json'] = json_encode($this->discountRecord([], $params));
             $orderAmountPay = $params['order_amount_pay'];
             $constituteList = array_column($params['pay_category_constitute_list'], 'amount', 'category');
             // 验证金额
@@ -2713,6 +2755,7 @@ class WholeController extends Curd
                 'order_status_storage' => $params['order_status_storage'],
                 'order_platform' => $params['order_platform'],
                 'order_remark' => $params['order_remark'] ?? '',
+                'order_discount_json' => $params['order_discount_json'],
                 'order_config_json' => $params['order_config_json'] ?? '[]',
                 'order_express_json' => $params['order_express_json'] ?? '[]',
                 'order_extend_json' => $params['order_extend_json'] ? json_encode($params['order_extend_json']) : '[]',

+ 6 - 0
app/admin/service/order/OrderService.php

@@ -411,4 +411,10 @@ class OrderService
         $payDetail->pay_status = 'SUCCESS';
         $payDetail->save();
     }
+
+
+    public static $couponClassify=[
+        'wipe'=>'抹零',
+        'custom'=>'自定义优惠金额'
+    ];
 }