Просмотр исходного кода

feat(s8): map work order production monitor source

YY968XX 1 месяц назад
Родитель
Сommit
01e7d128ed

+ 26 - 4
server/Plugins/Admin.NET.Plugin.AiDOP/Infrastructure/AidopMonitorDictionarySeed.cs

@@ -23,6 +23,9 @@ public static class AidopMonitorDictionarySeed
     /// <summary>CONFIG-MONITOR-SOURCE-TABLE-EXTEND-1:库存监控真实库表(5k+ 行 demo 数据)。</summary>
     private const string InventoryStockSourceTable = "ic_item_stock";
 
+    /// <summary>CONFIG-MONITOR-DATA-EXTEND-2:工单生产真实表(mes_morder MES 制造订单)。</summary>
+    private const string WorkOrderProductionSourceTable = "mes_morder";
+
     public static void EnsureSeed(ISqlSugarClient db)
     {
         try
@@ -34,7 +37,7 @@ public static class AidopMonitorDictionarySeed
             EnsureObject(db, "ORDER_CHANGE",           "ORDER",          "订单变更",      null,            20, ct);
             EnsureObject(db, "PURCHASE_DELIVERY",      "PURCHASE_ORDER", "供应商交付",    null,            30, ct);
             EnsureObject(db, "IQC_INSPECTION",         "IQC",            "IQC 检验",      DemoSourceTable, 40, ct);
-            EnsureObject(db, "WORK_ORDER_PRODUCTION",  "WORK_ORDER",     "生产工单",      null,                       50, ct);
+            EnsureObject(db, "WORK_ORDER_PRODUCTION",  "WORK_ORDER",     "生产工单",      WorkOrderProductionSourceTable, 50, ct);
             EnsureObject(db, "INVENTORY_STOCK",        "INVENTORY",      "库存",          InventoryStockSourceTable,  60, ct);
 
             // DATE 指标 enabled=true / is_result_kpi=false
@@ -45,8 +48,11 @@ public static class AidopMonitorDictionarySeed
                 sortNo: 110, ct: ct);
             EnsureMetricDate(db, "PO_DUE_AT",    "计划到货时间", "PURCHASE_DELIVERY",
                 "分钟", "due_at", "status", null, null, null, 310, ct);
+            // WO_DUE_AT 走 mes_morder:planner_end_date 计划完工日,morder_state 业务状态;Id/morder_no/moentry_prdname 真实列
             EnsureMetricDate(db, "WO_DUE_AT",    "计划完工时间", "WORK_ORDER_PRODUCTION",
-                "分钟", "due_at", "status", null, null, null, 510, ct);
+                "分钟", "planner_end_date", "morder_state",
+                objectIdCol: "Id", objectCodeCol: "morder_no", objectNameCol: "moentry_prdname",
+                sortNo: 510, ct: ct);
 
             // VALUE_RANGE 指标 enabled=true / is_result_kpi=false
             // IQC_VALUE 走 demo_test_order:measured_size 是 demo 实际列;id/order_no 同上
@@ -136,7 +142,7 @@ public static class AidopMonitorDictionarySeed
             return;
         }
 
-        BackfillMetricColumns(db, existing, objectIdCol, objectCodeCol, objectNameCol);
+        BackfillMetricColumns(db, existing, objectIdCol, objectCodeCol, objectNameCol, dueAtCol: dueAtField, statusCol: statusField);
     }
 
     private static void EnsureMetricValueRange(ISqlSugarClient db, string metricCode, string metricName, string objectCode, string? unit, string measuredValueField, string? objectIdCol, string? objectCodeCol, string? objectNameCol, int sortNo, DateTime ct)
@@ -197,7 +203,7 @@ public static class AidopMonitorDictionarySeed
     }
 
     /// <summary>已存在指标行:仅在原值仍是默认 alias 占位时回填真实列名,避免覆盖运维改过的字段。</summary>
-    private static void BackfillMetricColumns(ISqlSugarClient db, AdoS8MonitorMetric existing, string? objectIdCol, string? objectCodeCol, string? objectNameCol, string? measuredValueCol = null)
+    private static void BackfillMetricColumns(ISqlSugarClient db, AdoS8MonitorMetric existing, string? objectIdCol, string? objectCodeCol, string? objectNameCol, string? measuredValueCol = null, string? dueAtCol = null, string? statusCol = null)
     {
         var changed = false;
 
@@ -229,6 +235,22 @@ public static class AidopMonitorDictionarySeed
                 changed = true;
             }
         }
+        // due_at / status 是 DATE 指标的占位默认值;与 demo_test_order 真实列同名属于巧合。
+        // 仅当 existing 仍是占位 "due_at"/"status" 时才回填,避免覆盖运维改过的字段。
+        if (!string.IsNullOrWhiteSpace(dueAtCol)
+            && existing.DueAtField == "due_at"
+            && existing.DueAtField != dueAtCol)
+        {
+            existing.DueAtField = dueAtCol;
+            changed = true;
+        }
+        if (!string.IsNullOrWhiteSpace(statusCol)
+            && existing.StatusField == "status"
+            && existing.StatusField != statusCol)
+        {
+            existing.StatusField = statusCol;
+            changed = true;
+        }
 
         if (!changed) return;