Selaa lähdekoodia

feat(s8): map work order production monitor source

YY968XX 2 kuukautta sitten
vanhempi
commit
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>
     /// <summary>CONFIG-MONITOR-SOURCE-TABLE-EXTEND-1:库存监控真实库表(5k+ 行 demo 数据)。</summary>
     private const string InventoryStockSourceTable = "ic_item_stock";
     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)
     public static void EnsureSeed(ISqlSugarClient db)
     {
     {
         try
         try
@@ -34,7 +37,7 @@ public static class AidopMonitorDictionarySeed
             EnsureObject(db, "ORDER_CHANGE",           "ORDER",          "订单变更",      null,            20, ct);
             EnsureObject(db, "ORDER_CHANGE",           "ORDER",          "订单变更",      null,            20, ct);
             EnsureObject(db, "PURCHASE_DELIVERY",      "PURCHASE_ORDER", "供应商交付",    null,            30, ct);
             EnsureObject(db, "PURCHASE_DELIVERY",      "PURCHASE_ORDER", "供应商交付",    null,            30, ct);
             EnsureObject(db, "IQC_INSPECTION",         "IQC",            "IQC 检验",      DemoSourceTable, 40, 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);
             EnsureObject(db, "INVENTORY_STOCK",        "INVENTORY",      "库存",          InventoryStockSourceTable,  60, ct);
 
 
             // DATE 指标 enabled=true / is_result_kpi=false
             // DATE 指标 enabled=true / is_result_kpi=false
@@ -45,8 +48,11 @@ public static class AidopMonitorDictionarySeed
                 sortNo: 110, ct: ct);
                 sortNo: 110, ct: ct);
             EnsureMetricDate(db, "PO_DUE_AT",    "计划到货时间", "PURCHASE_DELIVERY",
             EnsureMetricDate(db, "PO_DUE_AT",    "计划到货时间", "PURCHASE_DELIVERY",
                 "分钟", "due_at", "status", null, null, null, 310, ct);
                 "分钟", "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",
             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
             // VALUE_RANGE 指标 enabled=true / is_result_kpi=false
             // IQC_VALUE 走 demo_test_order:measured_size 是 demo 实际列;id/order_no 同上
             // IQC_VALUE 走 demo_test_order:measured_size 是 demo 实际列;id/order_no 同上
@@ -136,7 +142,7 @@ public static class AidopMonitorDictionarySeed
             return;
             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)
     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>
     /// <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;
         var changed = false;
 
 
@@ -229,6 +235,22 @@ public static class AidopMonitorDictionarySeed
                 changed = true;
                 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;
         if (!changed) return;