S8DashboardCellConfigSeedData.cs 13 KB

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