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_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(); } /** * 获取医生问诊配置-健康包 * @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); } }