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

---
 Services/MesOrderStaManager.cs |   62 +++++++++++++++++++-----------
 1 files changed, 39 insertions(+), 23 deletions(-)

diff --git a/Services/MesOrderStaManager.cs b/Services/MesOrderStaManager.cs
index b00dd35..8f5f712 100644
--- a/Services/MesOrderStaManager.cs
+++ b/Services/MesOrderStaManager.cs
@@ -93,8 +93,8 @@
     /// <summary>
     ///     鏇存柊鏈哄櫒鏃堕棿骞跺鐞嗛妫�
     ///     鍙樻洿璇存槑锛�
-    ///     1) 鏈�鏂伴妫�缁撴灉涓衡�滀笉鍚堟牸鈥濇椂锛氬彧娓呯┖ MA_SHOUT_TIME锛堥�佹鍛煎彨鏃堕棿锛夛紝涓嶉噸寤洪妫�鍗�
-    ///     2) 鑻ヤ笉瀛樺湪棣栨鍗曟椂锛氬厑璁稿垱寤猴紙閲嶅缓锛夐妫�鍗�
+    ///     1) 鏈�鏂伴妫�缁撴灉涓衡�滀笉鍚堟牸鈥濇椂锛氭竻绌� MA_SHOUT_TIME锛堥�佹鍛煎彨鏃堕棿锛�
+    ///     2) 鑻ヤ笉瀛樺湪棣栨鍗曟椂鎴栬�呴妫�鍗曠粨鏋滀负鈥滀笉鍚堟牸鈥濇椂锛氬垱寤洪妫�鍗�
     ///     3) 棣栨鍚堟牸涓旈�佹鏃堕棿 >= 璋冩満寮�濮嬫椂闂存椂锛氬啓鍏ヨ皟鏈哄畬鎴愭椂闂翠笌寮�宸ユ椂闂�
     /// </summary>
     public bool ChangeMachineTime(MesOrderSta entity)
@@ -107,30 +107,40 @@
             .Where(s => s.Id == entity.OrderId).First();
         if (womdaa == null) throw new Exception("宸ュ崟涓嶅瓨鍦�");
 
-        MesQaItemsDetect02 latestFirst = null;
-        var clearMaShout = false;
+        // 璇诲彇褰撳墠鐘舵�佽
+        var currentSta = Db.Queryable<MesOrderSta>()
+            .Where(s => s.Id == entity.Id).First();
 
-        // 鍘熸潵闄愬埗 entity.Flag == 1锛岃繖閲屽彇娑堥檺鍒讹細浠讳綍淇濆瓨鍔ㄤ綔閮借瘎浼伴妫�缁撴灉
-        // 琛岀骇閿侀槻骞跺彂
+        // 琛岀骇閿侊細涓茶鍖栭妫�閲嶅缓
         Db.Ado.ExecuteCommand("SELECT ID FROM WOMDAA WHERE DAA001 = :BILL_NO FOR UPDATE",
             new SugarParameter("BILL_NO", womdaa.Daa001));
 
-        // 褰撳墠鏈�鏂伴妫�
-        latestFirst = Db.Queryable<MesQaItemsDetect02>()
+        // 鏈�鏂伴妫�
+        var 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)
             .First();
 
-        // 缁撴灉褰掍竴锛堥槻姝㈠熬閮ㄧ┖鏍兼垨澶у皬鍐欙級锛氬彲鑳芥潵婧愪簬鎺ュ彛/鐢ㄦ埛褰曞叆
         var latestResult = latestFirst?.FcheckResu?.Trim();
+        var needRebuild = latestFirst == null || string.Equals(latestResult, FirstCheckResultNG, StringComparison.OrdinalIgnoreCase);
+        var clearMaShout = false;
 
-        // 浠呭湪涓嶅瓨鍦ㄩ妫�鍗曟椂鍒涘缓
-        if (latestFirst == null)
+        if (needRebuild)
         {
+            // 鑻ュ凡鏈夐妫�涓旂粨鏋滀笉鍚堟牸 => 鍏堟竻绌洪�佹鏃堕棿
+            if (latestFirst != null && string.Equals(latestResult, FirstCheckResultNG, StringComparison.OrdinalIgnoreCase))
+            {
+                clearMaShout = true;
+                entity.MaShoutTime = null;
+                entity.remark = $"鏈�鏂伴妫�缁撴灉鈥渰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)
@@ -139,33 +149,38 @@
             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}鑷姩鍒涘缓鐨勯妫�鍗�(棣栨鍒涘缓)")
+                    .SetColumns(s => s.Remeke == $"宸ユ帶鏈轰簬{ts}鑷姩鍒涘缓鐨勯妫�鍗�({remarkTag})")
                     .Where(s => s.Id == latestFirst.Id)
                     .ExecuteCommand();
             }
         }
         else
         {
-            // 鏈�鏂扮粨鏋滀负鈥滀笉鍚堟牸鈥� => 娓呯┖閫佹鏃堕棿锛屼笉閲嶅缓
-            if (string.Equals(latestResult, FirstCheckResultNG, StringComparison.OrdinalIgnoreCase))
+            // 涓嶉渶瑕侀噸寤猴細濡傛灉鍓嶇涓诲姩娓呯┖(浼犵┖涓斿師鍊兼湁鍐呭)涔熷厑璁告竻绌�
+            var requestWantClear = string.IsNullOrEmpty(entity.MaShoutTime) && !string.IsNullOrEmpty(currentSta?.MaShoutTime);
+            if (requestWantClear)
             {
                 clearMaShout = true;
                 entity.MaShoutTime = null;
-                entity.remark = $"鏈�鏂伴妫�缁撴灉鈥渰FirstCheckResultNG}鈥濓紝宸叉竻绌洪�佹鏃堕棿锛屽緟鍐嶆閫佹";
+                entity.remark = "鍓嶇璇锋眰鎵嬪姩娓呯┖閫佹鏃堕棿";
             }
             else
             {
-                // 鍏跺畠缁撴灉鏇存柊澶囨敞
-                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();
+                // 姝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)
@@ -215,7 +230,7 @@
         };
         Db.Insertable<MesAnchors>(eAnchors).ExecuteCommand();
 
-        // 鑻ラ�佹鏃堕棿瀛樺湪涓旀渶鏂伴妫�鍚堟牸 => 鍐欒皟鏈哄畬鎴愪笌寮�宸ユ椂闂�
+        // 鍚堟牸 & 璋冩満閫昏緫
         if (!clearMaShout && !string.IsNullOrEmpty(entity.MaShoutTime))
         {
             if (DateTime.TryParse(entity.MaShoutTime, out var sjTime) &&
@@ -242,6 +257,7 @@
             }
         }
 
+        // 鏈�缁堟洿鏂帮紙浼樺厛娓呯┖锛�
         var upd = Db.Updateable<MesOrderSta>()
             .SetColumnsIF(clearMaShout, s => s.MaShoutTime == null)
             .SetColumnsIF(!clearMaShout && entity.MaShoutTime != null, s => s.MaShoutTime == entity.MaShoutTime)

--
Gitblit v1.9.3