From a815f0c44f8e435b0261c469f07654f0114726b9 Mon Sep 17 00:00:00 2001
From: liudl <673013083@qq.com>
Date: 星期一, 14 四月 2025 16:10:37 +0800
Subject: [PATCH] 问题修改

---
 Admin.NET/WCS.Application/PLC/PLCService.cs       |  121 ++++++++++++++++++++++++++----
 Admin.NET/WCS.Application/OpenApi/DemoOpenApi.cs  |  108 +++++++++++++++++++-------
 Admin.NET/WCS.Application/Entity/WcsBoxInfoLog.cs |    8 +
 3 files changed, 189 insertions(+), 48 deletions(-)

diff --git a/Admin.NET/WCS.Application/Entity/WcsBoxInfoLog.cs b/Admin.NET/WCS.Application/Entity/WcsBoxInfoLog.cs
index b60199a..1a0c46d 100644
--- a/Admin.NET/WCS.Application/Entity/WcsBoxInfoLog.cs
+++ b/Admin.NET/WCS.Application/Entity/WcsBoxInfoLog.cs
@@ -115,7 +115,13 @@
     /// </summary>
     [SugarColumn(ColumnName = "BoxNo2", ColumnDescription = "鐩掔爜", Length = 30)]
     public string? BoxNo2 { get; set; }
-    
+
+    /// <summary>
+    /// 鏀爜
+    /// </summary>
+    [SugarColumn(ColumnName = "BoxNo3", ColumnDescription = "鏀爜", Length = 30)]
+    public string? BoxNo3 { get; set; }
+
     /// <summary>
     /// 鍖呰绾у埆
     /// </summary>
diff --git a/Admin.NET/WCS.Application/OpenApi/DemoOpenApi.cs b/Admin.NET/WCS.Application/OpenApi/DemoOpenApi.cs
index ea89850..4c0934c 100644
--- a/Admin.NET/WCS.Application/OpenApi/DemoOpenApi.cs
+++ b/Admin.NET/WCS.Application/OpenApi/DemoOpenApi.cs
@@ -80,6 +80,8 @@
         ResponseModel result = new ResponseModel();
         try
         {
+            string str = JsonConvert.SerializeObject(models);
+            Log.Information("鎺ユ敹WMS鍑哄叆搴撲换鍔★紝浠诲姟鍙凤細" + models.TaskNo + ",鎵樼洏鍙凤細"+ models.PalletNo);
             // 楠岃瘉浠诲姟鏄惁宸插瓨鍦�
             var taskInfo = _db.Queryable<WcsTask>().First(w => w.TaskNo == models.TaskNo);
             if (taskInfo != null)
@@ -372,31 +374,19 @@
                 return new ResponseFuMaModel() { Success = "-1", Message = "璇ユ壒娆℃湭杩涜鍒嗘嫞鎴栧凡缁撴壒" };
             }
 
-            //鑾峰彇鍖呰鏁伴噺
             int Fqty = int.Parse(models.FinishQty);
