2025-03-17 14:58:05 +08:00

84 lines
3.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
任务输入参数模型模块
包含任务输入参数相关的数据模型
"""
import enum
from sqlalchemy import Column, Integer, String, Text, Boolean, Enum, ForeignKey, JSON
from sqlalchemy.orm import relationship
from data.models.base import BaseModel
class InputParamType(enum.Enum):
"""
输入参数类型枚举
"""
STRING = 'string' # 字符串
NUMBER = 'number' # 数字
BOOLEAN = 'boolean' # 布尔值
OBJECT = 'object' # 对象
ARRAY = 'array' # 数组
NULL = 'null' # 空值
class TaskInput(BaseModel):
"""
任务输入参数模型
表示任务执行所需的输入参数
"""
__tablename__ = 'task_inputs'
task_id = Column(Integer, ForeignKey('tasks.id'), nullable=False, comment='任务ID')
name = Column(String(100), nullable=False, comment='参数名称')
param_type = Column(Enum(InputParamType), nullable=False, default=InputParamType.STRING, comment='参数类型')
description = Column(String(500), nullable=True, comment='参数描述')
is_required = Column(Boolean, default=False, comment='是否必填')
default_value = Column(Text, nullable=True, comment='默认值')
validation_rules = Column(JSON, nullable=True, comment='验证规则JSON格式')
order = Column(Integer, default=0, comment='排序顺序')
def __repr__(self):
return f"<TaskInput(id={self.id}, task_id={self.task_id}, name='{self.name}', type='{self.param_type}')>"
@classmethod
def get_by_task(cls, task_id):
"""
获取任务的所有输入参数
"""
return cls.query.filter(cls.task_id == task_id, cls.is_deleted == False).order_by(cls.order).all()
@classmethod
def get_by_task_and_name(cls, task_id, name):
"""
根据任务ID和参数名称获取输入参数
"""
return cls.query.filter(cls.task_id == task_id, cls.name == name, cls.is_deleted == False).first()
class TaskInputValue(BaseModel):
"""
任务输入参数值模型
表示任务执行时的实际输入参数值
"""
__tablename__ = 'task_input_values'
task_record_id = Column(Integer, ForeignKey('task_records.id'), nullable=False, comment='任务记录ID')
input_id = Column(Integer, ForeignKey('task_inputs.id'), nullable=False, comment='输入参数ID')
value = Column(Text, nullable=True, comment='参数值')
def __repr__(self):
return f"<TaskInputValue(id={self.id}, task_record_id={self.task_record_id}, input_id={self.input_id})>"
@classmethod
def get_by_record(cls, task_record_id):
"""
获取任务记录的所有输入参数值
"""
return cls.query.filter(cls.task_record_id == task_record_id, cls.is_deleted == False).all()
@classmethod
def get_by_record_and_input(cls, task_record_id, input_id):
"""
根据任务记录ID和输入参数ID获取输入参数值
"""
return cls.query.filter(cls.task_record_id == task_record_id, cls.input_id == input_id, cls.is_deleted == False).first()