| 
					
				 | 
			
			
				@@ -7,6 +7,7 @@ use app\model\CouponDetail; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 use app\model\SysSerial; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 use support\Db; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 use support\exception\BusinessException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+use support\Log; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 class CouponDetailService 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -91,6 +92,8 @@ class CouponDetailService 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 throw new BusinessException("优惠券余量不足"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             $periodJson['now_nbr'] = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 手动发券会传来时间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $periodJson['gain_datetime'] = $params['coupon_detail_gain_datetime'] ?? date('Y-m-d H:i:s'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (!empty($periodJson['nbr'])) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 for ($i = 0; $i < $periodJson['nbr']; $i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     $periodParams = self::generatePeriod($periodJson); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -111,10 +114,11 @@ class CouponDetailService 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             Db::commit(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } catch (BusinessException $e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             Db::rollBack(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Log::error("发券失败:" . $e->getMessage()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             throw new BusinessException($e->getMessage()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } catch (\Exception $e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            dump($e->getMessage()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             Db::rollBack(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Log::error("发券失败:" . $e->getMessage()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             throw new BusinessException("优惠券发放失败"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -201,63 +205,75 @@ class CouponDetailService 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             $val = $periodJson['val'] - 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if ($val < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if ($now_nbr == 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    $params['coupon_detail_gain_datetime'] = date('Y-m-d 00:00:00'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    $params['coupon_detail_deadline_datetime'] = date('Y-m-d 23:59:59'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    $params['coupon_detail_gain_datetime'] = date('Y-m-d 00:00:00', strtotime($periodJson['gain_datetime'])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    $params['coupon_detail_deadline_datetime'] = date('Y-m-d 23:59:59', strtotime($periodJson['gain_datetime'])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     $now_nbr -= 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    $params['coupon_detail_gain_datetime'] = date('Y-m-d 00:00:00', strtotime("+" . $now_nbr . ' day')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    $params['coupon_detail_deadline_datetime'] = date('Y-m-d 23:59:59', strtotime("+" . $now_nbr . ' day')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    $params['coupon_detail_gain_datetime'] = date('Y-m-d 00:00:00', strtotime($periodJson['gain_datetime'] . "+" . $now_nbr . ' day')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    $params['coupon_detail_deadline_datetime'] = date('Y-m-d 23:59:59', strtotime($periodJson['gain_datetime'] . "+" . $now_nbr . ' day')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if ($now_nbr == 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    $params['coupon_detail_gain_datetime'] = date('Y-m-d 00:00:00'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    $params['coupon_detail_deadline_datetime'] = date('Y-m-d 23:59:59', strtotime("+" . $val . ' day')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    $params['coupon_detail_gain_datetime'] = date('Y-m-d 00:00:00', strtotime($periodJson['gain_datetime'])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    $params['coupon_detail_deadline_datetime'] = date('Y-m-d 23:59:59', strtotime($periodJson['gain_datetime'] . "+" . $val . ' day')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     $now_nbr -= 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    $params['coupon_detail_gain_datetime'] = date('Y-m-d 00:00:00', strtotime("+" . ((($val + 1) * $now_nbr)) . " day")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    $params['coupon_detail_deadline_datetime'] = date('Y-m-d 23:59:59', strtotime("+" . ((($val + 1) * $now_nbr) + $val) . " day")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    $params['coupon_detail_gain_datetime'] = date('Y-m-d 00:00:00', strtotime($periodJson['gain_datetime'] . "+" . ((($val + 1) * $now_nbr)) . " day")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    $params['coupon_detail_deadline_datetime'] = date('Y-m-d 23:59:59', strtotime($periodJson['gain_datetime'] . "+" . ((($val + 1) * $now_nbr) + $val) . " day")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } elseif ($periodJson['unit'] == 'week') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             $val = $periodJson['val'] - 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 选的日期的周一距离今周周一是几个周 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $timestamp = strtotime($periodJson['gain_datetime']); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $gainWeekDay = date("w", $timestamp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $gainWeekAdd = date("w", $gainWeekDay) == 1 ? 0 : 1 - $gainWeekDay; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $gainMonday = date("Y-m-d 00:00:00", strtotime("$gainWeekAdd days", $timestamp)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $nowMonday = date('Y-m-d 00:00:00', strtotime('this week Monday')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $interval = (new \DateTime(date($gainMonday)))->diff(new \DateTime($nowMonday)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $weekCut = $interval->days / 7; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if ($val < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if ($now_nbr == 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    $params['coupon_detail_gain_datetime'] = date('Y-m-d 00:00:00', strtotime('this week Monday')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    $params['coupon_detail_deadline_datetime'] = date('Y-m-d 23:59:59', strtotime('this week Sunday')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    $params['coupon_detail_gain_datetime'] = $gainMonday; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    $params['coupon_detail_deadline_datetime'] = date('Y-m-d 23:59:59', strtotime($gainMonday . "+6 days")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     $now_nbr -= 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    $params['coupon_detail_gain_datetime'] = date('Y-m-d 00:00:00', strtotime(date('Y-m-d 00:00:00', strtotime('this week Monday')) . "+" . $now_nbr . ' week')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    $params['coupon_detail_deadline_datetime'] = date('Y-m-d 23:59:59', strtotime(date('Y-m-d 23:59:59', strtotime('this week Sunday')) . "+" . $now_nbr . ' week')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    $params['coupon_detail_gain_datetime'] = date('Y-m-d 00:00:00', strtotime(date('Y-m-d 00:00:00', strtotime('this week Monday')) . "+" . ($now_nbr + $weekCut) . ' week')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    $params['coupon_detail_deadline_datetime'] = date('Y-m-d 23:59:59', strtotime(date('Y-m-d 23:59:59', strtotime('this week Sunday')) . "+" . ($now_nbr + $weekCut) . ' week')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if ($now_nbr == 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    $params['coupon_detail_gain_datetime'] = date('Y-m-d 00:00:00', strtotime('this week Monday')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    $params['coupon_detail_deadline_datetime'] = date('Y-m-d 23:59:59', strtotime(date('Y-m-d 23:59:59', strtotime('this week Sunday')) . "+" . $val . ' week')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    $params['coupon_detail_gain_datetime'] = $gainMonday; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    $params['coupon_detail_deadline_datetime'] = date('Y-m-d 23:59:59', strtotime(date('Y-m-d 23:59:59', strtotime('this week Sunday')) . "+" . ($val + $weekCut) . ' week')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     $now_nbr -= 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    $params['coupon_detail_gain_datetime'] = date('Y-m-d 00:00:00', strtotime(date('Y-m-d 00:00:00', strtotime('this week Monday')) . "+" . ((($val + 1) * $now_nbr)) . ' week')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    $params['coupon_detail_deadline_datetime'] = date('Y-m-d 23:59:59', strtotime(date('Y-m-d 23:59:59', strtotime('this week Sunday')) . "+" . ((($val + 1) * $now_nbr) + $val) . ' week')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    $params['coupon_detail_gain_datetime'] = date('Y-m-d 00:00:00', strtotime(date('Y-m-d 00:00:00', strtotime('this week Monday')) . "+" . ((($val + 1) * $now_nbr) + $weekCut) . ' week')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    $params['coupon_detail_deadline_datetime'] = date('Y-m-d 23:59:59', strtotime(date('Y-m-d 23:59:59', strtotime('this week Sunday')) . "+" . ((($val + 1) * $now_nbr) + $val + $weekCut) . ' week')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } elseif ($periodJson['unit'] == 'month') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             $val = $periodJson['val'] - 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 选的日期的1号距离今月1号是几个月 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $interval = (new \DateTime(date('Y-m-01 00:00:00', strtotime($periodJson['gain_datetime']))))->diff(new \DateTime(date('Y-m-01 00:00:00'))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $monthCut = $interval->m + ($interval->y * 12); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if ($val < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if ($now_nbr == 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    $params['coupon_detail_gain_datetime'] = date('Y-m-01 00:00:00'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    $params['coupon_detail_deadline_datetime'] = date('Y-m-t 23:59:59'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    $params['coupon_detail_gain_datetime'] = date('Y-m-01 00:00:00', strtotime($periodJson['gain_datetime'])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    $params['coupon_detail_deadline_datetime'] = date('Y-m-t 23:59:59', strtotime($periodJson['gain_datetime'])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     $now_nbr -= 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    $params['coupon_detail_gain_datetime'] = date('Y-m-01 00:00:00', strtotime("+" . $now_nbr . ' month')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    $params['coupon_detail_deadline_datetime'] = date('Y-m-t 23:59:59', strtotime(date('Y-m-01 00:00:00')."+" . $now_nbr . ' month')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    $params['coupon_detail_gain_datetime'] = date('Y-m-01 00:00:00', strtotime("+" . ($now_nbr + $monthCut) . ' month')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    $params['coupon_detail_deadline_datetime'] = date('Y-m-t 23:59:59', strtotime(date('Y-m-01 00:00:00') . "+" . ($now_nbr + $monthCut) . ' month')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if ($now_nbr == 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    $params['coupon_detail_gain_datetime'] = date('Y-m-01 00:00:00'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    $params['coupon_detail_deadline_datetime'] = date('Y-m-t 23:59:59', strtotime(date('Y-m-01 00:00:00')."+" . $val . ' month')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    $params['coupon_detail_gain_datetime'] = date('Y-m-01 00:00:00', strtotime($periodJson['gain_datetime'])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    $params['coupon_detail_deadline_datetime'] = date('Y-m-t 23:59:59', strtotime(date('Y-m-01 00:00:00') . "+" . ($val + $monthCut) . ' month')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     $now_nbr -= 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    $params['coupon_detail_gain_datetime'] = date('Y-m-01 00:00:00', strtotime( "+" . ((($val + 1) * $now_nbr)) . ' month')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    $params['coupon_detail_deadline_datetime'] = date('Y-m-t 23:59:59', strtotime(date('Y-m-01 00:00:00')."+" . ((($val + 1) * $now_nbr) + $val) . ' month')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    $params['coupon_detail_gain_datetime'] = date('Y-m-01 00:00:00', strtotime("+" . ((($val + 1) * $now_nbr) + $monthCut) . ' month')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    $params['coupon_detail_deadline_datetime'] = date('Y-m-t 23:59:59', strtotime(date('Y-m-01 00:00:00') . "+" . ((($val + 1) * $now_nbr) + $val + $monthCut) . ' month')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 |