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:会员) $result = array(); $result['info'] = array(); // 配置信息 $result['config'] = array(); // 系统配置 // 获取医生信息 $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['idcard_status'] != 1){ return fail(HttpEnumCode::HTTP_ERROR, "请先进行实名认证"); } if ($doctor['iden_auth_status'] != 1){ return fail(HttpEnumCode::HTTP_ERROR, "请先进行身份认证"); } // 接诊开关 $result['info']['is_open'] = 0; if ($inquiry_type == 1){ // 专家 $result['info']['is_open'] = $doctor['is_img_expert_reception']; }elseif ($inquiry_type == 2){ // 快速 $result['info']['is_open'] = $doctor['is_img_quick_reception']; }elseif ($inquiry_type == 3){ // 公益 $result['info']['is_open'] = $doctor['is_img_welfare_reception']; } // 接诊价格 $result['info']['inquiry_price'] = 0; // 接诊人数 $result['info']['work_num_day'] = 30; // 系统问诊配置表 $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['info']['inquiry_price'] = $system_inquiry_config['inquiry_price'] ?: 0; if ($inquiry_type == 3){ // 公益问诊,存在价格档次,默认第一档 $inquiry_price = explode(',',$system_inquiry_config['inquiry_price']); $result['info']['inquiry_price'] = $inquiry_price[0]; } }else{ // 接诊价格 $result['info']['inquiry_price'] = $doctor_inquiry_config['inquiry_price'] ?: 0; if ($inquiry_type == 2){ // 快速-系统配置 $result['info']['inquiry_price'] = $system_inquiry_config['inquiry_price']; } $result['info']['work_num_day'] = $doctor_inquiry_config['work_num_day'] ?: 0; } // 每日最大接诊数量 $result['config']['max_work_num_day'] = $system_inquiry_config['max_work_num_day']; // 最低接诊价格(专家问诊) $result['config']['min_inquiry_price'] = $system_inquiry_config['min_inquiry_price'] ?: 0; // 最高接诊价格(专家问诊) $result['config']['max_inquiry_price'] = $system_inquiry_config['max_inquiry_price'] ?: 0; // 默认价格 $result['config']['default_inquiry_price'] = $system_inquiry_config['max_inquiry_price'] ?: 0; // 沟通次数(0为不限制次数) $result['config']['times_number'] = $system_inquiry_config['times_number']; // 沟通时长(分钟,0为不限制时长) $result['config']['duration'] = $system_inquiry_config['duration']; return success($result); } /** * 医生问诊开关 * @return array */ public function putInquiryOpen(): 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:会员) $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['idcard_status'] != 1){ return fail(HttpEnumCode::HTTP_ERROR, "请先进行实名认证"); } if ($doctor['iden_auth_status'] != 1){ return fail(HttpEnumCode::HTTP_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 ($inquiry_type != 2){ // 快速问诊可能会存在未创建的情况 return fail(HttpEnumCode::HTTP_ERROR, "请先完善问诊配置"); } } Db::beginTransaction(); try { $params = array(); $params['doctor_id'] = $user_info['client_user_id']; $data = array(); if ($inquiry_type == 1){ // 专家 $data['is_img_expert_reception'] = $is_open; }elseif ($inquiry_type == 2){ // 快速 $data['is_img_quick_reception'] = $is_open; }elseif ($inquiry_type == 3){ // 公益 $data['is_img_welfare_reception'] = $is_open; } UserDoctor::editUserDoctor($params,$data); if ($inquiry_type == 2){ // 系统问诊配置表 $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); } // 快速问诊,需创建 $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'] = $system_inquiry_config['max_work_num_day'] ?: 0; $data['inquiry_price'] = $system_inquiry_config['inquiry_price']; $doctor_inquiry_config = DoctorInquiryConfig::addInquiryConfig($data); if (empty($doctor_inquiry_config)){ Db::rollBack(); return fail(HttpEnumCode::SERVER_ERROR); } } Db::commit(); } catch (\Exception $e) { Db::rollBack(); return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage()); } return success(); } /** * 修改医生问诊配置 * @return array */ public function putInquiryConfig(): 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['idcard_status'] != 1){ return fail(HttpEnumCode::HTTP_ERROR, "请先进行实名认证"); } if ($doctor['iden_auth_status'] != 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); } }else{ // 修改 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); } } Db::commit(); } catch (\Exception $e) { Db::rollBack(); return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage()); } return success(); } }