-            int bzQty = 0;
-            var boxinfolog = _db.Queryable<WcsBoxInfoLog>().Where(m => m.SkuNo == models.SkuNo && m.LotNo == models.LotNo && m.BitBoxMark == "0").First();
-            if (boxinfolog == null)
-            {
-                var boxinfo = _db.Queryable<WcsBoxInfo>().Where(m => m.SkuNo == models.SkuNo && m.LotNo == models.LotNo && m.BitBoxMark == "0").First();
-                Fqty = (int)(Fqty /boxinfo.QtyCount);
-                bzQty = (int)boxinfo.QtyCount;
-            }
-            else
-            {
-                Fqty = (int)(Fqty / boxinfolog.QtyCount);
-                bzQty = (int)boxinfolog.QtyCount;
-            }
             int Jpqty = 0;
             //鍐欏叆璇ヤ换鍔″畬鎴愭暟閲�
             foreach (var item in num)
             {
+                int jp = 0;//缁撴壒鏄惁闇�瑕佺粍鐩�0锛氫笉闇�瑕侊紝1锛氶渶瑕併�備笉闇�瑕佺粍鐩樺垯鐩存帴閲婃斁鍒嗛亾锛岄渶瑕佺粍鐩樺垯涓嬪彂PLC棰勭粨鎵逛俊鍙�
                 item.FinishQty = Fqty;
                 //鍒ゆ柇褰撳墠鍗曟嵁鐮佸灈鏁伴噺鏄惁鍜屽畬宸ユ暟閲忕浉绛夛紝鏄垯缁撴壒璇ュ崟鎹�
+                //鑾峰彇宸茬粍鐩樻暟閲�
                 var checkNum = _db.Queryable<WcsBoxInfoLog>().Where(m => m.SkuNo == models.SkuNo && m.LotNo == models.LotNo && m.OrderCode == item.OrderNo).ToList();//缁勭洏琛ㄧ鐮佷俊鎭�
                 if (checkNum.Count>0)
                 {
-                    if (checkNum.First().Qty != 0)//鏈夋敮鐮�
+                    if (!(string.IsNullOrEmpty(checkNum.First().BoxNo2))||!(string.IsNullOrEmpty(checkNum.First().BoxNo3)))//鏈夋敮鐮�
                     {
                         foreach (var item2 in checkNum)
                         {
@@ -411,44 +401,100 @@
                         }
                     }
                 }
-                var checkNum2 = _db.Queryable<WcsBoxInfo>().Where(m => m.SkuNo == models.SkuNo && m.LotNo == models.LotNo && m.OrderCode == item.OrderNo).ToList();//绠辩爜琛ㄥ凡鐮佸灈绠辩爜淇℃伅
+                
+                //鑾峰彇宸叉彃鐮佹暟閲�
+                var checkNum2 = _db.Queryable<WcsBoxInfo>().Where(m =>m.BitBoxMark != "1" && m.SkuNo == models.SkuNo && m.LotNo == models.LotNo &&(m.PalletNo != null || m.PalletNo != "") && m.OrderCode == item.OrderNo).ToList();//绠辩爜琛ㄥ凡鐮佸灈绠辩爜淇℃伅
                 if (checkNum2.Count>0)
                 {
-                    if (checkNum2.First().Qty != 0)//鏈夋敮鐮�
+                    jp = 1;//绠辩爜琛ㄨ繕鏈夋湭缁勭洏绠憋紝闇�瑕佺粍鐩�
+                    if (!string.IsNullOrEmpty(checkNum2.First().BoxNo2)||!string.IsNullOrEmpty(checkNum2.First().BoxNo3))//鏈夋敮鐮�
                     {
-                        foreach (var item2 in checkNum)
+                        foreach (var item2 in checkNum2)
                         {
                             Jpqty = (int)(Jpqty + item2.Qty);
                         }
                     }
                     else//鏃犳敮鐮�
                     {
-                        foreach (var item2 in checkNum)
+                        foreach (var item2 in checkNum2)
                         {
                             Jpqty = (int)(Jpqty + item2.QtyCount);
                         }
                     }
                 }
-                if (Jpqty/bzQty == Fqty)
+
+                //鑾峰彇闆剁鏁伴噺
+                var checkNum3 = _db.Queryable<WcsBoxInfo>().Where(m => m.BitBoxMark == "1" && m.SkuNo == models.SkuNo && m.LotNo == models.LotNo).ToList();
+                if (checkNum3.Count > 0) 
                 {
-                    //棰勭粨鎵逛俊鍙蜂笅鍙�
+                    if (!string.IsNullOrEmpty(checkNum3.First().BoxNo2) || !string.IsNullOrEmpty(checkNum3.First().BoxNo3))//鏈夋敮鐮�
+                    {
+                        foreach (var item3 in checkNum3)
+                        {
+                            Jpqty = (int)(Jpqty + item3.Qty);
+                        }
+                    }
+                    else//鏃犳敮鐮�
+                    {
+                        foreach (var item3 in checkNum3)
+                        {
+                            Jpqty = (int)(Jpqty + item3.QtyCount);
+                        }
+                    }
+                }
+
+                if (Jpqty == Fqty)
+                {
                     var modPlc = _db.Queryable<WcsPlc>().Where(s => s.Type == PLCTypeEnum.ConveyorLine && s.Text == ("2灞傛墭鐩樿緭閫佺嚎")).First();
                     if (modPlc == null)
                         throw Oops.Bah("鏈壘鍒拌緭閫佺嚎PLC");
                     PLCUtil plcConn = new PLCUtil(modPlc);
-                    //鑾峰彇宸ヤ綅鐐逛綅淇℃伅
-                    var portno = item.Port;
-                    var modDevice = _db.Queryable<WcsPosition>().Where(s => s.StationNum == portno).First();
-                    var listPlcDevice = _db.Queryable<WcsDevice>().Where(s => s.StationNum == portno && s.Text.Contains("2妤�")).First();
-                    var ret = plcConn.SetPlcDBValue(modDevice.PosType, listPlcDevice.DbNumber, modDevice.PlcPos, "1");//鍐欏叆寮�濮嬬粨鎵逛俊鍙�
-                    if (ret.IsSucceed)
+                    //鍒ゆ柇褰撳墠鍒嗛亾鏄惁鏈夋湭缁勭洏绠�
+                    if (jp == 0)
                     {
-                        item.Status = "2";//缁撴壒涓�
+                        // 鍒嗛亾瑙g粦锛屾姄绠卞搧绉嶅啓鍏�0
+                        var ret1 = plcConn.SetPlcDBValue(item.PosTypeLot, item.DbNumber, item.PlcPos, "0");
+                        if (ret1.IsSucceed)
+                        {
+                            //鏇存柊鍏ュ簱璁㈠崟
+                            var orderTask = _db.Queryable<WcsOderTask>().Where(w => w.SkuNo == item.SkuNo && w.LotNo == item.LotNo && w.IsDelete == false).ToList();
+                            if (orderTask.Count > 0)
+                            {
+                                foreach (var item2 in orderTask)
+                                {
+                                    item2.Status = TaskStatusEnum.Complete;
+                                    _db.Updateable(item2).ExecuteCommand();
+                                }
+                            }
+                            //鍐欏叆娴佺▼瀛楁垚鍔熷悗鏇存柊鍒嗘嫞浠诲姟    liudl 鏈�鍚庝竴鎵樼洏鐢宠瀹屽叆搴撴墠鍙竻绌�
+                            item.OrderNo = "";
+                            item.TaskNo = "";
+                            item.LotNo = "";
+                            item.SkuNo = "";
+                            item.SkuName = "";
+                            item.BoxType = "";
+                            item.Qty = 0;
+                            item.PZNo = "";
+                            item.Status = "0";      // 缁戝畾鍒嗛亾 0锛氳В缁�  1锛氱粦瀹� 
+                            item.FinishQty = 0;
+
+                            //鏇存柊鍒嗘嫞浠诲姟
+                            _db.Updateable(item).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
+                        }
                     }
-                    else { throw new Exception("瀹屽伐缁撴壒淇″彿涓嬪彂缁橮LC閿欒"); }
+                    else 
+                    { 
+                        //棰勭粨鎵逛俊鍙蜂笅鍙�
+                    
+                        var ret2 = plcConn.SetPlcDBValue(item.PosType, item.DbNumber, item.PosLot, "1");//鍐欏叆寮�濮嬬粨鎵逛俊鍙�
+                        if (ret2.IsSucceed)
+                        {
+                            item.Status = "2";//缁撴壒涓�
+                        }
+                        else { throw new Exception("瀹屽伐缁撴壒淇″彿涓嬪彂缁橮LC閿欒"); }
+                    }
+                    _db.Updateable(item).ExecuteCommand();
                 }
-                _db.Updateable(item).ExecuteCommand();
-                return new ResponseFuMaModel() { Success = "0", Message = "鎺ュ彈瀹屽伐缁撴壒鏁伴噺鎴愬姛" };
             }
             
             return new ResponseFuMaModel() { Success = "0", Message = "鎺ュ彈瀹屽伐缁撴壒鏁伴噺鎴愬姛" };
