feat: restore source parity and harden agent runtime
This commit is contained in:
@@ -0,0 +1,302 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
工作流 Schema 定义
|
||||
"""
|
||||
from datetime import datetime
|
||||
from typing import Optional, List, Any
|
||||
|
||||
from pydantic import BaseModel, ConfigDict, Field
|
||||
|
||||
from app.base_schema import CSTDatetime
|
||||
|
||||
|
||||
# ============ 流程定义 Schema ============
|
||||
|
||||
class WorkflowDefinitionCreate(BaseModel):
|
||||
"""创建流程定义"""
|
||||
application_id: Optional[str] = Field(None, description="所属应用ID")
|
||||
name: str = Field(..., max_length=100, description="流程名称")
|
||||
code: str = Field(..., max_length=100, pattern=r"^[a-zA-Z][a-zA-Z0-9_]*$", description="流程编码(字母开头,只能包含字母、数字和下划线)")
|
||||
workflow_type: str = Field(default="other", max_length=20, description="流程类型: approval/application/business/hr/finance/admin/other")
|
||||
icon: str = Field(default="", max_length=100, description="流程图标")
|
||||
icon_bg_color: str = Field(default="", max_length=200, description="图标背景色(支持渐变色)")
|
||||
category: str = Field(default="", max_length=50, description="分类")
|
||||
description: str = Field(default="", description="描述")
|
||||
form_code: str = Field(..., max_length=100, description="关联表单编码")
|
||||
document_template_codes: List[str] = Field(default_factory=list, description="关联文档模板编码列表")
|
||||
flow_definition: dict = Field(default_factory=dict, description="流程定义")
|
||||
sort: int = Field(default=0, description="排序(数值越小越靠前)")
|
||||
|
||||
|
||||
class WorkflowDefinitionUpdate(BaseModel):
|
||||
"""更新流程定义"""
|
||||
name: Optional[str] = Field(None, max_length=100, description="流程名称")
|
||||
workflow_type: Optional[str] = Field(None, max_length=20, description="流程类型")
|
||||
icon: Optional[str] = Field(None, max_length=100, description="流程图标")
|
||||
icon_bg_color: Optional[str] = Field(None, max_length=200, description="图标背景色(支持渐变色)")
|
||||
category: Optional[str] = Field(None, max_length=50, description="分类")
|
||||
description: Optional[str] = Field(None, description="描述")
|
||||
form_code: Optional[str] = Field(None, max_length=100, description="关联表单编码")
|
||||
document_template_codes: Optional[List[str]] = Field(None, description="关联文档模板编码列表")
|
||||
flow_definition: Optional[dict] = Field(None, description="流程定义")
|
||||
sort: Optional[int] = Field(None, description="排序(数值越小越靠前)")
|
||||
|
||||
|
||||
class WorkflowDefinitionOut(BaseModel):
|
||||
"""流程定义输出"""
|
||||
id: str
|
||||
application_id: Optional[str] = None
|
||||
name: str
|
||||
code: str
|
||||
workflow_type: str = "other"
|
||||
icon: str = ""
|
||||
icon_bg_color: str = ""
|
||||
category: str
|
||||
description: str
|
||||
status: str
|
||||
version: int
|
||||
form_code: str
|
||||
form_name: str
|
||||
document_template_codes: List[str] = []
|
||||
flow_definition: dict
|
||||
created_at: Optional[CSTDatetime] = Field(None, alias="sys_create_datetime")
|
||||
updated_at: Optional[CSTDatetime] = Field(None, alias="sys_update_datetime")
|
||||
|
||||
model_config = ConfigDict(from_attributes=True, populate_by_name=True)
|
||||
|
||||
|
||||
class WorkflowDefinitionListOut(BaseModel):
|
||||
"""流程定义列表输出"""
|
||||
id: str
|
||||
application_id: Optional[str] = None
|
||||
application_name: Optional[str] = ""
|
||||
name: str
|
||||
code: str
|
||||
workflow_type: str = "other"
|
||||
icon: str = ""
|
||||
icon_bg_color: str = ""
|
||||
category: str
|
||||
description: str
|
||||
status: str
|
||||
version: int
|
||||
form_code: str
|
||||
form_name: str
|
||||
sort: int = 0
|
||||
created_at: Optional[CSTDatetime] = Field(None, alias="sys_create_datetime")
|
||||
updated_at: Optional[CSTDatetime] = Field(None, alias="sys_update_datetime")
|
||||
|
||||
model_config = ConfigDict(from_attributes=True, populate_by_name=True)
|
||||
|
||||
|
||||
# ============ 导入导出 Schema ============
|
||||
|
||||
class WorkflowImportCheckIn(BaseModel):
|
||||
"""流程导入预检查"""
|
||||
code: str = Field(..., description="流程编码")
|
||||
|
||||
|
||||
class WorkflowImportCheckOut(BaseModel):
|
||||
"""流程导入预检查结果"""
|
||||
code_exists: bool = Field(..., description="流程编码是否已存在")
|
||||
can_import: bool = Field(..., description="是否可以直接导入")
|
||||
|
||||
|
||||
class WorkflowImportIn(BaseModel):
|
||||
"""流程配置导入"""
|
||||
application_id: Optional[str] = Field(None, description="所属应用ID")
|
||||
name: str = Field(..., max_length=100, description="流程名称")
|
||||
code: str = Field(..., max_length=100, pattern=r"^[a-zA-Z][a-zA-Z0-9_]*$", description="流程编码")
|
||||
workflow_type: str = Field(default="other", max_length=20, description="流程类型")
|
||||
icon: str = Field(default="", max_length=100, description="流程图标")
|
||||
icon_bg_color: str = Field(default="", max_length=200, description="图标背景色")
|
||||
category: str = Field(default="", max_length=50, description="分类")
|
||||
description: str = Field(default="", description="描述")
|
||||
form_code: str = Field(..., max_length=100, description="关联表单编码")
|
||||
document_template_codes: List[str] = Field(default_factory=list, description="关联文档模板编码列表")
|
||||
flow_definition: dict = Field(default_factory=dict, description="流程定义")
|
||||
sort: int = Field(default=0, description="排序")
|
||||
|
||||
|
||||
# ============ 流程实例 Schema ============
|
||||
|
||||
class WorkflowInstanceCreate(BaseModel):
|
||||
"""发起流程"""
|
||||
workflow_code: str = Field(..., description="流程编码")
|
||||
title: str = Field(..., max_length=200, description="流程标题")
|
||||
form_data: dict = Field(..., description="表单数据")
|
||||
|
||||
|
||||
class WorkflowInstanceOut(BaseModel):
|
||||
"""流程实例输出"""
|
||||
id: str
|
||||
instance_no: str
|
||||
title: str
|
||||
status: str
|
||||
workflow_id: str
|
||||
workflow_name: str = ""
|
||||
workflow_code: str = ""
|
||||
form_code: str
|
||||
form_data_id: str
|
||||
current_node_id: str
|
||||
current_node_name: str
|
||||
initiator_id: str
|
||||
initiator_name: str = ""
|
||||
started_at: Optional[CSTDatetime] = None
|
||||
completed_at: Optional[CSTDatetime] = None
|
||||
has_document_templates: bool = False
|
||||
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
|
||||
class WorkflowInstanceListOut(BaseModel):
|
||||
"""流程实例列表输出"""
|
||||
id: str
|
||||
instance_no: str
|
||||
title: str
|
||||
status: str
|
||||
workflow_name: str = ""
|
||||
application_name: str = ""
|
||||
current_node_name: str
|
||||
has_document_templates: bool
|
||||
initiator_name: str = ""
|
||||
started_at: Optional[CSTDatetime] = None
|
||||
completed_at: Optional[CSTDatetime] = None
|
||||
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
|
||||
# ============ 任务 Schema ============
|
||||
|
||||
class TaskApproveInput(BaseModel):
|
||||
"""审批任务"""
|
||||
action: str = Field(..., description="操作: approve/reject/return")
|
||||
comment: str = Field(default="", description="审批意见")
|
||||
signature: Optional[str] = Field(None, description="签名数据(base64格式)")
|
||||
return_to: Optional[str] = Field(None, description="驳回目标: initiator(发起人) 或 节点ID")
|
||||
form_data: Optional[dict] = Field(None, description="修改后的表单数据(审批人编辑了可编辑字段时传入)")
|
||||
|
||||
|
||||
class TaskHandleInput(BaseModel):
|
||||
"""办理任务"""
|
||||
comment: str = Field(default="", description="办理意见")
|
||||
form_data: Optional[dict] = Field(None, description="修改后的表单数据(办理人编辑了可编辑字段时传入)")
|
||||
|
||||
|
||||
class TaskReviseInput(BaseModel):
|
||||
"""修改任务(驳回后重新提交)"""
|
||||
form_data: dict = Field(..., description="修改后的表单数据")
|
||||
comment: str = Field(default="", description="修改说明")
|
||||
|
||||
|
||||
class TaskTransferInput(BaseModel):
|
||||
"""转交任务"""
|
||||
to_user_id: str = Field(..., description="转交给用户ID")
|
||||
comment: str = Field(default="", description="转交说明")
|
||||
|
||||
|
||||
class TaskDelegateInput(BaseModel):
|
||||
"""委派任务"""
|
||||
to_user_id: str = Field(..., description="委派给用户ID")
|
||||
comment: str = Field(default="", description="委派说明")
|
||||
|
||||
|
||||
class TaskAddSignInput(BaseModel):
|
||||
"""加签任务"""
|
||||
sign_type: str = Field(..., description="加签类型: before(前加签)/after(后加签)/parallel(并行加签)")
|
||||
to_user_ids: List[str] = Field(..., description="加签人ID列表")
|
||||
comment: str = Field(default="", description="加签说明")
|
||||
|
||||
|
||||
class WorkflowTaskOut(BaseModel):
|
||||
"""任务输出"""
|
||||
id: str
|
||||
instance_id: str
|
||||
instance_no: str = ""
|
||||
instance_title: str = ""
|
||||
node_id: str
|
||||
node_name: str
|
||||
task_type: str
|
||||
status: str
|
||||
assignee_id: str
|
||||
assignee_name: str = ""
|
||||
comment: str
|
||||
signature_file_id: Optional[str] = None
|
||||
handled_at: Optional[CSTDatetime] = None
|
||||
sys_create_datetime: Optional[CSTDatetime] = None
|
||||
|
||||
# 取消原因(or_sign=或签被他人审批自动取消, revoked=发起人撤回, 空=其他)
|
||||
cancel_reason: str = ""
|
||||
|
||||
# 流程信息
|
||||
workflow_name: str = ""
|
||||
initiator_name: str = ""
|
||||
started_at: Optional[CSTDatetime] = None
|
||||
|
||||
# 表单信息(任务详情时返回)
|
||||
form_code: Optional[str] = None
|
||||
form_config: Optional[dict] = None
|
||||
form_data: Optional[dict] = None
|
||||
form_permissions: Optional[list] = None
|
||||
action_permissions: Optional[list] = None
|
||||
require_signature: Optional[bool] = False
|
||||
last_return_log: Optional[dict] = None
|
||||
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
|
||||
class WorkflowTaskListOut(BaseModel):
|
||||
"""任务列表输出"""
|
||||
id: str
|
||||
instance_id: str
|
||||
instance_no: str = ""
|
||||
instance_title: str = ""
|
||||
instance_status: str = ""
|
||||
node_name: str
|
||||
task_type: str
|
||||
status: str
|
||||
assignee_id: str = ""
|
||||
assignee_name: str = ""
|
||||
workflow_name: str = ""
|
||||
initiator_name: str = ""
|
||||
started_at: Optional[CSTDatetime] = None
|
||||
sys_create_datetime: Optional[CSTDatetime] = None
|
||||
has_document_templates: bool = False
|
||||
# 超时相关字段
|
||||
timeout_at: Optional[CSTDatetime] = None
|
||||
timeout_action: str = ""
|
||||
is_timeout: bool = False
|
||||
# 流程图标
|
||||
workflow_icon: str = ""
|
||||
workflow_icon_bg_color: str = ""
|
||||
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
|
||||
# ============ 日志 Schema ============
|
||||
|
||||
class WorkflowLogOut(BaseModel):
|
||||
"""日志输出"""
|
||||
id: str
|
||||
node_id: str
|
||||
node_name: str
|
||||
action: str
|
||||
operator_id: str
|
||||
operator_name: str = ""
|
||||
comment: str
|
||||
extra_data: Optional[dict] = None
|
||||
sys_create_datetime: Optional[CSTDatetime] = None
|
||||
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
|
||||
# ============ 通用 Schema ============
|
||||
|
||||
class MessageResponse(BaseModel):
|
||||
"""消息响应"""
|
||||
message: str
|
||||
|
||||
|
||||
class CountResponse(BaseModel):
|
||||
"""计数响应"""
|
||||
count: int
|
||||
Reference in New Issue
Block a user