-- 1.0.109.sql
-- S8-DEPT-MASTER-EXPAND-AND-BACKFILL-1
-- 1) 为 factory_ref_id=1（Domain='S8-DEMO-F1'）新增 4 个部门：订单管理部 / 技术设计部 / 采购部 / 物料仓储部；
-- 2) 把现有 16 条 ORDER_FLOW_KPI_OVERTIME_DERIVED 派生异常的责任部门按 order_flow_code 重新映射，
--    让"未归属"从 D-UNASSIGNED 重新分散到 4 个明确部门，消除 S8 部门卡全部落 D-UNASSIGNED 的演示问题。
-- 执行入口：AutoVersionUpdate.UseAutoVersionUpdate()，在 csproj Version=1.0.109 主节点首次启动时触发。
-- 幂等性：
--   * 部门 INSERT ... ON DUPLICATE KEY UPDATE 走 (tenant_id, Domain, Department) 唯一键；
--   * 异常 UPDATE 是按 CASE 重新映射，重复执行结果一致（CASE 命中相同 RecID）；
--   * 与 1.0.105/1.0.106 风格保持一致。
-- 安全边界：不改 stage_code / order_flow_code / exception_type_code / severity / status；
--           不动 source_rule_code 非 ORDER_FLOW_KPI_OVERTIME_DERIVED 的行；不动 is_deleted=1 的软删行。
-- 2026-05-16

-- 1) Upsert 4 个新部门（factory_ref_id=1 / Domain='S8-DEMO-F1' / tenant_id 与现有 D-PROD 等保持一致）
INSERT INTO DepartmentMaster
  (company_ref_id, factory_ref_id, tenant_id, Domain, Department, Descr, IsActive, CreateTime, CreateUser)
SELECT 1, 1, 797403760988229, 'S8-DEMO-F1', seed.code, seed.descr, 1, NOW(), 's8-dept-master-expand-1'
FROM (
  SELECT 'D-ORDER-MGMT'  AS code, '订单管理部' AS descr
  UNION ALL SELECT 'D-TECH-DESIGN',  '技术设计部'
  UNION ALL SELECT 'D-PURCHASE',     '采购部'
  UNION ALL SELECT 'D-WAREHOUSE',    '物料仓储部'
) seed
ON DUPLICATE KEY UPDATE
  Descr      = VALUES(Descr),
  IsActive   = 1,
  UpdateTime = NOW(),
  UpdateUser = 's8-dept-master-expand-1';

-- 2) 回填 16 条 ORDER_FLOW KPI 派生异常的责任/发生部门
-- 映射协议：
--   ORDER_REVIEW_PLAN_CALC  → D-ORDER-MGMT   （订单评审/排产/测算 = 订单管理部）
--   PRODUCT_DESIGN          → D-TECH-DESIGN  （产品设计 = 技术设计部）
--   MATERIAL_PURCHASE       → D-PURCHASE     （材料采购 = 采购部）
--   BODY_PRODUCTION         → D-PROD         （本体生产 = 生产部，保持不变）
--   FINAL_ASSEMBLY_DELIVERY → D-PROD         （总装发货 = 生产部，保持不变）
-- JOIN 按 factory_ref_id 对齐（DB 中 dept.tenant_id=797403760988229 与 exception.tenant_id=1 历史不一致，
-- 与现有 S8MonitoringService 部门水合口径一致：只看 factory_ref_id 和 RecID）。
UPDATE ado_s8_exception e
JOIN DepartmentMaster d
  ON d.Department = CASE e.order_flow_code
       WHEN 'ORDER_REVIEW_PLAN_CALC'  THEN 'D-ORDER-MGMT'
       WHEN 'PRODUCT_DESIGN'          THEN 'D-TECH-DESIGN'
       WHEN 'MATERIAL_PURCHASE'       THEN 'D-PURCHASE'
       WHEN 'BODY_PRODUCTION'         THEN 'D-PROD'
       WHEN 'FINAL_ASSEMBLY_DELIVERY' THEN 'D-PROD'
     END
 AND d.factory_ref_id = e.factory_id
 AND d.IsActive = 1
SET e.responsible_dept_id = d.RecID,
    e.occurrence_dept_id  = d.RecID,
    e.updated_at          = NOW(),
    e.updated_by          = 'system:s8_dept_master_expand_backfill'
WHERE e.is_deleted = 0
  AND e.source_rule_code = 'ORDER_FLOW_KPI_OVERTIME_DERIVED';

-- 验证 SQL（注释，仅人工核对，脚本本身不依赖 SELECT 结果）：
-- SELECT Department, Descr, IsActive FROM DepartmentMaster
--  WHERE Department IN ('D-ORDER-MGMT','D-TECH-DESIGN','D-PURCHASE','D-WAREHOUSE') AND factory_ref_id=1;
-- SELECT e.order_flow_code, d.Department, COUNT(*) FROM ado_s8_exception e
--   LEFT JOIN DepartmentMaster d ON d.RecID=e.responsible_dept_id
--  WHERE e.is_deleted=0 AND e.source_rule_code='ORDER_FLOW_KPI_OVERTIME_DERIVED'
--  GROUP BY e.order_flow_code, d.Department;
