namespace Admin.NET.Plugin.AiDOP; /// /// S8 大屏卡片配置基线种子(灌入 ado_s8_dashboard_cell_config)。 /// 全局基线:tenant_id=0 / factory_id=0;覆盖 4 个大屏的全部稳定锚点卡片。 /// 依赖 S8ExceptionTypeSeedData:EXCEPTION_TYPE 绑定的 exception_type_code 必须先存在。 /// [IncreSeed] public class S8DashboardCellConfigSeedData : ISqlSugarEntitySeedData { public IEnumerable HasData() { var ct = DateTime.Parse("2026-04-18 00:00:00"); long seq = 1329908200001L; var list = new List(); // ── OVERVIEW 页面 ── // S1-S7 模块卡(7 张,CUSTOM 聚合) var overviewModules = new[] { "S1", "S2", "S3", "S4", "S5", "S6", "S7" }; var sort = 100; foreach (var m in overviewModules) list.Add(Custom(seq++, "OVERVIEW", $"OVERVIEW_{m}", $"{m} 模块异常", "OPEN_COUNT", "LAST_24H", sort++, ct)); // 部门效率聚合 list.Add(Aggregate(seq++, "OVERVIEW", "OVERVIEW_BY_DEPT", "部门异常聚合", "ALL", "OPEN_COUNT", "LAST_24H", "OWNER", sort++, ct)); // 类别异常卡(5 张,按场景聚合) var overviewCats = new[] { ("OVERVIEW_CAT_ORDER_REVIEW", "订单评审异常"), ("OVERVIEW_CAT_PRODUCT_DESIGN", "产品设计异常"), ("OVERVIEW_CAT_MATERIAL_PURCHASE","物料采购异常"), ("OVERVIEW_CAT_BODY_PRODUCTION", "主体生产异常"), ("OVERVIEW_CAT_FINAL_ASSEMBLY", "总装交付异常"), }; foreach (var (code, title) in overviewCats) list.Add(Aggregate(seq++, "OVERVIEW", code, title, "ALL", "FREQUENCY", "LAST_7D", "OWNER", sort++, ct)); // 整体响应效能 + 状态统计条(CUSTOM) list.Add(Custom(seq++, "OVERVIEW", "OVERVIEW_OVERALL_EFFICIENCY", "整体响应效能", "CLOSE_RATE", "LAST_7D", sort++, ct)); list.Add(Custom(seq++, "OVERVIEW", "OVERVIEW_STATUS_BAR", "状态统计条", "OPEN_COUNT", "TODAY", sort++, ct)); // ── DELIVERY 页面 ── sort = 100; list.Add(Custom(seq++, "DELIVERY", "DELIVERY_S1", "S1 订单模块", "OPEN_COUNT", "LAST_24H", sort++, ct)); list.Add(Custom(seq++, "DELIVERY", "DELIVERY_S7", "S7 交付模块", "OPEN_COUNT", "LAST_24H", sort++, ct)); // 异常类型卡(3 张,统计口径 OPEN_COUNT) list.Add(ExceptionType(seq++, "DELIVERY", "DELIVERY_ANOMALY_ORDER_CHANGE", "订单变更", "ORDER_CHANGE", "OPEN_COUNT", "LAST_24H", sort++, ct)); list.Add(ExceptionType(seq++, "DELIVERY", "DELIVERY_ANOMALY_DELIVERY_DELAY", "交期延迟", "DELIVERY_DELAY", "OPEN_COUNT", "LAST_24H", sort++, ct)); list.Add(ExceptionType(seq++, "DELIVERY", "DELIVERY_ANOMALY_STOCK_PENDING", "入库待发", "PENDING_SHIPMENT", "OPEN_COUNT", "LAST_24H", sort++, ct)); // 异常多维分析卡(3 张:FREQUENCY / AVG_DURATION / CLOSE_RATE) list.Add(ExceptionType(seq++, "DELIVERY", "DELIVERY_CAT_ORDER_CHANGE", "订单变更多维分析", "ORDER_CHANGE", "FREQUENCY", "LAST_7D", sort++, ct)); list.Add(ExceptionType(seq++, "DELIVERY", "DELIVERY_CAT_DELIVERY_DELAY", "交期延迟多维分析", "DELIVERY_DELAY", "AVG_DURATION", "LAST_7D", sort++, ct)); list.Add(ExceptionType(seq++, "DELIVERY", "DELIVERY_CAT_STOCK_PENDING", "入库待发多维分析", "PENDING_SHIPMENT", "CLOSE_RATE", "LAST_7D", sort++, ct)); list.Add(Custom(seq++, "DELIVERY", "DELIVERY_STATUS_BAR", "状态统计条", "OPEN_COUNT", "TODAY", sort++, ct)); // ── PRODUCTION 页面 ── sort = 100; list.Add(Custom(seq++, "PRODUCTION", "PRODUCTION_S2", "S2 排产模块", "OPEN_COUNT", "LAST_24H", sort++, ct)); list.Add(Custom(seq++, "PRODUCTION", "PRODUCTION_S6", "S6 生产模块", "OPEN_COUNT", "LAST_24H", sort++, ct)); list.Add(ExceptionType(seq++, "PRODUCTION", "PRODUCTION_ANOMALY_EQUIPMENT_FAULT", "设备异常", "EQUIP_FAULT", "OPEN_COUNT", "LAST_24H", sort++, ct)); list.Add(ExceptionType(seq++, "PRODUCTION", "PRODUCTION_ANOMALY_MATERIAL_FAULT", "物料异常", "MATERIAL_SHORTAGE", "OPEN_COUNT", "LAST_24H", sort++, ct)); list.Add(ExceptionType(seq++, "PRODUCTION", "PRODUCTION_ANOMALY_QUALITY_FAULT", "质量异常", "QUALITY_DEFECT", "OPEN_COUNT", "LAST_24H", sort++, ct)); list.Add(ExceptionType(seq++, "PRODUCTION", "PRODUCTION_CAT_EQUIPMENT_FAULT", "设备异常多维分析", "EQUIP_FAULT", "FREQUENCY", "LAST_7D", sort++, ct)); list.Add(ExceptionType(seq++, "PRODUCTION", "PRODUCTION_CAT_MATERIAL_FAULT", "物料异常多维分析", "MATERIAL_SHORTAGE", "AVG_DURATION", "LAST_7D", sort++, ct)); list.Add(ExceptionType(seq++, "PRODUCTION", "PRODUCTION_CAT_QUALITY_FAULT", "质量异常多维分析", "QUALITY_DEFECT", "CLOSE_RATE", "LAST_7D", sort++, ct)); list.Add(Custom(seq++, "PRODUCTION", "PRODUCTION_STATUS_BAR", "状态统计条", "OPEN_COUNT", "TODAY", sort++, ct)); // ── SUPPLY 页面 ── sort = 100; list.Add(Custom(seq++, "SUPPLY", "SUPPLY_S3", "S3 供应模块", "OPEN_COUNT", "LAST_24H", sort++, ct)); list.Add(Custom(seq++, "SUPPLY", "SUPPLY_S4", "S4 入库模块", "OPEN_COUNT", "LAST_24H", sort++, ct)); list.Add(Custom(seq++, "SUPPLY", "SUPPLY_S5", "S5 发料模块", "OPEN_COUNT", "LAST_24H", sort++, ct)); // 供应域 7 类异常:类型卡 + 分析卡 var supplyTypes = new[] { ("SUPPLIER_ETA_ISSUE", "SUPPLIER_REPLY_DELAY", "供应商回复交期异常"), ("SUPPLIER_SHIP_ISSUE", "SUPPLIER_SHIP_FAULT", "供应商发货异常"), ("WH_INBOUND_ISSUE", "WAREHOUSE_RECEIPT", "仓库收货异常"), ("IQC_ISSUE", "IQC_INSPECTION", "IQC 检验异常"), ("WH_PUTAWAY_ISSUE", "WAREHOUSE_SHELVING", "仓库上架入库异常"), ("WH_KIT_ISSUE", "WORK_ORDER_PREPARE", "仓库工单备料异常"), ("WH_ISSUE_OUT_ISSUE", "WORK_ORDER_ISSUE", "仓库工单发料异常"), }; foreach (var (typeCode, anchor, title) in supplyTypes) list.Add(ExceptionType(seq++, "SUPPLY", $"SUPPLY_ANOMALY_{anchor}", title, typeCode, "OPEN_COUNT", "LAST_24H", sort++, ct)); foreach (var (typeCode, anchor, title) in supplyTypes) list.Add(ExceptionType(seq++, "SUPPLY", $"SUPPLY_CAT_{anchor}", $"{title}多维分析", typeCode, "FREQUENCY", "LAST_7D", sort++, ct)); list.Add(Custom(seq++, "SUPPLY", "SUPPLY_STATUS_BAR", "状态统计条", "OPEN_COUNT", "TODAY", sort++, ct)); return list; } private static Entity.S8.AdoS8DashboardCellConfig Custom( long id, string pageCode, string cellCode, string cellTitle, string statMetric, string timeWindow, int sortNo, DateTime ct) => new() { Id = id, TenantId = 0, FactoryId = 0, PageCode = pageCode, CellCode = cellCode, CellTitle = cellTitle, BindingType = "CUSTOM", ExceptionTypeCode = null, AggregateScope = null, StatMetric = statMetric, TimeWindow = timeWindow, FilterExpression = null, DeptGroupBy = "OWNER", Enabled = true, SortNo = sortNo, CreatedAt = ct, }; private static Entity.S8.AdoS8DashboardCellConfig ExceptionType( long id, string pageCode, string cellCode, string cellTitle, string exceptionTypeCode, string statMetric, string timeWindow, int sortNo, DateTime ct) => new() { Id = id, TenantId = 0, FactoryId = 0, PageCode = pageCode, CellCode = cellCode, CellTitle = cellTitle, BindingType = "EXCEPTION_TYPE", ExceptionTypeCode = exceptionTypeCode, AggregateScope = null, StatMetric = statMetric, TimeWindow = timeWindow, FilterExpression = null, DeptGroupBy = "OWNER", Enabled = true, SortNo = sortNo, CreatedAt = ct, }; private static Entity.S8.AdoS8DashboardCellConfig Aggregate( long id, string pageCode, string cellCode, string cellTitle, string aggregateScope, string statMetric, string timeWindow, string deptGroupBy, int sortNo, DateTime ct) => new() { Id = id, TenantId = 0, FactoryId = 0, PageCode = pageCode, CellCode = cellCode, CellTitle = cellTitle, BindingType = "AGGREGATE", ExceptionTypeCode = null, AggregateScope = aggregateScope, StatMetric = statMetric, TimeWindow = timeWindow, FilterExpression = null, DeptGroupBy = deptGroupBy, Enabled = true, SortNo = sortNo, CreatedAt = ct, }; }