diff --git a/app/Amqp/Consumer/AssignDoctorConsumer.php b/app/Amqp/Consumer/AssignDoctorConsumer.php index 7f44024..b91107e 100644 --- a/app/Amqp/Consumer/AssignDoctorConsumer.php +++ b/app/Amqp/Consumer/AssignDoctorConsumer.php @@ -8,11 +8,13 @@ use App\Model\OrderInquiry; use App\Services\InquiryService; use App\Services\UserDoctorService; use App\Utils\Log; +use Extend\Wechat\WechatPay; use Hyperf\Amqp\Result; use Hyperf\Amqp\Annotation\Consumer; use Hyperf\Amqp\Message\ConsumerMessage; use Hyperf\DbConnection\Db; use Hyperf\Redis\Redis; +use Hyperf\Snowflake\IdGeneratorInterface; use PhpAmqpLib\Message\AMQPMessage; use Psr\Container\ContainerExceptionInterface; use Psr\Container\NotFoundExceptionInterface; @@ -92,30 +94,40 @@ class AssignDoctorConsumer extends ConsumerMessage return Result::DROP;// 销毁 } + $redis = $this->container->get(Redis::class); + if ($diff_time > 300){ - try { - // 超出5分钟,执行退款 - Log::getInstance()->info("超出5分钟,执行退款"); - $InquiryService = new InquiryService(); - $InquiryService->inquiryRefund($order_inquiry['order_inquiry_id'],"分配医生失败"); + // 超出5分钟,执行退款 + Log::getInstance()->info("超出5分钟,执行退款"); - // 退款成功 - Db::commit(); - Log::getInstance()->info("订单已退款"); + $redis_key = "inquiryRefund" . $order_inquiry['order_inquiry_id']; + $redis_value = $redis->get($redis_key); + if (!empty($redis_value)){ + // 判断退款次数 + if ($redis_value >= 3){ + Log::getInstance()->info("退款取消,退款失败次数过多"); - // 加入消息通知队列 + // 加入短信队列 - return Result::ACK; - } catch (\Exception $e) { - Db::rollBack(); - Log::getInstance()->error("队列执行失败原因:" . "执行退款失败" . $e->getMessage()); - return Result::REQUEUE; // 重回队列 + return Result::DROP;// 销毁 + } + + $redis_value = $redis_value + 1; + }else{ + $redis_value = 1; } - } + try { + $InquiryService = new InquiryService(); + $InquiryService->inquiryRefund($order_inquiry['order_inquiry_id'],"暂无医生接诊"); - $redis = $this->container->get(Redis::class); - $redis_key = $order_inquiry['order_inquiry_id']; + $redis->set($redis_key,$redis_value); + } catch (\Exception $e) { + Db::rollBack(); + Log::getInstance()->error("队列执行失败原因:退款失败,原因:" . $e->getMessage()); + return Result::REQUEUE; // 重回队列 + } + } // 分配医生 $UserDoctorService = new UserDoctorService(); @@ -123,6 +135,8 @@ class AssignDoctorConsumer extends ConsumerMessage if (empty($doctor_id)){ Db::rollBack(); Log::getInstance()->error("重回队列,目前没有合适医生"); + + $redis_key = "AssignDoctor" . $order_inquiry['order_inquiry_id']; $redis_value = $redis->get($redis_key); if (!empty($redis_value)){ $redis_value = $redis_value + 1;