TaskController.py 2.1 KB
# coding=utf-8
#author:        4N
#createtime:    2021/12/2
#email:         nheweijun@sina.com

from app.modules.data.models import Task
from app.util.component.StructuredPrint import StructurePrint
import configure
import time
from app.util.component.PGUtil import PGUtil

class TaskController:
    '''
    此类是面向切面的类,控制各种任务是否可以进入执行状态
    '''

    @classmethod
    def pass_check(cls,sys_session,task_guid):

        # 任务类型
        # 1:入库任务
        # 2:抽稀任务
        # 3:数据库刷新任务
        # 4:数据下载任务
        # 5:影像金字塔任务

        task = sys_session.query(Task).filter_by(guid=task_guid).one_or_none()

        check = True
        if task.task_type==1:
            #控制正在运行的任务数量
            running_count = sys_session.query(Task).filter(Task.state == 2).filter(Task.task_type == 1).count()
            first_task = sys_session.query(Task).filter(Task.state == 0).filter(Task.task_type == 1).order_by(Task.create_time).first()
            if (running_count >= configure.entry_data_thread) or (not first_task.guid.__eq__(task_guid)):
                StructurePrint().print("等待入库")
                check = False
        if task.task_type==2:
            running_count = sys_session.query(Task).filter(Task.state == 2).filter(Task.task_type == 2).count()
            first_task = sys_session.query(Task).filter(Task.state == 0).filter(Task.task_type == 2).order_by(Task.create_time).first()
            if (running_count >= configure.entry_data_thread) or (not first_task.guid.__eq__(task_guid)):
                StructurePrint().print("等待精化")
                check = False
        if task.task_type==3:
            pass
        if task.task_type==4:
            pass
        if task.task_type==5:
            pass

        return check

    @classmethod
    def wait(cls,task_guid):
        sys_session= PGUtil.get_db_session(configure.SQLALCHEMY_DATABASE_URI)
        while not cls.pass_check(sys_session,task_guid):
            time.sleep(3)
        sys_session.close()