info("开始:" . json_encode($data, JSON_UNESCAPED_UNICODE)); // 检测参数 if (!isset($data['coupon_id'])){ Log::getInstance("queue-CouponExpired")->error("入参错误"); return Result::DROP; } // 获取优惠卷数据 $params = array(); $params['coupon_id'] = $data['coupon_id']; $coupon = Coupon::getOne($params); if (empty($coupon)){ Log::getInstance("queue-CouponExpired")->info("错误优惠卷,无需处理"); return Result::DROP; } // 检测优惠卷状态 if ($coupon['coupon_status'] != 1){ Log::getInstance("queue-CouponExpired")->info("优惠卷非正常状态,无需处理"); return Result::DROP; } // 检测优惠卷过期时间 if ($coupon['valid_type'] == 2){ Log::getInstance("queue-CouponExpired")->info("优惠卷类型为相对时效,无需处理"); return Result::DROP; } $valid_end_time = strtotime($coupon['valid_end_time']); try { // 处理未过期事件 // 先删除-重新添加队列 $time = $valid_end_time - time(); if ($time > 0) { $queue_data = array(); $queue_data['coupon_id'] = $coupon['coupon_id']; $message = new CouponExpiredDelayDirectProducer($queue_data); $message->setDelayMs(1000 * $time); $producer = $this->container->get(Producer::class); $res = $producer->produce($message); if (!$res) { Log::getInstance("queue-CouponExpired")->error("未到过期时间,重新添加队列失败"); return Result::REQUEUE; } return Result::DROP; } // 修改优惠卷 $params = array(); $params['coupon_id'] = $coupon['coupon_id']; $data = array(); $data['coupon_status'] = 3; Coupon::edit($params, $data); }catch (\Throwable $e){ Log::getInstance("queue-CouponExpired")->error($e->getMessage()); return Result::REQUEUE; // 重回队列 } return Result::ACK; } }