info("开始:" . 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']); try { // 处理未过期事件 // 先删除-重新添加队列 $time = $valid_end_time - time(); if ($time > 0){ $queue_data = array(); $queue_data['user_coupon_id'] = $user_coupon['user_coupon_id']; $message = new UserCouponExpiredDelayDirectProducer($queue_data); $message->setDelayMs(1000 * $time); $producer = $this->container->get(Producer::class); $res = $producer->produce($message); if (!$res) { 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); } catch (\Throwable $e) { Log::getInstance("queue-UserCouponExpired")->error($e->getMessage()); return Result::REQUEUE; // 重回队列 } 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; } }