From d66d362ee6d76f02331e56df1fdec1c2114c9f3e Mon Sep 17 00:00:00 2001
From: zxx <Zxx@HanInfo>
Date: 星期三, 16 七月 2025 17:31:41 +0800
Subject: [PATCH] 1

---
 HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/process/TaskProcess.cs |  334 ++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 300 insertions(+), 34 deletions(-)

diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/process/TaskProcess.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/process/TaskProcess.cs
index 943814b..6e250bf 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/process/TaskProcess.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.XiaoMi/process/TaskProcess.cs
@@ -29,6 +29,7 @@
 using System.Threading.Tasks;
 using HH.WCS.XiaoMi.LISTA.dispatch;
 using static HH.WCS.XiaoMi.LISTA.dispatch.RcsHelper;
+using System.Diagnostics;
 
 namespace HH.WCS.XiaoMi.process
 {
@@ -124,8 +125,8 @@
                 CacheBitCancelUpdate(mst);
                 ////灏忕背璁㈠崟鍙栨秷
                 //CancelModel cancelModel = new CancelModel();
-                //cancelModel.order_id = mst.S_WORKSHOP_NO;
-                //cancelModel.order_command_type_id = "2";
+                //cancelModel.order_name = mst.S_CODE;
+                //cancelModel.order_command_type_id = 2;
                 //RcsHelper.CancelOrder(cancelModel);
 
             }
@@ -386,7 +387,7 @@
                         model.order_name = mst.S_CODE;
                         model.priority = 1;
                         model.dead_line = DateTime.Now.ToString();
-                        model.ts_name = mst.S_TYPE;
+                        model.ts_name = "p2p";
                         model.parameters = parme;
                         //model.parameters = new AntsParasModel { 
                         //    src = mst.S_START_LOC,
@@ -524,7 +525,10 @@
                 result = true;
                 //浠诲姟鍒涘缓鎴愬姛锛岃捣鐐硅揣浣嶅嚭搴撻攣瀹氾紝缁堢偣璐т綅鍏ュ簱閿佸畾
                 LocationHelper.LockLoc(start, 2);
-                LocationHelper.LockLoc(end, 1);
+                if (end!=null&& end != "")
+                {
+                    LocationHelper.LockLoc(end, 1);
+                }
             }
             return result;
         }
@@ -857,7 +861,7 @@
 
 
         /// <summary>
-        /// 鍑哄簱绠楁硶
+        /// 鍑哄簱绠楁硶 鍏堣繘鍏堝嚭
         /// </summary>
         /// <param name="area">搴撳尯</param>
         /// <returns></returns>
@@ -896,6 +900,108 @@
                 LogHelper.Error("OutWorkTransport:" + ex.Message, ex);
             }
             return result;
