From 7a994e2b72e7cfa1e6afcea7ff6f38daba749b88 Mon Sep 17 00:00:00 2001
From: 快乐的昕的电脑 <快乐的昕的电脑@DESKTOP-C2BQPQU>
Date: 星期二, 21 十月 2025 10:25:01 +0800
Subject: [PATCH] 更新工单Daa012为原值加上本次不良品数量

---
 Services/WomdaaManager.cs |  117 +++++++++++++++++++++++++++++++++-------------------------
 1 files changed, 66 insertions(+), 51 deletions(-)

diff --git a/Services/WomdaaManager.cs b/Services/WomdaaManager.cs
index b3eb25c..59d2293 100644
--- a/Services/WomdaaManager.cs
+++ b/Services/WomdaaManager.cs
@@ -119,10 +119,15 @@
         var vOrderBycl = new VOrderBycl();
         if (numericalList.Count > 0)
         {
+            // 鎸夐噰闆嗘椂闂村崌搴忔帓搴�
+            var sortedList = numericalList
+                .OrderBy(x => DateTime.TryParse(x.CjTiem, out var dt) ? dt : DateTime.MinValue)
+                .ToList();
+
             // 寮�宸ユ暟閲囷細鏈�鏃╀竴鏉�
-            vOrderBycl.StartCjNum = numericalList.First().CjNum ?? 0;
+            vOrderBycl.StartCjNum = sortedList.First().CjNum ?? 0;
             // 褰撳墠鏁伴噰锛氭渶鏂颁竴鏉�
-            vOrderBycl.CurrentCjNum = numericalList.Last().CjNum ?? 0;
+            vOrderBycl.CurrentCjNum = sortedList.Last().CjNum ?? 0;
         }
         else
         {
@@ -132,8 +137,9 @@
 
         // 鏌ヨ鎶ュ伐璁板綍锛岃幏鍙栨渶鍚庝竴鏉℃姤宸ヨ褰�
         var lastReport = Db.Queryable<MesReporting>()
-            .Where(r => r.BillNo != null && r.BillNo.Contains(query.orderNo))
-            .OrderBy(r => r.Id, OrderByType.Desc)
+            .AS("MES_REPORTING") // 寮哄埗琛ㄥ悕
+            .Where(r => r.BillNo == "MSD01-2507140001-g1-1")
+            .OrderBy(r => r.BgDate, OrderByType.Desc)
             .First();
 
         if (lastReport == null || !lastReport.BgDate.HasValue)
@@ -143,31 +149,15 @@
         }
         else
         {
-            // 鏈夋姤宸ヨ褰曪紝鍒濆閲囬泦鏁颁负涓婁竴娆℃姤宸ユ椂闂村悗鏈�杩戜竴鏉¢娇杞暟閲囪〃鐨勯噰闆嗘暟閲�
-            // 1. 绮剧‘鍖归厤鎶ュ伐鏃堕棿
-            var exactMatch = numericalList
+            // 鏈夋姤宸ヨ褰曪紝鍒濆閲囬泦鏁颁负鎶ュ伐鏃堕棿鐐瑰墠锛堝惈锛夋渶杩戜竴鏉¢娇杞暟閲囪〃鐨勯噰闆嗘暟閲�
+            var beforeOrEqualReportNum = numericalList
                 .Select(x => new { Item = x, ParsedTime = DateTime.TryParse(x.CjTiem, out var dt) ? dt : (DateTime?)null })
-                .Where(x => x.ParsedTime.HasValue && x.ParsedTime.Value == lastReport.BgDate.Value)
-                .OrderBy(x => x.ParsedTime)
+                .Where(x => x.ParsedTime.HasValue && x.ParsedTime.Value <= lastReport.BgDate.Value)
+                .OrderByDescending(x => x.ParsedTime) // 闄嶅簭锛屽彇绗竴鏉�
                 .Select(x => x.Item)
                 .FirstOrDefault();
 
-            if (exactMatch != null)
-            {
-                vOrderBycl.InitCjNum = exactMatch.CjNum ?? vOrderBycl.StartCjNum;
-            }
-            else
-            {
-                // 2. 鎵炬姤宸ユ椂闂翠箣鍚庣殑绗竴鏉�
-                var afterReportNum = numericalList
-                    .Select(x => new { Item = x, ParsedTime = DateTime.TryParse(x.CjTiem, out var dt) ? dt : (DateTime?)null })
-                    .Where(x => x.ParsedTime.HasValue && x.ParsedTime.Value > lastReport.BgDate.Value)
-                    .OrderBy(x => x.ParsedTime)
-                    .Select(x => x.Item)
-                    .FirstOrDefault();
-
-                vOrderBycl.InitCjNum = afterReportNum?.CjNum ?? vOrderBycl.StartCjNum;
-            }
+            vOrderBycl.InitCjNum = beforeOrEqualReportNum?.CjNum ?? vOrderBycl.StartCjNum;
         }
 
         var startCjNum = vOrderBycl.StartCjNum;
