PatientServies.php 48 KB

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