1.0.533.sql 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. -- =====================================================================================
  2. -- 1.0.533 · S8 Stage-2「产品设计」KPI 事实层
  3. --
  4. -- ── 链路 ────────────────────────────────────────────────────────────────────────────
  5. -- dwd_order_review_kpi.review_end_time (Stage-1 已有 DWD Authority)
  6. -- + mdp_std_action_event (S2_DAILY_PLAN_RELEASE) (Stage-2 End Authority,1.0.532 建立)
  7. -- + mdp_std_operation_schedule.status='Y' (历史"已下达"状态佐证,只作旁证不取时间)
  8. -- → dwd_product_design_kpi → S8 订单执行档案 PRODUCT_DESIGN
  9. --
  10. -- ── 历史语义(本表存在的核心理由)────────────────────────────────────────────────────
  11. -- 1.0.532 之前系统不写「日计划下达」动作事件,因此历史上已下达的订单
  12. -- **只能证明"已经下达",无法证明"何时下达"**。本表用独立状态 END_UNKNOWN 表达这件事,
  13. -- 与 IN_PROGRESS 严格区分:
  14. -- END_UNKNOWN = 已形成可执行日计划,但历史时间 Authority 缺失
  15. -- IN_PROGRESS = 没有任何证据表明已形成可执行日计划
  16. -- 若把两者都显示成「进行中」,会把历史数据缺口误判成业务未完成。
  17. --
  18. -- 🔴 绝对禁止用 PeriodSequenceDet.UpdateTime / create_time / EffTime / IsConfirm
  19. -- 反推历史 End —— UpdateTime 会被后续任意一次 UPDATE 覆盖,拿它当下达时间正是
  20. -- 1.0.532 要消除的问题。END_UNKNOWN 行的 end_time 与 actual_hours 一律 NULL。
  21. --
  22. -- ── 本表不含 ────────────────────────────────────────────────────────────────────────
  23. -- target_hours / kpi_status / 红黄绿阈值 / achievement_rate —— 属另一批次。
  24. -- =====================================================================================
  25. CREATE TABLE IF NOT EXISTS `dwd_product_design_kpi` (
  26. `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '代理主键',
  27. `tenant_id` BIGINT NOT NULL COMMENT '租户ID(唯一隔离边界,uk 首列)',
  28. `sales_order_id` BIGINT NOT NULL COMMENT '销售订单头ID = crm_seorder.Id(归因权威,来自 mdp_std_so.order_id)',
  29. `sales_order_no` VARCHAR(128) NULL COMMENT '销售订单号(仅展示/搜索,不作 JOIN Authority)',
  30. `review_end_time` DATETIME NULL COMMENT 'Stage-1 评审结束时刻(原样取自 dwd_order_review_kpi,不重算)',
  31. `release_action_run_id` BIGINT NULL COMMENT '被采纳的 S2_DAILY_PLAN_RELEASE 事件ID(FIRST SUCCESS)',
  32. `product_design_start_time` DATETIME NULL COMMENT 'Stage-2 开始 = review_end_time',
  33. `product_design_end_time` DATETIME NULL COMMENT 'Stage-2 结束 = FIRST SUCCESS 释放事件的 action_end_time;END_UNKNOWN/IN_PROGRESS 时为 NULL',
  34. `actual_hours` DECIMAL(12,2) NULL COMMENT '实际耗时(自然 elapsed 小时,2 位小数,不扣夜间/周末/节假日);仅 OK 有值',
  35. `calculation_status` VARCHAR(32) NOT NULL COMMENT 'OK / NOT_STARTED / IN_PROGRESS / END_UNKNOWN / INVALID_NO_START / INVALID_TIME_SEQUENCE',
  36. `release_success_count` INT NOT NULL DEFAULT 0 COMMENT '该订单的释放事件 SUCCESS 次数(可观测性,不参与计算)',
  37. `release_failed_count` INT NOT NULL DEFAULT 0 COMMENT '该订单的释放事件 FAILED 次数(可观测性,不参与计算)',
  38. `has_released_schedule` TINYINT NOT NULL DEFAULT 0 COMMENT '中台是否存在该订单已下达(status=Y)的日计划行;仅用于区分 END_UNKNOWN / IN_PROGRESS,不取时间',
  39. `calc_batch_id` VARCHAR(100) NULL COMMENT '最近一次重算批次号',
  40. `calc_time` DATETIME NULL COMMENT '最近一次重算时刻',
  41. `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '首次落库时刻',
  42. `update_time` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '最近一次更新时刻',
  43. PRIMARY KEY (`id`),
  44. UNIQUE KEY `uk_dwd_product_design_kpi` (`tenant_id`, `sales_order_id`),
  45. KEY `idx_dwd_pd_kpi_status` (`tenant_id`, `calculation_status`),
  46. KEY `idx_dwd_pd_kpi_no` (`tenant_id`, `sales_order_no`)
  47. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='DWD-产品设计KPI(Stage-2;本批仅 ActualHours,无 TargetHours)';