12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319 |
- <?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,$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
- {
- $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'];
- }
- 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;
- }
- }
|