1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249 |
- <?php
- declare (strict_types=1);
- namespace app\zskk\servies;
- use app\common\library\Gm;
- use app\common\library\Handle;
- use app\zskk\model\Mpi;
- use app\zskk\model\Patient;
- use think\db\exception\DataNotFoundException;
- use think\db\exception\DbException;
- use think\db\exception\ModelNotFoundException;
- use think\Exception;
- use think\facade\Config;
- use Throwable;
- use app\common\controller\ZskkApi;
- use app\zskk\model\BiInspectReport;
- use app\zskk\model\DelBiInspectReport;
- use app\zskk\model\DelExamReport;
- use app\zskk\model\DelInspectReport;
- use app\zskk\model\DelLabData;
- use app\zskk\model\DelMedicalInformation;
- use app\zskk\model\DelPatient;
- use app\zskk\model\ExamReport;
- use app\zskk\model\HospitalPatient;
- use app\zskk\model\InspectReport;
- use app\zskk\model\LabData;
- use app\zskk\model\MedicalInformation;
- use think\facade\Db;
- class PatientServies
- {
- public $patientModel = null;
- public $commonServies = null;
- public function __construct(Patient $patientModel, CommonServies $commonServies)
- {
- // parent::__construct();
- $this->patientModel = $patientModel;
- $this->commonServies = $commonServies;
- }
- /**
- * @throws DataNotFoundException
- * @throws ModelNotFoundException
- * @throws DbException
- * @throws Exception
- */
- public function makeMappingData($params, $mpKey='0', $action='save', $type=1): array
- {
- $return = [];
- $mapping = $this->patientModel->getMapping(['MPKEY'=>$mpKey,'ACTION'=>$action,'PARAM_TYPE'=>$type]);
- $all = $this->patientModel->getAllMapping(['ACTION'=>$action,'PARAM_TYPE'=>$type]);
- $allMapping = [];
- foreach ($all as $k=>$v)
- {
- $allMapping[$v['MPKEY']][] = $v;
- }
- $mappingArr = [];
- foreach ($mapping as $v)
- {
- $childMapping = [];
- if($v['TYPE'] == 'object' || $v['TYPE'] == 'array')
- {
- $childMapping = $allMapping[$v['MKEY']] ?? [];
- }
- $child = [];
- if(!empty($childMapping))
- {
- foreach ($childMapping as $value)
- {
- $child[$value['MKEY']] = ['KEY'=>$value['KEY'],'MPKEY'=>$value['MPKEY'],'MKEY'=>$v['MKEY'],'TYPE'=>$value['TYPE'],'action'=>$v['ACTION']];
- }
- }
- $mappingArr[$v['MKEY']] = ['KEY'=>$v['KEY'],'MPKEY'=>$v['MPKEY'],'MKEY'=>$v['MKEY'],'TYPE'=>$v['TYPE'],'CHILD'=>$child,'ACTION'=>$v['ACTION']];
- }
- foreach ($params as $k=>$v)
- {
- if(is_array($v))
- {
- foreach ($v as $key=>$value)
- {
- if(is_array($value))
- {
- $returnArr = $this->makeMappingData($value,$mappingArr[$k]['MKEY'],$mappingArr[$k]['ACTION'],$type);
- $return[$mappingArr[$k]['KEY']][] = $returnArr;
- }else{
- if(!empty($mappingArr[$k]['CHILD']))
- {
- if(isset($mappingArr[$k]['CHILD'][$key]['KEY']))
- {
- $return[$mappingArr[$k]['KEY']][$mappingArr[$k]['CHILD'][$key]['KEY']] = $value;
- }
- }
- }
- }
- }else{
- if(isset($mappingArr[$k]['KEY']))
- {
- $return[$mappingArr[$k]['KEY']] = $v;
- }
- }
- }
- ksort($return);
- return $return;
- }
- public function saveMpi($mpi, $idCard,$mpiKey)
- {
- $this->patientModel->saveMpi($mpi,$idCard,$mpiKey);
- }
- public function savePatient($data,$mpi,$mpiKey,$patientCode):void
- {
- $arr = $this->makePatient($data,$mpi,$mpiKey,$patientCode);
- $this->patientModel->save($arr);
- }
- /**
- * @throws DataNotFoundException
- * @throws \think\exception\DbException
- * @throws ModelNotFoundException
- * @throws DbException
- */
- public function getMpi($idCard)
- {
- $idCard = Gm::encrypt(Config::get('gm.key'),$idCard);
-
- return $this->patientModel->getMpi($idCard);
- }
- public function makePatient($data, $mpi,$mpiKey, $patientCode): array
- {
- $arr = [];
- $arr['MPI'] = $mpi;
- $arr['MPI_KEY'] = $mpiKey;
- $arr['PATIENT_CODE'] = $patientCode;
- $arr['NAME'] = $data['NAME'] ?? '';
- $arr['INSUR_CARD_NO'] = $data['INSUR_CARD_NO'] ?? '';
- $arr['ID_CARD_CODE'] = $data['ID_CARD_CODE'] ?? '';
- $arr['ID_CARD'] = $data['ID_CARD'] ?? '';
- $arr['ID_CARDNUM'] = $data['ID_CARDNUM'] ?? '';
- $arr['GENDER'] = $data['GENDER'] ?? '';
- $arr['GENDER_CODE'] = $data['GENDER_CODE'] ?? '';
- $arr['BIRTH_DATE'] = $data['BIRTH_DATE'] ?? '';
- $arr['MARITAL_STATUS_CODE'] = $data['MARITAL_STATUS_CODE'] ?? '';
- $arr['MARITAL_STATUS'] = $data['MARITAL_STATUS'] ?? '';
- $arr['ADDRESS'] = $data['ADDRESS'] ?? '';
- $arr['ECARD_NO'] = $data['ECARD_NO'] ?? '';
- return $arr;
- }
- public function saveMedical($medical,$mpi,$patientCode):void
- {
- $arr = $this->makeMedical($medical,$mpi,$patientCode);
- $this->patientModel->saveMedical($arr);
- }
- public function makeMedical($medical,$mpi,$patientCode):array
- {
- $arr = [];
- $arr['MPI'] = $mpi;
- $arr['PATIENT_CODE'] = $patientCode;
- $arr['SERIESNUM'] = $medical['SERIESNUM'];
- $arr['CLASS_CODE'] = $medical['CLASS_CODE'];
- $arr['CLASS'] = $medical['CLASS'];
- $arr['ENCOUNTER_CARD_NO'] = $medical['ENCOUNTER_CARD_NO'];
- $arr['RECORD_CODE'] = $medical['RECORD_CODE'];
- $arr['HOS_EMPI'] = $medical['HOS_EMPI'];
- $arr['NAME'] = $medical['NAME'];
- $arr['ENCOUNTER_DATE'] = $medical['ENCOUNTER_DATE'];
- $arr['DEPTNAME'] = $medical['DEPTNAME'];
- $arr['CHIEFCOMPLAINT'] = $medical['CHIEFCOMPLAINT'];
- $arr['ORGCODE'] = $medical['ORGCODE'];
- $arr['ORGNAME'] = $medical['ORGNAME'];
- $arr['AGE'] = $medical['AGE'];
- $arr['GENDER'] = $medical['GENDER'];
- $arr['GENDER_CODE'] = $medical['GENDER_CODE'];
- return $arr;
- }
- public function saveDiagnose($diagnose, $patientCode)
- {
- $arr = [];
- foreach ($diagnose as $v)
- {
- $data = $this->makeDiagnose($v,$patientCode);
- $arr[] = $data;
- }
- $this->patientModel->saveDiagnose($arr);
- }
- public function makeDiagnose($diagnose, $patientCode):array
- {
- $data = [];
- $data['PATIENT_CODE'] = $patientCode;
- $data['DIAGNOSECODE'] = $diagnose['DIAGNOSECODE'];
- $data['DIAGNOSENAME'] = $diagnose['DIAGNOSENAME'];
- return $data;
- }
- public function saveApplication($application, $mpi, $patientCode):void
- {
- $arr = [];
- foreach ($application as $v)
- {
- $data = $this->makeApplication($v,$mpi,$patientCode);
- $arr[] = $data;
- }
- $this->patientModel->saveApplication($arr);
- }
- public function makeApplication($application, $mpi, $patientCode):array
- {
- $data = [];
- $applicationCode = Handle::makeApplicationCode($patientCode,$application['REQUESTID']);
- $data['MPI'] = $mpi;
- $data['PATIENT_CODE'] = $patientCode;
- $data['EXAM_APPLICATION_CODE'] = $applicationCode;
- $data['REQUESTID'] = $application['REQUESTID'];
- $data['NAME'] = $application['NAME'];
- $data['SERIESNUM'] = $application['SERIESNUM'];
- $data['DEVICETYPE'] = $application['DEVICETYPE'];
- $data['DEVICETYPE_CODE'] = $application['DEVICETYPE_CODE'];
- $data['EXAM_ITEMNAME'] = $application['EXAM_ITEMNAME'];
- $data['EXAM_ITEMNAME_CODE'] = $application['EXAM_ITEMNAME_CODE'];
- $data['BODYSITE_CATEG'] = $application['BODYSITE_CATEG'];
- $data['BODYSITE_CATEG_CODE'] = $application['BODYSITE_CATEG_CODE'];
- $data['BODYSITE'] = $application['BODYSITE'];
- $data['EXAM_METHOD'] = $application['EXAM_METHOD'];
- $data['ORGCODE'] = $application['ORGCODE'];
- $data['ORGNAME'] = $application['ORGNAME'];
- $data['DEPTNAME'] = $application['DEPTNAME'];
- $data['PRACTITIONERNAME'] = $application['PRACTITIONERNAME'];
- $data['REQUESTTIME'] = $application['REQUESTTIME'];
- $data['AGE'] = $application['AGE'];
- $data['GENDER'] = $application['GENDER'];
- $data['GENDER_CODE'] = $application['GENDER_CODE'];
- return $data;
- }
- public function saveOrders($orders,$mpi,$patientCode): void
- {
- $arr = [];
- $medicalOrderCode = '';
- foreach ($orders as $k=>$v)
- {
- $data = $this->makeOrders($v,$mpi,$patientCode);
- $arr[] = $data;
- }
- $this->patientModel->saveOrders($arr);
- }
- public function makeOrders($orders,$mpi,$patientCode):array
- {
- $medicalOrderCode = Handle::makeMedicalOrderCode($patientCode,$orders['ORDERID'],$orders['LAB_ITEMNAME_CODE']);
- $data = [];
- $data['MPI'] = $mpi;
- $data['PATIENT_CODE'] = $patientCode;
- $data['MEDICAL_ORDER_CODE'] = $medicalOrderCode;
- $data['ORDERID'] = $orders['ORDERID'];
- $data['NAME'] = $orders['NAME'];
- $data['SERIESNUM'] = $orders['SERIESNUM'];
- $data['LAB_ITEMNAME'] = $orders['LAB_ITEMNAME'];
- $data['LAB_ITEMNAME_CODE'] = $orders['LAB_ITEMNAME_CODE'];
- $data['SPECIMEN_TYPE'] = $orders['SPECIMEN_TYPE'];
- $data['SPECIMEN_NUM'] = $orders['SPECIMEN_NUM'];
- $data['SPECIMEN_STATUS'] = $orders['SPECIMEN_STATUS'];
- $data['SPECIMEN_COLLETIME'] = $orders['SPECIMEN_COLLETIME'];
- $data['SPECIMEN_RECEITIME'] = $orders['SPECIMEN_RECEITIME'];
- $data['ORGCODE'] = $orders['ORGCODE'];
- $data['ORGNAME'] = $orders['ORGNAME'];
- $data['DEPTNAME'] = $orders['DEPTNAME'];
- $data['PRACTITIONERNAME'] = $orders['PRACTITIONERNAME'];
- $data['REQUESTTIME'] = $orders['REQUESTTIME'];
- $data['REPORTSTATUS'] = $orders['REPORTSTATUS'];
- $data['REPORTSTATUS_CODE'] = $orders['REPORTSTATUS_CODE'];
- $data['AGE'] = $orders['AGE'];
- $data['GENDER'] = $orders['GENDER'];
- $data['GENDER_CODE'] = $orders['GENDER_CODE'];
- $data['TYPE'] = $orders['TYPE'];
- return $data;
- }
- public function saveExamReport($exam,$mpi,$patientCode,$exam_code = false): void
- {
- $arr = [];
- foreach ($exam as $v)
- {
- $data = $this->makeExamReport($v,$mpi,$patientCode,$exam_code);
- $data['IMAGES'] = $this->makeUrl($data['IMAGES']);
- $arr[] = $data;
- }
- $this->patientModel->saveExamReport($arr);
- }
- public function makeExamReport($exam,$mpi,$patientCode,$exam_code):array
- {
- $examReportCode = Handle::makeExamReportCode($patientCode,$exam['REPORTID']);
- $applicationCode = Handle::makeApplicationCode($patientCode,$exam['EXAM_REQUESTID']);
- $data = [];
- $data['MPI'] = $mpi;
- $data['PATIENT_CODE'] = $patientCode;
- $data['EXAM_APPLICATION_CODE'] = $applicationCode;
- $data['EXAM_REPORT_CODE'] = $examReportCode;
- $data['NAME'] = $exam['NAME'];
- $data['SERIESNUM'] = $exam['SERIESNUM'];
- $data['EXAM_REQUESTID'] = $exam['EXAM_REQUESTID'];
- $data['REPORTID'] = $exam['REPORTID'];
- $data['EXAM_ITEMNAME'] = $exam['EXAM_ITEMNAME'];
- $data['BODYSITE_CATEG'] = $exam['BODYSITE_CATEG'];
- $data['BODYSITE_CATEG_CODE'] = $exam['BODYSITE_CATEG_CODE'];
- $data['BODYSITE'] = $exam['BODYSITE'];
- $data['OBSERVATIONS_COMMENT'] = $exam['OBSERVATIONS_COMMENT'];
- $data['OBSERVATIONS_RESULT'] = $exam['OBSERVATIONS_RESULT'];
- $data['IMAGES'] = $exam['IMAGES'];
- $data['DICOM_INDEXID'] = $exam['DICOM_INDEXID'];
- $data['ORGCODE'] = $exam['ORGCODE'];
- $data['ORGNAME'] = $exam['ORGNAME'];
- $data['DEPTNAME'] = $exam['DEPTNAME'];
- $data['PRACTITIONERNAME'] = $exam['PRACTITIONERNAME'];
- $data['AUDITNAME'] = $exam['AUDITNAME'];
- $data['REPORTTIME'] = $exam['REPORTTIME'];
- $data['REPORTSTATUS'] = $exam['REPORTSTATUS'];
- $data['GENDER'] = $exam['GENDER'];
- $data['GENDER_CODE'] = $exam['GENDER_CODE'];
- $data['AGE'] = $exam['AGE'];
- $data['STUDYTIME'] = $exam['STUDYTIME'];
- // $data['EXAM_ITEMNAME_CODE'] = $exam_code;
- return $data;
- }
- public function saveInspectReport($inspect, $mpi, $patientCode): void
- {
- $arr = [];
- $labArr = [];
- $labArrOrganism = [];
- foreach ($inspect as $v) {
- $inspectReportCode = Handle::makeInspectReportCode($patientCode, $v['REPORTID']);
- $data = $this->makeInspect($v,$mpi,$patientCode,$inspectReportCode);
- $arr[] = $data;
- foreach ($v['INSPECT_REPORT_ITEMS'] as $value)
- {
- // $lab = $this->makeLab($value,$inspectReportCode);
- $lab = $this->makeLabOrganism($value,$inspectReportCode);
- $labArr[] = $lab;
- }
- // if($v['type'] == 1)
- // {
- // // 正常检验
- // }else{
- // // 微生物检验
- // foreach ($v['INSPECT_REPORT_ITEMS'] as $value)
- // {
- // $lab2 = $this->makeLabOrganism($value,$inspectReportCode);
- // $labArrOrganism[] = $lab2;
- // }
- // }
- }
- $this->patientModel->saveInspectReport($arr);
- if(!empty($labArr)) {
- $this->patientModel->saveLabData($labArr);
- }
- // if(!empty($labArrOrganism))
- // {
- // $this->patientModel->saveLabDataOrganism($labArrOrganism);
- // }
- }
- public function makeInspect($inspect,$mpi,$patientCode,$inspectReportCode)
- {
- $data = [];
-
- $medicalOrderCode = Handle::makeMedicalOrderCode($patientCode,$inspect['EXAM_REQUESTID'],$inspect['LAB_ITEMNAME_CODE']);
- $data['MPI'] = $mpi;
- $data['PATIENT_CODE'] = $patientCode;
- $data['MEDICAL_ORDER_CODE'] = $medicalOrderCode;
- $data['INSPECT_REPORT_CODE'] = $inspectReportCode;
- $data['NAME'] = $inspect['NAME'];
- $data['SERIESNUM'] = $inspect['SERIESNUM'];
- $data['EXAM_REQUESTID'] = $inspect['EXAM_REQUESTID'];
- $data['REPORTID'] = $inspect['REPORTID'];
- $data['LAB_ITEMNAME'] = $inspect['LAB_ITEMNAME'];
- $data['LAB_ITEMNAME_CODE'] = $inspect['LAB_ITEMNAME_CODE'];
- $data['LAB_ITEMNAME_NUMBER'] = $inspect['LAB_ITEMNAME_NUMBER'];
- $data['LAB_HR_STATUS'] = $inspect['LAB_HR_STATUS'];
- $data['LAB_HR_ITEMNAME'] = $inspect['LAB_HR_ITEMNAME'];
- $data['LAB_HR_ITEMNAME_CODE'] = $inspect['LAB_HR_ITEMNAME_CODE'];
- $data['SPECIMEN_TYPE'] = $inspect['SPECIMEN_TYPE'];
- $data['ORGNAME'] = $inspect['ORGNAME'];
- $data['ORGCODE'] = $inspect['ORGCODE'];
- $data['PRACTITIONERNAME'] = $inspect['PRACTITIONERNAME'];
- $data['DEPTNAME'] = $inspect['DEPTNAME'];
- $data['REPORTTIME'] = $inspect['REPORTTIME'];
- $data['AUDITNAME'] = $inspect['AUDITNAME'];
- $data['REPORTSTATUS'] = $inspect['REPORTSTATUS'];
- $data['GENDER'] = $inspect['GENDER'];
- $data['GENDER_CODE'] = $inspect['GENDER_CODE'];
- $data['AGE'] = $inspect['AGE'];
- $data['TYPE'] = $inspect['TYPE'];
- return $data;
- }
- public function saveHospitalPatient($mpiKey, $mpi, $patientCode, $patientData, $medical, $diagnoses, $orders, $application) {
- $data = $this->makeHospitalPatientData($mpiKey, $mpi, $patientCode, $patientData, $medical, $diagnoses, $orders, $application);
- $model = new HospitalPatient();
- $model->save($data);
- }
- private function makeHospitalPatientData($mpiKey, $mpi, $patientCode, $patientData, $medical, $diagnoses, $orders, $applications) {
-
- $data = [];
- $patient = $this->makePatient($patientData,$mpi, $mpiKey,$patientCode);
- $medical = $this->makeMedical($medical,$mpiKey,$patientCode);
- $diagnose = $this->makeDiagnoseNameAndCodes($diagnoses);
- $order = $this->makeOrderNameAndCodes($orders);
- $application = $this->makeApplicationsNameAndCodes($applications);
- $data['MPI_KEY'] = $mpiKey;
- $data['PATIENT_CODE'] = $patient['PATIENT_CODE'];
- $data['ORGNAME'] = $medical['ORGNAME'];
- $data['NAME'] = $patient['NAME'];
- $data['GENDER'] = $patient['GENDER'];
- $data['AGE'] = $medical['AGE'];
- $data['ID_CARDNUM'] = $patient['ID_CARDNUM'];
- $data['MPI'] = $mpi;
- $data['ENCOUNTER_DATE'] = $medical['ENCOUNTER_DATE'];
- $data['CHIEFCOMPLAINT'] = $medical['CHIEFCOMPLAINT'];
- $data['DIAGNOSENAME'] = $diagnose['DIAGNOSENAME'];
- $data['LAB_ITEMNAME'] = $order['LAB_ITEMNAME'];
- $data['EXAM_ITEMNAME'] = $application['EXAM_ITEMNAME'];
- $data['INSUR_CARD_NO'] = $patient['INSUR_CARD_NO'];
- $data['ID_CARD_CODE'] = $patient['ID_CARD_CODE'];
- $data['ID_CARD'] = $patient['ID_CARD'];
- $data['GENDER_CODE'] = $patient['GENDER_CODE'];
- $data['BIRTH_DATE'] = $patient['BIRTH_DATE'];
- $data['MARITAL_STATUS_CODE'] = $patient['MARITAL_STATUS_CODE'];
- $data['MARITAL_STATUS'] = $patient['MARITAL_STATUS'];
- $data['ADDRESS'] = $patient['ADDRESS'];
- $data['ECARD_NO'] = $patient['ECARD_NO'];
- $data['SERIESNUM'] = $medical['SERIESNUM'];
- $data['CLASS_CODE'] = $medical['CLASS_CODE'];
- $data['CLASS'] = $medical['CLASS'];
- $data['ENCOUNTER_CARD_NO'] = $medical['ENCOUNTER_CARD_NO'];
- $data['RECORD_CODE'] = $medical['RECORD_CODE'];
- $data['HOS_EMPI'] = $medical['HOS_EMPI'];
- $data['DEPTNAME'] = $medical['DEPTNAME'];
- $data['DIAGNOSECODE'] = $diagnose['DIAGNOSECODE'];
- $data['LAB_ITEMNAME_CODE'] = $order['LAB_ITEMNAME_CODE'];
- $data['EXAM_ITEMNAME_CODE'] = $application['EXAM_ITEMNAME_CODE'];
- $data['ORGCODE'] = $medical['ORGCODE'];
- return $data;
- }
- public function makeUploadHospitalPatient($patientCode): array
- {
- $where = ['PATIENT_CODE'=>$patientCode];
- $patient = $this->patientModel->getPatient($where);
- if(empty($patient))
- {
- $where['MPI_KEY'] = '';
- return $where;
- }
- $medical = $this->patientModel->getMedical($patientCode);
- $exam = $this->patientModel->getExam($patientCode);
- $inspect = $this->patientModel->getInspect($patientCode);
- $data['PATIENT_CODE'] = $patient['PATIENT_CODE'];
- $data['MPI_KEY'] = $patient['MPI_KEY'];
- $data['NAME'] = $patient['NAME'];
- $data['GENDER'] = $patient['GENDER'];
- $data['ORGNAME'] = $medical['ORGNAME'];
- $data['AGE'] = $medical['AGE'];
- $age_last = substr( $data['AGE'], -1);
- $age_num = substr( $data['AGE'], 0,-1);
- $last = match ($age_last) {
- 'Y' => '365',
- 'M' => '30',
- 'W' => '7',
- 'D' => '1',
- default => $age_last,
- };
- $data['AGE_DAY'] = $last*$age_num;
- $data['ID_CARDNUM'] = $patient['ID_CARDNUM'];
- $data['MPI'] = $patient['MPI'];
- $data['ENCOUNTER_DATE'] = $medical['ENCOUNTER_DATE'];
- $data['CHIEFCOMPLAINT'] = $medical['CHIEFCOMPLAINT'];
- $data['DIAGNOSENAME'] = $medical['DIAGNOSENAME'];
- if(!empty($inspect))
- {
- $code = [];
- $code_name = [];
- foreach ($inspect as $v)
- {
- if(!empty($v['LAB_HR_ITEMNAME_CODE']))
- {
- $code[] = $v['LAB_HR_ITEMNAME_CODE'];
- $code_name[] = $v['LAB_HR_ITEMNAME'];
- }else{
- // $inspectItem = $this->patientModel->getLab($v['INSPECT_REPORT_CODE']);
- // foreach ($inspectItem as $value)
- // {
- // if(!empty($value['LAB_HR_ITEMDETAILNAME_CODE']))
- // {
- // $code[] = $value['LAB_HR_ITEMDETAILNAME_CODE'];
- // $code_name[] = $value['LAB_HR_ITEMDETAILNAME'];
- // }
- // }
- }
- }
- $data['LAB_ITEMNAME'] = implode(',',$code_name); //检验项目
- $data['LAB_ITEMNAME_CODE'] = implode(',',$code);
- }
- if(!empty($exam))
- {
- $item_exam = [];
- $item_exam_code = [];
- foreach ($exam as $k=>$v)
- {
- $item_exam[] = $v['HR_ITEMNAME'];
- $item_exam_code[] = $v['HR_ITEMNAME_CODE'];
- }
- $data['EXAM_ITEMNAME'] = implode(',',$item_exam); //检查项目
- $data['EXAM_ITEMNAME_CODE'] = implode(',',$item_exam_code); //检查项目
- }
- $data['ID_CARD_CODE'] = $patient['ID_CARD_CODE'];
- $data['ID_CARD'] = $patient['ID_CARD'];
- $data['GENDER_CODE'] = $patient['GENDER_CODE'];
- $data['BIRTH_DATE'] = $patient['BIRTH_DATE'];
- $data['SERIESNUM'] = $medical['SERIESNUM'];
- $data['CLASS_CODE'] = $medical['CLASS_CODE'];
- $data['CLASS'] = $medical['CLASS'];
- $data['ENCOUNTER_CARD_NO'] = $medical['ENCOUNTER_CARD_NO'];
- $data['HOS_EMPI'] = $medical['HOS_EMPI'];
- $data['DEPTNAME'] = $medical['DEPTNAME'];
- $data['DIAGNOSECODE'] = $medical['DIAGNOSECODE'];
- $data['ORGCODE'] = $medical['ORGCODE'];
- // todo
- $data['create_time'] = $medical['ENCOUNTER_DATE'];
- return $data;
- }
- public function saveUploadHospitalPatient($patientCode)
- {
- $data = $this->makeUploadHospitalPatient($patientCode);
- $this->patientModel->HospitalPatient($data);
- }
- private function makeDiagnoseNameAndCodes($diagnoses) {
- $DIAGNOSECODES = array_map(function($diagnose) {
- return $diagnose['DIAGNOSECODE'];
- }, $diagnoses);
-
- $DIAGNOSENAMES = array_map(function($diagnose) {
- return $diagnose['DIAGNOSENAME'];
- }, $diagnoses);
- return [
- 'DIAGNOSECODE' => implode(',', $DIAGNOSECODES),
- 'DIAGNOSENAME' => implode(',', $DIAGNOSENAMES)
- ];
- }
- private function makeOrderNameAndCodes($orders) {
- $LAB_ITEMNAME_CODES = array_map(function($order) {
- return $order['LAB_ITEMNAME_CODE'];
- }, $orders);
- $LAB_ITEMNAMES = array_map(function($order) {
- return $order['LAB_ITEMNAME'];
- }, $orders);
- return [
- 'LAB_ITEMNAME_CODE' => implode(',', $LAB_ITEMNAME_CODES),
- 'LAB_ITEMNAME' => implode(',', $LAB_ITEMNAMES)
- ];
- }
- private function makeApplicationsNameAndCodes($applications) {
-
- $EXAM_ITEMNAME_CODES = array_map(function($application) {
- return $application['EXAM_ITEMNAME_CODE'];
- }, $applications);
- $EXAM_ITEMNAMES = array_map(function($application) {
- return $application['EXAM_ITEMNAME'];
- }, $applications);
- return [
- 'EXAM_ITEMNAME_CODE' => implode(',', $EXAM_ITEMNAME_CODES),
- 'EXAM_ITEMNAME' => implode(',', $EXAM_ITEMNAMES)
- ];
- }
- public function makeLab($lab,$inspectReportCode)
- {
- $labArr = [];
- $labArr['INSPECT_REPORT_CODE'] = $inspectReportCode;
- $labArr['INSPECT_REPORT_ITEM_CODE'] = Handle::makeInspectReportItemCode($inspectReportCode,$lab['LAB_ITEMDETAILNAME_CODE']);
- $labArr['EXAM_REQUESTID'] = $lab['EXAM_REQUESTID'];
- $labArr['REPORTID'] = $lab['REPORTID'];
- $labArr['ORGCODE'] = $lab['ORGCODE'];
- $labArr['LAB_ITEMDETAILNAME'] = $lab['LAB_ITEMDETAILNAME'];
- $labArr['LAB_ITEMDETAILNAME_NUMBER'] = $lab['LAB_ITEMDETAILNAME_NUMBER'];
- $labArr['LAB_ITEMDETAILNAME_CODE'] = $lab['LAB_ITEMDETAILNAME_CODE'];
- $labArr['LAB_ITEMDETAILVALUE'] = $lab['LAB_ITEMDETAILVALUE'];
- $labArr['LAB_ITEMDETAILSPEC'] = $lab['LAB_ITEMDETAILSPEC'];
- $labArr['LAB_ITEMDETAILINTERPRETATION'] = $lab['LAB_ITEMDETAILINTERPRETATION'];
- $labArr['LAB_ITEMDETAILRANGE'] = $lab['LAB_ITEMDETAILRANGE'];
- $labArr['CRITICAL_RANGE'] = $lab['CRITICAL_RANGE'];
- $labArr['LAB_HR_ITEMDETAIL_STATUS'] = $lab['LAB_HR_ITEMDETAIL_STATUS'];
- $labArr['LAB_HR_ITEMDETAILNAME'] = $lab['LAB_HR_ITEMDETAILNAME'];
- $labArr['LAB_HR_ITEMDETAILNAME_CODE'] = $lab['LAB_HR_ITEMDETAILNAME_CODE'];
- return $labArr;
- }
- public function makeLabOrganism($lab,$inspectReportCode)
- {
- $data['INSPECT_REPORT_CODE'] = $inspectReportCode;
- $data['INSPECT_REPORT_ITEM_CODE'] = Handle::makeInspectReportItemCode($inspectReportCode,$lab['LAB_ITEMDETAILNAME_CODE']);
- $data['EXAM_REQUESTID'] = $lab['EXAM_REQUESTID'] ?? '';
- $data['REPORTID'] = $lab['REPORTID'] ?? '';
- $data['ORGCODE'] = $lab['ORGCODE'] ?? '';
- $data['LAB_ITEMDETAILNAME'] = $lab['LAB_ITEMDETAILNAME'] ?? '';
- $data['LAB_ITEMDETAILNAME_EN'] = $lab['LAB_ITEMDETAILNAME_EN'] ?? '';
- $data['LAB_ITEMDETAILNAME_CODE'] = $lab['LAB_ITEMDETAILNAME_CODE'] ?? '';
- $data['LAB_ITEMDETAILNAME_NUMBER'] = $lab['LAB_ITEMDETAILNAME_NUMBER'] ?? '';
- $data['LAB_ITEMDETAILVALUE'] = $lab['LAB_ITEMDETAILVALUE'] ?? '';
- $data['LAB_ITEMDETAILSPEC'] = $lab['LAB_ITEMDETAILSPEC'] ?? '';
- $data['LAB_ITEMDETAILINTERPRETATION'] = $lab['LAB_ITEMDETAILINTERPRETATION'] ?? '';
- $data['LAB_ITEMDETAILINTERPRETATION_BIA'] = $lab['LAB_ITEMDETAILINTERPRETATION_BIA'] ?? '';
- $data['LAB_ITEMDETAILRANGE'] = $lab['LAB_ITEMDETAILRANGE'] ?? '';
- $data['CRITICAL_RANGE'] = $lab['CRITICAL_RANGE'] ?? '';
- $data['LAB_HR_ITEMDETAIL_STATUS'] = $lab['LAB_HR_ITEMDETAIL_STATUS'] ?? '';
- $data['LAB_HR_ITEMDETAILNAME'] = $lab['LAB_HR_ITEMDETAILNAME'] ?? '';
- $data['LAB_HR_ITEMDETAILNAME_CODE'] = $lab['LAB_HR_ITEMDETAILNAME_CODE'] ?? '';
- $data['LAB_METHOD'] = $lab['LAB_METHOD'] ?? '';
- $data['KB'] = $lab['KB'] ?? '';
- $data['MIC'] = $lab['MIC'] ?? '';
- $data['LAB_ITEMDETAILINTERPRE'] = $lab['LAB_ITEMDETAILINTERPRE'] ?? '';
- return $data;
- }
- // /**
- // * @throws ModelNotFoundException
- // * @throws DbException
- // * @throws DataNotFoundException
- // */
- // public function getPatient($where): array|string
- // {
- // $patient = $this->patientModel->getPatient($where);
- // if(empty($patient))
- // {
- // return '无法找到患者信息';
- // }
- // $medical = $this->patientModel->getMedical($patient['PATIENT_CODE']);
- // $mpi = $this->patientModel->getMpiByKey($patient['MPI']);
- // $diagnoses = $this->patientModel->getDiagnoses($patient['PATIENT_CODE']);
- // $application = $this->patientModel->getApplication($patient['PATIENT_CODE']);
- // $orders = $this->patientModel->getOrders($patient['PATIENT_CODE']);
- // $exam = $this->patientModel->getExam($patient['PATIENT_CODE']);
- // $app_data = [];
- // foreach ($application as $key=>$value)
- // {
- // $app_data[$value['EXAM_APPLICATION_CODE']] = $value['DEVICETYPE_CODE'];
- // }
- // foreach ($exam as $kkk=>$vvv)
- // {
- // $exam[$kkk]['DEVICETYPE_CODE'] = $app_data[$vvv['EXAM_APPLICATION_CODE']] ?? '';
- // }
- // $inspect = $this->patientModel->getInspect($patient['PATIENT_CODE']);
- // foreach ($inspect as $kk=>$vv)
- // {
- // $lab = $this->patientModel->getLab($vv['INSPECT_REPORT_CODE']);
- // $inspect[$kk]['INSPECT_REPORT_ITEMS'] = $lab;
- // }
- // unset($patient['ID']);
- // unset($patient['PATIENT_CODE']);
- // unset($patient['MPI']);
- // $patient['MPI'] = $mpi;
- // unset($patient['create_time']);
- // unset($patient['update_time']);
- // return [
- // 'PATIENT'=>$patient,
- // 'MEDICAL_INFORMATION'=>$medical,
- // 'DIAGNOSES'=>$diagnoses,
- // 'EXAM_APPLICATIONS'=>$application,
- // 'MEDICAL_ORDERS'=>$orders,
- // 'EXAM_REPORTS'=>$exam,
- // 'INSPECT_REPORTS'=>$inspect
- // ];
- // }
- /**
- * @throws ModelNotFoundException
- * @throws DbException
- * @throws DataNotFoundException
- */
- public function getPatientSign($where,$medicalWhere,$RESULT ): bool|array
- {
- $patient = $this->patientModel->getPatient($where);
- if(empty($patient))
- {
- return false;
- }
- $patient = $patient->toArray();
- $medical = $this->patientModel->getMedical($patient['PATIENT_CODE'],$medicalWhere);
- $medical = empty($medical) ? $medical : $medical->toArray();
- if(empty($medical))
- {
- return false;
- }
- $exam = $this->patientModel->getExam($patient['PATIENT_CODE'],['RECOG_STATUS'=>'*']);
- if(!empty($exam) && $RESULT == 1)
- {
- return $exam;
- }
- $inspect = $this->patientModel->getInspect($patient['PATIENT_CODE']);
- unset($patient['PATIENT_CODE']);
- $inspectData = [];
- $return = false;
- foreach ($inspect as $k=>$v)
- {
- $RECOG = 0;
- if($v['RECOG_STATUS'] == '*' && $RESULT == 1)
- {
- $RECOG = 1;
- $return = true;
- }
- $lab = $this->patientModel->getLab($v['INSPECT_REPORT_CODE']);
- if(!empty($lab))
- {
- foreach ($lab as $key=>$value)
- {
- if($value['RECOG_STATUS'] == '*')
- {
- $RECOG = 1;
- }
- }
- }
- if($RECOG == 1)
- {
- $return = true;
- $v['LAB_DATA'] = $lab;
- $inspectData[] = $v;
- }
- }
- $data = [
- 'PATIENT'=>$patient,
- 'MEDICAL_INFORMATION'=>$medical,
- 'EXAM_REPORTS'=>$exam,
- 'INSPECT_REPORTS'=>$inspectData
- ];
- if($RESULT == 1)
- {
- return $return;
- }else{
- return $data;
- }
- }
- /**
- * @throws ModelNotFoundException
- * @throws DbException
- * @throws DataNotFoundException
- */
- public function getPatient($where,$medicalWhere = []): array|string
- {
- $patient = $this->patientModel->getPatient($where);
- if(empty($patient))
- {
- return '无法找到患者信息';
- }
- $patient = $patient->toArray();
- $medical = $this->patientModel->getMedical($patient['PATIENT_CODE'],$medicalWhere);
- $medical = empty($medical) ? $medical : $medical->toArray();
- $exam = $this->patientModel->getExam($patient['PATIENT_CODE']);
- $inspect = $this->patientModel->getInspect($patient['PATIENT_CODE']);
- unset($patient['PATIENT_CODE']);
- foreach ($inspect as $k=>$v)
- {
- $lab = $this->patientModel->getLab($v['INSPECT_REPORT_CODE']);
- $inspect[$k]['INSPECT_REPORT_ITEMS'] = $lab;
- unset($inspect[$k]['INSPECT_REPORT_CODE']);
- }
- $data = [
- 'PATIENT'=>$patient,
- 'MEDICAL_INFORMATION'=>$medical,
- 'EXAM_REPORTS'=>$exam,
- 'INSPECT_REPORTS'=>$inspect
- ];
- return $data;
- }
- public function updateMiddleStatus($id, $update): void
- {
- $this->patientModel->updateMiddleStatus($id, $update);
- }
- public function checkPostExamReport($params): array {
- $PATIENT = $this->commonServies->handlePATIENT($params['PATIENT'], $params['MEDICAL_INFORMATION']);
- $MEDICAL_INFORMATION = $this->commonServies->handleMEDICAL_INFORMATION($params['MEDICAL_INFORMATION'], $PATIENT);
- $EXAM = $this->commonServies->handleEXAM($params['EXAM_REPORTS'], $MEDICAL_INFORMATION);
- // $EXAM_APPLICATIONS = $EXAM['EXAM_APPLICATIONS'];
- $EXAM_REPORTS = $EXAM['EXAM_REPORTS'];
- foreach ($EXAM_REPORTS as &$v)
- {
- if(!empty($v['REPORT']))
- {
- $v['REPORT'] = $this->makeUrl($v['REPORT']);
- }
- }
- return [
- "PATIENT" => $PATIENT,
- "MEDICAL_INFORMATION" => $MEDICAL_INFORMATION,
- // "EXAM_APPLICATIONS" => $EXAM_APPLICATIONS,
- "EXAM_REPORTS" => $EXAM_REPORTS,
- ];
- }
- public function checkPostLisReport($params): array {
- $PATIENT = $this->commonServies->handlePATIENT($params['PATIENT'], $params['MEDICAL_INFORMATION']);
- $MEDICAL_INFORMATION = $this->commonServies->handleMEDICAL_INFORMATION($params['MEDICAL_INFORMATION'], $PATIENT);
- $reportModel = $this->commonServies->handleINSPECT_REPORTS($params, $MEDICAL_INFORMATION);
- $INSPECT_REPORTS = $reportModel['INSPECT_REPORTS'];
- $INSPECT_REPORT_ITEMS = $reportModel['INSPECT_REPORT_ITEMS'];
- foreach ($INSPECT_REPORTS as &$v)
- {
- if(!empty($v['REPORT']))
- {
- $v['REPORT'] = $this->makeUrl($v['REPORT']);
- }
- }
- return [
- "PATIENT" => $PATIENT,
- "MEDICAL_INFORMATION" => $MEDICAL_INFORMATION,
- "INSPECT_REPORTS" => $INSPECT_REPORTS,
- "INSPECT_REPORT_ITEMS" => $INSPECT_REPORT_ITEMS,
- ];
- }
-
- /*
- * 上传检查数据
- */
- public function postExamInfo($params): string
- {
- // try {
- $check = $this->checkPostExamReport($params);
- $this->handlePatient($check['PATIENT']);
- $MEDICAL_INFORMATION = $check['MEDICAL_INFORMATION'];
- $information = $this->patientModel->getMedical($MEDICAL_INFORMATION['PATIENT_CODE'],[],'*');
- if(!empty($information))
- {
- $this->patientModel->saveRepeatInformation($information);
- $this->patientModel->delOldInformation(['PATIENT_CODE'=>$information['PATIENT_CODE']]);
- }
- $MEDICAL_INFORMATION_INSERT = $MEDICAL_INFORMATION;
- $MEDICAL_INFORMATION_INSERT['create_time'] = $check['EXAM_REPORTS'][0]['create_time'];
- $this->patientModel->saveMedical($MEDICAL_INFORMATION_INSERT);
- $EXAM_REPORTS = $check['EXAM_REPORTS'];
- $this->saveExamData($EXAM_REPORTS);
- $this->saveUploadHospitalPatient($MEDICAL_INFORMATION['PATIENT_CODE']);
- return 'success';
- // }catch (\Exception $e)
- // {
- // return $e->getMessage();
- // }
- }
- public function postExamReport($params): string
- {
- $EXAM_REPORTS = $this->makeExamData($params['EXAM_REPORTS']);
- $report = $this->patientModel->getExamReport(['EXAM_REPORT_CODE'=>$EXAM_REPORTS['EXAM_REPORT_CODE']],'*');
- $report->save($EXAM_REPORTS);
- return 'success';
- }
- public function makeExamData($report)
- {
- $RESULT_STATUS = $this->commonServies->getRESULT_STATUSByCode($report['RESULT_STATUS_CODE']);
- $report['RESULT_STATUS'] = $RESULT_STATUS;
- return $report;
- }
- public function saveExamData($EXAM_REPORTS)
- {
- $EXAM_REPORTS_INSERT = [];
- foreach ($EXAM_REPORTS as $k=>$v)
- {
- $report = $this->patientModel->getExamReport(['EXAM_REPORT_CODE'=>$v['EXAM_REPORT_CODE']],'*');
- if(!empty($report))
- {
- $this->patientModel->saveRepeatReport($report);
- $this->patientModel->delOldReport(['EXAM_REPORT_CODE'=>$v['EXAM_REPORT_CODE']]);
- }
- $EXAM_REPORTS_INSERT[] = $v;
- }
- $this->patientModel->saveExamReport($EXAM_REPORTS_INSERT);
- }
- public function makeUrl($base64_string)
- {
- if(empty($base64_string))
- {
- return '';
- }
- // 将Base64字符串分割成数据和文件类型
- list($type, $data) = explode(';', $base64_string);
- list(,$hz) = explode('/',$type);
- list(, $data) = explode(',', $data);
- // 将Base64解码成二进制数据
- $decodedData = base64_decode($data);
- $filePath = $_SERVER['DOCUMENT_ROOT'].'/report/'.time().rand(0,9999).'.'.$hz; // 本地文件路径
- $savePath = $_SERVER['HTTP_HOST'].'/report/'.time().rand(0,9999).'.'.$hz; // 本地文件路径
- // 将数据写入到文件
- file_put_contents($filePath, $decodedData);
- return $savePath;
- }
- /*
- * 删除检验数据
- */
- public function delLabReport($params,$orgCode)
- {
- $INSPECT_REPORT = $this->checkDelLibReport($params,$orgCode);
- $this->doneDelLibReport($INSPECT_REPORT);
- }
- /*
- * 删除检查数据
- */
- public function delExamReport($params,$orgCode)
- {
- $EXAM_REPORT = $this->checkDelExamReport($params,$orgCode);
- $this->doneDelExamReport($EXAM_REPORT);
- }
- public function checkDelLibReport($params,$orgCode) {
- $REPORTID = $params['REPORTID'];
- $ID_CARDNUM = $params['ID_CARDNUM'];
- return $this->getINSPECT_REPORT($REPORTID, $ID_CARDNUM,$orgCode);
- }
- public function checkDelExamReport($params,$orgCode) {
- $REQUESTID = $params['REQUESTID'];
- $ID_CARDNUM = $params['ID_CARDNUM'];
- return $this->getEXAM_REPORT($REQUESTID, $ID_CARDNUM,$orgCode);
- }
- public function getEXAM_REPORT($REQUESTID, $ID_CARDNUM,$orgCode) {
- $mpiModel = new Mpi();
- $mpiData = $mpiModel
- ->where('ID_CARDNUM', Gm::encrypt(Config::get('gm.key'), $ID_CARDNUM))
- ->find();
- $model = new ExamReport();
- $report = $model
- ->where('REQUESTID', $REQUESTID)
- ->where('ORGCODE', $orgCode)
- ->where('MPI', $mpiData['MPI'])
- ->find();
- if(!$report) {
- // todo 未找到检查报告异常抛出
- }
- return $report;
- }
- public function getINSPECT_REPORT($REPORTID, $ID_CARDNUM,$orgCode) {
- $mpiModel = new Mpi();
- $mpiData = $mpiModel
- ->where('ID_CARDNUM', Gm::encrypt(Config::get('gm.key'), $ID_CARDNUM))
- ->find();
- // todo 根据报告单号和身份证号获取检验报告标识
- $model = new InspectReport();
- $report = $model
- ->where('REPORTID', $REPORTID)
- ->where('ORGCODE', $orgCode)
- ->where('MPI', $mpiData['MPI'])
- ->find();
- if(!$report) {
- // todo 未找到检验报告异常抛出
- }
- return $report;
- }
- public function doneDelLibReport($INSPECT_REPORT) {
- Db::startTrans();
- try {
- $newModel = new DelInspectReport();
- $this->_delModelAndCreateNewModel($INSPECT_REPORT, $newModel);
- $this->doneDelLabData($INSPECT_REPORT['INSPECT_REPORT_CODE']);
- $this->doneDelBiInspectReport($INSPECT_REPORT['INSPECT_REPORT_CODE']);
- $this->doneDelMedicalInformation($INSPECT_REPORT['PATIENT_CODE']);
- $this->doneUpdateHrData($INSPECT_REPORT['PATIENT_CODE']);
- $this->doneUpdateCache($INSPECT_REPORT['PATIENT_CODE']);
- Db::commit();
- } catch(Exception $e) {
- Db::rollback();
- }
- }
- public function doneDelLabData($INSPECT_REPORT_CODE) {
- $model = new LabData();
- $labs = $model->where('INSPECT_REPORT_CODE', $INSPECT_REPORT_CODE)->select();
- foreach($labs as $lab) {
- $this->_delModelAndCreateNewModel($lab, new DelLabData());
- }
- }
- public function doneUpdateHrData($PATIENT_CODE) {
- // TODO 更新互认相关数据 hospital_patient
- $this->saveUploadHospitalPatient($PATIENT_CODE);
- }
- public function doneUpdateCache($PATIENT_CODE) {
- // TODO 更新相关缓存数据
- // 记录PATIENT_CODE删除时间和内容
- }
- public function doneDelBiInspectReport($INSPECT_REPORT_CODE) {
- $model = new BiInspectReport();
- $labs = $model->where('INSPECT_REPORT_CODE', $INSPECT_REPORT_CODE)->select();
- foreach($labs as $lab) {
- $this->_delModelAndCreateNewModel($lab, new DelBiInspectReport());
- }
- }
- public function doneDelExamReport($EXAM_REPORT) {
- Db::startTrans();
- try {
- $newModel = new DelExamReport();
- $this->_delModelAndCreateNewModel($EXAM_REPORT, $newModel);
- $this->doneDelMedicalInformation($EXAM_REPORT['PATIENT_CODE']);
- $this->doneUpdateHrData($EXAM_REPORT['PATIENT_CODE']);
- $this->doneUpdateCache($EXAM_REPORT['PATIENT_CODE']);
- Db::commit();
- } catch(Exception $e) {
- Db::rollback();
- }
- }
- public function _delModelAndCreateNewModel($dataModel, $newModel) {
- $id = $dataModel['ID'];
- $arr = $dataModel;
- $arr['del_time'] = time();
- unset($arr['ID']);
- $newModel->save($dataModel);
- $dataModel->where('ID',$id)->delete();
- }
- public function doneDelMedicalInformation($PATIENT_CODE) {
- $examModel = new ExamReport();
- $res = $examModel->field('PATIENT_CODE')->where('PATIENT_CODE', $PATIENT_CODE)->find();
- if($res) {
- return;
- }
- $inspectModel = new InspectReport();
- $res = $inspectModel->field('PATIENT_CODE')->where('PATIENT_CODE', $PATIENT_CODE)->find();
- if($res) {
- return;
- }
- $model = new MedicalInformation();
- $newModel = new DelMedicalInformation();
- $info = $model->where('PATIENT_CODE', $PATIENT_CODE)->find();
- $this->_delModelAndCreateNewModel($info, $newModel);
- $this->doneDelPatient($PATIENT_CODE);
- }
- public function doneDelPatient($PATIENT_CODE) {
- $model = new Patient();
- $newModel = new DelPatient();
- $patient = $model->where('PATIENT_CODE', $PATIENT_CODE)->find();
- $this->_delModelAndCreateNewModel($patient, $newModel);
- }
- /*
- * 上传检验数据
- */
- public function postLabReport($params): string
- {
- // try{
- $check = $this->checkPostLisReport($params);
- $this->handlePatient($check['PATIENT']);
- $MEDICAL_INFORMATION = $check['MEDICAL_INFORMATION'];
- $information = $this->patientModel->getMedical($MEDICAL_INFORMATION['PATIENT_CODE'],[],'*');
- if(!empty($information))
- {
- $this->patientModel->saveRepeatInformation($information);
- $this->patientModel->delOldInformation(['PATIENT_CODE'=>$information['PATIENT_CODE']]);
- }
- $MEDICAL_INFORMATION_INSERT = $MEDICAL_INFORMATION;
- $MEDICAL_INFORMATION_INSERT['create_time'] = $check['INSPECT_REPORTS'][0]['create_time'];
- $this->patientModel->saveMedical($MEDICAL_INFORMATION_INSERT);
- $INSPECT_REPORTS = $check['INSPECT_REPORTS'];
- $INSPECT_REPORTS_INSERT = [];
- $newArr = [];
- $hrNullData = [];
- $INSPECT_REPORT_CODE = [];
- $bi = [];
- foreach ($INSPECT_REPORTS as $k=>$v)
- {
- $INSPECT_REPORT_CODE[] = $v['INSPECT_REPORT_CODE'];
- $inspect = $this->patientModel->getInspectData(['INSPECT_REPORT_CODE'=>$v['INSPECT_REPORT_CODE']],'*');
- if(!empty($inspect))
- {
- //存在 删除并存储历史
- $this->patientModel->saveRepeatInspect($inspect);
- $this->patientModel->delOldInspect(['INSPECT_REPORT_CODE'=>$v['INSPECT_REPORT_CODE']]);
- }
- if(!empty($v['LAB_HR_ITEMNAME_CODE']))
- {
- $newArr[] = $v;
- $bi[] = $v['INSPECT_REPORT_CODE'];
- }else{
- $hrNullData[$v['INSPECT_REPORT_CODE']] = $v;
- }
- $INSPECT_REPORTS_INSERT[] = $v;
- }
- if(!empty($INSPECT_REPORTS_INSERT))
- {
- $this->patientModel->saveInspectReport($INSPECT_REPORTS_INSERT);
- }
- if(!empty($INSPECT_REPORT_CODE))
- {
- $oldItems = $this->patientModel->getOldLab($INSPECT_REPORT_CODE);
- if(!empty($oldItems))
- {
- $this->patientModel->delOldLab($INSPECT_REPORT_CODE);
- $delItems = [];
- foreach ($oldItems as $k=>$v)
- {
- unset($v['ID']);
- $delItems[] = $v;
- }
- if(!empty($delItems))
- {
- $this->patientModel->saveRepeatLab($delItems);
- }
- }
- }
- $INSPECT_REPORT_ITEMS = $check['INSPECT_REPORT_ITEMS'];
- $INSPECT_REPORT_ITEMS_INSERT = [];
- foreach ($INSPECT_REPORT_ITEMS as $k=>$v)
- {
- if(isset($hrNullData[$v['INSPECT_REPORT_CODE']]))
- {
- // 存在互认项目编码为空的检验报告子项
- $labChild = $hrNullData[$v['INSPECT_REPORT_CODE']];
- $labChild['LAB_HR_ITEMNAME_CODE'] = $v['LAB_HR_ITEMDETAILNAME_CODE'];
- $labChild['LAB_HR_ITEMNAME'] = $v['LAB_HR_ITEMDETAILNAME'];
- $newArr[] = $labChild;
- $bi[] = $v['INSPECT_REPORT_CODE'];
- }
- $INSPECT_REPORT_ITEMS_INSERT[] = $v;
- }
- if(!empty($INSPECT_REPORT_ITEMS_INSERT))
- {
- $this->patientModel->saveLabData($INSPECT_REPORT_ITEMS_INSERT);
- }
- if(!empty($newArr))
- {
- $biInspect = $this->patientModel->getBiInspect($bi);
- foreach ($biInspect as $k=>$v)
- {
- unset($biInspect[$k]['ID']);
- }
- $this->patientModel->saveRepeatBiInspect($biInspect);
- $this->patientModel->delBiInspect($bi);
- $this->patientModel->saveBiInspect($newArr);
- }
- $this->saveUploadHospitalPatient($check['PATIENT']['PATIENT_CODE']);
- return 'success';
- // }catch (\Exception $e)
- // {
- // return $e->getMessage();
- // }
- }
- public function checkExam($data)
- {
- $info = $this->patientModel->getPatient(['PATIENT_CODE'=>$data['PATIENT_CODE']],'*');
- return $info;
- }
- public function saveNormalPatient($params, $mpiKey, $patientCode, $mpi): void
- {
- $mpiData = $this->patientModel->getMpi($params['ID_CARDNUM']);
- if(!empty($mpiData))
- {
- $this->saveMpi($mpi,$params['ID_CARDNUM'],$mpiKey);
- }
- $PData = $this->patientModel->getPatient(['PATIENT_CODE'=>$patientCode]);
- if(empty($PData))
- {
- // 直接存储 患者信息
- $this->savePatient($params['PATIENT'],$mpi,$mpiKey,$patientCode);
- }else{
- // todo 存储到备用表里
- // $patient = $this->makePatient($params,$mpiKey,$patientCode);
- }
- $MData = $this->patientModel->getMedical($patientCode);
- if(empty($MData))
- {
- // 直接存储 就诊信息
- $this->saveMedical($params['MEDICAL_INFORMATION'],$mpiKey,$patientCode);
- }else{
- // todo 存储到备用表里
- }
- }
- /**
- * @param $PATIENT1
- * @return void
- */
- public function handlePatient($PATIENT1)
- {
- $PATIENT = $PATIENT1;
- $data = $this->checkExam($PATIENT);
- if ($data) {
- //存在 删除 并存储历史记录
- $this->patientModel->saveRepeatPatient($data);
- $this->patientModel->delOldPatient(['PATIENT_CODE'=>$data['PATIENT_CODE']]);
- }
- $this->patientModel->save($PATIENT);
- }
- public function getIdCard($mpi)
- {
- $mpiData = $this->patientModel->getMpiData(['MPI'=>$mpi]);
- return $mpiData['ID_CARDNUM'];
- }
- }
|