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

---
 Services/MesOrderStaManager.cs |  252 ++++++++++++++++++++------------------------------
 1 files changed, 101 insertions(+), 151 deletions(-)

diff --git a/Services/MesOrderStaManager.cs b/Services/MesOrderStaManager.cs
index ea971ba..37601dd 100644
--- a/Services/MesOrderStaManager.cs
+++ b/Services/MesOrderStaManager.cs
@@ -92,158 +92,122 @@
 
     /// <summary>
     ///     鏇存柊鏈哄櫒鏃堕棿骞跺鐞嗛妫�
+    ///     鍙樻洿璇存槑锛�
+    ///     1) 鏈�鏂伴妫�缁撴灉涓衡�滀笉鍚堟牸鈥濇椂锛氬彧娓呯┖ MA_SHOUT_TIME锛堥�佹鍛煎彨鏃堕棿锛夛紝涓嶉噸寤洪妫�鍗�
+    ///     2) 鑻ヤ笉瀛樺湪棣栨鍗曟椂锛氬厑璁稿垱寤猴紙閲嶅缓锛夐妫�鍗�
+    ///     3) 棣栨鍚堟牸涓旈�佹鏃堕棿 >= 璋冩満寮�濮嬫椂闂存椂锛氬啓鍏ヨ皟鏈哄畬鎴愭椂闂翠笌寮�宸ユ椂闂�
     /// </summary>
