PRODUCT REQUIREMENTS DOCUMENT

MES 定时任务管理模块 · 产品需求文档

版本:v1.4 日期:2026-07-16 作者:Buddy(产品专家) 归属:MES / 系统管理域 状态:评审稿
目录
  1. 文档概述与范围
  2. 业务背景与问题
  3. 术语与定义
  4. 用户角色与权限
  5. 功能需求清单(FR)
  6. 关键功能详设
  7. 数据模型
  8. 非功能需求
  9. 交互与业务流程
  10. 验收标准
  11. 里程碑与迭代计划
v1.4 变更摘要(评审 P2 推进):延续 v1.3 评审修复,本期补全 4 项 P2 治理能力——① API 触发幂等(FR-25):开放 API 触发支持 Idempotency-Key,重试不重复执行;② Webhook 出站白名单 / 防 SSRF(FR-26):告警地址须命中出站白名单且禁止内网保留段;③ 流程节点失败重试(FR-27):节点级重试次数/间隔/退避/超时 + 整流程失败策略(中止/跳过/告警后继续);④ 禁止绑定草稿流程(FR-28):仅已发布流程可被任务绑定,草稿保存不误伤线上。
v1.3 变更摘要(评审修订):针对需求评审意见修复 1 项 P0 + 2 项 P1——① 一次性任务(P0):原「仅一次」误用 6 段 Cron 表达为「每天」,现拆分为独立调度类型 schedule_type(cron / once),一次性任务存为 fire_once_time(datetime)并在到期后自动结束,与 XXL-JOB 模型一致;② 时区(P1):任务新增 timezone 字段,每天 HH:MM 等语义以任务时区为基准,规避多厂区错时;③ 周字段映射(P1):明确存储口径与 Quartz 的双向映射规则(0=周日…6=周六 ↔ 1=SUN…7=SAT)。新增 FR-23(一次性任务,P0)、FR-24(任务时区,P1);验收标准加严。
v1.2 变更摘要:相较 v1.1,本期重点强化 Cron 易用性——将「简单模式」从静态预设下拉升级为可视化频率向导(按「每隔几分钟 / 每小时 / 每天 / 每周 / 每月 / 仅一次」分类选择,再选时/分/星期/日期),并新增常用快捷一键套用;中文可读描述与「未来 5 次触发」由向导状态实时精确推算(跨天/跨周/跨月)。验收标准同步加严(见 §10)。
v1.1 变更摘要:新增 FlowNode 轻量流程编排、开放 API 接入、Cron 双模式易用三项能力(FR-19~FR-22)。

1. 文档概述与范围

1.1 目的

本文件定义 MES(制造执行系统)中「定时任务」模块的功能范围、业务流程、数据模型与交互规范,作为前端(Vben Admin)、后端调度/流程服务与测试验收的统一依据。原型见随附《MES定时任务模块_交互原型.html》。

1.2 范围

本期纳入
任务定义与启停、Cron 双模式易用配置(频率向导 + 常用快捷 / 专家原生表达式)、执行日志、失败告警、FlowNode 轻量流程编排(顺序 + 条件分支)开放 API 接入(外部触发/查询)、基础权限与审计。
本期不纳入
跨服务分布式 DAG 编排、可视化拖拽画布(MVP 以节点列表方式编排,画布为后续增强)、跨集群调度高可用(列技术债)。
关联模块
MES 设备采集、生产报表、WMS 库存、工单(WO)、QMS 质量、ERP 集成网关、开放平台网关。
设计假设:调度内核沿用项目既有 Quartz / 自研调度服务,本模块聚焦「管控面」;流程执行由新增的轻量 FlowNode 引擎承载;前端基于 Vben Admin(Ant Design Vue)。

2. 业务背景与问题

MES 中大量运维与业务流程需周期性自动执行。当前任务散落在各微服务、由各团队手工维护 Cron,缺乏统一管控,存在不可视、不可控、无告警、难排查、高风险等问题。此外,两类新诉求凸显:

3. 术语与定义

