models.py 5.9 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,Binary
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
current_dir = os.path.abspath(os.path.dirname(__file__))
pkgs = list(glob.glob('%s/modules/*/models' % (current_dir)))
pkgs.extend(list(glob.glob('%s/modules/*/*/models' % (current_dir))))

for pkg in pkgs :
    pkg = os.path.normpath(pkg)
    node_list = pkg.split(os.path.sep)
    pkg_name = ".".join(node_list[node_list.index("app"):])
    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'))

    #所在的库
    connectstr= Column(Text)

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'))
    #抽稀任务指定表的guid
    table_guid =  Column(String(256))
    #任务类型
    #1:入库任务
    #2:抽稀任务
    #3:数据库刷新任务
    #4:影像金字塔任务
    #5:数据下载任务
    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))


class Service(db.Model):
    '''
    '''
    __tablename__ = 'dmdms_service'
    guid = Column(String(256), primary_key=True)
    name=Column(String(256))
    alias = Column(String(256))
    #服务状态
    state= Column(Integer)
    create_time = Column(DateTime)
    update_time = Column(DateTime)
    #服务描述
    description = Column(Text)
    #服务节点
    node = Column(Integer)
    #服务缩略图
    overview = Column(Binary)