diff --git a/Admin.NET/WCS.Application/PLC/PLCService.cs b/Admin.NET/WCS.Application/PLC/PLCService.cs
index eced7d0..1e2f8f8 100644
--- a/Admin.NET/WCS.Application/PLC/PLCService.cs
+++ b/Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -1965,7 +1965,7 @@
                                     if (orderModel != null)
                                     {
                                         // 鏍规嵁boxinfo琛ㄤ骇绾垮瓧娈佃嚜鍔ㄧ粦瀹氬垎閬�(1绾夸骇鍝佸彧鑳界粦瀹氬埌8閬�)
-                                        if (boxInfo.LineNo != "1")
+                                        if (boxInfo.LineNo != "涓�绾�")
                                         {// 缁戝畾鍒伴櫎8閬撳鍏朵粬閬�
 
                                             // 鑾峰彇鏈粦瀹氶亾
@@ -2010,9 +2010,10 @@
                                                             lineNoModel.LotNo = boxInfo.LotNo;
                                                             lineNoModel.SkuNo = boxInfo.SkuNo;
                                                             lineNoModel.SkuName = boxInfo.SkuName;
-                                                            lineNoModel.Qty = orderModel.Qty;
+                                                            lineNoModel.Qty = 0;
                                                             lineNoModel.Status = "1";//宸茬粦瀹�
                                                             lineNoModel.PZNo = skuInfo.PZNo;
+                                                            lineNoModel.FinishQty = 0;
 
                                                             // 缁橮LC鍐欏叆鍝佽
                                                             var ret = plcConn.SetPlcDBValue(lineNoModel.PosType, lineNoModel.DbNumber, lineNoModel.PlcPos, skuInfo.PZNo);
@@ -2102,9 +2103,10 @@
                                                         lineNo8Model.LotNo = boxInfo.LotNo;
                                                         lineNo8Model.SkuNo = boxInfo.SkuNo;
                                                         lineNo8Model.SkuName = boxInfo.SkuName;
-                                                        lineNo8Model.Qty = orderModel.Qty;
+                                                        lineNo8Model.Qty = 0;
                                                         lineNo8Model.Status = "1";//宸茬粦瀹�
                                                         lineNo8Model.PZNo = skuInfo.PZNo;
+                                                        lineNo8Model.FinishQty = 0;
 
                                                         // 缁橮LC鍐欏叆鍝佽
                                                         var ret = plcConn.SetPlcDBValue(lineNo8Model.PosType, lineNo8Model.DbNumber, lineNo8Model.PlcPos, skuInfo.PZNo);
@@ -2357,7 +2359,8 @@
                                 break;
                             }
                             // 鑾峰彇褰撳墠鍒嗛亾鎵樼洏鍙�
-                            var checkTaskMedel = _db.Queryable<WcsCheckTask>().First(m => m.Port == modDevice.StationNum && m.IsDelete == false);
+                            string port = modDevice.StationNum.ToString();
+                            var checkTaskMedel = _db.Queryable<WcsCheckTask>().First(m => m.Port == port && m.Status == "1");
                             if (checkTaskMedel == null)
                             {
                                 Log.Error(string.Format("鏍规嵁鐮佸灈宸ヤ綅{0}锛岃幏鍙栧垎閬撳け璐�!", modDevice.StationNum));
@@ -2376,7 +2379,9 @@
                                 item.UpdateTime = DateTime.Now;
                                 item.OrderCode = checkTaskMedel.OrderNo;
                             }
-
+                            
+                            checkTaskMedel.Qty += boxInfo.First().QtyCount;//璁板綍褰撳墠鎵樼洏涓婄墿鏂欐暟閲�
+                            _db.Updateable(checkTaskMedel).ExecuteCommand();
                             var rowCount = _db.Updateable(boxInfo).ExecuteCommand();
                             Log.Information(string.Format("鎻掔爜鎴愬姛锛岀鐮佹槸锛�" + boxNo, modDevice.StationNum));
                             if (rowCount > 0)
@@ -2385,18 +2390,85 @@
                                 var retVal = plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "1");
 
                                 //鏄惁缁撴壒绠� 