术语定义
调度引擎按 Cron 触发任务/流程执行的底层服务(类 Quartz / XXL-JOB 风格)。
Cron 表达式6 段(秒 分 时 日 月 周)时间表达式,描述周期型触发。本模块周字段采用 0=周日 … 6=周六(见 §6.2.3 映射规则)。
调度类型 schedule_type区分任务触发方式:cron=按周期(存 Cron 表达式);once=一次性(存 fire_once_time 指定日期时刻,触发后自动结束)。
时区 timezone任务周期/触发时刻的解释基准(IANA 时区,如 Asia/Shanghai)。「每天 08:00」等语义均以任务时区为准,规避多厂区错时。
简单模式 / 专家模式简单模式以「频率预设 + 中文可读描述」配置周期;专家模式直接编辑原生 Cron 表达式。两者等价互转。
FlowNode(流程节点)流程编排中的最小执行单元;一个任务可绑定一条由多个 FlowNode 组成的执行流。
流程编排(Flow)由开始/结束节点及若干业务节点组成的有向执行流,支持顺序与条件分支(轻量 DAG)。
开放 API对外暴露的 REST 接口,用于触发任务/流程、查询状态与日志。
API Token调用开放 API 的凭证,带作用域(scope)与有效期,Bearer 方式鉴权。
Misfire 策略调度错过触发时点后的补偿策略:立即执行一次 / 下次触发 / 丢弃。

4. 用户角色与权限

角色职责权限要点
系统管理员全量配置与兜底全部操作:增删改、启停、手动/API 触发、流程编排、Token 管理、审计。
MES 运维日常监控与干预查看、执行一次、启停、查看日志;不可建/删系统级任务与 Token。
业务配置员在授权范围内配置仅可在被授予「任务类型」内新建/编辑/启停业务任务与流程节点。
集成开发者对接外部系统管理 API Token、查看端点文档;仅能在授权作用域内触发/查询。
审计员合规检视只读 + 日志查看 + 操作审计,无写权限。
权限以「任务组(taskGroup)+ 操作」二维矩阵控制;系统级任务组(SYSTEM)仅管理员可改;API Token 作用域按任务组/流程授权。

5. 功能需求清单(FR)

编号功能优先级说明关键验收点
FR-01任务列表P0分页展示全部任务,含状态、Cron、下次执行时间。字段完整、可分页排序。
FR-02搜索与筛选P0按任务名/类型/状态/任务组筛选。组合筛选结果准确。
FR-03新建任务P0支持执行方式:单任务 / 流程(绑定 Flow)。提交后即时生效。
FR-04编辑任务P0修改任意可编辑字段并热更新。运行中任务修改后不丢状态。
FR-05启停任务P0暂停/恢复单个任务调度。暂停后不再触发。
FR-06手动执行一次P0立即触发一次(不影响周期)。执行类型标记「手动」。
FR-07删除任务P1软删除并清理调度注册。删除后日志保留。
FR-21Cron 双模式易用P0「简单模式」= 频率向导(按频率类别选择 + 时/分/星期/日期控件)+ 常用快捷一键套用,自动生成表达式并展示中文描述;「专家模式」原生 6 段 Cron;两种模式均实时预览「未来 5 次触发」。向导生成的表达式与专家模式一致;中文描述与实际调度一致;下次触发按向导状态精确推算。
FR-23一次性任务(schedule_type=once)P0新增独立于 Cron 的「仅一次」调度类型:用户指定日期时刻(fire_once_time),系统到点触发一次后自动置为「已完成/已结束」,不再重复。到期前可编辑/取消。仅一次任务不存 Cron 表达式;触发后状态正确流转;编辑回显日期时刻;到期后不可重复触发。
FR-24任务时区P1任务可指定 timezone(默认 Asia/Shanghai / 厂区本地时区);周期与触发时刻按时区解释,多厂区各自一致。同一 Cron 在不同时区展示/触发时刻正确;时区变更后下次触发重算。
FR-08Cron 校验P0实时语法校验,非法拦截提交。非法表达式不可保存。
FR-09任务类型模板P1预置 MES 任务类型,带出默认配置。选类型带出默认值。
FR-10执行日志P0记录每次执行时间、耗时、状态、触发类型。日志可查、可筛选、可导出。
FR-11异常详情P1查看失败任务的异常栈。异常信息完整。
FR-12失败告警P1失败按渠道(站内/邮件/Webhook)通知。失败触发通知。
FR-13任务详情P1概览:状态、Cron 可读描述、下次/上次执行、连续失败。信息聚合准确。
FR-14并发控制P1禁止/允许并发执行。禁止时上一次未完则跳过。
FR-15Misfire 策略P2立即/下次/丢弃三种补偿。重启后按策略补偿。
FR-16操作审计P2记录增删改启停/API 触发与操作人。审计可回溯。
FR-17批量操作P2列表多选批量启停/删除。批量结果一致。
FR-18调度监控看板P2成功率、失败 TOP、近 24h 执行量。指标与日志一致。
FR-19FlowNode 流程编排P1任务可绑定由多节点(采集/转换/校验/API调用/脚本/条件/通知)组成的执行流,支持顺序与条件分支。流程按节点顺序/分支正确执行,节点失败可定位。
FR-22API 调用节点P1FlowNode 支持 API 调用节点(方法/URL/Header/Body),打通对外集成。节点按配置调用外部接口并记录响应。
FR-20开放 API 接入P1提供 REST API 供外部触发任务/流程、查询状态与日志;API Token 鉴权 + 作用域。合法 Token 可触发并查询,无 Token/越权被拒。
FR-25API 触发幂等P2开放 API 触发任务/流程支持 Idempotency-Key(或请求指纹);同一 key 在 TTL(默认 24h)内重复提交仅执行一次,重复请求直接返回既有执行记录;TTL 外视为新请求重新执行。网络重试不重复执行;重复请求返回既有执行 ID/状态;越 TTL 重新执行。
FR-26Webhook 出站白名单(防 SSRF)P2配置 Webhook 告警地址时,目标 URL 须命中「出站地址白名单」(域名/网段/IP),且禁止指向内网保留地址段(10/8、172.16/12、192.168/16、127/8、169.254/16 等);不命中或命中内网段则拒绝保存/发送;发送失败有重试上限。内网地址被拒;非白名单域名被拒;白名单内正常送达。
FR-27流程节点失败重试P2FlowNode 支持按节点配置重试次数、重试间隔(固定/指数退避)、单节点超时(ms);整流程可配置失败策略(遇节点失败即中止 / 跳过继续 / 告警后继续)。节点失败按策略重试/跳过/中止;超时中断;策略生效。
FR-28禁止绑定草稿流程P2任务(流程方式)保存时校验所绑流程 status=已发布(PUBLISHED);草稿态流程不可被绑定;流程编辑「另存为草稿」不影响已发布版本,发布需显式动作。绑草稿流程被拒;已发布流程可绑定;草稿保存不误伤线上。

