123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- <?php
- namespace app\inter\controller;
- use app\common\library\DicomPaser;
- use app\common\library\UUIDs;
- use think\Controller;
- use think\Exception;
- use think\Db;
- use think\Request;
- class Dcom extends Controller //Base
- {
- public function upload_file()
- {
- DB::startTrans();
- try{
- // 获取表单上传文件 例如上传了001.jpg
- $file = request()->file('file');
- // 移动到框架应用根目录/public/uploads/ 目录下
- if($file){
- $info = $file->move(ROOT_PATH . 'public' . DS . 'dcm');
- if($info){
- // 成功上传后 获取上传信息
- $path = 'public' . DS . 'dcm'.DS.$info->getSaveName();
- $info = DicomPaser::paser(ROOT_PATH . $path);
- foreach($info as $k=>$v){
- $info[$k] = trim($v);
- }
- $header = Request::instance()->header();
- $institution = $header['hospital'];
- $patient = $this->insertPatient($info,$institution);
- $study = $this->insertStudy($info,$patient,$institution);
- $exam = $this->insertExam($info,$patient,$study,$institution);
- $series = $this->insertSeries($info,$study);
- $image = $this->insertImages($info,$series,$path,$patient,$institution);
- DB::commit();
- return json_encode(['status'=>'ok','code'=>'0000']);
- }else{
- return json_encode(['status'=>'fail','code'=>'2000','msg'=>$file->getError()]);
- }
- }else{
- return json_encode(['status'=>'fail','code'=>'2000','msg'=>'不存在上传的文件']);
- }
- }catch(Exception $e){
- DB::rollback();
- return json_encode(['status'=>'fail','code'=>'2000','msg'=>$e->getMessage()]);
- }
- }
- public function insertPatient($info,$institution)
- {
- $where = [
- 'institution_id'=> $institution,
- 'temp_patient_id'=>$info['patientId']
- ];
- $patient = Db::table('patient_infos')->where($where)->find();
- if($patient){
- return $patient;
- }else{
- $data = [
- 'id'=>UUIDs::uuid16(),
- 'name'=>$info['patientName'],
- 'sex'=>$info['patientSex'],
- 'age'=>$info['patientAge'],
- 'birthday'=>$info['birthDate'],
- 'createdAt'=>date('Y-m-d H:i:s'),
- 'temp_patient_id'=>$info['patientId'],
- 'institution_id'=>$institution,
- ];
- DB::table('patient_infos')->insert($data);
- return $data;
- }
- }
- public function insertStudy($info,$patient,$institution)
- {
- $where = [
- 'patient_id'=>$patient['id'],
- 'studyuid'=>$info['studyUid']
- ];
- $study = DB::table('studies')->where($where)->find();
- if($study){
- return $study;
- }else{
- $data = [
- 'id'=>UUIDs::uuid16(),
- 'studyuid'=>$info['studyUid'],
- 'patient_id'=>$patient['id'],
- 'studyid'=>$info['studyId'],
- 'accession_num'=>$info['accessionNumber'],
- 'studydate'=>$info['studyDate'],
- 'ctime'=>date('Y-m-d H:i:s'),
- 'modality'=>$info['modality'],
- 'patient_age'=>$info['patientAge'],
- 'institution_name'=>$info['institutionName'],
- 'institution_id'=>$institution,
- 'createdAt'=>date('Y-m-d H:i:s'),
- ];
- DB::table('studies')->insert($data);
- return $data;
- }
- }
- public function insertExam($info,$patient,$study,$institution)
- {
- $where = [
- 'study_id'=>$study['id']
- ];
- $exam = DB::table('exams')->where($where)->find();
- if($exam){
- return $exam;
- }else{
- $data = [
- 'id'=>UUIDs::uuid16(),
- 'patient_id'=>$patient['id'],
- 'institution_id'=>$institution,
- 'patient_num'=>$info['patientId'],
- 'accession_num'=>$info['accessionNumber'],
- 'exam_datetime'=>$info['studyDate'],
- 'exam_class'=>$info['modality'],
- 'study_id'=>$study['id'],
- 'study_uid'=>$info['studyUid'],
- 'illness_desc'=>$info['studyDescription'],
- 'createdAt'=>date('Y-m-d H:i:s'),
- 'exam_status'=>3
- ];
- DB::table('exams')->insert($data);
- return $data;
- }
- }
- public function insertSeries($info,$study)
- {
- $where = [
- 'study_id'=>$study['id'],
- 'seriesuid'=>$info['seriesUid']
- ];
- $series = DB::table('series')->where($where)->find();
- if($series){
- return $series;
- }else{
- $data = [
- 'id'=>UUIDs::uuid16(),
- 'study_id'=>$study['id'],
- 'seriesuid'=>$info['seriesUid'],
- 'series_num'=>$info['seriesNumber'],
- 'modality'=>$info['modality'],
- 'description'=>$info['seriesDescription'],
- 'createdAt'=>date('Y-m-d H:i:s'),
- ];
- DB::table('series')->insert($data);
- return $data;
- }
- }
- public function insertImages($info,$series,$path,$patient,$institution)
- {
- $where = ['image_id'=>$info['imageId']];
- $image = DB::table('images')->where($where)->find();
- if($image){
- return $image;
- }else{
- $data = [
- 'id'=>UUIDs::uuid16(),
- 'series_id'=>$series['id'],
- 'image_id'=>$info['imageId'],
- 'sop_uid'=>$info['SOPInstanceUID'],
- 'image_number'=>$info['imageNumber'],
- 'owner'=>$patient['id'],
- 'window_width'=>$info['windowWidth'],
- 'windo_center'=>$info['windowCenter'],
- 'rows'=>$info['rows'],
- 'columns'=>$info['columns'],
- 'pixe_spacing'=>$info['pixelSpacing'],
- 'image_position'=>$info['imagePosition'],
- 'image_orientation'=>$info['imageOrientation'],
- 'createdAt'=>date('Y-m-d H:i:s'),
- 'institution_id'=>$institution,
- 'local_url'=>ROOT_PATH . $path,
- 'remote_url'=>DS.$path,
- 'frame'=>$info['numberOfFrames'],
- ];
- DB::table('images')->insert($data);
- return $data;
- }
- }
- }
|