Dcom.php 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  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'=>'fail','code'=>'2000','msg'=>$file->getError()]);
  38. }
  39. }else{
  40. return json_encode(['status'=>'fail','code'=>'2000','msg'=>'不存在上传的文件']);
  41. }
  42. }catch(Exception $e){
  43. DB::rollback();
  44. return json_encode(['status'=>'fail','code'=>'2000','msg'=>$e->getMessage()]);
  45. }
  46. }
  47. public function insertPatient($info,$institution)
  48. {
  49. $where = [
  50. 'institution_id'=> $institution,
  51. 'temp_patient_id'=>$info['patientId']
  52. ];
  53. $patient = Db::table('patient_infos')->where($where)->find();
  54. if($patient){
  55. return $patient;
  56. }else{
  57. $data = [
  58. 'id'=>UUIDs::uuid16(),
  59. 'name'=>$info['patientName'],
  60. 'sex'=>$info['patientSex'],
  61. 'age'=>$info['patientAge'],
  62. 'birthday'=>$info['birthDate'],
  63. 'createdAt'=>date('Y-m-d H:i:s'),
  64. 'temp_patient_id'=>$info['patientId'],
  65. 'institution_id'=>$institution,
  66. ];
  67. DB::table('patient_infos')->insert($data);
  68. return $data;
  69. }
  70. }
  71. public function insertStudy($info,$patient,$institution)
  72. {
  73. $where = [
  74. 'patient_id'=>$patient['id'],
  75. 'studyuid'=>$info['studyUid']
  76. ];
  77. $study = DB::table('studies')->where($where)->find();
  78. if($study){
  79. return $study;
  80. }else{
  81. $data = [
  82. 'id'=>UUIDs::uuid16(),
  83. 'studyuid'=>$info['studyUid'],
  84. 'patient_id'=>$patient['id'],
  85. 'studyid'=>$info['studyId'],
  86. 'accession_num'=>$info['accessionNumber'],
  87. 'studydate'=>$info['studyDate'],
  88. 'ctime'=>date('Y-m-d H:i:s'),
  89. 'modality'=>$info['modality'],
  90. 'patient_age'=>$info['patientAge'],
  91. 'institution_name'=>$info['institutionName'],
  92. 'institution_id'=>$institution,
  93. 'createdAt'=>date('Y-m-d H:i:s'),
  94. ];
  95. DB::table('studies')->insert($data);
  96. return $data;
  97. }
  98. }
  99. public function insertExam($info,$patient,$study,$institution)
  100. {
  101. $where = [
  102. 'study_id'=>$study['id']
  103. ];
  104. $exam = DB::table('exams')->where($where)->find();
  105. if($exam){
  106. return $exam;
  107. }else{
  108. $data = [
  109. 'id'=>UUIDs::uuid16(),
  110. 'patient_id'=>$patient['id'],
  111. 'institution_id'=>$institution,
  112. 'patient_num'=>$info['patientId'],
  113. 'accession_num'=>$info['accessionNumber'],
  114. 'exam_datetime'=>$info['studyDate'],
  115. 'exam_class'=>$info['modality'],
  116. 'study_id'=>$study['id'],
  117. 'study_uid'=>$info['studyUid'],
  118. 'illness_desc'=>$info['studyDescription'],
  119. 'createdAt'=>date('Y-m-d H:i:s'),
  120. 'exam_status'=>3
  121. ];
  122. DB::table('exams')->insert($data);
  123. return $data;
  124. }
  125. }
  126. public function insertSeries($info,$study)
  127. {
  128. $where = [
  129. 'study_id'=>$study['id'],
  130. 'seriesuid'=>$info['seriesUid']
  131. ];
  132. $series = DB::table('series')->where($where)->find();
  133. if($series){
  134. return $series;
  135. }else{
  136. $data = [
  137. 'id'=>UUIDs::uuid16(),
  138. 'study_id'=>$study['id'],
  139. 'seriesuid'=>$info['seriesUid'],
  140. 'series_num'=>$info['seriesNumber'],
  141. 'modality'=>$info['modality'],
  142. 'description'=>$info['seriesDescription'],
  143. 'createdAt'=>date('Y-m-d H:i:s'),
  144. ];
  145. DB::table('series')->insert($data);
  146. return $data;
  147. }
  148. }
  149. public function insertImages($info,$series,$path,$patient,$institution)
  150. {
  151. $where = ['image_id'=>$info['imageId']];
  152. $image = DB::table('images')->where($where)->find();
  153. if($image){
  154. return $image;
  155. }else{
  156. $data = [
  157. 'id'=>UUIDs::uuid16(),
  158. 'series_id'=>$series['id'],
  159. 'image_id'=>$info['imageId'],
  160. 'sop_uid'=>$info['SOPInstanceUID'],
  161. 'image_number'=>$info['imageNumber'],
  162. 'owner'=>$patient['id'],
  163. 'window_width'=>$info['windowWidth'],
  164. 'windo_center'=>$info['windowCenter'],
  165. 'rows'=>$info['rows'],
  166. 'columns'=>$info['columns'],
  167. 'pixe_spacing'=>$info['pixelSpacing'],
  168. 'image_position'=>$info['imagePosition'],
  169. 'image_orientation'=>$info['imageOrientation'],
  170. 'createdAt'=>date('Y-m-d H:i:s'),
  171. 'institution_id'=>$institution,
  172. 'local_url'=>ROOT_PATH . $path,
  173. 'remote_url'=>DS.$path,
  174. 'frame'=>$info['numberOfFrames'],
  175. ];
  176. DB::table('images')->insert($data);
  177. return $data;
  178. }
  179. }
  180. }