From f3c8f980269b7f8fd9556c9076e06ca1461796e8 Mon Sep 17 00:00:00 2001
From: lss <2538410689@qq.com>
Date: 星期二, 15 七月 2025 17:30:55 +0800
Subject: [PATCH] 1111

---
 HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs |  279 ++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 232 insertions(+), 47 deletions(-)

diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs
index b40756c..04c62d7 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs
@@ -47,7 +47,7 @@
         /// <returns></returns>
         internal static Result Createtask(CreateTask model)
         {
-           
+
             Result result = new Result() { code = "0", msg = "鍒涘缓鎴愬姛" };
             if (model == null)
             {
@@ -188,7 +188,7 @@
                                 }
 
                             }
-                        
+
                         }
                         else
                         {
@@ -585,13 +585,13 @@
                             }
                             int pri = 1;
                             var area = Settings.wareLoc.Where(a => a.AreaCode == endloc.S_WH_CODE).First();
-                            if (area != null) 
+                            if (area != null)
                             {
                                 if (area.XbAreaCodes.Contains(endloc.S_AREA_CODE))
                                 {
                                     pri = 2;
                                 }
-                            }   
+                            }
                             //鍒涘缓wcs浠诲姟
                             var wcsTask = new WCSTask
                             {
@@ -795,6 +795,182 @@
 
 
 
+        }
+
+        public static object _Point = new object();
+        /// <summary>
+        /// 鍏ュ钩搴�+        /// </summary>
+        /// <param name="model"></param>
+        /// <param name="n_type">0:pda涓嬪彂浠诲姟锛�:mes涓嬪彂浠诲姟</param>
+        /// <returns></returns>
+        internal static Result Point(PointModel model)
+        {
+            Result result = new Result() { code = "200", msg = "鍏ュ钩搴撲换鍔′笅鍙戞垚鍔� };
+            string Source = "Mes";
+          
+            if (model == null)
+            {
+                result.code = "1";
+                result.msg = "鍙傛暟涓簄ull";
+                AddErrorInfo("鍙傛暟涓虹┖", result.msg, Source);
+                return result;
+            }
+            var db = new SqlHelper<object>().GetInstance();
+            Location loc = null;
+
+            string Start = model.InitialLocation;  //璧风偣璐т綅
+            string itemcode = model.PartNumber;    //鐗╂枡缂栫爜
+            string areacode = "";
+            try
+            {
+                lock (_Putin)
+                {
+                    #region 鍏ュ簱妫�煡鎵樼洏鐗╂枡琛ㄦ湁鏃犳暟鎹�+                    var cntritem = db.Queryable<CntrItemDetail>().Where(a => a.S_CNTR_CODE.Trim() == model.Rfid).First();
+                    if (cntritem == null)
+                    {
+                        result.code = "1";
+                        result.msg = $"鍒涘缓浠诲姟澶辫触锛屾墭鐩�{model.Rfid}鏃犵粦瀹氱墿鏂欐暟鎹�;
+                        LogHelper.Info($"ItemBack锛歿result.msg}");
+                        AddErrorInfo("鎵樼洏缁戝畾鐗╂枡鏁版嵁涓虹┖", result.msg, Source);
+                        return result;
+                    }
+                    #endregion
+
+                    #region 鍒ゆ柇鎵樼洏缁戝畾璐т綅鏄惁鍜屼笅鍙戠粦瀹氳捣鐐圭浉鍚�濡傛灉娌$粦瀹氭墭鐩樺垯缁戝畾鎵樼洏
+                    var CntrLoc = db.Queryable<LocCntrRel>().Where(a => a.S_CNTR_CODE.Trim() == model.Rfid).First();
+                    if (CntrLoc != null)
+                    {
+                        if (CntrLoc.S_LOC_CODE != Start)
+                        {
+
+                            result.code = "1";
+                            result.msg = $"鍒涘缓浠诲姟澶辫触锛屾墭鐩�{model.Rfid}缁戝畾浣嶇疆涓嶆槸璧风偣锛歿Start}";
+                            LogHelper.Info($"ItemBack锛歿result.msg}");
+                            AddErrorInfo("鎵樼洏缁戝畾浣嶇疆涓嶅悓", result.msg, Source);
+                            return result;
+                        }
+                    }
+                    else
+                    {
+                        LocationHelper.BindingLoc(Start, new List<string> { model.Rfid });
+                    }
+                   
+                    #endregion
+
+                    #region 鏍规嵁璧风偣璐т綅鐨勪粨搴撶紪鐮�鑾峰彇骞冲簱缂栫爜,骞惰绠楀叆搴撹揣浣�+                    string End = "";
+                    var startloc = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == Start).First();
+                    if (startloc != null)
+                    {
+                        //鏍规嵁浠撳簱 璁$畻搴撳尯
+                        var whcode = Settings.wareLoc.Where(a => a.AreaCode == startloc.S_WH_CODE).FirstOrDefault();
+                        if (whcode != null)
+                        {
+                            areacode = whcode.PMK;
+                        }
+                        else
+                        {
+                            result.code = "1";
+                            result.msg = $"鏍规嵁璧风偣浠撳簱缂栫爜锛歿startloc.S_WH_CODE}鏈壘鍒板搴旈厤缃枃浠�;
+                            LogHelper.Info($"Putin==> {result.msg}");
+                            AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source);
+                            return result;
+                        }
+
+
+                        loc = StorageCompute(itemcode, areacode);
+
+                        if (loc != null)
+                        {
+                            End = loc.S_CODE;
+                        }
+                        else
+                        {
+
+                            result.code = "1";
+                            result.msg = $"搴撳尯:{areacode}鏃犲彲鐢ㄨ揣浣�;
+                            LogHelper.Info($"Putin==> {result.msg}");
+                            AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source);
+                            return result;
+                        }
+                    }
+                    else
+                    {
+
+                        result.code = "1";
+                        result.msg = $"浠诲姟璧风偣:{Start}鎵句笉鍒板搴旇揣浣嶏紝璇锋鏌ヨ揣浣嶈〃";
+                        LogHelper.Info($"Putin==> {result.msg}");
+                        AddErrorInfo("鏌ユ壘璐т綅澶辫触", result.msg, Source);
+                        return result;
+                    }
+                    #endregion
+
+                    #region 鍒涘缓浠诲姟
+                    if (!string.IsNullOrEmpty(Start) && !string.IsNullOrEmpty(End))
+                    {
+                        if (startloc.N_LOCK_STATE != 0)
+                        {
+                            result.code = "1";
+                            result.msg = $"鍒涘缓浠诲姟澶辫触锛岃捣鐐�{Start}鏈夐攣";
+                            AddErrorInfo("璐т綅鏈夐攣", result.msg, Source);
+                            return result;
+                        }
+                        //鍒涘缓wcs浠诲姟
+                        var wcsTask = new WCSTask
+                        {
+                            S_CODE = WCSHelper.GenerateTaskNo(),
+                            S_TYPE = "鍏ュ钩搴�,
+                            S_EQ_NO = model.TaskNumber,
+                            S_START_LOC = Start,
+                            S_END_LOC = End,
+                            S_START_WH = startloc.S_WH_CODE,
+                            S_START_AREA = startloc.S_AREA_CODE,
+                            S_END_WH = loc.S_WH_CODE,
+                            S_END_AREA = loc.S_AREA_CODE,
+                            N_CNTR_COUNT = 1,
+                            N_SCHEDULE_TYPE = 1,
+                            S_CNTR_CODE = model.Rfid,
+                            N_START_LAYER = 1,
+                            N_END_LAYER = 1,
+                            N_PRIORITY = 1,
+                            Z_TYPE = n_type
+                        };
+                        LogHelper.Info("鍒涘缓鍏ュ钩搴撲换鍔★細" + JsonConvert.SerializeObject(wcsTask));
+                        if (WCSHelper.CreateTask(wcsTask))
+                        {
+                            //LocationHelper.LockLoc(Start, 2);
+                            //LocationHelper.LockLoc(End, 1);
+                            LogHelper.Info("鍒涘缓浠诲姟鎴愬姛");
+                        }
+                        else
+                        {
+                            result.code = "1";
+                            result.msg = $"浠诲姟鍒涘缓澶辫触";
+                            AddErrorInfo("浠诲姟鍒涘缓澶辫触", result.msg, Source);
+                            return result;
+                        }
+                    }
+                    else
+                    {
+                        result.code = "1";
+                        result.msg = "鍒涘缓浠诲姟澶辫触锛屾湭鎵惧埌瀵瑰簲鐨勫彇璐х偣鎴栧嵏璐х偣";
+                        return result;
+                    }
+                    #endregion
+
+                }
+
+                return result;
+            }
+            catch (Exception ex)
+            {
+                result.code = "1";
+                result.msg = ex.ToString();
+                LogHelper.Error("Putin Error锛� + ex.ToString(), ex);
+                return result;
+            }
         }
 
         public static object _Putin = new object();
