mirror of
http://git.pig4cloud.com/pig/pigx.git
synced 2026-11-08 20:49:00 +08:00
70 lines
4.7 KiB
Markdown
70 lines
4.7 KiB
Markdown
# 节点配置版本隔离升级
|
|
|
|
本次只隔离节点配置。业务 flowId 不变;流程图、表单定义的完整历史快照不在本次范围。任务、抄送和实例详情使用对应版本的字段权限,当前表单中未被该快照声明的字段默认隐藏;这不替代服务端的提交字段鉴权。已结束实例的详情依赖 Flowable 历史数据来确定版本,历史已清理时会明确报错,不能回退最新版。
|
|
|
|
## 上线顺序
|
|
|
|
1. 暂停流程发布、发起、任务处理和异步执行器,备份流程业务表及 Flowable 数据。不得新旧版本混跑:旧代码会按 flowId + nodeId 删除节点记录。
|
|
2. 对已有库执行同目录 20261013_flow_node_version.sql;新库直接使用初始化脚本。升级 SQL 只执行一次,不删除旧配置。
|
|
3. 核对存量定义与节点配置,建立明确的版本映射。至少覆盖所有运行中定义;如需要查询历史任务、抄送或使用旧定义,也必须覆盖对应历史定义。
|
|
4. 将已核验配置写入对应 process_definition_id,包含 root 和所有业务节点。每个租户、定义、节点只能有一条快照。按该版本的已核验表单字段集合补齐各节点 formPerms:原来未配置/空值的字段按原有前端默认语义补 E,已有 H/R/E 保留;包含 children 中的嵌套字段及带 field 的容器。不能用当前表单的新增字段补旧版权限。无法恢复原字段集合时,此版本迁移尚未完成。
|
|
5. 复查覆盖情况,部署全部新代码后恢复业务。无法确认映射时不要恢复受影响流程;运行期会明确报“缺少节点版本快照”,不会回退读取最新版。
|
|
|
|
## 只读盘点
|
|
|
|
在工作流所在数据库执行以下查询;若自定义了 Flowable 表名前缀,请先调整。
|
|
|
|
SELECT DISTINCT d.TENANT_ID_, d.KEY_, d.ID_, d.VERSION_, d.DEPLOYMENT_ID_
|
|
FROM ACT_RU_EXECUTION e
|
|
JOIN ACT_RE_PROCDEF d ON d.ID_ = e.PROC_DEF_ID_
|
|
ORDER BY d.TENANT_ID_, d.KEY_, d.VERSION_;
|
|
|
|
SELECT p.tenant_id, p.flow_id, p.unique_id, d.ID_, d.VERSION_, p.process
|
|
FROM process p
|
|
JOIN ACT_RE_PROCDEF d
|
|
ON d.DEPLOYMENT_ID_ = p.unique_id
|
|
AND d.KEY_ = p.flow_id
|
|
AND d.TENANT_ID_ = CAST(p.tenant_id AS CHAR)
|
|
WHERE p.del_flag = '0';
|
|
|
|
SELECT id, tenant_id, flow_id, node_id, del_flag, process_definition_id, data
|
|
FROM process_node_data
|
|
ORDER BY tenant_id, flow_id, node_id, id;
|
|
|
|
process.unique_id 存储部署 ID,可以定位当前模板的引擎定义。它只能帮助定位当前发布版本,不代表所有旧节点记录都属于该版本。旧节点表保留了逻辑删除数据,但没有发布版本标记;不能按行 ID 或时间顺序自动配对。
|
|
|
|
核对节点 JSON 与相应发布资料/备份,包括审批人、多实例模式、拒绝策略、字段权限、触发器和通知地址。配置中的敏感业务内容不要写入审查日志。
|
|
|
|
## 存量写入模板
|
|
|
|
下面只是单行映射示例,所有占位值都必须替换为已核验结果。先 SELECT 确认目标行和定义的租户、业务 key、版本一致,再在受控事务中执行。不要按 flowId 批量绑定最新版。
|
|
|
|
UPDATE process_node_data n
|
|
JOIN ACT_RE_PROCDEF d
|
|
ON d.ID_ = '<已核验的流程定义ID>'
|
|
AND d.KEY_ = n.flow_id
|
|
AND d.TENANT_ID_ = CAST(n.tenant_id AS CHAR)
|
|
SET n.process_definition_id = d.ID_, n.del_flag = '0'
|
|
WHERE n.id = <已核验的节点记录ID>
|
|
AND n.tenant_id = <目标租户ID>
|
|
AND n.process_definition_id IS NULL;
|
|
|
|
一条旧记录如果需属于多个已验证版本,应分别插入不同 ID 的快照副本;不要反复改写同一行的版本 ID。若需从原始设计 JSON 重建节点,注意前端的 nodeName/childNode 与数据库 JSON 的 name/children 映射,并保存所有节点。无法恢复的历史版本应明确列为阻塞,不能用最新版替代。
|
|
|
|
迁移后检查所有运行实例是否有 root 快照:
|
|
|
|
SELECT DISTINCT d.ID_, d.KEY_, d.TENANT_ID_
|
|
FROM ACT_RU_EXECUTION e
|
|
JOIN ACT_RE_PROCDEF d ON d.ID_ = e.PROC_DEF_ID_
|
|
LEFT JOIN process_node_data n
|
|
ON n.process_definition_id = d.ID_
|
|
AND CAST(n.tenant_id AS CHAR) = d.TENANT_ID_
|
|
AND n.node_id = 'root' AND n.del_flag = '0'
|
|
WHERE n.id IS NULL;
|
|
|
|
该查询必须无遗漏;还需对照设计检查全部业务节点,不能仅用 root 存在代替完整性核验。新发布时程序先按当时的表单字段集合补齐默认 E 权限,再在部署事务中写快照,后续不得人工修改已发布数据。
|
|
|
|
## 回退
|
|
|
|
不能在产生新快照后直接恢复旧代码继续写流程。需要先冻结流程写入,再根据备份和期间新增实例单独制定回退方案。不要直接删除快照或批量清空版本列。
|