新增分配医生队列
This commit is contained in:
@@ -102,9 +102,9 @@ class InquiryService extends BaseService
|
||||
|
||||
// 确定支付渠道
|
||||
// 支付渠道(1:小程序支付 2:微信扫码支付)
|
||||
if ($request_params['client_type'] == 1){
|
||||
if ($request_params['client_type'] == 1) {
|
||||
$inquiry_pay_channel = 1;
|
||||
}elseif ($request_params['client_type'] == 2){
|
||||
} elseif ($request_params['client_type'] == 2) {
|
||||
$inquiry_pay_channel = 2;
|
||||
}
|
||||
|
||||
@@ -176,14 +176,14 @@ class InquiryService extends BaseService
|
||||
}
|
||||
|
||||
// 增加问诊优惠卷表
|
||||
if (!empty($user_coupon)){
|
||||
if (!empty($user_coupon)) {
|
||||
$data = array();
|
||||
$data['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];// 订单-问诊id
|
||||
$data['user_coupon_id'] = $user_coupon['user_coupon_id'];
|
||||
$data['coupon_name'] = $user_coupon['coupon']['coupon_name'];
|
||||
$data['coupon_use_price'] = $user_coupon['coupon']['coupon_price'];
|
||||
$order_inquiry_coupon = OrderInquiryCoupon::addOrderInquiryCoupon($data);
|
||||
if (empty($order_inquiry_coupon)){
|
||||
if (empty($order_inquiry_coupon)) {
|
||||
Db::rollBack();
|
||||
return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败");
|
||||
}
|
||||
@@ -244,9 +244,9 @@ class InquiryService extends BaseService
|
||||
$WechatPay = new WechatPay(1);
|
||||
|
||||
// 获取预支付交易会话标识
|
||||
$total = $inquiry_price * 100;
|
||||
$prepay = $WechatPay->getJsapiPrepayId($order_inquiry['inquiry_no'],$total,$user_info['open_id']);
|
||||
if (empty($prepay)){
|
||||
$total = $inquiry_price * 100;
|
||||
$prepay = $WechatPay->getJsapiPrepayId($order_inquiry['inquiry_no'], $total, $user_info['open_id']);
|
||||
if (empty($prepay)) {
|
||||
Db::rollBack();
|
||||
return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败");
|
||||
}
|
||||
@@ -260,9 +260,9 @@ class InquiryService extends BaseService
|
||||
|
||||
$message = new CancelUnpayOrdersDelayDirectProducer($data);
|
||||
$message->setDelayMs(1000 * 60 * 30);
|
||||
$producer = $this->container->get(Producer::class) ;
|
||||
$producer = $this->container->get(Producer::class);
|
||||
$res = $producer->produce($message);
|
||||
if(!$res){
|
||||
if (!$res) {
|
||||
Db::rollBack();
|
||||
return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败");
|
||||
}
|
||||
@@ -277,7 +277,7 @@ class InquiryService extends BaseService
|
||||
$result['amount_total'] = $inquiry_price; // 订单金额
|
||||
$result['inquiry_no'] = $order_inquiry['inquiry_no']; // 订单编号
|
||||
$result['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; // 订单主键id
|
||||
$result['created_at'] = date('Y-m-d H:i:s',strtotime($order_inquiry['created_at'])); // 创建时间
|
||||
$result['created_at'] = date('Y-m-d H:i:s', strtotime($order_inquiry['created_at'])); // 创建时间
|
||||
$result['inquiry_type'] = $order_inquiry['inquiry_type']; // 订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药)
|
||||
$result['pay_config'] = $pay_config; // 小程序支付配置
|
||||
|
||||
@@ -297,7 +297,7 @@ class InquiryService extends BaseService
|
||||
$params = array();
|
||||
$params['inquiry_case_id'] = $inquiry_case_id;
|
||||
$order_inquiry_case = OrderInquiryCase::getOne($params);
|
||||
if (empty($order_inquiry_case)){
|
||||
if (empty($order_inquiry_case)) {
|
||||
return fail();
|
||||
}
|
||||
|
||||
@@ -336,10 +336,10 @@ class InquiryService extends BaseService
|
||||
];
|
||||
$params = array();
|
||||
$params['inquiry_case_id'] = $order_inquiry_case['inquiry_case_id'];
|
||||
$inquiry_case_product = InquiryCaseProduct::getWithProductList($params,$fields);
|
||||
if (!empty($inquiry_case_product)){
|
||||
foreach ($inquiry_case_product as &$item){
|
||||
if (!empty($item['Product'])){
|
||||
$inquiry_case_product = InquiryCaseProduct::getWithProductList($params, $fields);
|
||||
if (!empty($inquiry_case_product)) {
|
||||
foreach ($inquiry_case_product as &$item) {
|
||||
if (!empty($item['Product'])) {
|
||||
$product[] = $item['Product']['product_name'] . ' ' . $item['Product']['product_spec'] . '(' . $item['case_product_num'] . $item['Product']['packaging_unit'] . ')';
|
||||
}
|
||||
}
|
||||
@@ -349,9 +349,9 @@ class InquiryService extends BaseService
|
||||
unset($inquiry_case_product);
|
||||
|
||||
// 复诊凭证
|
||||
if (!empty($order_inquiry_case['diagnose_images'])){
|
||||
$diagnose_images = explode(',',$order_inquiry_case['diagnose_images']);
|
||||
foreach ($diagnose_images as &$item){
|
||||
if (!empty($order_inquiry_case['diagnose_images'])) {
|
||||
$diagnose_images = explode(',', $order_inquiry_case['diagnose_images']);
|
||||
foreach ($diagnose_images as &$item) {
|
||||
$item = addAliyunOssWebsite($item);
|
||||
}
|
||||
|
||||
@@ -386,12 +386,16 @@ class InquiryService extends BaseService
|
||||
/**
|
||||
* 获取医生接诊中订单数量
|
||||
* @param string $doctor_id 医生id
|
||||
* @param string $inquiry_type 订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药)
|
||||
* @return int
|
||||
*/
|
||||
public function getDoctorAcceptingInquiryNum(string $doctor_id): int
|
||||
public function getDoctorAcceptingInquiryNum(string $doctor_id, string $inquiry_type = ""): int
|
||||
{
|
||||
$params = array();
|
||||
$params['doctor_id'] = $doctor_id;
|
||||
if (!empty($inquiry_type)){
|
||||
$params['inquiry_type'] = $inquiry_type; // 订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药)
|
||||
}
|
||||
$params['inquiry_status'] = 4; // 已接诊
|
||||
$params['inquiry_refund_status'] = 0; // 无退款
|
||||
|
||||
@@ -442,7 +446,7 @@ class InquiryService extends BaseService
|
||||
* @param int $inquiry_status 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消)
|
||||
* @return int
|
||||
*/
|
||||
public function getPatientInquiryWithStatus(string $patient_id,int $inquiry_status): int
|
||||
public function getPatientInquiryWithStatus(string $patient_id, int $inquiry_status): int
|
||||
{
|
||||
$params = array();
|
||||
$params['patient_id'] = $patient_id;
|
||||
|
||||
@@ -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 "";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user