S8DashboardCellConfigSeedData.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  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/show_in_sidebar/remark),
  7. /// 让新装环境跑 SeedData 即可获得完整渲染配置;现有环境通过手工 INSERT SQL 灌入同样数据。
  8. /// </summary>
  9. [IncreSeed]
  10. public class S8DashboardCellConfigSeedData : ISqlSugarEntitySeedData<Entity.S8.AdoS8DashboardCellConfig>
  11. {
  12. public IEnumerable<Entity.S8.AdoS8DashboardCellConfig> HasData()
  13. {
  14. var ct = DateTime.Parse("2026-04-18 00:00:00");
  15. long seq = 1329908200001L;
  16. var list = new List<Entity.S8.AdoS8DashboardCellConfig>();
  17. // ── OVERVIEW 页面 ──
  18. // S1-S7 模块卡(7 张,CUSTOM 聚合,layout_area=MODULES, display_mode=STAGE_CARD)
  19. var overviewModules = new (string code, string icon)[]
  20. {
  21. ("S1", "Checked"),
  22. ("S2", "TrendCharts"),
  23. ("S3", "ShoppingBag"),
  24. ("S4", "Tools"),
  25. ("S5", "DataAnalysis"),
  26. ("S6", "Box"),
  27. ("S7", "Van"),
  28. };
  29. var sort = 100;
  30. foreach (var (m, icon) in overviewModules)
  31. list.Add(Custom(seq++, "OVERVIEW", $"OVERVIEW_{m}", $"{m} 模块异常", "OPEN_COUNT", "LAST_24H", sort++, ct,
  32. icon: icon, layoutArea: "MODULES", displayMode: "STAGE_CARD"));
  33. // 部门效率聚合
  34. list.Add(Aggregate(seq++, "OVERVIEW", "OVERVIEW_BY_DEPT", "部门异常聚合", "ALL", "OPEN_COUNT", "LAST_24H", "OWNER", sort++, ct,
  35. icon: "DataAnalysis", layoutArea: "SIDEBAR", displayMode: "DEPT_CLUSTER"));
  36. // 类别异常卡(5 张,按场景聚合,layout_area=ANALYSIS, display_mode=CATEGORY_CARD)
  37. var overviewCats = new (string code, string title, string icon)[]
  38. {
  39. ("OVERVIEW_CAT_ORDER_REVIEW", "订单评审异常", "DataAnalysis"),
  40. ("OVERVIEW_CAT_PRODUCT_DESIGN", "产品设计异常", "ShoppingBag"),
  41. ("OVERVIEW_CAT_MATERIAL_PURCHASE","物料采购异常", "Tools"),
  42. ("OVERVIEW_CAT_BODY_PRODUCTION", "主体生产异常", "Van"),
  43. ("OVERVIEW_CAT_FINAL_ASSEMBLY", "总装交付异常", "Van"),
  44. };
  45. foreach (var (code, title, icon) in overviewCats)
  46. list.Add(Aggregate(seq++, "OVERVIEW", code, title, "ALL", "FREQUENCY", "LAST_7D", "OWNER", sort++, ct,
  47. icon: icon, layoutArea: "ANALYSIS", displayMode: "CATEGORY_CARD"));
  48. // 整体响应效能 + 状态统计条(CUSTOM,无 icon)
  49. list.Add(Custom(seq++, "OVERVIEW", "OVERVIEW_OVERALL_EFFICIENCY", "整体响应效能", "CLOSE_RATE", "LAST_7D", sort++, ct,
  50. icon: null, layoutArea: "SIDEBAR", displayMode: "CUSTOM"));
  51. list.Add(Custom(seq++, "OVERVIEW", "OVERVIEW_STATUS_BAR", "状态统计条", "OPEN_COUNT", "TODAY", sort++, ct,
  52. icon: null, layoutArea: "ANALYSIS", displayMode: "CUSTOM"));
  53. // ── DELIVERY 页面 ──
  54. sort = 100;
  55. list.Add(Custom(seq++, "DELIVERY", "DELIVERY_S1", "S1 订单模块", "OPEN_COUNT", "LAST_24H", sort++, ct,
  56. icon: "Checked", layoutArea: "MODULES", displayMode: "STAGE_CARD"));
  57. list.Add(Custom(seq++, "DELIVERY", "DELIVERY_S7", "S7 交付模块", "OPEN_COUNT", "LAST_24H", sort++, ct,
  58. icon: "Van", layoutArea: "MODULES", displayMode: "STAGE_CARD"));
  59. // 异常类型卡(3 张:sidebar compact,OPEN_COUNT 总数)
  60. list.Add(ExceptionType(seq++, "DELIVERY", "DELIVERY_ANOMALY_ORDER_CHANGE", "订单变更", "ORDER_CHANGE", "OPEN_COUNT", "LAST_24H", sort++, ct,
  61. icon: "Checked", layoutArea: "SIDEBAR", displayMode: "CATEGORY_COMPACT"));
  62. list.Add(ExceptionType(seq++, "DELIVERY", "DELIVERY_ANOMALY_DELIVERY_DELAY", "交期延迟", "DELIVERY_DELAY", "OPEN_COUNT", "LAST_24H", sort++, ct,
  63. icon: "Van", layoutArea: "SIDEBAR", displayMode: "CATEGORY_COMPACT"));
  64. list.Add(ExceptionType(seq++, "DELIVERY", "DELIVERY_ANOMALY_STOCK_PENDING", "入库待发", "PENDING_SHIPMENT", "OPEN_COUNT", "LAST_24H", sort++, ct,
  65. icon: "Van", layoutArea: "SIDEBAR", displayMode: "CATEGORY_COMPACT"));
  66. // 异常多维分析卡(3 张:analysis 大卡,FREQUENCY/AVG_DURATION/CLOSE_RATE)
  67. list.Add(ExceptionType(seq++, "DELIVERY", "DELIVERY_CAT_ORDER_CHANGE", "订单变更多维分析", "ORDER_CHANGE", "FREQUENCY", "LAST_7D", sort++, ct,
  68. icon: "Checked", layoutArea: "ANALYSIS", displayMode: "CATEGORY_CARD"));
  69. list.Add(ExceptionType(seq++, "DELIVERY", "DELIVERY_CAT_DELIVERY_DELAY", "交期延迟多维分析", "DELIVERY_DELAY", "AVG_DURATION", "LAST_7D", sort++, ct,
  70. icon: "Van", layoutArea: "ANALYSIS", displayMode: "CATEGORY_CARD"));
  71. list.Add(ExceptionType(seq++, "DELIVERY", "DELIVERY_CAT_STOCK_PENDING", "入库待发多维分析", "PENDING_SHIPMENT", "CLOSE_RATE", "LAST_7D", sort++, ct,
  72. icon: "Van", layoutArea: "ANALYSIS", displayMode: "CATEGORY_CARD"));
  73. list.Add(Custom(seq++, "DELIVERY", "DELIVERY_STATUS_BAR", "状态统计条", "OPEN_COUNT", "TODAY", sort++, ct,
  74. icon: null, layoutArea: "ANALYSIS", displayMode: "CUSTOM"));
  75. // ── PRODUCTION 页面 ──
  76. sort = 100;
  77. list.Add(Custom(seq++, "PRODUCTION", "PRODUCTION_S2", "S2 排产模块", "OPEN_COUNT", "LAST_24H", sort++, ct,
  78. icon: "TrendCharts", layoutArea: "MODULES", displayMode: "STAGE_CARD"));
  79. list.Add(Custom(seq++, "PRODUCTION", "PRODUCTION_S6", "S6 生产模块", "OPEN_COUNT", "LAST_24H", sort++, ct,
  80. icon: "Box", layoutArea: "MODULES", displayMode: "STAGE_CARD"));
  81. list.Add(ExceptionType(seq++, "PRODUCTION", "PRODUCTION_ANOMALY_EQUIPMENT_FAULT", "设备异常", "EQUIP_FAULT", "OPEN_COUNT", "LAST_24H", sort++, ct,
  82. icon: "Tools", layoutArea: "SIDEBAR", displayMode: "CATEGORY_COMPACT"));
  83. list.Add(ExceptionType(seq++, "PRODUCTION", "PRODUCTION_ANOMALY_MATERIAL_FAULT", "物料异常", "MATERIAL_SHORTAGE", "OPEN_COUNT", "LAST_24H", sort++, ct,
  84. icon: "Box", layoutArea: "SIDEBAR", displayMode: "CATEGORY_COMPACT"));
  85. list.Add(ExceptionType(seq++, "PRODUCTION", "PRODUCTION_ANOMALY_QUALITY_FAULT", "质量异常", "QUALITY_DEFECT", "OPEN_COUNT", "LAST_24H", sort++, ct,
  86. icon: "TrendCharts", layoutArea: "SIDEBAR", displayMode: "CATEGORY_COMPACT"));
  87. list.Add(ExceptionType(seq++, "PRODUCTION", "PRODUCTION_CAT_EQUIPMENT_FAULT", "设备异常多维分析", "EQUIP_FAULT", "FREQUENCY", "LAST_7D", sort++, ct,
  88. icon: "Tools", layoutArea: "ANALYSIS", displayMode: "CATEGORY_CARD"));
  89. list.Add(ExceptionType(seq++, "PRODUCTION", "PRODUCTION_CAT_MATERIAL_FAULT", "物料异常多维分析", "MATERIAL_SHORTAGE", "AVG_DURATION", "LAST_7D", sort++, ct,
  90. icon: "Box", layoutArea: "ANALYSIS", displayMode: "CATEGORY_CARD"));
  91. list.Add(ExceptionType(seq++, "PRODUCTION", "PRODUCTION_CAT_QUALITY_FAULT", "质量异常多维分析", "QUALITY_DEFECT", "CLOSE_RATE", "LAST_7D", sort++, ct,
  92. icon: "TrendCharts", layoutArea: "ANALYSIS", displayMode: "CATEGORY_CARD"));
  93. list.Add(Custom(seq++, "PRODUCTION", "PRODUCTION_STATUS_BAR", "状态统计条", "OPEN_COUNT", "TODAY", sort++, ct,
  94. icon: null, layoutArea: "ANALYSIS", displayMode: "CUSTOM"));
  95. // ── SUPPLY 页面 ──
  96. sort = 100;
  97. list.Add(Custom(seq++, "SUPPLY", "SUPPLY_S3", "S3 供应模块", "OPEN_COUNT", "LAST_24H", sort++, ct,
  98. icon: "ShoppingBag", layoutArea: "MODULES", displayMode: "STAGE_CARD"));
  99. list.Add(Custom(seq++, "SUPPLY", "SUPPLY_S4", "S4 入库模块", "OPEN_COUNT", "LAST_24H", sort++, ct,
  100. icon: "Tools", layoutArea: "MODULES", displayMode: "STAGE_CARD"));
  101. list.Add(Custom(seq++, "SUPPLY", "SUPPLY_S5", "S5 发料模块", "OPEN_COUNT", "LAST_24H", sort++, ct,
  102. icon: "DataAnalysis", layoutArea: "MODULES", displayMode: "STAGE_CARD"));
  103. // 供应域 7 类异常:类型卡(sidebar) + 分析卡(analysis)
  104. var supplyTypes = new (string typeCode, string anchor, string title, string icon)[]
  105. {
  106. ("SUPPLIER_ETA_ISSUE", "SUPPLIER_REPLY_DELAY", "供应商回复交期异常", "ShoppingBag"),
  107. ("SUPPLIER_SHIP_ISSUE", "SUPPLIER_SHIP_FAULT", "供应商发货异常", "Van"),
  108. ("WH_INBOUND_ISSUE", "WAREHOUSE_RECEIPT", "仓库收货异常", "Box"),
  109. ("IQC_ISSUE", "IQC_INSPECTION", "IQC 检验异常", "DataAnalysis"),
  110. ("WH_PUTAWAY_ISSUE", "WAREHOUSE_SHELVING", "仓库上架入库异常", "Document"),
  111. ("WH_KIT_ISSUE", "WORK_ORDER_PREPARE", "仓库工单备料异常", "Promotion"),
  112. ("WH_ISSUE_OUT_ISSUE", "WORK_ORDER_ISSUE", "仓库工单发料异常", "Tools"),
  113. };
  114. foreach (var (typeCode, anchor, title, icon) in supplyTypes)
  115. list.Add(ExceptionType(seq++, "SUPPLY", $"SUPPLY_ANOMALY_{anchor}", title, typeCode, "OPEN_COUNT", "LAST_24H", sort++, ct,
  116. icon: icon, layoutArea: "SIDEBAR", displayMode: "CATEGORY_COMPACT"));
  117. foreach (var (typeCode, anchor, title, icon) in supplyTypes)
  118. list.Add(ExceptionType(seq++, "SUPPLY", $"SUPPLY_CAT_{anchor}", $"{title}多维分析", typeCode, "FREQUENCY", "LAST_7D", sort++, ct,
  119. icon: icon, layoutArea: "ANALYSIS", displayMode: "CATEGORY_CARD"));
  120. list.Add(Custom(seq++, "SUPPLY", "SUPPLY_STATUS_BAR", "状态统计条", "OPEN_COUNT", "TODAY", sort++, ct,
  121. icon: null, layoutArea: "ANALYSIS", displayMode: "CUSTOM"));
  122. return list;
  123. }
  124. private static Entity.S8.AdoS8DashboardCellConfig Custom(
  125. long id, string pageCode, string cellCode, string cellTitle,
  126. string statMetric, string timeWindow, int sortNo, DateTime ct,
  127. string? icon = null, string layoutArea = "ANALYSIS", string displayMode = "CATEGORY_CARD",
  128. bool showInSidebar = false, string? remark = null) =>
  129. new()
  130. {
  131. Id = id,
  132. TenantId = 0,
  133. FactoryId = 0,
  134. PageCode = pageCode,
  135. CellCode = cellCode,
  136. CellTitle = cellTitle,
  137. BindingType = "CUSTOM",
  138. ExceptionTypeCode = null,
  139. AggregateScope = null,
  140. StatMetric = statMetric,
  141. TimeWindow = timeWindow,
  142. FilterExpression = null,
  143. DeptGroupBy = "OWNER",
  144. Enabled = true,
  145. SortNo = sortNo,
  146. Icon = icon,
  147. LayoutArea = layoutArea,
  148. DisplayMode = displayMode,
  149. ShowInSidebar = showInSidebar,
  150. Remark = remark,
  151. CreatedAt = ct,
  152. };
  153. private static Entity.S8.AdoS8DashboardCellConfig ExceptionType(
  154. long id, string pageCode, string cellCode, string cellTitle,
  155. string exceptionTypeCode, string statMetric, string timeWindow, int sortNo, DateTime ct,
  156. string? icon = null, string layoutArea = "ANALYSIS", string displayMode = "CATEGORY_CARD",
  157. bool showInSidebar = false, string? remark = null) =>
  158. new()
  159. {
  160. Id = id,
  161. TenantId = 0,
  162. FactoryId = 0,
  163. PageCode = pageCode,
  164. CellCode = cellCode,
  165. CellTitle = cellTitle,
  166. BindingType = "EXCEPTION_TYPE",
  167. ExceptionTypeCode = exceptionTypeCode,
  168. AggregateScope = null,
  169. StatMetric = statMetric,
  170. TimeWindow = timeWindow,
  171. FilterExpression = null,
  172. DeptGroupBy = "OWNER",
  173. Enabled = true,
  174. SortNo = sortNo,
  175. Icon = icon,
  176. LayoutArea = layoutArea,
  177. DisplayMode = displayMode,
  178. ShowInSidebar = showInSidebar,
  179. Remark = remark,
  180. CreatedAt = ct,
  181. };
  182. private static Entity.S8.AdoS8DashboardCellConfig Aggregate(
  183. long id, string pageCode, string cellCode, string cellTitle,
  184. string aggregateScope, string statMetric, string timeWindow, string deptGroupBy,
  185. int sortNo, DateTime ct,
  186. string? icon = null, string layoutArea = "ANALYSIS", string displayMode = "CATEGORY_CARD",
  187. bool showInSidebar = false, string? remark = null) =>
  188. new()
  189. {
  190. Id = id,
  191. TenantId = 0,
  192. FactoryId = 0,
  193. PageCode = pageCode,
  194. CellCode = cellCode,
  195. CellTitle = cellTitle,
  196. BindingType = "AGGREGATE",
  197. ExceptionTypeCode = null,
  198. AggregateScope = aggregateScope,
  199. StatMetric = statMetric,
  200. TimeWindow = timeWindow,
  201. FilterExpression = null,
  202. DeptGroupBy = deptGroupBy,
  203. Enabled = true,
  204. SortNo = sortNo,
  205. Icon = icon,
  206. LayoutArea = layoutArea,
  207. DisplayMode = displayMode,
  208. ShowInSidebar = showInSidebar,
  209. Remark = remark,
  210. CreatedAt = ct,
  211. };
  212. }