-                                if (boxInfo[0].EndLotFlag == "1" && retVal.IsSucceed)
-                                {
-                                    // 瑙﹀彂缁撴壒 鍒嗛亾鍙樹负缁撴壒涓�
-                                    AutoEndLot(boxInfo[0].LotNo, plcConn, "2");
-                                }
-
-                                //妫�鏌ュ凡鐮佸灈绠辨暟锛岀爜鍨涙暟閲忎笌瀹屽伐鏁伴噺鐩哥瓑鍚庤嚜鍔ㄧ粨鎵�
-                                //var finishiqty = _db.Queryable<WcsBoxInfoLog>().Count(m => m.SkuNo = )
-                                //if (true)
+                                //if (boxInfo[0].EndLotFlag == "1" && retVal.IsSucceed)
                                 //{
-
+                                //    // 瑙﹀彂缁撴壒 鍒嗛亾鍙樹负缁撴壒涓�
+                                //    AutoEndLot(boxInfo[0].LotNo, plcConn, "2");
                                 //}
+                                if (retVal.IsSucceed)
+                                {
+                                    //鍒よ鏄惁鎺ユ敹瀹屽伐鏁伴噺
+                                    var models = _db.Queryable<WcsCheckTask>().First(w => w.SkuNo == boxInfo.First().SkuNo && w.LotNo == boxInfo.First().LotNo);
+                                    if (models.FinishQty>0)
+                                    {
+                                        //妫�鏌ュ凡鐮佸灈绠辨暟(涓嶅惈闆剁)锛岀爜鍨涙暟閲忎笌瀹屽伐鏁伴噺鐩哥瓑鍚庤嚜鍔ㄧ粨鎵�:鍐欏叆PLC淇″彿鈥斺�旂粨鎵逛腑
+                                        int Fqty = (int)models.FinishQty;//瀹屽伐鏁伴噺
+                                        int Jpqty = 0;//宸茬爜鍨涙暟閲�
+
+                                        //鑾峰彇宸茬粍鐩樻暟閲�
+                                        var checkNum = _db.Queryable<WcsBoxInfoLog>().Where(m => m.SkuNo == models.SkuNo && m.LotNo == models.LotNo && m.OrderCode == checkTaskMedel.OrderNo).ToList();//缁勭洏琛ㄧ鐮佷俊鎭�
+                                        if (checkNum.Count > 0)
+                                        {
+                                            if (!string.IsNullOrEmpty(checkNum.First().BoxNo2) || !string.IsNullOrEmpty(checkNum.First().BoxNo3))//鏈夋敮鐮�
+                                            {
+                                                foreach (var item in checkNum)
+                                                {
+                                                    Jpqty = (int)(Jpqty + item.Qty);
+                                                }
+                                            }
+                                            else//鏃犳敮鐮�
+                                            {
+                                                foreach (var item in checkNum)
+                                                {
+                                                    Jpqty = (int)(Jpqty + item.QtyCount);
+                                                }
+                                            }
+                                        }
+                                        //鑾峰彇宸叉彃鐮佹暟閲�
+                                        var checkNum2 = _db.Queryable<WcsBoxInfo>().Where(m => m.SkuNo == models.SkuNo && m.LotNo == models.LotNo &&(m.PalletNo != null || m.PalletNo != "") && m.OrderCode == checkTaskMedel.OrderNo).ToList();//绠辩爜琛ㄥ凡鐮佸灈绠辩爜淇℃伅
+                                        if (checkNum2.Count > 0)
+                                        {
+                                            if (!string.IsNullOrEmpty(checkNum2.First().BoxNo2) || !string.IsNullOrEmpty(checkNum2.First().BoxNo3))//鏈夋敮鐮�
+                                            {
+                                                foreach (var item2 in checkNum2)
+                                                {
+                                                    Jpqty = (int)(Jpqty + item2.Qty);
+                                                }
+                                            }
+                                            else//鏃犳敮鐮�
+                                            {
+                                                foreach (var item2 in checkNum2)
+                                                {
+                                                    Jpqty = (int)(Jpqty + item2.QtyCount);
+                                                }
+                                            }
+                                        }
+                                        //鑾峰彇闆剁鏁伴噺
+                                        var checkNum3 = _db.Queryable<WcsBoxInfo>().Where(m => m.BitBoxMark == "1" && m.SkuNo == models.SkuNo && m.LotNo == models.LotNo).ToList();
+                                        if (checkNum3.Count > 0)
+                                        {
+                                            if (!string.IsNullOrEmpty(checkNum3.First().BoxNo2) || !string.IsNullOrEmpty(checkNum3.First().BoxNo3))//鏈夋敮鐮�
+                                            {
+                                                foreach (var item3 in checkNum3)
+                                                {
+                                                    Jpqty = (int)(Jpqty + item3.Qty);
+                                                }
+                                            }
+                                            else//鏃犳敮鐮�
+                                            {
+                                                foreach (var item3 in checkNum3)
+                                                {
+                                                    Jpqty = (int)(Jpqty + item3.QtyCount);
+                                                }
+                                            }
+                                        }
+                                        if (Jpqty == Fqty)
+                                        {
+                                            // 瑙﹀彂缁撴壒 鍒嗛亾鍙樹负缁撴壒涓�
+                                            AutoEndLot(boxInfo[0].LotNo, plcConn, "2");
+                                        }
+                                    }
+                                }
                             }
                             else
                             {
@@ -2556,11 +2628,14 @@
                                     string sqlStr2 = $"delete from WCSBoxInfo where  IsDelete=0 and PalletNo='{palletNo}'";
                                     _db.Ado.ExecuteCommand(sqlStr2);
                                 }
