Browse Source

优惠券

gorden 3 months ago
parent
commit
bdfe364ef0

+ 32 - 14
app/admin/controller/coupon/CouponDetailController.php

@@ -322,29 +322,47 @@ class CouponDetailController extends Curd
             $order = Order::where('order_id', $orderId)->first();
             if (!empty($order->order_discount_json)) {
                 $orderDiscountJson = json_decode($order->order_discount_json, true);
-                foreach ($orderDiscountJson as $coupon){
+                foreach ($orderDiscountJson as $coupon) {
                     $couponDetailIds = $coupon['coupon_detail_id'];
                 }
             }
         }
-
         $details = CouponDetail::with([
             'coupon' => function ($query) {
                 $query->select('coupon_id', 'coupon_name', 'coupon_classify', 'coupon_value', 'coupon_category', 'coupon_minimum_limit');
             }
-        ])->whereIn('join_detail_coupon_id', $couponIds)
-            ->where('join_coupon_detail_member_id', $memberId)
-            ->where('coupon_detail_gain_datetime', '<', date('Y-m-d H:i:s'))
-            ->where('coupon_detail_deadline_datetime', '>', date('Y-m-d H:i:s'));
+        ])->whereIn('coupon_detail_id',$couponDetailIds)
+            ->orWhere(function($query) use ($couponIds,$memberId,$settlementNow){
+                $query->whereIn('join_detail_coupon_id', $couponIds)
+                    ->where('join_coupon_detail_member_id', $memberId)
+                    ->where('coupon_detail_gain_datetime', '<', date('Y-m-d H:i:s'))
+                    ->where('coupon_detail_deadline_datetime', '>', date('Y-m-d H:i:s'))
+                    ->when(!empty($settlementNow),function ($query2) use ($settlementNow){
+                        if ($settlementNow == 'Y'){
+                            $query2->whereIn('coupon_detail.coupon_detail_status', ['ACTIVED', 'WAITING']);
+                        }else{
+                            $query2->where('coupon_detail.coupon_detail_status', 'ACTIVED');
+                        }
+                    });
+            });
 
-        if ($settlementNow == 'Y') {
-            $details = $details->whereIn('coupon_detail.coupon_detail_status', ['ACTIVED', 'WAITING']);
-        } else {
-            $details = $details->where('coupon_detail.coupon_detail_status', 'ACTIVED');
-        }
-        if (!empty($couponDetailIds)){
-//            $details
-        }
+//        $details = CouponDetail::with([
+//            'coupon' => function ($query) {
+//                $query->select('coupon_id', 'coupon_name', 'coupon_classify', 'coupon_value', 'coupon_category', 'coupon_minimum_limit');
+//            }
+//        ])->whereIn('join_detail_coupon_id', $couponIds)
+//            ->where('join_coupon_detail_member_id', $memberId)
+//            ->where('coupon_detail_gain_datetime', '<', date('Y-m-d H:i:s'))
+//            ->where('coupon_detail_deadline_datetime', '>', date('Y-m-d H:i:s'));
+//
+//        if ($settlementNow == 'Y') {
+//            $details = $details->whereIn('coupon_detail.coupon_detail_status', ['ACTIVED', 'WAITING']);
+//        } else {
+//            $details = $details->where('coupon_detail.coupon_detail_status', 'ACTIVED');
+//        }
+//        if (!empty($couponDetailIds)) {
+//            $details = $details->whereIn('coupon_detail_id', $couponDetailIds);
+//        }
         $details = $details->selectRaw('join_detail_coupon_id,join_coupon_detail_member_id,COUNT(*) as count')
             ->groupBy('join_detail_coupon_id', 'join_coupon_detail_member_id')
             ->get()

+ 3 - 2
app/admin/controller/order/WholeController.php

@@ -2612,7 +2612,7 @@ class WholeController extends Curd
                         if (substr($detailId, 0, 4) == 'CUDT') {
                             CouponDetail::where('join_detail_coupon_id', $item['coupon_id'])
                                 ->where('coupon_detail_id', $detailId)
-                                ->where('coupon_detail_status', 'WAITING')
+                                ->whereIn('coupon_detail_status', ['WAITING', 'USED'])
                                 ->update($updateData);
                         }
                     }
@@ -5515,6 +5515,7 @@ class WholeController extends Curd
         $payAmount = $request->post('pay_amount', 0);
         $memberId = $request->post('member_id', '');
         $settlementNow = $request->post('settlement_now', 'N');
+        $orderId = $request->post('order_id');
         if (empty($goods) || empty($coupon) || empty($memberId)) {
             return json_fail("参数异常");
         }
