gorden преди 2 дни
родител
ревизия
b2dda52796
променени са 2 файла, в които са добавени 32 реда и са изтрити 8 реда
  1. 13 8
      app/admin/controller/coupon/CouponController.php
  2. 19 0
      app/admin/service/coupon/CouponDetailService.php

+ 13 - 8
app/admin/controller/coupon/CouponController.php

@@ -425,19 +425,24 @@ class CouponController extends Curd
                             if ($chooseCoupon['nbr'] > 0) {
                                 // 有发行数量
                                 if ($coupon['coupon_number'] != 0) {
-                                    // 查询共发行了多少张了
-                                    $count = CouponDetail::where('join_detail_coupon_id', $coupon['coupon_id'])->count();
+                                    // 查询还有多少张没领的
+                                    $count = CouponDetail::where('join_detail_coupon_id', $coupon['coupon_id'])
+                                        ->whereIn('coupon_detail_status',['INIT','PENDING'])
+                                        ->count();
                                     if (!isset($couponNbr[$coupon['coupon_id']])) {
                                         $couponNbr[$coupon['coupon_id']] = $count;
                                     }
-                                    if ($couponNbr[$coupon['coupon_id']] + $chooseCoupon['nbr'] > $coupon['coupon_number']) {
+                                    if ($couponNbr[$coupon['coupon_id']] - $chooseCoupon['nbr'] < 0) {
                                         throw new BusinessException($coupon['coupon_name'] . "超出发行数量");
                                     }
-                                    $couponNbr[$coupon['coupon_id']] = $couponNbr[$coupon['coupon_id']] + $chooseCoupon['nbr'];
-                                }
-
-                                for ($i = 0; $i < $chooseCoupon['nbr']; $i++) {
-                                    CouponDetailService::customSendCoupon($params);
+                                    $couponNbr[$coupon['coupon_id']] = $couponNbr[$coupon['coupon_id']] - $chooseCoupon['nbr'];
+                                    $params['chooseCouponNbr'] = $chooseCoupon['nbr'];
+                                    // 匹配已发行的优惠券
+                                    CouponDetailService::customSendCouponHave($params);
+                                }else{
+                                    for ($i = 0; $i < $chooseCoupon['nbr']; $i++) {
+                                        CouponDetailService::customSendCoupon($params);
+                                    }
                                 }
                             }
                         }

+ 19 - 0
app/admin/service/coupon/CouponDetailService.php

@@ -35,4 +35,23 @@ class CouponDetailService
             throw new BusinessException('写入优惠券失败');
         }
     }
+
+    public static function customSendCouponHave($params)
+    {
+        try {
+            CouponDetail::where('join_detail_coupon_id',$params['coupon_id'])
+                ->whereIn('coupon_detail_status',['INIT','PENDING'])
+                ->limit($params['chooseCouponNbr'])
+                ->update([
+                    'join_coupon_detail_member_id' => $params['member_id'],
+                    'coupon_detail_gain_datetime' => $params['coupon_detail_gain_datetime'],
+                    'coupon_detail_deadline_datetime' => $params['coupon_detail_deadline_datetime'],
+                    'coupon_detail_extend_json'=>json_encode(['gettype'=>'SEND']),
+                    'coupon_detail_status'=>'ACTIVED'
+                ]);
+        } catch (\Exception $e) {
+            throw new BusinessException('写入优惠券失败');
+        }
+    }
+
 }