From 590ffa097029620655bf57947738df85dc8f5572 Mon Sep 17 00:00:00 2001
From: wxw <Administrator@DESKTOP-5BIMHQ3>
Date: 星期三, 13 八月 2025 09:22:56 +0800
Subject: [PATCH] 申请入库接口增加托盘重量

---
 Admin.NET/WCS.Application/PLC/PLCService.cs |  135 ++++++++++++++++++++++++++++----------------
 1 files changed, 85 insertions(+), 50 deletions(-)

diff --git a/Admin.NET/WCS.Application/PLC/PLCService.cs b/Admin.NET/WCS.Application/PLC/PLCService.cs
index db502b1..596d1b2 100644
--- a/Admin.NET/WCS.Application/PLC/PLCService.cs
+++ b/Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -21,6 +21,8 @@
 public static class PLCService
 {
     private static readonly object OLock = new object();
+    private static readonly object RuKuLock = new object();
+    private static readonly object OutLock = new object();
 
     private static readonly ISqlSugarClient _db = SqlSugarSetup.ITenant.GetConnectionScope(SqlSugarConst.MainConfigId);
     private static decimal weight94 = 0;
@@ -92,7 +94,7 @@
                     if (modTask.TaskType == TaskTypeEnum.Move)
                     {
                         // 绉诲簱鐩爣鍦板潃
-                        taskInfo = PLCCommon.GetEndPai(modTask.EndLocate.Substring(1, 2), modTask.EndLocate.Substring(2, 2),
+                        taskInfo = PLCCommon.GetEndPai(modTask.EndLocate.Substring(0, 2), modTask.EndLocate.Substring(2, 2),
                                     modTask.EndLocate.Substring(0, 2), modTask.EndLocate.Substring(4, 2),
                                     modTask.EndLocate.Substring(6, 2));
                         
@@ -108,7 +110,7 @@
                         {
                             #region 璺ㄨ泛鏈轰换鍔″鐞�     ###########
                             // 鍒ゆ柇鐩爣浣嶇疆鏄惁鏄法璺烘満鍑哄簱宸ヤ綅
-                            if (modTask.EndLocate == "266" && modTask.StartRoadway != "R05")
+                            if (modTask.EndLocate == "266")// && modTask.StartRoadway != "R05"
                             {
                                 // 鍒ゆ柇鍏ュ簱宸ヤ綅鏄惁瀛樺湪鏈畬鎴愮殑鍏ュ簱浠诲姟
                                 var modInTask = _db.Queryable<WcsTask>().OrderBy(m => m.Levels, OrderByType.Asc).OrderBy(m => m.CreateTime, OrderByType.Asc)
@@ -133,17 +135,19 @@
                                         break;
                                     }
                                 }
-
-                                string aaa = PLCCommon.RoadwayToOutStationNum(modTask.StartRoadway, "1");  // 鑾峰彇1妤间腑涓撳伐浣嶅彿
-                                taskInfo.Ip = PLCCommon.GetPlcIp(aaa).PlcIP;
-                                taskInfo.EndPai = "2";
-                                taskInfo.EndLie = "60";
-                                taskInfo.EndCeng = "1";
-                                taskInfo.EndStation = aaa;
+                                if (modTask.StartRoadway != "R05")
+                                {
+                                    string aaa = PLCCommon.RoadwayToOutStationNum(modTask.StartRoadway, "1");  // 鑾峰彇1妤间腑涓撳伐浣嶅彿
+                                    taskInfo.Ip = PLCCommon.GetPlcIp(aaa).PlcIP;
+                                    taskInfo.EndPai = "2";
+                                    taskInfo.EndLie = "60";
+                                    taskInfo.EndCeng = "1";
+                                    taskInfo.EndStation = aaa;
+                                }                               
 
                             }
 
-                            if (modTask.EndLocate == "265" && modTask.StartRoadway != "R05" && modTask.StartRoadway != "R06") 
+                            if (modTask.EndLocate == "265") // && modTask.StartRoadway != "R05" && modTask.StartRoadway != "R06"
                             {
                                 // 鍒ゆ柇鍏ュ簱宸ヤ綅鏄惁瀛樺湪鏈畬鎴愮殑鍏ュ簱浠诲姟
                                 var modInTask = _db.Queryable<WcsTask>().OrderBy(m => m.Levels, OrderByType.Asc).OrderBy(m => m.CreateTime, OrderByType.Asc)
@@ -168,13 +172,15 @@
                                         break;
                                     }
                                 }
-
-                                string aaa = PLCCommon.RoadwayToOutStationNum(modTask.StartRoadway, "1");  // 鑾峰彇1妤间腑涓撳伐浣嶅彿
-                                taskInfo.Ip = PLCCommon.GetPlcIp(aaa).PlcIP;
-                                taskInfo.EndPai = "2";
-                                taskInfo.EndLie = "60";
-                                taskInfo.EndCeng = "1";
-                                taskInfo.EndStation = aaa;
+                                if (modTask.StartRoadway != "R05" && modTask.StartRoadway != "R06")
+                                {
+                                    string aaa = PLCCommon.RoadwayToOutStationNum(modTask.StartRoadway, "1");  // 鑾峰彇1妤间腑涓撳伐浣嶅彿
+                                    taskInfo.Ip = PLCCommon.GetPlcIp(aaa).PlcIP;
+                                    taskInfo.EndPai = "2";
+                                    taskInfo.EndLie = "60";
+                                    taskInfo.EndCeng = "1";
+                                    taskInfo.EndStation = aaa;
+                                }                                
                             }
 
                             // 鍐欏叆鏀捐揣宸ヤ綅鍥哄畾鍦板潃
