hospital-applets-api/app/Amqp/Consumer/CancelUnpayOrdersDelayDirectConsumer.php

91 lines
3.6 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
declare(strict_types=1);
namespace App\Amqp\Consumer;
use App\Model\OrderInquiry;
use App\Utils\Log;
use Hyperf\Amqp\Message\ConsumerDelayedMessageTrait;
use Hyperf\Amqp\Message\ProducerDelayedMessageTrait;
use Hyperf\Amqp\Result;
use Hyperf\Amqp\Annotation\Consumer;
use Hyperf\Amqp\Message\ConsumerMessage;
use Hyperf\Snowflake\IdGeneratorInterface;
use PhpAmqpLib\Message\AMQPMessage;
use Hyperf\Amqp\Message\Type;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
/**
* 取消未支付订单消费者-延迟队列
*/
#[Consumer(nums: 1)]
class CancelUnpayOrdersDelayDirectConsumer extends ConsumerMessage
{
use ProducerDelayedMessageTrait;
use ConsumerDelayedMessageTrait;
protected string $exchange = 'amqp.delay.direct';
protected ?string $queue = 'cancel.unpay.orders.delay.queue';
protected string $type = Type::DIRECT; //Type::FANOUT;
protected string|array $routingKey = 'CancelUnpayOrders';
public function consumeMessage($data, AMQPMessage $message): string
{
Log::getInstance()->error("开始执行 取消未支付订单 队列:" . json_encode($data, JSON_UNESCAPED_UNICODE));
try {
// 获取订单数据
$params = array();
$params['order_inquiry_id'] = $data['order_inquiry_id'];
$order_inquiry = OrderInquiry::getOne($params);
if (empty($order_inquiry)) {
Log::getInstance()->error("队列执行失败原因:未查询到对应订单数据");
return Result::DROP;// 销毁
}
// 检测订单状态
if ($order_inquiry['inquiry_status'] != 1) {
// 问诊订单状态1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消)
Log::getInstance()->error("队列执行失败原因:订单状态为" . $order_inquiry['inquiry_status'] . "无法执行");
return Result::DROP;// 销毁
}
if ($order_inquiry['inquiry_refund_status'] != 0 && $order_inquiry['inquiry_refund_status'] != 5) {
// 问诊订单退款状态0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭)
Log::getInstance()->error("队列执行失败原因:订单正在退款中");
return Result::DROP;// 销毁
}
if ($order_inquiry['inquiry_pay_status'] == 2) {
// 支付状态1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款)
Log::getInstance()->error("队列执行失败原因:订单已支付");
return Result::DROP;// 销毁
}
// 取消问诊订单
$data = array();
$data['inquiry_status'] = 7;
$data['inquiry_refund_status'] = 2;
$data['inquiry_pay_status'] = 5;
$data['cancel_time'] = date("Y-m-d H:i:s",time());
$data['cancel_reason'] = 5; // 取消订单原因1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时)
$data['updated_at'] = date("Y-m-d H:i:s",time());
$params = array();
$params['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
OrderInquiry::edit($params,$data);
Log::getInstance()->error("取消未支付订单 队列执行成功");
return Result::ACK;
} catch (\Exception $e) {
Log::getInstance()->error("队列执行失败原因:" . $e->getMessage());
return Result::REQUEUE; // 重回队列
}
}
}