From 30ecd82c14c5b62bf5444f29edcbb7a044653b93 Mon Sep 17 00:00:00 2001
From: tjx <t2856754968@163.com>
Date: 星期三, 05 十一月 2025 20:06:52 +0800
Subject: [PATCH] 1111

---
 Services/MesOrderStaManager.cs |  264 ++++++++++++++++++++++++----------------------------
 1 files changed, 120 insertions(+), 144 deletions(-)

diff --git a/Services/MesOrderStaManager.cs b/Services/MesOrderStaManager.cs
index dd22c43..8a4e5bc 100644
--- a/Services/MesOrderStaManager.cs
+++ b/Services/MesOrderStaManager.cs
@@ -91,168 +91,144 @@
     }
 
     /// <summary>
-    ///     鏇存柊鏈哄櫒鏃堕棿骞跺鐞嗛妫�
+    /// 璋冩満閫佹閫昏緫閲嶅啓鐗�
+    /// 娴佺▼锛�
+    /// 1. 璋冩満寮�濮嬶細鍙啓鍏ヨ皟鏈哄紑濮嬫椂闂�(MA_START_TIME)
+    /// 2. 閫佹鍛煎彨锛氬啓鍏ヨ皟鏈哄紑濮嬫椂闂�(鑻ユ湭鍐�)涓庨�佹鏃堕棿(MA_SHOUT_TIME)锛屽苟鍒涘缓棣栨鍗�
+    /// 3. 璋冩満瀹屾垚锛氫繚鎸佸師閫昏緫锛岄妫�鍚堟牸鍚庡啓鍏ュ紑宸�(START_TIME)涓庤皟鏈哄畬鎴�(MA_END_TIME)
+    /// 4. 鑻ユ渶鏂伴妫�缁撴灉涓衡�滀笉鍚堟牸鈥濓紝娓呯┖閫佹鏃堕棿(MA_SHOUT_TIME)锛屾彁绀洪噸鏂伴�佹锛屼笉绔嬪嵆閲嶅缓
+    ///    鐢ㄦ埛鍐嶆鐐瑰嚮閫佹鍛煎彨鎵嶅垱寤烘柊鐨勯妫�鍗�
     /// </summary>