@@ -5551,7 +5552,7 @@ class WholeController extends Curd
             'cut_balance' => 0,
         ];
         foreach ($goods as $good) {
-            $result = OrderService::chooseCoupon($settlementNow, $memberId, $goods, $good, $coupon, $amountBalance);
+            $result = OrderService::chooseCoupon($settlementNow, $memberId, $goods, $good, $coupon, $amountBalance, $orderId);
             $amountBalance = [
                 'pay_amount' => $result['pay_amount'],
                 'welfare_balance' => $result['welfare_balance'],

+ 1 - 1
app/admin/controller/sys_manage/ProtocolController.php

@@ -97,7 +97,7 @@ class ProtocolController extends Curd
         }
 
         $protocol = Content::whereIn('join_content_category_id',$categoryIds)
-            ->where('content_status','ACTIVED')
+//            ->where('content_status','ACTIVED')
             ->select('content_id','content_title')
             ->get()
             ->toArray();

+ 48 - 28
app/admin/service/order/OrderService.php

@@ -587,7 +587,7 @@ class OrderService
                 $discountData = json_decode($discountData, true);
             }
             foreach ($coupon as $couponId) {
-                $couponDetail = CouponDetail::leftJoin('coupon_goods', 'coupon_goods.join_goods_coupon_id', '=', 'coupon_detail.join_detail_coupon_id')
+                $couponDetail = Db::table('coupon_detail')->leftJoin('coupon_goods', 'coupon_goods.join_goods_coupon_id', '=', 'coupon_detail.join_detail_coupon_id')
                     ->leftJoin('coupon', 'coupon.coupon_id', '=', 'coupon_detail.join_detail_coupon_id')
                     ->select('coupon_detail.coupon_detail_id', 'coupon_goods.coupon_goods_id', 'coupon_id', 'coupon_classify', 'coupon_value', 'coupon_minimum_limit', 'coupon_category')
                     ->where('coupon_goods.join_coupon_goods_id', $goodsId)
@@ -762,8 +762,18 @@ class OrderService
      * @param $amountBalance
      * @return array|void
      */
-    public static function chooseCoupon($settlementNow, $memberId, $goods, $good, $coupon, $amountBalance)
+    public static function chooseCoupon($settlementNow, $memberId, $goods, $good, $coupon, $amountBalance, $orderId)
     {
+        $couponDetailIds = [];
+        if (!empty($orderId)) {
+            $order = Order::where('order_id', $orderId)->first();
+            if (!empty($order->order_discount_json)) {
+                $orderDiscountJson = json_decode($order->order_discount_json, true);
+                foreach ($orderDiscountJson as $coupon) {
+                    $couponDetailIds = $coupon['coupon_detail_id'];
+                }
+            }
+        }
         try {
             $cacheKey = "ORDER:USE:COUPON:" . $memberId;
             $payAmount = $amountBalance['pay_amount'];
@@ -775,17 +785,27 @@ class OrderService
                 $couponDetail = CouponDetail::leftJoin('coupon_goods', 'coupon_goods.join_goods_coupon_id', '=', 'coupon_detail.join_detail_coupon_id')
                     ->leftJoin('coupon', 'coupon.coupon_id', '=', 'coupon_detail.join_detail_coupon_id')
                     ->select('coupon_detail.coupon_detail_id', 'coupon_goods.coupon_goods_id', 'coupon_id', 'coupon_classify', 'coupon_value', 'coupon_minimum_limit', 'coupon_category')
-                    ->where('coupon_goods.join_coupon_goods_id', $goodsId)
-//                    ->where('coupon_goods.join_coupon_goods_sku_id', $good['sku_id'])
-                    ->where('join_goods_coupon_id', $couponId)
-                    ->where('coupon_detail.join_coupon_detail_member_id', $memberId)
-                    ->where('coupon_detail.coupon_detail_gain_datetime', '<=', date('Y-m-d H:i:s'))
-                    ->where('coupon_detail.coupon_detail_deadline_datetime', '>=', date('Y-m-d H:i:s'));
-                if ($settlementNow == 'Y') {
-                    $couponDetail = $couponDetail->whereIn('coupon_detail.coupon_detail_status', ['ACTIVED']);
-                } else {
-                    $couponDetail = $couponDetail->where('coupon_detail.coupon_detail_status', 'ACTIVED');
-                }
+                    ->whereIn('coupon_detail_id',$couponDetailIds)
+                    ->orWhere(function($query) use ($goodsId,$couponId,$memberId){
+                        $query->where('coupon_goods.join_coupon_goods_id', $goodsId)
+                            ->where('join_goods_coupon_id', $couponId)
+                            ->where('coupon_detail.join_coupon_detail_member_id', $memberId)
+                            ->where('coupon_detail.coupon_detail_gain_datetime', '<=', date('Y-m-d H:i:s'))
+                            ->where('coupon_detail.coupon_detail_deadline_datetime', '>=', date('Y-m-d H:i:s'))
+                            ->where('coupon_detail.coupon_detail_status', 'ACTIVED');
+                    });
+
+//                    ->where('coupon_goods.join_coupon_goods_id', $goodsId)
+//                    ->where('join_goods_coupon_id', $couponId)
+//                    ->where('coupon_detail.join_coupon_detail_member_id', $memberId)
+//                    ->where('coupon_detail.coupon_detail_gain_datetime', '<=', date('Y-m-d H:i:s'))
+//                    ->where('coupon_detail.coupon_detail_deadline_datetime', '>=', date('Y-m-d H:i:s'))
+//                    ->where('coupon_detail.coupon_detail_status', 'ACTIVED');
+//                if ($settlementNow == 'Y') {
+//                    $couponDetail = $couponDetail->whereIn('coupon_detail.coupon_detail_status', ['ACTIVED']);
+//                } else {
+//                    $couponDetail = $couponDetail->where('coupon_detail.coupon_detail_status', 'ACTIVED');
+//                }
                 $couponDetail = $couponDetail->orderBy('coupon_detail_id', 'DESC')
                     ->first();
                 if (!$couponDetail) {
@@ -797,7 +817,7 @@ class OrderService
                 if ($couponDetail->coupon_category == 'PIECE' && $countAndAmount['count'] < $couponDetail->coupon_minimum_limit) {
                     continue;
                 }
-                if (in_array($couponDetail->coupon_classify, ['立减券','满减券'])) {
+                if (in_array($couponDetail->coupon_classify, ['立减券', '满减券'])) {
                     if (Redis::sIsMember($cacheKey, $couponId)) {
                         continue;
                     }
@@ -996,35 +1016,35 @@ class OrderService
     /**
      * 检查产品限额
      */
-    public static function checkGoodsLimit($goods,$memberId)
+    public static function checkGoodsLimit($goods, $memberId)
     {
-        foreach($goods as $good){
+        foreach ($goods as $good) {
             $goodsLimit = 'no';
-            $goodsModel = Goods::where('goods_id',$good['goods_id'])->select('goods_attribute_json')->first();
-            if (!empty($goodsModel) && !empty($goodsModel->goods_attribute_json)){
-                $goodsAttributeJson = json_decode($goodsModel->goods_attribute_json,true);
-                if (!empty($goodsAttributeJson['max-limit'])){
+            $goodsModel = Goods::where('goods_id', $good['goods_id'])->select('goods_attribute_json')->first();
+            if (!empty($goodsModel) && !empty($goodsModel->goods_attribute_json)) {
+                $goodsAttributeJson = json_decode($goodsModel->goods_attribute_json, true);
+                if (!empty($goodsAttributeJson['max-limit'])) {
                     $goodsLimit = $goodsAttributeJson['max-limit'];
-                    if ($goodsLimit != 0 && $goodsLimit != '' && $good['nbr'] > $goodsLimit){
+                    if ($goodsLimit != 0 && $goodsLimit != '' && $good['nbr'] > $goodsLimit) {
                         return false;
                     }
                 }
             }
-            
+
             $sheetNbr = 0;
-            if ($goodsLimit != 'no'){
-                $sheetNbr = OrderSheet::where('join_sheet_member_id',$memberId)
-                    ->where('join_sheet_goods_id',$good['goods_id'])
-                    ->where('order_sheet_status','<>','CANCEL')
+            if ($goodsLimit != 'no') {
+                $sheetNbr = OrderSheet::where('join_sheet_member_id', $memberId)
+                    ->where('join_sheet_goods_id', $good['goods_id'])
+                    ->where('order_sheet_status', '<>', 'CANCEL')
                     ->sum('order_sheet_num');
-                if ($goodsLimit != 0 && $goodsLimit != '' && $good['nbr'] + $sheetNbr > $goodsLimit){
+                if ($goodsLimit != 0 && $goodsLimit != '' && $good['nbr'] + $sheetNbr > $goodsLimit) {
                     return false;
                 }
             }
         }
 
         return true;
-    } 
+    }
 
 
     public static $couponClassify = [