+        }
+
+        /// <summary>
+        /// 灏忕背鍑哄簱绠楁硶 鍏堣繘鍏堝嚭
+        /// </summary>
+        /// <param name="area">搴撳尯</param>
+        /// <returns></returns>
+        public static Location OutWorkTransportXm(string area, string issueMode)
+        {
+            Location result = null;
+            try
+            {
+                var db = new SqlHelper<Object>().GetInstance();
+
+                // 鑾峰彇鎵�湁绗﹀悎鏉′欢鐨勮揣浣�+                var query = db.Queryable<Location>().Where(a => a.S_AREA_CODE == area);
+
+                // 鏍规嵁鍙戞枡鏂瑰紡搴旂敤涓嶅悓鐨勭瓫閫夊拰鎺掑簭閫昏緫
+                switch (issueMode)
+                {
+                    case "9": // 鍙戞弧绠憋紝鏁伴噺澶т簬0鐨勫厛杩涘厛鍑�+                        query = query.Where(a => a.N_CURRENT_NUM > 0);
+                        var list9 = query.ToList()
+                            .OrderBy(s => s.T_CREATE) // 鍏堣繘鍏堝嚭
+                            .ToList();
+                        result = GetFirstAvailableLocation(list9);
+                        break;
+
+                    case "0": // 鍙戠┖绠憋紝鏁伴噺=0鐨勫厛杩涘厛鍑�+                        query = query.Where(a => a.N_CURRENT_NUM == 0);
+                        var list0 = query.ToList()
+                            .OrderBy(s => s.T_CREATE) // 鍏堣繘鍏堝嚭
+                            .ToList();
+                        result = GetFirstAvailableLocation(list0);
+                        break;
+
+                    case "8": // 绠卞瓙鍨嬪彿浼樺厛绾э細娈嬬>绌虹锛堟畫鍐呰‖锛�婊$>绌虹>绌虹锛堟弧鍐呰‖锛�鍏跺畠
+                        var list8 = query.ToList()
+                            .OrderBy(s => GetBoxTypePriority(s,new[] { "2", "4", "1", "3", "5" })) // 鎸夋寚瀹氫紭鍏堢骇鎺掑簭
+                            .ThenBy(s => s.T_CREATE) // 鐩稿悓浼樺厛绾ф寜鍏堣繘鍏堝嚭
+                            .ToList();
+                        result = GetFirstAvailableLocation(list8);
+                        break;
+
+                    case "1": // 绠卞瓙鍨嬪彿浼樺厛绾э細娈嬬>绌虹锛堟畫鍐呰‖锛�绌虹>绌虹锛堟弧鍐呰‖锛�婊$>鍏跺畠
+                        var list1 = query.ToList()
+                            .OrderBy(s => GetBoxTypePriority(s,new[] { "2", "4", "3", "5", "1" })) // 鎸夋寚瀹氫紭鍏堢骇鎺掑簭
+                            .ThenBy(s => s.T_CREATE) // 鐩稿悓浼樺厛绾ф寜鍏堣繘鍏堝嚭
+                            .ToList();
+                        result = GetFirstAvailableLocation(list1);
+                        break;
+
+                    default: // 涓嶅~-鎸夊厛杩涘厛鍑�+                        var listDefault = query.ToList()
+                            .OrderBy(s => s.T_CREATE) // 鍏堣繘鍏堝嚭
+                            .ToList();
+                        result = GetFirstAvailableLocation(listDefault);
+                        break;
+                }
+            }
+            catch (Exception ex)
+            {
+                Console.WriteLine("OutWorkTransport:" + ex.Message + ex.StackTrace);
+                LogHelper.Error("OutWorkTransport:" + ex.Message, ex);
+            }
+            return result;
+        }
+
+        // 杈呭姪鏂规硶锛氭牴鎹瀛愬瀷鍙疯幏鍙栦紭鍏堢骇
+        private static int GetBoxTypePriority(Location location, string[] priorityOrder)
+        {
+            var db = new SqlHelper<Object>().GetInstance();
+            var locCntrRel = db.Queryable<LocCntrRel>().Where(s => s.S_LOC_CODE == location.S_CODE).First();
+            if (locCntrRel != null)
+            {
+                var container = db.Queryable<Container>().Where(c => c.S_CODE == locCntrRel.S_CNTR_CODE).First();
+                if (container != null)
+                {
+                    // 鏌ユ壘绠卞瓙鍨嬪彿鍦ㄤ紭鍏堢骇鏁扮粍涓殑浣嶇疆
+                    var index = Array.IndexOf(priorityOrder, container.S_SPEC);
+                    return index >= 0 ? index : priorityOrder.Length; // 涓嶅湪浼樺厛绾у垪琛ㄤ腑鐨勬帓鍦ㄦ渶鍚�+                }
+            }
+            return priorityOrder.Length; // 娌℃湁鍏宠仈瀹瑰櫒鐨勬帓鍦ㄦ渶鍚�+        }
+
+        // 杈呭姪鏂规硶锛氳幏鍙栫涓�釜鍙敤鐨勮揣浣�+        private static Location GetFirstAvailableLocation(List<Location> locations)
+        {
+            var db = new SqlHelper<Object>().GetInstance();
+            foreach (var location in locations)
+            {
+                if (location.N_LOCK_STATE == 0) // 鍒ゆ柇璐т綅鏄惁琚攣浣�+                {
+                    var locCntrRel = db.Queryable<LocCntrRel>().Where(s => s.S_LOC_CODE == location.S_CODE).First();
+                    if (locCntrRel != null) // 鍒ゆ柇鏄惁鏈夋墭鐩�+                    {
+                        return location;
+                    }
+                }
+            }
+            return null;
         }
         /// <summary>
         /// WMS鍑哄簱杞繍