@@ -378,6 +384,14 @@
                                         var retc = plcConveyorConn.SetPlcDBValue(ConveyorMod.PosType, ConveyorMod.DbNumber, ConveyorMod.WcsPos, "640");
                                         if (retc.IsSucceed)
                                         {
+                                            // 鍐嶆璇诲彇wcs鎺у埗瀛�,纭繚鍐欏叆鎴愬姛640
+                                            var (ress2, va1s2) = plcConveyorConn.GetPlcDBValue(ConveyorMod.PosType, ConveyorMod.DbNumber, ConveyorMod.WcsPos);
+                                            if (va1s2.ToString() == "630")//杩樻槸绛変簬630璇存槑640娌℃湁鍐欏叆鎴愬姛锛屽啀娆″啓鍏�640
+                                            {
+                                                retc = plcConveyorConn.SetPlcDBValue(ConveyorMod.PosType, ConveyorMod.DbNumber, ConveyorMod.WcsPos, "640");
+                                                Log.Information($"840鍨涙満鍙栬揣瀹屾垚鍐欏叆640澶辫触鍚庡啀娆″啓鍏ワ紝DbNumber锛歿ConveyorMod.DbNumber}");
+                                            }
+
                                             modcTaskMonitor.InteractiveMsg = string.Format("宸ヤ綅锛歿0},鍐欏叆鍙栬揣瀹屾垚:640", startStationVal);
                                             // 鎻掑叆浜や簰鏃ュ織
                                             _db.Insertable(modcTaskMonitor).ExecuteCommand();
@@ -824,14 +838,14 @@
                                 break;
                             case TaskTypeEnum.Move:       // 绉诲簱浠诲姟
                                 {
-                                    var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鍙�");
-                                    var result = plcConn.SetPlcDBValueRepeat(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo);
-                                    if (!result.IsSucceed)
-                                    {
-                                        Log.Error($"{modDevice.Text}鍐欏叆浠诲姟鍙峰け璐�");
-                                        break;
-                                    }
-                                    result = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "870");
+                                    //var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鍙�");
+                                    //var result = plcConn.SetPlcDBValueRepeat(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo);
+                                    //if (!result.IsSucceed)
+                                    //{
+                                    //    Log.Error($"{modDevice.Text}鍐欏叆浠诲姟鍙峰け璐�");
+                                    //    break;
+                                    //}
+                                    var result = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "870");
                                     if (!result.IsSucceed)
                                     {
                                         Log.Error($"{modDevice.Text}鎺у埗瀛楀啓鍏�870澶辫触");
@@ -1467,7 +1481,7 @@
                     }
 
                     //鍚慦MS鐢宠宸烽亾
-                    strMsg = http.RequestRoadWay(palletVal, modDevice.StationNum, taskModel, louCeng, ref EndLocate, ref TaskNo, (int)palletHeightVal);
+                    strMsg = http.RequestRoadWay(palletVal, modDevice.StationNum, taskModel, louCeng, ref EndLocate, ref TaskNo, (int)palletHeightVal, Convert.ToString(palletWeightVal));
 
                     if (!strMsg.Contains("-1"))
                     {
@@ -1814,9 +1828,12 @@
                     #endregion
 
                     var http = new HttpService();
-                    string TaskNo = "";
-                    // 鍚慦MS鐢宠鍌ㄤ綅淇℃伅
-                    strMsg = http.RequestLocate(palletVal, modDevice.StationNum, taskModel, roadway, ref TaskNo, (int)taskInfo2.PalletQty);
+                    string TaskNo = "";                    
+                    lock (RuKuLock)
+                    {
+                        // 鍚慦MS鐢宠鍌ㄤ綅淇℃伅
+                        strMsg = http.RequestLocate(palletVal, modDevice.StationNum, taskModel, roadway, ref TaskNo, (int)taskInfo2.PalletQty);
+                    }                        
 
                     // 鏍规嵁浠诲姟鍙疯幏鍙栬捣濮嬪伐浣嶅湴鍧�锛屾牴鎹捣濮嬪伐浣嶅湴鍧�鑾峰彇LEDIP 鎺ㄩ�佸埌LED灞忓箷銆�
                     var taskInfo = _db.Queryable<WcsTask>().First(w => w.TaskNo == TaskNo);
@@ -2194,6 +2211,13 @@
                             // 璺烘満闈炵┖闂茬瓑寰�
                             break;
                         }
