调整问诊配置,新增随访包接口等

This commit is contained in:
2024-04-02 17:06:20 +08:00
parent 621b53225d
commit 8784a93898
10 changed files with 844 additions and 94 deletions
+484 -66
View File
@@ -4,6 +4,8 @@ namespace App\Services;
use App\Constants\HttpEnumCode;
use App\Exception\BusinessException;
use App\Model\DoctorConfigFollowPackage;
use App\Model\DoctorConfigFollowPackageItem;
use App\Model\DoctorInquiryConfig;
use App\Model\DoctorInquiryConfigService;
use App\Model\DoctorInquiryPriceRecord;
@@ -16,6 +18,64 @@ 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
@@ -25,7 +85,7 @@ class DoctorInquiryService extends BaseService
$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:疑难会诊)
$inquiry_mode = $this->request->input('inquiry_mode');// 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包
// 获取医生信息
$params = array();
@@ -49,14 +109,10 @@ class DoctorInquiryService extends BaseService
// 返回数据
$result = array();
$info = array();
$config = array();
// 接诊开关
$is_open = 0;
// 接诊价格
$info['inquiry_price'] = 0;
$result['inquiry_price'] = "";
$result['work_num_day'] = "";
// 系统问诊配置表
$params = array();
@@ -73,67 +129,138 @@ class DoctorInquiryService extends BaseService
$params['inquiry_type'] = $inquiry_type;
$params['inquiry_mode'] = $inquiry_mode;
$doctor_inquiry_config = DoctorInquiryConfig::getOne($params);
if (empty($doctor_inquiry_config)) {
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) {
$result['inquiry_price'] = $doctor_inquiry_config['inquiry_price'] ?: 0;
if ($inquiry_type == 2 && $inquiry_mode == 1) {
// 快速-系统配置
$info['inquiry_price'] = $system_inquiry_config['inquiry_price'];
$result['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;
}
$result['work_num_day'] = $doctor_inquiry_config['work_num_day'] ?: 0;
}
// 接诊开关
$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 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
@@ -143,7 +270,7 @@ class DoctorInquiryService extends BaseService
$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_mode = $this->request->input('inquiry_mode');// 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包
$is_open = $this->request->input('is_open');// 是否开启(1:开启 0:关闭)
// 获取医生信息
@@ -425,12 +552,12 @@ class DoctorInquiryService extends BaseService
* 获取医生问诊配置-服务设置
* @return array
*/
public function getInquiryServiceConfig(): array
public function getDoctorInquiryDifficultConfig(): 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:疑难会诊)
$inquiry_mode = $this->request->input('inquiry_mode');// 接诊方式(1:图文 2:视频 3:语音 4:电话 5:会员 6:疑难会诊 7:附赠 8:健康包 9:随访包
if ($inquiry_mode != 6){
return fail();
@@ -469,10 +596,10 @@ class DoctorInquiryService extends BaseService
}
/**
* 新增医生问诊配置-服务设置
* 新增医生问诊配置-疑难会诊-服务设置
* @return array
*/
public function addInquiryServiceConfig(): array
public function addDoctorInquiryDifficultConfig(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
@@ -527,10 +654,10 @@ class DoctorInquiryService extends BaseService
}
/**
* 修改医生问诊配置-服务设置
* 修改医生问诊配置-疑难会诊-服务设置
* @return array
*/
public function putInquiryServiceConfig(): array
public function putDoctorInquiryDifficultConfig(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
@@ -597,4 +724,295 @@ class DoctorInquiryService extends BaseService
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") ?? [];
// 获取医生信息
$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();
$params = array();
$params['doctor_id'] = $user_info['client_user_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_item = DoctorConfigFollowPackageItem::getList($params);
if (!empty($doctor_config_follow_package_item)){
$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();
}
}