6. 关键功能详设

6.1 新建 / 编辑任务(FR-03 / FR-04)

表单在 v1.0 基础上新增「执行方式」:

字段类型必填规则 / 默认值
任务名称文本唯一,2–50 字。
执行方式单选单任务(直接调用目标)/ 流程(绑定一条 Flow,见 §6.5)。
任务类型下拉见 §6.4 枚举;流程方式下可留空。
调用目标 / 绑定流程单任务=Bean/URL;流程=选择 Flow。
调用参数JSON合法 JSON。
Cron 表达式双模式见 §6.2;含中文可读描述。
并发/Misfire/告警同 v1.0。

6.2 Cron 双模式易用配置(FR-21 / FR-08)

触发方式分两类,由 schedule_type 区分:周期型(cron)走下方双模式配置;一次性(once)走独立「仅一次」表单(见 §6.2.4),二者不共用表达式。所有周期型任务后台统一存为 Cron 表达式并冗余一份中文可读描述。

6.2.1 简单模式(默认)= 频率向导 + 常用快捷

① 常用快捷(一键套用):在向导上方提供高频预设 chips,点击即套用,覆盖一线最高频场景:每 5 分钟、每 30 分钟、每小时整点、每天 08:00、每天 20:00、每周一 09:00、工作日 08:30、每月 1 号 00:00。

② 频率向导(可视化配置):按「业务语言」选择,全程不接触原生 Cron 语法:

频率类别向导控件生成的 Cron(6 段)中文可读描述
每隔几分钟间隔 chips(1/5/10/15/30 分钟)0 0/N * * * ?每 N 分钟执行一次
每小时分钟下拉(0–59)0 M * * * ?每小时的第 M 分钟 / 整点执行
每天时、分下拉0 M H * * ?每天 HH:MM:00 执行
每周星期多选 + 时、分下拉0 M H ? * DOW每[周X、周Y] HH:MM:00 执行
每月月内日期下拉 + 时、分下拉0 M H D * ?每月 D 号 HH:MM:00 执行

时区说明:上述「每天 / 每周 / 每月」等时刻均以任务 timezone 字段为基准(FR-24,默认 Asia/Shanghai)。跨厂区部署时,各厂区任务以其本地时区解释 Cron,避免统一服务器时区带来的错时问题。

向导与「专家模式」下的 6 段表达式双向互转:编辑已有任务时,系统尝试将存量 Cron 反解析回最接近的向导配置;无法精确对应的复杂表达式(如多个不规则取值、步进组合)自动回退到专家模式,不丢配置。

6.2.2 实时反馈

6.2.3 专家模式与校验

