新增分配医生队列

This commit is contained in:
2023-03-07 17:54:56 +08:00
parent dcb2149815
commit 63894f37a6
13 changed files with 594 additions and 58 deletions
+186 -4
View File
@@ -14,6 +14,7 @@ use App\Model\DoctorAccount;
use App\Model\DoctorBankCard;
use App\Model\DoctorExpertise;
use App\Model\DoctorInquiryConfig;
use App\Model\DoctorInquiryTime;
use App\Model\DoctorWord;
use App\Model\Hospital;
use App\Model\InquiryCaseProduct;
@@ -25,6 +26,8 @@ use App\Model\OrderPrescriptionIcd;
use App\Model\OrderPrescriptionProduct;
use App\Model\OrderProductItem;
use App\Model\Product;
use App\Model\SystemInquiryConfig;
use App\Model\SystemInquiryTime;
use App\Model\User;
use App\Model\UserDoctor;
use App\Model\UserDoctorInfo;
@@ -1415,12 +1418,191 @@ class UserDoctorService extends BaseService
$params[] = ['reception_time', '>', $date];
$inquiry_status_params = array();
$inquiry_status_params = [4, 5];
$order_inquiry = OrderInquiry::getInquiryStatusList($params, $inquiry_status_params);
if (empty($order_inquiry)) {
$inquiry_status_params = [4, 5];// 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消)
$order_inquirys = OrderInquiry::getInquiryStatusList($params, $inquiry_status_params);
if (empty($order_inquirys)) {
return [];
}
return $order_inquiry->toArray();
$result = [];
foreach ($order_inquirys as $item){
$result[] = $item['UserDoctor'];
}
return $result;
}
/**
* 获取快速、购药问诊可分配医生
* @param string $inquiry_type
* @return string
*/
public function getInquiryAssignDoctor(string $inquiry_type,): string
{
// 获取问诊配置
$params = array();
$params['inquiry_type'] = $inquiry_type;
$params['inquiry_mode'] = 1;
$system_inquiry_config = SystemInquiryConfig::getOne($params);
if (empty($system_inquiry_config)){
return "";
}
// 获取系统工作时间
$params = array();
$params['system_inquiry_config_id'] = $system_inquiry_config['system_inquiry_config_id'];
$system_inquiry_time = SystemInquiryTime::getList($params);
if (empty($system_inquiry_time)){
return "";
}
// 检测当前是否坐班时间
$is_time_pass = false; // 非坐班时间
foreach ($system_inquiry_time as $item){
$now_time = date('H',time()) . date('i',time());
if ($item['start_time'] < $now_time && $item['end_time'] > $now_time){
// 符合当前时间区间
$is_time_pass = true;
}
}
if ($is_time_pass){
// 系统坐班时间
// 获取坐班时间包含当前时间的深度合作医生
$doctor_id = $this->getNowTimePlatDeepCooperationDoctorId($inquiry_type,time());
if (!empty($doctor_id)){
return $doctor_id;
}
}
// 非坐班时间
// 获取深度合作的在线医生
$params = array();
$params['status'] = 1;
$params['idcard_status'] = 1;
$params['iden_auth_status'] = 1;
$params['is_bind_bank'] = 1;
$params['is_online'] = 1;
if ($inquiry_type == 2){
// 快速问诊
$params['is_img_quick_reception'] = 1;
}elseif ($inquiry_type == 4){
// 问诊购药
$params['multi_point_status'] = 1;
}
$params['is_platform_deep_cooperation'] = 1;
$user_doctor = UserDoctor::getOne($params);
if (!empty($user_doctor)){
return $user_doctor['doctor_id'];
}
// 获取在线的自由注册医生
$params = array();
$params['status'] = 1;
$params['idcard_status'] = 1;
$params['iden_auth_status'] = 1;
$params['is_bind_bank'] = 1;
$params['is_online'] = 1;
if ($inquiry_type == 2){
// 快速问诊
$params['is_img_quick_reception'] = 1;
}elseif ($inquiry_type == 4){
// 问诊购药
$params['multi_point_status'] = 1;
}
$user_doctor = UserDoctor::getOne($params);
if (!empty($user_doctor)){
// 获取医生接诊中订单数量
$InquiryService = new InquiryService();
$accepting_inquiry_num = $InquiryService->getDoctorAcceptingInquiryNum($user_doctor['doctor_id'],$inquiry_type);
// 获取医生的最大接诊量
$params = array();
$params['doctor_id'] = $user_doctor['doctor_id'];
$params['inquiry_type'] = $inquiry_type;
$params['inquiry_mode'] = 1;
$doctor_inquiry_config = DoctorInquiryConfig::getOne($params);
if (empty($doctor_inquiry_config)){
return ""; // 未配置最大接诊量,错误数据
}
if ($accepting_inquiry_num < $doctor_inquiry_config['work_num_day']){
// 未超出最大接诊量
return $user_doctor['doctor_id'];
}
}
// 检测当前时间5分钟后,坐班时间包含某时间的平台深度合作医生
$doctor_id = $this->getNowTimePlatDeepCooperationDoctorId($inquiry_type,strtotime ("+5 minute"));
if (!empty($doctor_id)){
return $doctor_id;
}
// 当前时间10分钟内接诊中医生
$doctors = $this->getBeforeCurrentTimeDoctor(10,$inquiry_type);
if (!empty($doctors)){
foreach ($doctors as $item){
// 此处不验证接诊数量
// 可能存在上方接诊数量不够的医生
return $item['doctor_id'];
}
}
// 获取当前时间30分钟前接诊中的医生
$doctors = $this->getBeforeCurrentTimeDoctor(30,$inquiry_type);
if (!empty($doctors)){
foreach ($doctors as $item){
// 此处不验证接诊数量
// 可能存在上方接诊数量不够的医生
return $item['doctor_id'];
}
}
return "";
}
/**
* 获取坐班时间包含某时间的平台深度合作医生
* @param string $inquiry_type
* @param string $time 时间戳
* @return string
*/
public function getNowTimePlatDeepCooperationDoctorId(string $inquiry_type,string $time): string
{
$params = array();
$params[] = ['inquiry_type','=',$inquiry_type];
$params[] = ['inquiry_mode','=',1];
$params[] = ['start_time','<',date('H',$time) . date('i',$time)];
$params[] = ['end_time','>',date('H',$time) . date('i',$time)];
$user_doctor_params = array();
$user_doctor_params['is_platform_deep_cooperation'] = 1;
if ($inquiry_type == 2){
// 快速问诊
$user_doctor_params['is_img_quick_reception'] = 1;
}elseif ($inquiry_type == 4){
// 问诊购药
$user_doctor_params['multi_point_status'] = 1;
}
$doctor_inquiry_times = DoctorInquiryTime::getWithDoctorList($params,$user_doctor_params);
if (!empty($doctor_inquiry_times)){
foreach ($doctor_inquiry_times as $item){
// 检测是否存在日期
if (!empty($item['inquiry_date'])){
// 获取当前日期
$now_day = date('Y-m-d',time());
if ($item['inquiry_date'] == $now_day){
return $item['doctor_id'];
}else{
continue;
}
}else{
return $item['doctor_id'];
}
}
}
return "";
}
}