@@ -1020,6 +1126,15 @@
                 var startLoc = new Location();
                 string endLocStr = null;
                 string Message = null;
+                //鏍¢獙浠诲姟缂栧彿鏄惁瀛樺湪
+                if (repeatTaskCode(model.order_name))
+                {
+                    Message = model.order_name+"浠诲姟缂栧彿宸插瓨鍦�;
+                    return new TaskResponse
+                    {
+                        header = new ResponseHead { code = 0, desc = Message }
+                    };
+                }
                 switch (model.ts_name)
                 {
                     case "p2p":
@@ -1027,6 +1142,10 @@
                         if (startLoc == null || startLoc.N_LOCK_STATE != 0 || startLoc.C_ENABLE != "Y")
                         {
                             Message = $"{model.parameters.src}搴撲綅宸茶閿佸畾!";
+                            return new TaskResponse
+                            {
+                                header = new ResponseHead { code = 0, desc = Message }
+                            };
                         }
                         endLocStr = model.parameters.dst;
 
@@ -1036,6 +1155,10 @@
                         if (startLoc == null || startLoc.N_LOCK_STATE != 0 || startLoc.C_ENABLE != "Y")
                         {
                             Message = $"{model.parameters.src}搴撲綅宸茶閿佸畾!";
+                            return new TaskResponse
+                            {
+                                header = new ResponseHead { code = 0, desc = Message }
+                            };
                         }
                         var endLoc = InWorkTransport(model.parameters.dst_area);
                         if (endLoc == null)
@@ -1046,19 +1169,27 @@
                         }
                         break;
                     case "a2p":
-                        startLoc = OutWorkTransport(model.parameters.src_area);
+                        startLoc = OutWorkTransportXm(model.parameters.src_area, model.parameters.issueMode);
                         if (startLoc == null)
                         {
                             Message = $"{model.parameters.dst}搴撳尯娌℃湁鍙嚭璐т綅!";
+                            return new TaskResponse
+                            {
+                                header = new ResponseHead { code = 0, desc = Message }
+                            };
                         }
 
                         endLocStr = model.parameters.dst;
                         break;
                     case "a2a":
-                        startLoc = OutWorkTransport(model.parameters.src_area);
+                        startLoc = OutWorkTransportXm(model.parameters.src_area,model.parameters.issueMode);
                         if (startLoc == null)
                         {
                             Message = $"{model.parameters.src}搴撳尯娌℃湁鍙嚭璐т綅!";
+                            return new TaskResponse
+                            {
+                                header = new ResponseHead { code = 0, desc = Message }
+                            };
                         }
                         var endLoc1 = InWorkTransport(model.parameters.dst_area);
                         if (endLoc1 == null)
@@ -1069,10 +1200,26 @@
                         }
                         break;
                     case "p2u":
-                        startLoc = OutWorkTransport(model.parameters.src);
+                        startLoc = db.Queryable<Location>().Where(a => a.S_CODE == model.parameters.src).First();
+                        if (startLoc == null || startLoc.N_LOCK_STATE != 0 || startLoc.C_ENABLE != "Y")
+                        {
+                            Message = $"{model.parameters.src}搴撲綅宸茶閿佸畾!";
+                            return new TaskResponse
+                            {
+                                header = new ResponseHead { code = 0, desc = Message }
+                            };
+                        }
+                        endLocStr = "";
+                        break;
+                    case "a2u":
+                        startLoc = OutWorkTransportXm(model.parameters.src, model.parameters.issueMode);
                         if (startLoc == null)
                         {
                             Message = $"{model.parameters.src}搴撳尯娌℃湁鍙嚭璐т綅!";
+                            return new TaskResponse
+                            {
+                                header = new ResponseHead { code = 0, desc = Message }
+                            };
                         }
                         endLocStr = "";
                         break;