含义本系统存储值Quartz 值
周日01
周一12
周二23
周三34
周四45
周五56
周六67
等价性要求:简单模式生成的表达式在专家模式打开后完全一致;专家模式编辑后若能解析,简单模式回显最接近的中文描述(无法精确对应时提示「自定义周期」)。

6.2.4 一次性任务(schedule_type = once,FR-23)

针对「某年某月某日某时执行一次」场景,使用 Cron 表达式,而是独立表单选择日期 + 时刻(fire_once_time)。系统到点触发一次后,任务状态流转为「已结束」,不重复调度;到期前可编辑日期时刻或取消。

6.3 执行日志(FR-10 / FR-11)

6.4 MES 任务类型枚举(FR-09)

类型编码名称典型调用目标默认周期
EQUIP_COLLECT设备数据采集equipCollectionJob.collect每 1 分钟
REPORT_GEN生产报表生成reportJob.daily每日 08:00
WMS_WARN库存预警检查wmsWarnJob.check每 30 分钟
WO_ESCALATE工单超时升级woEscalateJob.run每 15 分钟
ERP_SYNCERP 订单同步erpSyncJob.sync每日 02:30
DATA_ARCHIVE历史数据归档archiveJob.archive每日 03:00
QMS_AGG质量数据汇总qmsAggJob.aggregate每日 12:00
MAINT_REMIND保养计划提醒maintRemindJob.remind每周一 09:00

6.5 FlowNode 流程编排(FR-19 / FR-22)

当任务「执行方式 = 流程」时,绑定一条 Flow。Flow 由节点构成,MVP 支持顺序执行与条件分支(轻量 DAG)。

节点类型说明关键配置
START / END流程起止
COLLECT 采集采集设备/接口数据数据源、模式
TRANSFORM 转换数据清洗/映射规则 / 脚本
VALIDATE 校验业务规则校验校验表达式
API_CALL API调用调用外部 REST 接口方法、URL、Header、Body(FR-22)
SCRIPT 脚本自定义逻辑语言、代码
CONDITION 条件分支按表达式分流表达式、true→、false→
NOTIFY 通知发送通知渠道、模板

编排交互:以「节点列表 + 连接线」方式呈现(后续增强为拖拽画布);支持新增/删除/排序节点、配置节点参数、设置分支条件。每个节点独立记录执行状态与耗时,便于失败定位。

6.5.1 节点重试与整流程失败策略(FR-27)

为提升流程健壮性,每个节点可独立配置重试与超时(FR-27),整流程再统一约定失败处置方式:

配置项说明取值 / 默认
节点重试次数 retry_count节点执行失败后的重试上限0–5,默认 0(不重试)
重试间隔 retry_interval两次重试之间的间隔毫秒,默认 1000
退避策略 retry_backoff间隔是否随次数增长fixed 固定 / exponential 指数退避(默认 fixed)
节点超时 timeout_ms单节点执行超时,超时即判失败并走重试/失败策略毫秒,默认 30000
整流程失败策略 on_node_failure任一节点失败(重试后仍失败)时的处置0=中止 / 1=跳过继续 / 2=告警后继续(默认 0 中止)
重试仅对「可重试」错误(网络超时、5xx、限流)生效;业务校验失败(VALIDATE 不通过、4xx 明确拒绝)默认不可重试,直接按失败策略处置。指数退避上限封顶,避免长尾。

6.6 开放 API 接入(FR-20 / FR-25)

对外暴露 REST 接口,供 ERP / WMS / 低代码等外部系统触发与查询;采用 Bearer Token 鉴权,Token 带作用域与有效期。

方法路径说明
POST/api/v1/mes/jobs/{jobId}/trigger触发指定任务一次(触发类型记 API);支持 Idempotency-Key 请求头(FR-25)。
GET/api/v1/mes/jobs/{jobId}查询任务定义与当前状态/下次执行。
GET/api/v1/mes/jobs/{jobId}/logs查询该任务执行日志(分页)。
POST/api/v1/mes/flows/{flowId}/run触发指定流程执行。
GET/api/v1/mes/flows/{flowId}/status查询流程执行状态与各节点进度。

Token 管理:列表展示名称、作用域(任务组/流程)、有效期、状态;可创建/吊销;密钥仅创建时明文展示一次。

6.6.1 触发幂等(FR-25)

外网调用方常因网络抖动重试 POST 触发请求,若不幂等会导致同一业务事件被重复执行。约定如下:

6.7 失败告警与 Webhook 出站白名单(FR-12 / FR-26)

