From c60af0293161db2349a67f6279fb71ec0e165aa6 Mon Sep 17 00:00:00 2001
From: 快乐的昕的电脑 <快乐的昕的电脑@DESKTOP-C2BQPQU>
Date: 星期三, 22 十月 2025 15:48:57 +0800
Subject: [PATCH] 逻辑优化

---
 Services/MesOrderStaManager.cs |  140 +++++++++++++++++++++-------------------------
 1 files changed, 63 insertions(+), 77 deletions(-)

diff --git a/Services/MesOrderStaManager.cs b/Services/MesOrderStaManager.cs
index 8f5f712..2589b64 100644
--- a/Services/MesOrderStaManager.cs
+++ b/Services/MesOrderStaManager.cs
@@ -92,10 +92,11 @@
 
     /// <summary>
     ///     鏇存柊鏈哄櫒鏃堕棿骞跺鐞嗛妫�
-    ///     鍙樻洿璇存槑锛�
-    ///     1) 鏈�鏂伴妫�缁撴灉涓衡�滀笉鍚堟牸鈥濇椂锛氭竻绌� MA_SHOUT_TIME锛堥�佹鍛煎彨鏃堕棿锛�
-    ///     2) 鑻ヤ笉瀛樺湪棣栨鍗曟椂鎴栬�呴妫�鍗曠粨鏋滀负鈥滀笉鍚堟牸鈥濇椂锛氬垱寤洪妫�鍗�
-    ///     3) 棣栨鍚堟牸涓旈�佹鏃堕棿 >= 璋冩満寮�濮嬫椂闂存椂锛氬啓鍏ヨ皟鏈哄畬鎴愭椂闂翠笌寮�宸ユ椂闂�
+    ///     鍙樻洿璇存槑锛堟柊閫昏緫锛夛細
+    ///     1) 棣栨缁撴灉鈥滀笉鍚堟牸鈥濇椂涓嶇珛鍗抽噸寤猴紝涓嶆竻绌洪�佹鏃堕棿锛屽彧鎻愮ず闇�瑕佸啀娆¢�佹
+    ///     2) 褰撶敤鎴峰啀娆$偣鍑烩�滈�佹鍛煎彨鈥濅骇鐢熸柊鐨勯�佹鏃堕棿锛堜笌鏁版嵁搴撳師鍊间笉鍚岋級涓斾笂涓�寮犻妫�缁撴灉鈥滀笉鍚堟牸鈥濓紝鎵嶉噸寤洪妫�鍗�
+    ///     3) 涓嶅瓨鍦ㄩ妫�鍗曟椂浠嶇洿鎺ュ垱寤�
+    ///     4) 棣栨鍚堟牸涓旈�佹鏃堕棿 >= 璋冩満寮�濮嬫椂闂存椂锛氬啓鍏ヨ皟鏈哄畬鎴愭椂闂翠笌寮�宸ユ椂闂�
     /// </summary>
     public bool ChangeMachineTime(MesOrderSta entity)
     {
@@ -103,15 +104,13 @@
         const string FirstCheckResultOK = "鍚堟牸";
         const string FirstCheckResultNG = "涓嶅悎鏍�";
 
-        var womdaa = Db.Queryable<Womdaa>()
-            .Where(s => s.Id == entity.OrderId).First();
+        var womdaa = Db.Queryable<Womdaa>().Where(s => s.Id == entity.OrderId).First();
         if (womdaa == null) throw new Exception("宸ュ崟涓嶅瓨鍦�");
 
-        // 璇诲彇褰撳墠鐘舵�佽
-        var currentSta = Db.Queryable<MesOrderSta>()
-            .Where(s => s.Id == entity.Id).First();
+        // 璇诲彇鐜版湁鐘舵�侊紙鐢ㄤ簬姣旇緝閫佹鏃堕棿鏄惁鍙樺寲锛�
+        var dbSta = Db.Queryable<MesOrderSta>().Where(s => s.Id == entity.Id).First();
 
-        // 琛岀骇閿侊細涓茶鍖栭妫�閲嶅缓
+        // 琛岀骇閿侊細閬垮厤骞跺彂閲嶅缓
         Db.Ado.ExecuteCommand("SELECT ID FROM WOMDAA WHERE DAA001 = :BILL_NO FOR UPDATE",
             new SugarParameter("BILL_NO", womdaa.Daa001));
 
@@ -122,25 +121,27 @@
             .First();
 
         var latestResult = latestFirst?.FcheckResu?.Trim();
-        var needRebuild = latestFirst == null || string.Equals(latestResult, FirstCheckResultNG, StringComparison.OrdinalIgnoreCase);
-        var clearMaShout = false;
+
+        // 閫佹鏃堕棿鏄惁鍙戠敓鍙樺寲锛堝墠绔噸鏂扮偣鍑婚�佹锛�
+        var isShoutTimeChanged = !string.IsNullOrEmpty(entity.MaShoutTime)
+                                 && entity.MaShoutTime != dbSta?.MaShoutTime;
+
+        // 鍒ゅ畾鏄惁闇�瑕侀噸寤猴細
+        // 1) 棣栨锛坙atestFirst == null锛�
+        // 2) 涓婁竴寮犳槸鈥滀笉鍚堟牸鈥� 涓� 鐢ㄦ埛鏈閫佹鏃堕棿宸插彂鐢熷彉鍖栵紙琛ㄧず浜屾閫佹锛�
+        var needRebuild = latestFirst == null ||
+                          (string.Equals(latestResult, FirstCheckResultNG, StringComparison.OrdinalIgnoreCase) && isShoutTimeChanged);
 
         if (needRebuild)
         {
-            // 鑻ュ凡鏈夐妫�涓旂粨鏋滀笉鍚堟牸 => 鍏堟竻绌洪�佹鏃堕棿
-            if (latestFirst != null && string.Equals(latestResult, FirstCheckResultNG, StringComparison.OrdinalIgnoreCase))
-            {
-                clearMaShout = true;
-                entity.MaShoutTime = null;
-                entity.remark = $"鏈�鏂伴妫�缁撴灉鈥渰FirstCheckResultNG}鈥濓紝宸叉竻绌洪�佹鏃堕棿骞堕噸寤洪妫�鍗�";
-            }
+            var previousState = latestResult == null ? "棣栨鍒涘缓" :
+                (latestResult == FirstCheckResultNG ? "涓嶅悎鏍煎悗閲嶅缓" : "閲嶅缓");
 
-            // 璋冪敤瀛樺偍杩囩▼閲嶅缓 / 棣栨鍒涘缓
             Db.Ado.ExecuteCommand(
                 "BEGIN AUTOMATIC_IPQC_FIRST_CHECK(:BILL_NO); END;",
                 new SugarParameter("BILL_NO", womdaa.Daa001, System.Data.DbType.String));
 
-            // 閲嶅彇鏈�鏂伴妫�
+            // 閲嶅彇
             latestFirst = Db.Queryable<MesQaItemsDetect02>()
                 .Where(s => s.Aufnr == womdaa.Daa001 && s.Ftype == FirstCheckType && (s.Fcancel == null || s.Fcancel != "Y"))
                 .OrderBy(s => s.CreateDate, OrderByType.Desc)
@@ -149,38 +150,34 @@
             if (latestFirst != null)
             {
                 var ts = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
-                var remarkTag = latestResult == null ? "棣栨鍒涘缓" : (latestResult == FirstCheckResultNG ? "涓嶅悎鏍奸噸寤�" : "閲嶅缓");
                 Db.Updateable<MesQaItemsDetect02>()
-                    .SetColumns(s => s.Remeke == $"宸ユ帶鏈轰簬{ts}鑷姩鍒涘缓鐨勯妫�鍗�({remarkTag})")
+                    .SetColumns(s => s.Remeke == $"宸ユ帶鏈轰簬{ts}鑷姩鍒涘缓鐨勯妫�鍗�({previousState})")
+                    .Where(s => s.Id == latestFirst.Id)
+                    .ExecuteCommand();
+            }
+
+            // 閲嶅缓鍚庝笉娓呯┖鏈閫佹鏃堕棿锛堜繚鐣欑敤鎴锋柊杈撳叆锛�
+            entity.remark = previousState.Contains("涓嶅悎鏍�") ? "涓嶅悎鏍煎凡閲嶅缓锛岀瓑寰呮楠�" : entity.remark;
+        }
+        else
+        {
+            // 涓嶉渶瑕侀噸寤轰絾涓婁竴寮犱笉鍚堟牸涓旈�佹鏃堕棿鏈彉鍖� => 鎻愮ず闇�瑕侀噸鏂伴�佹
+            if (latestFirst != null && string.Equals(latestResult, FirstCheckResultNG, StringComparison.OrdinalIgnoreCase) && !isShoutTimeChanged)
+            {
+                entity.remark = "涓婁竴棣栨涓嶅悎鏍硷紝璇烽噸鏂扮偣鍑婚�佹鍛煎彨浠ョ敓鎴愭柊鐨勯妫�鍗�";
+            }
+            else if (latestFirst != null)
+            {
+                // 鍏跺畠鎯呭喌鏇存柊澶囨敞涓哄綋鍓嶇粨鏋�
+                var ts = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+                Db.Updateable<MesQaItemsDetect02>()
+                    .SetColumns(s => s.Remeke == $"宸ユ帶鏈轰簬{ts}棣栨缁撴灉锛歿latestResult}")
                     .Where(s => s.Id == latestFirst.Id)
                     .ExecuteCommand();
             }
         }
-        else
-        {
-            // 涓嶉渶瑕侀噸寤猴細濡傛灉鍓嶇涓诲姩娓呯┖(浼犵┖涓斿師鍊兼湁鍐呭)涔熷厑璁告竻绌�
-            var requestWantClear = string.IsNullOrEmpty(entity.MaShoutTime) && !string.IsNullOrEmpty(currentSta?.MaShoutTime);
-            if (requestWantClear)
-            {
-                clearMaShout = true;
-                entity.MaShoutTime = null;
-                entity.remark = "鍓嶇璇锋眰鎵嬪姩娓呯┖閫佹鏃堕棿";
-            }
-            else
-            {
-                // 姝e父澶囨敞锛堜繚鎸佹渶鏂扮粨鏋滆鏄庯級
-                if (latestFirst != null)
-                {
-                    var ts = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
-                    Db.Updateable<MesQaItemsDetect02>()
-                        .SetColumns(s => s.Remeke == $"宸ユ帶鏈轰簬{ts}棣栨缁撴灉锛歿latestFirst.FcheckResu}")
-                        .Where(s => s.Id == latestFirst.Id)
-                        .ExecuteCommand();
-                }
-            }
-        }
 
-        // 鍚庣画鎶ュ伐閿氱偣閫昏緫淇濇寔
+        // 鎶ュ伐閿氱偣閫昏緫淇濇寔
         var mesReporting = Db.Queryable<MesReporting>()
             .Where(s => s.BillNo == womdaa.Daa001)
             .OrderByDescending(s => s.Id)
@@ -230,44 +227,33 @@
         };
         Db.Insertable<MesAnchors>(eAnchors).ExecuteCommand();
 
