import logging from datetime import datetime import json from sqlalchemy.ext.declarative import declarative_base, DeclarativeMeta from sqlalchemy.schema import Column from sqlalchemy.types import Integer, String, DateTime, DECIMAL #生成orm基类 Base = declarative_base() class AnalysisResult(Base): #表名 __tablename__ = 'analysis_result' #设置主键 id = Column(Integer, primary_key=True) study_id = Column(Integer) series_id = Column(Integer) strategy_id = Column(String) strategy_name = Column(String) error_msg = Column(String) status = Column(Integer) created_time = Column(DateTime) updated_time = Column(DateTime) class AnalysisResultSlice(Base): __tablename__ = 'analysis_result_slice' id = Column(Integer, primary_key=True) result_id = Column(Integer) study_id = Column(Integer) series_id = Column(Integer) dicom_id = Column(String) status = Column(Integer) meta = Column(String) indexs = Column(Integer) z_index = Column(String) created_time = Column(DateTime) updated_time = Column(DateTime) class AlchemyEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj.__class__, DeclarativeMeta): # an SQLAlchemy class fields = {} for field in [x for x in dir(obj) if not x.startswith('_') and x != 'metadata']: data = obj.__getattribute__(field) try: if isinstance(data, datetime): data = data.strftime('%Y-%m-%d %H:%M:%S') json.dumps(data) # this will fail on non-encodable values, like other classes fields[field] = data except TypeError: fields[field] = None # a json-encodable dict return fields return json.JSONEncoder.default(self, obj) def new_alchemy_encoder(): _visited_objs = [] class AlchemyEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj.__class__, DeclarativeMeta): # don't re-visit self if obj in _visited_objs: return None _visited_objs.append(obj) # an SQLAlchemy class fields = {} for field in [x for x in dir(obj) if not x.startswith('_') and x != 'metadata']: data = obj.__getattribute__(field) try: if isinstance(data, datetime): data = data.strftime('%Y-%m-%d %H:%M:%S') json.dumps(data) # this will fail on non-encodable values, like other classes fields[field] = data except Exception: fields[field] = None return fields return json.JSONEncoder.default(self, obj) return AlchemyEncoder class DicomSeries(Base): __tablename__ = 'dicom_file_series' id = Column(Integer, primary_key=True) patient_info_id = Column(Integer) study_id = Column(Integer) patient_id = Column(String) patient_name = Column(String) patient_sex = Column(String) patient_age = Column(Integer) series_instance_uid = Column(String) study_uid = Column(String) series_number = Column(String) accession_number = Column(String) type = Column(String) status = Column(Integer) error_msg = Column(String) dicom_count = Column(Integer) created_time = Column(DateTime) updated_time = Column(DateTime) acq_date = Column(DateTime) spacing_between_slices = Column(String) pixel_spacing_x = Column(String) pixel_spacing_y = Column(String) rows = Column(Integer) columns = Column(Integer) folder_name = Column(String) class DicomFile(Base): __tablename__ = 'dicom_file' id = Column(Integer, primary_key=True) name = Column(String) series_id = Column(Integer) patient_id = Column(String) patient_name = Column(String) patient_sex = Column(String) patient_birthday = Column(DateTime) patient_age = Column(Integer) manufacturer = Column(String) study_uid = Column(String) study_date = Column(DateTime) acq_date = Column(DateTime) study_id = Column(String) study_desc = Column(String) series_uid = Column(String) series_date = Column(DateTime) series_number = Column(String) series_modality = Column(String) series_institution = Column(String) series_desc = Column(String) series_exam_part = Column(String) sop_uid = Column(String) transfer_syntax = Column(String) instance_number = Column(Integer) rows = Column(Integer) columns = Column(Integer) slice_location = Column(String) slice_thickness = Column(String) kvp = Column(String) xray_tube_current = Column(String) pixel_spacing = Column(String) spacing_between_slices = Column(String) image_position = Column(String) image_orientation = Column(String) patient_position = Column(String) accession_number = Column(String) full_str = Column(String) byte_url = Column(String) image_url = Column(String) status = Column(Integer) created_time = Column(DateTime) updated_time = Column(DateTime) class UploadFile(Base): __tablename__ = 'upload_file' id = Column(Integer, primary_key=True) file_name = Column(String) file_original_name = Column(String) user_id = Column(Integer) user_name = Column(String) file_url = Column(String) file_path = Column(String) batch_uuid = Column(String) file_md5 = Column(String) parrent_id = Column(Integer) is_parrent = Column(Integer) dicom_bundle_id = Column(String) patient_id = Column(String) patient_name = Column(String) status = Column(Integer) error_msg = Column(String) acq_date = Column(DateTime) created_time = Column(DateTime) updated_time = Column(DateTime) class DicomStudy(Base): __tablename__ = 'dicom_file_study' id = Column(Integer, primary_key=True) patient_info_id = Column(Integer) patient_sex = Column(String) patient_age = Column(Integer) file_size = Column(DECIMAL) dicom_count = Column(Integer) study_uid = Column(String) folder_name = Column(String) accession_number = Column(String) status = Column(Integer) created_time = Column(DateTime) updated_time = Column(DateTime) acq_date = Column(DateTime) error_msg = Column(String) class PatientInfo(Base): __tablename__ = 'patient_info' id = Column(Integer, primary_key=True) patient_sex = Column(String) patient_age = Column(Integer) patient_id = Column(String) patient_name = Column(String) series_institution = Column(String) status = Column(Integer) created_time = Column(DateTime) updated_time = Column(DateTime) class AnalysisStrategy(Base): __tablename__ = 'analysis_strategy' id = Column(Integer, primary_key=True) name = Column(String) description = Column(String) conf_json = Column(String) status = Column(Integer) created_time = Column(DateTime) updated_time = Column(DateTime) class UserLabel(Base): __tablename__ = 'user_label' id = Column(Integer, primary_key=True) user_id = Column(Integer) study_id = Column(Integer) series_id = Column(Integer) result_id = Column(Integer) label_name = Column(String) color = Column(String) box_count = Column(Integer) status = Column(Integer) node_time = Column(Integer) created_time = Column(DateTime) updated_time = Column(DateTime) deleted_time = Column(DateTime) box_info = Column(String) area = Column(String) class UserLabelDelineation(Base): __tablename__ = 'user_label_delineation' id = Column(Integer, primary_key=True) user_id = Column(Integer) label_id = Column(Integer) study_id = Column(Integer) series_id = Column(Integer) dicom_id = Column(Integer) status = Column(Integer) meta = Column(String) indexs = Column(String) z_index = Column(Integer) created_time = Column(DateTime) updated_time = Column(DateTime) contour = Column(String)