失败告警支持站内 / 邮件 / Webhook 三渠道(FR-12)。其中 Webhook 是最易引入 SSRF 风险的入口:恶意或误配的回调地址可能指向内网元数据服务(如 169.254.169.254)或内部系统,造成信息泄露或服务被打。规范如下(FR-26):

7. 数据模型

7.1 任务实体(mes_job)

字段类型说明
idbigint主键
task_namevarchar任务名称(唯一)
invoke_modetinyint0=单任务 1=流程
task_typevarcharMES 任务类型(单任务时有值)
task_groupvarchar任务组
invoke_targetvarchar调用目标(单任务时有值)
flow_idbigint绑定流程 ID(流程方式时有值)
invoke_paramstext调用参数(JSON)
schedule_typetinyint0=周期(cron) 1=一次性(once)
cron_expressionvarchar周期型任务存 Cron 表达式;一次性任务留空
fire_once_timedatetime一次性任务触发时刻;周期型为空
timezonevarcharIANA 时区(如 Asia/Shanghai),周期解释基准(FR-24)
cron_human_descvarchar中文可读描述,周期型有效;如「每天 08:00:00 执行」
statustinyint0=运行中 1=已暂停
concurrent / misfire_policytinyint并发 / Misfire 策略
alarm_enabled / alarm_channels失败告警开关与渠道
next_exec_timedatetime下次执行(冗余)
remark / creator / updater / 时间戳备注与审计

7.2 执行日志实体(mes_job_log)

字段类型说明
idbigint主键
job_id / job_name / job_group关联任务
flow_idbigint关联流程(流程任务时有值)
execute_typetinyint0=自动 1=手动 2=API
start_time / end_time / duration_ms起止与耗时
statustinyint0=成功 1=失败
fail_nodevarchar失败节点 ID(流程任务时有值)
exception_msgtext异常栈
idempotency_keyvarchar幂等键(API 触发时有值,FR-25)

7.3 流程与节点实体

实体字段说明
mes_flowid, name, remark, status(0=草稿 DRAFT / 1=已发布 PUBLISHED), on_node_failure(0中止/1跳过/2告警后继续), create_time流程定义(仅 PUBLISHED 可被任务绑定,FR-28)
mes_flow_nodeid, flow_id, node_type, node_name, config(JSON), order_no, next_node_id, condition_expr, retry_count, retry_interval, retry_backoff(fixed/exponential), timeout_ms流程节点(顺序/分支 + 重试/超时,FR-27)
mes_outbound_whitelistid, type(0域名/1 IP/2 CIDR), value, enabled, remark, create_timeWebhook 出站白名单(FR-26,防 SSRF)

7.4 API Token 实体(mes_api_token)

字段类型说明
id / token_name主键与名称
tokenvarchar凭证(密文存储,仅创建时明文展示)
scopevarchar作用域(任务组/流程 ID 列表)
expire_time / status有效期与启用状态

8. 非功能需求

9. 交互与业务流程

1新建任务:选执行方式 → 单任务填调用目标 / 流程选 Flow → Cron 双模式配置 → 保存 → 调度注册。
2流程执行:触发后 FlowNode 引擎按节点顺序执行,遇 CONDITION 按表达式分流;节点失败记录 fail_node 并告警。
3API 触发:外部系统持 Token 调用 /trigger → 鉴权+作用域校验 → 触发 → 日志 execute_type=API;可轮询状态/日志。
4异常闭环:执行失败 → 写日志(status=失败) → 若开启告警则按渠道通知 → 运维在日志/流程视图定位失败节点。

10. 验收标准

11. 里程碑与迭代计划

阶段范围交付物
M1(基础+易用)FR-01~08、10、13、21、23、24任务增删改查、启停、手动执行、Cron 双模式易用一次性任务任务时区、日志、详情。
M2(编排+集成)FR-09、11、12、14、19、22、20任务类型模板、异常详情、失败告警、并发、FlowNode 流程编排 + API 调用节点开放 API + Token
M3(治理)FR-15、16、17、18、25、26、27、28Misfire、审计、批量操作、调度监控看板;API 触发幂等、Webhook 出站白名单(防 SSRF)、流程节点重试、禁止绑定草稿流程
下一步建议:(1)与后端确认 FlowNode 引擎执行模型(顺序/分支语义)与节点失败策略;(2)确认开放 API 网关与 Token 发放流程(建议接入统一开放平台);(3)确认 Cron 简单模式预设集合是否覆盖一线高频场景;(4)基于原型组织需求评审,锁定 M1 范围。