task_list.py 3.4 KB
# coding=utf-8
# author:        4N
# createtime:    2020/9/4
# email:         nheweijun@sina.com
import datetime



from ..models import Task
from app.util.component.ApiTemplate import ApiTemplate
from app.util.component.ModelVisitor import ModelVisitor
import json
from app.modules.auth.models import User
from app.util.component.UserAlias import UserAlias

class Api(ApiTemplate):
    api_name = "任务列表"
    def para_check(self):
        pass

    def process(self):

        res = {}
        res["data"] = {}
        try:
            parameter = self.para
            page_index = int(parameter.get("page_index", "0"))
            page_size = int(parameter.get("page_size", "10"))
            name = parameter.get("name")
            tasks = Task.query.order_by(Task.create_time.desc())
            start_time = parameter.get("start_time")
            end_time = parameter.get("end_time")
            creator = parameter.get("creator")

            state = parameter.get("state")

            if creator and creator !="admin":
                tasks = tasks.filter_by(creator=creator)
            if start_time and end_time:
                tasks = tasks.filter(Task.create_time.between(start_time, end_time))
            if name:
                tasks = tasks.filter(Task.name.like("%" + name + "%"))
            if state is not None:
                state_list = state.split(",")
                state_list =[int(x) for x in state_list]

                tasks = tasks.filter(Task.state.in_(state_list))

            res["data"]["count"] = tasks.count()

            tasks = tasks.limit(page_size).offset(page_index * page_size).all()

            res["data"]["list"] = [ModelVisitor.task_to_json(task) for task in tasks]

            try:
                user_alias = UserAlias()

                for task_info in res["data"]["list"]:
                    if task_info["task_type"]==1:
                        task_info["layers"] = []
                        meta = json.loads(json.loads(task_info.get("parameter")).get("meta"))
                        for m in meta:
                            for key in m.get("layer").keys():

                                task_info["layers"].append({"name":key,"new_name":m.get("layer").get(key)})
                    task_info["display_name"] = user_alias.get_alias(task_info["creator"])
            except:
                pass

            res["result"] = True
        except Exception as e:
            raise e
        return res



    api_doc={
    "tags":["任务接口"],
    "parameters":[
        {"name": "page_index",
         "in": "formData",
         "type": "int",
         "default": "0"},
        {"name": "page_size",
         "in": "formData",
         "type": "int",
         "default": "10"},
        {"name": "start_time",
         "in": "formData",
         "type": "string"},
        {"name": "end_time",
         "in": "formData",
         "type": "string"},
        {"name": "name",
         "in": "formData",
         "type": "string"},
        {"name": "creator",
         "in": "formData",
         "type": "string"},
        {"name": "state",
         "in": "formData",
         "type": "string"}
    ],
    "responses":{
        200:{
            "schema":{
                "properties":{
                }
            }
            }
        }
    }