-    /// <param name="entity">宸ュ崟鐘舵�佸疄浣�,鍖呭惈鏈哄櫒鏃堕棿淇℃伅</param>
-    /// <returns>鏇存柊鏄惁鎴愬姛</returns>
     public bool ChangeMachineTime(MesOrderSta entity)
     {
+        const string FirstCheckType = "棣栨";
+        const string FirstCheckResultOK = "鍚堟牸";
+        const string FirstCheckResultNG = "涓嶅悎鏍�";
+
         var womdaa = Db.Queryable<Womdaa>()
             .Where(s => s.Id == entity.OrderId).First();
         if (womdaa == null) throw new Exception("宸ュ崟涓嶅瓨鍦�");
 
+        MesQaItemsDetect02 latestFirst = null;
+        var clearMaShout = false; // 鏍囪锛氭槸鍚﹂渶瑕佹竻绌洪�佹鏃堕棿
+
         if (entity.Flag == 1)
         {
-            // 骞傜瓑锛氬厛鏌ユ槸鍚﹀凡鏈夐妫�
-            var existsFirst = Db.Queryable<MesQaItemsDetect02>()
-                .Where(s => s.Aufnr == womdaa.Daa001 && s.Ftype == "棣栨" && (s.Fcancel == null || s.Fcancel != "Y"))
-                .Any();
+            // 琛岀骇閿侀槻骞跺彂
+            Db.Ado.ExecuteCommand("SELECT ID FROM WOMDAA WHERE DAA001 = :BILL_NO FOR UPDATE",
+                new SugarParameter("BILL_NO", womdaa.Daa001));
 
-            if (!existsFirst)
-            {
-                // 琛岀骇閿侀槻骞跺彂锛氶攣宸ュ崟琛�
-                Db.Ado.ExecuteCommand("SELECT ID FROM WOMDAA WHERE DAA001 = :BILL_NO FOR UPDATE",
-                    new SugarParameter("BILL_NO", womdaa.Daa001));
-
-                // 鍐嶆纭
-                existsFirst = Db.Queryable<MesQaItemsDetect02>()
-                    .Where(s => s.Aufnr == womdaa.Daa001 && s.Ftype == "棣栨" && (s.Fcancel == null || s.Fcancel != "Y"))
-                    .Any();
-
-                if (!existsFirst)
-                {
-                    // 璋冪敤瀛樺偍杩囩▼锛堝崟璺緞锛�
-                    Db.Ado.ExecuteCommand(
-                        "BEGIN AUTOMATIC_IPQC_FIRST_CHECK(:BILL_NO); END;",
-                        new SugarParameter("BILL_NO", womdaa.Daa001, System.Data.DbType.String));
-                }
-            }
-
-            // 鏈�鏂伴妫�鍗�
-            var latestFirst = Db.Queryable<MesQaItemsDetect02>()
-                .Where(s => s.Aufnr == womdaa.Daa001 && s.Ftype == "棣栨" && (s.Fcancel == null || s.Fcancel != "Y"))
+            // 褰撳墠鏈�鏂伴妫�
+            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();
 
-            if (latestFirst != null)
+            // 浠呭湪涓嶅瓨鍦ㄩ妫�鍗曟椂鍒涘缓锛堝師鈥� 涓嶅悎閫� 鈥濆凡缁熶竴鏀逛负鈥� 涓嶅悎鏍� 鈥濓紝涓斾笉鍚堟牸涓嶅啀瑙﹀彂閲嶅缓锛�
+            var needCreate = latestFirst == null;
+
+            if (needCreate)
             {
-                // 濡傛灉鏈�鏂伴妫�涓嶅悎鏍硷細娓呯┖璋冩満閫佹鏃堕棿骞堕噸鏂扮敓鎴愰妫�鍗�
-                if (latestFirst.FcheckResu == "涓嶅悎鏍�")
+                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)
+                    .First();
+
+                if (latestFirst != null)
                 {
-                    // 娓呯┖鏁版嵁搴撶殑閫佹鏃堕棿
-                    InspectionIsUnqualified(new OrderMachineDto
-                    {
-                        OrderId = entity.OrderId
-                    });
-                    // 閬垮厤鍚庣画鏇存柊鏃跺啀鍐欏叆鏃ч�佹鏃堕棿
-                    entity.MaShoutTime = null;
-
-                    // 琛岀骇閿侊紝纭繚閲嶅缓杩囩▼涓茶
-                    Db.Ado.ExecuteCommand("SELECT ID FROM WOMDAA WHERE DAA001 = :BILL_NO FOR UPDATE",
-                        new SugarParameter("BILL_NO", womdaa.Daa001));
-                    // 鐩存帴璋冪敤棣栨鐢熸垚瀛樺偍杩囩▼
-                    Db.Ado.ExecuteCommand(
-                        "BEGIN AUTOMATIC_IPQC_FIRST_CHECK(:BILL_NO); END;",
-                        new SugarParameter("BILL_NO", womdaa.Daa001, System.Data.DbType.String));
-
-                    // 鑾峰彇閲嶅缓鍚庣殑鏈�鏂伴妫�鍗曞苟鍐欏娉�
-                    var rebuiltFirst = Db.Queryable<MesQaItemsDetect02>()
-                        .Where(s => s.Aufnr == womdaa.Daa001 && s.Ftype == "棣栨" && (s.Fcancel == null || s.Fcancel != "Y"))
-                        .OrderBy(s => s.CreateDate, OrderByType.Desc)
-                        .First();
-
-                    if (rebuiltFirst != null)
-                    {
-                        var ts2 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
-                        var remark2 = $"宸ユ帶鏈轰簬{ts2}閲嶅缓鐨勪笉鍚堟牸鍚庨妫�鍗�";
-                        Db.Updateable<MesQaItemsDetect02>()
-                            .SetColumns(s => s.Remeke == remark2)
-                            .Where(s => s.Id == rebuiltFirst.Id)
-                            .ExecuteCommand();
-                    }
-                }
-                else
-                {
-                    // 鍚堟牸鎴栧叾瀹冪粨鏋滄椂浠呮洿鏂板娉�
                     var ts = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
-                    var remark = $"宸ユ帶鏈轰簬{ts}鑷姩鍒涘缓鐨勯妫�鍗�";
                     Db.Updateable<MesQaItemsDetect02>()
-                        .SetColumns(s => s.Remeke == remark)
+                        .SetColumns(s => s.Remeke == $"宸ユ帶鏈轰簬{ts}鑷姩鍒涘缓鐨勯妫�鍗�(棣栨鍒涘缓)")
+                        .Where(s => s.Id == latestFirst.Id)
+                        .ExecuteCommand();
+                }
+            }
+            else
+            {
+                // 鏈�鏂扮粨鏋滀负鈥滀笉鍚堟牸鈥� => 浠呮竻绌洪�佹鏃堕棿锛屼笉閲嶅缓
+                if (latestFirst != null && latestFirst.FcheckResu == FirstCheckResultNG)
+                {
+                    clearMaShout = true;
+                    entity.MaShoutTime = null;
+                    entity.remark = $"鏈�鏂伴妫�缁撴灉鈥渰FirstCheckResultNG}鈥濓紝宸叉竻绌洪�佹鏃堕棿锛屽緟鍐嶆閫佹";
+                }
+                else 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)
             .First();
 
-
         var editDate = DateTime.Now.ToString("yyyy-MM-dd");
-
-        // 鍙戦�丠TTP璇锋眰鍒版暟鎹埛鏂版帴鍙�
         MesNumericalBycl mesNumerical = null;
         try
         {
-            using (var httpClient = new HttpClient())
+            using var httpClient = new HttpClient { Timeout = TimeSpan.FromSeconds(30) };
+            var content = new StringContent(
+                JsonConvert.SerializeObject(new { machineNo = entity.MachineNo }),
+                Encoding.UTF8, "application/json");
+
+            var response = httpClient.PostAsync("http://192.168.0.94:9095/Numerical/RefreshDevBycl", content)
+                .GetAwaiter().GetResult();
+
+            if (response.IsSuccessStatusCode)
             {
-                httpClient.Timeout = TimeSpan.FromSeconds(30);
-
-                var content = new StringContent(
-                    JsonConvert.SerializeObject(new
-                        { machineNo = entity.MachineNo }),
-                    Encoding.UTF8,
-                    "application/json");
-
-                var response = httpClient
-                    .PostAsync("http://192.168.0.94:9095/Numerical/RefreshDevBycl",
-                        content).GetAwaiter().GetResult();
-
-                if (response.IsSuccessStatusCode)
+                var responseString = response.Content.ReadAsStringAsync().GetAwaiter().GetResult();
+                var responseObj = JsonConvert.DeserializeObject<dynamic>(responseString);
+                if (responseObj != null && responseObj.code == 200)
                 {
-                    var responseString = response.Content.ReadAsStringAsync()
-                        .GetAwaiter().GetResult();
-                    var responseObj =
-                        JsonConvert.DeserializeObject<dynamic>(responseString);
-
-                    if (responseObj != null && responseObj.code == 200)
-                    {
-                        // 璇锋眰鎴愬姛锛岃幏鍙朚esNumerical鏁版嵁
-                        mesNumerical = Db.Queryable<MesNumericalBycl>()
-                            .Where(s => s.EditDate == editDate
-                                        && s.MachineNo == entity.MachineNo)
-                            .OrderByDescending(s => s.Id)
-                            .First();
-                    }
+                    mesNumerical = Db.Queryable<MesNumericalBycl>()
+                        .Where(s => s.EditDate == editDate && s.MachineNo == entity.MachineNo)
+                        .OrderByDescending(s => s.Id)
+                        .First();
                 }
             }
         }
         catch (Exception ex)
         {
-            // 璁板綍寮傚父浣嗕笉闃绘娴佺▼
             Console.WriteLine($"鍙戦�佹暟鎹埛鏂拌姹傛椂鍑洪敊: {ex.Message}");
         }
 
-        // 濡傛灉璇锋眰澶辫触鎴栬幏鍙栨暟鎹け璐ワ紝mesNumerical灏嗕繚鎸佷负null
-
         Db.Deleteable<MesAnchors>()
-            .Where(a => a.EditDate == editDate
-                        && a.OrderId == womdaa.Id)
+            .Where(a => a.EditDate == editDate && a.OrderId == womdaa.Id)
             .ExecuteCommand();
 
-        MesAnchors eAnchors = new MesAnchors
+        var eAnchors = new MesAnchors
         {
             OrderId = womdaa.Id,
             OrderNo = womdaa.Daa001,
@@ -251,60 +215,46 @@
             Qty = mesReporting == null ? 0 : (long?)(mesReporting.DyQty ?? 0),
             InitialValue = mesNumerical == null ? 0 : mesNumerical.CjNum
         };
-        Db.Insertable<MesAnchors>(eAnchors)
-            .ExecuteCommand();
+        Db.Insertable<MesAnchors>(eAnchors).ExecuteCommand();
 
-        // 鑻ラ�佹鏃堕棿瀛樺湪涓旈妫�鍚堟牸鍒欏啓鍏ヨ皟鏈哄畬鎴愭椂闂�
-        if (!string.IsNullOrEmpty(entity.MaShoutTime))
+        // 鑻ラ�佹鏃堕棿瀛樺湪涓旀渶鏂伴妫�鍚堟牸 => 鍐欒皟鏈哄畬鎴愪笌寮�宸ユ椂闂�
+        if (!clearMaShout && !string.IsNullOrEmpty(entity.MaShoutTime))
         {
-            if (DateTime.TryParse(entity.MaShoutTime, out var sjTime) && DateTime.TryParse(entity.MaStartTime, out var startTime))
+            if (DateTime.TryParse(entity.MaShoutTime, out var sjTime) &&
+                DateTime.TryParse(entity.MaStartTime, out var startTime) &&
+                sjTime >= startTime)
             {
-                if (sjTime >= startTime)
-                {
-                    // 鏌ユ壘璇ュ伐鍗曞彿涓嬫渶鏂扮殑棣栨鍗�
-                    var sjRecord = Db.Queryable<MesQaItemsDetect02>()
-                        .Where(x => x.Aufnr == womdaa.Daa001 && x.Ftype == "棣栨")
-                        .OrderBy(x => x.CreateDate, OrderByType.Desc)
-                        .First();
+                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 && sjRecord.FcheckResu == "鍚堟牸")
+                if (sjRecord != null && sjRecord.FcheckResu == FirstCheckResultOK)
+                {
+                    QualifiedInspection(new OrderMachineDto
                     {
-                        // 浣跨敤QualifiedInspection鏂规硶鏇存柊宸ュ崟鐘舵��
-                        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");
                 }
             }
         }
 
         // 鏇存柊宸ュ崟鐘舵�佽〃
-        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)
-            // 濡傛灉鏍囪涓�1鍒欐洿鏂板娉ㄤ俊鎭�
-            .SetColumnsIF(entity.Flag == 1,
-                s => s.remark == "浜�" + entity.MaShoutTime + "鏃堕棿鏈変竴娆¢�佹")
-            // 鏍规嵁ID鍖归厤璁板綍
-            .Where(s => s.Id == entity.Id)
-            // 鎵ц鏇存柊骞跺垽鏂奖鍝嶈鏁版槸鍚﹀ぇ浜�0
-            .ExecuteCommand() > 0;
+        var upd = Db.Updateable<MesOrderSta>()
+            .SetColumnsIF(clearMaShout, s => s.MaShoutTime == null)
+            .SetColumnsIF(!clearMaShout && 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;
     }
 
     /// <summary>

--
Gitblit v1.9.3