AidopMonitorDictionarySeed.cs 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. using System.Diagnostics;
  2. using Admin.NET.Plugin.AiDOP.Entity.S8;
  3. using SqlSugar;
  4. namespace Admin.NET.Plugin.AiDOP.Infrastructure;
  5. /// <summary>
  6. /// CONFIG-MONITOR-DICT-READONLY-SEED-1:S8 监控对象/指标 baseline 种子。
  7. /// 6 个对象 + 10 条指标,与原前端 BUSINESS_MONITOR_OPTIONS 一一对应。
  8. /// 幂等:按 (tenant_id=0, factory_id=0, object_code/metric_code) Any() 检查后插入。
  9. /// RATIO 类指标 enabled=false + is_result_kpi=true(S9 结果 KPI 范畴),不进入演示路径。
  10. /// </summary>
  11. public static class AidopMonitorDictionarySeed
  12. {
  13. private const string DefaultObjectIdField = "source_object_id";
  14. private const string DefaultObjectCodeField = "related_object_code";
  15. private const string DefaultObjectNameField = "related_object_name";
  16. public static void EnsureSeed(ISqlSugarClient db)
  17. {
  18. try
  19. {
  20. var ct = DateTime.Parse("2026-05-09 00:00:00");
  21. // 6 监控对象
  22. EnsureObject(db, "ORDER_DELIVERY", "ORDER", "订单交付", 10, ct);
  23. EnsureObject(db, "ORDER_CHANGE", "ORDER", "订单变更", 20, ct);
  24. EnsureObject(db, "PURCHASE_DELIVERY", "PURCHASE_ORDER", "供应商交付", 30, ct);
  25. EnsureObject(db, "IQC_INSPECTION", "IQC", "IQC 检验", 40, ct);
  26. EnsureObject(db, "WORK_ORDER_PRODUCTION", "WORK_ORDER", "生产工单", 50, ct);
  27. EnsureObject(db, "INVENTORY_STOCK", "INVENTORY", "库存", 60, ct);
  28. // DATE 指标 enabled=true / is_result_kpi=false
  29. EnsureMetricDate(db, "ORDER_DUE_AT", "计划交付时间", "ORDER_DELIVERY", "分钟", "due_at", "status", 110, ct);
  30. EnsureMetricDate(db, "PO_DUE_AT", "计划到货时间", "PURCHASE_DELIVERY", "分钟", "due_at", "status", 310, ct);
  31. EnsureMetricDate(db, "WO_DUE_AT", "计划完工时间", "WORK_ORDER_PRODUCTION", "分钟", "due_at", "status", 510, ct);
  32. // VALUE_RANGE 指标 enabled=true / is_result_kpi=false
  33. EnsureMetricValueRange(db, "ORDER_CHANGE_COUNT", "订单变更次数", "ORDER_CHANGE", "次", "measured_value", 210, ct);
  34. EnsureMetricValueRange(db, "IQC_VALUE", "检验值", "IQC_INSPECTION", null, "measured_value", 410, ct);
  35. EnsureMetricValueRange(db, "INV_QTY", "当前库存量", "INVENTORY_STOCK", null, "measured_value", 610, ct);
  36. // RATIO 指标 enabled=false / is_result_kpi=true(S9 结果 KPI 范畴;本轮 seed 入库但默认禁用)
  37. EnsureMetricRatio(db, "ORDER_DELIVERY_RATE", "订单交付满足率", "ORDER_DELIVERY", "%", "measured_value", 120, ct);
  38. EnsureMetricRatio(db, "PO_DELIVERY_RATE", "到货达成率", "PURCHASE_DELIVERY", "%", "measured_value", 320, ct);
  39. EnsureMetricRatio(db, "IQC_PASS_RATE", "检验合格率", "IQC_INSPECTION", "%", "measured_value", 420, ct);
  40. EnsureMetricRatio(db, "WO_COMPLETION_RATE", "工单完工率", "WORK_ORDER_PRODUCTION", "%", "measured_value", 520, ct);
  41. }
  42. catch (Exception ex)
  43. {
  44. Trace.TraceWarning("AidopMonitorDictionarySeed: " + ex);
  45. }
  46. }
  47. private static void EnsureObject(ISqlSugarClient db, string objectCode, string objectType, string objectName, int sortNo, DateTime ct)
  48. {
  49. var exists = db.Queryable<AdoS8MonitorObject>()
  50. .Any(x => x.TenantId == 0 && x.FactoryId == 0 && x.ObjectCode == objectCode);
  51. if (exists) return;
  52. db.Insertable(new AdoS8MonitorObject
  53. {
  54. TenantId = 0,
  55. FactoryId = 0,
  56. ObjectCode = objectCode,
  57. ObjectType = objectType,
  58. ObjectName = objectName,
  59. Enabled = true,
  60. SortNo = sortNo,
  61. CreatedAt = ct,
  62. }).ExecuteCommand();
  63. }
  64. private static void EnsureMetricDate(ISqlSugarClient db, string metricCode, string metricName, string objectCode, string? unit, string dueAtField, string statusField, int sortNo, DateTime ct)
  65. {
  66. if (db.Queryable<AdoS8MonitorMetric>()
  67. .Any(x => x.TenantId == 0 && x.FactoryId == 0 && x.MetricCode == metricCode)) return;
  68. db.Insertable(new AdoS8MonitorMetric
  69. {
  70. TenantId = 0,
  71. FactoryId = 0,
  72. ObjectCode = objectCode,
  73. MetricCode = metricCode,
  74. MetricName = metricName,
  75. Mechanism = "DATE",
  76. Unit = unit,
  77. DueAtField = dueAtField,
  78. StatusField = statusField,
  79. ObjectIdField = DefaultObjectIdField,
  80. ObjectCodeField = DefaultObjectCodeField,
  81. ObjectNameField = DefaultObjectNameField,
  82. IsResultKpi = false,
  83. Enabled = true,
  84. SortNo = sortNo,
  85. CreatedAt = ct,
  86. }).ExecuteCommand();
  87. }
  88. private static void EnsureMetricValueRange(ISqlSugarClient db, string metricCode, string metricName, string objectCode, string? unit, string measuredValueField, int sortNo, DateTime ct)
  89. {
  90. if (db.Queryable<AdoS8MonitorMetric>()
  91. .Any(x => x.TenantId == 0 && x.FactoryId == 0 && x.MetricCode == metricCode)) return;
  92. db.Insertable(new AdoS8MonitorMetric
  93. {
  94. TenantId = 0,
  95. FactoryId = 0,
  96. ObjectCode = objectCode,
  97. MetricCode = metricCode,
  98. MetricName = metricName,
  99. Mechanism = "VALUE_RANGE",
  100. Unit = unit,
  101. MeasuredValueField = measuredValueField,
  102. ObjectIdField = DefaultObjectIdField,
  103. ObjectCodeField = DefaultObjectCodeField,
  104. ObjectNameField = DefaultObjectNameField,
  105. IsResultKpi = false,
  106. Enabled = true,
  107. SortNo = sortNo,
  108. CreatedAt = ct,
  109. }).ExecuteCommand();
  110. }
  111. private static void EnsureMetricRatio(ISqlSugarClient db, string metricCode, string metricName, string objectCode, string? unit, string measuredValueField, int sortNo, DateTime ct)
  112. {
  113. if (db.Queryable<AdoS8MonitorMetric>()
  114. .Any(x => x.TenantId == 0 && x.FactoryId == 0 && x.MetricCode == metricCode)) return;
  115. db.Insertable(new AdoS8MonitorMetric
  116. {
  117. TenantId = 0,
  118. FactoryId = 0,
  119. ObjectCode = objectCode,
  120. MetricCode = metricCode,
  121. MetricName = metricName,
  122. Mechanism = "RATIO",
  123. Unit = unit,
  124. MeasuredValueField = measuredValueField,
  125. ObjectIdField = DefaultObjectIdField,
  126. ObjectCodeField = DefaultObjectCodeField,
  127. ObjectNameField = DefaultObjectNameField,
  128. IsResultKpi = true,
  129. Enabled = false,
  130. SortNo = sortNo,
  131. CreatedAt = ct,
  132. Remark = "[RESERVED] S9 result KPI; enable explicitly when S8/S9 boundary task lands",
  133. }).ExecuteCommand();
  134. }
  135. }