-        // 鍚堟牸 & 璋冩満閫昏緫
-        if (!clearMaShout && !string.IsNullOrEmpty(entity.MaShoutTime))
+        // 鍚堟牸涓旈�佹鏃堕棿鏈夋晥 => 鍐欒皟鏈哄畬鎴愭椂闂翠笌寮�宸ユ椂闂�
+        if (!string.IsNullOrEmpty(entity.MaShoutTime)
+            && DateTime.TryParse(entity.MaShoutTime, out var sjTime)
+            && DateTime.TryParse(entity.MaStartTime, out var startTime)
+            && sjTime >= startTime
+            && latestFirst != null
+            && string.Equals(latestFirst.FcheckResu?.Trim(), FirstCheckResultOK, StringComparison.OrdinalIgnoreCase))
         {
-            if (DateTime.TryParse(entity.MaShoutTime, out var sjTime) &&
-                DateTime.TryParse(entity.MaStartTime, out var startTime) &&
-                sjTime >= startTime)
+            QualifiedInspection(new OrderMachineDto
             {
-                var sjRecord = latestFirst ??
-                               Db.Queryable<MesQaItemsDetect02>()
-                                   .Where(x => x.Aufnr == womdaa.Daa001 && x.Ftype == FirstCheckType && (x.Fcancel == null || x.Fcancel != "Y"))
-                                   .OrderBy(x => x.CreateDate, OrderByType.Desc)
-                                   .First();
-
-                if (sjRecord != null && string.Equals(sjRecord.FcheckResu?.Trim(), FirstCheckResultOK, StringComparison.OrdinalIgnoreCase))
-                {
-                    QualifiedInspection(new OrderMachineDto
-                    {
-                        OrderId = entity.OrderId,
-                        orderNo = entity.OrderNo,
-                        machineNo = entity.MachineNo
-                    });
-                    entity.StartTime = entity.MaShoutTime;
-                    entity.MaEndTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
-                }
-            }
+                OrderId = entity.OrderId,
+                orderNo = entity.OrderNo,
+                machineNo = entity.MachineNo
+            });
+            entity.StartTime = entity.MaShoutTime;
+            entity.MaEndTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
         }
 
-        // 鏈�缁堟洿鏂帮紙浼樺厛娓呯┖锛�
-        var upd = Db.Updateable<MesOrderSta>()
-            .SetColumnsIF(clearMaShout, s => s.MaShoutTime == null)
-            .SetColumnsIF(!clearMaShout && entity.MaShoutTime != null, s => s.MaShoutTime == entity.MaShoutTime)
+        // 鏇存柊
+        return Db.Updateable<MesOrderSta>()
+            .SetColumnsIF(entity.MaShoutTime != null, s => s.MaShoutTime == entity.MaShoutTime)
             .SetColumnsIF(entity.MaStartTime != null, s => s.MaStartTime == entity.MaStartTime)
             .SetColumnsIF(entity.MaEndTime != null, s => s.MaEndTime == entity.MaEndTime)
             .SetColumnsIF(entity.StartTime != null, s => s.StartTime == entity.StartTime)
             .SetColumnsIF(entity.Flag == 1 && entity.remark != null, s => s.remark == entity.remark)
-            .Where(s => s.Id == entity.Id);
-
-        return upd.ExecuteCommand() > 0;
+            .Where(s => s.Id == entity.Id)
+            .ExecuteCommand() > 0;
     }
 
     /// <summary>

--
Gitblit v1.9.3