Browse Source

优惠券明细

gorden 6 months ago
parent
commit
3e655f98b7

+ 79 - 14
app/admin/controller/coupon/CouponController.php

@@ -249,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'])) {
@@ -305,13 +305,16 @@ 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();
@@ -326,12 +329,23 @@ class CouponController extends Curd
                     ->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');
@@ -346,6 +360,50 @@ 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)
+    {
+        dump($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 {
@@ -387,16 +445,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);
         }
@@ -443,6 +505,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);
 
@@ -584,16 +649,16 @@ class CouponController extends Curd
             // 删除优惠券关联的产品
             foreach ($ids as $id) {
                 $couponDetail = CouponDetail::with([
-                    'coupon'=>function($query){
-                        $query->select('coupon_id','coupon_name');
+                    'coupon' => function ($query) {
+                        $query->select('coupon_id', 'coupon_name');
                     }
-                ])->where('join_detail_coupon_id',$id)
-                    ->where('join_coupon_detail_member_id','<>','')
+                ])->where('join_detail_coupon_id', $id)
+                    ->where('join_coupon_detail_member_id', '<>', '')
                     ->first();
-                if (!empty($couponDetail)){
+                if (!empty($couponDetail)) {
                     Db::rollBack();
 
-                    return json_fail($couponDetail->coupon && $couponDetail->coupon->coupon_name ? $couponDetail->coupon->coupon_name."已被领取,无法删除,请禁用" : "删除的优惠券中有已被领取的,无法删除,请禁用");
+                    return json_fail($couponDetail->coupon && $couponDetail->coupon->coupon_name ? $couponDetail->coupon->coupon_name . "已被领取,无法删除,请禁用" : "删除的优惠券中有已被领取的,无法删除,请禁用");
                 }
                 CouponGoods::where('join_goods_coupon_id', $id)->delete();
 

+ 28 - 0
app/admin/controller/coupon/CouponDetailController.php

@@ -159,4 +159,32 @@ class CouponDetailController extends Curd
             return json_fail('数据修改失败');
         }
     }
+
+    /**
+     * @Desc 详情
+     * @Author Gorden
+     * @Date 2024/8/22 11:46
+     *
+     * @param Request $request
+     * @return Response
+     */
+    public function info(Request $request): Response
+    {
+        $detailId = $request->get('detail_id','');
+        if (empty($detailId)){
+            return json_fail('参数异常');
+        }
+
+        $detail = CouponDetail::where('coupon_detail_id',$detailId)
+            ->select('coupon_detail_id','coupon_detail_extend_json')
+            ->first();
+        if (!empty($detail->coupon_detail_extend_json)){
+            $couponDetailExtendJson = json_decode($detail->coupon_detail_extend_json,true);
+            if (isset($couponDetailExtendJson['from'])){
+                $detail['from'] = MemberService::getMemberNameByMemberId($couponDetailExtendJson['from']);
+            }
+        }
+
+        return json_success('',$detail);
+    }
 }

+ 53 - 5
app/admin/service/member/MemberService.php

@@ -163,6 +163,7 @@ class MemberService
 
             $row['source'] = "APP";
             $row['belong'] = [];
+            $row['referee'] = [];
             if (!empty($row['member_extend_json'])) {
                 $extendJson = json_decode($row['member_extend_json'], true);
                 if (isset($extendJson['come_from'])) {
@@ -177,6 +178,14 @@ class MemberService
                     }
                     $row['belong']['deptName'] = SysDept::where('dept_id', $extendJson['belong']['premises'])->value('dept_name');
                 }
+                if (isset($extendJson['referee'])){
+                    foreach ($extendJson['referee'] as $key => $referee){
+                        $row['referee'][] = [
+                            'name'=>$referee,
+                            'time'=>$key
+                        ];
+                    }
+                }
             }
         }
 
@@ -327,6 +336,7 @@ class MemberService
 
         $member['source'] = "APP";
         $member['belong'] = [];
+        $member['referee'] = [];
         if (!empty($member['member_extend_json'])) {
             $extendJson = json_decode($member['member_extend_json'], true);
             if (isset($extendJson['come_from'])) {
@@ -341,6 +351,14 @@ class MemberService
                 }
                 $member['belong']['deptName'] = SysDept::where('dept_id', $extendJson['belong']['premises'])->value('dept_name');
             }
+            if (isset($extendJson['referee'])){
+                foreach ($extendJson['referee'] as $key => $referee){
+                    $member['referee'][] = [
+                        'name'=>$referee,
+                        'time'=>$key
+                    ];
+                }
+            }
         }
 
         return json_success('', $member);
@@ -1153,17 +1171,47 @@ class MemberService
     public static function getMemberName($mobile, $certName, $nickname)
     {
         $name = '';
-        if (!empty($certName)){
+        if (!empty($certName)) {
             $name = $certName;
-        }elseif (!empty($nickname)){
+        } elseif (!empty($nickname)) {
             $name = $nickname;
         }
-        if (!empty($name) && !empty($mobile)){
-            $name .= '-'.$mobile;
-        }elseif (!empty($mobile)){
+        if (!empty($name) && !empty($mobile)) {
+            $name .= '-' . $mobile;
+        } elseif (!empty($mobile)) {
             $name = $mobile;
         }
 
         return $name;
     }
+
+    public static function getMemberNameByMemberId($memberId)
+    {
+        $member = Member::with([
+                'cert' => function ($query) {
+                    $query->select('join_cert_member_id', 'member_cert_name');
+                },
+                'info' => function ($query) {
+                    $query->select('join_info_member_id', 'member_info_nickname');
+                },
+            ]
+        )->where('member_id', $memberId)
+            ->first();
+        if (empty($member)) {
+            return;
+        }
+        $member = $member->toArray();
+        $mobile = $certName = $nickname = '';
+        if (!empty($member['member_mobile'])) {
+            $mobile = $member['member_mobile'];
+        }
+        if (!empty($member['cert']) && !empty($member['cert']['member_cert_name'])) {
+            $certName = $member['cert']['member_cert_name'];
+        }
+        if (!empty($member['info']) && !empty($member['info']['member_info_nickname'])) {
+            $nickname = $member['info']['member_info_nickname'];
+        }
+
+        return self::getMemberName($mobile, $certName, $nickname);
+    }
 }