新增问诊订单列表、详情

This commit is contained in:
wucongxing 2023-03-08 15:06:21 +08:00
parent b65f822618
commit e1a015e960
6 changed files with 292 additions and 14 deletions

View File

@ -157,6 +157,7 @@ class AssignDoctorConsumer extends ConsumerMessage
// 更改数据库 // 更改数据库
$data = array(); $data = array();
$data['doctor_id'] = $doctor_id; $data['doctor_id'] = $doctor_id;
$data['inquiry_status'] = 3; // 待接诊
$params = array(); $params = array();
$params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];

View File

@ -64,7 +64,7 @@ class InquiryController extends AbstractController
} }
/** /**
* 新增医生评价 * 新增问诊评价
* @return ResponseInterface * @return ResponseInterface
* @throws ContainerExceptionInterface * @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface * @throws NotFoundExceptionInterface
@ -78,4 +78,31 @@ class InquiryController extends AbstractController
$data = $InquiryService->addInquiryEvaluation(); $data = $InquiryService->addInquiryEvaluation();
return $this->response->json($data); return $this->response->json($data);
} }
/**
* 获取患者问诊订单列表
* @return ResponseInterface
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
public function getPatientInquiryOrderList(): ResponseInterface
{
$request = $this->container->get(InquiryRequest::class);
$request->scene('getPatientInquiryOrderList')->validateResolved();
$InquiryService = new InquiryService();
$data = $InquiryService->getPatientInquiryOrderList();
return $this->response->json($data);
}
/**
* 获取患者问诊订单详情
* @return ResponseInterface
*/
public function getPatientInquiryOrderInfo(): ResponseInterface
{
$InquiryService = new InquiryService();
$data = $InquiryService->getPatientInquiryOrderInfo();
return $this->response->json($data);
}
} }

View File

@ -71,6 +71,14 @@ class OrderInquiry extends Model
return $this->hasOne(UserDoctor::class, 'doctor_id','doctor_id'); return $this->hasOne(UserDoctor::class, 'doctor_id','doctor_id');
} }
/**
* 关联问诊病例表
*/
public function OrderInquiryCase(): HasOne
{
return $this->hasOne(OrderInquiryCase::class, 'order_inquiry_id','order_inquiry_id');
}
/** /**
* 获取问诊订单-单条 * 获取问诊订单-单条
* @param array $params * @param array $params
@ -211,4 +219,34 @@ class OrderInquiry extends Model
return self::where($params)->update($data); return self::where($params)->update($data);
} }
/**
* 获取问诊订单分页
* 已结束
* @param array $params
* @param array $fields
* @param int|null $page
* @param int|null $per_page
* @return int|mixed|string
*/
public static function getPatientOrderInquiryPage(array $params,array $inquiry_status_params ,array $fields = ["*"], int $page = null, ?int $per_page = 10): mixed
{
$raw = self::with([
'OrderInquiryCase:inquiry_case_id,order_inquiry_id,disease_desc',
])
->where($params)
->when($inquiry_status_params, function ($query, $inquiry_status_params) {
$query->whereIn('inquiry_status',$inquiry_status_params);
})
// ->orderBy('created_at','asc')
->paginate($per_page, $fields, "page", $page);
$data = array();
$data['current_page'] = $raw->currentPage();// 当前页码
$data['total'] = $raw->total();//数据总数
$data['data'] = $raw->items();//数据
$data['per_page'] = $raw->perPage();//每页个数
$data['last_page'] = $raw->lastPage();//最后一页
return $data;
}
} }

View File

