S8DashboardCellConfigSeedData.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. namespace Admin.NET.Plugin.AiDOP;
  2. /// <summary>
  3. /// S8 大屏卡片配置基线种子(灌入 ado_s8_dashboard_cell_config)。
  4. /// 全局基线:tenant_id=0 / factory_id=0;覆盖 4 个大屏的全部稳定锚点卡片。
  5. /// 依赖 S8ExceptionTypeSeedData:EXCEPTION_TYPE 绑定的 exception_type_code 必须先存在。
  6. /// G-09 一期:补齐 UI 配置字段(icon/layout_area/display_mode/remark),
  7. /// 让新装环境跑 SeedData 即可获得完整渲染配置;现有环境通过手工 INSERT SQL 灌入同样数据。
  8. /// G-09 三期 F-CLEAN-1:show_in_sidebar 当前不参与 cell→layout 派生,SeedData 不再写入;Entity/DB 列保留。
  9. /// </summary>
  10. [IncreSeed]
  11. public class S8DashboardCellConfigSeedData : ISqlSugarEntitySeedData<Entity.S8.AdoS8DashboardCellConfig>
  12. {
  13. public IEnumerable<Entity.S8.AdoS8DashboardCellConfig> HasData()
  14. {
  15. var ct = DateTime.Parse("2026-04-18 00:00:00");
  16. long seq = 1329908200001L;
  17. var list = new List<Entity.S8.AdoS8DashboardCellConfig>();
  18. // ── OVERVIEW 页面 ──
  19. // S1-S7 模块卡(7 张,CUSTOM 聚合,layout_area=MODULES, display_mode=STAGE_CARD)
  20. // S8-DASHBOARD-P0-CATEGORY-SEED-FIX-1:标题与侧栏菜单业务名 + S8ModuleCode.Label 对齐。
  21. var overviewModules = new (string code, string title, string icon)[]
  22. {
  23. ("S1", "S1 产销协同", "Checked"),
  24. ("S2", "S2 制造协同", "TrendCharts"),
  25. ("S3", "S3 供应协同", "ShoppingBag"),
  26. ("S4", "S4 采购执行", "Tools"),
  27. ("S5", "S5 物料仓储", "DataAnalysis"),
  28. ("S6", "S6 生产执行", "Box"),
  29. ("S7", "S7 成品仓储", "Van"),
  30. };
  31. var sort = 100;
  32. foreach (var (m, title, icon) in overviewModules)
  33. list.Add(Custom(seq++, "OVERVIEW", $"OVERVIEW_{m}", title, "OPEN_COUNT", "LAST_24H", sort++, ct,
  34. icon: icon, layoutArea: "MODULES", displayMode: "STAGE_CARD"));
  35. // 部门效率聚合
  36. list.Add(Aggregate(seq++, "OVERVIEW", "OVERVIEW_BY_DEPT", "部门异常聚合", "ALL", "OPEN_COUNT", "LAST_24H", "OWNER", sort++, ct,
  37. icon: "DataAnalysis", layoutArea: "SIDEBAR", displayMode: "DEPT_CLUSTER"));
  38. // 类别异常卡(5 张,按场景聚合,layout_area=ANALYSIS, display_mode=CATEGORY_CARD)
  39. var overviewCats = new (string code, string title, string icon)[]
  40. {
  41. ("OVERVIEW_CAT_ORDER_REVIEW", "订单评审异常", "DataAnalysis"),
  42. ("OVERVIEW_CAT_PRODUCT_DESIGN", "产品设计异常", "ShoppingBag"),
  43. ("OVERVIEW_CAT_MATERIAL_PURCHASE","物料采购异常", "Tools"),
  44. ("OVERVIEW_CAT_BODY_PRODUCTION", "主体生产异常", "Van"),
  45. ("OVERVIEW_CAT_FINAL_ASSEMBLY", "总装交付异常", "Van"),
  46. };
  47. foreach (var (code, title, icon) in overviewCats)
  48. list.Add(Aggregate(seq++, "OVERVIEW", code, title, "ALL", "FREQUENCY", "LAST_7D", "OWNER", sort++, ct,
  49. icon: icon, layoutArea: "ANALYSIS", displayMode: "CATEGORY_CARD"));
  50. // 整体响应效能 + 状态统计条(CUSTOM,无 icon)
  51. list.Add(Custom(seq++, "OVERVIEW", "OVERVIEW_OVERALL_EFFICIENCY", "整体响应效能", "CLOSE_RATE", "LAST_7D", sort++, ct,
  52. icon: null, layoutArea: "SIDEBAR", displayMode: "CUSTOM"));
  53. list.Add(Custom(seq++, "OVERVIEW", "OVERVIEW_STATUS_BAR", "状态统计条", "OPEN_COUNT", "TODAY", sort++, ct,
  54. icon: null, layoutArea: "ANALYSIS", displayMode: "CUSTOM"));
  55. // ── DELIVERY 页面 ──
  56. // S8-DASHBOARD-P0-CATEGORY-SEED-FIX-1:模块卡标题与 S8ModuleCode.Label 对齐。
  57. sort = 100;
  58. list.Add(Custom(seq++, "DELIVERY", "DELIVERY_S1", "S1 产销协同", "OPEN_COUNT", "LAST_24H", sort++, ct,
  59. icon: "Checked", layoutArea: "MODULES", displayMode: "STAGE_CARD"));
  60. list.Add(Custom(seq++, "DELIVERY", "DELIVERY_S7", "S7 成品仓储", "OPEN_COUNT", "LAST_24H", sort++, ct,
  61. icon: "Van", layoutArea: "MODULES", displayMode: "STAGE_CARD"));
  62. // 异常类型卡(3 张:sidebar compact,OPEN_COUNT 总数)
  63. list.Add(ExceptionType(seq++, "DELIVERY", "DELIVERY_ANOMALY_ORDER_CHANGE", "订单变更", "ORDER_CHANGE", "OPEN_COUNT", "LAST_24H", sort++, ct,
  64. icon: "Checked", layoutArea: "SIDEBAR", displayMode: "CATEGORY_COMPACT"));
  65. list.Add(ExceptionType(seq++, "DELIVERY", "DELIVERY_ANOMALY_DELIVERY_DELAY", "交期延迟", "DELIVERY_DELAY", "OPEN_COUNT", "LAST_24H", sort++, ct,
  66. icon: "Van", layoutArea: "SIDEBAR", displayMode: "CATEGORY_COMPACT"));
  67. list.Add(ExceptionType(seq++, "DELIVERY", "DELIVERY_ANOMALY_STOCK_PENDING", "入库待发", "PENDING_SHIPMENT", "OPEN_COUNT", "LAST_24H", sort++, ct,
  68. icon: "Van", layoutArea: "SIDEBAR", displayMode: "CATEGORY_COMPACT"));
  69. // 异常多维分析卡(3 张:analysis 大卡,FREQUENCY/AVG_DURATION/CLOSE_RATE)
  70. list.Add(ExceptionType(seq++, "DELIVERY", "DELIVERY_CAT_ORDER_CHANGE", "订单变更多维分析", "ORDER_CHANGE", "FREQUENCY", "LAST_7D", sort++, ct,
  71. icon: "Checked", layoutArea: "ANALYSIS", displayMode: "CATEGORY_CARD"));
  72. list.Add(ExceptionType(seq++, "DELIVERY", "DELIVERY_CAT_DELIVERY_DELAY", "交期延迟多维分析", "DELIVERY_DELAY", "AVG_DURATION", "LAST_7D", sort++, ct,
  73. icon: "Van", layoutArea: "ANALYSIS", displayMode: "CATEGORY_CARD"));
  74. list.Add(ExceptionType(seq++, "DELIVERY", "DELIVERY_CAT_STOCK_PENDING", "入库待发多维分析", "PENDING_SHIPMENT", "CLOSE_RATE", "LAST_7D", sort++, ct,
  75. icon: "Van", layoutArea: "ANALYSIS", displayMode: "CATEGORY_CARD"));
  76. list.Add(Custom(seq++, "DELIVERY", "DELIVERY_STATUS_BAR", "状态统计条", "OPEN_COUNT", "TODAY", sort++, ct,
  77. icon: null, layoutArea: "ANALYSIS", displayMode: "CUSTOM"));
  78. // ── PRODUCTION 页面 ──
  79. // S8-DASHBOARD-P0-CATEGORY-SEED-FIX-1:模块卡标题与 S8ModuleCode.Label 对齐。
  80. sort = 100;
  81. list.Add(Custom(seq++, "PRODUCTION", "PRODUCTION_S2", "S2 制造协同", "OPEN_COUNT", "LAST_24H", sort++, ct,
  82. icon: "TrendCharts", layoutArea: "MODULES", displayMode: "STAGE_CARD"));
  83. list.Add(Custom(seq++, "PRODUCTION", "PRODUCTION_S6", "S6 生产执行", "OPEN_COUNT", "LAST_24H", sort++, ct,
  84. icon: "Box", layoutArea: "MODULES", displayMode: "STAGE_CARD"));
  85. list.Add(ExceptionType(seq++, "PRODUCTION", "PRODUCTION_ANOMALY_EQUIPMENT_FAULT", "设备异常", "EQUIP_FAULT", "OPEN_COUNT", "LAST_24H", sort++, ct,
  86. icon: "Tools", layoutArea: "SIDEBAR", displayMode: "CATEGORY_COMPACT"));
  87. list.Add(ExceptionType(seq++, "PRODUCTION", "PRODUCTION_ANOMALY_MATERIAL_FAULT", "物料异常", "MATERIAL_SHORTAGE", "OPEN_COUNT", "LAST_24H", sort++, ct,
  88. icon: "Box", layoutArea: "SIDEBAR", displayMode: "CATEGORY_COMPACT"));
  89. list.Add(ExceptionType(seq++, "PRODUCTION", "PRODUCTION_ANOMALY_QUALITY_FAULT", "质量异常", "QUALITY_DEFECT", "OPEN_COUNT", "LAST_24H", sort++, ct,
  90. icon: "TrendCharts", layoutArea: "SIDEBAR", displayMode: "CATEGORY_COMPACT"));
  91. list.Add(ExceptionType(seq++, "PRODUCTION", "PRODUCTION_CAT_EQUIPMENT_FAULT", "设备异常多维分析", "EQUIP_FAULT", "FREQUENCY", "LAST_7D", sort++, ct,
  92. icon: "Tools", layoutArea: "ANALYSIS", displayMode: "CATEGORY_CARD"));
  93. list.Add(ExceptionType(seq++, "PRODUCTION", "PRODUCTION_CAT_MATERIAL_FAULT", "物料异常多维分析", "MATERIAL_SHORTAGE", "AVG_DURATION", "LAST_7D", sort++, ct,
  94. icon: "Box", layoutArea: "ANALYSIS", displayMode: "CATEGORY_CARD"));
  95. list.Add(ExceptionType(seq++, "PRODUCTION", "PRODUCTION_CAT_QUALITY_FAULT", "质量异常多维分析", "QUALITY_DEFECT", "CLOSE_RATE", "LAST_7D", sort++, ct,
  96. icon: "TrendCharts", layoutArea: "ANALYSIS", displayMode: "CATEGORY_CARD"));
  97. list.Add(Custom(seq++, "PRODUCTION", "PRODUCTION_STATUS_BAR", "状态统计条", "OPEN_COUNT", "TODAY", sort++, ct,
  98. icon: null, layoutArea: "ANALYSIS", displayMode: "CUSTOM"));
  99. // ── SUPPLY 页面 ──
  100. // S8-DASHBOARD-P0-CATEGORY-SEED-FIX-1:模块卡标题与 S8ModuleCode.Label 对齐。
  101. sort = 100;
  102. list.Add(Custom(seq++, "SUPPLY", "SUPPLY_S3", "S3 供应协同", "OPEN_COUNT", "LAST_24H", sort++, ct,
  103. icon: "ShoppingBag", layoutArea: "MODULES", displayMode: "STAGE_CARD"));
  104. list.Add(Custom(seq++, "SUPPLY", "SUPPLY_S4", "S4 采购执行", "OPEN_COUNT", "LAST_24H", sort++, ct,
  105. icon: "Tools", layoutArea: "MODULES", displayMode: "STAGE_CARD"));
  106. list.Add(Custom(seq++, "SUPPLY", "SUPPLY_S5", "S5 物料仓储", "OPEN_COUNT", "LAST_24H", sort++, ct,
  107. icon: "DataAnalysis", layoutArea: "MODULES", displayMode: "STAGE_CARD"));
  108. // 供应域 7 类异常:类型卡(sidebar) + 分析卡(analysis)
  109. var supplyTypes = new (string typeCode, string anchor, string title, string icon)[]
  110. {
  111. ("SUPPLIER_ETA_ISSUE", "SUPPLIER_REPLY_DELAY", "供应商回复交期异常", "ShoppingBag"),
  112. ("SUPPLIER_SHIP_ISSUE", "SUPPLIER_SHIP_FAULT", "供应商发货异常", "Van"),
  113. ("WH_INBOUND_ISSUE", "WAREHOUSE_RECEIPT", "仓库收货异常", "Box"),
  114. ("IQC_ISSUE", "IQC_INSPECTION", "IQC 检验异常", "DataAnalysis"),
  115. ("WH_PUTAWAY_ISSUE", "WAREHOUSE_SHELVING", "仓库上架入库异常", "Document"),
  116. ("WH_KIT_ISSUE", "WORK_ORDER_PREPARE", "仓库工单备料异常", "Promotion"),
  117. ("WH_ISSUE_OUT_ISSUE", "WORK_ORDER_ISSUE", "仓库工单发料异常", "Tools"),
  118. };
  119. foreach (var (typeCode, anchor, title, icon) in supplyTypes)
  120. list.Add(ExceptionType(seq++, "SUPPLY", $"SUPPLY_ANOMALY_{anchor}", title, typeCode, "OPEN_COUNT", "LAST_24H", sort++, ct,
  121. icon: icon, layoutArea: "SIDEBAR", displayMode: "CATEGORY_COMPACT"));
  122. foreach (var (typeCode, anchor, title, icon) in supplyTypes)
  123. list.Add(ExceptionType(seq++, "SUPPLY", $"SUPPLY_CAT_{anchor}", $"{title}多维分析", typeCode, "FREQUENCY", "LAST_7D", sort++, ct,
  124. icon: icon, layoutArea: "ANALYSIS", displayMode: "CATEGORY_CARD"));
  125. list.Add(Custom(seq++, "SUPPLY", "SUPPLY_STATUS_BAR", "状态统计条", "OPEN_COUNT", "TODAY", sort++, ct,
  126. icon: null, layoutArea: "ANALYSIS", displayMode: "CUSTOM"));
  127. return list;
  128. }
  129. // F-CLEAN-1:show_in_sidebar 在 Phase 2/3 当前模型下不参与 cell→layout 派生
  130. // (前端 effectiveSidebarTypes 仅按 layout_area+display_mode 过滤,DTO 也不映射该字段),
  131. // 因此 SeedData 不再写入。Entity/DB 列保留以避免 schema 破坏,待未来重新定义语义或下版本统一 DROP。
  132. private static Entity.S8.AdoS8DashboardCellConfig Custom(
  133. long id, string pageCode, string cellCode, string cellTitle,
  134. string statMetric, string timeWindow, int sortNo, DateTime ct,
  135. string? icon = null, string layoutArea = "ANALYSIS", string displayMode = "CATEGORY_CARD",
  136. string? remark = null) =>
  137. new()
  138. {
  139. Id = id,
  140. TenantId = 0,
  141. FactoryId = 0,
  142. PageCode = pageCode,
  143. CellCode = cellCode,
  144. CellTitle = cellTitle,
  145. BindingType = "CUSTOM",
  146. ExceptionTypeCode = null,
  147. AggregateScope = null,
  148. StatMetric = statMetric,
  149. TimeWindow = timeWindow,
  150. FilterExpression = null,
  151. DeptGroupBy = "OWNER",
  152. Enabled = true,
  153. SortNo = sortNo,
  154. Icon = icon,
  155. LayoutArea = layoutArea,
  156. DisplayMode = displayMode,
  157. Remark = remark,
  158. CreatedAt = ct,
  159. };
  160. private static Entity.S8.AdoS8DashboardCellConfig ExceptionType(
  161. long id, string pageCode, string cellCode, string cellTitle,
  162. string exceptionTypeCode, string statMetric, string timeWindow, int sortNo, DateTime ct,
  163. string? icon = null, string layoutArea = "ANALYSIS", string displayMode = "CATEGORY_CARD",
  164. string? remark = null) =>
  165. new()
  166. {
  167. Id = id,
  168. TenantId = 0,
  169. FactoryId = 0,
  170. PageCode = pageCode,
  171. CellCode = cellCode,
  172. CellTitle = cellTitle,
  173. BindingType = "EXCEPTION_TYPE",
  174. ExceptionTypeCode = exceptionTypeCode,
  175. AggregateScope = null,
  176. StatMetric = statMetric,
  177. TimeWindow = timeWindow,
  178. FilterExpression = null,
  179. DeptGroupBy = "OWNER",
  180. Enabled = true,
  181. SortNo = sortNo,
  182. Icon = icon,
  183. LayoutArea = layoutArea,
  184. DisplayMode = displayMode,
  185. Remark = remark,
  186. CreatedAt = ct,
  187. };
  188. private static Entity.S8.AdoS8DashboardCellConfig Aggregate(
  189. long id, string pageCode, string cellCode, string cellTitle,
  190. string aggregateScope, string statMetric, string timeWindow, string deptGroupBy,
  191. int sortNo, DateTime ct,
  192. string? icon = null, string layoutArea = "ANALYSIS", string displayMode = "CATEGORY_CARD",
  193. string? remark = null) =>
  194. new()
  195. {
  196. Id = id,
  197. TenantId = 0,
  198. FactoryId = 0,
  199. PageCode = pageCode,
  200. CellCode = cellCode,
  201. CellTitle = cellTitle,
  202. BindingType = "AGGREGATE",
  203. ExceptionTypeCode = null,
  204. AggregateScope = aggregateScope,
  205. StatMetric = statMetric,
  206. TimeWindow = timeWindow,
  207. FilterExpression = null,
  208. DeptGroupBy = deptGroupBy,
  209. Enabled = true,
  210. SortNo = sortNo,
  211. Icon = icon,
  212. LayoutArea = layoutArea,
  213. DisplayMode = displayMode,
  214. Remark = remark,
  215. CreatedAt = ct,
  216. };
  217. }