新增:获取问诊订单病例缺少字段、医生发送缺少字段至患者、患者填写缺少字段至医生

This commit is contained in:
2023-11-30 17:56:25 +08:00
parent a69ba2ca2c
commit 6cbbcd586e
5 changed files with 374 additions and 6 deletions
+242 -4
View File
@@ -2,6 +2,7 @@
namespace App\Services;
use App\Constants\HttpEnumCode;
use App\Model\DetectionProject;
use App\Model\InquiryCaseProduct;
use App\Model\OrderDetection;
@@ -14,6 +15,7 @@ use App\Model\PatientFamily;
use App\Model\PatientFamilyHealth;
use App\Model\PatientFamilyPersonal;
use App\Model\User;
use App\Model\UserDoctor;
use Hyperf\Redis\Redis;
/**
@@ -279,10 +281,14 @@ class PatientCaseService extends BaseService
"chemical_compound_describe", // 化合物描述
];
// 获取缓存
$redis = $this->container->get(Redis::class);
$redis_key = "patient_family_inquiry_case_unfilled_fields_" . $order_inquiry_id;
$redis_value = $redis->get($redis_key);
try {
// 获取缓存
$redis = $this->container->get(Redis::class);
$redis_key = "patient_family_inquiry_case_unfilled_fields_" . $order_inquiry_id;
$redis_value = $redis->get($redis_key);
}catch (\Throwable $e){
return fail();
}
// 处理字段
$result = null;
@@ -321,4 +327,236 @@ class PatientCaseService extends BaseService
return success($result);
}
/**
* 医生发送缺少字段至患者
* @return array
*/
public function sendCaseUnfilledFieldsToPatient(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
if ($user_info['user_type'] != 2){
return fail(HttpEnumCode::HTTP_ERROR,"非法请求");
}
$request_params = $this->request->all();
$order_inquiry_id = $request_params['order_inquiry_id'];
if (empty($request_params['fields'])){
return fail(HttpEnumCode::CLIENT_HTTP_ERROR,"请选择需要发送的信息");
}
// 获取订单数据
$params = array();
$params['order_inquiry_id'] = $order_inquiry_id;
$order_inquiry = OrderInquiry::getOne($params);
if (empty($order_inquiry)) {
return fail(HttpEnumCode::HTTP_ERROR,"订单数据错误");
}
// 获取医生数据
$params = array();
$params['doctor_id'] = $order_inquiry['doctor_id'];
$doctor = UserDoctor::getOne($params);
if (empty($doctor)){
return fail();
}
// 初始字段定义
$fields = [
"relation", // 与患者关系(1:本人 2:父母 3:爱人 4:子女 5:亲戚 6:其他 )
"name", // 患者名称
"sex", // 患者性别(0:未知 1:男 2:女)
"age", // 患者年龄
"height", // 身高(cm
"weight", // 体重(kg
"marital_status", // 婚姻状况(0:未婚 1:已婚 2:离异)
"disease_class_name", // 疾病名称-系统
"diagnosis_date", // 确诊日期
"disease_desc", // 病情描述(主诉)
"is_allergy_history", // 是否存在过敏史(0:否 1:是)
"allergy_history", // 过敏史描述
"is_family_history", // 是否存在家族病史(0:否 1:是)
"family_history", // 家族病史描述
"is_pregnant", // 是否备孕、妊娠、哺乳期(0:否 1:是)
"pregnant", // 备孕、妊娠、哺乳期描述
"is_taboo", // 是否服用过禁忌药物,且无相关禁忌(0:否 1:是)问诊购药时存在
"is_take_medicine", // 正在服药(0:否 1:是)
"drugs_name", // 正在服药名称
"nation_name", // 民族名称
"job_name", // 职业名称
"diagnosis_hospital", // 确诊医院
"is_operation", // 是否存在手术(0:否 1:是)
"operation", // 手术描述
"drink_wine_status", // 饮酒状态(1:从不 2:偶尔 3:经常 4:每天 5:已戒酒)
"smoke_status", // 吸烟状态(1:从不 2:偶尔 3:经常 4:每天 5:已戒烟)
"chemical_compound_status", // 化合物状态(1:从不 2:偶尔 3:经常 4:每天)
"chemical_compound_describe", // 化合物描述
];
try {
$redis = $this->container->get(Redis::class);
$redis_key = "patient_family_inquiry_case_unfilled_fields_" . $order_inquiry_id;
// 获取缓存
$redis_value = $redis->get($redis_key);
if (!empty($redis_value)){
$redis_value = explode(',',$redis_value);
}
// 患者病例字段
$case_fields = [];
foreach ($request_params['fields'] as $value){
if (!in_array($value,$fields)){
return fail(HttpEnumCode::HTTP_ERROR,"数据选择错误");
}
$case_fields[] = $value;
// 处理缓存
if (!empty($redis_value)){
if (in_array($value,$redis_value)){
continue;
}
}
$redis_value[] = $value;
}
if (empty($case_fields)){
return fail();
}
$case_fields = json_encode($case_fields,JSON_UNESCAPED_UNICODE);
// 发送im消息
$imService = new ImService();
$imService->CaseUnfilledFieldsToPatient($order_inquiry,$doctor['user_id'],$order_inquiry['user_id'],$case_fields);
// 添加缓存-逗号分割字符串
if (!empty($redis_value)){
$redis_value = implode(',',$redis_value);
$res = $redis->set($redis_key,$redis_value,3 * 24 * 60 * 60);
if (!$res){
return fail();
}
}
}catch (\Throwable $e){
return fail();
}
return success();
}
/**
* 患者填写缺少字段至医生
* @return array
*/
public function sendCaseUnfilledFieldsToDoctor(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
if ($user_info['user_type'] != 1){
return fail(HttpEnumCode::HTTP_ERROR,"非法请求");
}
$request_params = $this->request->all();
$order_inquiry_id = $request_params['order_inquiry_id'];
if (empty($request_params['fields'])){
return fail(HttpEnumCode::CLIENT_HTTP_ERROR,"请填写后发送");
}
// 获取订单数据
$params = array();
$params['order_inquiry_id'] = $order_inquiry_id;
$order_inquiry = OrderInquiry::getOne($params);
if (empty($order_inquiry)) {
return fail(HttpEnumCode::HTTP_ERROR,"订单数据错误");
}
// 获取医生数据
$params = array();
$params['doctor_id'] = $order_inquiry['doctor_id'];
$doctor = UserDoctor::getOne($params);
if (empty($doctor)){
return fail();
}
// 初始字段定义
$fields = [
"relation", // 与患者关系(1:本人 2:父母 3:爱人 4:子女 5:亲戚 6:其他 )
"name", // 患者名称
"sex", // 患者性别(0:未知 1:男 2:女)
"age", // 患者年龄
"height", // 身高(cm
"weight", // 体重(kg
"marital_status", // 婚姻状况(0:未婚 1:已婚 2:离异)
"disease_class_name", // 疾病名称-系统
"diagnosis_date", // 确诊日期
"disease_desc", // 病情描述(主诉)
"is_allergy_history", // 是否存在过敏史(0:否 1:是)
"allergy_history", // 过敏史描述
"is_family_history", // 是否存在家族病史(0:否 1:是)
"family_history", // 家族病史描述
"is_pregnant", // 是否备孕、妊娠、哺乳期(0:否 1:是)
"pregnant", // 备孕、妊娠、哺乳期描述
"is_taboo", // 是否服用过禁忌药物,且无相关禁忌(0:否 1:是)问诊购药时存在
"is_take_medicine", // 正在服药(0:否 1:是)
"drugs_name", // 正在服药名称
"nation_name", // 民族名称
"job_name", // 职业名称
"diagnosis_hospital", // 确诊医院
"is_operation", // 是否存在手术(0:否 1:是)
"operation", // 手术描述
"drink_wine_status", // 饮酒状态(1:从不 2:偶尔 3:经常 4:每天 5:已戒酒)
"smoke_status", // 吸烟状态(1:从不 2:偶尔 3:经常 4:每天 5:已戒烟)
"chemical_compound_status", // 化合物状态(1:从不 2:偶尔 3:经常 4:每天)
"chemical_compound_describe", // 化合物描述
];
try {
$redis = $this->container->get(Redis::class);
$redis_key = "patient_family_inquiry_case_unfilled_fields_" . $order_inquiry_id;
$redis_value = $redis->get($redis_key);
if (!empty($redis_value)){
$redis_value = explode(',',$redis_value);
}
// 患者病例字段
$case_fields = [];
foreach ($request_params['fields'] as $key => $value){
if (!in_array($key,$fields)){
return fail(HttpEnumCode::HTTP_ERROR,"存在非法数据");
}
$case_fields[$key] = $value;
}
$case_fields = json_encode($case_fields,JSON_UNESCAPED_UNICODE);
// 发送im消息
$imService = new ImService();
$imService->CaseUnfilledFieldsToDoctor($order_inquiry,$doctor['user_id'],$user_info['user_id'],$case_fields);
// 处理缓存
if (!empty($redis_value)){
$diff_values = array_diff($redis_value, array_keys($request_params['fields']));
if (!empty($diff_values)){
// 添加缓存-逗号分割字符串
$redis_value = implode(',',$diff_values);
$res = $redis->set($redis_key,$redis_value,3 * 24 * 60 * 60);
if (!$res){
return fail();
}
}
}else{
$redis->del($redis_key);
}
}catch (\Throwable $e){
return fail();
}
return success();
}
}