@ -30,7 +30,7 @@ class InquiryRequest extends FormRequest
'inquiry_mode', // 订单问诊方式1:图文 2:视频 3:语音 4:电话 5:会员) 'inquiry_mode', // 订单问诊方式1:图文 2:视频 3:语音 4:电话 5:会员)
'client_type', // 客户端类型(1:手机 2电脑) 'client_type', // 客户端类型(1:手机 2电脑)
], ],
'addInquiryEvaluation' => [ // 新增医生评价 'addInquiryEvaluation' => [ // 新增问诊评价
'doctor_id', 'doctor_id',
'order_inquiry_id', 'order_inquiry_id',
'reply_quality',// 回复质量 'reply_quality',// 回复质量
@ -38,6 +38,10 @@ class InquiryRequest extends FormRequest
'reply_progress',// 回复速度 'reply_progress',// 回复速度
'content', 'content',
], ],
'getPatientInquiryOrderList' => [ // 获取患者问诊订单列表
'inquiry_status',// 问诊订单状态0:全部 1:待支付 2:待接诊 3:问诊中 4:完成/取消
'family_id',// 家庭成员id就诊用户
],
]; ];
/** /**
@ -71,6 +75,8 @@ class InquiryRequest extends FormRequest
'reply_quality' => 'required|integer|min:0|max:5', 'reply_quality' => 'required|integer|min:0|max:5',
'service_attitude' => 'required|integer|min:0|max:5', 'service_attitude' => 'required|integer|min:0|max:5',
'reply_progress' => 'required|integer|min:0|max:5',// 'reply_progress' => 'required|integer|min:0|max:5',//
'inquiry_status' => 'required|integer|min:0|max:4',
]; ];
} }
@ -107,6 +113,11 @@ class InquiryRequest extends FormRequest
'client_type.integer' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'client_type.integer' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'client_type.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'client_type.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'client_type.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR), 'client_type.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'inquiry_status.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'inquiry_status.integer' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'inquiry_status.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'inquiry_status.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
]; ];
} }
} }

View File

@ -3,9 +3,11 @@
namespace App\Services; namespace App\Services;
use App\Amqp\Producer\CancelUnpayOrdersDelayDirectProducer; use App\Amqp\Producer\CancelUnpayOrdersDelayDirectProducer;
use App\Constants\DoctorTitleCode;
use App\Constants\HttpEnumCode; use App\Constants\HttpEnumCode;
use App\Exception\BusinessException; use App\Exception\BusinessException;
use App\Model\DiseaseClass; use App\Model\DiseaseClass;
use App\Model\Hospital;
use App\Model\InquiryCaseProduct; use App\Model\InquiryCaseProduct;
use App\Model\OrderEvaluation; use App\Model\OrderEvaluation;
use App\Model\OrderInquiry; use App\Model\OrderInquiry;
@ -405,7 +407,7 @@ class InquiryService extends BaseService
} }
/** /**
* 新增医生评价 * 新增问诊评价
* @return array * @return array
*/ */
public function addInquiryEvaluation(): array public function addInquiryEvaluation(): array
@ -475,6 +477,207 @@ class InquiryService extends BaseService
return success(); return success();
} }
//获取患者问诊订单列表
public function getPatientInquiryOrderList(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$inquiry_status = $this->request->input('inquiry_status',0);
$family_id = $this->request->input('family_id');
$page = $this->request->input('page',1);
$per_page = $this->request->input('per_page',10);
$params = array();
$params['patient_id'] = $user_info['client_user_id'];
if (!empty($family_id)){
$params['family_id'] = $family_id;
}
$inquiry_status_params = [];
if (!empty($inquiry_status) && $inquiry_status != 0){
// 问诊订单状态0:全部 1:待支付 2:待接诊 3:问诊中 4:完成/取消
// 问诊订单状态1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消)
if ($inquiry_status == 1){
$inquiry_status_params = [1];
}
if ($inquiry_status == 2){
$inquiry_status_params = [2,3];
}
if ($inquiry_status == 3){
$inquiry_status_params = [4];
}
if ($inquiry_status == 4){
$inquiry_status_params = [5,6,7];
}
}
$params['is_delete'] = 0;
$fields = [
'order_inquiry_id',
'patient_id',
'doctor_id',
'family_id',
'inquiry_type',
'inquiry_mode',
'inquiry_status',
'is_delete',
'inquiry_refund_status',
'inquiry_pay_channel',
'inquiry_pay_status',
'inquiry_no',
'escrow_trade_no',
'amount_total',
'payment_amount_total',
'patient_name',
'patient_name_mask',
'patient_sex',
'patient_age',
'created_at',
];
$order_inquiry = OrderInquiry::getPatientOrderInquiryPage($params,$inquiry_status_params,$fields);
if (empty($order_inquiry['data'])){
return success();
}
foreach ($order_inquiry['data'] as &$item){
$item['disease_desc'] = $item['OrderInquiryCase']['disease_desc'];
unset($item['OrderInquiryCase']);
// 获取医生数据
$item['user_doctor'] = [];
if (!empty($item['doctor_id'])){
$fields = [
'doctor_id',
'user_name',
'doctor_title',
'hospital_id',
];
$params = array();
$params['doctor_id'] = $item['doctor_id'];
$user_doctor = UserDoctor::getOne($params,$fields);
if (empty($user_doctor)){
return fail(HttpEnumCode::SERVER_ERROR);
}
// 转换医生职称
$user_doctor['doctor_title'] = empty($user_doctor['doctor_title']) ? "" : DoctorTitleCode::getMessage($user_doctor['doctor_title']);
// 获取医生医院名称
$user_doctor['hospital_name'] = "";
$user_doctor['hospital_level_name'] = "";
$fields = [
'hospital_id',
'hospital_name',
'hospital_level_name',
];
$params = array();
$params['hospital_id'] = $user_doctor['hospital_id'];
$hospital = Hospital::getOne($params,$fields);
if (!empty($hospital)){
$user_doctor['hospital_name'] = $hospital['hospital_name'];
$user_doctor['hospital_level_name'] = $hospital['hospital_level_name'];
}
$item['user_doctor'] = $user_doctor;
unset($hospital);
unset($user_doctor);
}
}
return success($order_inquiry);
}
/**
* 获取患者问诊订单详情
* @return array
*/
public function getPatientInquiryOrderInfo(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$order_inquiry_id = $this->request->route('order_inquiry_id');
// 获取订单数据
$params = array();
$params['patient_id'] = $user_info['client_user_id'];
$params['order_inquiry_id'] = $order_inquiry_id;
$params['is_delete'] = 0;
$order_inquiry = OrderInquiry::getOne($params);
if (empty($order_inquiry)){
return fail();
}
// 获取病例信息
$fields = [
'disease_class_name',
'disease_desc',
];
$params = array();
$params['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
$order_inquiry_case = OrderInquiryCase::getOne($params,$fields);
if (empty($order_inquiry_case)){
return fail();
}
$order_inquiry['case'] = $order_inquiry_case->toArray();
// 获取医生数据
$order_inquiry['user_doctor'] = [];
if (!empty($order_inquiry['doctor_id'])){
$fields = [
'doctor_id',
'user_name',
'doctor_title',
'hospital_id',
'avatar',
];
$params = array();
$params['doctor_id'] = $order_inquiry['doctor_id'];
$user_doctor = UserDoctor::getOne($params,$fields);
if (empty($user_doctor)){
return fail(HttpEnumCode::SERVER_ERROR);
}
// 转换医生职称
$user_doctor['doctor_title'] = empty($user_doctor['doctor_title']) ? "" : DoctorTitleCode::getMessage($user_doctor['doctor_title']);
// 头像
$user_doctor['avatar'] = addAliyunOssWebsite($user_doctor['avatar']);
// 获取医生医院名称
$user_doctor['hospital_name'] = "";
$user_doctor['hospital_level_name'] = "";
$fields = [
'hospital_id',
'hospital_name',
'hospital_level_name',
];
$params = array();
$params['hospital_id'] = $user_doctor['hospital_id'];
$hospital = Hospital::getOne($params,$fields);
if (!empty($hospital)){
$user_doctor['hospital_name'] = $hospital['hospital_name'];
$user_doctor['hospital_level_name'] = $hospital['hospital_level_name'];
}
$order_inquiry['user_doctor'] = $user_doctor;
unset($hospital);
unset($user_doctor);
}
return success($order_inquiry->toArray());
}
/** /**
* 获取医生未接诊订单数量 * 获取医生未接诊订单数量

View File

@ -191,11 +191,8 @@ Router::addGroup('/patient', function () {
// 问诊 // 问诊
Router::addGroup('/inquiry', function () { Router::addGroup('/inquiry', function () {
// 订单 // 创建问诊订单
Router::addGroup('/order', function () { Router::post('', [InquiryController::class, 'addInquiryOrder']);
// 创建订单
Router::post('', [InquiryController::class, 'addInquiryOrder']);
});
// 检测是否可以接诊 // 检测是否可以接诊
Router::get('/check', [PatientDoctorController::class, 'getDoctorInquiryCheck']); Router::get('/check', [PatientDoctorController::class, 'getDoctorInquiryCheck']);
@ -203,8 +200,14 @@ Router::addGroup('/patient', function () {
// 检测快速、购药订单分配医生状态 // 检测快速、购药订单分配医生状态
Router::get('/assign/{order_inquiry_id:\d+}', [InquiryController::class, 'getInquiryAssign']); Router::get('/assign/{order_inquiry_id:\d+}', [InquiryController::class, 'getInquiryAssign']);
// 新增医生评价 // 获取患者问诊订单列表
Router::get('/list', [InquiryController::class, 'getPatientInquiryOrderList']);
// 新增问诊评价
Router::post('/evaluation', [InquiryController::class, 'addInquiryEvaluation']); Router::post('/evaluation', [InquiryController::class, 'addInquiryEvaluation']);
// 获取患者问诊订单详情
Router::get('/{order_inquiry_id:\d+}', [InquiryController::class, 'getPatientInquiryOrderInfo']);
}); });
// 医生数据 // 医生数据
@ -415,11 +418,6 @@ Router::get('/testpay', [UserController::class, 'testpay']);
// 获取问诊订单列表-问诊订单
Router::post('/3', [CallBackController::class, 'imCallBack']);
// 获取订单详情-问诊订单
Router::post('/4', [CallBackController::class, 'imCallBack']);
// 取消问诊-问诊订单-未接诊时 // 取消问诊-问诊订单-未接诊时
Router::post('/5', [CallBackController::class, 'imCallBack']); Router::post('/5', [CallBackController::class, 'imCallBack']);