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

98 lines
3.5 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\Model\OrderInquiryCoupon;
use App\Model\OrderPrescription;
use App\Model\OrderPrescriptionProduct;
use App\Model\OrderProduct;
use App\Model\OrderProductItem;
use App\Model\Product;
use App\Model\ProductPlatformAmount;
use App\Model\UserCoupon;
use App\Services\DetectionService;
use App\Services\InquiryService;
use App\Services\OrderProductService;
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\DbConnection\Db;
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("queue-CancelUnpayOrders")->error("开始执行 取消未支付订单 队列:" . json_encode($data, JSON_UNESCAPED_UNICODE));
Db::beginTransaction();
try {
if ($data['order_type'] == 1) {
// 问诊订单取消
$InquiryService = new InquiryService();
$result = $InquiryService->cancelUnpayInquiryOrder($data['order_no'], 5, "支付超时");
} elseif ($data['order_type'] == 2) {
// 药品订单取消
$OrderProductService = new OrderProductService();
$result = $OrderProductService->cancelUnpayProductOrder($data['order_no'], 3, "支付超时");
} elseif ($data['order_type'] == 3) {
// 检测订单取消
$DetectionService = new DetectionService();
$result = $DetectionService->cancelUnpayDetectionOrder($data['order_no'], 3, "支付超时");
} else {
Log::getInstance("queue-CancelUnpayOrders")->error("取消未支付订单失败order_type类型错误");
return Result::DROP;// 销毁
}
if ($result['status'] == 0) {
Db::rollBack();
Log::getInstance("queue-CancelUnpayOrders")->error("取消未支付订单失败:" . $result['message']);
return Result::DROP;// 销毁
} elseif ($result['status'] == 2) {
Db::rollBack();
Log::getInstance("queue-CancelUnpayOrders")->info("取消未支付订单成功:" . $result['message']);
return Result::ACK;// 销毁
}
Db::commit();
Log::getInstance("queue-CancelUnpayOrders")->info("取消未支付订单 队列执行成功");
return Result::ACK;
} catch (\Exception $e) {
Db::rollBack();
Log::getInstance("queue-CancelUnpayOrders")->error("取消未支付订单执行失败:" . $e->getMessage());
return Result::ACK; // 重回队列
}
}
}