123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380 |
- <?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'] = ((int)$last)*((int)$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,$all ): 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;
- }
- $examWhere = [];
- if($all == '0')
- {
- $examWhere = ['RECOG_STATUS'=>'*'];
- }
- $exam = $this->patientModel->getExam($patient['PATIENT_CODE'],$examWhere);
- 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 getHrPatient($where,$hr=0,$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();
- $examWhere = [];
- $inspectWhere = [];
- if($hr == 1)
- {
- $examWhere = ['RECOG_STATUS'=>'*'];
- $inspectWhere = ['RECOG_STATUS'=>'*'];
- }
- $exam = $this->patientModel->getExam($patient['PATIENT_CODE'],$examWhere);
- $inspect = $this->patientModel->getInspect($patient['PATIENT_CODE'],$inspectWhere);
- 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;
- }
- /**
- * @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
- {
- $information = $this->patientModel->getMedicalData(['HOS_EMPI'=>$params['MEDICAL_INFORMATION']['HOS_EMPI']],'*');
- if(empty($information))
- {
- return '';
- }
- $EXAM_REPORTS = $this->makeExamData($params['EXAM_REPORTS']);
- $report = $this->patientModel->getExamReport(['PATIENT_CODE'=>$information['PATIENT_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;
- if(empty($report['AUDITTIME']))
- {
- unset($report['AUDITTIME']);
- }
- if(empty($report['STUDYTIME']))
- {
- unset($report['STUDYTIME']);
- }
- 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 '';
- }
- if(strrpos($base64_string,'http') !== false || strrpos($base64_string,'https') !== false)
- {
- // 传参url
- $arr = explode('.',$base64_string);
- $hz = end($arr);
- $filePath = $_SERVER['DOCUMENT_ROOT'].'/report/'.time().rand(0,9999).'.'.$hz; // 本地文件路径
- $savePath = $_SERVER['HTTP_HOST'].'/report/'.time().rand(0,9999).'.'.$hz; // 本地文件路径
- // 检查目标 URL 是否有效
- if (!filter_var($base64_string, FILTER_VALIDATE_URL)) {
- return '';
- }
- // 创建流上下文并设置超时时间为 5 秒
- $context = stream_context_create([
- 'http' => [
- 'timeout' => 5 // 设置超时时间为 5 秒
- ]
- ]);
- // 获取文件内容
- try{
- $content = file_get_contents($base64_string, false, $context);
- }catch (\Exception $e){
- return '';
- }
- // 检查是否成功获取文件内容
- if ($content === false) {
- return '';
- }
- // 保存文件到本地目录
- $result = file_put_contents($filePath, $content);
- // 检查是否成功保存文件
- if ($result === false) {
- return '';
- }
- }else{
- // 将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'];
- }
- public function login($params)
- {
- if($params['username'] == 'admin' && $params['password'] == '123456')
- {
- return 'success';
- }
- return '账号或密码错误';
- }
- public function getHospitalData($params)
- {
- $data = $this->patientModel->getHospitalData($params);
- return $data;
- }
- public function getCheck($params)
- {
- $data = $this->patientModel->getCheck($params);
- return $data;
- }
- public function getInpection($params)
- {
- $data = $this->patientModel->getInpection($params);
- return $data;
- }
- public function syncExam($params)
- {
- $study_id = $params['study_id'];
- $studyUid = $params['studyUid'];
- $exam = $this->patientModel->saveReportStudy($studyUid,$study_id);
- return 'success';
- }
- }
|