Dcom.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. <?php
  2. namespace app\inter\controller;
  3. use app\common\library\DicomPaser;
  4. use app\common\library\UUIDs;
  5. use think\Controller;
  6. use think\Exception;
  7. use think\Db;
  8. use think\Request;
  9. class Dcom extends Controller //Base
  10. {
  11. public function upload_file()
  12. {
  13. DB::startTrans();
  14. try{
  15. // 获取表单上传文件 例如上传了001.jpg
  16. $file = request()->file('file');
  17. // 移动到框架应用根目录/public/uploads/ 目录下
  18. if($file){
  19. $info = $file->move(ROOT_PATH . 'public' . DS . 'dcm');
  20. if($info){
  21. // 成功上传后 获取上传信息
  22. $path = 'public' . DS . 'dcm'.DS.$info->getSaveName();
  23. $info = DicomPaser::paser(ROOT_PATH . $path);
  24. foreach($info as $k=>$v){
  25. $info[$k] = trim($v);
  26. }
  27. $header = Request::instance()->header();
  28. $institution = $header['hospital'];
  29. $patient = $this->insertPatient($info,$institution);
  30. $study = $this->insertStudy($info,$patient,$institution);
  31. $exam = $this->insertExam($info,$patient,$study,$institution);
  32. $series = $this->insertSeries($info,$study);
  33. $image = $this->insertImages($info,$series,$path,$patient,$institution);
  34. DB::commit();
  35. return json_encode(['status'=>'ok','code'=>'0000']);
  36. }else{
  37. return json_encode(['status'=>'ok','code'=>'0000']);
  38. // return json_encode(['status'=>'fail','code'=>'2000','msg'=>$file->getError()]);
  39. }
  40. }else{
  41. return json_encode(['status'=>'ok','code'=>'0000']);
  42. // return json_encode(['status'=>'fail','code'=>'2000','msg'=>'不存在上传的文件']);
  43. }
  44. }catch(Exception $e){
  45. DB::rollback();
  46. return json_encode(['status'=>'ok','code'=>'0000']);
  47. // return json_encode(['status'=>'fail','code'=>'2000','msg'=>$e->getMessage()]);
  48. }
  49. }
  50. public function insertPatient($info,$institution)
  51. {
  52. $where = [
  53. 'institution_id'=> $institution,
  54. 'temp_patient_id'=>$info['patientId']
  55. ];
  56. $patient = Db::table('patient_infos')->where($where)->find();
  57. if($patient){
  58. return $patient;
  59. }else{
  60. $data = [
  61. 'id'=>UUIDs::uuid16(),
  62. 'name'=>$info['patientName'],
  63. 'sex'=>$info['patientSex'],
  64. 'age'=>$info['patientAge'],
  65. 'birthday'=>$info['birthDate'],
  66. 'createdAt'=>date('Y-m-d H:i:s'),
  67. 'temp_patient_id'=>$info['patientId'],
  68. 'institution_id'=>$institution,
  69. ];
  70. DB::table('patient_infos')->insert($data);
  71. return $data;
  72. }
  73. }
  74. public function insertStudy($info,$patient,$institution)
  75. {
  76. $where = [
  77. 'patient_id'=>$patient['id'],
  78. 'studyuid'=>$info['studyUid']
  79. ];
  80. $study = DB::table('studies')->where($where)->find();
  81. if($study){
  82. return $study;
  83. }else{
  84. $data = [
  85. 'id'=>UUIDs::uuid16(),
  86. 'studyuid'=>$info['studyUid'],
  87. 'patient_id'=>$patient['id'],
  88. 'studyid'=>$info['studyId'],
  89. 'accession_num'=>$info['accessionNumber'],
  90. 'studydate'=>$info['studyDate'],
  91. 'ctime'=>date('Y-m-d H:i:s'),
  92. 'modality'=>$info['modality'],
  93. 'patient_age'=>$info['patientAge'],
  94. 'institution_name'=>$info['institutionName'],
  95. 'institution_id'=>$institution,
  96. 'createdAt'=>date('Y-m-d H:i:s'),
  97. ];
  98. DB::table('studies')->insert($data);
  99. return $data;
  100. }
  101. }
  102. public function insertExam($info,$patient,$study,$institution)
  103. {
  104. $where = [
  105. 'study_id'=>$study['id']
  106. ];
  107. $exam = DB::table('exams')->where($where)->find();
  108. if($exam){
  109. return $exam;
  110. }else{
  111. $data = [
  112. 'id'=>UUIDs::uuid16(),
  113. 'patient_id'=>$patient['id'],
  114. 'institution_id'=>$institution,
  115. 'patient_num'=>$info['patientId'],
  116. 'accession_num'=>$info['accessionNumber'],
  117. 'exam_datetime'=>$info['studyDate'],
  118. 'exam_class'=>$info['modality'],
  119. 'study_id'=>$study['id'],
  120. 'study_uid'=>$info['studyUid'],
  121. 'illness_desc'=>$info['studyDescription'],
  122. 'createdAt'=>date('Y-m-d H:i:s'),
  123. 'exam_status'=>3
  124. ];
  125. DB::table('exams')->insert($data);
  126. return $data;
  127. }
  128. }
  129. public function insertSeries($info,$study)
  130. {
  131. $where = [
  132. 'study_id'=>$study['id'],
  133. 'seriesuid'=>$info['seriesUid']
  134. ];
  135. $series = DB::table('series')->where($where)->find();
  136. if($series){
  137. return $series;
  138. }else{
  139. $data = [
  140. 'id'=>UUIDs::uuid16(),
  141. 'study_id'=>$study['id'],
  142. 'seriesuid'=>$info['seriesUid'],
  143. 'series_num'=>$info['seriesNumber'],
  144. 'modality'=>$info['modality'],
  145. 'description'=>$info['seriesDescription'],
  146. 'createdAt'=>date('Y-m-d H:i:s'),
  147. ];
  148. DB::table('series')->insert($data);
  149. return $data;
  150. }
  151. }
  152. public function insertImages($info,$series,$path,$patient,$institution)
  153. {
  154. $where = ['image_id'=>$info['imageId']];
  155. $image = DB::table('images')->where($where)->find();
  156. if($image){
  157. return $image;
  158. }else{
  159. $data = [
  160. 'id'=>UUIDs::uuid16(),
  161. 'series_id'=>$series['id'],
  162. 'image_id'=>$info['imageId'],
  163. 'sop_uid'=>$info['SOPInstanceUID'],
  164. 'image_number'=>$info['imageNumber'],
  165. 'owner'=>$patient['id'],
  166. 'window_width'=>$info['windowWidth'],
  167. 'windo_center'=>$info['windowCenter'],
  168. 'rows'=>$info['rows'],
  169. 'columns'=>$info['columns'],
  170. 'pixe_spacing'=>$info['pixelSpacing'],
  171. 'image_position'=>$info['imagePosition'],
  172. 'image_orientation'=>$info['imageOrientation'],
  173. 'createdAt'=>date('Y-m-d H:i:s'),
  174. 'institution_id'=>$institution,
  175. 'local_url'=>ROOT_PATH . $path,
  176. 'remote_url'=>DS.$path,
  177. 'frame'=>$info['numberOfFrames'],
  178. ];
  179. DB::table('images')->insert($data);
  180. return $data;
  181. }
  182. }
  183. }