diff --git a/app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php b/app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php index f2006cf..83ba436 100644 --- a/app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php +++ b/app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php @@ -7,7 +7,9 @@ namespace App\Amqp\Consumer; use App\Amqp\Producer\AutoCompleteInquiryDelayDirectProducer; use App\Amqp\Producer\UserCouponExpiredDelayDirectProducer; use App\Constants\HttpEnumCode; +use App\Model\Coupon; use App\Model\UserCoupon; +use App\Services\CouponService; use App\Utils\Log; use Hyperf\Amqp\Message\ConsumerDelayedMessageTrait; use Hyperf\Amqp\Message\ProducerDelayedMessageTrait; @@ -38,44 +40,40 @@ class UserCouponExpiredDelayDirectConsumer extends ConsumerMessage public function consumeMessage($data, AMQPMessage $message): string { - Log::getInstance()->error("开始执行 处理用户优惠卷过期 队列:" . json_encode($data, JSON_UNESCAPED_UNICODE)); + Log::getInstance("queue-UserCouponExpired")->error("开始:" . json_encode($data, JSON_UNESCAPED_UNICODE)); + + // 检测参数 + if (!isset($data['user_coupon_id'])){ + Log::getInstance("queue-UserCouponExpired")->error("入参错误"); + return Result::DROP; + } + + // 获取优惠卷数据 + $params = array(); + $params['user_coupon_id'] = $data['user_coupon_id']; + $user_coupon = UserCoupon::getOne($params); + if (empty($user_coupon)){ + Log::getInstance("queue-UserCouponExpired")->info("用户无优惠卷,无需处理"); + return Result::DROP; + } + + // 检测优惠卷是否被使用 + if ($user_coupon['user_coupon_status'] == 1){ + Log::getInstance("queue-UserCouponExpired")->info("用户优惠卷已被使用,无需处理"); + return Result::DROP; + } + + // 检测优惠卷是否已执行过期处理 + if ($user_coupon['user_coupon_status'] == 3){ + Log::getInstance("queue-UserCouponExpired")->info("优惠卷已过期,无需处理"); + return Result::DROP; + } + + // 检测优惠卷过期时间 + $valid_end_time = strtotime($user_coupon['valid_end_time']); Db::beginTransaction(); try { - // 检测参数 - if (!isset($data['user_coupon_id'])){ - Db::rollBack(); - Log::getInstance()->error("处理用户优惠卷过期队列 执行失败:入参错误"); - return Result::DROP; - } - - // 获取优惠卷数据 - $params = array(); - $params['user_coupon_id'] = $data['user_coupon_id']; - $user_coupon = UserCoupon::getOne($params); - if (empty($user_coupon)){ - Db::rollBack(); - Log::getInstance()->info("处理用户优惠卷过期队列 执行结束:无优惠卷数据"); - return Result::DROP; - } - - // 检测优惠卷是否被使用 - if ($user_coupon['user_coupon_status'] == 1){ - Db::rollBack(); - Log::getInstance()->info("处理用户优惠卷过期队列 执行结束:优惠卷已被使用,无需处理"); - return Result::DROP; - } - - // 检测优惠卷是否已执行过期处理 - if ($user_coupon['user_coupon_status'] == 3){ - Db::rollBack(); - Log::getInstance()->info("处理用户优惠卷过期队列 执行结束:优惠卷已执行过期处理,无需处理"); - return Result::DROP; - } - - // 检测优惠卷过期时间 - $valid_end_time = strtotime($user_coupon['valid_end_time']); - // 处理未过期事件 // 先删除-重新添加队列 if ($valid_end_time > time()){ @@ -90,28 +88,66 @@ class UserCouponExpiredDelayDirectConsumer extends ConsumerMessage $res = $producer->produce($message); if (!$res) { Db::rollBack(); - Log::getInstance()->error("处理用户优惠卷过期队列 执行失败:未到过期时间,重新添加队列失败"); + Log::getInstance("queue-UserCouponExpired")->error("未到过期时间,重新添加队列失败"); return Result::REQUEUE; } return Result::DROP; } - // 处理已过期事件 + // 修改用户优惠卷表 $params = array(); $params['user_coupon_id'] = $user_coupon['user_coupon_id']; $data = array(); $data['user_coupon_status'] = 3; UserCoupon::edit($params, $data); - - Db::commit(); - Log::getInstance()->info("处理用户优惠卷过期 队列执行成功"); - return Result::ACK; - } catch (\Exception $e) { + } catch (\Throwable $e) { Db::rollBack(); - Log::getInstance()->error("处理用户优惠卷过期 队列执行失败:" . $e->getMessage()); + Log::getInstance("queue-UserCouponExpired")->error($e->getMessage()); return Result::REQUEUE; // 重回队列 } + + Db::commit(); + Log::getInstance("queue-UserCouponExpired")->info("成功"); + + Db::beginTransaction(); + try { + // 获取优惠卷数据 + $params = array(); + $params['coupon_id'] = $user_coupon["coupon_id"]; + $coupon = Coupon::getOne($params); + if (empty($coupon)){ + Db::rollBack(); + Log::getInstance("queue-UserCouponExpired")->error("无优惠卷数据"); + return Result::DROP; + } + + // 检测优惠卷状态 + if ($coupon['coupon_status'] != 1){ + Db::rollBack(); + Log::getInstance("queue-UserCouponExpired")->info("优惠卷非正常状态,停止执行"); + return Result::DROP; + } + + // 重新发放优惠卷 + if ($coupon['is_reissuable_after_expire'] == 1){ + $couponService = new CouponService(); + $res = $couponService->GrantUserCoupon($coupon['coupon_id'],$user_coupon['user_id']); + if (!$res){ + // 发放失败 + Db::rollBack(); + Log::getInstance("queue-UserCouponExpired")->error("重新发放优惠卷失败"); + return Result::DROP; + } + } + }catch (\Throwable $e){ + Db::rollBack(); + Log::getInstance("queue-UserCouponExpired")->error($e->getMessage()); + } + + Db::commit(); + + return Result::ACK; } }