@@ -219,24 +209,14 @@
             .Where(a => a.OrderId == VOrdrerBycl.ID
                         && a.IsShow == 0).First();
 
-        VOrdrerBycl.todayRunTime = 0;
+        // 淇濈暀瑙嗗浘閲岀殑 todayRunTime 鍜� JDL锛屼笉鍋氫换浣曡祴鍊煎拰杞崲
+        // VOrdrerBycl.todayRunTime 淇濇寔鍘熷��
+        // VOrdrerBycl.JDL 淇濇寔鍘熷��
         VOrdrerBycl.TodayFaultNum = 0;
 
         if (mesOrderSelect != null)
         {
-            VOrdrerBycl.todayRunTime = mesOrderSelect.TjTime;
             VOrdrerBycl.TodayFaultNum = mesOrderSelect.TjCount;
-
-            if (mesOrderSelect.TjTime is null or 0)
-            {
-                VOrdrerBycl.JDL = 100;
-            }
-            else
-            {
-                var round = Math.Round(mesOrderSelect.TjTime.Value / 1440, 2);
-                var round1 = (1 - round) * 100;
-                VOrdrerBycl.JDL = round1;
-            }
         }
 
         VOrdrerBycl.wjQty = VOrdrerBycl.Daa008 - VOrdrerBycl.Daa011;
@@ -260,10 +240,15 @@
 
         if (numericalList.Count > 0)
         {
+            // 鍏堟寜閲囬泦鏃堕棿鍗囧簭鎺掑簭
+            var sortedList = numericalList
+                .OrderBy(x => DateTime.TryParse(x.CjTiem, out var dt) ? dt : DateTime.MinValue)
+                .ToList();
+
             // 寮�宸ユ暟閲囷細鏈�鏃╀竴鏉�
-            VOrdrerBycl.StartCjNum = numericalList.First().CjNum ?? 0;
+            VOrdrerBycl.StartCjNum = sortedList.First().CjNum ?? 0;
             // 褰撳墠鏁伴噰锛氭渶鏂颁竴鏉�
-            VOrdrerBycl.CurrentCjNum = numericalList.Last().CjNum ?? 0;
+            VOrdrerBycl.CurrentCjNum = sortedList.Last().CjNum ?? 0;
         }
         else
         {
@@ -271,10 +256,15 @@
             VOrdrerBycl.CurrentCjNum = 0;
         }
 
-        // 鏌ヨ鏈�鍚庝竴鏉℃姤宸ヨ褰�
+        // 璁$畻褰撳ぉ鍋滄満娆℃暟
+        VOrdrerBycl.TodayDowntimeCount = GetTodayDowntimeCount(numericalList);
+
+        Console.WriteLine($"orderNo: [{query.orderNo}]");
+
+        // 鏌ヨ鎶ュ伐璁板綍锛岃幏鍙栨渶鍚庝竴鏉℃姤宸ヨ褰�
         var lastReport = Db.Queryable<MesReporting>()
