hospital-applets-api/app/Services/PatientCaseService.php

324 lines
14 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Services;
use App\Model\DetectionProject;
use App\Model\InquiryCaseProduct;
use App\Model\OrderDetection;
use App\Model\OrderInquiry;
use App\Model\OrderInquiryCase;
use App\Model\OrderPrescription;
use App\Model\OrderPrescriptionIcd;
use App\Model\OrderPrescriptionProduct;
use App\Model\PatientFamily;
use App\Model\PatientFamilyHealth;
use App\Model\PatientFamilyPersonal;
use App\Model\User;
use Hyperf\Redis\Redis;
/**
* 患者家庭成员病例
*/
class PatientCaseService extends BaseService
{
/**
* 获取问诊订单病例详情-基础
* @return array
*/
public function getPatientFamilyInquiryCaseSimple(): array
{
$order_inquiry_id = $this->request->input('order_inquiry_id');
// 获取订单数据
$params = array();
$params['order_inquiry_id'] = $order_inquiry_id;
$order_inquiry = OrderInquiry::getOne($params);
if (empty($order_inquiry)) {
return fail();
}
// 获取病例信息
$params = array();
$params['order_inquiry_id'] = $order_inquiry_id;
$params['status'] = 1;
$order_inquiry_case = OrderInquiryCase::getOne($params);
if (empty($order_inquiry_case)) {
return fail();
}
$result = array();
$result['patient_name'] = $order_inquiry['patient_name'];
$result['patient_sex'] = $order_inquiry['patient_sex'];
$result['patient_age'] = $order_inquiry['patient_age'];
$result['disease_desc'] = $order_inquiry_case['disease_desc'];
$result['reception_time'] = $order_inquiry['reception_time']; // 接诊时间
return success($result);
}
/**
* 获取问诊订单病例详情
* @return array
*/
public function getPatientFamilyInquiryCase(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$order_inquiry_id = $this->request->input('order_inquiry_id');
// 获取订单数据
$params = array();
$params['order_inquiry_id'] = $order_inquiry_id;
$order_inquiry = OrderInquiry::getOne($params);
if (empty($order_inquiry)) {
return fail();
}
// 获取病例信息
$params = array();
$params['order_inquiry_id'] = $order_inquiry_id;
$params['status'] = 1;
$order_inquiry_case = OrderInquiryCase::getOne($params);
if (empty($order_inquiry_case)) {
return fail();
}
$order_inquiry_case = $order_inquiry_case->toArray();
// 获取患者家庭成员信息表-基本信息
$params = array();
$params['family_id'] = $order_inquiry_case['family_id'];
$patient_family = PatientFamily::getOne($params);
if (!empty($patient_family)){
$order_inquiry_case['height'] = $order_inquiry_case['height'] ?: $patient_family['height'] ?: NULL;
$order_inquiry_case['weight'] = $order_inquiry_case['weight'] ?: $patient_family['weight'] ?: NULL;
$order_inquiry_case['job_id'] = $order_inquiry_case['job_id'] ?: $patient_family['job_id'] ?: NULL;
$order_inquiry_case['job_name'] = $order_inquiry_case['job_name'] ?: $patient_family['job_name'] ?: NULL;
$order_inquiry_case['nation_name'] = $order_inquiry_case['nation_name'] ?: $patient_family['nation_name'] ?: NULL;
$order_inquiry_case['marital_status'] = $order_inquiry_case['marital_status'] ?: $patient_family['marital_status'] ?: NULL;
}
// 获取患者家庭成员信息表-健康情况
$params = array();
$params['family_id'] = $order_inquiry_case['family_id'];
$patient_family_health = PatientFamilyHealth::getOne($params);
if (!empty($patient_family_health)) {
$order_inquiry_case['diagnosis_hospital'] = $order_inquiry_case['diagnosis_hospital'] ?: $patient_family_health['diagnosis_hospital'] ?: "";
$order_inquiry_case['is_take_medicine'] = $order_inquiry_case['is_take_medicine'] ?: $patient_family_health['is_take_medicine'] ?: null;
$order_inquiry_case['drugs_name'] = $order_inquiry_case['drugs_name'] ?: $patient_family_health['drugs_name'] ?: "";
}
// 获取患者家庭成员信息表-个人情况
$params = array();
$params['family_id'] = $order_inquiry_case['family_id'];
$patient_family_personal = PatientFamilyPersonal::getOne($params);
if (!empty($patient_family_personal)) {
$order_inquiry_case['drink_wine_status'] = $order_inquiry_case['drink_wine_status'] ?: $patient_family_personal['drink_wine_status'] ?: null;
$order_inquiry_case['smoke_status'] = $order_inquiry_case['smoke_status'] ?: $patient_family_personal['smoke_status'] ?: null;
$order_inquiry_case['chemical_compound_status'] = $order_inquiry_case['chemical_compound_status'] ?: $patient_family_personal['chemical_compound_status'] ?: null;
$order_inquiry_case['chemical_compound_describe'] = $order_inquiry_case['chemical_compound_describe'] ?: $patient_family_personal['chemical_compound_describe'] ?: "";
$order_inquiry_case['is_operation'] = $order_inquiry_case['is_operation'] ?: $patient_family_personal['is_operation'] ?: null;
$order_inquiry_case['operation'] = $order_inquiry_case['operation'] ?: $patient_family_personal['operation'] ?: "";
}
// 获取用药意向
$product = [];
$fields = [
'inquiry_case_id',
'product_id',
'case_product_num',
];
$params = array();
$params['inquiry_case_id'] = $order_inquiry_case['inquiry_case_id'];
$inquiry_case_product = InquiryCaseProduct::getWithProductList($params, $fields);
if (!empty($inquiry_case_product)) {
foreach ($inquiry_case_product as &$item) {
if (!empty($item['Product'])) {
$product[] = $item['Product']['product_name'] . ' ' . $item['Product']['product_spec'] . '(' . $item['case_product_num'] . $item['Product']['packaging_unit'] . ')';
}
}
}
$order_inquiry_case['product'] = $product;
unset($inquiry_case_product);
// 复诊凭证
if (!empty($order_inquiry_case['diagnose_images'])) {
$diagnose_images = explode(',', $order_inquiry_case['diagnose_images']);
foreach ($diagnose_images as &$item) {
$item = addAliyunOssWebsite($item);
}
$order_inquiry_case['diagnose_images'] = $diagnose_images;
}
// 检测项目
$order_inquiry_case['detection_project'] = null;
if ($order_inquiry['inquiry_type'] == 5) {
// 获取检测订单
$params = array();
$params['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
$order_detection = OrderDetection::getOne($params);
if (!empty($order_detection)) {
// 获取检测项目
$params = array();
$params['detection_project_id'] = $order_detection['detection_project_id'];
$detection_project = DetectionProject::getOne($params);
if (!empty($detection_project)) {
$order_inquiry_case['detection_project']['detection_project_name'] = $detection_project['detection_project_name']; // 检测项目名称
$order_inquiry_case['detection_project']['detection_time'] = $order_detection['detection_time']; // 检测时间
$order_inquiry_case['detection_project']['detection_link'] = addAliyunOssWebsite($order_detection['detection_result_pdf']); // 检测结果链接
}
}
}
// 获取处方数据
$order_inquiry_case['order_prescription'] = null;
$params = array();
$params['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
$order_prescription = OrderPrescription::getOne($params);
if (!empty($order_prescription)){
$order_inquiry_case['order_prescription']['doctor_created_time'] = $order_prescription['doctor_created_time']; // 医生开具处方时间
$order_inquiry_case['order_prescription']['doctor_advice'] = $order_prescription['doctor_advice'];// 医嘱
// 获取处方疾病数据
$params = array();
$params['order_prescription_id'] = $order_prescription['order_prescription_id'];
$order_prescription_icds = OrderPrescriptionIcd::getList($params);
if (empty($order_prescription_icds)){
return fail();
}
$icd_name = array_column($order_prescription_icds->toArray(),"icd_name");
$order_inquiry_case['order_prescription']['icd_name'] = implode(";",$icd_name);
// 获取处方药品名称
$params = array();
$params['order_prescription_id'] = $order_prescription['order_prescription_id'];
$order_prescription_products = OrderPrescriptionProduct::getList($params);
if (empty($order_prescription_products)){
return fail();
}
$order_inquiry_case['order_prescription']["product"] = $order_prescription_products->toArray();
}
return success($order_inquiry_case);
}
/**
* 获取问诊订单病例缺少字段
* @return array
*/
public function getPatientFamilyInquiryCaseUnfilledFields(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$order_inquiry_id = $this->request->input('order_inquiry_id');
// 获取订单数据
$params = array();
$params['order_inquiry_id'] = $order_inquiry_id;
$order_inquiry = OrderInquiry::getOne($params);
if (empty($order_inquiry)) {
return fail();
}
// 获取病例信息
$params = array();
$params['order_inquiry_id'] = $order_inquiry_id;
$params['status'] = 1;
$order_inquiry_case = OrderInquiryCase::getOne($params);
if (empty($order_inquiry_case)) {
return fail();
}
// 获取患者家庭成员信息表-基本信息
$params = array();
$params['family_id'] = $order_inquiry_case['family_id'];
$patient_family = PatientFamily::getOne($params);
// 获取患者家庭成员信息表-健康情况
$params = array();
$params['family_id'] = $order_inquiry_case['family_id'];
$patient_family_health = PatientFamilyHealth::getOne($params);
// 获取患者家庭成员信息表-个人情况
$params = array();
$params['family_id'] = $order_inquiry_case['family_id'];
$patient_family_personal = PatientFamilyPersonal::getOne($params);
// 初始字段定义
$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", // 化合物描述
];
// 获取缓存
$redis = $this->container->get(Redis::class);
$redis_key = "patient_family_inquiry_case_unfilled_fields_" . $order_inquiry_id;
$redis_value = $redis->get($redis_key);
// 处理字段
$result = null;
foreach ($fields as $field){
if ($order_inquiry_case[$field] !== null){
continue;
}
if (!empty($patient_family)){
if ($patient_family[$field] !== null){
continue;
}
}
if (!empty($patient_family_health)){
if ($patient_family_health[$field] !== null){
continue;
}
}
if (!empty($patient_family_personal)){
if ($patient_family_personal[$field] !== null){
continue;
}
}
// 缓存
if (!empty($redis_value)){
if (strstr($redis_value,$field)){
continue;
}
}
$result[] = $field;
}
return success($result);
}
}