@@ -1093,19 +1269,19 @@
 
                     #region 鏍规嵁鐗╂枡缂栫爜璁$畻鍑哄簱璐т綅锛岄�寰�嚎杈逛綅缃�                     Location Endloc = null;
-                  
+
                     //鏍规嵁鐗╂枡缂栫爜璁$畻鍑哄簱璐т綅
                     var loc = airlift(areacode, itemcode, model.PartLevel, model.PowderType);
                     if (loc != null)
                     {
                         Start = loc.S_CODE;
-                      
+
                         var CntrRel = LocationHelper.GetLocCntrRel(loc.S_CODE).FirstOrDefault();
                         CntrCode = CntrRel.S_CNTR_CODE;
                         //缁欑粓鐐圭敤缁堢偣锛屾病缁欑粓鐐圭敤鏈哄彴搴撳尯璁$畻璐т綅
                         if (string.IsNullOrEmpty(model.TargetLocation))
                         {
-                                          
+
                             Endloc = Computeloc(CntrCode, model.WorkCenter, cntrType);
                             if (Endloc != null)
                             {
@@ -1122,7 +1298,7 @@
                         }
                         else
                         {
-                        
+
                             Endloc = db.Queryable<Location>().Where(a => a.S_CODE == model.TargetLocation).First();
                             if (Endloc != null)
                             {
@@ -1137,7 +1313,7 @@
                                 return result;
                             }
                         }
-                       
+
                     }
                     else
                     {
@@ -1448,7 +1624,7 @@
                             N_START_LAYER = 1,
                             N_END_LAYER = endlayer,
                             N_PRIORITY = 1,
-                            S_B_STATE="绛夊緟鎺ㄩ�",
+                            S_B_STATE = "绛夊緟鎺ㄩ�",
                             Z_TYPE = 5
                         };
                         LogHelper.Info("鍒涘缓绌烘墭鍥炲簱浠诲姟锛� + JsonConvert.SerializeObject(wcsTask));
@@ -2586,12 +2762,12 @@
             if (agvDeviceInfo.Count > 0)
             {
                 device.AgvQty = agvDeviceInfo.Count;
-                device.AgvErrorQty = agvDeviceInfo.FindAll(a => a.agvErrCode != "0" || a.agvErrCode != "0" || a.faildCode != "0").Count;
-                device.AgvChargeQty = agvDeviceInfo.FindAll(a => a.agvErrCode == "1").Count;
-                device.AgvRunQty = agvDeviceInfo.FindAll(a => a.agvErrCode == "1").Count;
+                device.AgvErrorQty = agvDeviceInfo.FindAll(a => a.agvErrCode != "0" || int.Parse(a.errCode2) > 1 || int.Parse(a.faildCode) > 1).Count;
+                device.AgvChargeQty = agvDeviceInfo.FindAll(a => a.errCode2 == "1").Count;
+                device.AgvRunQty = agvDeviceInfo.FindAll(a => a.agvErrCode == "0"&& a.errCode2 == "0" && a.faildCode == "1").Count;
                 foreach (var agv in agvDeviceInfo)
                 {
-                    string agvErrorInfo = GetAgvAlarmSendCodeTwo(agv.agvErrCode, agv.errCode2, agv.faildCode);
+                    string agvErrorInfo = GetAgvAlarmSendCodeTwo(agv.agvNo, agv.agvErrCode, agv.errCode2, agv.faildCode);
                     deviceInfos.Add(new DeviceInfos() { AgvNo = agv.agvNo, AgvInfo = agvErrorInfo });
                 }
             }
@@ -2603,56 +2779,65 @@
         /// <summary>
         /// agv灏忚溅鏁呴殰鐮佸鐞�         /// </summary>
+        ///<param name="agvNo">杞﹀彿</param>
         /// <param name="errCode1">閿欒鐮�</param>
         /// <param name="errCode2">閿欒鐮�</param>
         /// <param name="faildCode">閿欒鐮�</param>
         /// <returns></returns>
-        private static string GetAgvAlarmSendCodeTwo(string errCode1, string errCode2, string faildCode)
+        private static string GetAgvAlarmSendCodeTwo(string agvNo, string errCode1, string errCode2, string faildCode)
         {
             string result = "";
             //灏嗘姤璀︿俊鎭暣鍚�-            string binSW1 = Convert.ToString(int.Parse(errCode1), 2).PadLeft(22, '0');
+            string binSW1 = Convert.ToString(int.Parse(errCode1), 2).PadLeft(25, '0');
             string binSW2 = Convert.ToString(int.Parse(errCode1), 2).PadLeft(20, '0');
             string binFc = Convert.ToString(int.Parse(errCode1), 2).PadLeft(16, '0');
             var arr1 = binSW1.ToArray();
             var arr2 = binSW2.ToArray();
             var arr3 = binFc.ToArray();
 
-            for (int i = 0; i <= arr1.Length; i++)
+            var AgvError = Settings.agvError.Where(a => a.agvNo.Contains(agvNo)).FirstOrDefault();
+            if (AgvError != null)
             {
-                if (arr1[i] == '1')
+                for (int i = 0; i <= arr1.Length; i++)
                 {
-                    var ErrorInfo = Settings.agvErrorCode1.Where(a => a.ErrorCode == i).FirstOrDefault();
-                    if (ErrorInfo != null)
+                    if (arr1[i] == '1')
                     {
-                        result = result + "," + $"{ErrorInfo.ErrorInfo}";
-                    }
+                        var ErrorInfo = AgvError.AgvErrorCode1.Find(a => a.ErrorCode == i);
+                        if (ErrorInfo != null)
+                        {
+                            result = result + "," + $"{ErrorInfo.ErrorInfo}";
+                        }
 
+                    }
+                }
+                for (int i = 0; i <= arr2.Length; i++)
+                {
+                    if (arr1[i] == '1')
+                    {
+                        var ErrorInfo = AgvError.AgvErrorCode2.Find(a => a.ErrorCode == i);
+                        if (ErrorInfo != null)
+                        {
+                            result = result + "," + $"{ErrorInfo.ErrorInfo}";
+                        }
+
+                    }
+                }
+                for (int i = 0; i <= arr3.Length; i++)
+                {
+                    if (arr1[i] == '1')
+                    {
+                        var ErrorInfo = AgvError.AgvFaildCode.Find(a => a.ErrorCode == i);
+                        if (ErrorInfo != null)
+                        {
+                            result = result + "," + $"{ErrorInfo.ErrorInfo}";
+                        }
+
+                    }
                 }
             }
-            for (int i = 0; i <= arr2.Length; i++)
+            else
             {
-                if (arr1[i] == '1')
-                {
-                    var ErrorInfo = Settings.agvErrorCode2.Where(a => a.ErrorCode == i).FirstOrDefault();
-                    if (ErrorInfo != null)
-                    {
-                        result = result + "," + $"{ErrorInfo.ErrorInfo}";
-                    }
 
-                }
-            }
-            for (int i = 0; i <= arr3.Length; i++)
-            {
-                if (arr1[i] == '1')
-                {
-                    var ErrorInfo = Settings.agvFaildCode.Where(a => a.ErrorCode == i).FirstOrDefault();
-                    if (ErrorInfo != null)
-                    {
-                        result = result + "," + $"{ErrorInfo.ErrorInfo}";
-                    }
-
-                }
             }
             return result;
         }
@@ -2701,7 +2886,7 @@
         /// <param name="level">鐗╂枡绛夌骇</param>
         /// <param name="powderType">鏈哄瀷</param>
         /// <returns></returns>
-        internal static Location 
+        internal static Location
             airlift(string areacode, string itemcode, string level, string powderType)
         {
             var db = new SqlHelper<object>().GetInstance();
@@ -2844,18 +3029,18 @@
             {
                 if (string.IsNullOrEmpty(cntrType))
                 {
-                    End = db.Queryable<Location>().Where(a => a.S_AREA_CODE.Trim() == jtcode.Trim()  && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃�).First();
+                    End = db.Queryable<Location>().Where(a => a.S_AREA_CODE.Trim() == jtcode.Trim() && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃�).First();
                 }
                 else
                 {
                     End = db.Queryable<Location>().Where(a => a.S_AREA_CODE.Trim() == jtcode.Trim() && a.S_NOTE == cntrType && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃�).First();
                 }
-                  
+
                 if (End == null)
                 {
                     LogHelper.Info($"Computeloc==銆嬫牴鎹満鍙板垎缁勶細{jtcode},宸ヨ绫诲瀷锛歿cntrType} 鏈壘鍒扮┖璐т綅鏁版嵁锛岃妫�煡璐т綅琛�);
                 }
-               
+
             }
             return End;
         }

--
Gitblit v1.9.1