-    /// <param name="entity">宸ュ崟鐘舵�佸疄浣�,鍖呭惈鏈哄櫒鏃堕棿淇℃伅</param>
-    /// <returns>鏇存柊鏄惁鎴愬姛</returns>
     public bool ChangeMachineTime(MesOrderSta entity)
     {
-        // 鏌ヨ宸ュ崟涓昏〃淇℃伅
-        var womdaa = Db.Queryable<Womdaa>()
-            .Where(s => s.Id == entity.OrderId).First();
+        const string FirstCheckType = "棣栨";
+        const string FirstCheckResultOK = "鍚堟牸";
+        const string FirstCheckResultNG = "涓嶅悎鏍�";
 
-        // 濡傛灉鏍囪涓�1,闇�瑕佸鐞嗛妫�鐩稿叧閫昏緫
-        if (entity.Flag == 1)
-        {
-            //璋冪敤瀛樺偍杩囩▼鎵ц鑷姩棣栨
-             Db.Ado.ExecuteCommand(
-                 "BEGIN AUTOMATIC_IPQC_FIRST_CHECK(:BILL_NO); END;",
-                 new SugarParameter("BILL_NO", womdaa.Daa001, System.Data.DbType.String));
-            var automaticIpqcFirstCheck =
-                mesQaItemsDetect02Manager
-                    .AutomaticIpqcFirstCheck(womdaa.Daa001);
-            if (!automaticIpqcFirstCheck)
-            {
-                Console.WriteLine($"鑷姩棣栨澶辫触锛屽伐鍗曞彿锛歿womdaa.Daa001}");
-                throw new Exception("棣栨鐢熸垚澶辫触");
-            }
+        if (entity == null || entity.Id <= 0) throw new ArgumentException("鍙傛暟閿欒");
+        var womdaa = Db.Queryable<Womdaa>().Where(s => s.Id == entity.OrderId).First();
+        if (womdaa == null) throw new Exception("宸ュ崟涓嶅瓨鍦�");
 
-            // 鑾峰彇褰撳墠鏃堕棿
-            var s1 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
-            // 鐢熸垚棣栨澶囨敞淇℃伅
-            var remeke = "宸ユ帶鏈轰簬" + s1 + "鑷姩鍒涘缓鐨勯妫�鍗�";
+        // 褰撳墠鏁版嵁搴撶姸鎬佸揩鐓�
+        var dbSta = Db.Queryable<MesOrderSta>().Where(s => s.Id == entity.Id).First();
+        if (dbSta == null) throw new Exception("宸ュ崟鐘舵�佷笉瀛樺湪");
 
-            // 鏇存柊棣栨鍗曞娉ㄤ俊鎭�
-            Db.Updateable<MesQaItemsDetect02>()
-                .SetColumns(s => s.Remeke == remeke)
-                .Where(s => s.Ftype == "棣栨" && s.Aufnr == womdaa.Daa001)
-                .ExecuteCommand();
-        }
+        // 琛岀骇閿侊紝淇濊瘉鍒涘缓棣栨鍗曠殑骞跺彂瀹夊叏
+        Db.Ado.ExecuteCommand("SELECT ID FROM WOMDAA WHERE DAA001 = :BILL_NO FOR UPDATE",
+            new SugarParameter("BILL_NO", womdaa.Daa001));
 
-        var mesReporting = Db.Queryable<MesReporting>()
-            .Where(s => s.BillNo == womdaa.Daa001)
-            .OrderByDescending(s => s.Id)
+        // 鏈�鏂伴妫�鍗曪紙鏈綔搴燂級
+        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 hasStartTimeInput = !string.IsNullOrWhiteSpace(entity.MaStartTime);
+        var hasShoutTimeInput = !string.IsNullOrWhiteSpace(entity.MaShoutTime);
+        // 浠呭紑濮嬶細鏈夊紑濮嬫椂闂达紝閫佹鏃堕棿涓虹┖
+        var isStartOnly = hasStartTimeInput && !hasShoutTimeInput && dbSta.MaStartTime != entity.MaStartTime;
+        // 閫佹鍛煎彨锛氭湁閫佹鏃堕棿锛堝彲鑳藉悓鏃剁涓�娆″啓鍏ュ紑濮嬫椂闂达級
+        var isShoutCall = hasShoutTimeInput && dbSta.MaShoutTime != entity.MaShoutTime;
+        // 瀹屾垚閫昏緫淇濇寔锛氬悗闈㈤�氳繃棣栨鍚堟牸鏉′欢鍒ゆ柇
 
-        var editDate = DateTime.Now.ToString("yyyy-MM-dd");
-
-        // 鍙戦�丠TTP璇锋眰鍒版暟鎹埛鏂版帴鍙�
-        MesNumericalBycl mesNumerical = null;
-        try
+        // 4) 鑻ユ渶鏂板垽瀹氱粨鏋溾�滀笉鍚堟牸鈥濓紝娓呯┖閫佹鏃堕棿锛屾彁绀洪渶閲嶆柊鍛煎彨锛屼笉鍒涘缓鏂板崟
+        if (string.Equals(latestResult, FirstCheckResultNG, StringComparison.OrdinalIgnoreCase))
         {
-            using (var httpClient = new HttpClient())
+            // 娓呯┖閫佹鏃堕棿锛堟暟鎹簱涓庤繑鍥炲疄浣擄級
+            entity.MaShoutTime = null;
+            entity.remark = "棣栨涓嶅悎鏍硷紝閫佹鏃堕棿宸叉竻绌猴紝璇烽噸鏂伴�佹鍛煎彨鐢熸垚鏂扮殑棣栨鍗�";
+            return Db.Updateable<MesOrderSta>()
+                .SetColumns(s => s.MaShoutTime == null)
+                .SetColumnsIF(hasStartTimeInput && dbSta.MaStartTime != entity.MaStartTime,
+                    s => s.MaStartTime == entity.MaStartTime) // 鍏佽鍚屾椂鍐欏叆鏂扮殑寮�濮嬫椂闂达紙濡傛灉鍒氫慨鏀癸級
+                .SetColumnsIF(entity.remark != null, s => s.remark == entity.remark)
+                .Where(s => s.Id == entity.Id)
+                .ExecuteCommand() > 0;
+        }
+
+        // 1) 璋冩満寮�濮嬶細鍙啓寮�濮嬫椂闂�
+        if (isStartOnly)
+        {
+            return Db.Updateable<MesOrderSta>()
+                .SetColumns(s => s.MaStartTime == entity.MaStartTime)
+                .Where(s => s.Id == entity.Id)
+                .ExecuteCommand() > 0;
+        }
+
+        // 2) 閫佹鍛煎彨锛氬啓鍏ュ紑濮嬫椂闂�(鑻ユ湭鍐�) + 閫佹鏃堕棿锛屽苟鍒涘缓棣栨鍗�
+        if (isShoutCall)
+        {
+            // 鑻ユ暟鎹簱灏氭棤寮�濮嬫椂闂达紝琛ュ啓
+            var needWriteStart = string.IsNullOrWhiteSpace(dbSta.MaStartTime) && hasStartTimeInput;
+
+            // 鍒涘缓棣栨鍗曪紙濮嬬粓鎸夐�佹鍛煎彨鐢熸垚涓�寮犳柊鐨勶紝濡傛灉闇�瑕佷綔搴熸棫鍗曞彲鍔犲彇娑堥�昏緫锛�
+            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)
             {
-                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/RefreshDev",
-                        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)
-                    {
-                        // 璇锋眰鎴愬姛锛岃幏鍙朚esNumerical鏁版嵁
-                        mesNumerical = Db.Queryable<MesNumericalBycl>()
-                            .Where(s => s.EditDate == editDate
-                                        && s.MachineNo == entity.MachineNo)
-                            .OrderByDescending(s => s.Id)
-                            .First();
-                    }
-                }
+                var ts = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+                Db.Updateable<MesQaItemsDetect02>()
+                    .SetColumns(s => s.Remeke == $"宸ユ帶鏈轰簬{ts}璋冩満閫佹鐢熸垚棣栨鍗�")
+                    .Where(s => s.Id == latestFirst.Id)
+                    .ExecuteCommand();
             }
