Test.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  1. <?php
  2. declare (strict_types=1);
  3. namespace app\zskk\controller;
  4. use app\admin\model\dict\Labitem;
  5. use app\admin\model\Patient;
  6. use Throwable;
  7. use app\common\controller\ZskkApi;
  8. use app\common\library\Gm;
  9. use app\common\library\HttpUtils;
  10. use app\zskk\model\Diagnose;
  11. use app\zskk\model\ExamApplication;
  12. use app\zskk\model\ExamReport;
  13. use app\zskk\model\HospitalHRPatient;
  14. use app\zskk\model\HrRecord;
  15. use app\zskk\model\InspectReport;
  16. use app\zskk\model\LabData;
  17. use app\zskk\model\MedicalInformation;
  18. use app\zskk\model\MedicalOrders;
  19. use app\zskk\model\ZskkTest;
  20. use app\zskk\servies\PatientServies;
  21. use PhpOffice\PhpSpreadsheet\Style\NumberFormat\Wizard\Number;
  22. use think\facade\Cache;
  23. use think\facade\Config;
  24. use think\facade\Db;
  25. class Test extends ZskkApi
  26. {
  27. protected array $noNeedDecrypt = ['test', 'generate'];
  28. protected array $noNeedDecode = ['test', 'generate'];
  29. protected array $noNeedBlur = ['test', 'generate'];
  30. protected array $noNeedEncode = ['test', 'generate'];
  31. protected array $noNeedEncrypt = ['test', 'generate'];
  32. /**
  33. * 后台初始化请求
  34. * @return void
  35. * @throws Throwable
  36. */
  37. public function test(ZskkTest $model): void
  38. {
  39. $params = $this->request->get('sleep');
  40. // sleep(Number($params['sleep']));
  41. if($params == '1') {
  42. sleep(10);
  43. }
  44. halt($params);
  45. var_dump($params);
  46. $data = $params;
  47. // $data['a'] = $data['a'] + 1;
  48. // $data['b'] = $data['b'] * 2;
  49. // $data['c'] = $data['a'] + $data['b'];
  50. $model->save($data);
  51. $data = $model->where(true)->find();
  52. var_dump("接口调用响应");
  53. var_dump($data);
  54. $this->success('', $data);
  55. }
  56. public function generate(PatientServies $servies): void
  57. {
  58. ignore_user_abort(true);
  59. set_time_limit(0);
  60. $patientModel = new Patient();
  61. $length = 100;
  62. $patients = $patientModel->where('status', 0)->limit($length)->select();
  63. foreach($patients as $patient) {
  64. $this->generateByPatient($patient);
  65. }
  66. if(count($patients) === $length) {
  67. $this->generate($servies);
  68. } else {
  69. $this->success('', $patients);
  70. }
  71. }
  72. public function generateByPatient($patient) {
  73. $patientModel = new Patient();
  74. $medicalInformationModel = new MedicalInformation();
  75. $patients = $patientModel
  76. ->where('ID_CARDNUM', Gm::encrypt(Config::get('gm.key'), $patient['ID_CARDNUM']))
  77. ->where('create_time', '<=', $patient['create_time'])
  78. ->select();
  79. if(count($patients) === 0) {
  80. return;
  81. }
  82. $ORG = $medicalInformationModel->where('PATIENT_CODE', $patient['PATIENT_CODE'])->find();
  83. $tmp = [
  84. 'AA' => $ORG['DOCTORNAME'],
  85. 'AB' => $ORG['DOCTORCODE'],
  86. 'AC' => $patient['ID_CARDNUM'],
  87. 'AH' => $ORG['ORGNAME'],
  88. 'AI' => $ORG['ORGCODE'],
  89. 'AP' => $ORG['ENCOUNTER_DATE'],
  90. ];
  91. foreach($patients as $_patient) {
  92. $this->generateHr($_patient, $tmp);
  93. }
  94. $patient['status'] = 1;
  95. $patient->save();
  96. // AA 医生名称
  97. // AB 医生编号
  98. // AC 证件号码
  99. // AD 就诊号
  100. // AE 报告编号
  101. // AF 检查机构名称
  102. // AG 检查机构编号
  103. // AH 互认(本)机构名称
  104. // AI 互认(本)机构编号
  105. // AJ 项目名称
  106. // AK 互认项目编号
  107. // AL 项目类型
  108. // AM 互认状态
  109. // AN 不互认原因编码
  110. // AO 不互认原因
  111. // AP 互认时间
  112. }
  113. public function generateHr($patient, $_tmp) {
  114. $medicalInformationModel = new MedicalInformation();
  115. $ORG = $medicalInformationModel->where('PATIENT_CODE', $patient['PATIENT_CODE'])->find();
  116. $tmp = [
  117. 'AA' => $_tmp['AA'],
  118. 'AB' => $_tmp['AB'],
  119. 'AC' => $_tmp['AC'],
  120. 'AD' => $ORG['SERIESNUM'],
  121. 'AF' => $ORG['ORGNAME'],
  122. 'AG' => $ORG['ORGCODE'],
  123. 'AH' => $_tmp['AH'],
  124. 'AI' => $_tmp['AI'],
  125. 'AP' => $_tmp['AP'],
  126. ];
  127. $items = $this->getItems($patient['PATIENT_CODE']);
  128. $hrs = $this->getHrs($items, $tmp);
  129. $this->callHr($hrs);
  130. return $hrs;
  131. }
  132. public function callHr($hrs) {
  133. $data = ['A' => $hrs];
  134. $token = $this->getToken();
  135. $info = Gm::encrypt('zLxapoeqWYpoeqWY',(base64_encode(json_encode($data))));
  136. // halt($info);
  137. $res = HttpUtils::post('http://127.0.0.1:8000/zskk/api/saveRecogResult', [
  138. // $res = HttpUtils::post('http://36.140.148.147:8000/zskk/api/saveRecogResult', [
  139. 'data' => $info
  140. ], [
  141. 'Authorization: Bearer '.$token
  142. ]);
  143. // halt($res);
  144. }
  145. public function getToken() {
  146. $token = Cache::get('generate_hr_token');
  147. if($token) {
  148. return $token;
  149. }
  150. $res = HttpUtils::post('http://127.0.0.1:8000/zskk/api/getToken', [
  151. "data" => [
  152. "clientid" => "12371600494581158K",
  153. "clientsecret" => "837ffb03803b72cd99a941770fb6b2be"
  154. ]
  155. ]);
  156. $res= json_decode($res, true);
  157. $data = $res['data'];
  158. $token = $data['token'];
  159. $expire = $data['expire'];
  160. Cache::set('generate_hr_token', $token, $expire - 60);
  161. return $token;
  162. }
  163. public function getHrs($items, $tmp) {
  164. $hrs = array();
  165. foreach($items as $item) {
  166. $hr_status = $this->getRandHr();
  167. $hrs[] = [
  168. 'AA' => $tmp['AA'],
  169. 'AB' => $tmp['AB'],
  170. 'AC' => $tmp['AC'],
  171. 'AD' => $tmp['AD'],
  172. 'AE' => $item['AE'],
  173. 'AF' => $tmp['AF'],
  174. 'AG' => $tmp['AG'],
  175. 'AH' => $tmp['AH'],
  176. 'AI' => $tmp['AI'],
  177. 'AJ' => $item['AJ'],
  178. 'AK' => $item['AK'],
  179. 'AL' => $item['AL'],
  180. 'AM' => $hr_status['AM'],
  181. 'AN' => $hr_status['AN'],
  182. 'AO' => $hr_status['AO'],
  183. 'AP' => $tmp['AP'],
  184. ];
  185. }
  186. return $hrs;
  187. }
  188. public function getRandHr() {
  189. // AM 互认状态
  190. // AN 不互认原因编码
  191. // AO 不互认原因
  192. $AM = rand(0, 2);
  193. $BHRS = [
  194. [
  195. "code"=> "01",
  196. "name"=> "因病情变化,已有的检查检验结果难以反映患者当前实际病情的;"
  197. ],
  198. [
  199. "code"=> "02",
  200. "name"=> "检查检验结果与疾病发展关联程度高、变化较大或较快的;"
  201. ],
  202. [
  203. "code"=> "03",
  204. "name"=> "检查检验项目对于疾病诊疗意义重大的(如手术、输血等重大医疗措施前);"
  205. ],
  206. [
  207. "code"=> "04",
  208. "name"=> "已有的检查检验结果与患者临床表现、疾病诊断不符,难以满足临床诊疗需求的;"
  209. ],
  210. [
  211. "code"=> "05",
  212. "name"=> "对已有检查检验结果存疑的;"
  213. ],
  214. [
  215. "code"=> "06",
  216. "name"=> "图像质量和方法不能满足诊断要求的医学影像学检查;"
  217. ],
  218. [
  219. "code"=> "07",
  220. "name"=> "患者处于急诊、急救等紧急状态下的;"
  221. ],
  222. [
  223. "code"=> "08",
  224. "name"=> "患者或其家属要求进一步复查的;"
  225. ],
  226. [
  227. "code"=> "09",
  228. "name"=> "涉及司法、伤残及病退等鉴定的;"
  229. ],
  230. [
  231. "code"=> "10",
  232. "name"=> "其他符合诊疗需要,确需复查的情形;"
  233. ],
  234. [
  235. "code"=> "11",
  236. "name"=> "系统数据异常或错误。"
  237. ]
  238. ];
  239. $AN = '';
  240. $AO = '';
  241. if($AM === 2) {
  242. $BHR = $BHRS[rand(0, count($BHRS) - 1)];
  243. $AN = $BHR['code'];
  244. $AO = $BHR['name'];
  245. }
  246. return [
  247. 'AM' => $AM,
  248. 'AN' => $AN,
  249. 'AO' => $AO,
  250. ];
  251. }
  252. public function getItems($PATIENT_CODE) {
  253. $examModel = new ExamReport();
  254. $items = array();
  255. $exams = $examModel->where('PATIENT_CODE', $PATIENT_CODE)->where('HR_ITEMNAME_CODE', '<>', null)->select();
  256. foreach($exams as $exam) {
  257. $items[] = [
  258. 'AE' => $exam['REPORTID'],
  259. 'AJ' => $exam['HR_ITEMNAME'],
  260. 'AK' => $exam['HR_ITEMNAME_CODE'],
  261. 'AL' => '1',
  262. ];
  263. }
  264. $inspectModel = new InspectReport();
  265. $inspects = $inspectModel->where('PATIENT_CODE', $PATIENT_CODE)->select();
  266. $INSPECT_REPORT_CODE = [];
  267. foreach($inspects as $inspect) {
  268. if($inspect['LAB_HR_ITEMNAME_CODE']) {
  269. $items[] = [
  270. 'AE' => $inspect['REPORTID'],
  271. 'AJ' => $inspect['LAB_HR_ITEMNAME'],
  272. 'AK' => $inspect['LAB_HR_ITEMNAME_CODE'],
  273. 'AL' => '2',
  274. ];
  275. } else {
  276. $INSPECT_REPORT_CODE[] = $inspect['INSPECT_REPORT_CODE'];
  277. }
  278. }
  279. $labModel = new LabData();
  280. if(count($INSPECT_REPORT_CODE) > 0) {
  281. $labs = $labModel->where('INSPECT_REPORT_CODE', 'in' , $INSPECT_REPORT_CODE)->select();
  282. foreach($labs as $lab) {
  283. if($lab['LAB_HR_ITEMDETAILNAME_CODE']) {
  284. $items[] = [
  285. 'AE' => $lab['REPORTID'],
  286. 'AJ' => $lab['LAB_HR_ITEMDETAILNAME'],
  287. 'AK' => $lab['LAB_HR_ITEMDETAILNAME_CODE'],
  288. 'AL' => '2',
  289. ];
  290. }
  291. }
  292. }
  293. return $items;
  294. }
  295. }