patientServies = $patientServies; $this->patientModel = $patientModel; $this->hrpatientModel = $hrpatientModel; $this->hrpatientServies = $hrpatientServies; $this->hrRecordModel = $hrRecordModel; $this->callRecordModel = $callRecordModel; } public function getShareCheck($ID_CARDNUM, $ORGCODE,$DOCTORCODE,$DEPART,$result,$all=0): bool|array { $ID_CARDNUM = Gm::encrypt(Config::get('gm.key'),$ID_CARDNUM); $data = array(); $patients = $this->patientModel->getPatientsByID_CARDNUM($ID_CARDNUM); $r = false; foreach($patients as $patient) { $return = $this->getRecogViewDetails($patient['PATIENT_CODE'], $ORGCODE,$DOCTORCODE,$DEPART,$result,$all); $data[] = $return; if($return) { $r = true; } } if($result == 1) { return $r; } return $data; } // public function getRecogData($ID_CARDNUM, $ORGCODE): array { // $ID_CARDNUM = Gm::encrypt(Config::get('gm.key'),$ID_CARDNUM); // $data = array(); // $patients = $this->patientModel->getPatientsByID_CARDNUM($ID_CARDNUM); // foreach($patients as $patient) { // $data[] = $this->getRecogViewDetailByPATIENT_CODE($patient['PATIENT_CODE'], $ORGCODE); // } // return ['DATA'=>$data]; // } public function getRecogViewDetailByToken($token,$hr=0): array { $params = Cache::get($token); if(empty($params)) { // todo 错误返回 先登录 return []; } $ID_CARDNUM = $params['ID_CARDNUM']; $ID_CARDNUM = Gm::encrypt(Config::get('gm.key'),$ID_CARDNUM); // $HRORGCODE = $params['ORGCODE']; $WHERE = []; if($params['ORGCODE'] ?? '') { $WHERE['ORGCODE'] = $params['ORGCODE']; } if($params['DOCTORCODE'] ?? '') { $WHERE['DOCTORCODE'] = $params['DOCTORCODE']; } if($params['DEPART'] ?? '') { $WHERE['DEPTNAME'] = $params['DEPART']; } $exam_report = []; $inspect_report = []; if($params['HR_ITEM_CODE'] ?? '') { $exam_report['HR_ITEMNAME_CODE'] = ['in',explode(',',$params['HR_ITEM_CODE'])]; $inspect_report['LAB_HR_ITEMNAME_CODE'] = ['in',explode(',',$params['HR_ITEM_CODE'])]; } $_data = $this->getRecogViewDetail($ID_CARDNUM, $WHERE,$exam_report,$inspect_report,$hr); $patient = $_data[0]['PATIENT']; $data = [ 'patient' => $patient, 'data' => $_data, ]; // todo 容错处理 $this->recordTokenRequestTime($token); $this->recordCallGetRecogViewDetail($params, $patient); return $data; } public function recordTokenRequestTime($token) { // TODO 记录token请求时间 } public function recordCallGetRecogViewDetail($params, $patient) { $data = [ 'MPI'=>$patient['MPI'], 'MPI_KEY'=>$patient['MPI_KEY'], 'ID_CARDNUM' => $params['ID_CARDNUM'], 'ORGCODE'=>$params['ORGCODE'], 'ORGNAME'=>$params['ORGNAME'], 'DOCTORNAME'=>$params['DOCTORNAME'], 'DOCTORCODE'=>$params['DOCTORCODE'] ]; $this->callRecordModel->save($data); } public function getRecogViewDetail($ID_CARDNUM, $HRORGCODE,$INSPECT_REPORT,$EXAM_REPORT,$hr): array { $datas = array(); $patients = $this->patientModel->getPatientsByID_CARDNUM($ID_CARDNUM); foreach($patients as $patient) { $data = $this->getRecogViewDetailByPATIENT_CODE($patient['PATIENT_CODE'], $HRORGCODE,$hr); $data['MEDICAL_INFORMATION']['PATIENT_CODE'] = $patient['PATIENT_CODE']; $HR_RECORDS = $this->hrpatientServies->_getHrpatientDetailByPATIENT_CODE($patient['PATIENT_CODE'], $HRORGCODE); $data['HR_RECORDS'] = $HR_RECORDS; $datas[] = $data; } return $datas; } public function getRecogViewDetailByPATIENT_CODE($PATIENT_CODE, $HRORGCODE,$hr): array { $data = null; $data = $this->patientServies->getHrPatient(['PATIENT_CODE'=> $PATIENT_CODE],$hr); return $data; } public function getRecogViewDetails($PATIENT_CODE,$ORGCODE,$DOCTORCODE,$DEPART,$RESULT,$all): bool|array { $data = null; $WHERE = []; if($ORGCODE) { $WHERE['ORGCODE'] = $ORGCODE; } if($DOCTORCODE) { $WHERE['DOCTORCODE'] = $DOCTORCODE; } if($DEPART) { $WHERE['DEPTNAME'] = $DEPART; } $data = $this->patientServies->getPatientSign(['PATIENT_CODE'=> $PATIENT_CODE],$WHERE,$RESULT,$all); return $data; } public function hanldeHR_RECORDS(&$HR_RECORDS) { foreach($HR_RECORDS as &$HR_RECORD) { $HR_RECORD['PATIENT_CODE'] = $this->getPATIENT_CODE($HR_RECORD['ID_CARDNUM'], $HR_RECORD['SERIESNUM'], $HR_RECORD['ORGCODE']); } } public function hanldeHR_RECORDSAndToken(&$HR_RECORDS, $TOKEN) { $data = Cache::get($TOKEN); $DOCTORCODE = $data['DOCTORCODE']; $DOCTORNAME = $data['DOCTORNAME']; $HRORGNAME = $data['ORGNAME']; $HRORGCODE = $data['ORGCODE']; foreach($HR_RECORDS as &$HR_RECORD) { $HR_RECORD['DOCTORCODE'] = $DOCTORCODE; $HR_RECORD['DOCTORNAME'] = $DOCTORNAME; $HR_RECORD['HRORGNAME'] = $HRORGNAME; $HR_RECORD['HRORGCODE'] = $HRORGCODE; } } public function getPATIENT_CODE($ID_CARDNUM, $SERIESNUM, $HRORGCODE) { return md5(md5($ID_CARDNUM).$HRORGCODE.$SERIESNUM); } public function saveRecogResult($HR_RECORDS): void { $this->hanldeHR_RECORDS($HR_RECORDS); $where = $this->_saveRecogViewDetail($HR_RECORDS); $this->saveHospitalHrPatient($where); } public function saveHospitalHrPatient($where) { unset($where['REPORTID']); $data = $this->makeHrPatient($where); // $hrPatient = $this->hrpatientModel->where($where)->find(); // if(!empty($hrPatient)) // { // $this->hrpatientModel->where($where)->update($data); // }else{ // $this->hrpatientModel->insert($data); // } // todo $model= new HospitalHrpatient(); $info = $model->where($where)->find(); if(empty($info)) { $model->save($data); }else{ $info->save($data); } } public function makeHrPatient($where) { // $where // 'PATIENT_CODE' => $PATIENT_CODE, // 'ORGCODE' => $ORGCODE, // 'HRORGCODE' => $HRORGCODE, // 'REPORTID' => $REPORTID $arr = []; $patient = $this->patientModel->getPatient(['PATIENT_CODE'=>$where['PATIENT_CODE']]); $record = $this->hrRecordModel->where($where)->where('HR_STATUS','<>','0')->select(); $medical = $this->patientModel->getMedical($where['PATIENT_CODE']); $data = []; $data['MPI_KEY'] = $patient['MPI_KEY']; $data['PATIENT_CODE'] = $patient['PATIENT_CODE']; $data['NAME'] = $patient['NAME']; $data['GENDER'] = $patient['GENDER']; $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']; //诊断 $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'] = $medical['DIAGNOSECODE']; $data['ORGCODE'] = $record[0]['ORGCODE']; $data['ORGNAME'] = $record[0]['ORGNAME']; $data['HRORGNAME'] = $record[0]['HRORGNAME']; $data['HRORGCODE'] = $record[0]['HRORGCODE']; $data['create_time'] = $record[0]['HRTIME']; // $exam = $this->patientModel->getExam($where['PATIENT_CODE']); // $examCode = []; // $examItem = []; // $recordCode = array_column($record,'ITEMNAMECODE'); // if(!empty($exam)) // { // $examCode = array_column($exam,'HR_ITEMNAME_CODE'); // $examItem = array_column($exam,'EXAM_ITEMNAME'); // $hrExamCode = array_column($exam,'HR_ITEMNAME_CODE'); // $hrExam = array_column($exam,'HR_ITEMNAME'); // } // $medical = $this->patientModel->getMedical($where['PATIENT_CODE']); // $medicalCode = []; // $medicalItem = []; // if(!empty($medical)) // { // $medicalCode = array_column($medical,'LAB_HR_ITEMNAME_CODE'); // $medicalItem = array_column($medical,'LAB_ITEMNAME'); // $hrInspectCode = array_column($exam,'LAB_HR_ITEMNAME_CODE'); // $hrInspectExam = array_column($exam,'LAB_HR_ITEMNAME'); // } $exam = []; $examCode = []; $lab = []; $labCode = []; $hrExam = []; $hrExamCode = []; $bhrExam = []; $bhrExamCode = []; $hrInspect = []; $hrInspectCode = []; $bhrInspect = []; $bhrInspectCode = []; foreach ($record as $v) { $data['HR_CODE'] = md5($v['ORGCODE'].$v['HRORGCODE'].$patient['PATIENT_CODE']); if($v['HR_STATUS'] == 1) { $status = '是'; }elseif ($v['HR_STATUS'] == 2) { $status = '否'; }else{ continue; } if($v['ITEMNAMETYPE'] == 1) { //检查 $exam[] = $v['ITEMNAME'].'('.$status.')'; //检查项目 $examCode[] = $v['ITEMNAMECODE'].'('.$v['HR_STATUS'].')'; if($v['HR_STATUS'] == 1) { $hrExam[] = $v['ITEMNAME']; $hrExamCode[] = $v['ITEMNAMECODE']; }elseif ($v['HR_STATUS'] == 2) { $bhrExam[] = $v['ITEMNAME']; $bhrExamCode[] = $v['ITEMNAMECODE']; } }else{ //检验 $lab[] = $v['ITEMNAME'].'('.$status.')';; //检验项目 $labCode[] = $v['ITEMNAMECODE'].'('.$v['HR_STATUS'].')'; if($v['HR_STATUS'] == 1) { $hrInspect[] = $v['ITEMNAME']; $hrInspectCode[] = $v['ITEMNAMECODE']; }elseif ($v['HR_STATUS'] == 2) { $bhrInspect[] = $v['ITEMNAME']; $bhrInspectCode[] = $v['ITEMNAMECODE']; } } $data['HRORGCODE'] = $v['HRORGCODE']; } if(!empty($exam)) { $data['EXAM_ITEMNAME'] = implode(',',$exam); $data['EXAM_ITEMNAME_CODE'] = implode(',',$examCode); } if(!empty($lab)) { $data['LAB_ITEMNAME'] = implode(',',$lab); $data['LAB_ITEMNAME_CODE'] = implode(',',$labCode); } if(!empty($hrExam)) { $data['HR_EXAM_ITEMNAME'] = implode(',',$hrExam); $data['HR_EXAM_ITEMNAME_CODE'] = implode(',',$hrExamCode); } if(!empty($bhrExam)) { $data['BHR_EXAM_ITEMNAME'] = implode(',',$bhrExam); $data['BHR_EXAM_ITEMNAME_CODE'] = implode(',',$bhrExamCode); } if(!empty($hrInspect)) { $data['HR_LAB_ITEMNAME'] = implode(',',$hrInspect); $data['HR_LAB_ITEMNAME_CODE'] = implode(',',$hrInspectCode); } if(!empty($bhrInspect)) { $data['BHR_LAB_ITEMNAME'] = implode(',',$bhrInspect); $data['BHR_LAB_ITEMNAME_CODE'] = implode(',',$bhrInspectCode); } return $data; } public function saveRecogViewDetail($HR_RECORDS, $TOKEN) { $this->hanldeHR_RECORDSAndToken($HR_RECORDS, $TOKEN); // 获取token请求时间和PATIENT_CODE删除时间和内容做对比 $this->_saveRecogViewDetail($HR_RECORDS); } public function _saveRecogViewDetail($HR_RECORDS) { $data = $this->checkHR_RECORDS($HR_RECORDS); $where = $data['where']; // 删除 hr_record表 $this->hrRecordModel->where($where)->delete(); $news = $data['news']; // 存储hr_record表 $this->hrRecordModel->saveAll($news); return $where; } /** * @throws Exception */ public function checkHR_RECORDS($HR_RECORDS): array { if(count($HR_RECORDS) === 0) { //抛出异常 未传入互认数据 throw new Exception('未传入互认数据'); } $PATIENT_CODE = $HR_RECORDS[0]['PATIENT_CODE']; $ORGCODE = $HR_RECORDS[0]['ORGCODE']; $HRORGCODE = $HR_RECORDS[0]['HRORGCODE']; $REPORTID = array(); $news = array(); foreach($HR_RECORDS as $HR_RECORD) { $this->checkPATIENT_CODE($PATIENT_CODE, $HR_RECORD['PATIENT_CODE']); $this->checkORGCODE($ORGCODE, $HR_RECORD['ORGCODE'], $HR_RECORD['ORGNAME']); $this->checkHRORGCODE($HRORGCODE, $HR_RECORD['HRORGCODE'], $HR_RECORD['HRORGNAME']); $this->checkITEMNAME($HR_RECORD['REPORTID'], $HR_RECORD['ITEMNAME'], $HR_RECORD['ITEMNAMECODE'], $HR_RECORD['ITEMNAMETYPE']); $this->checkBHR_CODE($HR_RECORD['HR_STATUS'], $HR_RECORD['BHR_CODE'], $HR_RECORD['BHR_REASON']); $new = [ 'DOCTORNAME' => $HR_RECORD['DOCTORNAME'], 'DOCTORCODE' => $HR_RECORD['DOCTORCODE'], 'REPORTID' => $HR_RECORD['REPORTID'], 'PATIENT_CODE' => $HR_RECORD['PATIENT_CODE'], 'ORGNAME' => $HR_RECORD['ORGNAME'], 'HRORGNAME' => $HR_RECORD['HRORGNAME'], 'ORGCODE' => $HR_RECORD['ORGCODE'], 'HRORGCODE' => $HR_RECORD['HRORGCODE'], 'ITEMNAME' => $HR_RECORD['ITEMNAME'], 'ITEMNAMECODE' => $HR_RECORD['ITEMNAMECODE'], 'HR_STATUS' => $HR_RECORD['HR_STATUS'], 'BHR_CODE' => $HR_RECORD['BHR_CODE'], 'ITEMNAMETYPE' => $HR_RECORD['ITEMNAMETYPE'], 'BHR_REASON' => $HR_RECORD['BHR_REASON'], 'HRTIME' => $HR_RECORD['HRTIME'] ?? date('Y-m-d H:i:s'), ]; $news[] = $new; $REPORTID[] = $HR_RECORD['REPORTID']; } $where = [ 'PATIENT_CODE' => $PATIENT_CODE, 'ORGCODE' => $ORGCODE, 'HRORGCODE' => $HRORGCODE, 'REPORTID' => $REPORTID ]; // PATIENT_CODE // ORGNAME // HRORGNAME // ORGCODE // HRORGCODE // ITEMNAME // ITEMNAMECODE // HR_STATUS // BHR_CODE // ITEMNAMETYPE // BHR_REASON return [ 'where' => $where, 'news' => $news, ]; } /** * @throws Exception */ public function checkPATIENT_CODE($_PATIENT_CODE, $PATIENT_CODE): void { if($_PATIENT_CODE !== $PATIENT_CODE) { //抛出患者标识不一致异常 throw new Exception('患者标识不一致'); } } /** * @throws Exception */ public function checkORGCODE($_ORGCODE, $ORGCODE, $ORGNAME): void { if($_ORGCODE !== $ORGCODE) { // 抛出互认机构不一致异常 throw new Exception('互认机构不一致'); } // todo 校验医院编码和医院名称是否一致 } /** * @throws Exception */ public function checkHRORGCODE($_HRORGCODE, $HRORGCODE, $HRORGNAME): void { if($_HRORGCODE !== $HRORGCODE) { // 抛出就诊机构不一致异常 throw new Exception('就诊机构不一致'); } // todo 校验医院编码和医院名称是否一致 去机构名称校验 } /** * @throws Exception */ public function checkITEMNAME($REPORT_CODE, $ITEMNAME, $ITEMNAMECODE, $ITEMNAMETYPE): void { // todo 校验项目编码 项目名称 项目类型是否一致 if(true) { // todo 类型-》检验、检查 }else{ throw new Exception('校验项目编码 项目名称 项目类型是否一致'); } } /** * @throws Exception */ public function checkBHR_CODE($HR_STATUS, $BHR_CODE, $BHR_REASON): void { // todo 校验互认状态 不互认编码 不互认原因是否一致和合法 } }