diff --git a/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php b/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php index 3408f1e..5627ec6 100644 --- a/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php +++ b/app/Amqp/Consumer/CancelUnInquiryOrdersDelayDirectConsumer.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace App\Amqp\Consumer; +use App\Constants\HttpEnumCode; use App\Model\OrderInquiry; use App\Model\OrderInquiryCoupon; use App\Model\UserCoupon; @@ -19,6 +20,7 @@ use Hyperf\Amqp\Result; use Hyperf\Amqp\Annotation\Consumer; use Hyperf\Amqp\Message\ConsumerMessage; use Hyperf\DbConnection\Db; +use Hyperf\Redis\Redis; use PhpAmqpLib\Message\AMQPMessage; use Psr\Container\ContainerExceptionInterface; use Psr\Container\NotFoundExceptionInterface; @@ -64,6 +66,19 @@ class CancelUnInquiryOrdersDelayDirectConsumer extends ConsumerMessage return Result::ACK; } + // 检测锁定 + $redis = $this->container->get(Redis::class); + $redis_key = "order_inquiry_lock_" . $data['order_inquiry_id']; + $redis_lock = $redis->setnx($redis_key,1); + // 设置过期时间 + $redis->expire($redis_key,3); + if (!$redis_lock){ + // 设置失败,表示已经设置该值 + Db::rollBack(); + Log::getInstance()->error("取消未接诊问诊订单失败:正在锁定中" ); + return Result::REQUEUE; + } + // 检测订单状态 if ($order_inquiry['inquiry_status'] == 7) { // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 98f231b..c38f103 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -287,7 +287,7 @@ class PatientOrderService extends BaseService $redis_key = "order_inquiry_lock_" . $order_inquiry_id; $redis_lock = $redis->setnx($redis_key,1); // 设置过期时间 - $redis->expire($redis_key,2); + $redis->expire($redis_key,3); if (!$redis_lock){ // 设置失败,表示已经设置该值 return fail(HttpEnumCode::HTTP_SUCCESS,"请您稍后重试"); diff --git a/app/Services/UserDoctorService.php b/app/Services/UserDoctorService.php index 31c3a88..b91e09f 100644 --- a/app/Services/UserDoctorService.php +++ b/app/Services/UserDoctorService.php @@ -1697,7 +1697,7 @@ class UserDoctorService extends BaseService $redis_key = "order_inquiry_lock_" . $order_inquiry_id; $redis_lock = $redis->setnx($redis_key,1); // 设置过期时间 - $redis->expire($redis_key,2); + $redis->expire($redis_key,3); if (!$redis_lock){ // 设置失败,表示已经设置该值 return fail(HttpEnumCode::HTTP_SUCCESS,"请您稍后重试");