error("开始执行 处理用户优惠卷过期 队列:" . json_encode($data, JSON_UNESCAPED_UNICODE)); 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()){ $time = $valid_end_time - time(); $queue_data = array(); $queue_data['order_inquiry_id'] = $data['order_inquiry_id']; $message = new UserCouponExpiredDelayDirectProducer($queue_data); $message->setDelayMs(1000 * $time); $producer = $this->container->get(Producer::class); $res = $producer->produce($message); if (!$res) { Db::rollBack(); Log::getInstance()->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) { Db::rollBack(); Log::getInstance()->error("处理用户优惠卷过期 队列执行失败:" . $e->getMessage()); return Result::REQUEUE; // 重回队列 } } }