Dcom.php 6.4 KB

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