diff --git a/app/Services/PatientOrderService.php b/app/Services/PatientOrderService.php index 2ff32b0..ea63ecf 100644 --- a/app/Services/PatientOrderService.php +++ b/app/Services/PatientOrderService.php @@ -28,6 +28,7 @@ use Extend\Wechat\WechatPay; use GuzzleHttp\Exception\GuzzleException; use Hyperf\Amqp\Producer; use Hyperf\DbConnection\Db; +use Hyperf\Redis\Redis; use Hyperf\Snowflake\IdGeneratorInterface; use Hyperf\Utils\ApplicationContext; use Psr\Container\ContainerExceptionInterface; @@ -280,7 +281,15 @@ class PatientOrderService extends BaseService return fail(); } - + $redis = $this->container->get(Redis::class); + $redis_key = "order_inquiry_lock_" . $order_inquiry_id; + $redis_lock = $redis->setnx($redis_key,1); + // 设置过期时间 + $redis->expire($redis_key,2); + if (!$redis_lock){ + // 设置失败,表示已经设置该值 + return fail(HttpEnumCode::HTTP_SUCCESS,"请您稍后重试"); + } // 检测订单状态 if (!in_array($order_inquiry['inquiry_status'], [1, 2, 3])) { @@ -336,6 +345,9 @@ class PatientOrderService extends BaseService $MessagePush->patientCancelInquiryToDoctor(); } + // 删除锁 + $redis->del($redis_key); + Db::commit(); } catch (\Exception $e) { Db::rollBack(); diff --git a/app/Services/UserDoctorService.php b/app/Services/UserDoctorService.php index b49318c..c590783 100644 --- a/app/Services/UserDoctorService.php +++ b/app/Services/UserDoctorService.php @@ -1640,7 +1640,15 @@ class UserDoctorService extends BaseService return fail(HttpEnumCode::HTTP_ERROR, "接诊失败"); } - + $redis = $this->container->get(Redis::class); + $redis_key = "order_inquiry_lock_" . $order_inquiry_id; + $redis_lock = $redis->setnx($redis_key,1); + // 设置过期时间 + $redis->expire($redis_key,2); + if (!$redis_lock){ + // 设置失败,表示已经设置该值 + return fail(HttpEnumCode::HTTP_SUCCESS,"请您稍后重试"); + } if ($order_inquiry['inquiry_status'] != 3) { // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) @@ -1692,6 +1700,9 @@ class UserDoctorService extends BaseService Db::rollBack(); return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); } + + // 删除锁 + $redis->del($redis_key); Db::commit(); } catch (\Exception $e) { Db::rollBack();