hospital-applets-api/app/Services/DoctorInquiryService.php
2024-05-08 18:39:07 +08:00

1174 lines
46 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Services;
use App\Constants\HttpEnumCode;
use App\Exception\BusinessException;
use App\Model\DoctorConfigDifficultConsultation;
use App\Model\DoctorConfigFollowPackage;
use App\Model\DoctorConfigFollowPackageItem;
use App\Model\DoctorConfigHealthPackage;
use App\Model\DoctorInquiryConfig;
use App\Model\DoctorInquiryConfigService;
use App\Model\DoctorInquiryPriceRecord;
use App\Model\HealthPackage;
use App\Model\SystemInquiryConfig;
use App\Model\UserDoctor;
use Hyperf\DbConnection\Db;
/**
* 医生问诊配置
*/
class DoctorInquiryService extends BaseService
{
/**
* 获取医生问诊服务开启状态
* @return array
*/
public function getDoctorInquiryConfigOpenStatus(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$inquiry_type = $this->request->input('inquiry_type');// 接诊类型1:专家问诊 2:快速问诊 3:公益问诊)
$inquiry_mode = $this->request->input('inquiry_mode');// 接诊方式1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包)
// 获取医生信息
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$doctor = UserDoctor::getOne($params);
if (empty($doctor)) {
return fail(HttpEnumCode::HTTP_ERROR, "未知医生");
}
if ($doctor['idcard_status'] != 1) {
return fail(HttpEnumCode::HTTP_ERROR, "请先进行实名认证");
}
if ($doctor['iden_auth_status'] != 1) {
return fail(HttpEnumCode::HTTP_ERROR, "请先进行身份认证");
}
if ($doctor['is_bind_bank'] != 1) {
return fail(HttpEnumCode::HTTP_ERROR, "请先进行绑定结算银行卡");
}
// 接诊开关
$is_open = 0;
// 系统问诊配置表
$params = array();
$params['inquiry_type'] = $inquiry_type;
$params['inquiry_mode'] = $inquiry_mode;
$system_inquiry_config = SystemInquiryConfig::getOne($params);
if (empty($system_inquiry_config)) {
return fail(HttpEnumCode::SERVER_ERROR);
}
// 医生接诊配置表
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$params['inquiry_type'] = $inquiry_type;
$params['inquiry_mode'] = $inquiry_mode;
$doctor_inquiry_config = DoctorInquiryConfig::getOne($params);
if (!empty($doctor_inquiry_config)) {
if ($doctor_inquiry_config['is_enable'] == 1) {
$is_open = 1;
}
}
return success($is_open);
}
/**
* 获取医生问诊配置
* @return array
*/
public function getDoctorInquiryConfig(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$inquiry_type = $this->request->input('inquiry_type');// 接诊类型1:专家问诊 2:快速问诊 3:公益问诊)
$inquiry_mode = $this->request->input('inquiry_mode');// 接诊方式1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包)
// 获取医生信息
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$doctor = UserDoctor::getOne($params);
if (empty($doctor)) {
return fail(HttpEnumCode::HTTP_ERROR, "未知医生");
}
if ($doctor['idcard_status'] != 1) {
return fail(HttpEnumCode::HTTP_ERROR, "请先进行实名认证");
}
if ($doctor['iden_auth_status'] != 1) {
return fail(HttpEnumCode::HTTP_ERROR, "请先进行身份认证");
}
if ($doctor['is_bind_bank'] != 1) {
return fail(HttpEnumCode::HTTP_ERROR, "请先进行绑定结算银行卡");
}
// 返回数据
$result = array();
// 接诊价格
$result['inquiry_price'] = "";
$result['work_num_day'] = "";
// 系统问诊配置表
$params = array();
$params['inquiry_type'] = $inquiry_type;
$params['inquiry_mode'] = $inquiry_mode;
$system_inquiry_config = SystemInquiryConfig::getOne($params);
if (empty($system_inquiry_config)) {
return fail(HttpEnumCode::SERVER_ERROR);
}
// 医生接诊配置表
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$params['inquiry_type'] = $inquiry_type;
$params['inquiry_mode'] = $inquiry_mode;
$doctor_inquiry_config = DoctorInquiryConfig::getOne($params);
if (!empty($doctor_inquiry_config)) {
// 接诊价格
$result['inquiry_price'] = $doctor_inquiry_config['inquiry_price'] ?: 0;
if ($inquiry_type == 2 && $inquiry_mode == 1) {
// 快速-系统配置
$result['inquiry_price'] = $system_inquiry_config['inquiry_price'];
}
$result['work_num_day'] = $doctor_inquiry_config['work_num_day'] ?: 0;
}
return success($result);
}
/**
* 获取医生问诊配置
* @return array
*/
// public function getDoctorInquiryConfig(): array
// {
// $user_info = $this->request->getAttribute("userInfo") ?? [];
//
// $inquiry_type = $this->request->input('inquiry_type');// 接诊类型1:专家问诊 2:快速问诊 3:公益问诊)
// $inquiry_mode = $this->request->input('inquiry_mode');// 接诊方式1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包)
//
// // 获取医生信息
// $params = array();
// $params['doctor_id'] = $user_info['client_user_id'];
// $doctor = UserDoctor::getOne($params);
// if (empty($doctor)) {
// return fail(HttpEnumCode::HTTP_ERROR, "未知医生");
// }
//
// if ($doctor['idcard_status'] != 1) {
// return fail(HttpEnumCode::HTTP_ERROR, "请先进行实名认证");
// }
//
// if ($doctor['iden_auth_status'] != 1) {
// return fail(HttpEnumCode::HTTP_ERROR, "请先进行身份认证");
// }
//
// if ($doctor['is_bind_bank'] != 1) {
// return fail(HttpEnumCode::HTTP_ERROR, "请先进行绑定结算银行卡");
// }
//
// // 返回数据
// $result = array();
// $info = array();
// $config = array();
//
// // 接诊开关
// $is_open = 0;
//
// // 接诊价格
// $info['inquiry_price'] = 0;
//
// // 系统问诊配置表
// $params = array();
// $params['inquiry_type'] = $inquiry_type;
// $params['inquiry_mode'] = $inquiry_mode;
// $system_inquiry_config = SystemInquiryConfig::getOne($params);
// if (empty($system_inquiry_config)) {
// return fail(HttpEnumCode::SERVER_ERROR);
// }
//
// // 医生接诊配置表
// $params = array();
// $params['doctor_id'] = $user_info['client_user_id'];
// $params['inquiry_type'] = $inquiry_type;
// $params['inquiry_mode'] = $inquiry_mode;
// $doctor_inquiry_config = DoctorInquiryConfig::getOne($params);
// if (empty($doctor_inquiry_config)) {
// // 接诊价格
// $info['inquiry_price'] = $system_inquiry_config['inquiry_price'] ?: 0;
// if ($inquiry_type == 3) {
// // 公益问诊,存在价格档次,默认第一档
// $inquiry_price = explode(',', $system_inquiry_config['inquiry_price']);
//
// $info['inquiry_price'] = $inquiry_price[0];
// }
//
// // 默认接诊人数
// $info['work_num_day'] = $system_inquiry_config['default_work_num_day'] ?: 0;
// } else {
// // 接诊价格
// $info['inquiry_price'] = $doctor_inquiry_config['inquiry_price'] ?: 0;
// if ($inquiry_type == 2) {
// // 快速-系统配置
// $info['inquiry_price'] = $system_inquiry_config['inquiry_price'];
// }
//
// $info['work_num_day'] = $doctor_inquiry_config['work_num_day'] ?: 0;
//
// // 接诊开关
// if ($doctor_inquiry_config['is_enable'] == 1){
// $is_open = 1;
// }
// }
//
// // 接诊开关
// $info['is_open'] = $is_open;
//
// // 每日最大接诊数量
// $config['max_work_num_day'] = $system_inquiry_config['max_work_num_day'];
//
// // 最低接诊价格(专家问诊)
// $config['min_inquiry_price'] = $system_inquiry_config['min_inquiry_price'] ?: 0;
//
// // 最高接诊价格(专家问诊)
// $config['max_inquiry_price'] = $system_inquiry_config['max_inquiry_price'] ?: 0;
//
// // 默认价格
// $config['default_inquiry_price'] = $system_inquiry_config['max_inquiry_price'] ?: 0;
//
// // 沟通次数0为不限制次数
// $config['times_number'] = $system_inquiry_config['times_number'];
//
// // 沟通时长分钟0为不限制时长
// $config['duration'] = $system_inquiry_config['duration'];
//
// // 系统价格(公益问诊)
// $config['system_inquiry_price'] = [];
// if ($inquiry_type == 3) {
// $config['system_inquiry_price'] = explode(',', $system_inquiry_config['inquiry_price']);
// }
//
// $result['info'] = $info;
// $result['config'] = $config;
//
// return success($result);
// }
/**
* 医生问诊开关
* @return array
*/
public function putDoctorInquiryOpen(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$inquiry_type = $this->request->input('inquiry_type');// 接诊类型1:专家问诊 2:快速问诊 3:公益问诊)
$inquiry_mode = $this->request->input('inquiry_mode');// 接诊方式1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包)
$is_open = $this->request->input('is_open');// 是否开启1:开启 0:关闭)
// 获取医生信息
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$doctor = UserDoctor::getOne($params);
if (empty($doctor)) {
return fail(HttpEnumCode::HTTP_ERROR, "未知医生");
}
if ($doctor['idcard_status'] != 1) {
return fail(HttpEnumCode::HTTP_ERROR, "请先进行实名认证");
}
if ($doctor['iden_auth_status'] != 1) {
return fail(HttpEnumCode::HTTP_ERROR, "请先进行身份认证");
}
if ($doctor['is_bind_bank'] != 1) {
return fail(HttpEnumCode::HTTP_ERROR, "请先进行绑定结算银行卡");
}
// 判断对应信息是否存在
if ($inquiry_type == 1 && $inquiry_mode == 6) {
// 疑难会诊
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$doctor_config_difficult_consultation = DoctorConfigDifficultConsultation::getOne($params);
if (empty($doctor_config_difficult_consultation)){
return fail(HttpEnumCode::HTTP_ERROR, "请设置服务价格后开启");
}
}
// 随访包
if ($inquiry_type == 1 && $inquiry_mode == 9) {
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$doctor_config_follow_package = DoctorConfigFollowPackage::getOne($params);
if (empty($doctor_config_follow_package)){
return fail(HttpEnumCode::HTTP_ERROR, "请添加服务内容后开启");
}
}
Db::beginTransaction();
try {
// 医生接诊配置表
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$params['inquiry_type'] = $inquiry_type;
$params['inquiry_mode'] = $inquiry_mode;
$doctor_inquiry_config = DoctorInquiryConfig::getOne($params);
if (empty($doctor_inquiry_config)) {
if ($inquiry_type == 1 || $inquiry_type == 3){
if ($inquiry_mode != 8 && $inquiry_mode != 9){
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
}
// 此处两个参数都默认设置为0随访包以及健康包使用不到
$work_num_day = 0; // 每日接诊数量
$inquiry_price = null; // 接诊价格(专家问诊-公益问诊)
// 获取系统问诊配置表
$params = array();
$params['inquiry_type'] = $inquiry_type;
$params['inquiry_mode'] = $inquiry_mode;
$system_inquiry_config = SystemInquiryConfig::getOne($params);
if (empty($system_inquiry_config)) {
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
// 获取系统问诊配置表
if ($inquiry_mode != 8 && $inquiry_mode != 9){
$work_num_day = $system_inquiry_config['default_work_num_day'] ?: 0;
$inquiry_price = $system_inquiry_config['inquiry_price'];
}
// 快速问诊,需创建
$data = array();
$data['doctor_id'] = $user_info['client_user_id'];
$data['system_inquiry_config_id'] = $system_inquiry_config['system_inquiry_config_id'];
$data['inquiry_type'] = $inquiry_type;
$data['inquiry_mode'] = $inquiry_mode;
$data['is_enable'] = 1; // 是否启用0:否 1:是)
$data['last_enable_method'] = 1; // 最后开启方式1:自己 2:后台)
$data['work_num_day'] = $work_num_day;
$data['inquiry_price'] = $inquiry_price;
$doctor_inquiry_config = DoctorInquiryConfig::addInquiryConfig($data);
if (empty($doctor_inquiry_config)) {
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
// 处理医生健康包
if ($inquiry_type == 1 && $inquiry_mode == 8){
// 获取健康包配置
$params = array();
$health_package = HealthPackage::getOne($params);
if (empty($health_package)){
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
// 获取专家图文问诊价格
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$params['inquiry_type'] = 1;
$params['inquiry_mode'] = 1;
$doctor_inquiry_config = DoctorInquiryConfig::getOne($params);
if (empty($doctor_inquiry_config)){
Db::rollBack();
return fail(HttpEnumCode::HTTP_ERROR, "本服务需设置图文问诊的价格,才可开启");
}
// 价格计算(专家图文问诊价格*费率+30盒35元的干爽颗粒)
$service_price = $doctor_inquiry_config['inquiry_price'] * $health_package['service_rate'] / 100 * 6 + $health_package['discount_product_total_amount'];
// 创建医生健康包
$data = array();
$data['doctor_id'] = $user_info['client_user_id'];
$data['package_id'] = $health_package['package_id'];
$data['service_price'] = $service_price;
$doctor_config_health_package = DoctorConfigHealthPackage::addDoctorConfigHealthPackage($data);
if (empty($doctor_config_health_package)){
Db::rollBack();
return fail(HttpEnumCode::HTTP_ERROR, "开启失败");
}
}
} else {
// 已存在问诊配置,进行修改
$params = array();
$params['inquiry_config_id'] = $doctor_inquiry_config["inquiry_config_id"];
$data = array();
$data['is_enable'] = $is_open;
$data['last_enable_method'] = 1;
DoctorInquiryConfig::editInquiryConfig($params, $data);
// 处理医生健康包
if ($inquiry_mode == 8 && $is_open == 1){
// 获取健康包配置
$params = array();
$health_package = HealthPackage::getOne($params);
if (empty($health_package)){
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
// 获取医生健康包
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$doctor_config_health_package = DoctorConfigHealthPackage::getOne($params);
if (empty($doctor_config_health_package)){
return fail(HttpEnumCode::HTTP_ERROR, "请添加服务内容后开启");
}
// 获取专家图文问诊价格
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$params['inquiry_type'] = 1;
$params['inquiry_mode'] = 1;
$doctor_inquiry_config = DoctorInquiryConfig::getOne($params);
if (empty($doctor_inquiry_config)){
Db::rollBack();
return fail(HttpEnumCode::HTTP_ERROR, "本服务需设置图文问诊的价格,才可开启");
}
// 重新价格计算(专家图文问诊价格*费率+30盒35元的干爽颗粒)
$service_price = $doctor_inquiry_config['inquiry_price'] * $health_package['service_rate'] / 100 * 6 + $health_package['discount_product_total_amount'];
if ($doctor_config_health_package['service_price'] != $service_price){
// 修改医生服务包
$params = array();
$params['health_package_id'] = $doctor_config_health_package['health_package_id'];
$data = array();
$data['service_price'] = $service_price;
DoctorConfigHealthPackage::edit($params,$data);
}
}
}
Db::commit();
} catch (\Throwable $e) {
Db::rollBack();
return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage());
}
return success();
}
/**
* 修改医生问诊配置
* @return array
*/
public function putDoctorInquiryConfig(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$inquiry_type = $this->request->input('inquiry_type');// 接诊类型1:专家问诊 2:快速问诊 3:公益问诊)
$inquiry_mode = $this->request->input('inquiry_mode');// 接诊方式1:图文 2:视频 3:语音 4:电话 5:会员)
$inquiry_price = $this->request->input('inquiry_price');// 接诊价格
$work_num_day = $this->request->input('work_num_day');// 每日接诊数量
if ($inquiry_type == 2) {
// 快速问诊无需配置
return fail();
}
// 获取医生信息
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$doctor = UserDoctor::getOne($params);
if (empty($doctor)) {
return fail(HttpEnumCode::HTTP_ERROR, "未知医生");
}
if ($doctor['idcard_status'] != 1) {
return fail(HttpEnumCode::HTTP_ERROR, "请先进行实名认证");
}
if ($doctor['iden_auth_status'] != 1) {
return fail(HttpEnumCode::HTTP_ERROR, "请先进行身份认证");
}
if ($doctor['is_bind_bank'] != 1) {
return fail(HttpEnumCode::HTTP_ERROR, "请先进行绑定结算银行卡");
}
// 系统问诊配置表
$params = array();
$params['inquiry_type'] = $inquiry_type;
$params['inquiry_mode'] = $inquiry_mode;
$system_inquiry_config = SystemInquiryConfig::getOne($params);
if (empty($system_inquiry_config)) {
return fail(HttpEnumCode::SERVER_ERROR);
}
if ($work_num_day > $system_inquiry_config['max_work_num_day']) {
return fail(HttpEnumCode::HTTP_ERROR, "超出每日最大接诊数量");
}
// 验证-问诊价格
// 义诊时不判断,义诊为选择价格,价格后台可调节
if ($inquiry_type != 3) {
if (!empty($system_inquiry_config['min_inquiry_price']) && !empty($system_inquiry_config['max_inquiry_price'])) {
if ($inquiry_price > $system_inquiry_config['max_inquiry_price'] || $inquiry_price < $system_inquiry_config['min_inquiry_price']) {
return fail(HttpEnumCode::HTTP_ERROR, "问诊价格填写错误");
}
}
}
// 开启事务锁
Db::beginTransaction();
try {
// 医生接诊配置表
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$params['inquiry_type'] = $inquiry_type;
$params['inquiry_mode'] = $inquiry_mode;
$doctor_inquiry_config = DoctorInquiryConfig::getOne($params);
if (empty($doctor_inquiry_config)) {
// 创建
$data = array();
$data['doctor_id'] = $user_info['client_user_id'];
$data['system_inquiry_config_id'] = $system_inquiry_config['system_inquiry_config_id'];
$data['inquiry_type'] = $inquiry_type;
$data['inquiry_mode'] = $inquiry_mode;
$data['work_num_day'] = $work_num_day;
$data['inquiry_price'] = $inquiry_price;
$doctor_inquiry_config = DoctorInquiryConfig::addInquiryConfig($data);
if (empty($doctor_inquiry_config)) {
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
// 记录修改记录
$data = array();
$data['doctor_id'] = $user_info['client_user_id'];
$data['inquiry_config_id'] = $doctor_inquiry_config['inquiry_config_id'];
$data['old_price'] = 0;
$data['new_price'] = $inquiry_price;
$doctor_inquiry_price_record = DoctorInquiryPriceRecord::addRecord($data);
if (empty($doctor_inquiry_price_record)) {
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
} else {
// 在线问诊限制在线问诊验证修改次数
if ($inquiry_type == 1 && $doctor_inquiry_config['inquiry_price'] != $inquiry_price) {
// 获取月份内总调整次数
$params = array();
$params[] = ['doctor_id', '=', $user_info['client_user_id']];
$params[] = ['inquiry_config_id', '=', $doctor_inquiry_config['inquiry_config_id']];
$params[] = ['created_at', '>', date('Y-m-01', time())];
$modify_month_count = DoctorInquiryPriceRecord::getCount($params);
if ($modify_month_count >= 5) {
// 每自然月仅限调整5次
Db::rollBack();
return fail(HttpEnumCode::HTTP_ERROR, "问诊价格每自然月仅限调整5次");
}
$params = array();
$params[] = ['doctor_id', '=', $user_info['client_user_id']];
$params[] = ['inquiry_config_id', '=', $doctor_inquiry_config['inquiry_config_id']];
$params[] = ['created_at', '>', date('Y-m-d', time())];
$modify_month_count = DoctorInquiryPriceRecord::getCount($params);
if ($modify_month_count >= 1) {
// 问诊价格每日仅限调整1次
Db::rollBack();
return fail(HttpEnumCode::HTTP_ERROR, "问诊价格每日仅限调整1次");
}
}
// 修改
if ($doctor_inquiry_config['work_num_day'] != $work_num_day || $doctor_inquiry_config['inquiry_price'] != $inquiry_price) {
$params = array();
$params['inquiry_config_id'] = $doctor_inquiry_config['inquiry_config_id'];
$data = array();
$data['work_num_day'] = $work_num_day;
$data['inquiry_price'] = $inquiry_price;
DoctorInquiryConfig::editInquiryConfig($params, $data);
}
if ($doctor_inquiry_config['inquiry_price'] != $inquiry_price) {
// 记录修改记录
$data = array();
$data['doctor_id'] = $user_info['client_user_id'];
$data['inquiry_config_id'] = $doctor_inquiry_config['inquiry_config_id'];
$data['old_price'] = $doctor_inquiry_config['inquiry_price'];
$data['new_price'] = $inquiry_price;
$doctor_inquiry_price_record = DoctorInquiryPriceRecord::addRecord($data);
if (empty($doctor_inquiry_price_record)) {
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
}
}
Db::commit();
} catch (\Exception $e) {
Db::rollBack();
return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage());
}
return success();
}
/**
* 获取医生问诊价格
* @param string|int $inquiry_type 订单类型1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药)
* @param string|int $inquiry_mode 订单问诊方式1:图文 2:视频 3:语音 4:电话 5:会员)
* @param string|int $doctor_id 医生id
*/
public function getDoctorInquiryPrice(string|int $inquiry_type, string|int $inquiry_mode, string|int $doctor_id): float
{
// 接诊类型1:专家问诊 2:快速问诊 3:公益问诊)
if ($inquiry_type == 1 || $inquiry_type == 3) {
// 专家-公益
$params = array();
$params['doctor_id'] = $doctor_id;
$params['inquiry_type'] = $inquiry_type;
$params['inquiry_mode'] = $inquiry_mode;
$doctor_inquiry_config = DoctorInquiryConfig::getOne($params);
if (empty($doctor_inquiry_config)) {
throw new BusinessException("当前医生未开通对应服务,请重新选择", HttpEnumCode::HTTP_ERROR);
}
$inquiry_price = $doctor_inquiry_config['inquiry_price'] ?: 0;
} elseif ($inquiry_type == 2 || $inquiry_type == 4) {
// 快速-购药
$params = array();
$params['inquiry_type'] = $inquiry_type;
$params['inquiry_mode'] = $inquiry_mode;
$system_inquiry_config = SystemInquiryConfig::getOne($params);
if (empty($system_inquiry_config)) {
throw new BusinessException();
}
$inquiry_price = $system_inquiry_config['inquiry_price'] ?: 0;
} else {
throw new BusinessException();
}
return $inquiry_price;
}
/**
* 获取医生问诊配置-服务设置
* @return array
*/
public function getDoctorInquiryDifficultConfig(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
// 获取医生信息
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$doctor = UserDoctor::getOne($params);
if (empty($doctor)) {
return fail(HttpEnumCode::HTTP_ERROR, "未知医生");
}
if ($doctor['idcard_status'] != 1) {
return fail(HttpEnumCode::HTTP_ERROR, "请先进行实名认证");
}
if ($doctor['iden_auth_status'] != 1) {
return fail(HttpEnumCode::HTTP_ERROR, "请先进行身份认证");
}
if ($doctor['is_bind_bank'] != 1) {
return fail(HttpEnumCode::HTTP_ERROR, "请先进行绑定结算银行卡");
}
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$doctor_config_difficult_consultation = DoctorConfigDifficultConsultation::getOne($params);
if (empty($doctor_config_difficult_consultation)) {
return success(null);
} else {
return success($doctor_config_difficult_consultation->toArray());
}
}
/**
* 新增医生问诊配置-疑难会诊-服务设置
* @return array
*/
public function addDoctorInquiryDifficultConfig(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$service_content = $this->request->input('service_content');
$service_process = $this->request->input('service_process');
$service_period = $this->request->input('service_period');
$service_rounds = $this->request->input('service_rounds');
// 获取医生信息
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$doctor = UserDoctor::getOne($params);
if (empty($doctor)) {
return fail(HttpEnumCode::HTTP_ERROR, "未知医生");
}
if ($doctor['idcard_status'] != 1) {
return fail(HttpEnumCode::HTTP_ERROR, "请先进行实名认证");
}
if ($doctor['iden_auth_status'] != 1) {
return fail(HttpEnumCode::HTTP_ERROR, "请先进行身份认证");
}
if ($doctor['is_bind_bank'] != 1) {
return fail(HttpEnumCode::HTTP_ERROR, "请先进行绑定结算银行卡");
}
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$doctor_config_difficult_consultation = DoctorConfigDifficultConsultation::getOne($params);
if (!empty($doctor_config_difficult_consultation)) {
return fail(HttpEnumCode::HTTP_ERROR, "已存在服务设置,请勿重复设置");
}
$data = array();
$data['doctor_id'] = $doctor['doctor_id'];
$data['service_content'] = $service_content;
$data['service_process'] = $service_process;
$data['service_period'] = $service_period;
$data['service_rounds'] = $service_rounds;
$doctor_config_difficult_consultation = DoctorConfigDifficultConsultation::addDoctorConfigDifficultConsultation($data);
if (empty($doctor_config_difficult_consultation)) {
return fail();
}
return success();
}
/**
* 修改医生问诊配置-疑难会诊-服务设置
* @return array
*/
public function putDoctorInquiryDifficultConfig(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$difficult_consultation_id = $this->request->route('difficult_consultation_id');
$service_content = $this->request->input('service_content');
$service_process = $this->request->input('service_process');
$service_period = $this->request->input('service_period');
$service_rounds = $this->request->input('service_rounds');
// 获取医生信息
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$doctor = UserDoctor::getOne($params);
if (empty($doctor)) {
return fail(HttpEnumCode::HTTP_ERROR, "未知医生");
}
if ($doctor['idcard_status'] != 1) {
return fail(HttpEnumCode::HTTP_ERROR, "请先进行实名认证");
}
if ($doctor['iden_auth_status'] != 1) {
return fail(HttpEnumCode::HTTP_ERROR, "请先进行身份认证");
}
if ($doctor['is_bind_bank'] != 1) {
return fail(HttpEnumCode::HTTP_ERROR, "请先进行绑定结算银行卡");
}
$params = array();
$params['difficult_consultation_id'] = $difficult_consultation_id;
$params['doctor_id'] = $user_info['client_user_id'];
$doctor_config_difficult_consultation = DoctorConfigDifficultConsultation::getOne($params);
if (empty($doctor_config_difficult_consultation)) {
return fail();
}
$data = array();
if ($doctor_config_difficult_consultation['service_content'] != $service_content) {
$data['service_content'] = $service_content;
}
if ($doctor_config_difficult_consultation['service_process'] != $service_process) {
$data['service_process'] = $service_process;
}
if ($doctor_config_difficult_consultation['service_period'] != $service_period) {
$data['service_period'] = $service_period;
}
if ($doctor_config_difficult_consultation['service_rounds'] != $service_rounds) {
$data['service_rounds'] = $service_rounds;
}
if (!empty($data)) {
$params = array();
$params['difficult_consultation_id'] = $doctor_config_difficult_consultation['difficult_consultation_id'];
$res = DoctorConfigDifficultConsultation::edit($params, $data);
if (!$res) {
return fail();
}
}
return success();
}
/**
* 获取医生问诊配置-随访包
* @return array
*/
public function getDoctorInquiryFollowConfig(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
// 获取医生信息
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$doctor = UserDoctor::getOne($params);
if (empty($doctor)) {
return fail(HttpEnumCode::HTTP_ERROR, "未知医生");
}
if ($doctor['idcard_status'] != 1) {
return fail(HttpEnumCode::HTTP_ERROR, "请先进行实名认证");
}
if ($doctor['iden_auth_status'] != 1) {
return fail(HttpEnumCode::HTTP_ERROR, "请先进行身份认证");
}
if ($doctor['is_bind_bank'] != 1) {
return fail(HttpEnumCode::HTTP_ERROR, "请先进行绑定结算银行卡");
}
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$doctor_config_follow_package = DoctorConfigFollowPackage::getOne($params);
if (empty($doctor_config_follow_package)) {
return success(null);
} else {
return success($doctor_config_follow_package->toArray());
}
}
/**
* 获取医生问诊配置-随访包-列表
* @return array
*/
public function getDoctorInquiryFollowItemConfig(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$doctor_id = $this->request->route('doctor_id');
// 获取医生信息
$params = array();
$params['doctor_id'] = $doctor_id;
$doctor = UserDoctor::getOne($params);
if (empty($doctor)) {
return fail(HttpEnumCode::HTTP_ERROR, "未知医生");
}
$result = array();
$params = array();
$params['doctor_id'] = $doctor_id;
$doctor_config_follow_package = DoctorConfigFollowPackage::getOne($params);
if (!empty($doctor_config_follow_package)) {
$params = array();
$params['follow_package_id'] = $doctor_config_follow_package['follow_package_id'];
$doctor_config_follow_package_items = DoctorConfigFollowPackageItem::getOrderServicePeriodList($params);
if (!empty($doctor_config_follow_package_items)) {
foreach ($doctor_config_follow_package_items as &$doctor_config_follow_package_item){
$doctor_config_follow_package_item['monthly_frequency'] = $doctor_config_follow_package['monthly_frequency'];
$result[] = $doctor_config_follow_package_item->toArray();
}
}
}
return success($result);
}
/**
* 新增医生问诊配置-随访包
* @return array
*/
public function addDoctorInquiryFollowConfig(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$monthly_frequency = $this->request->input('monthly_frequency'); // 每月次数0表示不限次
$service_rounds = $this->request->input('service_rounds'); // 服务回合数0表示不限次
$items = $this->request->input('items'); // 随访包内容数据
if ($service_rounds != 0) {
return fail(HttpEnumCode::HTTP_ERROR, "服务回合数只允许为无限次");
}
// 获取医生信息
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$doctor = UserDoctor::getOne($params);
if (empty($doctor)) {
return fail(HttpEnumCode::HTTP_ERROR, "未知医生");
}
if ($doctor['idcard_status'] != 1) {
return fail(HttpEnumCode::HTTP_ERROR, "请先进行实名认证");
}
if ($doctor['iden_auth_status'] != 1) {
return fail(HttpEnumCode::HTTP_ERROR, "请先进行身份认证");
}
if ($doctor['is_bind_bank'] != 1) {
return fail(HttpEnumCode::HTTP_ERROR, "请先进行绑定结算银行卡");
}
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$doctor_config_follow_package = DoctorConfigFollowPackage::getOne($params);
if (!empty($doctor_config_follow_package)) {
return fail(HttpEnumCode::HTTP_ERROR, "已存在随访包配置,请勿重复设置");
}
Db::beginTransaction();
try {
$data = array();
$data['doctor_id'] = $doctor['doctor_id'];
$data['monthly_frequency'] = $monthly_frequency;
$data['service_rounds'] = $service_rounds;
$doctor_config_follow_package = DoctorConfigFollowPackage::addDoctorConfigFollowPackage($data);
if (empty($doctor_config_follow_package)) {
Db::rollBack();
return fail(HttpEnumCode::HTTP_ERROR, "添加失败");
}
foreach ($items as $item) {
if (empty($item['service_period'])) {
Db::rollBack();
return fail(HttpEnumCode::HTTP_ERROR, "请填写服务周期");
}
if (!in_array($item['service_period'], [30, 90, 180, 360])) {
Db::rollBack();
return fail(HttpEnumCode::HTTP_ERROR, "请填写服务周期");
}
if (empty($item['service_price'])) {
Db::rollBack();
return fail(HttpEnumCode::HTTP_ERROR, "请填写服务价格");
}
if ($item['service_price'] < 10 || $item['service_price'] > 9999) {
Db::rollBack();
return fail(HttpEnumCode::HTTP_ERROR, "服务价格只允许设置在10-9999范围内");
}
// 新增医生配置-随访包明细
$data = array();
$data['follow_package_id'] = $doctor_config_follow_package['follow_package_id'];
$data['service_period'] = $item['service_period'];
$data['service_price'] = $item['service_price'];
$doctor_config_follow_package_item = DoctorConfigFollowPackageItem::addDoctorConfigFollowPackageItem($data);
if (empty($doctor_config_follow_package_item)) {
Db::rollBack();
return fail(HttpEnumCode::HTTP_ERROR, "保存失败");
}
}
Db::commit();
} catch (\Throwable $e) {
Db::rollBack();
return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage());
}
return success();
}
/**
* 修改医生问诊配置-随访包
* @return array
*/
public function putDoctorInquiryFollowConfig(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$monthly_frequency = $this->request->input('monthly_frequency'); // 每月次数0表示不限次
$service_rounds = $this->request->input('service_rounds'); // 服务回合数0表示不限次
$items = $this->request->input('items'); // 随访包内容数据
if ($service_rounds != 0) {
return fail(HttpEnumCode::HTTP_ERROR, "服务回合数只允许为无限次");
}
// 获取医生信息
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$doctor = UserDoctor::getOne($params);
if (empty($doctor)) {
return fail(HttpEnumCode::HTTP_ERROR, "未知医生");
}
if ($doctor['idcard_status'] != 1) {
return fail(HttpEnumCode::HTTP_ERROR, "请先进行实名认证");
}
if ($doctor['iden_auth_status'] != 1) {
return fail(HttpEnumCode::HTTP_ERROR, "请先进行身份认证");
}
if ($doctor['is_bind_bank'] != 1) {
return fail(HttpEnumCode::HTTP_ERROR, "请先进行绑定结算银行卡");
}
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$doctor_config_follow_package = DoctorConfigFollowPackage::getOne($params);
if (empty($doctor_config_follow_package)) {
return fail(HttpEnumCode::HTTP_ERROR, "请添加后再修改");
}
Db::beginTransaction();
try {
// 修改随访包数据
$follow_package_data = array();
if ($doctor_config_follow_package['monthly_frequency'] != $monthly_frequency) {
$follow_package_data['monthly_frequency'] = $monthly_frequency;
}
if ($doctor_config_follow_package['service_rounds'] != $service_rounds) {
$follow_package_data['service_rounds'] = $service_rounds;
}
if (!empty($follow_package_data)) {
$params = array();
$params['follow_package_id'] = $doctor_config_follow_package['follow_package_id'];
DoctorConfigFollowPackage::edit($params, $follow_package_data);
}
// 删除随访包内容明细
$params = array();
$params['follow_package_id'] = $doctor_config_follow_package['follow_package_id'];
DoctorConfigFollowPackageItem::del($params);
// 新增随访包内容明细
foreach ($items as $item) {
if (empty($item['service_period'])) {
Db::rollBack();
return fail(HttpEnumCode::HTTP_ERROR, "请填写服务周期");
}
if (!in_array($item['service_period'], [30, 90, 180, 360])) {
Db::rollBack();
return fail(HttpEnumCode::HTTP_ERROR, "请填写服务周期");
}
if (empty($item['service_price'])) {
Db::rollBack();
return fail(HttpEnumCode::HTTP_ERROR, "请填写服务价格");
}
if ($item['service_price'] < 10 || $item['service_price'] > 9999) {
Db::rollBack();
return fail(HttpEnumCode::HTTP_ERROR, "服务价格只允许设置在10-9999范围内");
}
// 新增医生配置-随访包明细
$data = array();
$data['follow_package_id'] = $doctor_config_follow_package['follow_package_id'];
$data['service_period'] = $item['service_period'];
$data['service_price'] = $item['service_price'];
$doctor_config_follow_package_item = DoctorConfigFollowPackageItem::addDoctorConfigFollowPackageItem($data);
if (empty($doctor_config_follow_package_item)) {
Db::rollBack();
return fail(HttpEnumCode::HTTP_ERROR, "保存失败");
}
}
Db::commit();
} catch (\Throwable $e) {
Db::rollBack();
return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage());
}
return success();
}
/**
* 获取医生问诊配置-健康包
* @return array
*/
public function getDoctorInquiryHealthConfig(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
// 获取医生信息
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$doctor = UserDoctor::getOne($params);
if (empty($doctor)) {
return fail(HttpEnumCode::HTTP_ERROR, "未知医生");
}
if ($doctor['idcard_status'] != 1) {
return fail(HttpEnumCode::HTTP_ERROR, "请先进行实名认证");
}
if ($doctor['iden_auth_status'] != 1) {
return fail(HttpEnumCode::HTTP_ERROR, "请先进行身份认证");
}
if ($doctor['is_bind_bank'] != 1) {
return fail(HttpEnumCode::HTTP_ERROR, "请先进行绑定结算银行卡");
}
if ($doctor['multi_point_status'] != 1) {
return fail(HttpEnumCode::HTTP_ERROR, "本服务需开处方,您还未做多点执业认证,是否前往?");
}
// 获取专家图文问诊价格
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$params['inquiry_type'] = 1;
$params['inquiry_mode'] = 1;
$doctor_inquiry_config = DoctorInquiryConfig::getOne($params);
if (empty($doctor_inquiry_config)){
return success(null);
}
// 获取健康包配置
$params = array();
$health_package = HealthPackage::getOne($params);
if (empty($health_package)){
return fail(HttpEnumCode::SERVER_ERROR);
}
$result = array();
$result['service_count'] = $health_package['service_count']; // 总服务次数
$result['service_rate'] = $health_package['service_rate']; // 服务费率。100为满值表示1正常费率。
$result['inquiry_price'] = $doctor_inquiry_config['inquiry_price']; // 专家问诊-图文接诊价格
return success($result);
}
}