PatientServies.php 50 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319
  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,$all ): 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. $examWhere = [];
  670. if($all == '0')
  671. {
  672. $examWhere = ['RECOG_STATUS'=>'*'];
  673. }
  674. $exam = $this->patientModel->getExam($patient['PATIENT_CODE'],$examWhere);
  675. if(!empty($exam) && $RESULT == 1)
  676. {
  677. return $exam;
  678. }
  679. $inspect = $this->patientModel->getInspect($patient['PATIENT_CODE']);
  680. unset($patient['PATIENT_CODE']);
  681. $inspectData = [];
  682. $return = false;
  683. foreach ($inspect as $k=>$v)
  684. {
  685. $RECOG = 0;
  686. if($v['RECOG_STATUS'] == '*' && $RESULT == 1)
  687. {
  688. $RECOG = 1;
  689. $return = true;
  690. }
  691. $lab = $this->patientModel->getLab($v['INSPECT_REPORT_CODE']);
  692. if(!empty($lab))
  693. {
  694. foreach ($lab as $key=>$value)
  695. {
  696. if($value['RECOG_STATUS'] == '*')
  697. {
  698. $RECOG = 1;
  699. }
  700. }
  701. }
  702. if($RECOG == 1)
  703. {
  704. $return = true;
  705. $v['LAB_DATA'] = $lab;
  706. $inspectData[] = $v;
  707. }
  708. }
  709. $data = [
  710. 'PATIENT'=>$patient,
  711. 'MEDICAL_INFORMATION'=>$medical,
  712. 'EXAM_REPORTS'=>$exam,
  713. 'INSPECT_REPORTS'=>$inspectData
  714. ];
  715. if($RESULT == 1)
  716. {
  717. return $return;
  718. }else{
  719. return $data;
  720. }
  721. }
  722. /**
  723. * @throws ModelNotFoundException
  724. * @throws DbException
  725. * @throws DataNotFoundException
  726. */
  727. public function getHrPatient($where,$hr=0,$medicalWhere = []): array|string
  728. {
  729. $patient = $this->patientModel->getPatient($where);
  730. if(empty($patient))
  731. {
  732. return '无法找到患者信息';
  733. }
  734. $patient = $patient->toArray();
  735. $medical = $this->patientModel->getMedical($patient['PATIENT_CODE'],$medicalWhere);
  736. $medical = empty($medical) ? $medical : $medical->toArray();
  737. $examWhere = [];
  738. $inspectWhere = [];
  739. if($hr == 1)
  740. {
  741. $examWhere = ['RECOG_STATUS'=>'*'];
  742. $inspectWhere = ['RECOG_STATUS'=>'*'];
  743. }
  744. $exam = $this->patientModel->getExam($patient['PATIENT_CODE'],$examWhere);
  745. $inspect = $this->patientModel->getInspect($patient['PATIENT_CODE'],$inspectWhere);
  746. unset($patient['PATIENT_CODE']);
  747. foreach ($inspect as $k=>$v)
  748. {
  749. $lab = $this->patientModel->getLab($v['INSPECT_REPORT_CODE']);
  750. $inspect[$k]['INSPECT_REPORT_ITEMS'] = $lab;
  751. unset($inspect[$k]['INSPECT_REPORT_CODE']);
  752. }
  753. $data = [
  754. 'PATIENT'=>$patient,
  755. 'MEDICAL_INFORMATION'=>$medical,
  756. 'EXAM_REPORTS'=>$exam,
  757. 'INSPECT_REPORTS'=>$inspect
  758. ];
  759. return $data;
  760. }
  761. /**
  762. * @throws ModelNotFoundException
  763. * @throws DbException
  764. * @throws DataNotFoundException
  765. */
  766. public function getPatient($where,$medicalWhere = []): array|string
  767. {
  768. $patient = $this->patientModel->getPatient($where);
  769. if(empty($patient))
  770. {
  771. return '无法找到患者信息';
  772. }
  773. $patient = $patient->toArray();
  774. $medical = $this->patientModel->getMedical($patient['PATIENT_CODE'],$medicalWhere);
  775. $medical = empty($medical) ? $medical : $medical->toArray();
  776. $exam = $this->patientModel->getExam($patient['PATIENT_CODE']);
  777. $inspect = $this->patientModel->getInspect($patient['PATIENT_CODE']);
  778. unset($patient['PATIENT_CODE']);
  779. foreach ($inspect as $k=>$v)
  780. {
  781. $lab = $this->patientModel->getLab($v['INSPECT_REPORT_CODE']);
  782. $inspect[$k]['INSPECT_REPORT_ITEMS'] = $lab;
  783. unset($inspect[$k]['INSPECT_REPORT_CODE']);
  784. }
  785. $data = [
  786. 'PATIENT'=>$patient,
  787. 'MEDICAL_INFORMATION'=>$medical,
  788. 'EXAM_REPORTS'=>$exam,
  789. 'INSPECT_REPORTS'=>$inspect
  790. ];
  791. return $data;
  792. }
  793. public function updateMiddleStatus($id, $update): void
  794. {
  795. $this->patientModel->updateMiddleStatus($id, $update);
  796. }
  797. public function checkPostExamReport($params): array {
  798. $PATIENT = $this->commonServies->handlePATIENT($params['PATIENT'], $params['MEDICAL_INFORMATION']);
  799. $MEDICAL_INFORMATION = $this->commonServies->handleMEDICAL_INFORMATION($params['MEDICAL_INFORMATION'], $PATIENT);
  800. $EXAM = $this->commonServies->handleEXAM($params['EXAM_REPORTS'], $MEDICAL_INFORMATION);
  801. // $EXAM_APPLICATIONS = $EXAM['EXAM_APPLICATIONS'];
  802. $EXAM_REPORTS = $EXAM['EXAM_REPORTS'];
  803. foreach ($EXAM_REPORTS as &$v)
  804. {
  805. if(!empty($v['REPORT']))
  806. {
  807. $v['REPORT'] = $this->makeUrl($v['REPORT']);
  808. }
  809. }
  810. return [
  811. "PATIENT" => $PATIENT,
  812. "MEDICAL_INFORMATION" => $MEDICAL_INFORMATION,
  813. // "EXAM_APPLICATIONS" => $EXAM_APPLICATIONS,
  814. "EXAM_REPORTS" => $EXAM_REPORTS,
  815. ];
  816. }
  817. public function checkPostLisReport($params): array {
  818. $PATIENT = $this->commonServies->handlePATIENT($params['PATIENT'], $params['MEDICAL_INFORMATION']);
  819. $MEDICAL_INFORMATION = $this->commonServies->handleMEDICAL_INFORMATION($params['MEDICAL_INFORMATION'], $PATIENT);
  820. $reportModel = $this->commonServies->handleINSPECT_REPORTS($params, $MEDICAL_INFORMATION);
  821. $INSPECT_REPORTS = $reportModel['INSPECT_REPORTS'];
  822. $INSPECT_REPORT_ITEMS = $reportModel['INSPECT_REPORT_ITEMS'];
  823. foreach ($INSPECT_REPORTS as &$v)
  824. {
  825. if(!empty($v['REPORT']))
  826. {
  827. $v['REPORT'] = $this->makeUrl($v['REPORT']);
  828. }
  829. }
  830. return [
  831. "PATIENT" => $PATIENT,
  832. "MEDICAL_INFORMATION" => $MEDICAL_INFORMATION,
  833. "INSPECT_REPORTS" => $INSPECT_REPORTS,
  834. "INSPECT_REPORT_ITEMS" => $INSPECT_REPORT_ITEMS,
  835. ];
  836. }
  837. /*
  838. * 上传检查数据
  839. */
  840. public function postExamInfo($params): string
  841. {
  842. // try {
  843. $check = $this->checkPostExamReport($params);
  844. $this->handlePatient($check['PATIENT']);
  845. $MEDICAL_INFORMATION = $check['MEDICAL_INFORMATION'];
  846. $information = $this->patientModel->getMedical($MEDICAL_INFORMATION['PATIENT_CODE'],[],'*');
  847. if(!empty($information))
  848. {
  849. $this->patientModel->saveRepeatInformation($information);
  850. $this->patientModel->delOldInformation(['PATIENT_CODE'=>$information['PATIENT_CODE']]);
  851. }
  852. $MEDICAL_INFORMATION_INSERT = $MEDICAL_INFORMATION;
  853. $MEDICAL_INFORMATION_INSERT['create_time'] = $check['EXAM_REPORTS'][0]['create_time'];
  854. $this->patientModel->saveMedical($MEDICAL_INFORMATION_INSERT);
  855. $EXAM_REPORTS = $check['EXAM_REPORTS'];
  856. $this->saveExamData($EXAM_REPORTS);
  857. $this->saveUploadHospitalPatient($MEDICAL_INFORMATION['PATIENT_CODE']);
  858. return 'success';
  859. // }catch (\Exception $e)
  860. // {
  861. // return $e->getMessage();
  862. // }
  863. }
  864. public function postExamReport($params): string
  865. {
  866. $EXAM_REPORTS = $this->makeExamData($params['EXAM_REPORTS']);
  867. $report = $this->patientModel->getExamReport(['EXAM_REPORT_CODE'=>$EXAM_REPORTS['EXAM_REPORT_CODE']],'*');
  868. $report->save($EXAM_REPORTS);
  869. return 'success';
  870. }
  871. public function makeExamData($report)
  872. {
  873. $RESULT_STATUS = $this->commonServies->getRESULT_STATUSByCode($report['RESULT_STATUS_CODE']);
  874. $report['RESULT_STATUS'] = $RESULT_STATUS;
  875. return $report;
  876. }
  877. public function saveExamData($EXAM_REPORTS)
  878. {
  879. $EXAM_REPORTS_INSERT = [];
  880. foreach ($EXAM_REPORTS as $k=>$v)
  881. {
  882. $report = $this->patientModel->getExamReport(['EXAM_REPORT_CODE'=>$v['EXAM_REPORT_CODE']],'*');
  883. if(!empty($report))
  884. {
  885. $this->patientModel->saveRepeatReport($report);
  886. $this->patientModel->delOldReport(['EXAM_REPORT_CODE'=>$v['EXAM_REPORT_CODE']]);
  887. }
  888. $EXAM_REPORTS_INSERT[] = $v;
  889. }
  890. $this->patientModel->saveExamReport($EXAM_REPORTS_INSERT);
  891. }
  892. public function makeUrl($base64_string)
  893. {
  894. if(empty($base64_string))
  895. {
  896. return '';
  897. }
  898. // 将Base64字符串分割成数据和文件类型
  899. list($type, $data) = explode(';', $base64_string);
  900. list(,$hz) = explode('/',$type);
  901. list(, $data) = explode(',', $data);
  902. // 将Base64解码成二进制数据
  903. $decodedData = base64_decode($data);
  904. $filePath = $_SERVER['DOCUMENT_ROOT'].'/report/'.time().rand(0,9999).'.'.$hz; // 本地文件路径
  905. $savePath = $_SERVER['HTTP_HOST'].'/report/'.time().rand(0,9999).'.'.$hz; // 本地文件路径
  906. // 将数据写入到文件
  907. file_put_contents($filePath, $decodedData);
  908. return $savePath;
  909. }
  910. /*
  911. * 删除检验数据
  912. */
  913. public function delLabReport($params,$orgCode)
  914. {
  915. $INSPECT_REPORT = $this->checkDelLibReport($params,$orgCode);
  916. $this->doneDelLibReport($INSPECT_REPORT);
  917. }
  918. /*
  919. * 删除检查数据
  920. */
  921. public function delExamReport($params,$orgCode)
  922. {
  923. $EXAM_REPORT = $this->checkDelExamReport($params,$orgCode);
  924. $this->doneDelExamReport($EXAM_REPORT);
  925. }
  926. public function checkDelLibReport($params,$orgCode) {
  927. $REPORTID = $params['REPORTID'];
  928. $ID_CARDNUM = $params['ID_CARDNUM'];
  929. return $this->getINSPECT_REPORT($REPORTID, $ID_CARDNUM,$orgCode);
  930. }
  931. public function checkDelExamReport($params,$orgCode) {
  932. $REQUESTID = $params['REQUESTID'];
  933. $ID_CARDNUM = $params['ID_CARDNUM'];
  934. return $this->getEXAM_REPORT($REQUESTID, $ID_CARDNUM,$orgCode);
  935. }
  936. public function getEXAM_REPORT($REQUESTID, $ID_CARDNUM,$orgCode) {
  937. $mpiModel = new Mpi();
  938. $mpiData = $mpiModel
  939. ->where('ID_CARDNUM', Gm::encrypt(Config::get('gm.key'), $ID_CARDNUM))
  940. ->find();
  941. $model = new ExamReport();
  942. $report = $model
  943. ->where('REQUESTID', $REQUESTID)
  944. ->where('ORGCODE', $orgCode)
  945. ->where('MPI', $mpiData['MPI'])
  946. ->find();
  947. if(!$report) {
  948. // todo 未找到检查报告异常抛出
  949. }
  950. return $report;
  951. }
  952. public function getINSPECT_REPORT($REPORTID, $ID_CARDNUM,$orgCode) {
  953. $mpiModel = new Mpi();
  954. $mpiData = $mpiModel
  955. ->where('ID_CARDNUM', Gm::encrypt(Config::get('gm.key'), $ID_CARDNUM))
  956. ->find();
  957. // todo 根据报告单号和身份证号获取检验报告标识
  958. $model = new InspectReport();
  959. $report = $model
  960. ->where('REPORTID', $REPORTID)
  961. ->where('ORGCODE', $orgCode)
  962. ->where('MPI', $mpiData['MPI'])
  963. ->find();
  964. if(!$report) {
  965. // todo 未找到检验报告异常抛出
  966. }
  967. return $report;
  968. }
  969. public function doneDelLibReport($INSPECT_REPORT) {
  970. Db::startTrans();
  971. try {
  972. $newModel = new DelInspectReport();
  973. $this->_delModelAndCreateNewModel($INSPECT_REPORT, $newModel);
  974. $this->doneDelLabData($INSPECT_REPORT['INSPECT_REPORT_CODE']);
  975. $this->doneDelBiInspectReport($INSPECT_REPORT['INSPECT_REPORT_CODE']);
  976. $this->doneDelMedicalInformation($INSPECT_REPORT['PATIENT_CODE']);
  977. $this->doneUpdateHrData($INSPECT_REPORT['PATIENT_CODE']);
  978. $this->doneUpdateCache($INSPECT_REPORT['PATIENT_CODE']);
  979. Db::commit();
  980. } catch(Exception $e) {
  981. Db::rollback();
  982. }
  983. }
  984. public function doneDelLabData($INSPECT_REPORT_CODE) {
  985. $model = new LabData();
  986. $labs = $model->where('INSPECT_REPORT_CODE', $INSPECT_REPORT_CODE)->select();
  987. foreach($labs as $lab) {
  988. $this->_delModelAndCreateNewModel($lab, new DelLabData());
  989. }
  990. }
  991. public function doneUpdateHrData($PATIENT_CODE) {
  992. // TODO 更新互认相关数据 hospital_patient
  993. $this->saveUploadHospitalPatient($PATIENT_CODE);
  994. }
  995. public function doneUpdateCache($PATIENT_CODE) {
  996. // TODO 更新相关缓存数据
  997. // 记录PATIENT_CODE删除时间和内容
  998. }
  999. public function doneDelBiInspectReport($INSPECT_REPORT_CODE) {
  1000. $model = new BiInspectReport();
  1001. $labs = $model->where('INSPECT_REPORT_CODE', $INSPECT_REPORT_CODE)->select();
  1002. foreach($labs as $lab) {
  1003. $this->_delModelAndCreateNewModel($lab, new DelBiInspectReport());
  1004. }
  1005. }
  1006. public function doneDelExamReport($EXAM_REPORT) {
  1007. Db::startTrans();
  1008. try {
  1009. $newModel = new DelExamReport();
  1010. $this->_delModelAndCreateNewModel($EXAM_REPORT, $newModel);
  1011. $this->doneDelMedicalInformation($EXAM_REPORT['PATIENT_CODE']);
  1012. $this->doneUpdateHrData($EXAM_REPORT['PATIENT_CODE']);
  1013. $this->doneUpdateCache($EXAM_REPORT['PATIENT_CODE']);
  1014. Db::commit();
  1015. } catch(Exception $e) {
  1016. Db::rollback();
  1017. }
  1018. }
  1019. public function _delModelAndCreateNewModel($dataModel, $newModel) {
  1020. $id = $dataModel['ID'];
  1021. $arr = $dataModel;
  1022. $arr['del_time'] = time();
  1023. unset($arr['ID']);
  1024. $newModel->save($dataModel);
  1025. $dataModel->where('ID',$id)->delete();
  1026. }
  1027. public function doneDelMedicalInformation($PATIENT_CODE) {
  1028. $examModel = new ExamReport();
  1029. $res = $examModel->field('PATIENT_CODE')->where('PATIENT_CODE', $PATIENT_CODE)->find();
  1030. if($res) {
  1031. return;
  1032. }
  1033. $inspectModel = new InspectReport();
  1034. $res = $inspectModel->field('PATIENT_CODE')->where('PATIENT_CODE', $PATIENT_CODE)->find();
  1035. if($res) {
  1036. return;
  1037. }
  1038. $model = new MedicalInformation();
  1039. $newModel = new DelMedicalInformation();
  1040. $info = $model->where('PATIENT_CODE', $PATIENT_CODE)->find();
  1041. $this->_delModelAndCreateNewModel($info, $newModel);
  1042. $this->doneDelPatient($PATIENT_CODE);
  1043. }
  1044. public function doneDelPatient($PATIENT_CODE) {
  1045. $model = new Patient();
  1046. $newModel = new DelPatient();
  1047. $patient = $model->where('PATIENT_CODE', $PATIENT_CODE)->find();
  1048. $this->_delModelAndCreateNewModel($patient, $newModel);
  1049. }
  1050. /*
  1051. * 上传检验数据
  1052. */
  1053. public function postLabReport($params): string
  1054. {
  1055. // try{
  1056. $check = $this->checkPostLisReport($params);
  1057. $this->handlePatient($check['PATIENT']);
  1058. $MEDICAL_INFORMATION = $check['MEDICAL_INFORMATION'];
  1059. $information = $this->patientModel->getMedical($MEDICAL_INFORMATION['PATIENT_CODE'],[],'*');
  1060. if(!empty($information))
  1061. {
  1062. $this->patientModel->saveRepeatInformation($information);
  1063. $this->patientModel->delOldInformation(['PATIENT_CODE'=>$information['PATIENT_CODE']]);
  1064. }
  1065. $MEDICAL_INFORMATION_INSERT = $MEDICAL_INFORMATION;
  1066. $MEDICAL_INFORMATION_INSERT['create_time'] = $check['INSPECT_REPORTS'][0]['create_time'];
  1067. $this->patientModel->saveMedical($MEDICAL_INFORMATION_INSERT);
  1068. $INSPECT_REPORTS = $check['INSPECT_REPORTS'];
  1069. $INSPECT_REPORTS_INSERT = [];
  1070. $newArr = [];
  1071. $hrNullData = [];
  1072. $INSPECT_REPORT_CODE = [];
  1073. $bi = [];
  1074. foreach ($INSPECT_REPORTS as $k=>$v)
  1075. {
  1076. $INSPECT_REPORT_CODE[] = $v['INSPECT_REPORT_CODE'];
  1077. $inspect = $this->patientModel->getInspectData(['INSPECT_REPORT_CODE'=>$v['INSPECT_REPORT_CODE']],'*');
  1078. if(!empty($inspect))
  1079. {
  1080. //存在 删除并存储历史
  1081. $this->patientModel->saveRepeatInspect($inspect);
  1082. $this->patientModel->delOldInspect(['INSPECT_REPORT_CODE'=>$v['INSPECT_REPORT_CODE']]);
  1083. }
  1084. if(!empty($v['LAB_HR_ITEMNAME_CODE']))
  1085. {
  1086. $newArr[] = $v;
  1087. $bi[] = $v['INSPECT_REPORT_CODE'];
  1088. }else{
  1089. $hrNullData[$v['INSPECT_REPORT_CODE']] = $v;
  1090. }
  1091. $INSPECT_REPORTS_INSERT[] = $v;
  1092. }
  1093. if(!empty($INSPECT_REPORTS_INSERT))
  1094. {
  1095. $this->patientModel->saveInspectReport($INSPECT_REPORTS_INSERT);
  1096. }
  1097. if(!empty($INSPECT_REPORT_CODE))
  1098. {
  1099. $oldItems = $this->patientModel->getOldLab($INSPECT_REPORT_CODE);
  1100. if(!empty($oldItems))
  1101. {
  1102. $this->patientModel->delOldLab($INSPECT_REPORT_CODE);
  1103. $delItems = [];
  1104. foreach ($oldItems as $k=>$v)
  1105. {
  1106. unset($v['ID']);
  1107. $delItems[] = $v;
  1108. }
  1109. if(!empty($delItems))
  1110. {
  1111. $this->patientModel->saveRepeatLab($delItems);
  1112. }
  1113. }
  1114. }
  1115. $INSPECT_REPORT_ITEMS = $check['INSPECT_REPORT_ITEMS'];
  1116. $INSPECT_REPORT_ITEMS_INSERT = [];
  1117. foreach ($INSPECT_REPORT_ITEMS as $k=>$v)
  1118. {
  1119. if(isset($hrNullData[$v['INSPECT_REPORT_CODE']]))
  1120. {
  1121. // 存在互认项目编码为空的检验报告子项
  1122. $labChild = $hrNullData[$v['INSPECT_REPORT_CODE']];
  1123. $labChild['LAB_HR_ITEMNAME_CODE'] = $v['LAB_HR_ITEMDETAILNAME_CODE'];
  1124. $labChild['LAB_HR_ITEMNAME'] = $v['LAB_HR_ITEMDETAILNAME'];
  1125. $newArr[] = $labChild;
  1126. $bi[] = $v['INSPECT_REPORT_CODE'];
  1127. }
  1128. $INSPECT_REPORT_ITEMS_INSERT[] = $v;
  1129. }
  1130. if(!empty($INSPECT_REPORT_ITEMS_INSERT))
  1131. {
  1132. $this->patientModel->saveLabData($INSPECT_REPORT_ITEMS_INSERT);
  1133. }
  1134. if(!empty($newArr))
  1135. {
  1136. $biInspect = $this->patientModel->getBiInspect($bi);
  1137. foreach ($biInspect as $k=>$v)
  1138. {
  1139. unset($biInspect[$k]['ID']);
  1140. }
  1141. $this->patientModel->saveRepeatBiInspect($biInspect);
  1142. $this->patientModel->delBiInspect($bi);
  1143. $this->patientModel->saveBiInspect($newArr);
  1144. }
  1145. $this->saveUploadHospitalPatient($check['PATIENT']['PATIENT_CODE']);
  1146. return 'success';
  1147. // }catch (\Exception $e)
  1148. // {
  1149. // return $e->getMessage();
  1150. // }
  1151. }
  1152. public function checkExam($data)
  1153. {
  1154. $info = $this->patientModel->getPatient(['PATIENT_CODE'=>$data['PATIENT_CODE']],'*');
  1155. return $info;
  1156. }
  1157. public function saveNormalPatient($params, $mpiKey, $patientCode, $mpi): void
  1158. {
  1159. $mpiData = $this->patientModel->getMpi($params['ID_CARDNUM']);
  1160. if(!empty($mpiData))
  1161. {
  1162. $this->saveMpi($mpi,$params['ID_CARDNUM'],$mpiKey);
  1163. }
  1164. $PData = $this->patientModel->getPatient(['PATIENT_CODE'=>$patientCode]);
  1165. if(empty($PData))
  1166. {
  1167. // 直接存储 患者信息
  1168. $this->savePatient($params['PATIENT'],$mpi,$mpiKey,$patientCode);
  1169. }else{
  1170. // todo 存储到备用表里
  1171. // $patient = $this->makePatient($params,$mpiKey,$patientCode);
  1172. }
  1173. $MData = $this->patientModel->getMedical($patientCode);
  1174. if(empty($MData))
  1175. {
  1176. // 直接存储 就诊信息
  1177. $this->saveMedical($params['MEDICAL_INFORMATION'],$mpiKey,$patientCode);
  1178. }else{
  1179. // todo 存储到备用表里
  1180. }
  1181. }
  1182. /**
  1183. * @param $PATIENT1
  1184. * @return void
  1185. */
  1186. public function handlePatient($PATIENT1)
  1187. {
  1188. $PATIENT = $PATIENT1;
  1189. $data = $this->checkExam($PATIENT);
  1190. if ($data) {
  1191. //存在 删除 并存储历史记录
  1192. $this->patientModel->saveRepeatPatient($data);
  1193. $this->patientModel->delOldPatient(['PATIENT_CODE'=>$data['PATIENT_CODE']]);
  1194. }
  1195. $this->patientModel->save($PATIENT);
  1196. }
  1197. public function getIdCard($mpi)
  1198. {
  1199. $mpiData = $this->patientModel->getMpiData(['MPI'=>$mpi]);
  1200. return $mpiData['ID_CARDNUM'];
  1201. }
  1202. public function login($params)
  1203. {
  1204. if($params['username'] == 'admin' && $params['password'] == '123456')
  1205. {
  1206. return 'success';
  1207. }
  1208. return '账号或密码错误';
  1209. }
  1210. public function getHospitalData($params)
  1211. {
  1212. $data = $this->patientModel->getHospitalData($params);
  1213. return $data;
  1214. }
  1215. public function getCheck($params)
  1216. {
  1217. $data = $this->patientModel->getCheck($params);
  1218. return $data;
  1219. }
  1220. public function getInpection($params)
  1221. {
  1222. $data = $this->patientModel->getInpection($params);
  1223. return $data;
  1224. }
  1225. }