-- =============================================================================
-- S8-S1-EXCEPTION-FLOW-ROLE-REBIND-1
-- 目的：为 S1 产销协同/订单交付异常建立真实待办接收角色与账号，并把
--       TB001 / EXCEPTION_REPORT「异常提报」节点 approverIds 从 sys_admin(1300000000101)
--       改绑到 ROLE_S1_EXCEPTION_HANDLER(1329908000150)。
-- 安全：全幂等（NOT EXISTS 守卫 + FlowJson 唯一子串 REPLACE）；
--       不删 sys_admin / Demo01 / Demo02；不动历史 ApprovalFlowInstance / ApprovalFlowTask
--       （StartFlow 用 FlowJsonSnapshot，改定义只影响之后新发起的实例，异常 391 既有 2 待办不变）。
-- 密码：sys_password(=系统默认密码) 的 SM2 密文（与 App.json 内 committed 公私钥一致，跨环境可解）；
--       绝不写明文。账号默认密码=系统 sys_password，业务上线前必须修改。
-- 组织/岗位：OrgId=运营中心(789819155853381)、PosId=部门经理(1300000000106)，均为现有有效值。
-- =============================================================================

-- 1) 新建角色 ROLE_S1_EXCEPTION_HANDLER / S1异常处理员（幂等）
INSERT INTO SysRole (Id, Name, Code, OrderNo, DataScope, Remark, Status, TenantId, CreateTime)
SELECT 1329908000150, 'S1异常处理员', 'ROLE_S1_EXCEPTION_HANDLER', 800, 4,
       'S8 S1 异常待办承接角色（S8-S1-EXCEPTION-FLOW-ROLE-REBIND-1）', 1, 1300000000001, '2026-06-22 00:00:00'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM SysRole WHERE Id = 1329908000150 OR Code = 'ROLE_S1_EXCEPTION_HANDLER');

-- 2) 新建账号 s1_exception_handler / S1异常处理员（密码=sys_password 的 SM2 密文；幂等）
INSERT INTO SysUser
  (Id, Account, Password, RealName, NickName, Sex, Age, CardType, CultureLevel, OrderNo,
   Status, AccountType, PosId, OrgId, LangCode, TenantId, Remark, CreateTime)
SELECT 1329908000151, 's1_exception_handler', '0479c50cccb95b65f1f9429a5a8f771c0774b4b9061418e15704f92dd3c2fc2a52d67865d2f869ab672110bc5969529cc5b7e8c67fd6b9b28de6a238021ddf8e89cf99482ac696fcc21110fa23a5d00390d8f5e466877240c3fd94a30334114eb5cc0761f4a1706be52bd83f3229', 'S1异常处理员', 'S1异常处理员',
       0, 0, 0, 0, 100, 1, 777, 1300000000106, 789819155853381, 'zh-CN', 1300000000001,
       'S8 S1 异常待办接收账号（S8-S1-EXCEPTION-FLOW-ROLE-REBIND-1）；默认密码=系统 sys_password，上线前必须修改',
       '2026-06-22 00:00:00'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM SysUser WHERE Id = 1329908000151 OR Account = 's1_exception_handler');

-- 3) 绑定 账号 → 角色（幂等）
INSERT INTO SysUserRole (Id, UserId, RoleId)
SELECT 1329908000152, 1329908000151, 1329908000150
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM SysUserRole WHERE UserId = 1329908000151 AND RoleId = 1329908000150);

-- 4) TB001「异常提报」节点改绑：approverIds 1300000000101→1329908000150；approverNames 系统管理员→S1异常处理员
--    唯一子串 REPLACE：第二次执行时原串已不存在 → 自然 no-op（幂等）。approverType 保持 Role，multiApproveMode 不变。
UPDATE ApprovalFlow
SET FlowJson = REPLACE(
      REPLACE(FlowJson, '"approverIds":"1300000000101"', '"approverIds":"1329908000150"'),
      '"approverNames":"系统管理员"', '"approverNames":"S1异常处理员"')
WHERE Id = 799217842180165 AND Code = 'TB001' AND BizType = 'EXCEPTION_REPORT';