-        }
-        catch (Exception ex)
-        {
-            // 璁板綍寮傚父浣嗕笉闃绘娴佺▼
-            Console.WriteLine($"鍙戦�佹暟鎹埛鏂拌姹傛椂鍑洪敊: {ex.Message}");
+
+            entity.remark = "宸茬敓鎴愰妫�鍗曪紝绛夊緟妫�楠�";
+            var updateCount = Db.Updateable<MesOrderSta>()
+                .SetColumns(s => s.MaShoutTime == entity.MaShoutTime)
+                .SetColumnsIF(needWriteStart, s => s.MaStartTime == entity.MaStartTime)
+                .SetColumns(s => s.remark == entity.remark)
+                .Where(s => s.Id == entity.Id)
+                .ExecuteCommand();
+
+            return updateCount > 0;
         }
 
-        // 濡傛灉璇锋眰澶辫触鎴栬幏鍙栨暟鎹け璐ワ紝mesNumerical灏嗕繚鎸佷负null
-
-        Db.Deleteable<MesAnchors>()
-            .Where(a => a.EditDate == editDate
-                        && a.OrderId == womdaa.Id)
-            .ExecuteCommand();
-
-        MesAnchors eAnchors = new MesAnchors
+        // 3) 淇濈暀璋冩満瀹屾垚閫昏緫锛氶妫�鍚堟牸涓旈�佹鏃堕棿 >= 璋冩満寮�濮嬫椂闂存椂鑷姩鍐欏紑宸ヤ笌璋冩満瀹屾垚
+        // 锛堟澶勪笌鍘熼�昏緫涓�鑷达細鍓嶇涓嶇洿鎺ョ偣鈥滆皟鏈哄畬鎴愨�濓紝鑰屾槸鐢卞悎鏍艰Е鍙戯級
+        if (!string.IsNullOrEmpty(entity.MaShoutTime)
+            && DateTime.TryParse(entity.MaShoutTime, out var shoutTime)
+            && DateTime.TryParse(dbSta.MaStartTime ?? entity.MaStartTime, out var startTime)
+            && shoutTime >= startTime
+            && latestFirst != null
+            && string.Equals(latestFirst.FcheckResu?.Trim(), FirstCheckResultOK, StringComparison.OrdinalIgnoreCase))
         {
-            OrderId = womdaa.Id,
-            OrderNo = womdaa.Daa001,
-            EditDate = editDate,
-            Qty = mesReporting == null ? 0 : Int64.Parse(mesReporting.DyQty),
-            InitialValue = mesNumerical == null ? 0 : mesNumerical.CjNum
-        };
-        Db.Insertable<MesAnchors>(eAnchors)
-            .ExecuteCommand();
-
-
-
-        // 鏂板閫昏緫锛氶�佹鏃堕棿鏈夊�兼椂锛屽垽鏂渶鏂伴妫�鍗曟槸鍚﹀悎鏍硷紝鍚堟牸鍒欏啓鍏ヨ皟鏈哄畬鎴愭椂闂翠负褰撳墠鏃堕棿
-        if (!string.IsNullOrEmpty(entity.MaShoutTime))
-        {
-            //閫佹鍛煎彨鏃堕棿蹇呴』澶т簬鎴栫瓑浜庤皟鏈哄紑濮嬫椂闂达紝浠ユ鏉ョ瓫閫夐妫�鍗�
-            if (DateTime.TryParse(entity.MaShoutTime, out var sjTime) && DateTime.TryParse(entity.MaStartTime, out var startTime))
+            // 鍐欏紑宸ュ強璋冩満瀹屾垚
+            QualifiedInspection(new OrderMachineDto
             {
-                if (sjTime >= startTime)
-                {
-                    // 鏌ユ壘璇ュ伐鍗曞彿涓嬫渶鏂扮殑棣栨鍗�
-                    var sjRecord = Db.Queryable<MesQaItemsDetect02>()
-                        .Where(x => x.Aufnr == womdaa.Daa001 && x.Ftype == "棣栨")
-                        .OrderBy(x => x.CreateDate, OrderByType.Desc)
-                        .First();
+                OrderId = entity.OrderId,
+                orderNo = entity.OrderNo,
+                machineNo = entity.MachineNo
+            });
 
-                    if (sjRecord != null && sjRecord.FcheckResu == "鍚堟牸")
-                    {
-                        // 浣跨敤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");
-                    }
-                }
-            }
+            entity.StartTime = entity.MaShoutTime;
+            entity.MaEndTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+
+            return Db.Updateable<MesOrderSta>()
+                .SetColumnsIF(entity.MaEndTime != null, s => s.MaEndTime == entity.MaEndTime)
+                .SetColumnsIF(entity.StartTime != null, s => s.StartTime == entity.StartTime)
+                .Where(s => s.Id == entity.Id)
+                .ExecuteCommand() > 0;
         }
 
-        // 鏇存柊宸ュ崟鐘舵�佽〃
-        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;
+        // 鑻ユ湰娆¤皟鐢ㄦ湭鍖归厤浠讳綍鎿嶄綔锛堝彲鑳藉彧鏄噸澶嶆彁浜わ級锛屼繚鎸佷笉鍙�
+        return true;
     }
+
 
     /// <summary>
     ///     鍒濆鍖栧伐鍗曠姸鎬�
@@ -508,12 +484,12 @@
                             MachineNo = womdaa.MachineNo,
                             // BfQty = reportingOkQty,
                             BfQty = 0,
-                            BlQty = reportingOkQty.ToString(),
+                            BlQty = reportingOkQty,
                             OkQty = 0,
                             ItemNo = womdaa.Daa002,
                             BillNo = womdaa.Daa001,
-                            CjQty = CjQty.ToString(),
-                            DyQty = reporting.OkQty.ToString()
+                            CjQty = CjQty,
+                            DyQty = reporting.OkQty
                         };
                         
                         // 鎻掑叆鎶ュ伐璁板綍

--
Gitblit v1.9.3