修改结束问诊订单

This commit is contained in:
wucongxing 2023-04-17 18:59:23 +08:00
parent 8802a55aa8
commit d249429b2b
5 changed files with 129 additions and 124 deletions

View File

@ -4,7 +4,9 @@ namespace App\Controller;
use App\Request\InquiryRequest;
use App\Services\InquiryService;
use App\Services\UserDoctorService;
use Extend\Wechat\WechatPay;
use GuzzleHttp\Exception\GuzzleException;
use Hyperf\Snowflake\IdGeneratorInterface;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
@ -117,4 +119,16 @@ class InquiryController extends AbstractController
$data = $InquiryService->getDoctorFinishMessageList();
return $this->response->json($data);
}
/**
* 结束问诊
* @return ResponseInterface
* @throws GuzzleException
*/
public function putFinishInquiry(): ResponseInterface
{
$InquiryService = new InquiryService();
$data = $InquiryService->putFinishInquiry();
return $this->response->json($data);
}
}

View File

@ -371,16 +371,4 @@ class UserDoctorController extends AbstractController
$data = $UserDoctorService->addDoctorInquiry();
return $this->response->json($data);
}
/**
* 结束问诊
* @return ResponseInterface
* @throws GuzzleException
*/
public function putDoctorFinishInquiry(): ResponseInterface
{
$UserDoctorService = new UserDoctorService();
$data = $UserDoctorService->putDoctorFinishInquiry();
return $this->response->json($data);
}
}

View File

