123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528 |
- <?php
- declare (strict_types=1);
- namespace app\zskk\servies;
- use app\admin\model\hospital\Hrpatient;
- use app\admin\servies\HrpatientServies;
- use app\common\library\Gm;
- use app\zskk\model\CallRecord;
- use app\zskk\model\HospitalHrpatient;
- use app\zskk\model\HrRecord;
- use app\zskk\model\Patient;
- use think\Exception;
- use think\facade\Cache;
- use think\facade\Config;
- class HrServies
- {
- public $patientModel = null;
- public $hrpatientModel = null;
- private $patientServies = null;
- private $hrpatientServies = null;
- private $hrRecordModel = null;
- private $callRecordModel = null;
-
- public function __construct(
- PatientServies $patientServies,
- Patient $patientModel,
- Hrpatient $hrpatientModel,
- HrRecord $hrRecordModel,
- HrpatientServies $hrpatientServies,
- CallRecord $callRecordModel
- )
- {
- // parent::__construct();
- $this->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 校验互认状态 不互认编码 不互认原因是否一致和合法
- }
- }
|