-            .Where(r => r.BillNo != null && r.BillNo.Contains(query.orderNo))
-            .OrderBy(r => r.Id, OrderByType.Desc)
+            .Where(r => r.BillNo.Trim().ToUpper() == query.orderNo.Trim().ToUpper())
+            .OrderBy(r => r.BgDate, OrderByType.Desc)
             .First();
 
         if (lastReport == null || !lastReport.BgDate.HasValue)
@@ -284,24 +274,49 @@
         }
         else
         {
-            // 鏈夋姤宸ヨ褰曪紝鍒濆閲囬泦鏁颁负涓婁竴娆℃姤宸ユ椂闂村悗鏈�杩戜竴鏉¢娇杞暟閲囪〃鐨勯噰闆嗘暟閲�
-            var afterReportNum = numericalList
+            // 鏈夋姤宸ヨ褰曪紝鍒濆閲囬泦鏁颁负鎶ュ伐鏃堕棿鐐瑰墠锛堝惈锛夋渶杩戜竴鏉¢娇杞暟閲囪〃鐨勯噰闆嗘暟閲�
+            var beforeOrEqualReportNum = numericalList
                 .Select(x => new { Item = x, ParsedTime = DateTime.TryParse(x.CjTiem, out var dt) ? dt : (DateTime?)null })
-                .Where(x => x.ParsedTime.HasValue && x.ParsedTime.Value > lastReport.BgDate.Value)
-                .OrderBy(x => x.ParsedTime)
+                .Where(x => x.ParsedTime.HasValue && x.ParsedTime.Value <= lastReport.BgDate.Value)
+                .OrderByDescending(x => x.ParsedTime) // 闄嶅簭锛屽彇绗竴鏉�
                 .Select(x => x.Item)
                 .FirstOrDefault();
 
-            VOrdrerBycl.InitCjNum = afterReportNum?.CjNum ?? VOrdrerBycl.StartCjNum;
+            VOrdrerBycl.InitCjNum = beforeOrEqualReportNum?.CjNum ?? VOrdrerBycl.StartCjNum;
         }
 
-        // 鎶ュ伐鏃堕噰闆嗘暟灏辨槸涓荤晫闈㈢殑褰撳墠閲囨暟
-        // VOrdrerBycl.CurrentCjNum 宸茶祴鍊硷紝鏃犻渶棰濆澶勭悊
-
         return VOrdrerBycl;
     }
 
     /// <summary>
+    /// 璁$畻鏃ュ仠鏈烘鏁�
+    /// </summary>
+    /// <param name="numericalList"></param>
+    /// <returns></returns>
+    public int GetTodayDowntimeCount(List<MesNumericalBycl> numericalList)
+    {
+        var today = DateTime.Now.Date;
+        // 1. 鍙繚鐣欏綋澶╂暟鎹紝骞惰浆鎹负 DateTime
+        var todayTimes = numericalList
+            .Where(x => DateTime.TryParse(x.CjTiem, out var dt) && dt.Date == today)
+            .Select(x => DateTime.Parse(x.CjTiem))
+            .OrderBy(x => x)
+            .ToList();
+
+        if (todayTimes.Count < 2)
+            return 0;
+
+        int downtimeCount = 0;
+        for (int i = 1; i < todayTimes.Count; i++)
+        {
+            var diff = (todayTimes[i] - todayTimes[i - 1]).TotalMinutes;
+            if (diff > 3)
+                downtimeCount++;
+        }
+        return downtimeCount;
+    }
+
+    /// <summary>
     ///     鏍规嵁宸ュ崟ID鑾峰彇鎶ュ伐淇℃伅
     /// </summary>
     /// <param name="query">鍖呭惈宸ュ崟ID鐨勬煡璇㈡潯浠�</param>

--
Gitblit v1.9.3