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