123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321 |
- <?php
- declare (strict_types=1);
- namespace app\zskk\controller;
- use app\admin\model\dict\Labitem;
- use app\admin\model\Patient;
- use Throwable;
- use app\common\controller\ZskkApi;
- use app\common\library\Gm;
- use app\common\library\HttpUtils;
- use app\zskk\model\Diagnose;
- use app\zskk\model\ExamApplication;
- use app\zskk\model\ExamReport;
- use app\zskk\model\HospitalHRPatient;
- use app\zskk\model\HrRecord;
- use app\zskk\model\InspectReport;
- use app\zskk\model\LabData;
- use app\zskk\model\MedicalInformation;
- use app\zskk\model\MedicalOrders;
- use app\zskk\model\ZskkTest;
- use app\zskk\servies\PatientServies;
- use PhpOffice\PhpSpreadsheet\Style\NumberFormat\Wizard\Number;
- use think\facade\Cache;
- use think\facade\Config;
- use think\facade\Db;
- class Test extends ZskkApi
- {
- protected array $noNeedDecrypt = ['test', 'generate'];
- protected array $noNeedDecode = ['test', 'generate'];
- protected array $noNeedBlur = ['test', 'generate'];
- protected array $noNeedEncode = ['test', 'generate'];
- protected array $noNeedEncrypt = ['test', 'generate'];
- /**
- * 后台初始化请求
- * @return void
- * @throws Throwable
- */
- public function test(ZskkTest $model): void
- {
- $params = $this->request->get('sleep');
- // sleep(Number($params['sleep']));
- if($params == '1') {
- sleep(10);
- }
- halt($params);
- var_dump($params);
- $data = $params;
- // $data['a'] = $data['a'] + 1;
- // $data['b'] = $data['b'] * 2;
- // $data['c'] = $data['a'] + $data['b'];
- $model->save($data);
- $data = $model->where(true)->find();
- var_dump("接口调用响应");
- var_dump($data);
- $this->success('', $data);
- }
- public function generate(PatientServies $servies): void
- {
- ignore_user_abort(true);
- set_time_limit(0);
- $patientModel = new Patient();
- $length = 100;
-
- $patients = $patientModel->where('status', 0)->limit($length)->select();
-
- foreach($patients as $patient) {
- $this->generateByPatient($patient);
- }
- if(count($patients) === $length) {
- $this->generate($servies);
- } else {
- $this->success('', $patients);
- }
- }
- public function generateByPatient($patient) {
- $patientModel = new Patient();
- $medicalInformationModel = new MedicalInformation();
- $patients = $patientModel
- ->where('ID_CARDNUM', Gm::encrypt(Config::get('gm.key'), $patient['ID_CARDNUM']))
- ->where('create_time', '<=', $patient['create_time'])
- ->select();
- if(count($patients) === 0) {
- return;
- }
- $ORG = $medicalInformationModel->where('PATIENT_CODE', $patient['PATIENT_CODE'])->find();
- $tmp = [
- 'AA' => $ORG['DOCTORNAME'],
- 'AB' => $ORG['DOCTORCODE'],
- 'AC' => $patient['ID_CARDNUM'],
- 'AH' => $ORG['ORGNAME'],
- 'AI' => $ORG['ORGCODE'],
- 'AP' => $ORG['ENCOUNTER_DATE'],
- ];
- foreach($patients as $_patient) {
- $this->generateHr($_patient, $tmp);
- }
- $patient['status'] = 1;
- $patient->save();
- // AA 医生名称
- // AB 医生编号
- // AC 证件号码
- // AD 就诊号
- // AE 报告编号
- // AF 检查机构名称
- // AG 检查机构编号
- // AH 互认(本)机构名称
- // AI 互认(本)机构编号
- // AJ 项目名称
- // AK 互认项目编号
- // AL 项目类型
- // AM 互认状态
- // AN 不互认原因编码
- // AO 不互认原因
- // AP 互认时间
- }
- public function generateHr($patient, $_tmp) {
- $medicalInformationModel = new MedicalInformation();
- $ORG = $medicalInformationModel->where('PATIENT_CODE', $patient['PATIENT_CODE'])->find();
- $tmp = [
- 'AA' => $_tmp['AA'],
- 'AB' => $_tmp['AB'],
- 'AC' => $_tmp['AC'],
- 'AD' => $ORG['SERIESNUM'],
- 'AF' => $ORG['ORGNAME'],
- 'AG' => $ORG['ORGCODE'],
- 'AH' => $_tmp['AH'],
- 'AI' => $_tmp['AI'],
- 'AP' => $_tmp['AP'],
- ];
- $items = $this->getItems($patient['PATIENT_CODE']);
- $hrs = $this->getHrs($items, $tmp);
- $this->callHr($hrs);
- return $hrs;
- }
- public function callHr($hrs) {
- $data = ['A' => $hrs];
- $token = $this->getToken();
- $info = Gm::encrypt('zLxapoeqWYpoeqWY',(base64_encode(json_encode($data))));
- // halt($info);
- $res = HttpUtils::post('http://127.0.0.1:8000/zskk/api/saveRecogResult', [
- // $res = HttpUtils::post('http://36.140.148.147:8000/zskk/api/saveRecogResult', [
- 'data' => $info
- ], [
- 'Authorization: Bearer '.$token
- ]);
-
- // halt($res);
- }
- public function getToken() {
- $token = Cache::get('generate_hr_token');
- if($token) {
- return $token;
- }
- $res = HttpUtils::post('http://127.0.0.1:8000/zskk/api/getToken', [
- "data" => [
- "clientid" => "12371600494581158K",
- "clientsecret" => "837ffb03803b72cd99a941770fb6b2be"
- ]
- ]);
- $res= json_decode($res, true);
- $data = $res['data'];
- $token = $data['token'];
- $expire = $data['expire'];
- Cache::set('generate_hr_token', $token, $expire - 60);
- return $token;
- }
- public function getHrs($items, $tmp) {
- $hrs = array();
- foreach($items as $item) {
- $hr_status = $this->getRandHr();
- $hrs[] = [
- 'AA' => $tmp['AA'],
- 'AB' => $tmp['AB'],
- 'AC' => $tmp['AC'],
- 'AD' => $tmp['AD'],
- 'AE' => $item['AE'],
- 'AF' => $tmp['AF'],
- 'AG' => $tmp['AG'],
- 'AH' => $tmp['AH'],
- 'AI' => $tmp['AI'],
- 'AJ' => $item['AJ'],
- 'AK' => $item['AK'],
- 'AL' => $item['AL'],
- 'AM' => $hr_status['AM'],
- 'AN' => $hr_status['AN'],
- 'AO' => $hr_status['AO'],
- 'AP' => $tmp['AP'],
- ];
- }
- return $hrs;
- }
- public function getRandHr() {
- // AM 互认状态
- // AN 不互认原因编码
- // AO 不互认原因
- $AM = rand(0, 2);
- $BHRS = [
- [
- "code"=> "01",
- "name"=> "因病情变化,已有的检查检验结果难以反映患者当前实际病情的;"
- ],
- [
- "code"=> "02",
- "name"=> "检查检验结果与疾病发展关联程度高、变化较大或较快的;"
- ],
- [
- "code"=> "03",
- "name"=> "检查检验项目对于疾病诊疗意义重大的(如手术、输血等重大医疗措施前);"
- ],
- [
- "code"=> "04",
- "name"=> "已有的检查检验结果与患者临床表现、疾病诊断不符,难以满足临床诊疗需求的;"
- ],
- [
- "code"=> "05",
- "name"=> "对已有检查检验结果存疑的;"
- ],
- [
- "code"=> "06",
- "name"=> "图像质量和方法不能满足诊断要求的医学影像学检查;"
- ],
- [
- "code"=> "07",
- "name"=> "患者处于急诊、急救等紧急状态下的;"
- ],
- [
- "code"=> "08",
- "name"=> "患者或其家属要求进一步复查的;"
- ],
- [
- "code"=> "09",
- "name"=> "涉及司法、伤残及病退等鉴定的;"
- ],
- [
- "code"=> "10",
- "name"=> "其他符合诊疗需要,确需复查的情形;"
- ],
- [
- "code"=> "11",
- "name"=> "系统数据异常或错误。"
- ]
- ];
- $AN = '';
- $AO = '';
- if($AM === 2) {
- $BHR = $BHRS[rand(0, count($BHRS) - 1)];
- $AN = $BHR['code'];
- $AO = $BHR['name'];
- }
- return [
- 'AM' => $AM,
- 'AN' => $AN,
- 'AO' => $AO,
- ];
- }
- public function getItems($PATIENT_CODE) {
- $examModel = new ExamReport();
- $items = array();
- $exams = $examModel->where('PATIENT_CODE', $PATIENT_CODE)->where('HR_ITEMNAME_CODE', '<>', null)->select();
- foreach($exams as $exam) {
- $items[] = [
- 'AE' => $exam['REPORTID'],
- 'AJ' => $exam['HR_ITEMNAME'],
- 'AK' => $exam['HR_ITEMNAME_CODE'],
- 'AL' => '1',
- ];
- }
- $inspectModel = new InspectReport();
- $inspects = $inspectModel->where('PATIENT_CODE', $PATIENT_CODE)->select();
- $INSPECT_REPORT_CODE = [];
- foreach($inspects as $inspect) {
- if($inspect['LAB_HR_ITEMNAME_CODE']) {
- $items[] = [
- 'AE' => $inspect['REPORTID'],
- 'AJ' => $inspect['LAB_HR_ITEMNAME'],
- 'AK' => $inspect['LAB_HR_ITEMNAME_CODE'],
- 'AL' => '2',
- ];
- } else {
- $INSPECT_REPORT_CODE[] = $inspect['INSPECT_REPORT_CODE'];
- }
- }
- $labModel = new LabData();
- if(count($INSPECT_REPORT_CODE) > 0) {
- $labs = $labModel->where('INSPECT_REPORT_CODE', 'in' , $INSPECT_REPORT_CODE)->select();
- foreach($labs as $lab) {
- if($lab['LAB_HR_ITEMDETAILNAME_CODE']) {
- $items[] = [
- 'AE' => $lab['REPORTID'],
- 'AJ' => $lab['LAB_HR_ITEMDETAILNAME'],
- 'AK' => $lab['LAB_HR_ITEMDETAILNAME_CODE'],
- 'AL' => '2',
- ];
- }
- }
- }
- return $items;
- }
- }
|