|
@@ -133,15 +133,17 @@ class CouponController extends Curd
|
|
|
} elseif ($item['coupon_validdate_day']) {
|
|
|
$item['coupon_use_time'] = 'day';
|
|
|
}
|
|
|
- $item['member_count'] = $item['pending_count'] = $item['used_count'] = 0;
|
|
|
+ $item['member_count'] = 0;
|
|
|
+ $item['pending_count'] = 0;
|
|
|
+ $item['used_count'] = 0;
|
|
|
if (!empty($item['detail'])) {
|
|
|
foreach ($item['detail'] as $detail) {
|
|
|
- if (!empty($detail['join_coupon_detail_member_id'])){
|
|
|
+ if (!empty($detail['join_coupon_detail_member_id'])) {
|
|
|
$item['member_count'] += 1;
|
|
|
}
|
|
|
- if ($detail['coupon_detail_status'] == 'PENDING'){
|
|
|
+ if ($detail['coupon_detail_status'] == 'PENDING') {
|
|
|
$item['pending_count'] += 1;
|
|
|
- }elseif ($detail['coupon_detail_status'] == 'USED'){
|
|
|
+ } elseif ($detail['coupon_detail_status'] == 'USED') {
|
|
|
$item['used_count'] += 1;
|
|
|
}
|
|
|
}
|
|
@@ -197,7 +199,7 @@ class CouponController extends Curd
|
|
|
// 关联优惠券和商品、规格
|
|
|
$this->insertCouponGoods($goods, $data['coupon_id']);
|
|
|
if ($data['coupon_number'] > 0) {
|
|
|
- $this->generateCouponDetail($data['coupon_id'], $data['coupon_number']);
|
|
|
+ $this->generateCouponDetail($data['coupon_id'], $data['coupon_status'], $data['coupon_number']);
|
|
|
}
|
|
|
Db::commit();
|
|
|
|
|
@@ -247,12 +249,12 @@ class CouponController extends Curd
|
|
|
$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') {
|
|
|
- $data['coupon_validdate_day'] = null;
|
|
|
+ $data['coupon_validdate_day'] = 0;
|
|
|
$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') {
|
|
|
- $data['coupon_validdate_begin'] = null;
|
|
|
- $data['coupon_validdate_end'] = null;
|
|
|
+ $data['coupon_validdate_begin'] = '';
|
|
|
+ $data['coupon_validdate_end'] = '';
|
|
|
}
|
|
|
$couponJson = [];
|
|
|
if ($params['coupon_use_member'] == 'member' && isset($params['member_list'])) {
|
|
@@ -303,27 +305,47 @@ class CouponController extends Curd
|
|
|
return json_fail($this->validateClass->getError());
|
|
|
}
|
|
|
|
|
|
+ $params = $request->post();
|
|
|
+
|
|
|
Db::beginTransaction();
|
|
|
try {
|
|
|
[$id, $data] = $this->updateInput($request);
|
|
|
$originCouponNumber = $data['origin_coupon_number'];
|
|
|
- unset($data['origin_coupon_number']);
|
|
|
+ $originCouponValiddateDay = $data['origin_coupon_validdate_day'];
|
|
|
+ $originCouponValiddateEnd = $data['origin_coupon_validdate_end'];
|
|
|
+ unset($data['origin_coupon_number'], $data['origin_coupon_validdate_day'], $data['origin_coupon_validdate_end']);
|
|
|
$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);
|
|
|
+ $this->generateCouponDetail($id, $data['coupon_status'], $data['coupon_number'] - $detailCount);
|
|
|
}
|
|
|
} else if ($originCouponNumber < $data['coupon_number']) {
|
|
|
- $this->generateCouponDetail($id, $data['coupon_number'] - $originCouponNumber);
|
|
|
+ $this->generateCouponDetail($id, $data['coupon_status'], $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();
|
|
|
}
|
|
|
+ // 修改时间了
|
|
|
+ if ($params['coupon_use_time'] == 'day' && $originCouponValiddateDay != $data['coupon_validdate_day']) {
|
|
|
+ $this->updateDetailTimeForDay($id, $data['coupon_validdate_day']);
|
|
|
+ } elseif ($params['coupon_use_time'] == 'date' && $originCouponValiddateEnd != $data['coupon_validdate_end']) {
|
|
|
+ $this->updateDetailTimeForDate($id, $data['coupon_validdate_end']);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // 激活状态,初始改为待领取
|
|
|
+ if ($data['coupon_status'] == 'ACTIVED') {
|
|
|
+ CouponDetail::where('join_detail_coupon_id', $id)->where('coupon_detail_status', 'INIT')->update(['coupon_detail_status' => 'PENDING']);
|
|
|
+ } elseif ($data['coupon_status'] == 'DISABLED') { // 禁用状态,未领取未使用的都是禁用
|
|
|
+ CouponDetail::where('join_detail_coupon_id', $id)->where('coupon_detail_status', '<>', 'USED')->update(['coupon_detail_status' => 'DISABLED']);
|
|
|
+ }
|
|
|
+
|
|
|
+ $this->doUpdate($id, $data);
|
|
|
+
|
|
|
Db::commit();
|
|
|
|
|
|
return json_success('success');
|
|
@@ -338,6 +360,49 @@ class CouponController extends Curd
|
|
|
|
|
|
}
|
|
|
|
|
|
+ public function updateDetailTimeForDay($couponId, $day)
|
|
|
+ {
|
|
|
+ $details = CouponDetail::where('join_detail_coupon_id', $couponId)
|
|
|
+ ->where('coupon_detail_status', '<>', 'USED')
|
|
|
+ ->where('coupon_detail_deadline_datetime', '<>', '')
|
|
|
+ ->get()
|
|
|
+ ->toArray();
|
|
|
+
|
|
|
+ try {
|
|
|
+ foreach ($details as $detail) {
|
|
|
+ $couponDetailGainDatetime = strtotime($detail['coupon_detail_gain_datetime']);
|
|
|
+ CouponDetail::where('coupon_detail_id', $detail['coupon_detail_id'])
|
|
|
+ ->update([
|
|
|
+ 'coupon_detail_deadline_datetime' => date('Y-m-d H:i:s', $couponDetailGainDatetime + ($day * 24 * 3600))
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ dump($e->getMessage());
|
|
|
+ throw new BusinessException("优惠券更新失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public function updateDetailTimeForDate($couponId, $endDate)
|
|
|
+ {
|
|
|
+ $details = CouponDetail::where('join_detail_coupon_id', $couponId)
|
|
|
+ ->where('coupon_detail_status', '<>', 'USED')
|
|
|
+ ->where('coupon_detail_deadline_datetime', '<>', '')
|
|
|
+ ->get()
|
|
|
+ ->toArray();
|
|
|
+
|
|
|
+ try {
|
|
|
+ foreach ($details as $detail) {
|
|
|
+ CouponDetail::where('coupon_detail_id', $detail['coupon_detail_id'])
|
|
|
+ ->update([
|
|
|
+ 'coupon_detail_deadline_datetime' => $endDate
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ dump($e->getMessage());
|
|
|
+ throw new BusinessException("优惠券更新失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
public function updateCouponGoods($goods, $couponId)
|
|
|
{
|
|
|
try {
|
|
@@ -379,16 +444,20 @@ class CouponController extends Curd
|
|
|
$id = $request->post($primary_key);
|
|
|
$data = $this->inputFilter($params);
|
|
|
if (!empty($params['coupon_use_time']) && $params['coupon_use_time'] == 'date') {
|
|
|
- $data['coupon_validdate_day'] = null;
|
|
|
+ $data['coupon_validdate_day'] = 0;
|
|
|
$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') {
|
|
|
- $data['coupon_validdate_begin'] = null;
|
|
|
- $data['coupon_validdate_end'] = null;
|
|
|
+ $data['coupon_validdate_begin'] = '';
|
|
|
+ $data['coupon_validdate_end'] = '';
|
|
|
}
|
|
|
$model = $this->model->find($id);
|
|
|
// 原数量
|
|
|
$data['origin_coupon_number'] = $model->coupon_number;
|
|
|
+ // 原优惠天数
|
|
|
+ $data['origin_coupon_validdate_day'] = $model->coupon_validdate_day;
|
|
|
+ // 原结束时间
|
|
|
+ $data['origin_coupon_validdate_end'] = $model->coupon_validdate_end;
|
|
|
if (!$model) {
|
|
|
throw new BusinessException('记录不存在', 2);
|
|
|
}
|
|
@@ -435,6 +504,9 @@ class CouponController extends Curd
|
|
|
$couponJson['premises'] = $params['premises'];
|
|
|
$couponJson['premises_range'] = '部分门店可用';
|
|
|
}
|
|
|
+ if (empty($data['coupon_validdate_day'])) {
|
|
|
+ $data['coupon_validdate_day'] = 0;
|
|
|
+ }
|
|
|
|
|
|
$data['coupon_json'] = json_encode($couponJson, JSON_UNESCAPED_UNICODE);
|
|
|
|
|
@@ -575,24 +647,44 @@ class CouponController extends Curd
|
|
|
try {
|
|
|
// 删除优惠券关联的产品
|
|
|
foreach ($ids as $id) {
|
|
|
+ $couponDetail = CouponDetail::with([
|
|
|
+ 'coupon' => function ($query) {
|
|
|
+ $query->select('coupon_id', 'coupon_name');
|
|
|
+ }
|
|
|
+ ])->where('join_detail_coupon_id', $id)
|
|
|
+ ->where('join_coupon_detail_member_id', '<>', '')
|
|
|
+ ->first();
|
|
|
+ if (!empty($couponDetail)) {
|
|
|
+ Db::rollBack();
|
|
|
+
|
|
|
+ return json_fail($couponDetail->coupon && $couponDetail->coupon->coupon_name ? $couponDetail->coupon->coupon_name . "已被领取,无法删除,请禁用" : "删除的优惠券中有已被领取的,无法删除,请禁用");
|
|
|
+ }
|
|
|
CouponGoods::where('join_goods_coupon_id', $id)->delete();
|
|
|
+
|
|
|
+// CouponDetail::where('join_detail_coupon_id', $id)
|
|
|
+// ->whereIn('coupon_detail_status',['INIT','PENDING','ACTIVED'])
|
|
|
+// ->delete();
|
|
|
+// CouponDetail::where('join_detail_coupon_id', $id)
|
|
|
+// ->where('coupon_detail_status','WAITING')
|
|
|
+// ->update(['coupon_detail_status'=>'DISABLED']);
|
|
|
}
|
|
|
$this->doDelete($ids);
|
|
|
Db::commit();
|
|
|
return json_success('success');
|
|
|
} catch (\Exception $e) {
|
|
|
+ dump($e->getMessage());
|
|
|
Db::rollBack();
|
|
|
return json_fail('删除失败');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private function generateCouponDetail($couponId, $nbr)
|
|
|
+ private function generateCouponDetail($couponId, $couponStatus, $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' => 'INIT',
|
|
|
+ 'coupon_detail_status' => $couponStatus == 'ACTIVED' ? 'PENDING' : 'INIT',
|
|
|
'coupon_detail_addtimes' => time()
|
|
|
]);
|
|
|
}
|