@@ -1082,29 +1229,14 @@
                 //鍒涘缓鎵樼洏璐т綅缁戝畾鍏崇郴
                 string trayCode = ContainerHelper.GenerateCntrNo();
                 //缁戝畾璧风偣璐т綅(浜х嚎)鍜岀墿鏂�-                ContainerHelper.BindLocCntrsXm(startLoc.S_CODE, trayCode, model.parameters.sku, "", model.parameters.BatchNo, model.parameters.issueMode, model.parameters.num);
+                ContainerHelper.BindLocCntrsXm(startLoc.S_CODE, trayCode, model.parameters.sku, "", model.parameters.BatchNo, model.parameters.issueMode, model.parameters.num, model.parameters.boxType);
 
                 var locCntrRel = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startLoc.S_CODE).First();
                 //鍒涘缓浠诲姟
                 LogHelper.Info($"鍒涘缓浠诲姟 璧风偣:{startLoc.S_CODE}缁堢偣:{endLocStr}", "澶т欢");
                 var res = TaskProcess.CreateTransportDj(startLoc.S_CODE, endLocStr, "澶т欢", locCntrRel.S_CNTR_CODE, model.order_name, 1, 1);
-                if (!res)
-                {
-                    return new TaskResponse
-                    {
-                        header = new ResponseHead { code = 1, desc = Message }
-                    };
-
-                }
                 var result = new TaskResponse();
-                if (Message != null)
-                {
-                    result = new TaskResponse
-                    {
-                        header = new ResponseHead { code = 0, desc = Message }
-                    };
-                }
-                else
+                if (res)
                 {
                     result = new TaskResponse
                     {
@@ -1113,10 +1245,17 @@
                         {
                             msg = "success",
                             app_name = "Guozi client",
-                            data = new List<ResponseData> { new ResponseData { in_order_id = model.taskID } },
+                            data = new List<ResponseData> { new ResponseData { in_order_id = model.order_name } },
                             version = ""
                         }
                     };
+                }
+                else {
+                    Message = $"鍒涘缓浠诲姟 璧风偣:{startLoc.S_CODE}缁堢偣:{endLocStr}澶辫触";
+                    result = new TaskResponse
+                    {
+                        header = new ResponseHead { code = 0, desc = Message }
+                    }; 
                 }
                 return result;
 
@@ -1155,6 +1294,15 @@
                     
                     //鎵緋2a鐨勪换鍔$紪鐮�                     var order_name = model.taskList.Find(s=>s.ts_name=="p2a").order_name;
+                    //鏍¢獙浠诲姟缂栧彿鏄惁瀛樺湪
+                    if (repeatTaskCode(order_name))
+                    {
+                        Message = order_name + "浠诲姟缂栧彿宸插瓨鍦�;
+                        return new TaskResponse
+                        {
+                            header = new ResponseHead { code = 0, desc = Message }
+                        };
+                    }
                     //鍒涘缓浠诲姟
                     LogHelper.Info($"鍒涘缓浠诲姟 璧风偣:{startLoc.S_CODE}缁堢偣:{endLoc.S_CODE}", "灏忎欢閫氱敤杞﹀瀷");
                     var res = TaskProcess.CreateTransportDj(startLoc.S_CODE, endLoc.S_CODE, "灏忎欢閫氱敤杞﹀瀷", model.rackNumber, order_name, 1, 1);
@@ -1162,15 +1310,25 @@
                     {
                         return new TaskResponse
                         {
-                            header = new ResponseHead { code = 0, desc = "鑷姩涓婄嚎浠诲姟鍒涘缓澶辫触" }
+                            header = new ResponseHead { code = 0, desc = $"鍒涘缓浠诲姟 璧风偣:{startLoc.S_CODE}缁堢偣:{endLoc.S_CODE}澶辫触" }
                         };
                     }
                 }
