新增分配医生延迟队列

This commit is contained in:
wucongxing 2023-04-26 15:35:19 +08:00
parent daf2981c3f
commit d746a7ae8a
5 changed files with 22 additions and 49 deletions

View File

@ -211,7 +211,7 @@ class AssignDoctorConsumer extends ConsumerMessage
$imService = new ImService(); $imService = new ImService();
$imService->waitDoctorInquiry($order_inquiry,$user_doctor['user_id'],$order_inquiry['user_id']); $imService->waitDoctorInquiry($order_inquiry,$user_doctor['user_id'],$order_inquiry['user_id']);
// 发送站内、订阅失败发送短信消息-问诊结束 // 医生-医生有新问诊 站内、订阅失败发送短信
$MessagePush = new MessagePush($user_doctor['user_id'],$order_inquiry['order_inquiry_id']); $MessagePush = new MessagePush($user_doctor['user_id'],$order_inquiry['order_inquiry_id']);
$MessagePush->doctorHaveNewInquiry(); $MessagePush->doctorHaveNewInquiry();

View File

@ -2,6 +2,7 @@
namespace App\Controller; namespace App\Controller;
use App\Amqp\Producer\AssignDoctorDelayDirectProducer;
use App\Amqp\Producer\AssignDoctorProducer; use App\Amqp\Producer\AssignDoctorProducer;
use App\Constants\DoctorTitleCode; use App\Constants\DoctorTitleCode;
use App\Constants\HttpEnumCode; use App\Constants\HttpEnumCode;
@ -143,10 +144,11 @@ class CallBackController extends AbstractController
$data = array(); $data = array();
$data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
$message = new AssignDoctorProducer($data); $message = new AssignDoctorDelayDirectProducer($data);
$producer = ApplicationContext::getContainer()->get(Producer::class); $message->setDelayMs(1000 * 5);
$result = $producer->produce($message); $producer = $this->container->get(Producer::class);
if (!$result) { $res = $producer->produce($message);
if (!$res) {
Log::getInstance()->info("加入分配医生队列失败"); Log::getInstance()->info("加入分配医生队列失败");
return $server->serve(); return $server->serve();
} }

View File

@ -2,6 +2,7 @@
namespace App\Controller; namespace App\Controller;
use App\Amqp\Producer\AssignDoctorDelayDirectProducer;
use App\Amqp\Producer\AssignDoctorProducer; use App\Amqp\Producer\AssignDoctorProducer;
use App\Amqp\Producer\AutoCompleteInquiryDelayDirectProducer; use App\Amqp\Producer\AutoCompleteInquiryDelayDirectProducer;
use App\Amqp\Producer\AutoFinishInquiryDelayDirectProducer; use App\Amqp\Producer\AutoFinishInquiryDelayDirectProducer;
@ -325,46 +326,13 @@ class TestController extends AbstractController
} }
public function test_15(){ public function test_15(){
$data = array();
$data['order_inquiry_id'] = 1;
$wg = new \Hyperf\Utils\WaitGroup(); $message = new AssignDoctorDelayDirectProducer($data);
$channel = new Channel(); $message->setDelayMs(1000 * 10);
$wg->add(2); $producer = $this->container->get(Producer::class);
$res = $producer->produce($message);
co(function () use ($wg,$channel) {
defer(function() use ($wg) {
dump("执行了defer");
$wg->done();
});
dump("执行了协程1");
});
co(function () use ($wg,$channel) {
defer(function() use ($wg) {
dump("执行了defer");
$wg->done();
});
dump("执行了协程2");
});
$wg->wait();
$res = $channel->isEmpty();
if ($res){
dump("存在异常");
}
$res = $channel->close();
dump($res);
$a = $wg->count();
dump($a);
dump("执行完毕");
} }
} }

View File

@ -1303,7 +1303,8 @@ class InquiryService extends BaseService
$redis->incr($redis_key); $redis->incr($redis_key);
} catch (\Exception $e) { } catch (\Exception $e) {
throw new BusinessException("检测问诊订单执行退款次数失败:" . $e->getMessage()); Log::getInstance()->error("检测问诊订单执行退款次数失败:" . $e->getMessage());
return false;
} }
return true; return true;

View File

@ -2,6 +2,7 @@
namespace App\Services; namespace App\Services;
use App\Amqp\Producer\AssignDoctorDelayDirectProducer;
use App\Amqp\Producer\AssignDoctorProducer; use App\Amqp\Producer\AssignDoctorProducer;
use App\Amqp\Producer\CancelUnpayOrdersDelayDirectProducer; use App\Amqp\Producer\CancelUnpayOrdersDelayDirectProducer;
use App\Constants\DoctorTitleCode; use App\Constants\DoctorTitleCode;
@ -852,10 +853,11 @@ class PatientOrderService extends BaseService
$data = array(); $data = array();
$data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
$message = new AssignDoctorProducer($data); $message = new AssignDoctorDelayDirectProducer($data);
$producer = ApplicationContext::getContainer()->get(Producer::class); $message->setDelayMs(1000 * 5);
$result = $producer->produce($message); $producer = $this->container->get(Producer::class);
if (!$result) { $res = $producer->produce($message);
if (!$res) {
Db::rollBack(); Db::rollBack();
return fail(HttpEnumCode::HTTP_ERROR, "分配医生失败"); return fail(HttpEnumCode::HTTP_ERROR, "分配医生失败");
} }