+                                //缁勭洏鎴愬姛鍚庢竻绌哄垎鎷h〃褰撳墠鎵樼洏涓婄墿鏂欐暟閲�
+                                checkTaskMedel.Qty = 0;
+                                _db.Updateable(checkTaskMedel).ExecuteCommand();
 
                                 // 鍚慦MS鐢宠宸烽亾
                                 var http = new HttpService();
                                 string TaskNo = "", EndLocate = "";
-                                string strMsg = http.BindRequestRoadWay(checkTaskMedel.OrderNo, palletNo, checkTaskMedel.BoxCount.ToDecimal(), "0", checkTaskMedel.SkuNo, checkTaskMedel.LotNo, "", "", boxInfoList,
+                                string strMsg = http.BindRequestRoadWay(checkTaskMedel.OrderNo, palletNo, checkTaskMedel.Qty.ToDecimal(), "0", checkTaskMedel.SkuNo, checkTaskMedel.LotNo, "", "", boxInfoList,
                                     modDevice.StationNum, "1", "2", ref EndLocate, ref TaskNo);
                                 if (strMsg.Contains("-1"))
                                 {
@@ -2577,6 +2652,17 @@
                                         var ret1 = plcConn.SetPlcDBValue(checkTaskMedel.PosTypeLot, modDevice.DbNumber, checkTaskMedel.PlcPos, "0");
                                         if (ret1.IsSucceed)
                                         {
+                                            //鏇存柊鍏ュ簱璁㈠崟
+                                            var orderTask = _db.Queryable<WcsOderTask>().Where(w => w.SkuNo == checkTaskMedel.SkuNo && w.LotNo == checkTaskMedel.LotNo && w.IsDelete == false).ToList();
+                                            if (orderTask.Count >0)
+                                            {
+                                                foreach (var item in orderTask)
+                                                {
+                                                    item.Status = TaskStatusEnum.Complete;
+                                                    _db.Updateable(item).ExecuteCommand();
+                                                }
+                                            }
+
                                             //鍐欏叆娴佺▼瀛楁垚鍔熷悗鏇存柊鍒嗘嫞浠诲姟    liudl 鏈�鍚庝竴鎵樼洏鐢宠瀹屽叆搴撴墠鍙竻绌�
                                             checkTaskMedel.OrderNo = "";
                                             checkTaskMedel.TaskNo = "";
@@ -2587,9 +2673,12 @@
                                             checkTaskMedel.Qty = 0;
                                             checkTaskMedel.PZNo = "";
                                             checkTaskMedel.Status = "0";      // 缁戝畾鍒嗛亾 0锛氳В缁�  1锛氱粦瀹� 
+                                            checkTaskMedel.FinishQty = 0;
 
                                             //鏇存柊鍒嗘嫞浠诲姟
                                             _db.Updateable(checkTaskMedel).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
+
+                                            
                                         }
                                     }
                                     // 鑾峰彇鍏ュ簱浠诲姟淇℃伅

--
Gitblit v1.8.0