models.py 5.2 KB
# coding=utf-8
import base64
import os
from flask_sqlalchemy import SQLAlchemy,Model
import importlib
from sqlalchemy import Column, Integer, String, ForeignKey, Text, DateTime, Time,Float
from sqlalchemy.orm import relationship
import base64
from pyDes import *
import datetime

from app.util.component.PGUtil import PGUtil
import glob

class DES():
    '''
    DES密码加解密
    '''
    Des: des = des("Chinadci", ECB, "\0\0\0\0\0\0\0\0", pad=None, padmode=PAD_PKCS5)

    @classmethod
    def encode(cls, data):
        return str(base64.b64encode(cls.Des.encrypt(data)), encoding="utf8")


    @classmethod
    def decode(cls, data):
        if data:
            return str(cls.Des.decrypt(base64.b64decode(data.encode("utf-8"))), encoding="utf8")

        else:
            return data

db = SQLAlchemy()

# 动态加载Model
module_dir = "modules"
model_pkg = "models"
current_dir = os.path.abspath(os.path.dirname(__file__))
for pkg in glob.glob('%s/%s/*/%s' % (current_dir,module_dir,model_pkg)) :
    module  = os.path.basename(os.path.dirname(pkg))
    base_name = os.path.basename(pkg).split('.')[0]
    pkg_name = ".".join(["app.modules",module,base_name])
    try:
        __import__(pkg_name)
    except:
        pass



class Table(db.Model):
    '''
    数据表元数据
    '''
    __tablename__ = 'dmdms_table'
    guid = Column(String(256), primary_key=True)
    # 数据源外键
    database_guid = Column(String(256), ForeignKey('dmdms_database.guid'))

    # 点线面123
    table_type = Column(Integer)

    name = Column(String(256))
    alias = Column(Text)
    create_time = Column(DateTime)
    update_time = Column(DateTime)

    feature_count = Column(Integer)

    description = Column(Text)
    extent = Column(Text)

    #用户
    creator = Column(Text)
    #是否已抽稀
    is_vacuate=Column(Integer,default=0)

    # 目录外键
    catalog_guid = Column(String(256), ForeignKey('dmdms_catalog.guid'))

    relate_columns = relationship('Columns', backref='relate_table', lazy='dynamic')
    relate_table_vacuates = relationship('TableVacuate', backref='relate_table', lazy='dynamic')


class TableVacuate(db.Model):
    '''
    sub数据表元数据
    '''
    __tablename__ = 'dmdms_table_vacuate'
    guid = Column(String(256), primary_key=True)
    name = Column(String(256))
    level = Column(Integer)
    pixel_distance = Column(Float)
    table_guid = Column(String(256), ForeignKey('dmdms_table.guid'))



class Columns(db.Model):
    '''
    数据表的列
    '''
    __tablename__ = 'dmdms_column'
    guid = Column(String(256), primary_key=True)
    # 表外键
    table_guid= Column(String(256), ForeignKey('dmdms_table.guid'))
    name=Column(String(256))
    alias = Column(String(256))
    create_time = Column(DateTime)
    update_time = Column(DateTime)

class Task(db.Model):
    '''
    任务表
    '''
    __tablename__ = 'dmdms_task'
    guid = Column(String(256), primary_key=True)
    name = Column(Text)
    process = Column(Text)
    create_time = Column(DateTime)
    update_time = Column(DateTime)
    state = Column(Integer)
    # 数据源外键
    database_guid = Column(String(256), ForeignKey('dmdms_database.guid'))
    # 目录外键
    catalog_guid = Column(String(256), ForeignKey('dmdms_catalog.guid'))

    table_guid =  Column(String(256))
    #任务类型
    task_type=Column(Integer)

    creator = Column(Text)
    file_name = Column(Text)

    relate_processes = relationship('Process', backref='relate_task', lazy='dynamic')

    # 入库参数
    parameter= Column(Text)



class Process(db.Model):
    '''
    过程信息表
    '''
    __tablename__ = 'dmdms_process'
    guid = Column(String(256), primary_key=True)
    # 任务外键
    task_guid = Column(String(256), ForeignKey('dmdms_task.guid'))
    time = Column(DateTime)
    message = Column(Text)


class Catalog(db.Model):
    '''
    目录表
    '''
    __tablename__ = 'dmdms_catalog'
    guid = Column(String(256), primary_key=True)
    database_guid = Column(String(256), ForeignKey('dmdms_database.guid'))
    pguid = Column(String(256))
    path = Column(Text)
    name = Column(String(256))
    sort = Column(Integer)
    description = Column(Text)
    relate_tables = relationship('Table', backref='relate_catalog', lazy='dynamic')
    relate_tasks = relationship('Task', backref='relate_catalog', lazy='dynamic')

class Database(db.Model):
    '''
    数据源表
    '''
    __tablename__ = 'dmdms_database'
    guid = Column(String(256), primary_key=True)
    name = Column(String(256))
    alias = Column(String(256))
    sqlalchemy_uri = Column(String(256))
    description = Column(Text)
    # 唯一性约束,不能注册相同连接的库
    connectstr= Column(Text,unique=True)

    creator = Column(String(256))

    create_time = Column(DateTime)
    update_time = Column(DateTime)

    relate_catalogs = relationship('Catalog', backref='relate_database', lazy='dynamic')
    relate_tables = relationship('Table', backref='relate_database', lazy='dynamic')
    relate_tasks = relationship('Task', backref='relate_database', lazy='dynamic')



class InsertingLayerName(db.Model):
    '''
    正在入库的数据
    '''
    __tablename__ = 'dmdms_iln'
    guid = Column(String(256), primary_key=True)
    task_guid = Column(String(256))
    name = Column(String(256))