-- ============================================================================= -- 批次:S5-S6-S7-T8-KPI-DATA-FOUNDATION-REFRESH-1 -- 范围:S5 物料仓储 / S6 生产执行 / S7 成品仓储 — T8 KPI 数据底座 -- 边界: -- 1. 只建 DOP 端 DWD 与元数据登记,不建 mdp_stg_t8_*(一期不做贴源层) -- 2. 不动 T8 源库任何对象 -- 3. metric_value 保留 NULL 语义;分母缺失时禁止伪装 0 -- 4. 所有 INSERT 使用 ON DUPLICATE KEY UPDATE 保证幂等 -- 上游 SQL:方老师 v5.4 KPI 字段对照表 J 列(DOP-T8字段对照表_v5.4(3) 的副本.xlsx) -- 字段反推依据:lwb/对接T8/T8-KPI字段对照表-按SQL重新梳理-v1.md -- 阶段 0 实测:lwb/对接T8/T8-KPI开发阶段0证据-v1.md -- ============================================================================= -- ----------------------------------------------------------------------------- -- A. 9 张 DWD 主题宽表(dwd_t8_<业务主题>,统一 t8 前缀以标识源系统) -- ----------------------------------------------------------------------------- -- A.1 #16 S5 物料上线周期(日 T+1) CREATE TABLE IF NOT EXISTS `dwd_t8_material_online_cycle` ( `id` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, `tenant_id` BIGINT NOT NULL DEFAULT 0, `factory_id` BIGINT NOT NULL DEFAULT 1, `biz_date` DATE NOT NULL COMMENT '业务日期(refresh 跑数日期)', `source_ztid` VARCHAR(64) NOT NULL COMMENT 'T8 账套(kc_tz_head.ztid)', `item_code` VARCHAR(64) NOT NULL COMMENT 'T8 kc_tz_list.code 物料编码', `online_date` DATETIME NULL COMMENT '配送到产线日期=lbs=生产领料最早 shtime', `receipt_date` DATETIME NULL COMMENT '物料收货日期=lbs=采购入库最早 shtime', `cycle_days` INT NULL COMMENT 'DATEDIFF(day, receipt_date, online_date);任一端 NULL 时 NULL', `batch_id` VARCHAR(100) NOT NULL, `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `update_time` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP, UNIQUE KEY `uk_t8_mat_online_cycle` (`tenant_id`,`factory_id`,`biz_date`,`source_ztid`,`item_code`), KEY `idx_t8_mat_online_cycle_biz_date` (`biz_date`), KEY `idx_t8_mat_online_cycle_batch` (`batch_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='T8 #16 物料上线周期 DWD'; -- A.2 #17 S5 物料上线满足率(日 T+1) CREATE TABLE IF NOT EXISTS `dwd_t8_material_online_fulfillment` ( `id` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, `tenant_id` BIGINT NOT NULL DEFAULT 0, `factory_id` BIGINT NOT NULL DEFAULT 1, `biz_date` DATE NOT NULL, `source_ztid` VARCHAR(64) NOT NULL, `work_order_no` VARCHAR(64) NOT NULL COMMENT 'T8 kc_dd_head.noid = kc_tz_list.lynoid', `before_kgdate_rows` INT NOT NULL DEFAULT 0 COMMENT '工单开工日期前完成物料上线行数(分子)', `total_rows` INT NOT NULL DEFAULT 0 COMMENT '工单物料总行数(分母,来自 kc_dd_list_cllist)', `fulfillment_rate` DECIMAL(18,4) NULL COMMENT '分母=0 时 NULL;不伪装 0', `batch_id` VARCHAR(100) NOT NULL, `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `update_time` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP, UNIQUE KEY `uk_t8_mat_online_full` (`tenant_id`,`factory_id`,`biz_date`,`source_ztid`,`work_order_no`), KEY `idx_t8_mat_online_full_biz_date` (`biz_date`), KEY `idx_t8_mat_online_full_batch` (`batch_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='T8 #17 物料上线满足率 DWD'; -- A.3 #18 S5 物料仓储人效(月 M+1) CREATE TABLE IF NOT EXISTS `dwd_t8_material_warehouse_efficiency` ( `id` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, `tenant_id` BIGINT NOT NULL DEFAULT 0, `factory_id` BIGINT NOT NULL DEFAULT 1, `biz_month` CHAR(7) NOT NULL COMMENT 'YYYY-MM', `source_ztid` VARCHAR(64) NOT NULL, `period_start` DATE NOT NULL COMMENT '统计区间起(含)', `period_end` DATE NOT NULL COMMENT '统计区间止(含)', `online_qty` DECIMAL(18,4) NULL COMMENT 'SUM(kc_tz_list.slzx) where lbs=生产领料(分子)', `warehouse_headcount` INT NULL COMMENT 'sys_pelist count where gw=仓管 zzzt=在职(分母)', `efficiency` DECIMAL(18,4) NULL COMMENT 'online_qty/warehouse_headcount;分母 0 或 NULL 时 NULL', `denominator_status` VARCHAR(32) NOT NULL DEFAULT 'OK' COMMENT 'OK | NO_HEADCOUNT | NO_NUMERATOR', `batch_id` VARCHAR(100) NOT NULL, `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `update_time` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP, UNIQUE KEY `uk_t8_mat_wh_eff` (`tenant_id`,`factory_id`,`biz_month`,`source_ztid`), KEY `idx_t8_mat_wh_eff_batch` (`batch_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='T8 #18 物料仓储人效 DWD(人效类分母缺失保留 NULL)'; -- A.4 #19 S5 品类物料库存周转(月 M+1,来源 TVF Rep_总账_存货_V3) CREATE TABLE IF NOT EXISTS `dwd_t8_material_inventory_turnover` ( `id` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, `tenant_id` BIGINT NOT NULL DEFAULT 0, `factory_id` BIGINT NOT NULL DEFAULT 1, `biz_month` CHAR(7) NOT NULL, `source_ztid` VARCHAR(64) NOT NULL, `period_start_yyyymm` CHAR(6) NOT NULL COMMENT 'TVF 入参起期 YYYYMM', `period_end_yyyymm` CHAR(6) NOT NULL COMMENT 'TVF 入参止期 YYYYMM', `warehouse_code` VARCHAR(64) NULL COMMENT 'TVF.ckcode', `warehouse_name` VARCHAR(200) NULL COMMENT 'TVF.ckname', `item_code` VARCHAR(64) NOT NULL DEFAULT '' COMMENT 'TVF.code', `item_name` VARCHAR(200) NULL COMMENT 'TVF.cname', `category_code` VARCHAR(64) NULL COMMENT 'TVF.pcode', `category_name` VARCHAR(200) NULL COMMENT 'TVF.pname', `avg_inventory_value` DECIMAL(18,4) NULL COMMENT 'TVF.je3 月平均库存金额(D1)', `monthly_outbound_cost` DECIMAL(18,4) NULL COMMENT 'TVF.je2 当月出库成本(D2)', `turnover_days` DECIMAL(18,4) NULL COMMENT 'D1/D2 × 30;D2 NULL 或 0 时 NULL', `batch_id` VARCHAR(100) NOT NULL, `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `update_time` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP, UNIQUE KEY `uk_t8_mat_inv_turn` (`tenant_id`,`factory_id`,`biz_month`,`source_ztid`,`warehouse_code`,`item_code`), KEY `idx_t8_mat_inv_turn_batch` (`batch_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='T8 #19 品类物料库存周转 DWD(TVF Rep_总账_存货_V3)'; -- A.5 #22 S6 工单制造满足率(日 T+1) CREATE TABLE IF NOT EXISTS `dwd_t8_work_order_mfg_fulfillment` ( `id` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, `tenant_id` BIGINT NOT NULL DEFAULT 0, `factory_id` BIGINT NOT NULL DEFAULT 1, `biz_date` DATE NOT NULL, `source_ztid` VARCHAR(64) NOT NULL, `order_no` VARCHAR(64) NOT NULL COMMENT 'T8 kc_dd_head.noid 工单号', `task_no` VARCHAR(64) NOT NULL DEFAULT '' COMMENT 'T8 kc_dd_list.rwnoid 任务号', `item_code` VARCHAR(64) NOT NULL DEFAULT '' COMMENT 'T8 物料编码', `plan_qty` DECIMAL(18,4) NULL COMMENT 'kc_dd_list.sl 计划数量(分母)', `done_qty_in_window` DECIMAL(18,4) NULL COMMENT 'SUM(d.slzx) 计划完工时间内累计报工数量(分子)', `fulfillment_rate` DECIMAL(18,4) NULL COMMENT 'done/plan;plan<=0 或 NULL 时 NULL', `batch_id` VARCHAR(100) NOT NULL, `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `update_time` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP, UNIQUE KEY `uk_t8_wo_mfg_full` (`tenant_id`,`factory_id`,`biz_date`,`source_ztid`,`order_no`,`task_no`,`item_code`), KEY `idx_t8_wo_mfg_full_biz_date` (`biz_date`), KEY `idx_t8_wo_mfg_full_batch` (`batch_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='T8 #22 工单制造满足率 DWD'; -- A.6 #23 S6 工单制造人效(月 M+1) CREATE TABLE IF NOT EXISTS `dwd_t8_work_order_mfg_efficiency` ( `id` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, `tenant_id` BIGINT NOT NULL DEFAULT 0, `factory_id` BIGINT NOT NULL DEFAULT 1, `biz_month` CHAR(7) NOT NULL, `source_ztid` VARCHAR(64) NOT NULL, `period_start` DATE NOT NULL, `period_end` DATE NOT NULL, `done_count` INT NULL COMMENT 'count(*) where lbs=生产入库 且 (slzx>=sl OR gdyn=1)(分子)', `production_headcount` INT NULL COMMENT 'sys_pelist count where gw=生产 zzzt=在职(分母)', `efficiency` DECIMAL(18,4) NULL COMMENT 'done_count/production_headcount;分母 0 或 NULL 时 NULL', `denominator_status` VARCHAR(32) NOT NULL DEFAULT 'OK', `batch_id` VARCHAR(100) NOT NULL, `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `update_time` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP, UNIQUE KEY `uk_t8_wo_mfg_eff` (`tenant_id`,`factory_id`,`biz_month`,`source_ztid`), KEY `idx_t8_wo_mfg_eff_batch` (`batch_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='T8 #23 工单制造人效 DWD(人效类分母缺失保留 NULL)'; -- A.7 #25 S7 订单发货周期(日 T+1,5 表 JOIN) CREATE TABLE IF NOT EXISTS `dwd_t8_order_shipment_cycle` ( `id` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, `tenant_id` BIGINT NOT NULL DEFAULT 0, `factory_id` BIGINT NOT NULL DEFAULT 1, `biz_date` DATE NOT NULL, `source_ztid` VARCHAR(64) NOT NULL, `order_no` VARCHAR(64) NOT NULL COMMENT 'T8 kc_dd_head.noid 销售订单号', `cycle_days` INT NULL COMMENT 'datediff(day,min(shdate),max(shtime));仅含 min(wczt)=1 的订单', `batch_id` VARCHAR(100) NOT NULL, `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `update_time` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP, UNIQUE KEY `uk_t8_ord_ship_cycle` (`tenant_id`,`factory_id`,`biz_date`,`source_ztid`,`order_no`), KEY `idx_t8_ord_ship_cycle_biz_date` (`biz_date`), KEY `idx_t8_ord_ship_cycle_batch` (`batch_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='T8 #25 订单发货周期 DWD(5 表 JOIN)'; -- A.8 #26 S7 订单发货满足率(日 T+1) CREATE TABLE IF NOT EXISTS `dwd_t8_order_shipment_fulfillment` ( `id` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, `tenant_id` BIGINT NOT NULL DEFAULT 0, `factory_id` BIGINT NOT NULL DEFAULT 1, `biz_date` DATE NOT NULL, `source_ztid` VARCHAR(64) NOT NULL, `order_no` VARCHAR(64) NOT NULL, `total_rows` INT NOT NULL DEFAULT 0 COMMENT '该订单总行数', `in_window_rows` INT NOT NULL DEFAULT 0 COMMENT '在确认交期前发货的行数', `fulfillment_rate` DECIMAL(18,4) NULL COMMENT '(in_window/total)×100;total=0 时 NULL', `batch_id` VARCHAR(100) NOT NULL, `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `update_time` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP, UNIQUE KEY `uk_t8_ord_ship_full` (`tenant_id`,`factory_id`,`biz_date`,`source_ztid`,`order_no`), KEY `idx_t8_ord_ship_full_biz_date` (`biz_date`), KEY `idx_t8_ord_ship_full_batch` (`batch_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='T8 #26 订单发货满足率 DWD'; -- A.9 #27 S7 成品仓储人效(月 M+1) CREATE TABLE IF NOT EXISTS `dwd_t8_finished_warehouse_efficiency` ( `id` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, `tenant_id` BIGINT NOT NULL DEFAULT 0, `factory_id` BIGINT NOT NULL DEFAULT 1, `biz_month` CHAR(7) NOT NULL, `source_ztid` VARCHAR(64) NOT NULL, `period_start` DATE NOT NULL, `period_end` DATE NOT NULL, `shipment_qty` DECIMAL(18,4) NULL COMMENT 'SUM(b.slzx) where lbs=销售出库(分子)', `warehouse_headcount` INT NULL COMMENT 'sys_pelist count where gw=仓管 zzzt=在职(分母,与 S5 共用枚举,待业务侧拆物料仓 vs 成品仓)', `efficiency` DECIMAL(18,4) NULL COMMENT 'shipment_qty/warehouse_headcount;分母 0 或 NULL 时 NULL', `denominator_status` VARCHAR(32) NOT NULL DEFAULT 'OK', `batch_id` VARCHAR(100) NOT NULL, `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `update_time` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP, UNIQUE KEY `uk_t8_fin_wh_eff` (`tenant_id`,`factory_id`,`biz_month`,`source_ztid`), KEY `idx_t8_fin_wh_eff_batch` (`batch_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='T8 #27 成品仓储人效 DWD(人效类分母缺失保留 NULL)'; -- ----------------------------------------------------------------------------- -- B. mdp_source 登记 T8 数据源(密码不入库,凭据在 Database.json + CLAUDE.md) -- ----------------------------------------------------------------------------- INSERT INTO `mdp_source` ( `tenant_id`,`source_code`,`source_name`,`source_type`,`status`, `db_type`,`db_host`,`db_port`,`db_name`,`db_user`, `db_password_enc`,`db_extra_params`, `remark` ) VALUES ( 0,'T8_V5_SQLSERVER','T8 一站式系统源库(SQL Server 只读)','DB',1, 'SQLServer','39.105.125.212',29289,'t8_V5_09_56','dopsa', NULL,'ConfigId=t8_v5;TrustServerCertificate=true;Encrypt=false', 'S5/S6/S7 KPI 数据贴源同步用;只读 SELECT;凭据见 CLAUDE.md「T8 源库连接信息」与 Database.json' ) ON DUPLICATE KEY UPDATE `source_name`=VALUES(`source_name`), `db_host`=VALUES(`db_host`), `db_port`=VALUES(`db_port`), `db_name`=VALUES(`db_name`), `db_user`=VALUES(`db_user`), `db_extra_params`=VALUES(`db_extra_params`), `remark`=VALUES(`remark`), `update_time`=CURRENT_TIMESTAMP; -- ----------------------------------------------------------------------------- -- C. mdp_entity 登记 9 个 KPI 用到的 T8 表/TVF(target_table_name 一期为 NULL,不贴源) -- ----------------------------------------------------------------------------- INSERT INTO `mdp_entity` ( `tenant_id`,`source_id`,`entity_code`,`entity_name`,`entity_type`, `source_table_name`,`target_table_name`,`sync_mode`,`batch_size`,`status`,`remark` ) SELECT 0, s.id, v.entity_code, v.entity_name, v.entity_type, v.source_table_name, NULL, 'NONE', 0, 1, v.remark FROM `mdp_source` s CROSS JOIN ( SELECT 'T8_KC_TZ_HEAD' AS entity_code, 'T8 出入库流水头表' AS entity_name, 'TABLE' AS entity_type, 'kc_tz_head' AS source_table_name, 'S5/S6/S7 KPI 共用;按 lbs 区分生产领料/采购入库/生产入库/销售出库' AS remark UNION ALL SELECT 'T8_KC_TZ_LIST', 'T8 出入库流水明细', 'TABLE', 'kc_tz_list', '与 kc_tz_head 关联,含 code/slzx/sl/lynoid 等' UNION ALL SELECT 'T8_KC_DD_HEAD', 'T8 单据头表', 'TABLE', 'kc_dd_head', 'S6/S7 KPI 用;按 lbs 区分生产任务/销售订单' UNION ALL SELECT 'T8_KC_DD_LIST', 'T8 单据明细', 'TABLE', 'kc_dd_list', '与 kc_dd_head 关联,含 sl/jhdate/rwnoid' UNION ALL SELECT 'T8_KC_DD_LIST_CLLIST', 'T8 单据物料行', 'TABLE', 'kc_dd_list_cllist', 'S5 #17 工单物料总行数' UNION ALL SELECT 'T8_KC_ZJ_LIST', 'T8 检验/质检流水', 'TABLE', 'kc_zj_list', 'S7 #25 FQC 报检关联' UNION ALL SELECT 'T8_CJ_BG_HEAD_REP', 'T8 员工报工头表', 'TABLE', 'Cj_Bg_Head_Rep', 'S5 #17 工单开工时间(kgdate)' UNION ALL SELECT 'T8_SYS_PELIST', 'T8 人员主数据', 'TABLE', 'sys_pelist', 'S5/S6/S7 人效 KPI 分母(gw=仓管/生产;zzzt=在职)' UNION ALL SELECT 'T8_REP_ZONGZHANG_CUNHUO_V3','T8 总账存货月报 TVF', 'TVF', 'Rep_总账_存货_V3', 'S5 #19 品类物料库存周转;返回月均库存金额 je3 与出库成本 je2' ) v WHERE s.source_code='T8_V5_SQLSERVER' AND s.tenant_id=0 ON DUPLICATE KEY UPDATE `entity_name`=VALUES(`entity_name`), `entity_type`=VALUES(`entity_type`), `source_table_name`=VALUES(`source_table_name`), `remark`=VALUES(`remark`), `update_time`=CURRENT_TIMESTAMP; -- ----------------------------------------------------------------------------- -- D. ado_smart_ops_kpi_master 注册 9 个 KPI(L1) -- - Direction 沿用既有枚举:lower_is_better / higher_is_better -- - YellowThreshold / RedThreshold 一期 NULL(业务侧上线前回填) -- - DataSource 普通表填 T8.dbo.<表名>;TVF 填 T8.dbo.Rep_总账_存货_V3 -- - StatFrequency 沿用既有 "天" / "月" 中文风格 -- ----------------------------------------------------------------------------- INSERT INTO `ado_smart_ops_kpi_master` ( `MetricCode`,`ModuleCode`,`MetricLevel`,`ParentId`,`MetricName`,`Description`,`Formula`,`CalcRule`, `DataSource`,`StatFrequency`,`Department`,`DopFields`,`Unit`,`Direction`, `IsHomePage`,`SortNo`,`Remark`,`IsEnabled`,`TenantId`,`CreatedAt`, `YellowThreshold`,`RedThreshold` ) VALUES ('S5_L1_001','S5',1,NULL,'物料上线周期', 'S5 物料仓储:物料从供应商收货入库到配送上线之间的天数差', '物料上线周期 = 物料配送到生产线日期 - 物料收货日期', '物料配送到生产线日期 = T8 kc_tz_head + kc_tz_list 中 lbs=生产领料的最早 shtime;物料收货日期 = lbs=采购入库的最早 shtime;按 code 分组取 MIN', 'T8.dbo.kc_tz_head','天','物料仓储',NULL,'天','lower_is_better', 0,510,'方老师 v5.4 KPI #16;T8 SQL 原逻辑直发(路径 A)',1,0,NOW(), NULL,NULL), ('S5_L1_002','S5',1,NULL,'物料上线满足率', 'S5 物料仓储:工单开工日期前完成物料上线行数占工单物料总行数比率', 'S = 工单开工日期前完成物料上线行数 / 工单物料总行数', '分子=T8 kc_tz_head/list 中 lbs=生产领料 且 shtime <= 工单开工时间 kgdate(Cj_Bg_Head_Rep.noid);分母=kc_dd_head/kc_dd_list_cllist 中 lbs=生产任务 行数', 'T8.dbo.kc_tz_head','天','物料仓储',NULL,'%','higher_is_better', 0,520,'方老师 v5.4 KPI #17;分母为 0 时 fulfillment_rate 写 NULL',1,0,NOW(), NULL,NULL), ('S5_L1_003','S5',1,NULL,'物料仓储人效', 'S5 物料仓储:单位仓储人员完成的上线物料数量', 'H = 完成上线的工单物料数量 / 物料仓储人数', '分子=统计期 SUM(kc_tz_list.slzx) where lbs=生产领料;分母=sys_pelist count where gw=仓管 AND zzzt=在职', 'T8.dbo.kc_tz_head','月','物料仓储',NULL,'个/人','higher_is_better', 0,530,'方老师 v5.4 KPI #18;当前 T8 中 gw 全空,分母为 NULL 时 efficiency 写 NULL(不伪装 0),denominator_status=NO_HEADCOUNT',1,0,NOW(), NULL,NULL), ('S5_L1_004','S5',1,NULL,'品类物料库存周转', 'S5 物料仓储:按品类的物料库存周转天数', 'D1 / D2 × 30', 'D1=月平均库存金额=TVF Rep_总账_存货_V3.je3;D2=当月出库成本=TVF Rep_总账_存货_V3.je2;TVF 入参:(账套, 普通, 正常, 起期 YYYYMM, 止期 YYYYMM)', 'T8.dbo.Rep_总账_存货_V3','月','物料仓储',NULL,'天','lower_is_better', 0,540,'方老师 v5.4 KPI #19;D2 为 0 或 NULL 时 turnover_days 写 NULL',1,0,NOW(), NULL,NULL), ('S6_L1_001','S6',1,NULL,'工单制造满足率', 'S6 生产执行:计划完工时间内累计报工数量占工单计划生产数量的比率', '工单制造满足率 = 计划完工时间内累计报工数量 / 工单计划生产数量', '分母=kc_dd_list.sl where lbs=生产任务;分子=SUM(kc_tz_list.slzx) where lbs=生产入库 AND shtime <= jhdate;按 (noid, rwnoid, code) 关联', 'T8.dbo.kc_dd_head','天','生产执行',NULL,'%','higher_is_better', 0,610,'方老师 v5.4 KPI #22;plan_qty<=0 或 NULL 时 fulfillment_rate 写 NULL',1,0,NOW(), NULL,NULL), ('S6_L1_002','S6',1,NULL,'工单制造人效', 'S6 生产执行:单位生产人员完成的工单数量', '工单制造人效 = 统计期内完成制造的工单数量 / 生产人数', '分子=count(*) from kc_tz_head/list where lbs=生产入库 AND date0 在窗口 AND (slzx>=sl OR gdyn=1);分母=sys_pelist count where gw=生产 AND zzzt=在职', 'T8.dbo.kc_tz_head','月','生产执行',NULL,'个/人','higher_is_better', 0,620,'方老师 v5.4 KPI #23;当前 T8 中 gw 全空,分母为 NULL 时 efficiency 写 NULL(不伪装 0)',1,0,NOW(), NULL,NULL), ('S7_L1_001','S7',1,NULL,'订单发货周期', 'S7 成品仓储:订单最后一行物料发货日期与最早一行物料 FQC 报检日期的天数差', '订单发货周期 = 订单最后一行物料发货日期 - 订单最早一行物料 FQC 报检日期', '基于 kc_dd_head/list + kc_tz_head/list + kc_zj_list 5 表 JOIN,按 noid 分组取 datediff(day,min(shdate),max(shtime));仅保留 min(wczt)=1 的订单', 'T8.dbo.kc_dd_head','天','成品仓储',NULL,'天','lower_is_better', 0,710,'方老师 v5.4 KPI #25;最复杂 5 表 JOIN',1,0,NOW(), NULL,NULL), ('S7_L1_002','S7',1,NULL,'订单发货满足率', 'S7 成品仓储:在确认交期前发货的行数占订单总行数的比率', '订单发货满足率 = (在确认交期前发货的行数 / 该订单总行数) × 100%', '按 (noid, rwnoid, code) 关联,wczt = case when SUM(kc_tz_list.slzx where lbs=销售出库 AND shtime<=jhdate) >= kc_dd_list.sl then 1 else 0', 'T8.dbo.kc_dd_head','天','成品仓储',NULL,'%','higher_is_better', 0,720,'方老师 v5.4 KPI #26;total_rows=0 时 fulfillment_rate 写 NULL',1,0,NOW(), NULL,NULL), ('S7_L1_003','S7',1,NULL,'成品仓储人效', 'S7 成品仓储:单位仓储人员完成的发货物料数量', 'H = 完成发货的订单物料数量 / 成品仓储人数', '分子=SUM(kc_tz_list.slzx) where lbs=销售出库 AND shtime 在窗口;分母=sys_pelist count where gw=仓管 AND zzzt=在职(与 S5 #18 共用 gw 枚举)', 'T8.dbo.kc_tz_head','月','成品仓储',NULL,'个/人','higher_is_better', 0,730,'方老师 v5.4 KPI #27;分母 NULL 或 0 时 efficiency 写 NULL(不伪装 0);gw 是否区分物料仓 vs 成品仓待业务侧确认',1,0,NOW(), NULL,NULL) ON DUPLICATE KEY UPDATE `MetricName`=VALUES(`MetricName`), `Description`=VALUES(`Description`), `Formula`=VALUES(`Formula`), `CalcRule`=VALUES(`CalcRule`), `DataSource`=VALUES(`DataSource`), `StatFrequency`=VALUES(`StatFrequency`), `Department`=VALUES(`Department`), `Unit`=VALUES(`Unit`), `Direction`=VALUES(`Direction`), `SortNo`=VALUES(`SortNo`), `Remark`=VALUES(`Remark`), `IsEnabled`=VALUES(`IsEnabled`), `UpdatedAt`=NOW();