__init__.py 5.4 KB
# coding=utf-8
#author:        4N
#createtime:    2021/10/26
#email:         nheweijun@sina.com

from app.models import db
from sqlalchemy import Column, Integer, String, ForeignKey, Text, DateTime, Time,Float,Binary,Sequence
from sqlalchemy.orm import relationship
import base64
from pyDes import *


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

class Table(db.Model):
    '''
    数据表元数据
    '''
    __tablename__ = 'dmap_table'
    guid = Column(String(256), primary_key=True)
    # 数据源外键
    database_guid = Column(String(256), ForeignKey('dmap_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)
    #是否用于分层分级
    is_for_partition = Column(Integer,default=0)
    # 目录外键
    catalog_guid = Column(String(256), ForeignKey('dmap_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__ = 'dmap_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('dmap_table.guid'))

    #所在的库
    connectstr= Column(Text)

class Columns(db.Model):
    '''
    数据表的列
    '''
    __tablename__ = 'dmap_column'
    guid = Column(String(256), primary_key=True)
    # 表外键
    table_guid= Column(String(256), ForeignKey('dmap_table.guid'))
    name=Column(String(256))
    alias = Column(String(256))
    create_time = Column(DateTime)
    update_time = Column(DateTime)
    #是否用于分层分级
    is_for_partition = Column(Integer,default=0)

class Task(db.Model):
    '''
    任务表
    '''
    __tablename__ = 'dmap_task'
    guid = Column(String(256), primary_key=True)
    name = Column(Text)
    process = Column(Text)
    create_time = Column(DateTime)
    update_time = Column(DateTime)
    #0等待
    #1完成
    #-1失败
    #2正在进行中
    state = Column(Integer)
    #数据源外键
    database_guid = Column(String(256), ForeignKey('dmap_database.guid'))
    #目录外键
    catalog_guid = Column(String(256), ForeignKey('dmap_catalog.guid'))
    #抽稀任务指定表的guid
    table_guid =  Column(String(256))
    #任务类型
    #1:入库任务
    #2:抽稀任务
    #3:数据库刷新任务
    #4:数据下载任务
    #5:影像金字塔任务
    task_type = Column(Integer)
    #任务的pid,用于kill
    task_pid = 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__ = 'dmap_process'
    guid = Column(String(256), primary_key=True)
    # 任务外键
    task_guid = Column(String(256), ForeignKey('dmap_task.guid'))
    time = Column(DateTime)
    message = Column(Text)


class Catalog(db.Model):
    '''
    目录表
    '''
    __tablename__ = 'dmap_catalog'
    guid = Column(String(256), primary_key=True)
    database_guid = Column(String(256), ForeignKey('dmap_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__ = 'dmap_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__ = 'dmap_iln'
    guid = Column(String(256), primary_key=True)
    task_guid = Column(String(256))
    name = Column(String(256))