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,
};
}