domain.py 8.1 KB
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)