PatientServies.php 45 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157
  1. <?php
  2. declare (strict_types=1);
  3. namespace app\zskk\servies;
  4. use app\common\library\Gm;
  5. use app\common\library\Handle;
  6. use app\zskk\model\Mpi;
  7. use app\zskk\model\Patient;
  8. use think\db\exception\DataNotFoundException;
  9. use think\db\exception\DbException;
  10. use think\db\exception\ModelNotFoundException;
  11. use think\Exception;
  12. use think\facade\Config;
  13. use Throwable;
  14. use app\common\controller\ZskkApi;
  15. use app\zskk\model\BiInspectReport;
  16. use app\zskk\model\DelBiInspectReport;
  17. use app\zskk\model\DelExamReport;
  18. use app\zskk\model\DelInspectReport;
  19. use app\zskk\model\DelLabData;
  20. use app\zskk\model\DelMedicalInformation;
  21. use app\zskk\model\DelPatient;
  22. use app\zskk\model\ExamReport;
  23. use app\zskk\model\HospitalPatient;
  24. use app\zskk\model\InspectReport;
  25. use app\zskk\model\LabData;
  26. use app\zskk\model\MedicalInformation;
  27. use think\facade\Db;
  28. class PatientServies
  29. {
  30. public $patientModel = null;
  31. public $commonServies = null;
  32. public function __construct(Patient $patientModel, CommonServies $commonServies)
  33. {
  34. // parent::__construct();
  35. $this->patientModel = $patientModel;
  36. $this->commonServies = $commonServies;
  37. }
  38. /**
  39. * @throws DataNotFoundException
  40. * @throws ModelNotFoundException
  41. * @throws DbException
  42. * @throws Exception
  43. */
  44. public function makeMappingData($params, $mpKey='0', $action='save', $type=1): array
  45. {
  46. $return = [];
  47. $mapping = $this->patientModel->getMapping(['mpKey'=>$mpKey,'action'=>$action,'param_type'=>$type]);
  48. $all = $this->patientModel->getAllMapping(['action'=>$action,'param_type'=>$type]);
  49. $allMapping = [];
  50. foreach ($all as $k=>$v)
  51. {
  52. $allMapping[$v['mpKey']][] = $v;
  53. }
  54. $mappingArr = [];
  55. foreach ($mapping as $v)
  56. {
  57. $childMapping = [];
  58. if($v['type'] == 'object' || $v['type'] == 'array')
  59. {
  60. $childMapping = $allMapping[$v['mKey']] ?? [];
  61. }
  62. $child = [];
  63. if(!empty($childMapping))
  64. {
  65. foreach ($childMapping as $value)
  66. {
  67. $child[$value['mKey']] = ['key'=>$value['key'],'mpKey'=>$value['mpKey'],'mKey'=>$v['mKey'],'type'=>$value['type'],'action'=>$v['action']];
  68. }
  69. }
  70. $mappingArr[$v['mKey']] = ['key'=>$v['key'],'mpKey'=>$v['mpKey'],'mKey'=>$v['mKey'],'type'=>$v['type'],'child'=>$child,'action'=>$v['action']];
  71. }
  72. foreach ($params as $k=>$v)
  73. {
  74. if(is_array($v))
  75. {
  76. foreach ($v as $key=>$value)
  77. {
  78. if(is_array($value))
  79. {
  80. $returnArr = $this->makeMappingData($value,$mappingArr[$k]['mKey'],$mappingArr[$k]['action'],$type);
  81. $return[$mappingArr[$k]['key']][] = $returnArr;
  82. }else{
  83. if(!empty($mappingArr[$k]['child']))
  84. {
  85. if(isset($mappingArr[$k]['child'][$key]['key']))
  86. {
  87. $return[$mappingArr[$k]['key']][$mappingArr[$k]['child'][$key]['key']] = $value;
  88. }
  89. }
  90. }
  91. }
  92. }else{
  93. if(isset($mappingArr[$k]['key']))
  94. {
  95. $return[$mappingArr[$k]['key']] = $v;
  96. }
  97. }
  98. }
  99. return $return;
  100. }
  101. public function saveMpi($mpi, $idCard,$mpiKey)
  102. {
  103. $this->patientModel->saveMpi($mpi,$idCard,$mpiKey);
  104. }
  105. public function savePatient($data,$mpi,$mpiKey,$patientCode):void
  106. {
  107. $arr = $this->makePatient($data,$mpi,$mpiKey,$patientCode);
  108. $this->patientModel->save($arr);
  109. }
  110. /**
  111. * @throws DataNotFoundException
  112. * @throws \think\exception\DbException
  113. * @throws ModelNotFoundException
  114. * @throws DbException
  115. */
  116. public function getMpi($idCard)
  117. {
  118. $idCard = Gm::encrypt(Config::get('gm.key'),$idCard);
  119. return $this->patientModel->getMpi($idCard);
  120. }
  121. public function makePatient($data, $mpi,$mpiKey, $patientCode): array
  122. {
  123. $arr = [];
  124. $arr['MPI'] = $mpi;
  125. $arr['MPI_KEY'] = $mpiKey;
  126. $arr['PATIENT_CODE'] = $patientCode;
  127. $arr['NAME'] = $data['NAME'] ?? '';
  128. $arr['INSUR_CARD_NO'] = $data['INSUR_CARD_NO'] ?? '';
  129. $arr['ID_CARD_CODE'] = $data['ID_CARD_CODE'] ?? '';
  130. $arr['ID_CARD'] = $data['ID_CARD'] ?? '';
  131. $arr['ID_CARDNUM'] = $data['ID_CARDNUM'] ?? '';
  132. $arr['GENDER'] = $data['GENDER'] ?? '';
  133. $arr['GENDER_CODE'] = $data['GENDER_CODE'] ?? '';
  134. $arr['BIRTH_DATE'] = $data['BIRTH_DATE'] ?? '';
  135. $arr['MARITAL_STATUS_CODE'] = $data['MARITAL_STATUS_CODE'] ?? '';
  136. $arr['MARITAL_STATUS'] = $data['MARITAL_STATUS'] ?? '';
  137. $arr['ADDRESS'] = $data['ADDRESS'] ?? '';
  138. $arr['ECARD_NO'] = $data['ECARD_NO'] ?? '';
  139. return $arr;
  140. }
  141. public function saveMedical($medical,$mpi,$patientCode):void
  142. {
  143. $arr = $this->makeMedical($medical,$mpi,$patientCode);
  144. $this->patientModel->saveMedical($arr);
  145. }
  146. public function makeMedical($medical,$mpi,$patientCode):array
  147. {
  148. $arr = [];
  149. $arr['MPI'] = $mpi;
  150. $arr['PATIENT_CODE'] = $patientCode;
  151. $arr['SERIESNUM'] = $medical['SERIESNUM'];
  152. $arr['CLASS_CODE'] = $medical['CLASS_CODE'];
  153. $arr['CLASS'] = $medical['CLASS'];
  154. $arr['ENCOUNTER_CARD_NO'] = $medical['ENCOUNTER_CARD_NO'];
  155. $arr['RECORD_CODE'] = $medical['RECORD_CODE'];
  156. $arr['HOS_EMPI'] = $medical['HOS_EMPI'];
  157. $arr['NAME'] = $medical['NAME'];
  158. $arr['ENCOUNTER_DATE'] = $medical['ENCOUNTER_DATE'];
  159. $arr['DEPTNAME'] = $medical['DEPTNAME'];
  160. $arr['CHIEFCOMPLAINT'] = $medical['CHIEFCOMPLAINT'];
  161. $arr['ORGCODE'] = $medical['ORGCODE'];
  162. $arr['ORGNAME'] = $medical['ORGNAME'];
  163. $arr['AGE'] = $medical['AGE'];
  164. $arr['GENDER'] = $medical['GENDER'];
  165. $arr['GENDER_CODE'] = $medical['GENDER_CODE'];
  166. return $arr;
  167. }
  168. public function saveDiagnose($diagnose, $patientCode)
  169. {
  170. $arr = [];
  171. foreach ($diagnose as $v)
  172. {
  173. $data = $this->makeDiagnose($v,$patientCode);
  174. $arr[] = $data;
  175. }
  176. $this->patientModel->saveDiagnose($arr);
  177. }
  178. public function makeDiagnose($diagnose, $patientCode):array
  179. {
  180. $data = [];
  181. $data['PATIENT_CODE'] = $patientCode;
  182. $data['DIAGNOSECODE'] = $diagnose['DIAGNOSECODE'];
  183. $data['DIAGNOSENAME'] = $diagnose['DIAGNOSENAME'];
  184. return $data;
  185. }
  186. public function saveApplication($application, $mpi, $patientCode):void
  187. {
  188. $arr = [];
  189. foreach ($application as $v)
  190. {
  191. $data = $this->makeApplication($v,$mpi,$patientCode);
  192. $arr[] = $data;
  193. }
  194. $this->patientModel->saveApplication($arr);
  195. }
  196. public function makeApplication($application, $mpi, $patientCode):array
  197. {
  198. $data = [];
  199. $applicationCode = Handle::makeApplicationCode($patientCode,$application['REQUESTID']);
  200. $data['MPI'] = $mpi;
  201. $data['PATIENT_CODE'] = $patientCode;
  202. $data['EXAM_APPLICATION_CODE'] = $applicationCode;
  203. $data['REQUESTID'] = $application['REQUESTID'];
  204. $data['NAME'] = $application['NAME'];
  205. $data['SERIESNUM'] = $application['SERIESNUM'];
  206. $data['DEVICETYPE'] = $application['DEVICETYPE'];
  207. $data['DEVICETYPE_CODE'] = $application['DEVICETYPE_CODE'];
  208. $data['EXAM_ITEMNAME'] = $application['EXAM_ITEMNAME'];
  209. $data['EXAM_ITEMNAME_CODE'] = $application['EXAM_ITEMNAME_CODE'];
  210. $data['BODYSITE_CATEG'] = $application['BODYSITE_CATEG'];
  211. $data['BODYSITE_CATEG_CODE'] = $application['BODYSITE_CATEG_CODE'];
  212. $data['BODYSITE'] = $application['BODYSITE'];
  213. $data['EXAM_METHOD'] = $application['EXAM_METHOD'];
  214. $data['ORGCODE'] = $application['ORGCODE'];
  215. $data['ORGNAME'] = $application['ORGNAME'];
  216. $data['DEPTNAME'] = $application['DEPTNAME'];
  217. $data['PRACTITIONERNAME'] = $application['PRACTITIONERNAME'];
  218. $data['REQUESTTIME'] = $application['REQUESTTIME'];
  219. $data['AGE'] = $application['AGE'];
  220. $data['GENDER'] = $application['GENDER'];
  221. $data['GENDER_CODE'] = $application['GENDER_CODE'];
  222. return $data;
  223. }
  224. public function saveOrders($orders,$mpi,$patientCode): void
  225. {
  226. $arr = [];
  227. $medicalOrderCode = '';
  228. foreach ($orders as $k=>$v)
  229. {
  230. $data = $this->makeOrders($v,$mpi,$patientCode);
  231. $arr[] = $data;
  232. }
  233. $this->patientModel->saveOrders($arr);
  234. }
  235. public function makeOrders($orders,$mpi,$patientCode):array
  236. {
  237. $medicalOrderCode = Handle::makeMedicalOrderCode($patientCode,$orders['ORDERID'],$orders['LAB_ITEMNAME_CODE']);
  238. $data = [];
  239. $data['MPI'] = $mpi;
  240. $data['PATIENT_CODE'] = $patientCode;
  241. $data['MEDICAL_ORDER_CODE'] = $medicalOrderCode;
  242. $data['ORDERID'] = $orders['ORDERID'];
  243. $data['NAME'] = $orders['NAME'];
  244. $data['SERIESNUM'] = $orders['SERIESNUM'];
  245. $data['LAB_ITEMNAME'] = $orders['LAB_ITEMNAME'];
  246. $data['LAB_ITEMNAME_CODE'] = $orders['LAB_ITEMNAME_CODE'];
  247. $data['SPECIMEN_TYPE'] = $orders['SPECIMEN_TYPE'];
  248. $data['SPECIMEN_NUM'] = $orders['SPECIMEN_NUM'];
  249. $data['SPECIMEN_STATUS'] = $orders['SPECIMEN_STATUS'];
  250. $data['SPECIMEN_COLLETIME'] = $orders['SPECIMEN_COLLETIME'];
  251. $data['SPECIMEN_RECEITIME'] = $orders['SPECIMEN_RECEITIME'];
  252. $data['ORGCODE'] = $orders['ORGCODE'];
  253. $data['ORGNAME'] = $orders['ORGNAME'];
  254. $data['DEPTNAME'] = $orders['DEPTNAME'];
  255. $data['PRACTITIONERNAME'] = $orders['PRACTITIONERNAME'];
  256. $data['REQUESTTIME'] = $orders['REQUESTTIME'];
  257. $data['REPORTSTATUS'] = $orders['REPORTSTATUS'];
  258. $data['REPORTSTATUS_CODE'] = $orders['REPORTSTATUS_CODE'];
  259. $data['AGE'] = $orders['AGE'];
  260. $data['GENDER'] = $orders['GENDER'];
  261. $data['GENDER_CODE'] = $orders['GENDER_CODE'];
  262. $data['TYPE'] = $orders['TYPE'];
  263. return $data;
  264. }
  265. public function saveExamReport($exam,$mpi,$patientCode,$exam_code = false): void
  266. {
  267. $arr = [];
  268. foreach ($exam as $v)
  269. {
  270. $data = $this->makeExamReport($v,$mpi,$patientCode,$exam_code);
  271. $data['IMAGES'] = $this->makeUrl($data['IMAGES']);
  272. $arr[] = $data;
  273. }
  274. $this->patientModel->saveExamReport($arr);
  275. }
  276. public function makeExamReport($exam,$mpi,$patientCode,$exam_code):array
  277. {
  278. $examReportCode = Handle::makeExamReportCode($patientCode,$exam['REPORTID']);
  279. $applicationCode = Handle::makeApplicationCode($patientCode,$exam['EXAM_REQUESTID']);
  280. $data = [];
  281. $data['MPI'] = $mpi;
  282. $data['PATIENT_CODE'] = $patientCode;
  283. $data['EXAM_APPLICATION_CODE'] = $applicationCode;
  284. $data['EXAM_REPORT_CODE'] = $examReportCode;
  285. $data['NAME'] = $exam['NAME'];
  286. $data['SERIESNUM'] = $exam['SERIESNUM'];
  287. $data['EXAM_REQUESTID'] = $exam['EXAM_REQUESTID'];
  288. $data['REPORTID'] = $exam['REPORTID'];
  289. $data['EXAM_ITEMNAME'] = $exam['EXAM_ITEMNAME'];
  290. $data['BODYSITE_CATEG'] = $exam['BODYSITE_CATEG'];
  291. $data['BODYSITE_CATEG_CODE'] = $exam['BODYSITE_CATEG_CODE'];
  292. $data['BODYSITE'] = $exam['BODYSITE'];
  293. $data['OBSERVATIONS_COMMENT'] = $exam['OBSERVATIONS_COMMENT'];
  294. $data['OBSERVATIONS_RESULT'] = $exam['OBSERVATIONS_RESULT'];
  295. $data['IMAGES'] = $exam['IMAGES'];
  296. $data['DICOM_INDEXID'] = $exam['DICOM_INDEXID'];
  297. $data['ORGCODE'] = $exam['ORGCODE'];
  298. $data['ORGNAME'] = $exam['ORGNAME'];
  299. $data['DEPTNAME'] = $exam['DEPTNAME'];
  300. $data['PRACTITIONERNAME'] = $exam['PRACTITIONERNAME'];
  301. $data['AUDITNAME'] = $exam['AUDITNAME'];
  302. $data['REPORTTIME'] = $exam['REPORTTIME'];
  303. $data['REPORTSTATUS'] = $exam['REPORTSTATUS'];
  304. $data['GENDER'] = $exam['GENDER'];
  305. $data['GENDER_CODE'] = $exam['GENDER_CODE'];
  306. $data['AGE'] = $exam['AGE'];
  307. $data['STUDYTIME'] = $exam['STUDYTIME'];
  308. // $data['EXAM_ITEMNAME_CODE'] = $exam_code;
  309. return $data;
  310. }
  311. public function saveInspectReport($inspect, $mpi, $patientCode): void
  312. {
  313. $arr = [];
  314. $labArr = [];
  315. $labArrOrganism = [];
  316. foreach ($inspect as $v) {
  317. $inspectReportCode = Handle::makeInspectReportCode($patientCode, $v['REPORTID']);
  318. $data = $this->makeInspect($v,$mpi,$patientCode,$inspectReportCode);
  319. $arr[] = $data;
  320. foreach ($v['INSPECT_REPORT_ITEMS'] as $value)
  321. {
  322. // $lab = $this->makeLab($value,$inspectReportCode);
  323. $lab = $this->makeLabOrganism($value,$inspectReportCode);
  324. $labArr[] = $lab;
  325. }
  326. // if($v['type'] == 1)
  327. // {
  328. // // 正常检验
  329. // }else{
  330. // // 微生物检验
  331. // foreach ($v['INSPECT_REPORT_ITEMS'] as $value)
  332. // {
  333. // $lab2 = $this->makeLabOrganism($value,$inspectReportCode);
  334. // $labArrOrganism[] = $lab2;
  335. // }
  336. // }
  337. }
  338. $this->patientModel->saveInspectReport($arr);
  339. if(!empty($labArr)) {
  340. $this->patientModel->saveLabData($labArr);
  341. }
  342. // if(!empty($labArrOrganism))
  343. // {
  344. // $this->patientModel->saveLabDataOrganism($labArrOrganism);
  345. // }
  346. }
  347. public function makeInspect($inspect,$mpi,$patientCode,$inspectReportCode)
  348. {
  349. $data = [];
  350. $medicalOrderCode = Handle::makeMedicalOrderCode($patientCode,$inspect['EXAM_REQUESTID'],$inspect['LAB_ITEMNAME_CODE']);
  351. $data['MPI'] = $mpi;
  352. $data['PATIENT_CODE'] = $patientCode;
  353. $data['MEDICAL_ORDER_CODE'] = $medicalOrderCode;
  354. $data['INSPECT_REPORT_CODE'] = $inspectReportCode;
  355. $data['NAME'] = $inspect['NAME'];
  356. $data['SERIESNUM'] = $inspect['SERIESNUM'];
  357. $data['EXAM_REQUESTID'] = $inspect['EXAM_REQUESTID'];
  358. $data['REPORTID'] = $inspect['REPORTID'];
  359. $data['LAB_ITEMNAME'] = $inspect['LAB_ITEMNAME'];
  360. $data['LAB_ITEMNAME_CODE'] = $inspect['LAB_ITEMNAME_CODE'];
  361. $data['LAB_ITEMNAME_NUMBER'] = $inspect['LAB_ITEMNAME_NUMBER'];
  362. $data['LAB_HR_STATUS'] = $inspect['LAB_HR_STATUS'];
  363. $data['LAB_HR_ITEMNAME'] = $inspect['LAB_HR_ITEMNAME'];
  364. $data['LAB_HR_ITEMNAME_CODE'] = $inspect['LAB_HR_ITEMNAME_CODE'];
  365. $data['SPECIMEN_TYPE'] = $inspect['SPECIMEN_TYPE'];
  366. $data['ORGNAME'] = $inspect['ORGNAME'];
  367. $data['ORGCODE'] = $inspect['ORGCODE'];
  368. $data['PRACTITIONERNAME'] = $inspect['PRACTITIONERNAME'];
  369. $data['DEPTNAME'] = $inspect['DEPTNAME'];
  370. $data['REPORTTIME'] = $inspect['REPORTTIME'];
  371. $data['AUDITNAME'] = $inspect['AUDITNAME'];
  372. $data['REPORTSTATUS'] = $inspect['REPORTSTATUS'];
  373. $data['GENDER'] = $inspect['GENDER'];
  374. $data['GENDER_CODE'] = $inspect['GENDER_CODE'];
  375. $data['AGE'] = $inspect['AGE'];
  376. $data['TYPE'] = $inspect['TYPE'];
  377. return $data;
  378. }
  379. public function saveHospitalPatient($mpiKey, $mpi, $patientCode, $patientData, $medical, $diagnoses, $orders, $application) {
  380. $data = $this->makeHospitalPatientData($mpiKey, $mpi, $patientCode, $patientData, $medical, $diagnoses, $orders, $application);
  381. $model = new HospitalPatient();
  382. $model->save($data);
  383. }
  384. private function makeHospitalPatientData($mpiKey, $mpi, $patientCode, $patientData, $medical, $diagnoses, $orders, $applications) {
  385. $data = [];
  386. $patient = $this->makePatient($patientData,$mpi, $mpiKey,$patientCode);
  387. $medical = $this->makeMedical($medical,$mpiKey,$patientCode);
  388. $diagnose = $this->makeDiagnoseNameAndCodes($diagnoses);
  389. $order = $this->makeOrderNameAndCodes($orders);
  390. $application = $this->makeApplicationsNameAndCodes($applications);
  391. $data['MPI_KEY'] = $mpiKey;
  392. $data['PATIENT_CODE'] = $patient['PATIENT_CODE'];
  393. $data['ORGNAME'] = $medical['ORGNAME'];
  394. $data['NAME'] = $patient['NAME'];
  395. $data['GENDER'] = $patient['GENDER'];
  396. $data['AGE'] = $medical['AGE'];
  397. $data['ID_CARDNUM'] = $patient['ID_CARDNUM'];
  398. $data['MPI'] = $mpi;
  399. $data['ENCOUNTER_DATE'] = $medical['ENCOUNTER_DATE'];
  400. $data['CHIEFCOMPLAINT'] = $medical['CHIEFCOMPLAINT'];
  401. $data['DIAGNOSENAME'] = $diagnose['DIAGNOSENAME'];
  402. $data['LAB_ITEMNAME'] = $order['LAB_ITEMNAME'];
  403. $data['EXAM_ITEMNAME'] = $application['EXAM_ITEMNAME'];
  404. $data['INSUR_CARD_NO'] = $patient['INSUR_CARD_NO'];
  405. $data['ID_CARD_CODE'] = $patient['ID_CARD_CODE'];
  406. $data['ID_CARD'] = $patient['ID_CARD'];
  407. $data['GENDER_CODE'] = $patient['GENDER_CODE'];
  408. $data['BIRTH_DATE'] = $patient['BIRTH_DATE'];
  409. $data['MARITAL_STATUS_CODE'] = $patient['MARITAL_STATUS_CODE'];
  410. $data['MARITAL_STATUS'] = $patient['MARITAL_STATUS'];
  411. $data['ADDRESS'] = $patient['ADDRESS'];
  412. $data['ECARD_NO'] = $patient['ECARD_NO'];
  413. $data['SERIESNUM'] = $medical['SERIESNUM'];
  414. $data['CLASS_CODE'] = $medical['CLASS_CODE'];
  415. $data['CLASS'] = $medical['CLASS'];
  416. $data['ENCOUNTER_CARD_NO'] = $medical['ENCOUNTER_CARD_NO'];
  417. $data['RECORD_CODE'] = $medical['RECORD_CODE'];
  418. $data['HOS_EMPI'] = $medical['HOS_EMPI'];
  419. $data['DEPTNAME'] = $medical['DEPTNAME'];
  420. $data['DIAGNOSECODE'] = $diagnose['DIAGNOSECODE'];
  421. $data['LAB_ITEMNAME_CODE'] = $order['LAB_ITEMNAME_CODE'];
  422. $data['EXAM_ITEMNAME_CODE'] = $application['EXAM_ITEMNAME_CODE'];
  423. $data['ORGCODE'] = $medical['ORGCODE'];
  424. return $data;
  425. }
  426. public function makeUploadHospitalPatient($patientCode): array
  427. {
  428. $where = ['PATIENT_CODE'=>$patientCode];
  429. $patient = $this->patientModel->getPatient($where);
  430. if(empty($patient))
  431. {
  432. $where['MPI_KEY'] = '';
  433. return $where;
  434. }
  435. $medical = $this->patientModel->getMedical($patientCode);
  436. $exam = $this->patientModel->getExam($patientCode);
  437. $inspect = $this->patientModel->getInspect($patientCode);
  438. $data['PATIENT_CODE'] = $patient['PATIENT_CODE'];
  439. $data['MPI_KEY'] = $patient['MPI_KEY'];
  440. $data['NAME'] = $patient['NAME'];
  441. $data['GENDER'] = $patient['GENDER'];
  442. $data['ORGNAME'] = $medical['ORGNAME'];
  443. $data['AGE'] = $medical['AGE'];
  444. $age_last = substr( $data['AGE'], -1);
  445. $age_num = substr( $data['AGE'], 0,-1);
  446. $last = match ($age_last) {
  447. 'Y' => '365',
  448. 'M' => '30',
  449. 'W' => '7',
  450. 'D' => '1',
  451. default => $age_last,
  452. };
  453. $data['AGE_DAY'] = $last*$age_num;
  454. $data['ID_CARDNUM'] = $patient['ID_CARDNUM'];
  455. $data['MPI'] = $patient['MPI'];
  456. $data['ENCOUNTER_DATE'] = $medical['ENCOUNTER_DATE'];
  457. $data['CHIEFCOMPLAINT'] = $medical['CHIEFCOMPLAINT'];
  458. $data['DIAGNOSENAME'] = $medical['DIAGNOSENAME'];
  459. if(!empty($inspect))
  460. {
  461. $code = [];
  462. $code_name = [];
  463. foreach ($inspect as $v)
  464. {
  465. if(!empty($v['LAB_HR_ITEMNAME_CODE']))
  466. {
  467. $code[] = $v['LAB_HR_ITEMNAME_CODE'];
  468. $code_name[] = $v['LAB_HR_ITEMNAME'];
  469. }else{
  470. // $inspectItem = $this->patientModel->getLab($v['INSPECT_REPORT_CODE']);
  471. // foreach ($inspectItem as $value)
  472. // {
  473. // if(!empty($value['LAB_HR_ITEMDETAILNAME_CODE']))
  474. // {
  475. // $code[] = $value['LAB_HR_ITEMDETAILNAME_CODE'];
  476. // $code_name[] = $value['LAB_HR_ITEMDETAILNAME'];
  477. // }
  478. // }
  479. }
  480. }
  481. $data['LAB_ITEMNAME'] = implode(',',$code_name); //检验项目
  482. $data['LAB_ITEMNAME_CODE'] = implode(',',$code);
  483. }
  484. if(!empty($exam))
  485. {
  486. $item_exam = [];
  487. $item_exam_code = [];
  488. foreach ($exam as $k=>$v)
  489. {
  490. $item_exam[] = $v['HR_ITEMNAME'];
  491. $item_exam_code[] = $v['HR_ITEMNAME_CODE'];
  492. }
  493. $data['EXAM_ITEMNAME'] = implode(',',$item_exam); //检查项目
  494. $data['EXAM_ITEMNAME_CODE'] = implode(',',$item_exam_code); //检查项目
  495. }
  496. $data['ID_CARD_CODE'] = $patient['ID_CARD_CODE'];
  497. $data['ID_CARD'] = $patient['ID_CARD'];
  498. $data['GENDER_CODE'] = $patient['GENDER_CODE'];
  499. $data['BIRTH_DATE'] = $patient['BIRTH_DATE'];
  500. $data['SERIESNUM'] = $medical['SERIESNUM'];
  501. $data['CLASS_CODE'] = $medical['CLASS_CODE'];
  502. $data['CLASS'] = $medical['CLASS'];
  503. $data['ENCOUNTER_CARD_NO'] = $medical['ENCOUNTER_CARD_NO'];
  504. $data['HOS_EMPI'] = $medical['HOS_EMPI'];
  505. $data['DEPTNAME'] = $medical['DEPTNAME'];
  506. $data['DIAGNOSECODE'] = $medical['DIAGNOSECODE'];
  507. $data['ORGCODE'] = $medical['ORGCODE'];
  508. // todo
  509. $data['create_time'] = $medical['ENCOUNTER_DATE'];
  510. return $data;
  511. }
  512. public function saveUploadHospitalPatient($patientCode)
  513. {
  514. $data = $this->makeUploadHospitalPatient($patientCode);
  515. $this->patientModel->HospitalPatient($data);
  516. }
  517. private function makeDiagnoseNameAndCodes($diagnoses) {
  518. $DIAGNOSECODES = array_map(function($diagnose) {
  519. return $diagnose['DIAGNOSECODE'];
  520. }, $diagnoses);
  521. $DIAGNOSENAMES = array_map(function($diagnose) {
  522. return $diagnose['DIAGNOSENAME'];
  523. }, $diagnoses);
  524. return [
  525. 'DIAGNOSECODE' => implode(',', $DIAGNOSECODES),
  526. 'DIAGNOSENAME' => implode(',', $DIAGNOSENAMES)
  527. ];
  528. }
  529. private function makeOrderNameAndCodes($orders) {
  530. $LAB_ITEMNAME_CODES = array_map(function($order) {
  531. return $order['LAB_ITEMNAME_CODE'];
  532. }, $orders);
  533. $LAB_ITEMNAMES = array_map(function($order) {
  534. return $order['LAB_ITEMNAME'];
  535. }, $orders);
  536. return [
  537. 'LAB_ITEMNAME_CODE' => implode(',', $LAB_ITEMNAME_CODES),
  538. 'LAB_ITEMNAME' => implode(',', $LAB_ITEMNAMES)
  539. ];
  540. }
  541. private function makeApplicationsNameAndCodes($applications) {
  542. $EXAM_ITEMNAME_CODES = array_map(function($application) {
  543. return $application['EXAM_ITEMNAME_CODE'];
  544. }, $applications);
  545. $EXAM_ITEMNAMES = array_map(function($application) {
  546. return $application['EXAM_ITEMNAME'];
  547. }, $applications);
  548. return [
  549. 'EXAM_ITEMNAME_CODE' => implode(',', $EXAM_ITEMNAME_CODES),
  550. 'EXAM_ITEMNAME' => implode(',', $EXAM_ITEMNAMES)
  551. ];
  552. }
  553. public function makeLab($lab,$inspectReportCode)
  554. {
  555. $labArr = [];
  556. $labArr['INSPECT_REPORT_CODE'] = $inspectReportCode;
  557. $labArr['INSPECT_REPORT_ITEM_CODE'] = Handle::makeInspectReportItemCode($inspectReportCode,$lab['LAB_ITEMDETAILNAME_CODE']);
  558. $labArr['EXAM_REQUESTID'] = $lab['EXAM_REQUESTID'];
  559. $labArr['REPORTID'] = $lab['REPORTID'];
  560. $labArr['ORGCODE'] = $lab['ORGCODE'];
  561. $labArr['LAB_ITEMDETAILNAME'] = $lab['LAB_ITEMDETAILNAME'];
  562. $labArr['LAB_ITEMDETAILNAME_NUMBER'] = $lab['LAB_ITEMDETAILNAME_NUMBER'];
  563. $labArr['LAB_ITEMDETAILNAME_CODE'] = $lab['LAB_ITEMDETAILNAME_CODE'];
  564. $labArr['LAB_ITEMDETAILVALUE'] = $lab['LAB_ITEMDETAILVALUE'];
  565. $labArr['LAB_ITEMDETAILSPEC'] = $lab['LAB_ITEMDETAILSPEC'];
  566. $labArr['LAB_ITEMDETAILINTERPRETATION'] = $lab['LAB_ITEMDETAILINTERPRETATION'];
  567. $labArr['LAB_ITEMDETAILRANGE'] = $lab['LAB_ITEMDETAILRANGE'];
  568. $labArr['CRITICAL_RANGE'] = $lab['CRITICAL_RANGE'];
  569. $labArr['LAB_HR_ITEMDETAIL_STATUS'] = $lab['LAB_HR_ITEMDETAIL_STATUS'];
  570. $labArr['LAB_HR_ITEMDETAILNAME'] = $lab['LAB_HR_ITEMDETAILNAME'];
  571. $labArr['LAB_HR_ITEMDETAILNAME_CODE'] = $lab['LAB_HR_ITEMDETAILNAME_CODE'];
  572. return $labArr;
  573. }
  574. public function makeLabOrganism($lab,$inspectReportCode)
  575. {
  576. $data['INSPECT_REPORT_CODE'] = $inspectReportCode;
  577. $data['INSPECT_REPORT_ITEM_CODE'] = Handle::makeInspectReportItemCode($inspectReportCode,$lab['LAB_ITEMDETAILNAME_CODE']);
  578. $data['EXAM_REQUESTID'] = $lab['EXAM_REQUESTID'] ?? '';
  579. $data['REPORTID'] = $lab['REPORTID'] ?? '';
  580. $data['ORGCODE'] = $lab['ORGCODE'] ?? '';
  581. $data['LAB_ITEMDETAILNAME'] = $lab['LAB_ITEMDETAILNAME'] ?? '';
  582. $data['LAB_ITEMDETAILNAME_EN'] = $lab['LAB_ITEMDETAILNAME_EN'] ?? '';
  583. $data['LAB_ITEMDETAILNAME_CODE'] = $lab['LAB_ITEMDETAILNAME_CODE'] ?? '';
  584. $data['LAB_ITEMDETAILNAME_NUMBER'] = $lab['LAB_ITEMDETAILNAME_NUMBER'] ?? '';
  585. $data['LAB_ITEMDETAILVALUE'] = $lab['LAB_ITEMDETAILVALUE'] ?? '';
  586. $data['LAB_ITEMDETAILSPEC'] = $lab['LAB_ITEMDETAILSPEC'] ?? '';
  587. $data['LAB_ITEMDETAILINTERPRETATION'] = $lab['LAB_ITEMDETAILINTERPRETATION'] ?? '';
  588. $data['LAB_ITEMDETAILINTERPRETATION_BIA'] = $lab['LAB_ITEMDETAILINTERPRETATION_BIA'] ?? '';
  589. $data['LAB_ITEMDETAILRANGE'] = $lab['LAB_ITEMDETAILRANGE'] ?? '';
  590. $data['CRITICAL_RANGE'] = $lab['CRITICAL_RANGE'] ?? '';
  591. $data['LAB_HR_ITEMDETAIL_STATUS'] = $lab['LAB_HR_ITEMDETAIL_STATUS'] ?? '';
  592. $data['LAB_HR_ITEMDETAILNAME'] = $lab['LAB_HR_ITEMDETAILNAME'] ?? '';
  593. $data['LAB_HR_ITEMDETAILNAME_CODE'] = $lab['LAB_HR_ITEMDETAILNAME_CODE'] ?? '';
  594. $data['LAB_METHOD'] = $lab['LAB_METHOD'] ?? '';
  595. $data['KB'] = $lab['KB'] ?? '';
  596. $data['MIC'] = $lab['MIC'] ?? '';
  597. $data['LAB_ITEMDETAILINTERPRE'] = $lab['LAB_ITEMDETAILINTERPRE'] ?? '';
  598. return $data;
  599. }
  600. // /**
  601. // * @throws ModelNotFoundException
  602. // * @throws DbException
  603. // * @throws DataNotFoundException
  604. // */
  605. // public function getPatient($where): array|string
  606. // {
  607. // $patient = $this->patientModel->getPatient($where);
  608. // if(empty($patient))
  609. // {
  610. // return '无法找到患者信息';
  611. // }
  612. // $medical = $this->patientModel->getMedical($patient['PATIENT_CODE']);
  613. // $mpi = $this->patientModel->getMpiByKey($patient['MPI']);
  614. // $diagnoses = $this->patientModel->getDiagnoses($patient['PATIENT_CODE']);
  615. // $application = $this->patientModel->getApplication($patient['PATIENT_CODE']);
  616. // $orders = $this->patientModel->getOrders($patient['PATIENT_CODE']);
  617. // $exam = $this->patientModel->getExam($patient['PATIENT_CODE']);
  618. // $app_data = [];
  619. // foreach ($application as $key=>$value)
  620. // {
  621. // $app_data[$value['EXAM_APPLICATION_CODE']] = $value['DEVICETYPE_CODE'];
  622. // }
  623. // foreach ($exam as $kkk=>$vvv)
  624. // {
  625. // $exam[$kkk]['DEVICETYPE_CODE'] = $app_data[$vvv['EXAM_APPLICATION_CODE']] ?? '';
  626. // }
  627. // $inspect = $this->patientModel->getInspect($patient['PATIENT_CODE']);
  628. // foreach ($inspect as $kk=>$vv)
  629. // {
  630. // $lab = $this->patientModel->getLab($vv['INSPECT_REPORT_CODE']);
  631. // $inspect[$kk]['INSPECT_REPORT_ITEMS'] = $lab;
  632. // }
  633. // unset($patient['ID']);
  634. // unset($patient['PATIENT_CODE']);
  635. // unset($patient['MPI']);
  636. // $patient['MPI'] = $mpi;
  637. // unset($patient['create_time']);
  638. // unset($patient['update_time']);
  639. // return [
  640. // 'PATIENT'=>$patient,
  641. // 'MEDICAL_INFORMATION'=>$medical,
  642. // 'DIAGNOSES'=>$diagnoses,
  643. // 'EXAM_APPLICATIONS'=>$application,
  644. // 'MEDICAL_ORDERS'=>$orders,
  645. // 'EXAM_REPORTS'=>$exam,
  646. // 'INSPECT_REPORTS'=>$inspect
  647. // ];
  648. // }
  649. /**
  650. * @throws ModelNotFoundException
  651. * @throws DbException
  652. * @throws DataNotFoundException
  653. */
  654. public function getPatient($where): array|string
  655. {
  656. $patient = $this->patientModel->getPatient($where);
  657. if(empty($patient))
  658. {
  659. return '无法找到患者信息';
  660. }
  661. $patient = $patient->toArray();
  662. $medical = $this->patientModel->getMedical($patient['PATIENT_CODE']);
  663. $medical = empty($medical) ? $medical : $medical->toArray();
  664. $exam = $this->patientModel->getExam($patient['PATIENT_CODE']);
  665. $inspect = $this->patientModel->getInspect($patient['PATIENT_CODE']);
  666. unset($patient['PATIENT_CODE']);
  667. foreach ($inspect as $k=>$v)
  668. {
  669. $lab = $this->patientModel->getLab($v['INSPECT_REPORT_CODE']);
  670. $inspect[$k]['INSPECT_REPORT_ITEMS'] = $lab;
  671. unset($inspect[$k]['INSPECT_REPORT_CODE']);
  672. }
  673. $data = [
  674. 'PATIENT'=>$patient,
  675. 'MEDICAL_INFORMATION'=>$medical,
  676. 'EXAM_REPORTS'=>$exam,
  677. 'INSPECT_REPORTS'=>$inspect
  678. ];
  679. return $data;
  680. }
  681. public function updateMiddleStatus($id, $update): void
  682. {
  683. $this->patientModel->updateMiddleStatus($id, $update);
  684. }
  685. public function checkPostExamReport($params): array {
  686. $PATIENT = $this->commonServies->handlePATIENT($params['PATIENT'], $params['MEDICAL_INFORMATION']);
  687. $MEDICAL_INFORMATION = $this->commonServies->handleMEDICAL_INFORMATION($params['MEDICAL_INFORMATION'], $PATIENT);
  688. $EXAM = $this->commonServies->handleEXAM($params['EXAM_REPORTS'], $MEDICAL_INFORMATION);
  689. $EXAM_APPLICATIONS = $EXAM['EXAM_APPLICATIONS'];
  690. $EXAM_REPORTS = $EXAM['EXAM_REPORTS'];
  691. foreach ($EXAM_REPORTS as &$v)
  692. {
  693. if(!empty($v['REPORT']))
  694. {
  695. $v['REPORT'] = $this->makeUrl($v['REPORT']);
  696. }
  697. }
  698. return [
  699. "PATIENT" => $PATIENT,
  700. "MEDICAL_INFORMATION" => $MEDICAL_INFORMATION,
  701. "EXAM_APPLICATIONS" => $EXAM_APPLICATIONS,
  702. "EXAM_REPORTS" => $EXAM_REPORTS,
  703. ];
  704. }
  705. public function checkPostLisReport($params): array {
  706. $PATIENT = $this->commonServies->handlePATIENT($params['PATIENT'], $params['MEDICAL_INFORMATION']);
  707. $MEDICAL_INFORMATION = $this->commonServies->handleMEDICAL_INFORMATION($params['MEDICAL_INFORMATION'], $PATIENT);
  708. $reportModel = $this->commonServies->handleINSPECT_REPORTS($params['INSPECT_REPORTS'], $MEDICAL_INFORMATION);
  709. $INSPECT_REPORTS = $reportModel['INSPECT_REPORTS'];
  710. $INSPECT_REPORT_ITEMS = $reportModel['INSPECT_REPORT_ITEMS'];
  711. foreach ($INSPECT_REPORTS as &$v)
  712. {
  713. if(!empty($v['REPORT']))
  714. {
  715. $v['REPORT'] = $this->makeUrl($v['REPORT']);
  716. }
  717. }
  718. return [
  719. "PATIENT" => $PATIENT,
  720. "MEDICAL_INFORMATION" => $MEDICAL_INFORMATION,
  721. "INSPECT_REPORTS" => $INSPECT_REPORTS,
  722. "INSPECT_REPORT_ITEMS" => $INSPECT_REPORT_ITEMS,
  723. ];
  724. }
  725. /*
  726. * 上传检查数据
  727. */
  728. public function postExamReport($params): string
  729. {
  730. // try {
  731. $check = $this->checkPostExamReport($params);
  732. $this->handlePatient($check['PATIENT']);
  733. $MEDICAL_INFORMATION = $check['MEDICAL_INFORMATION'];
  734. $information = $this->patientModel->getMedical($MEDICAL_INFORMATION['PATIENT_CODE'],'*');
  735. if(!empty($information))
  736. {
  737. $this->patientModel->saveRepeatInformation($information);
  738. $this->patientModel->delOldInformation(['PATIENT_CODE'=>$information['PATIENT_CODE']]);
  739. }
  740. $MEDICAL_INFORMATION_INSERT = $MEDICAL_INFORMATION;
  741. $MEDICAL_INFORMATION_INSERT['create_time'] = $check['EXAM_REPORTS'][0]['create_time'];
  742. $this->patientModel->saveMedical($MEDICAL_INFORMATION_INSERT);
  743. $EXAM_REPORTS = $check['EXAM_REPORTS'];
  744. $EXAM_REPORTS_INSERT = [];
  745. foreach ($EXAM_REPORTS as $k=>$v)
  746. {
  747. $report = $this->patientModel->getExamReport(['EXAM_REPORT_CODE'=>$v['EXAM_REPORT_CODE']],'*');
  748. if(!empty($report))
  749. {
  750. $this->patientModel->saveRepeatReport($report);
  751. $this->patientModel->delOldReport(['EXAM_REPORT_CODE'=>$v['EXAM_REPORT_CODE']]);
  752. }
  753. $EXAM_REPORTS_INSERT[] = $v;
  754. }
  755. $this->patientModel->saveExamReport($EXAM_REPORTS_INSERT);
  756. $this->saveUploadHospitalPatient($MEDICAL_INFORMATION['PATIENT_CODE']);
  757. return 'success';
  758. // }catch (\Exception $e)
  759. // {
  760. // return $e->getMessage();
  761. // }
  762. }
  763. public function makeUrl($base64_string)
  764. {
  765. if(empty($base64_string))
  766. {
  767. return '';
  768. }
  769. // 将Base64字符串分割成数据和文件类型
  770. list($type, $data) = explode(';', $base64_string);
  771. list(,$hz) = explode('/',$type);
  772. list(, $data) = explode(',', $data);
  773. // 将Base64解码成二进制数据
  774. $decodedData = base64_decode($data);
  775. $filePath = $_SERVER['DOCUMENT_ROOT'].'/report/'.time().rand(0,9999).'.'.$hz; // 本地文件路径
  776. $savePath = $_SERVER['HTTP_HOST'].'/report/'.time().rand(0,9999).'.'.$hz; // 本地文件路径
  777. // 将数据写入到文件
  778. file_put_contents($filePath, $decodedData);
  779. return $savePath;
  780. }
  781. /*
  782. * 删除检验数据
  783. */
  784. public function delLabReport($params,$orgCode)
  785. {
  786. $INSPECT_REPORT = $this->checkDelLibReport($params,$orgCode);
  787. $this->doneDelLibReport($INSPECT_REPORT);
  788. }
  789. /*
  790. * 删除检查数据
  791. */
  792. public function delExamReport($params,$orgCode)
  793. {
  794. $EXAM_REPORT = $this->checkDelExamReport($params,$orgCode);
  795. $this->doneDelExamReport($EXAM_REPORT);
  796. }
  797. public function checkDelLibReport($params,$orgCode) {
  798. $REPORTID = $params['REPORTID'];
  799. $ID_CARDNUM = $params['ID_CARDNUM'];
  800. return $this->getINSPECT_REPORT($REPORTID, $ID_CARDNUM,$orgCode);
  801. }
  802. public function checkDelExamReport($params,$orgCode) {
  803. $REQUESTID = $params['REQUESTID'];
  804. $ID_CARDNUM = $params['ID_CARDNUM'];
  805. return $this->getEXAM_REPORT($REQUESTID, $ID_CARDNUM,$orgCode);
  806. }
  807. public function getEXAM_REPORT($REQUESTID, $ID_CARDNUM,$orgCode) {
  808. $mpiModel = new Mpi();
  809. $mpiData = $mpiModel
  810. ->where('ID_CARDNUM', Gm::encrypt(Config::get('gm.key'), $ID_CARDNUM))
  811. ->find();
  812. $model = new ExamReport();
  813. $report = $model
  814. ->where('REQUESTID', $REQUESTID)
  815. ->where('ORGCODE', $orgCode)
  816. ->where('MPI', $mpiData['MPI'])
  817. ->find();
  818. if(!$report) {
  819. // todo 未找到检查报告异常抛出
  820. }
  821. return $report;
  822. }
  823. public function getINSPECT_REPORT($REPORTID, $ID_CARDNUM,$orgCode) {
  824. $mpiModel = new Mpi();
  825. $mpiData = $mpiModel
  826. ->where('ID_CARDNUM', Gm::encrypt(Config::get('gm.key'), $ID_CARDNUM))
  827. ->find();
  828. // todo 根据报告单号和身份证号获取检验报告标识
  829. $model = new InspectReport();
  830. $report = $model
  831. ->where('REPORTID', $REPORTID)
  832. ->where('ORGCODE', $orgCode)
  833. ->where('MPI', $mpiData['MPI'])
  834. ->find();
  835. if(!$report) {
  836. // todo 未找到检验报告异常抛出
  837. }
  838. return $report;
  839. }
  840. public function doneDelLibReport($INSPECT_REPORT) {
  841. Db::startTrans();
  842. try {
  843. $newModel = new DelInspectReport();
  844. $this->_delModelAndCreateNewModel($INSPECT_REPORT, $newModel);
  845. $this->doneDelLabData($INSPECT_REPORT['INSPECT_REPORT_CODE']);
  846. $this->doneDelBiInspectReport($INSPECT_REPORT['INSPECT_REPORT_CODE']);
  847. $this->doneDelMedicalInformation($INSPECT_REPORT['PATIENT_CODE']);
  848. $this->doneUpdateHrData($INSPECT_REPORT['PATIENT_CODE']);
  849. $this->doneUpdateCache($INSPECT_REPORT['PATIENT_CODE']);
  850. Db::commit();
  851. } catch(Exception $e) {
  852. Db::rollback();
  853. }
  854. }
  855. public function doneDelLabData($INSPECT_REPORT_CODE) {
  856. $model = new LabData();
  857. $labs = $model->where('INSPECT_REPORT_CODE', $INSPECT_REPORT_CODE)->select();
  858. foreach($labs as $lab) {
  859. $this->_delModelAndCreateNewModel($lab, new DelLabData());
  860. }
  861. }
  862. public function doneUpdateHrData($PATIENT_CODE) {
  863. // TODO 更新互认相关数据 hospital_patient
  864. $this->saveUploadHospitalPatient($PATIENT_CODE);
  865. }
  866. public function doneUpdateCache($PATIENT_CODE) {
  867. // TODO 更新相关缓存数据
  868. // 记录PATIENT_CODE删除时间和内容
  869. }
  870. public function doneDelBiInspectReport($INSPECT_REPORT_CODE) {
  871. $model = new BiInspectReport();
  872. $labs = $model->where('INSPECT_REPORT_CODE', $INSPECT_REPORT_CODE)->select();
  873. foreach($labs as $lab) {
  874. $this->_delModelAndCreateNewModel($lab, new DelBiInspectReport());
  875. }
  876. }
  877. public function doneDelExamReport($EXAM_REPORT) {
  878. Db::startTrans();
  879. try {
  880. $newModel = new DelExamReport();
  881. $this->_delModelAndCreateNewModel($EXAM_REPORT, $newModel);
  882. $this->doneDelMedicalInformation($EXAM_REPORT['PATIENT_CODE']);
  883. $this->doneUpdateHrData($EXAM_REPORT['PATIENT_CODE']);
  884. $this->doneUpdateCache($EXAM_REPORT['PATIENT_CODE']);
  885. Db::commit();
  886. } catch(Exception $e) {
  887. Db::rollback();
  888. }
  889. }
  890. public function _delModelAndCreateNewModel($dataModel, $newModel) {
  891. $id = $dataModel['ID'];
  892. $arr = $dataModel;
  893. $arr['del_time'] = time();
  894. unset($arr['ID']);
  895. $newModel->save($dataModel);
  896. $dataModel->where('ID',$id)->delete();
  897. }
  898. public function doneDelMedicalInformation($PATIENT_CODE) {
  899. $examModel = new ExamReport();
  900. $res = $examModel->field('PATIENT_CODE')->where('PATIENT_CODE', $PATIENT_CODE)->find();
  901. if($res) {
  902. return;
  903. }
  904. $inspectModel = new InspectReport();
  905. $res = $inspectModel->field('PATIENT_CODE')->where('PATIENT_CODE', $PATIENT_CODE)->find();
  906. if($res) {
  907. return;
  908. }
  909. $model = new MedicalInformation();
  910. $newModel = new DelMedicalInformation();
  911. $info = $model->where('PATIENT_CODE', $PATIENT_CODE)->find();
  912. $this->_delModelAndCreateNewModel($info, $newModel);
  913. $this->doneDelPatient($PATIENT_CODE);
  914. }
  915. public function doneDelPatient($PATIENT_CODE) {
  916. $model = new Patient();
  917. $newModel = new DelPatient();
  918. $patient = $model->where('PATIENT_CODE', $PATIENT_CODE)->find();
  919. $this->_delModelAndCreateNewModel($patient, $newModel);
  920. }
  921. /*
  922. * 上传检验数据
  923. */
  924. public function postLabReport($params): string
  925. {
  926. // try{
  927. $check = $this->checkPostLisReport($params);
  928. $this->handlePatient($check['PATIENT']);
  929. $MEDICAL_INFORMATION = $check['MEDICAL_INFORMATION'];
  930. $information = $this->patientModel->getMedical($MEDICAL_INFORMATION['PATIENT_CODE'],'*');
  931. if(!empty($information))
  932. {
  933. $this->patientModel->saveRepeatInformation($information);
  934. $this->patientModel->delOldInformation(['PATIENT_CODE'=>$information['PATIENT_CODE']]);
  935. }
  936. $MEDICAL_INFORMATION_INSERT = $MEDICAL_INFORMATION;
  937. $MEDICAL_INFORMATION_INSERT['create_time'] = $check['INSPECT_REPORTS'][0]['create_time'];
  938. $this->patientModel->saveMedical($MEDICAL_INFORMATION_INSERT);
  939. $INSPECT_REPORTS = $check['INSPECT_REPORTS'];
  940. $INSPECT_REPORTS_INSERT = [];
  941. $newArr = [];
  942. $hrNullData = [];
  943. $INSPECT_REPORT_CODE = [];
  944. $bi = [];
  945. foreach ($INSPECT_REPORTS as $k=>$v)
  946. {
  947. $INSPECT_REPORT_CODE[] = $v['INSPECT_REPORT_CODE'];
  948. $inspect = $this->patientModel->getInspectData(['INSPECT_REPORT_CODE'=>$v['INSPECT_REPORT_CODE']],'*');
  949. if(!empty($inspect))
  950. {
  951. //存在 删除并存储历史
  952. $this->patientModel->saveRepeatInspect($inspect);
  953. $this->patientModel->delOldInspect(['INSPECT_REPORT_CODE'=>$v['INSPECT_REPORT_CODE']]);
  954. }
  955. if(!empty($v['LAB_HR_ITEMNAME_CODE']))
  956. {
  957. $newArr[] = $v;
  958. $bi[] = $v['INSPECT_REPORT_CODE'];
  959. }else{
  960. $hrNullData[$v['INSPECT_REPORT_CODE']] = $v;
  961. }
  962. $INSPECT_REPORTS_INSERT[] = $v;
  963. }
  964. if(!empty($INSPECT_REPORTS_INSERT))
  965. {
  966. $this->patientModel->saveInspectReport($INSPECT_REPORTS_INSERT);
  967. }
  968. if(!empty($INSPECT_REPORT_CODE))
  969. {
  970. $oldItems = $this->patientModel->getOldLab($INSPECT_REPORT_CODE);
  971. if(!empty($oldItems))
  972. {
  973. $this->patientModel->delOldLab($INSPECT_REPORT_CODE);
  974. $delItems = [];
  975. foreach ($oldItems as $k=>$v)
  976. {
  977. unset($v['ID']);
  978. $delItems[] = $v;
  979. }
  980. if(!empty($delItems))
  981. {
  982. $this->patientModel->saveRepeatLab($delItems);
  983. }
  984. }
  985. }
  986. $INSPECT_REPORT_ITEMS = $check['INSPECT_REPORT_ITEMS'];
  987. $INSPECT_REPORT_ITEMS_INSERT = [];
  988. foreach ($INSPECT_REPORT_ITEMS as $k=>$v)
  989. {
  990. if(isset($hrNullData[$v['INSPECT_REPORT_CODE']]))
  991. {
  992. // 存在互认项目编码为空的检验报告子项
  993. $labChild = $hrNullData[$v['INSPECT_REPORT_CODE']];
  994. $labChild['LAB_HR_ITEMNAME_CODE'] = $v['LAB_HR_ITEMDETAILNAME_CODE'];
  995. $labChild['LAB_HR_ITEMNAME'] = $v['LAB_HR_ITEMDETAILNAME'];
  996. $newArr[] = $labChild;
  997. $bi[] = $v['INSPECT_REPORT_CODE'];
  998. }
  999. $INSPECT_REPORT_ITEMS_INSERT[] = $v;
  1000. }
  1001. if(!empty($INSPECT_REPORT_ITEMS_INSERT))
  1002. {
  1003. $this->patientModel->saveLabData($INSPECT_REPORT_ITEMS_INSERT);
  1004. }
  1005. if(!empty($newArr))
  1006. {
  1007. $biInspect = $this->patientModel->getBiInspect($bi);
  1008. foreach ($biInspect as $k=>$v)
  1009. {
  1010. unset($biInspect[$k]['ID']);
  1011. }
  1012. $this->patientModel->saveRepeatBiInspect($biInspect);
  1013. $this->patientModel->delBiInspect($bi);
  1014. $this->patientModel->saveBiInspect($newArr);
  1015. }
  1016. $this->saveUploadHospitalPatient($check['PATIENT']['PATIENT_CODE']);
  1017. return 'success';
  1018. // }catch (\Exception $e)
  1019. // {
  1020. // return $e->getMessage();
  1021. // }
  1022. }
  1023. public function checkExam($data)
  1024. {
  1025. $info = $this->patientModel->getPatient(['PATIENT_CODE'=>$data['PATIENT_CODE']],'*');
  1026. return $info;
  1027. }
  1028. public function saveNormalPatient($params, $mpiKey, $patientCode, $mpi): void
  1029. {
  1030. $mpiData = $this->patientModel->getMpi($params['ID_CARDNUM']);
  1031. if(!empty($mpiData))
  1032. {
  1033. $this->saveMpi($mpi,$params['ID_CARDNUM'],$mpiKey);
  1034. }
  1035. $PData = $this->patientModel->getPatient(['PATIENT_CODE'=>$patientCode]);
  1036. if(empty($PData))
  1037. {
  1038. // 直接存储 患者信息
  1039. $this->savePatient($params['PATIENT'],$mpi,$mpiKey,$patientCode);
  1040. }else{
  1041. // todo 存储到备用表里
  1042. // $patient = $this->makePatient($params,$mpiKey,$patientCode);
  1043. }
  1044. $MData = $this->patientModel->getMedical($patientCode);
  1045. if(empty($MData))
  1046. {
  1047. // 直接存储 就诊信息
  1048. $this->saveMedical($params['MEDICAL_INFORMATION'],$mpiKey,$patientCode);
  1049. }else{
  1050. // todo 存储到备用表里
  1051. }
  1052. }
  1053. /**
  1054. * @param $PATIENT1
  1055. * @return void
  1056. */
  1057. public function handlePatient($PATIENT1)
  1058. {
  1059. $PATIENT = $PATIENT1;
  1060. $data = $this->checkExam($PATIENT);
  1061. if ($data) {
  1062. //存在 删除 并存储历史记录
  1063. $this->patientModel->saveRepeatPatient($data);
  1064. $this->patientModel->delOldPatient(['PATIENT_CODE'=>$data['PATIENT_CODE']]);
  1065. }
  1066. $this->patientModel->save($PATIENT);
  1067. }
  1068. public function getIdCard($mpi)
  1069. {
  1070. $mpiData = $this->patientModel->getMpiData(['MPI'=>$mpi]);
  1071. return $mpiData['ID_CARDNUM'];
  1072. }
  1073. }