989 lines
33 KiB
PHP
989 lines
33 KiB
PHP
<?php
|
||
|
||
namespace App\Services;
|
||
|
||
use App\Constants\HttpEnumCode;
|
||
use App\Exception\BusinessException;
|
||
use App\Model\BasicBank;
|
||
use App\Model\BasicWord;
|
||
use App\Model\DiseaseClassExpertise;
|
||
use App\Model\DiseaseClassIcd;
|
||
use App\Model\DoctorAccount;
|
||
use App\Model\DoctorBankCard;
|
||
use App\Model\DoctorExpertise;
|
||
use App\Model\DoctorInquiryConfig;
|
||
use App\Model\DoctorWord;
|
||
use App\Model\InquiryCaseProduct;
|
||
use App\Model\OrderEvaluation;
|
||
use App\Model\OrderInquiry;
|
||
use App\Model\OrderInquiryCase;
|
||
use App\Model\OrderPrescription;
|
||
use App\Model\OrderPrescriptionIcd;
|
||
use App\Model\OrderProductItem;
|
||
use App\Model\User;
|
||
use App\Model\UserDoctor;
|
||
use App\Model\UserDoctorInfo;
|
||
use App\Utils\Mask;
|
||
use Hyperf\DbConnection\Db;
|
||
|
||
class UserDoctorService extends BaseService
|
||
{
|
||
/**
|
||
* 获取医生专长列表
|
||
* 身份认证
|
||
* @return array
|
||
*/
|
||
public function getAuthDoctorExpertise(): array
|
||
{
|
||
$user_info = $this->request->getAttribute("userInfo") ?? [];
|
||
|
||
// 获取医生已选择专长
|
||
$doctor_selected_expertise = $this->getDoctorSelectedExpertise($user_info['client_user_id']);
|
||
|
||
$expertise_ids = [];
|
||
|
||
if (!empty($doctor_selected_expertise)) {
|
||
$expertise_ids = array_column($doctor_selected_expertise, 'expertise_id');
|
||
}
|
||
|
||
// 获取全部专长
|
||
$fields = [
|
||
'expertise_id',
|
||
'expertise_name',
|
||
'expertise_sort',
|
||
];
|
||
$disease_class_expertise = DiseaseClassExpertise::getOrderList([], $fields);
|
||
|
||
foreach ($disease_class_expertise as &$item) {
|
||
$item['is_selected'] = 0;
|
||
if (in_array($item['expertise_id'], $expertise_ids)) {
|
||
$item['is_selected'] = 1;
|
||
}
|
||
}
|
||
|
||
return success($disease_class_expertise);
|
||
}
|
||
|
||
/**
|
||
* 获取医生已选择专长
|
||
* @param string $doctor_id
|
||
* @return array
|
||
*/
|
||
public function getDoctorSelectedExpertise(string $doctor_id): array
|
||
{
|
||
if (empty($doctor_id)) {
|
||
throw new BusinessException("缺少医生id");
|
||
}
|
||
|
||
$params = array();
|
||
$params['doctor_id'] = $doctor_id;
|
||
$doctor_expertise = DoctorExpertise::getDiseaseClassExpertiseList($params);
|
||
if (!empty($doctor_expertise)) {
|
||
foreach ($doctor_expertise as &$data) {
|
||
if (!empty($data['DiseaseClassExpertise'])) {
|
||
$data['expertise_name'] = $data['DiseaseClassExpertise']['expertise_name'];
|
||
}
|
||
unset($data['DiseaseClassExpertise']);
|
||
}
|
||
}
|
||
|
||
return $doctor_expertise->toArray();
|
||
}
|
||
|
||
/**
|
||
* 获取医生银行卡
|
||
* @return array
|
||
*/
|
||
public function getDoctorBankCard(): array
|
||
{
|
||
$user_info = $this->request->getAttribute("userInfo") ?? [];
|
||
|
||
$params = array();
|
||
$params['doctor_id'] = $user_info['client_user_id'];
|
||
$doctor_bank_card = DoctorBankCard::getWithBankOne($params);
|
||
if (empty($doctor_bank_card)) {
|
||
return success();
|
||
}
|
||
|
||
$data = array();
|
||
$data['bank_card_id'] = $doctor_bank_card['bank_card_id'];
|
||
$data['bank_img_path'] = $doctor_bank_card['BasicBank']['bank_img_path'];
|
||
$data['bank_name'] = $doctor_bank_card['BasicBank']['bank_name'];
|
||
$data['bank_card_code_mask'] = $doctor_bank_card['bank_card_code_mask'];
|
||
|
||
unset($doctor_bank_card);
|
||
|
||
return success($data);
|
||
}
|
||
|
||
/**
|
||
* 获取医生银行卡详情信息
|
||
* @return array
|
||
*/
|
||
public function getDoctorBankCardInfo(): array
|
||
{
|
||
$user_info = $this->request->getAttribute("userInfo") ?? [];
|
||
|
||
$bank_card_id = $this->request->input('bank_card_id');// 医生银行卡id
|
||
|
||
// 获取医生详情数据
|
||
$params = array();
|
||
$params['doctor_id'] = $user_info['client_user_id'];
|
||
|
||
$fields = [
|
||
'doctor_info_id',
|
||
'doctor_id',
|
||
'card_name',
|
||
'card_num_mask',
|
||
];
|
||
$user_doctor_info = UserDoctorInfo::getOne($params, $fields);
|
||
if (empty($user_doctor_info)) {
|
||
return fail(HttpEnumCode::HTTP_ERROR, "请先实名认证");
|
||
}
|
||
|
||
$result = array();
|
||
$result['info'] = array();
|
||
$result['bank'] = array();
|
||
|
||
$info = array();
|
||
$info['card_name'] = $user_doctor_info['card_name'];
|
||
$info['card_num_mask'] = $user_doctor_info['card_num_mask'];
|
||
|
||
if (!empty($bank_card_id)) {
|
||
// 获取添加的银行卡信息
|
||
$params = array();
|
||
$params['doctor_id'] = $user_info['client_user_id'];
|
||
$params['bank_card_id'] = $bank_card_id;
|
||
$doctor_bank_card = DoctorBankCard::getWithBankOne($params);
|
||
if (empty($doctor_bank_card)) {
|
||
return fail();
|
||
}
|
||
|
||
$bank = array();
|
||
$bank['bank_card_id'] = $doctor_bank_card['bank_card_id'];
|
||
$bank['bank_id'] = $doctor_bank_card['bank_id'];
|
||
$bank['bank_name'] = $doctor_bank_card['BasicBank']['bank_name'];
|
||
$bank['bank_card_code'] = $doctor_bank_card['bank_card_code'];// 银行卡号
|
||
$bank['province_id'] = $doctor_bank_card['province_id'];
|
||
$bank['province'] = $doctor_bank_card['province'];
|
||
$bank['city_id'] = $doctor_bank_card['city_id'];
|
||
$bank['city'] = $doctor_bank_card['city'];
|
||
$bank['county_id'] = $doctor_bank_card['county_id'];
|
||
$bank['county'] = $doctor_bank_card['county'];
|
||
}
|
||
|
||
$result['info'] = $info;// 用户数据
|
||
$result['bank'] = $bank ?? [];// 银行卡数据
|
||
return success($result);
|
||
}
|
||
|
||
/**
|
||
* 新增绑定医生银行卡
|
||
* @return array
|
||
*/
|
||
public function addDoctorBankCard(): array
|
||
{
|
||
$user_info = $this->request->getAttribute("userInfo") ?? [];
|
||
|
||
$bank_id = $this->request->input('bank_id');
|
||
$bank_card_code = $this->request->input('bank_card_code');
|
||
$province_id = $this->request->input('province_id');
|
||
$city_id = $this->request->input('city_id');
|
||
$county_id = $this->request->input('county_id');
|
||
|
||
// 验证银行
|
||
$params = array();
|
||
$params['bank_id'] = $bank_id;
|
||
$basic_bank = BasicBank::getOne($params);
|
||
if (empty($basic_bank)) {
|
||
return fail(HttpEnumCode::HTTP_ERROR, "开户行错误");
|
||
}
|
||
|
||
// 验证省市区
|
||
$areaService = new AreaService();
|
||
$area = $areaService->getAreaById($province_id, $city_id, $county_id);
|
||
if (empty($area)) {
|
||
return fail(HttpEnumCode::HTTP_ERROR, "地区选择错误");
|
||
}
|
||
|
||
// 获取医生银行卡
|
||
$params = array();
|
||
$params['doctor_id'] = $user_info['client_user_id'];
|
||
$doctor_bank_card = DoctorBankCard::getOne($params);
|
||
if (!empty($doctor_bank_card)) {
|
||
return fail(HttpEnumCode::HTTP_ERROR, "已绑定银行卡");
|
||
}
|
||
|
||
// 获取医生信息
|
||
$params = array();
|
||
$params['doctor_id'] = $user_info['client_user_id'];
|
||
|
||
$fields = [
|
||
'doctor_id',
|
||
'is_bind_bank',
|
||
];
|
||
$user_doctor = UserDoctor::getOne($params, $fields);
|
||
if (empty($user_doctor)) {
|
||
return fail(HttpEnumCode::HTTP_ERROR, "非法医生");
|
||
}
|
||
|
||
if ($user_doctor['is_bind_bank'] == 1) {
|
||
return fail(HttpEnumCode::HTTP_ERROR, "已绑定银行卡");
|
||
}
|
||
|
||
// 处理银行卡掩码
|
||
$bank_card_code_mask = Mask::maskBankCard($bank_card_code);
|
||
|
||
// 验证银行卡
|
||
|
||
Db::beginTransaction();
|
||
|
||
try {
|
||
// 新增医生银行卡
|
||
$data = array();
|
||
$data['doctor_id'] = $user_info['client_user_id'];
|
||
$data['bank_id'] = $bank_id;
|
||
$data['bank_card_code'] = $bank_card_code;
|
||
$data['bank_card_code_mask'] = $bank_card_code_mask;
|
||
$data['province_id'] = $province_id;
|
||
$data['province'] = $area['province']['area_name'];
|
||
$data['city_id'] = $city_id;
|
||
$data['city'] = $area['city']['area_name'];
|
||
$data['county_id'] = $county_id;
|
||
$data['county'] = $area['county']['area_name'];
|
||
$doctor_bank_card = DoctorBankCard::addDoctorBankCard($data);
|
||
if (empty($doctor_bank_card)) {
|
||
Db::rollBack();
|
||
return fail(HttpEnumCode::SERVER_ERROR);
|
||
}
|
||
|
||
// 修改医生表绑定银行卡状态
|
||
$params = array();
|
||
$params['doctor_id'] = $user_info['client_user_id'];
|
||
|
||
$data = array();
|
||
$data['is_bind_bank'] = 1;
|
||
UserDoctor::editUserDoctor($params, $data);
|
||
|
||
Db::commit();
|
||
} catch (\Exception $e) {
|
||
Db::rollBack();
|
||
return fail(HttpEnumCode::SERVER_ERROR, $e->getMessage());
|
||
}
|
||
|
||
return success();
|
||
}
|
||
|
||
/**
|
||
* 更换医生银行卡
|
||
* @return array
|
||
*/
|
||
public function putDoctorBankCard(): array
|
||
{
|
||
$user_info = $this->request->getAttribute("userInfo") ?? [];
|
||
|
||
$bank_card_id = $this->request->route('bank_card_id');
|
||
$bank_id = $this->request->input('bank_id');
|
||
$bank_card_code = $this->request->input('bank_card_code');
|
||
$province_id = $this->request->input('province_id');
|
||
$city_id = $this->request->input('city_id');
|
||
$county_id = $this->request->input('county_id');
|
||
|
||
// 获取医生银行卡
|
||
$params = array();
|
||
$params['bank_card_id'] = $bank_card_id;
|
||
$doctor_bank_card = DoctorBankCard::getOne($params);
|
||
if (empty($doctor_bank_card)) {
|
||
return fail();
|
||
}
|
||
|
||
// 检测上次修改时间
|
||
$updated_at = strtotime($doctor_bank_card['updated_at']);
|
||
$moonth_start = strtotime(date("Y-m-01")); // 当月开始时间
|
||
$moonth_end = strtotime(date("Y-m-t")); // 当月结束时间
|
||
|
||
if ($updated_at >= $moonth_start && $updated_at <= $moonth_end) {
|
||
// 银行卡一月只能修改一次
|
||
return fail(HttpEnumCode::HTTP_ERROR, "银行卡每月只能修改一次");
|
||
}
|
||
|
||
// 验证银行
|
||
$params = array();
|
||
$params['bank_id'] = $bank_id;
|
||
$basic_bank = BasicBank::getOne($params);
|
||
if (empty($basic_bank)) {
|
||
return fail(HttpEnumCode::HTTP_ERROR, "开户行错误");
|
||
}
|
||
|
||
// 验证省市区
|
||
$areaService = new AreaService();
|
||
$area = $areaService->getAreaById($province_id, $city_id, $county_id);
|
||
if (empty($area)) {
|
||
return fail(HttpEnumCode::HTTP_ERROR, "地区选择错误");
|
||
}
|
||
|
||
// 处理银行卡掩码
|
||
$bank_card_code_mask = Mask::maskBankCard($bank_card_code);;
|
||
|
||
// 验证银行卡
|
||
|
||
// 修改银行卡
|
||
$params = array();
|
||
$params['bank_card_id'] = $bank_card_id;
|
||
|
||
$data = array();
|
||
$data['bank_id'] = $bank_id;
|
||
$data['bank_card_code'] = $bank_card_code;
|
||
$data['bank_card_code_mask'] = $bank_card_code_mask;
|
||
$data['province_id'] = $province_id;
|
||
$data['province'] = $area['province']['area_name'];
|
||
$data['city_id'] = $city_id;
|
||
$data['city'] = $area['city']['area_name'];
|
||
$data['county_id'] = $county_id;
|
||
$data['county'] = $area['county']['area_name'];
|
||
$data['updated_at'] = date('Y-m-d H:i:s', time());
|
||
DoctorBankCard::editDoctorBankCard($params, $data);
|
||
|
||
return success();
|
||
}
|
||
|
||
/**
|
||
* 获取处方列表
|
||
* @return array
|
||
*/
|
||
public function getPrescriptionList(): array
|
||
{
|
||
$user_info = $this->request->getAttribute("userInfo") ?? [];
|
||
|
||
$prescription_status = $this->request->input('prescription_status');
|
||
$page = $this->request->input('page', 1);
|
||
$per_page = $this->request->input('per_page', 10);
|
||
|
||
// 获取医生信息
|
||
$params = array();
|
||
$params['doctor_id'] = $user_info['client_user_id'];
|
||
|
||
$fields = [
|
||
'doctor_id',
|
||
'iden_auth_status',
|
||
'idcard_status',
|
||
'multi_point_status',
|
||
];
|
||
$user_doctor = UserDoctor::getOne($params, $fields);
|
||
if (empty($user_doctor)) {
|
||
return fail(HttpEnumCode::HTTP_ERROR, "非法医生");
|
||
}
|
||
|
||
if ($user_doctor['iden_auth_status'] != 1) {
|
||
return fail(HttpEnumCode::HTTP_ERROR, "请先完成身份认证");
|
||
}
|
||
|
||
if ($user_doctor['idcard_status'] != 1) {
|
||
return fail(HttpEnumCode::HTTP_ERROR, "请先完成实名认证");
|
||
}
|
||
|
||
if ($user_doctor['multi_point_status'] != 1) {
|
||
return fail(HttpEnumCode::HTTP_ERROR, "请先完成多点执业认证");
|
||
}
|
||
|
||
// 获取处方数据
|
||
$params = array();
|
||
$params['doctor_id'] = $user_info['client_user_id'];
|
||
$params['pharmacist_audit_status'] = $prescription_status;
|
||
$params['is_delete'] = 0;
|
||
$order_prescriptions = OrderPrescription::getWithIcdPage($params);
|
||
if (empty($order_prescriptions)) {
|
||
return success($order_prescriptions);
|
||
}
|
||
|
||
// 处理数据
|
||
$result = array();
|
||
|
||
foreach ($order_prescriptions['data'] as $order_prescription) {
|
||
$data = array();
|
||
$data['patient_name'] = $order_prescription['patient_name'];
|
||
$data['patient_sex'] = $order_prescription['patient_sex'];
|
||
$data['patient_age'] = $order_prescription['patient_age'];
|
||
$data['created_at'] = $order_prescription['created_at']; // 开方时间
|
||
$data['pharmacist_audit_status'] = $order_prescription['pharmacist_audit_status'];// 药师审核状态(0:审核中 1:审核成功 2:审核驳回)
|
||
$data['pharmacist_fail_reason'] = $order_prescription['pharmacist_fail_reason'];// 驳回原因
|
||
$data['platform_audit_status'] = $order_prescription['platform_audit_status'];// 处方平台审核状态(0:审核中 1:审核成功 2:审核驳回)
|
||
$data['platform_fail_reason'] = $order_prescription['platform_fail_reason'];// 处方平台驳回原因
|
||
|
||
// 获取病例信息
|
||
$params = array();
|
||
$params['order_inquiry_id'] = $order_prescription['order_inquiry_id'];
|
||
$params['status'] = 1;
|
||
$order_inquiry_case = OrderInquiryCase::getOne($params);
|
||
if (empty($order_inquiry_case)) {
|
||
return fail(HttpEnumCode::SERVER_ERROR);
|
||
}
|
||
|
||
// 病情描述
|
||
$data['disease_desc'] = $order_inquiry_case['disease_desc'];
|
||
|
||
// 患病时长
|
||
if (empty($order_inquiry_case['diagnosis_date'])){
|
||
$data['diagnosis_date'] = "未知";
|
||
}else{
|
||
$data['diagnosis_date'] = date('Y-m-d',strtotime($order_inquiry_case['diagnosis_date']));
|
||
}
|
||
|
||
// 疾病信息
|
||
$data['order_prescription_icd'] = $order_prescription['OrderPrescriptionIcd'] ?? [];
|
||
|
||
$result[] = $data;
|
||
}
|
||
|
||
unset($order_prescriptions['data']);
|
||
$order_prescriptions['data'] = $result;
|
||
|
||
return success($order_prescriptions);
|
||
}
|
||
|
||
/**
|
||
* 获取医生个人中心数据
|
||
* @return array
|
||
*/
|
||
public function getDoctorCenter(): array
|
||
{
|
||
$user_info = $this->request->getAttribute("userInfo") ?? [];
|
||
|
||
// 获取医生信息
|
||
$params = array();
|
||
$params['doctor_id'] = $user_info['client_user_id'];
|
||
|
||
$fields = [
|
||
'doctor_id',
|
||
'user_name',
|
||
'iden_auth_status',
|
||
'idcard_status',
|
||
'multi_point_status',
|
||
'avatar',
|
||
];
|
||
$user_doctor = UserDoctor::getOne($params, $fields);
|
||
if (empty($user_doctor)) {
|
||
return fail(HttpEnumCode::HTTP_ERROR, "非法医生");
|
||
}
|
||
|
||
if ($user_doctor['iden_auth_status'] != 1) {
|
||
return fail(HttpEnumCode::HTTP_ERROR, "请先完成身份认证");
|
||
}
|
||
|
||
if ($user_doctor['idcard_status'] != 1) {
|
||
return fail(HttpEnumCode::HTTP_ERROR, "请先完成实名认证");
|
||
}
|
||
|
||
if ($user_doctor['multi_point_status'] != 1) {
|
||
return fail(HttpEnumCode::HTTP_ERROR, "请先完成多点执业认证");
|
||
}
|
||
|
||
$user_doctor = $user_doctor->toArray();
|
||
|
||
// 获取医生账户余额-未提现金额
|
||
$DoctorAccountService = new DoctorAccountService();
|
||
$balance_account = $DoctorAccountService->getDoctorBalanceAccount($user_info['client_user_id']);
|
||
if ($balance_account > 0){
|
||
$balance_account = $balance_account * 0.75;
|
||
}
|
||
|
||
// 获取医生当日接诊的订单金额
|
||
$InquiryService = new InquiryService();
|
||
$estimate_income = $InquiryService->getDoctorDayAmountTotal($user_info['client_user_id'],date('Y-m-d',time()));
|
||
if (!empty($estimate_income)){
|
||
$estimate_income = $estimate_income * 0.75;
|
||
}
|
||
|
||
$user_doctor['balance_account'] = $balance_account;
|
||
$user_doctor['estimate_income'] = $estimate_income;
|
||
|
||
return success($user_doctor);
|
||
}
|
||
|
||
/**
|
||
* 获取常用语列表
|
||
* @return array
|
||
*/
|
||
public function getDoctorWords(): array
|
||
{
|
||
$user_info = $this->request->getAttribute("userInfo") ?? [];
|
||
|
||
$words_type = $this->request->input('words_type');
|
||
|
||
$result = array();
|
||
|
||
// 获取系统常用语
|
||
$params = array();
|
||
$params['basics_words_type'] = $words_type;
|
||
$params['basics_words_status'] = 1;
|
||
$basic_words = BasicWord::getList($params);
|
||
if (!empty($basic_words)){
|
||
foreach ($basic_words as $item){
|
||
$data = array();
|
||
$data['words'] = $item['basics_words'];
|
||
|
||
$result[] = $data;
|
||
}
|
||
}
|
||
|
||
// 获取医生自定义常用语
|
||
$params = array();
|
||
$params['doctor_id'] = $user_info['client_user_id'];
|
||
$params['words_type'] = $words_type;
|
||
$params['words_status'] = 1;
|
||
$doctor_words = DoctorWord::getList($params);
|
||
if (!empty($doctor_words)){
|
||
foreach ($doctor_words as $item){
|
||
$data = array();
|
||
$data['words'] = $item['words'];
|
||
|
||
$result[] = $data;
|
||
}
|
||
}
|
||
|
||
return success($result);
|
||
}
|
||
|
||
/**
|
||
* 新增常用语列表
|
||
* @return array
|
||
*/
|
||
public function addDoctorWords(): array
|
||
{
|
||
$user_info = $this->request->getAttribute("userInfo") ?? [];
|
||
|
||
$words = $this->request->input('words');
|
||
$words_type = $this->request->input('words_type');
|
||
|
||
// 查询是否重复
|
||
$params = array();
|
||
$params['doctor_id'] = $user_info['client_user_id'];
|
||
$params['words_type'] = $words_type;
|
||
$params['words'] = $words;
|
||
$doctor_words = DoctorWord::getOne($params);
|
||
if (!empty($doctor_words)){
|
||
if ($doctor_words['words_status'] == 0){
|
||
return fail(HttpEnumCode::HTTP_ERROR,"此常用语已被禁用");
|
||
}else{
|
||
return fail(HttpEnumCode::HTTP_ERROR,"请勿重复添加");
|
||
}
|
||
}
|
||
|
||
$data = array();
|
||
$data['doctor_id'] = $user_info['client_user_id'];
|
||
$data['words_type'] = $words_type;
|
||
$data['words_status'] = 1;
|
||
$data['sort'] = 0;
|
||
$data['words'] = $words;
|
||
|
||
$doctor_words = DoctorWord::addDoctorWord($data);
|
||
if (empty($doctor_words)){
|
||
return fail(HttpEnumCode::SERVER_ERROR);
|
||
}
|
||
|
||
return success();
|
||
}
|
||
|
||
/**
|
||
* 获取医生评价
|
||
* @return array
|
||
*/
|
||
public function getDoctorEvaluationList(): array
|
||
{
|
||
$user_info = $this->request->getAttribute("userInfo") ?? [];
|
||
|
||
$doctor_id = $this->request->input('doctor_id');
|
||
$evaluation_type = $this->request->input('evaluation_type',1);
|
||
$page = $this->request->input('page',1);
|
||
$per_page = $this->request->input('per_page',10);
|
||
|
||
if (empty($user_info)){
|
||
return fail();
|
||
}
|
||
|
||
$params = array();
|
||
$params['doctor_id'] = $doctor_id;
|
||
|
||
// 4-5分为好评、3分为中评、2-1分为差评
|
||
if ($evaluation_type == 1){
|
||
// 全部
|
||
$avg_score_params = [0,100];
|
||
}elseif ($evaluation_type == 2){
|
||
// 好评
|
||
$avg_score_params = [80,100];
|
||
}elseif ($evaluation_type == 3){
|
||
// 中/差评
|
||
$avg_score_params = [0,80];
|
||
}else{
|
||
return fail();
|
||
}
|
||
|
||
$order_evaluation = OrderEvaluation::getScorePage($params,$avg_score_params);
|
||
if (!empty($order_evaluation['data'])){
|
||
foreach ($order_evaluation['data'] as &$item){
|
||
$item['avg_score'] = floor($item['avg_score'] * 0.05);
|
||
|
||
}
|
||
}
|
||
|
||
// 获取其他类型评论总数
|
||
if ($evaluation_type != 1){
|
||
// 好评
|
||
$avg_score_params = [80,100];
|
||
$good_quantity = OrderEvaluation::getScoreCount($params,$avg_score_params);
|
||
|
||
// 中/差评
|
||
$avg_score_params = [0,80];
|
||
$bad_quantity = OrderEvaluation::getScoreCount($params,$avg_score_params);
|
||
}
|
||
|
||
if ($evaluation_type != 2){
|
||
// 全部+
|
||
$avg_score_params = [0,100];
|
||
$total_quantity = OrderEvaluation::getScoreCount($params,$avg_score_params);
|
||
|
||
// 中/差评
|
||
$avg_score_params = [0,80];
|
||
$bad_quantity = OrderEvaluation::getScoreCount($params,$avg_score_params);
|
||
|
||
}
|
||
|
||
if ($evaluation_type != 3){
|
||
// 全部+
|
||
$avg_score_params = [0,100];
|
||
$total_quantity = OrderEvaluation::getScoreCount($params,$avg_score_params);
|
||
|
||
// 好评
|
||
$avg_score_params = [80,100];
|
||
$good_quantity = OrderEvaluation::getScoreCount($params,$avg_score_params);
|
||
}
|
||
|
||
$order_evaluation['total_quantity'] = $total_quantity ?? $order_evaluation['total'];
|
||
$order_evaluation['good_quantity'] = $good_quantity ?? $order_evaluation['total'];
|
||
$order_evaluation['bad_quantity'] = $bad_quantity ?? $order_evaluation['total'];
|
||
|
||
return success($order_evaluation);
|
||
}
|
||
|
||
/**
|
||
* 获取医生信息
|
||
* @return array
|
||
*/
|
||
public function getDoctorCenterInfo(): array
|
||
{
|
||
$user_info = $this->request->getAttribute("userInfo") ?? [];
|
||
|
||
// 获取医生信息
|
||
$params = array();
|
||
$params['doctor_id'] = $user_info['client_user_id'];
|
||
|
||
$fields = [
|
||
'doctor_id',
|
||
'user_name',
|
||
'iden_auth_status',
|
||
'idcard_status',
|
||
'multi_point_status',
|
||
'avatar',
|
||
'brief_introduction',
|
||
];
|
||
$user_doctor = UserDoctor::getOne($params, $fields);
|
||
if (empty($user_doctor)) {
|
||
return fail(HttpEnumCode::HTTP_ERROR, "非法医生");
|
||
}
|
||
|
||
$res = $this->checkDoctorAuth($user_doctor);
|
||
if ($res !== true) {
|
||
return fail(HttpEnumCode::HTTP_ERROR, $res);
|
||
}
|
||
|
||
// 获取医生详情
|
||
$fields = [
|
||
'card_name',
|
||
'card_num_mask',
|
||
];
|
||
|
||
$params = array();
|
||
$params['doctor_id'] = $user_info['client_user_id'];
|
||
$user_doctor_info = UserDoctorInfo::getOne($params,$fields);
|
||
if (empty($user_doctor_info)) {
|
||
$user_doctor['card_name'] = "";
|
||
$user_doctor['card_num_mask'] = "";
|
||
}else{
|
||
$user_doctor['card_name'] = $user_doctor_info['card_name'];
|
||
$user_doctor['card_num_mask'] = $user_doctor_info['card_num_mask'];
|
||
}
|
||
|
||
$user_doctor['avatar'] = addAliyunOssWebsite($user_doctor['avatar']);
|
||
|
||
return success($user_doctor->toArray());
|
||
}
|
||
|
||
/**
|
||
* 获取医生证书信息
|
||
* @return array
|
||
*/
|
||
public function getDoctorCret(): array
|
||
{
|
||
$user_info = $this->request->getAttribute("userInfo") ?? [];
|
||
|
||
// 获取医生信息
|
||
$params = array();
|
||
$params['doctor_id'] = $user_info['client_user_id'];
|
||
|
||
$fields = [
|
||
'doctor_id',
|
||
'iden_auth_status',
|
||
'idcard_status',
|
||
'multi_point_status',
|
||
];
|
||
$user_doctor = UserDoctor::getOne($params, $fields);
|
||
if (empty($user_doctor)) {
|
||
return fail(HttpEnumCode::HTTP_ERROR, "非法医生");
|
||
}
|
||
|
||
$res = $this->checkDoctorAuth($user_doctor);
|
||
if ($res !== true) {
|
||
return fail(HttpEnumCode::HTTP_ERROR, $res);
|
||
}
|
||
|
||
// 获取医生详情
|
||
$params = array();
|
||
$params['doctor_id'] = $user_info['client_user_id'];
|
||
$user_doctor_info = UserDoctorInfo::getOne($params);
|
||
if (empty($user_doctor_info)){
|
||
return success();
|
||
}
|
||
|
||
$result = array();
|
||
|
||
// 医师执业证
|
||
if (!empty($user_doctor_info['license_cert'])) {
|
||
$license_cert = explode(',', $user_doctor_info['license_cert']);
|
||
foreach ($license_cert as &$item) {
|
||
$item = addAliyunOssWebsite($item);
|
||
}
|
||
$result['license_cert'] = $license_cert;
|
||
}
|
||
|
||
// 医师职称证
|
||
if (!empty($user_doctor_info['qualification_cert'])) {
|
||
$qualification_cert = explode(',', $user_doctor_info['qualification_cert']);
|
||
foreach ($qualification_cert as &$item) {
|
||
$item = addAliyunOssWebsite($item);
|
||
}
|
||
$result['qualification_cert'] = $qualification_cert;
|
||
}
|
||
|
||
// 医师资格证
|
||
if (!empty($user_doctor_info['work_cert'])) {
|
||
$work_cert = explode(',', $user_doctor_info['work_cert']);
|
||
foreach ($work_cert as &$item) {
|
||
$item = addAliyunOssWebsite($item);
|
||
}
|
||
$result['work_cert'] = $work_cert;
|
||
}
|
||
|
||
return success($result);
|
||
}
|
||
|
||
/**
|
||
* 获取处方详情
|
||
* @return array
|
||
*/
|
||
public function getPrescriptionInfo(): array
|
||
{
|
||
$user_info = $this->request->getAttribute("userInfo") ?? [];
|
||
|
||
$order_inquiry_id = $this->request->input('order_inquiry_id');
|
||
$order_prescription_id = $this->request->input('order_prescription_id');
|
||
|
||
// 获取医生信息
|
||
$params = array();
|
||
$params['doctor_id'] = $user_info['client_user_id'];
|
||
|
||
$fields = [
|
||
'doctor_id',
|
||
'iden_auth_status',
|
||
'idcard_status',
|
||
'multi_point_status',
|
||
];
|
||
$user_doctor = UserDoctor::getOne($params, $fields);
|
||
if (empty($user_doctor)) {
|
||
return fail(HttpEnumCode::HTTP_ERROR, "非法医生");
|
||
}
|
||
|
||
$res = $this->checkDoctorAuth($user_doctor);
|
||
if ($res !== true) {
|
||
return fail(HttpEnumCode::HTTP_ERROR, $res);
|
||
}
|
||
|
||
// 获取患者病例表
|
||
$fields = [
|
||
'inquiry_case_id',
|
||
'name',
|
||
'sex',
|
||
'age',
|
||
'disease_desc',
|
||
];
|
||
|
||
$params = array();
|
||
$params['order_inquiry_id'] = $order_inquiry_id;
|
||
$params['status'] = 1;
|
||
$order_inquiry_case = OrderInquiryCase::getOne($params,$fields);
|
||
if (empty($order_inquiry_case)){
|
||
return fail(HttpEnumCode::HTTP_ERROR,"患者病例信息错误");
|
||
}
|
||
|
||
// 获取用药意向
|
||
$CaseService = new CaseService();
|
||
$inquiry_case_product = $CaseService->getCaseProductlist($order_inquiry_case['inquiry_case_id']);
|
||
|
||
if (!empty($order_prescription_id)){
|
||
// 获取处方数据
|
||
$params = array();
|
||
$params['order_prescription_id'] = $order_prescription_id;
|
||
$order_prescription = OrderPrescription::getOne($params);
|
||
if (empty($order_prescription)){
|
||
return fail();
|
||
}
|
||
|
||
// 订单-商品订单列表
|
||
$OrderPrescriptionService = new OrderPrescriptionService();
|
||
$order_prescription_product = $OrderPrescriptionService->getproductList($order_inquiry_id,$order_prescription_id);
|
||
|
||
// 获取处方关联疾病表
|
||
$fields = [
|
||
'prescription_icd_id',
|
||
'icd_id',
|
||
'icd_name',
|
||
];
|
||
$params = array();
|
||
$params['order_prescription_id'] = $order_prescription_id;
|
||
$order_prescription_icd = OrderPrescriptionIcd::getList($params,$fields);
|
||
}
|
||
|
||
$result = array();
|
||
$result['inquiry_case_product'] = $inquiry_case_product;// 用药意向
|
||
$result['prescription_product'] = $order_prescription_product ?? [];// 开方药品
|
||
$result['case'] = $order_inquiry_case;// 病例数据
|
||
$result['prescription_icd'] = $order_prescription_icd ?? [];// 处方诊断疾病
|
||
$result['prescription']['doctor_advice'] = $order_prescription['doctor_advice'] ?? "";// 医嘱
|
||
|
||
return success($result);
|
||
}
|
||
|
||
/**
|
||
* 修改处方
|
||
* @return array
|
||
*/
|
||
public function putPrescription(): array
|
||
{
|
||
$user_info = $this->request->getAttribute("userInfo") ?? [];
|
||
|
||
$order_inquiry_id = $this->request->input('order_inquiry_id');
|
||
$order_prescription_id = $this->request->input('order_prescription_id');
|
||
return success();
|
||
}
|
||
|
||
/**
|
||
* 检测医生身份认证
|
||
* @param object|array $user_doctor 医生表数据
|
||
* @param bool $is_iden_auth 是否检测身份认证
|
||
* @param bool $is_idcard 是否检测实名认证
|
||
* @param bool $is_multi_point 是否检测多点执业认证
|
||
* @return bool|string string:错误信息 bool:通过
|
||
*/
|
||
public function checkDoctorAuth(object|array $user_doctor,bool $is_iden_auth = true,bool $is_idcard = true,bool $is_multi_point = true): bool|string
|
||
{
|
||
if (empty($user_doctor)){
|
||
throw new BusinessException();
|
||
}
|
||
|
||
if (isset($user_doctor['iden_auth_status'])){
|
||
if ($user_doctor['iden_auth_status'] != 1) {
|
||
return "请先完成身份认证";
|
||
}
|
||
}
|
||
|
||
if (isset($user_doctor['idcard_status'])){
|
||
if ($user_doctor['idcard_status'] != 1) {
|
||
return "请先完成实名认证";
|
||
}
|
||
}
|
||
|
||
if (isset($user_doctor['multi_point_status'])){
|
||
if ($user_doctor['multi_point_status'] != 1) {
|
||
return "请先完成多点执业认证";
|
||
}
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* 检测是否存在对应问诊的在线医生
|
||
* @param int|string $inquiry_type 订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药)
|
||
* @return bool
|
||
*/
|
||
public function checkDoctorOnline(int|string $inquiry_type): bool
|
||
{
|
||
$params = array();
|
||
$params['status'] = 1; // 状态
|
||
$params['idcard_status'] = 1; // 实名认证状态
|
||
$params['iden_auth_status'] = 1;// 身份认证状态
|
||
|
||
if ($inquiry_type == 4){
|
||
// 问诊购药
|
||
$params['multi_point_status'] = 1;// 医生多点执业认证状态(0:未认证 1:认证通过 2:审核中 3:认证失败)
|
||
}
|
||
|
||
$params['is_online'] = 1;// 是否在线(0:不在线 1:在线)
|
||
|
||
switch ($inquiry_type) {
|
||
case 1:
|
||
// 专家
|
||
$params['is_img_expert_reception'] = 1;// 是否参加专家图文接诊(0:否 1:是)
|
||
break;
|
||
case 2:
|
||
// 快速
|
||
$params['is_img_quick_reception'] = 1;// 是否参加快速图文接诊(0:否 1:是)
|
||
break;
|
||
case 3:
|
||
// 公益
|
||
$params['is_img_welfare_reception'] = 1;// 是否参加公益图文问诊(0:否 1:是)
|
||
break;
|
||
|
||
default:
|
||
throw new BusinessException();
|
||
break;
|
||
}
|
||
|
||
return UserDoctor::getExists($params);
|
||
}
|
||
|
||
/**
|
||
* 获取当前时间N分钟前接诊中的医生
|
||
* @param string|int $minute 分钟
|
||
* @param int|string $inquiry_type 订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药)
|
||
* @return array
|
||
*/
|
||
public function getBeforeCurrentTimeDoctor(string|int $minute,int|string $inquiry_type): array
|
||
{
|
||
// 获取当前时间n分钟前时间
|
||
$date = date('Y-m-d H:i:s',time() - $minute * 60);
|
||
|
||
$params = array();
|
||
$params[] = ['inquiry_type','=',$inquiry_type]; // 订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药)
|
||
$params[] = ['inquiry_mode','=',1];
|
||
$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)){
|
||
return [];
|
||
}
|
||
|
||
return $order_inquiry->toArray();
|
||
}
|
||
} |