+                var result = new TaskResponse();
                 //鏂欐灦涓婄殑鎵樼洏鍒版寚瀹氱殑宸ヤ綅
                 foreach (var tasklist in model.taskList)
                 {
                     if (tasklist.ts_name == "p2p")
                     {
+                        //鏍¢獙浠诲姟缂栧彿鏄惁瀛樺湪
+                        if (repeatTaskCode(tasklist.order_name))
+                        {
+                            Message = tasklist.order_name + "浠诲姟缂栧彿宸插瓨鍦�;
+                            return new TaskResponse
+                            {
+                                header = new ResponseHead { code = 0, desc = Message }
+                            };
+                        }
                         //鍏堢粦瀹氭枡鏋跺拰鏂欑浣�                         ContainerHelper.BindLocCntrsXmLj(tasklist.rackPosition, model.rackNumber);
 
@@ -1187,24 +1345,133 @@
                         //鍒涘缓鎵樼洏璐т綅缁戝畾鍏崇郴
                         string trayCode = ContainerHelper.GenerateCntrNo();
                         //缁戝畾璧风偣璐т綅(浜х嚎)鍜岀墿鏂�-                        ContainerHelper.BindLocCntrsXm(startloc.S_CODE, trayCode, tasklist.parameters.sku, "", tasklist.parameters.BatchNo, tasklist.parameters.issueMode, tasklist.parameters.num);
+                        ContainerHelper.BindLocCntrsXm(startloc.S_CODE, trayCode, tasklist.parameters.sku, "", tasklist.parameters.BatchNo, tasklist.parameters.issueMode, tasklist.parameters.num,"");
 
                         var locCntrRel = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startloc.S_CODE).First();
                         //鍒涘缓浠诲姟
                         LogHelper.Info($"鍒涘缓浠诲姟 璧风偣:{startloc.S_CODE}缁堢偣:{endlocstr}", "inbound");
                         var res = TaskProcess.CreateTransportDj(startloc.S_CODE, endlocstr, "inbound", locCntrRel.S_CNTR_CODE, tasklist.order_name, 1, 1);
-                        if (!res)
+                        
+                        if (res)
                         {
-                            return new TaskResponse
+                            result = new TaskResponse
                             {
-                                header = new ResponseHead { code = 1, desc = Message }
+                                header = new ResponseHead { code = 200, desc = "SUCCESS" },
+                                body = new ResponseBody
+                                {
+                                    msg = "success",
+                                    app_name = "Guozi client",
+                                    data = new List<ResponseData> { new ResponseData { in_order_id = tasklist.order_name } },
+                                    version = ""
+                                }
                             };
-
+                        }
+                        else
+                        {
+                            Message = $"鍒涘缓浠诲姟 璧风偣:{startloc.S_CODE}缁堢偣:{endlocstr}澶辫触";
+                            result = new TaskResponse
+                            {
+                                header = new ResponseHead { code = 0, desc = Message }
+                            };
                         }
 
                     }
 
                 }
