新增创建检测问诊订单接口,修改回调数据

This commit is contained in:
wucongxing 2023-08-25 18:12:15 +08:00
parent bdd7492670
commit 48f180dbb1
5 changed files with 358 additions and 137 deletions

View File

@ -65,7 +65,7 @@ class DetectionCompleteDelayDirectConsumer extends ConsumerMessage
// 获取现在时间距离订单结束时间的时间差
$time_diff = $InquiryService->getInquiryFinishTimeDiff($order_inquiry);
if ($time_diff == 0){
$time_diff = 10;
$time_diff = 60;
}
// 计算时间并重新加入队列
@ -129,8 +129,6 @@ class DetectionCompleteDelayDirectConsumer extends ConsumerMessage
Log::getInstance("queue-DetectionComplete")->error("患者信息错误");
return Result::DROP;
}
}catch (\Throwable $e){
Log::getInstance("queue-DetectionComplete")->error($e->getMessage());
return Result::DROP;
@ -194,16 +192,12 @@ class DetectionCompleteDelayDirectConsumer extends ConsumerMessage
// 修改检测订单
$data = array();
$data['detection_status'] = 4;
$data['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];// 订单-问诊id
$params = array();
$params['order_detection_id'] = $order_detection['order_detection_id'];
OrderDetection::editOrderDetection($params,$data);
// 回填检测结果字段
$order_detection['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
// 添加自动完成队列
$time = 1000 * 60 * 60 * 24 * 3;

View File

@ -1685,6 +1685,9 @@ class CallBackController extends AbstractController
return $this->detectionResultFailReturn("订单数据错误");
}
// 发送im消息
$imService = new ImService();
// 检测当前医生是否和患者存在未完成问诊订单
$InquiryService = new InquiryService();
$order_inquiry = $InquiryService->checkPatientDoctorProgressInquiry($order_detection['user_id'],$order_detection['doctor_id']);
@ -1707,142 +1710,16 @@ class CallBackController extends AbstractController
return $this->detectionResultFailReturn("加入队列失败");
}
// 修改检测订单
$data = array();
$data['detection_result_pdf'] = $detection_result_pdf;
$data['detection_result_date'] = date('Y-m-d H:i:s',time());
$params = array();
$params['order_detection_id'] = $order_detection['order_detection_id'];
OrderDetection::editOrderDetection($params,$data);
// 发送im消息
$imService = new ImService();
// 发送IM消息-检测报告结果
$imService->detectionTestReport(
$order_detection,
$user_doctor['user_id'],
$order_detection['user_id'],
$order_detection_case['detection_disease_class_names'],
$detection_project['detection_project_name']
);
// 发送IM消息-检测报告结果-文字
$imService->detectionTestReportStr(
$order_detection,
$user_doctor['user_name'],
$detection_project['detection_project_name'],
$user_doctor['user_id'],
$order_detection['user_id']
);
return $this->detectionResultSuccessReturn();
}
// 检测家庭成员是否存在
$params = array();
$params['family_id'] = $order_detection['family_id'];
$params['patient_id'] = $order_detection['patient_id'];
$patient_family = PatientFamily::getOne($params);
if (empty($patient_family)) {
return $this->detectionResultFailReturn("患者信息错误");
}
Db::beginTransaction();
try {
$generator = $this->container->get(IdGeneratorInterface::class);
// 创建问诊订单
$data = array();
$data['user_id'] = $order_detection['user_id'];
$data['patient_id'] = $order_detection['patient_id'];
$data['doctor_id'] = $order_detection['doctor_id'];
$data['family_id'] = $order_detection['family_id'];
$data['inquiry_type'] = 5; // 订单类型1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药 5:检测)
$data['inquiry_mode'] = 1; // 订单问诊方式1:图文 2:视频 3:语音 4:电话 5:会员)
$data['inquiry_status'] = 4; // 问诊订单状态1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消)
$data['inquiry_pay_channel'] = 3; // 支付渠道1:小程序支付 2:微信扫码支付 3:模拟支付)
$data['inquiry_pay_status'] = 2; // 支付状态1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款)
$data['inquiry_no'] = $generator->generate();// 订单编号
$data['escrow_trade_no'] = "GD" . $generator->generate(); // 第三方支付流水号
$data['amount_total'] = 0;// 订单金额
$data['coupon_amount_total'] = 0;// 优惠卷总金额
$data['payment_amount_total'] = 0;// 实际付款金额
$data['pay_time'] = date('Y-m-d H:i:s', time());// 支付时间
$data['reception_time'] = date('Y-m-d H:i:s', time());// 接诊时间
$data['patient_name'] = $patient_family['card_name'];// 患者姓名-就诊人
$data['patient_name_mask'] = $patient_family['card_name_mask'];// 患者姓名-就诊人(掩码)
$data['patient_sex'] = $patient_family['sex'];// 患者性别-就诊人0:未知 1:男 2:女)
$data['patient_age'] = $patient_family['age'];// 患者年龄-就诊人
$order_inquiry = OrderInquiry::addOrderInquiry($data);
if (empty($order_inquiry)) {
Db::rollBack();
return $this->detectionResultFailReturn("问诊订单创建失败");
}
// 回填问诊订单id
$order_detection['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
// 增加患者问诊病例
$data = array();
$data['user_id'] = $order_detection['user_id'];
$data['patient_id'] = $order_detection['patient_id'];
$data['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];// 订单-问诊id
$data['family_id'] = $patient_family['family_id']; // 家庭成员id
$data['relation'] = $patient_family['relation']; // 与患者关系1:本人 2:父母 3:爱人 4:子女 5:亲戚 6:其他
$data['name'] = $patient_family['card_name']; // 患者名称
$data['sex'] = $patient_family['sex'] ?? 0; // 患者性别0:未知 1:男 2:女)
$data['age'] = $patient_family['age'] ?? null; // 患者年龄
$data['height'] = $patient_family['height'] ?: null; // 身高cm
$data['weight'] = $patient_family['weight'] ?: null;; // 体重kg
$order_inquiry_case = OrderInquiryCase::addOrderInquiryCase($data);
if (empty($order_inquiry_case)) {
Db::rollBack();
return $this->detectionResultFailReturn("问诊订单病例创建失败");
}
// 修改检测订单
$data = array();
$data['detection_status'] = 4;
$data['detection_result_pdf'] = $detection_result_pdf;
$data['detection_result_date'] = date('Y-m-d H:i:s',time());
$data['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];// 订单-问诊id
$params = array();
$params['order_detection_id'] = $order_detection['order_detection_id'];
OrderDetection::editOrderDetection($params,$data);
// 回填检测结果字段
$order_detection['detection_result_pdf'] = $detection_result_pdf;
$order_detection['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
// 添加自动完成队列
$time = 1000 * 60 * 60 * 24 * 3;
$data = array();
$data['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
$message = new AutoCompleteInquiryDelayDirectProducer($data);
$message->setDelayMs($time);
$producer = $this->container->get(Producer::class);
$res = $producer->produce($message);
if (!$res) {
Db::rollBack();
return $this->detectionResultFailReturn("添加自动完成队列失败");
}
// 发送im消息
$imService = new ImService();
// 患者病例
$imService->patientCase(
$order_inquiry,
$user_doctor['user_id'],
$order_inquiry_case['disease_desc']
);
// 发送IM消息-检测报告结果
$imService->detectionTestReport(
$order_detection,
@ -1852,10 +1729,114 @@ class CallBackController extends AbstractController
$detection_project['detection_project_name']
);
Db::commit();
} catch (\Throwable $e) {
Db::rollBack();
return $this->detectionResultFailReturn($e->getMessage());
return $this->detectionResultSuccessReturn();
}else{
// 检测家庭成员是否存在
$params = array();
$params['family_id'] = $order_detection['family_id'];
$params['patient_id'] = $order_detection['patient_id'];
$patient_family = PatientFamily::getOne($params);
if (empty($patient_family)) {
return $this->detectionResultFailReturn("患者信息错误");
}
Db::beginTransaction();
try {
$generator = $this->container->get(IdGeneratorInterface::class);
// 创建问诊订单
$data = array();
$data['user_id'] = $order_detection['user_id'];
$data['patient_id'] = $order_detection['patient_id'];
$data['doctor_id'] = $order_detection['doctor_id'];
$data['family_id'] = $order_detection['family_id'];
$data['inquiry_type'] = 5; // 订单类型1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药 5:检测)
$data['inquiry_mode'] = 1; // 订单问诊方式1:图文 2:视频 3:语音 4:电话 5:会员)
$data['inquiry_status'] = 4; // 问诊订单状态1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消)
$data['inquiry_pay_channel'] = 3; // 支付渠道1:小程序支付 2:微信扫码支付 3:模拟支付)
$data['inquiry_pay_status'] = 2; // 支付状态1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款)
$data['inquiry_no'] = $generator->generate();// 订单编号
$data['escrow_trade_no'] = "GD" . $generator->generate(); // 第三方支付流水号
$data['amount_total'] = 0;// 订单金额
$data['coupon_amount_total'] = 0;// 优惠卷总金额
$data['payment_amount_total'] = 0;// 实际付款金额
$data['pay_time'] = date('Y-m-d H:i:s', time());// 支付时间
$data['reception_time'] = date('Y-m-d H:i:s', time());// 接诊时间
$data['patient_name'] = $patient_family['card_name'];// 患者姓名-就诊人
$data['patient_name_mask'] = $patient_family['card_name_mask'];// 患者姓名-就诊人(掩码)
$data['patient_sex'] = $patient_family['sex'];// 患者性别-就诊人0:未知 1:男 2:女)
$data['patient_age'] = $patient_family['age'];// 患者年龄-就诊人
$order_inquiry = OrderInquiry::addOrderInquiry($data);
if (empty($order_inquiry)) {
Db::rollBack();
return $this->detectionResultFailReturn("问诊订单创建失败");
}
// 回填问诊订单id
$order_detection['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
// 增加患者问诊病例
$data = array();
$data['user_id'] = $order_detection['user_id'];
$data['patient_id'] = $order_detection['patient_id'];
$data['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];// 订单-问诊id
$data['family_id'] = $patient_family['family_id']; // 家庭成员id
$data['relation'] = $patient_family['relation']; // 与患者关系1:本人 2:父母 3:爱人 4:子女 5:亲戚 6:其他
$data['name'] = $patient_family['card_name']; // 患者名称
$data['sex'] = $patient_family['sex'] ?? 0; // 患者性别0:未知 1:男 2:女)
$data['age'] = $patient_family['age'] ?? null; // 患者年龄
$data['height'] = $patient_family['height'] ?: null; // 身高cm
$data['weight'] = $patient_family['weight'] ?: null;; // 体重kg
$order_inquiry_case = OrderInquiryCase::addOrderInquiryCase($data);
if (empty($order_inquiry_case)) {
Db::rollBack();
return $this->detectionResultFailReturn("问诊订单病例创建失败");
}
// 修改检测订单
$data = array();
$data['detection_status'] = 4;
$data['detection_result_pdf'] = $detection_result_pdf;
$data['detection_result_date'] = date('Y-m-d H:i:s',time());
$data['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];// 订单-问诊id
$params = array();
$params['order_detection_id'] = $order_detection['order_detection_id'];
OrderDetection::editOrderDetection($params,$data);
// 回填检测结果字段
$order_detection['detection_result_pdf'] = $detection_result_pdf;
// 添加自动完成队列
$time = 1000 * 60 * 60 * 24 * 3;
$data = array();
$data['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
$message = new AutoCompleteInquiryDelayDirectProducer($data);
$message->setDelayMs($time);
$producer = $this->container->get(Producer::class);
$res = $producer->produce($message);
if (!$res) {
Db::rollBack();
return $this->detectionResultFailReturn("添加自动完成队列失败");
}
// 发送IM消息-检测报告结果
$imService->detectionTestReport(
$order_detection,
$user_doctor['user_id'],
$order_detection['user_id'],
$order_detection_case['detection_disease_class_names'],
$detection_project['detection_project_name']
);
Db::commit();
} catch (\Throwable $e) {
Db::rollBack();
return $this->detectionResultFailReturn($e->getMessage());
}
}
try {

View File

@ -107,4 +107,16 @@ class DetectionController extends AbstractController
$data = $detectionService->bindDetectionTube();
return $this->response->json($data);
}
/**
* 创建检测问诊订单
* @return ResponseInterface
*/
public function addDetectionInquiryOrder(): ResponseInterface
{
$detectionService = new DetectionService();
$data = $detectionService->addDetectionInquiryOrder();
return $this->response->json($data);
}
}

View File

@ -2,6 +2,7 @@
namespace App\Services;
use App\Amqp\Producer\AutoCompleteInquiryDelayDirectProducer;
use App\Amqp\Producer\CancelUnpayOrdersDelayDirectProducer;
use App\Constants\HttpEnumCode;
use App\Exception\BusinessException;
@ -15,6 +16,8 @@ use App\Model\DiseaseClassDetection;
use App\Model\OrderDetection;
use App\Model\OrderDetectionCase;
use App\Model\OrderDetectionRefund;
use App\Model\OrderInquiry;
use App\Model\OrderInquiryCase;
use App\Model\PatientFamily;
use App\Model\UserDoctor;
use App\Model\UserLocation;
@ -23,6 +26,7 @@ use App\Utils\PcreMatch;
use Extend\Detection\Wy;
use Extend\Wechat\WechatPay;
use Hyperf\Amqp\Producer;
use Hyperf\Amqp\Result;
use Hyperf\DbConnection\Db;
use Hyperf\Snowflake\IdGeneratorInterface;
use Psr\Container\ContainerExceptionInterface;
@ -521,6 +525,233 @@ class DetectionService extends BaseService
return success();
}
/**
* 创建检测问诊订单
* @return array
*/
public function addDetectionInquiryOrder(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$order_detection_id = $this->request->route("order_detection_id");
$request_params = $this->request->all();
// 定义返回数据
/*
* status解释
* 1:成功
* 2:存在待支付订单
* 3:存在待接诊订单
* 4:存在接诊中订单
* */
$result = array();
$result['status'] = 1;
$result['message'] = "成功";
$result['data'] = "";
$params = array();
$params['patient_id'] = $user_info['client_user_id'];
$params['order_detection_id'] = $order_detection_id;
$order_detection = OrderDetection::getOne($params);
if (empty($order_detection)){
return fail();
}
// 检测订单状态
if ($order_detection['detection_status'] != 4){
return fail(HttpEnumCode::HTTP_ERROR,"订单状态错误");
}
Db::beginTransaction();
try {
// 检测当前医生是否和患者存在未完成问诊订单
$InquiryService = new InquiryService();
$order_inquiry = $InquiryService->checkPatientDoctorProgressInquiry($order_detection['user_id'],$order_detection['doctor_id']);
if (!empty($order_inquiry)){
if ($order_inquiry['inquiry_status'] == 1){
// 待支付
Db::rollBack();
$result['status'] = 2;
$result['message'] = "当前医生有您未支付的订单,点击“继续”将为您取消订单直接进入报告解读服务。";
$result['data'] = (string)$order_inquiry['order_inquiry_id'];
return success($result);
}
if ($order_inquiry['inquiry_status'] == 3){
// 待接诊
Db::rollBack();
$result['status'] = 3;
$result['message'] = "当前医生有您待接诊的订单,点击“继续”将为您取消订单直接进入报告解读服务。";
$result['data'] = (string)$order_inquiry['order_inquiry_id'];
return success($result);
}
if ($order_inquiry['inquiry_status'] == 4){
// 已接诊
Db::rollBack();
$result['status'] = 4;
$result['message'] = "当前医生有您问诊中的订单,点击“继续”将进入聊天详情。";
$result['data'] = (string)$order_inquiry['order_inquiry_id'];
return success($result);
}
}
// 获取医生数据
$params = array();
$params['doctor_id'] = $order_detection['doctor_id'];
$user_doctor = UserDoctor::getOne($params);
if (empty($user_doctor)){
Db::rollBack();
return fail();
}
// 获取检测病例数据
$params = array();
$params['order_detection_id'] = $order_detection['order_detection_id'];
$order_detection_case = OrderDetectionCase::getOne($params);
if (empty($order_detection_case)){
Db::rollBack();
return fail();
}
// 获取检测项目数据
$params = array();
$params['detection_project_id'] = $order_detection['detection_project_id'];
$detection_project = DetectionProject::getOne($params);
if (empty($detection_project)){
Db::rollBack();
return fail();
}
// 检测家庭成员是否存在
$params = array();
$params['family_id'] = $order_detection['family_id'];
$params['patient_id'] = $order_detection['patient_id'];
$patient_family = PatientFamily::getOne($params);
if (empty($patient_family)) {
Db::rollBack();
return fail();
}
$generator = $this->container->get(IdGeneratorInterface::class);
// 创建问诊订单
$data = array();
$data['user_id'] = $order_detection['user_id'];
$data['patient_id'] = $order_detection['patient_id'];
$data['doctor_id'] = $order_detection['doctor_id'];
$data['family_id'] = $order_detection['family_id'];
$data['inquiry_type'] = 5; // 订单类型1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药 5:检测)
$data['inquiry_mode'] = 1; // 订单问诊方式1:图文 2:视频 3:语音 4:电话 5:会员)
$data['inquiry_status'] = 4; // 问诊订单状态1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消)
$data['inquiry_pay_channel'] = 3; // 支付渠道1:小程序支付 2:微信扫码支付 3:模拟支付)
$data['inquiry_pay_status'] = 2; // 支付状态1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款)
$data['inquiry_no'] = $generator->generate();// 订单编号
$data['escrow_trade_no'] = "GD" . $generator->generate(); // 第三方支付流水号
$data['amount_total'] = 0;// 订单金额
$data['coupon_amount_total'] = 0;// 优惠卷总金额
$data['payment_amount_total'] = 0;// 实际付款金额
$data['pay_time'] = date('Y-m-d H:i:s', time());// 支付时间
$data['reception_time'] = date('Y-m-d H:i:s', time());// 接诊时间
$data['patient_name'] = $patient_family['card_name'];// 患者姓名-就诊人
$data['patient_name_mask'] = $patient_family['card_name_mask'];// 患者姓名-就诊人(掩码)
$data['patient_sex'] = $patient_family['sex'];// 患者性别-就诊人0:未知 1:男 2:女)
$data['patient_age'] = $patient_family['age'];// 患者年龄-就诊人
$order_inquiry = OrderInquiry::addOrderInquiry($data);
if (empty($order_inquiry)) {
Db::rollBack();
return fail();
}
// 回填问诊订单id
$order_detection['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
// 增加患者问诊病例
$data = array();
$data['user_id'] = $order_detection['user_id'];
$data['patient_id'] = $order_detection['patient_id'];
$data['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];// 订单-问诊id
$data['family_id'] = $patient_family['family_id']; // 家庭成员id
$data['relation'] = $patient_family['relation']; // 与患者关系1:本人 2:父母 3:爱人 4:子女 5:亲戚 6:其他
$data['name'] = $patient_family['card_name']; // 患者名称
$data['sex'] = $patient_family['sex'] ?? 0; // 患者性别0:未知 1:男 2:女)
$data['age'] = $patient_family['age'] ?? null; // 患者年龄
$data['height'] = $patient_family['height'] ?: null; // 身高cm
$data['weight'] = $patient_family['weight'] ?: null;; // 体重kg
$order_inquiry_case = OrderInquiryCase::addOrderInquiryCase($data);
if (empty($order_inquiry_case)) {
Db::rollBack();
return fail();
}
// 修改检测订单
$data = array();
$data['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];// 订单-问诊id
$params = array();
$params['order_detection_id'] = $order_detection['order_detection_id'];
OrderDetection::editOrderDetection($params,$data);
// 添加自动完成队列
$time = 1000 * 60 * 60 * 24 * 3;
$data = array();
$data['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
$message = new AutoCompleteInquiryDelayDirectProducer($data);
$message->setDelayMs($time);
$producer = $this->container->get(Producer::class);
$res = $producer->produce($message);
if (!$res) {
Db::rollBack();
return fail();
}
// 发送im消息
$imService = new ImService();
// 患者病例
$imService->patientCase(
$order_inquiry,
$user_doctor['user_id'],
$order_inquiry_case['disease_desc']
);
// 发送IM消息-检测报告结果
$imService->detectionTestReport(
$order_detection,
$user_doctor['user_id'],
$order_detection['user_id'],
$order_detection_case['detection_disease_class_names'],
$detection_project['detection_project_name']
);
// 发送IM消息-检测报告结果-文字
$imService->detectionTestReportStr(
$order_detection,
$user_doctor['user_name'],
$detection_project['detection_project_name'],
$user_doctor['user_id'],
$order_detection['user_id']
);
Db::commit();
}catch (\Throwable $e){
Db::rollBack();
Log::getInstance("DetectionService-bindDetectionTube")->error($e->getMessage());
return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage());
}
return success($result);
}
/**
* 取消未支付检测订单
* @param string|int $order_no 订单编号

View File

@ -295,6 +295,9 @@ Router::addGroup('/patient', function () {
// 获取检测项目用途列表
Router::get('/purpose', [DetectionController::class, 'getDetectionProjectPurposeList']);
});
// 创建检测问诊订单
Router::post('/inquiry/{order_detection_id:\d+}', [DetectionController::class, 'addDetectionInquiryOrder']);
});
// 医生数据