@ -19,10 +19,12 @@ use App\Model\OrderInquiry;
use App\Model\OrderInquiryCase;
use App\Model\OrderInquiryCoupon;
use App\Model\OrderInquiryRefund;
use App\Model\OrderPrescription;
use App\Model\PatientFamily;
use App\Model\PatientFamilyHealth;
use App\Model\PatientFamilyPersonal;
use App\Model\PatientFollow;
use App\Model\PatientHistoryInquiry;
use App\Model\Product;
use App\Model\SystemInquiryConfig;
use App\Model\SystemInquiryTime;
@ -780,6 +782,116 @@ class InquiryService extends BaseService
return success($result);
}
/**
* 结束问诊
* @return array
* @throws GuzzleException
*/
public function putFinishInquiry(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$order_inquiry_id = $this->request->route('order_inquiry_id');
if (empty($user_info)){
return fail(HttpEnumCode::HTTP_ERROR, "操作失败");
}
// 获取问诊订单数据
$params = array();
$params['order_inquiry_id'] = $order_inquiry_id;
$order_inquiry = OrderInquiry::getOne($params);
if (empty($order_inquiry)) {
return fail(HttpEnumCode::HTTP_ERROR, "非法订单");
}
if ($order_inquiry['doctor_id'] != $user_info['client_user_id'] && $order_inquiry['patient_id'] != $user_info['client_user_id']){
return fail(HttpEnumCode::HTTP_ERROR, "操作失败");
}
if ($order_inquiry['inquiry_status'] != 4) {
// 问诊订单状态1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消)
return fail(HttpEnumCode::HTTP_ERROR, "操作失败");
}
// 订单退款状态
if (!in_array($order_inquiry['inquiry_refund_status'],[0,4,5])){
// 问诊订单退款状态0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常)
return fail(HttpEnumCode::HTTP_ERROR, "订单正在退款,无法结束");
}
// 订单支付状态
if ($order_inquiry['inquiry_pay_status'] != 2){
return fail(HttpEnumCode::HTTP_ERROR, "订单未支付,无法结束");
}
// 获取医生数据
$params = array();
$params['doctor_id'] = $order_inquiry['doctor_id'];
$user_doctor = UserDoctor::getOne($params);
if (empty($user_doctor)){
return fail(HttpEnumCode::HTTP_ERROR, "操作失败");
}
Db::beginTransaction();
try {
// 修改问诊订单表
$data = array();
$data['inquiry_status'] = 5;// 问诊订单状态1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消)
$data['complete_time'] = date('Y-m-d H:i:s',time());// 订单完成时间(问诊完成时间)
$params = array();
$params['order_inquiry_id'] = $order_inquiry_id;
OrderInquiry::edit($params,$data);
// 新增患者历史问诊表-问诊完成后添加
$data = array();
$data['patient_id'] = $order_inquiry['patient_id'];
$data['doctor_id'] = $order_inquiry['doctor_id'];
if (!empty($order_inquiry['pharmacist_id'])){
$data['pharmacist_id'] = $order_inquiry['pharmacist_id'];
}
$data['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
$data['history_status'] = 1;
$patient_history_inquiry = PatientHistoryInquiry::addPatientHistoryInquiry($data);
if (empty($patient_history_inquiry)){
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR, "添加患者历史问诊表失败");
}
// 发送IM消息-问诊已结束
$imService = new ImService();
$imService->inquiryEnd($order_inquiry,$user_doctor['user_id'],$order_inquiry['user_id']);
// 发送IM消息-问诊结束评价通知
$imService->inquiryEndEvaluation($order_inquiry,$user_doctor['user_id'],$order_inquiry['user_id']);
// 发送站内消息-问诊结束
$MessagePush = new MessagePush($user_doctor['user_id'],$order_inquiry['order_inquiry_id']);
$MessagePush->finishInquiryToDoctor();
// 添加自动完成队列
$data = array();
$data['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
$message = new AutoFinishInquiryDelayDirectProducer($data);
$message->setDelayMs(1000 * 60 * 1);
$producer = $this->container->get(Producer::class);
$res = $producer->produce($message);
if (!$res) {
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR, "操作失败");
}
Db::commit();
} catch (\Exception $e) {
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR, $e->getMessage());
}
return success();
}
/**
* 获取医生未接诊订单数量
* @param string $doctor_id 医生id

View File

@ -1675,112 +1675,6 @@ class UserDoctorService extends BaseService
return success();
}
/**
* 结束问诊
* @return array
* @throws GuzzleException
*/
public function putDoctorFinishInquiry(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$order_inquiry_id = $this->request->route('order_inquiry_id');
// 获取问诊订单数据
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$params['order_inquiry_id'] = $order_inquiry_id;
$order_inquiry = OrderInquiry::getOne($params);
if (empty($order_inquiry)) {
return fail(HttpEnumCode::HTTP_ERROR, "非法订单");
}
if ($order_inquiry['inquiry_status'] != 4) {
// 问诊订单状态1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消)
return fail(HttpEnumCode::HTTP_ERROR, "操作失败");
}
// 订单退款状态
if (!in_array($order_inquiry['inquiry_refund_status'],[0,4,5])){
// 问诊订单退款状态0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常)
return fail(HttpEnumCode::HTTP_ERROR, "订单正在退款,无法结束");
}
// 订单支付状态
if ($order_inquiry['inquiry_pay_status'] != 2){
return fail(HttpEnumCode::HTTP_ERROR, "订单未支付,无法结束");
}
// 查看订单是否存在处方
$params = array();
$params['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
$order_prescription = OrderPrescription::getOne($params);
if (!empty($order_prescription)){
if ($order_prescription['prescription_status'] == 1 && $order_prescription['pharmacist_audit_status'] == 0){
return fail(HttpEnumCode::HTTP_ERROR, "处方正在开具中,请您耐心等待,稍后取消");
}
}
Db::beginTransaction();
try {
// 修改问诊订单表
$data = array();
$data['inquiry_status'] = 5;// 问诊订单状态1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消)
$data['complete_time'] = date('Y-m-d H:i:s',time());// 订单完成时间(问诊完成时间)
$params = array();
$params['order_inquiry_id'] = $order_inquiry_id;
OrderInquiry::edit($params,$data);
// 新增患者历史问诊表-问诊完成后添加
$data = array();
$data['patient_id'] = $order_inquiry['patient_id'];
$data['doctor_id'] = $order_inquiry['doctor_id'];
if (!empty($order_inquiry['pharmacist_id'])){
$data['pharmacist_id'] = $order_inquiry['pharmacist_id'];
}
$data['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
$data['history_status'] = 1;
$patient_history_inquiry = PatientHistoryInquiry::addPatientHistoryInquiry($data);
if (empty($patient_history_inquiry)){
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR, "添加患者历史问诊表失败");
}
// 发送IM消息-问诊已结束
$imService = new ImService();
$imService->inquiryEnd($order_inquiry,$user_info['user_id'],$order_inquiry['user_id']);
// 发送IM消息-问诊结束评价通知
$imService->inquiryEndEvaluation($order_inquiry,$user_info['user_id'],$order_inquiry['user_id']);
// 发送站内消息-问诊结束
$MessagePush = new MessagePush($user_info['user_id'],$order_inquiry['order_inquiry_id']);
$MessagePush->finishInquiryToDoctor();
// 添加自动完成队列
$data = array();
$data['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
$message = new AutoFinishInquiryDelayDirectProducer($data);
$message->setDelayMs(1000 * 60 * 1);
$producer = $this->container->get(Producer::class);
$res = $producer->produce($message);
if (!$res) {
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败");
}
Db::commit();
} catch (\Exception $e) {
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR, $e->getMessage());
}
return success();
}
/**
* 检测医生身份认证
* @param object|array $user_doctor 医生表数据

View File

@ -88,9 +88,6 @@ Router::addGroup('/doctor', function () {
// 医生接诊
Router::post('/{order_inquiry_id:\d+}', [UserDoctorController::class, 'addDoctorInquiry']);
// 结束问诊
Router::put('/finish/{order_inquiry_id:\d+}', [UserDoctorController::class, 'putDoctorFinishInquiry']);
// 结束问诊会话列表
Router::get('/finish/message', [InquiryController::class, 'getDoctorFinishMessageList']);
});
@ -598,9 +595,6 @@ Router::addGroup('/user', function () {
// 获取患者问诊病例
Router::get('/case', [InquiryController::class, 'getPatientInquiryCase']);
// 测试使用
Router::addGroup('/test', function () {
Router::get('', [TestController::class, 'test_14']);
@ -644,6 +638,9 @@ Router::addGroup('/message', function () {
Router::addGroup('/inquiry', function () {
// 获取问诊订单消息内页基础数据
Router::get('/message/basic/{order_inquiry_id:\d+}', [InquiryController::class, 'getInquiryMessageBasic']);
// 结束问诊
Router::put('/finish/{order_inquiry_id:\d+}', [UserDoctorController::class, 'putFinishInquiry']);
});
// 未开发接口