+                        //鍒ゆ柇璇ュ贩閬撴湁娌℃湁寰呮墽琛岀殑绉诲簱/鍑哄簱浠诲姟锛屼紭鍏堟墽琛岀Щ搴�/鍑哄簱浠诲姟鍐嶆墽琛屽叆搴撲换鍔�
+                        var taskOutMove = _db.Queryable<WcsTask>().First(s => s.Status == TaskStatusEnum.Wait && (s.TaskType == TaskTypeEnum.Out || s.TaskType == TaskTypeEnum.Move)
+                        && s.StartRoadway == modDevice.StationNum);
+                        if (taskOutMove != null)
+                        {
+                            break;
+                        }
                         // 缁橮LC鍐欏叆浠诲姟鏁版嵁
                         var listResult = new List<Result>();
 
@@ -2388,15 +2412,18 @@
                                 TaskType = ((int)TaskTypeEnum.Out).ToString(),
                                 TaskStatus = ((int)TaskStatusEnum.Complete).ToString()
                             };
-                            HttpService httpService = new HttpService();
-                            var modResponseTask = httpService.RequestTask(requestMode).Result;
-                            if (modResponseTask.StatusCode == 0)
-                            {
-                                modInsertTaskMonitor.InteractiveMsg += "锛岃繑鍥炵粰WMS浠诲姟瀹屾垚";
-                            }
-                            else
-                            {
-                                Log.Error(string.Format("浠诲姟鍙嶉澶辫触锛歋tatusCode锛歿0};Msg锛歿1}", modResponseTask.StatusCode, modResponseTask.Msg));
+                            lock(OutLock)
+                            { 
+                                HttpService httpService = new HttpService();
+                                var modResponseTask = httpService.RequestTask(requestMode).Result;
+                                if (modResponseTask.StatusCode == 0)
+                                {
+                                    modInsertTaskMonitor.InteractiveMsg += "锛岃繑鍥炵粰WMS浠诲姟瀹屾垚";
+                                }
+                                else
+                                {
+                                    Log.Error(string.Format("浠诲姟鍙嶉澶辫触锛歋tatusCode锛歿0};Msg锛歿1}", modResponseTask.StatusCode, modResponseTask.Msg));
+                                }
                             }
                         }
 
@@ -2788,6 +2815,7 @@
                             var retVal = plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "2");
                             break;
                         }
+                        int chaNum = 0;
                         for (int i = 1; i <= boxNum; i++)
                         {
                             // 鑾峰彇绠辨潯鐮�
@@ -2798,8 +2826,11 @@
                             if (string.IsNullOrEmpty(boxNo))
                             {
                                 Log.Error(string.Format("鐮佸灈宸ヤ綅{0}锛岀鐮佷负null鎻掔爜澶辫触!璇蜂汉宸ュ己鍒剁粨鎵广��", modDevice.StationNum));
+                                // 鍐欏叆鎻掑叆缁撴灉 2锛氭彃鐮佸け璐�
+                                plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "2");
                                 break;
                             }
+                            Log.Information($"PLC璇锋眰鎻掔爜锛屾墭鐩樺彿锛歿palletNo}锛岀鐮侊細{boxNo}");
                             // 楠岃瘉绠辩爜琛ㄦ槸鍚﹀瓨鍦ㄦ绠辩爜
                             var boxInfo = _db.Queryable<WcsBoxInfo>().Where(w => w.IsDelete == false && w.BoxNo == boxNo).ToList();
                             if (boxInfo.Count == 0)
@@ -2824,20 +2855,24 @@
                                 plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "2");
                                 break;
                             }
+                            chaNum++;
                         }
-                        // 鎻掔爜鎴愬姛
-                        var retVal2 = plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "1");
-                        if (retVal2.IsSucceed)
+                        if (chaNum == boxNum)
                         {
-                            //鏇存柊宸叉彃鐮佹暟閲�
-                            checkTaskMedel.BoxCount += boxNum;
-                            _db.Updateable(checkTaskMedel).ExecuteCommand();
-                        }
-                        else 
-                        {
-                            // 鍐欏叆澶辫触
-                            Log.Error(string.Format("鍐欏叆PLC鎻掔爜缁撴灉澶辫触锛岀爜鍨涘伐浣峽1}锛屾墭鐩樺彿{2}", modDevice.StationNum, palletNo));
-                        }
+                            // 鎻掔爜鎴愬姛
+                            var retVal2 = plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "1");
+                            if (retVal2.IsSucceed)
+                            {
+                                //鏇存柊宸叉彃鐮佹暟閲�
+                                checkTaskMedel.BoxCount += boxNum;
+                                _db.Updateable(checkTaskMedel).ExecuteCommand();
+                            }
+                            else
+                            {
+                                // 鍐欏叆澶辫触
+                                Log.Error(string.Format("鍐欏叆PLC鎻掔爜缁撴灉澶辫触锛岀爜鍨涘伐浣峽1}锛屾墭鐩樺彿{2}", modDevice.StationNum, palletNo));
+                            }
+                        }                      
                     }
                     break;
                 case "40":

--
Gitblit v1.8.0