+                return result;
+            }
+            catch (Exception ex)
+            {
+                Console.WriteLine("smallMaterial:" + ex.Message + ex.StackTrace);
+                LogHelper.Error("smallMaterial:" + ex.Message, ex);
+                throw;
+            }
+        }
+        //浠诲姟鍙烽噸澶嶅垽鏂�+        private static bool repeatTaskCode(string orderName) {
+            var db = new SqlHelper<WCSTask>().GetInstance();
+            var result = db.Queryable<WCSTask>().Where(a => a.S_CODE == orderName).Count();
+            return result > 0;
+
+        }
+
+        //浼犳劅鍣ㄥ皬浠�+        public static TaskResponse sensorSmallMaterial(sensorSmallMaterial model)
+        {
+            var db = new SqlHelper<Location>().GetInstance();
+            try
+            {
+                string Message = null;
+
+
+
+                ////鎷嗗垎鎴愪袱鏉′换鍔★紝涓�潯鏄枡鏋跺埌鎸囧畾鐨勭紦瀛樺尯锛屼簩鏄枡鏋朵笂鐨勬墭鐩樺埌鎸囧畾鐨勫伐浣嶏紙灏忕背wcs浼狅級涓�澶�+                //var startLoc = db.Queryable<Location>().Where(a => a.S_CODE == model.taskList[0].parameters.src).First();
+                //if (startLoc == null || startLoc.N_LOCK_STATE != 0)
+                //{
+                //    return new TaskResponse
+                //    {
+                //        header = new ResponseHead { code = 0, desc = $"{model.taskList[0].parameters.src}搴撲綅宸茶閿佸畾!" }
+                //    };
+                //}
+                //var endLoc = TaskProcess.InWorkTransport(model.shippingRoute);
+                //if (endLoc != null)
+                //{
+                //    ////鍒涘缓鍒扮紦瀛樺尯浠诲姟
+                //    //var locCntrRel = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startLoc.S_CODE).First();
+
+                //    //鎵緋2a鐨勪换鍔$紪鐮�+                //    var order_name = model.taskList.Find(s => s.ts_name == "p2a").order_name;
+                //    //鍒涘缓浠诲姟
+                //    LogHelper.Info($"鍒涘缓浠诲姟 璧风偣:{startLoc.S_CODE}缁堢偣:{endLoc.S_CODE}", "灏忎欢閫氱敤杞﹀瀷");
+                //    var res = TaskProcess.CreateTransportDj(startLoc.S_CODE, endLoc.S_CODE, "灏忎欢閫氱敤杞﹀瀷", model.rackNumber, order_name, 1, 1);
+                //    if (!res)
+                //    {
+                //        return new TaskResponse
+                //        {
+                //            header = new ResponseHead { code = 0, desc = "鑷姩涓婄嚎浠诲姟鍒涘缓澶辫触" }
+                //        };
+                //    }
+                //}
+                ////鏂欐灦涓婄殑鎵樼洏鍒版寚瀹氱殑宸ヤ綅
+                //foreach (var tasklist in model.taskList)
+                //{
+                //    if (tasklist.ts_name == "p2p")
+                //    {
+                //        //鍏堢粦瀹氭枡鏋跺拰鏂欑浣�+                //        ContainerHelper.BindLocCntrsXmLj(tasklist.rackPosition, model.rackNumber);
+
+                //        var startloc = db.Queryable<Location>().Where(a => a.S_CODE == tasklist.rackPosition).First();
+                //        if (startloc == null || startloc.N_LOCK_STATE != 0)
+                //        {
+                //            return new TaskResponse
+                //            {
+                //                header = new ResponseHead { code = 0, desc = $"{startloc.S_CODE}搴撲綅宸茶閿佸畾!" }
+                //            };
+                //        }
+                //        var endlocstr = tasklist.parameters.dst;
+
+                //        //鍒涘缓鎵樼洏璐т綅缁戝畾鍏崇郴
+                //        string trayCode = ContainerHelper.GenerateCntrNo();
+                //        //缁戝畾璧风偣璐т綅(浜х嚎)鍜岀墿鏂�+                //        ContainerHelper.BindLocCntrsXm(startloc.S_CODE, trayCode, tasklist.parameters.sku, "", tasklist.parameters.BatchNo, tasklist.parameters.issueMode, tasklist.parameters.num);
+
+                //        var locCntrRel = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startloc.S_CODE).First();
+                //        //鍒涘缓浠诲姟
+                //        LogHelper.Info($"鍒涘缓浠诲姟 璧风偣:{startloc.S_CODE}缁堢偣:{endlocstr}", "inbound");
+                //        var res = TaskProcess.CreateTransportDj(startloc.S_CODE, endlocstr, "inbound", locCntrRel.S_CNTR_CODE, tasklist.order_name, 1, 1);
+                //        if (!res)
+                //        {
+                //            return new TaskResponse
+                //            {
+                //                header = new ResponseHead { code = 1, desc = Message }
+                //            };
+
+                //        }
+
+                //    }
+
+                //}
                 var result = new TaskResponse();
                 if (Message != null)
                 {
@@ -1222,7 +1489,7 @@
                         {
                             msg = "success",
                             app_name = "Guozi client",
-                            data = new List<ResponseData> { new ResponseData { in_order_id = model.taskList[0].taskID } },
+                            data = new List<ResponseData> { new ResponseData { in_order_id = model.taskID } },
                             version = ""
                         }
                     };
@@ -1239,7 +1506,6 @@
                 throw;
             }
         }
-
 
 
     }

--
Gitblit v1.9.1