-- ============================================================================= -- S8-EXCEPTION-FLOW-TENANT-CONTEXT-1 -- 目的:为 S8 跨 S1-S7 场景共用的 EXCEPTION_REPORT/TB001「异常提报」节点建立真正 -- 跨模块通用的异常受理角色,替换此前误绑的 S1 专属角色 ROLE_S1_EXCEPTION_HANDLER -- (该角色系 1.0.193.sql 为「S1 产销协同/订单交付异常」创建,见 S8 Flow Role 审计: -- EXCEPTION_REPORT 流程在该迁移发生前已跨 S1-S7 场景共用,绑定 S1 专属角色属误配)。 -- 范围:本批只保证 UAT 租户(838257186181189)闭环。其余流程克隆 -- (默认租户全局 TB001 / UATB-TB001 / DEMO-TB001)保持原状,不在本批处理—— -- 这些租户尚无对应的 ROLE_S8_EXCEPTION_HANDLER 成员,盲目改绑只会把失败模式 -- 从「角色查不到人」平移成「角色本身不存在」,不构成修复。 -- 安全:全幂等(NOT EXISTS 守卫 + FlowJson 唯一子串 REPLACE); -- 不删除 ROLE_S1_EXCEPTION_HANDLER / s1_exception_handler;不动其他 3 份流程克隆的 FlowJson; -- 不动历史 ApprovalFlowInstance / ApprovalFlowTask(StartFlow 用 FlowJsonSnapshot, -- 改定义只影响之后新发起的实例)。 -- 权限边界:新角色仅作 Flow Engine 审批身份,不插入任何 SysRoleMenu 行,不携带菜单/按钮/API 权限。 -- ============================================================================= -- 1) 新建角色 ROLE_S8_EXCEPTION_HANDLER / S8异常处理员(UAT 租户,幂等) INSERT INTO SysRole (Id, Name, Code, OrderNo, DataScope, Remark, Status, TenantId, CreateTime) SELECT 1329908000160, 'S8异常处理员', 'ROLE_S8_EXCEPTION_HANDLER', 800, 4, 'S8 跨 S1-S7 场景通用异常受理角色(S8-EXCEPTION-FLOW-TENANT-CONTEXT-1);仅 Flow Engine 审批身份,不挂载菜单权限', 1, 838257186181189, NOW() FROM DUAL WHERE NOT EXISTS ( SELECT 1 FROM SysRole WHERE Id = 1329908000160 OR (Code = 'ROLE_S8_EXCEPTION_HANDLER' AND TenantId = 838257186181189) ); -- 2) 绑定 UATExceptionA(838259724726341) → ROLE_S8_EXCEPTION_HANDLER(幂等) INSERT INTO SysUserRole (Id, UserId, RoleId) SELECT 1329908000161, 838259724726341, 1329908000160 FROM DUAL WHERE NOT EXISTS ( SELECT 1 FROM SysUserRole WHERE UserId = 838259724726341 AND RoleId = 1329908000160 ); -- 3) UAT 专属流程克隆 UATA-TB001(Id=9206082610000001)的「异常提报」节点改绑: -- approverIds 从默认租户物理 RoleId「1329908000150」(S1专属) -- 改为角色 Code「ROLE_S8_EXCEPTION_HANDLER」(由 FlowEngineService.ResolveApprovers -- 按受信任租户 838257186181189 解析到本租户物理角色 → 本租户成员,不再跨租户借用); -- approverNames 展示标签同步更新。仅此一个流程行,不动 global TB001 / UATB-TB001 / DEMO-TB001。 -- 唯一子串 REPLACE:第二次执行时原串已不存在 → 自然 no-op(幂等)。 UPDATE ApprovalFlow SET FlowJson = REPLACE( REPLACE(FlowJson, '"approverIds":"1329908000150"', '"approverIds":"ROLE_S8_EXCEPTION_HANDLER"'), '"approverNames":"S1异常处理员"', '"approverNames":"S8异常处理员"') WHERE Id = 9206082610000001 AND Code = 'UATA-TB001' AND BizType = 'EXCEPTION_REPORT';