From 470d5135f9cb53898e167eeb4c7f74a80bb5f4dc Mon Sep 17 00:00:00 2001
From: cjs <2216046164@qq.com>
Date: 星期二, 24 六月 2025 17:30:16 +0800
Subject: [PATCH] 111

---
 HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs |  257 +++++++++++++++++++++++++++------------------------
 1 files changed, 137 insertions(+), 120 deletions(-)

diff --git a/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs b/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs
index 84f4f6a..e604cac 100644
--- a/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs
+++ b/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs
@@ -1285,127 +1285,136 @@
             if (action)
             {
                 //鐡剁洊搴撳尯锛屼袱灞傚瘑闆嗗瀷搴撳尯  绌烘弧鍦ㄥ悓涓�釜搴撳尯锛岄渶瑕佸尯鍒嗕笉鍚屾帓
-                var areaInfo = Settings.areaInfos.Where(a => a.areaName == areaName && a.enable == 1).First();
-                if (areaInfo != null)
+                var areaInfo = Settings.areaInfos.Where(a => a.areaName.Contains(areaName) && a.enable == 1).OrderBy(a => a.pri).ToList();
+                if (areaInfo.Count > 0)
                 {
-                    //搴撳尯璐т綅绾﹀畾锛氬垪鍙疯秺灏忚秺闈犻噷
-                    LogHelper.Info($"鍏ュ簱绠楁硶01:area锛歿areaInfo.areaCode},itemCode:{itemCode}");
-                    try
+                    foreach(var it in areaInfo)
                     {
-                        if (result == null)
+                        //搴撳尯璐т綅绾﹀畾锛氬垪鍙疯秺灏忚秺闈犻噷
+                        LogHelper.Info($"鍏ュ簱绠楁硶01:area锛歿it.areaCode},itemCode:{itemCode}");
+                        try
                         {
-                            var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0).OrderBy(a => a.N_ROW).OrderByDescending(a => a.N_COL)
-                                .PartitionBy(a => a.N_ROW).Take(1)
-                                .ToList();
-                            if (locInfo.Count > 0)
+                            if (result == null)
                             {
-                                LogHelper.Info($"鍏ュ簱绠楁硶02:鏌ヨ鍒板彲鍏ヨ揣浣嶇殑鏁伴噺涓猴細{locInfo.Count}");
-                                foreach (var a in locInfo)
+                                var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == it.areaCode && a.N_CURRENT_NUM > 0).OrderBy(a => a.N_ROW).OrderByDescending(a => a.N_COL)
+                                    .PartitionBy(a => a.N_ROW).Take(1)
+                                    .ToList();
+                                if (locInfo.Count > 0)
                                 {
-                                    LogHelper.Info($"鍏ュ簱绠楁硶03:鏌ヨ璐т綅锛歿a.S_CODE},閿佺姸鎬侊細{a.S_LOCK_STATE}锛屽綋鍓嶆暟閲忥細{a.N_CURRENT_NUM}");
-                                    //鍘绘帀褰撳墠璐т綅鏈夐攣锛屾垨鑰呬负绌烘墭鐨勮揣浣�-                                    if (a.S_LOCK_STATE == "鏃�)
+                                    LogHelper.Info($"鍏ュ簱绠楁硶02:鏌ヨ鍒板彲鍏ヨ揣浣嶇殑鏁伴噺涓猴細{locInfo.Count}");
+                                    foreach (var a in locInfo)
                                     {
-                                        string endItemCode = "";
-                                        var endCntrInfo = db.Queryable<LocCntrRel>().Where(b => b.S_LOC_CODE == a.S_CODE).First();
-                                        if (endCntrInfo != null)
+                                        LogHelper.Info($"鍏ュ簱绠楁硶03:鏌ヨ璐т綅锛歿a.S_CODE},閿佺姸鎬侊細{a.S_LOCK_STATE}锛屽綋鍓嶆暟閲忥細{a.N_CURRENT_NUM}");
+                                        //鍘绘帀褰撳墠璐т綅鏈夐攣锛屾垨鑰呬负绌烘墭鐨勮揣浣�+                                        if (a.S_LOCK_STATE == "鏃�)
                                         {
-                                            var endItemInfo = db.Queryable<CntrItemRel>().Where(b => b.S_CNTR_CODE == endCntrInfo.S_CNTR_CODE).First();
-                                            if (endItemInfo != null)
+                                            string endItemCode = "";
+                                            var endCntrInfo = db.Queryable<LocCntrRel>().Where(b => b.S_LOC_CODE == a.S_CODE).First();
+                                            if (endCntrInfo != null)
                                             {
-                                                endItemCode = endItemInfo.S_ITEM_CODE;
-                                            }
-                                        }
-                                        else
-                                        {
-                                            LogHelper.Info($"缁堢偣璐т綅鏈粦瀹氭墭鐩樹俊鎭�);
-                                            continue;
-                                        }
-                                        LogHelper.Info($"鍏ュ簱绠楁硶04:鏌ヨ鍒板綋鍓嶈揣浣嶇粦瀹氱殑鐗╂枡缂栫爜涓�{endItemCode}");
-                                        //鍒ゆ柇鏄惁鍜屽綋鍓嶈揣浣嶇殑鐗╂枡缂栫爜鐩稿悓
-                                        if (itemCode == endItemCode)
-                                        {
-                                            //鏌ヨ褰撳墠鎺掓槸鍚﹀彲鍏ワ紙鍒ゆ柇鏄槸鍚︽湁鍏ュ簱閿佸拰鍑哄簱閿侊級
-                                            var lockInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == a.S_AREA_CODE && b.N_ROW == a.N_ROW && (b.S_LOCK_STATE == "鍏ュ簱閿� || b.S_LOCK_STATE == "鍑哄簱閿�)).First();
-                                            if (lockInfo == null)
-                                            {
-                                                //褰撳墠鎺掓棤浠诲姟
-                                                if (a.N_CURRENT_NUM < a.N_CAPACITY) result = a;
-                                                else
+                                                var endItemInfo = db.Queryable<CntrItemRel>().Where(b => b.S_CNTR_CODE == endCntrInfo.S_CNTR_CODE).First();
+                                                if (endItemInfo != null)
                                                 {
-                                                    //鏌ヨ鍚庨潰褰撳墠璐т綅鍚庝竴涓�-                                                    result = db.Queryable<Location>().Where(b => b.S_AREA_CODE == a.S_AREA_CODE && b.N_ROW > a.N_ROW && b.S_LOCK_STATE == "鏃�).OrderBy(b => b.N_COL).First();
-                                                }
-                                                if (result != null)
-                                                {
-                                                    break;
+                                                    endItemCode = endItemInfo.S_ITEM_CODE;
                                                 }
                                             }
                                             else
                                             {
-                                                LogHelper.Info($"鍏ュ簱绠楁硶05:鏌ヨ鍒板綋鍓嶆帓鏈夐攣锛屾帓鍙凤細{a.N_ROW}");
-
+                                                LogHelper.Info($"缁堢偣璐т綅鏈粦瀹氭墭鐩樹俊鎭�);
+                                                continue;
                                             }
-                                        }
-                                    }
-                                }
-                            }
-                            else
-                            {
-                                LogHelper.Info($"鍏ュ簱绠楁硶02:鏈煡璇㈠埌鍙叆璐т綅");
-                            }
-                            if (result == null)
-                            {
-                                //todo 杩橀渶瑕佸垽鏂攣
-                                #region 鏌ユ壘鎵�湁鏁伴噺鏄┖鐨勬帓
-                                LogHelper.Info($"鍏ュ簱绠楁硶06:鏃犲彲鐢ㄨ揣浣嶏紝鑾峰彇绌烘帓璐т綅銆�, "WMSAlgoRithm");
-                                //2.0 绠�寲鏌ヨ鍙煡姣忎竴鎺掔涓�垪
-                                var list = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode).OrderBy(a => a.N_ROW).OrderBy(a => a.N_COL).PartitionBy(a => a.N_ROW).ToList().Where(a => a.N_CURRENT_NUM == 0).ToList();
-                                //2.1 閫変竴涓┖鎺�-                                if (list.Count > 0)
-                                {
-                                    LogHelper.Info($"鍏ュ簱绠楁硶06:鏃犲彲鐢ㄨ揣浣嶏紝鑾峰彇绌烘帓璐т綅鏁伴噺涓猴細{list.Count}銆�, "WMSAlgoRithm");
-                                    for (int i = 0; i < list.Count; i++)
-                                    {
-                                        LogHelper.Info($"鍏ュ簱绠楁硶07:鑾峰彇绌烘帓璐т綅锛氳揣浣嶇紪鐮侊細{list[i].S_CODE.Trim()},褰撳墠鏁伴噺锛歿list[i].N_CURRENT_NUM},鎺掑彿锛歿list[i].N_ROW},搴撳尯缂栫爜锛歿list[i].S_AREA_CODE.Trim()}", "WMSAlgoRithm");
-                                        if (list[i].S_LOCK_STATE.Trim().Contains("鏃�))
-                                        {
-                                            //浜屾鏍¢獙褰撳墠鎺掓墍鏈夎揣浣嶉兘鏄┖鐨勶紝闃叉绯荤粺鏁版嵁閿欎贡
-                                            int row = list[i].N_ROW;
-                                            string areaCode = list[i].S_AREA_CODE.Trim();
-                                            var lockInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == areaCode && b.N_ROW == row && (b.S_LOCK_STATE == "鍏ュ簱閿� || b.S_LOCK_STATE == "鍑哄簱閿�)).First();
-                                            if (lockInfo == null)
+                                            LogHelper.Info($"鍏ュ簱绠楁硶04:鏌ヨ鍒板綋鍓嶈揣浣嶇粦瀹氱殑鐗╂枡缂栫爜涓�{endItemCode}");
+                                            //鍒ゆ柇鏄惁鍜屽綋鍓嶈揣浣嶇殑鐗╂枡缂栫爜鐩稿悓
+                                            if (itemCode == endItemCode)
                                             {
-                                                var locInfo1 = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaCode && a.N_ROW == row).Select(a => new { sum = SqlFunc.AggregateSum(a.N_CURRENT_NUM) }).First();
-                                                if (locInfo1 != null)
+                                                //鏌ヨ褰撳墠鎺掓槸鍚﹀彲鍏ワ紙鍒ゆ柇鏄槸鍚︽湁鍏ュ簱閿佸拰鍑哄簱閿侊級
+                                                var lockInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == a.S_AREA_CODE && b.N_ROW == a.N_ROW && (b.S_LOCK_STATE == "鍏ュ簱閿� || b.S_LOCK_STATE == "鍑哄簱閿�)).First();
+                                                if (lockInfo == null)
                                                 {
-                                                    LogHelper.Info($"{locInfo1.sum},row:{row}");
-                                                    if (locInfo1.sum == 0)
+                                                    //褰撳墠鎺掓棤浠诲姟
+                                                    if (a.N_CURRENT_NUM < a.N_CAPACITY) result = a;
+                                                    else
                                                     {
-                                                        //绌烘帓
-                                                        result = list[i];
+                                                        //鏌ヨ鍚庨潰褰撳墠璐т綅鍚庝竴涓�+                                                        result = db.Queryable<Location>().Where(b => b.S_AREA_CODE == a.S_AREA_CODE && b.N_ROW > a.N_ROW && b.S_LOCK_STATE == "鏃�).OrderBy(b => b.N_COL).First();
+                                                    }
+                                                    if (result != null)
+                                                    {
                                                         break;
                                                     }
                                                 }
-                                                else LogHelper.Info("鏈壘鍒拌鎺�);
-                                            }
-                                            else
-                                            {
-                                                LogHelper.Info("璇ユ帓鏈夐攣");
+                                                else
+                                                {
+                                                    LogHelper.Info($"鍏ュ簱绠楁硶05:鏌ヨ鍒板綋鍓嶆帓鏈夐攣锛屾帓鍙凤細{a.N_ROW}");
+
+                                                }
                                             }
                                         }
                                     }
                                 }
-                                else LogHelper.Info($"鏈幏鍙栧埌绌烘帓锛屽簱鍖虹紪鐮侊細{areaInfo.areaCode}");
-                                #endregion
+                                else
+                                {
+                                    LogHelper.Info($"鍏ュ簱绠楁硶02:鏈煡璇㈠埌鍙叆璐т綅");
+                                }
+                                if (result == null)
+                                {
+                                    //todo 杩橀渶瑕佸垽鏂攣
+                                    #region 鏌ユ壘鎵�湁鏁伴噺鏄┖鐨勬帓
+                                    LogHelper.Info($"鍏ュ簱绠楁硶06:鏃犲彲鐢ㄨ揣浣嶏紝鑾峰彇绌烘帓璐т綅銆�, "WMSAlgoRithm");
+                                    //2.0 绠�寲鏌ヨ鍙煡姣忎竴鎺掔涓�垪
+                                    var list = db.Queryable<Location>().Where(a => a.S_AREA_CODE == it.areaCode).OrderBy(a => a.N_ROW).OrderBy(a => a.N_COL).PartitionBy(a => a.N_ROW).ToList().Where(a => a.N_CURRENT_NUM == 0).ToList();
+                                    //2.1 閫変竴涓┖鎺�+                                    if (list.Count > 0)
+                                    {
+                                        LogHelper.Info($"鍏ュ簱绠楁硶06:鏃犲彲鐢ㄨ揣浣嶏紝鑾峰彇绌烘帓璐т綅鏁伴噺涓猴細{list.Count}銆�, "WMSAlgoRithm");
+                                        for (int i = 0; i < list.Count; i++)
+                                        {
+                                            LogHelper.Info($"鍏ュ簱绠楁硶07:鑾峰彇绌烘帓璐т綅锛氳揣浣嶇紪鐮侊細{list[i].S_CODE.Trim()},褰撳墠鏁伴噺锛歿list[i].N_CURRENT_NUM},鎺掑彿锛歿list[i].N_ROW},搴撳尯缂栫爜锛歿list[i].S_AREA_CODE.Trim()}", "WMSAlgoRithm");
+                                            if (list[i].S_LOCK_STATE.Trim().Contains("鏃�))
+                                            {
+                                                //浜屾鏍¢獙褰撳墠鎺掓墍鏈夎揣浣嶉兘鏄┖鐨勶紝闃叉绯荤粺鏁版嵁閿欎贡
+                                                int row = list[i].N_ROW;
+                                                string areaCode = list[i].S_AREA_CODE.Trim();
+                                                var lockInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == areaCode && b.N_ROW == row && (b.S_LOCK_STATE == "鍏ュ簱閿� || b.S_LOCK_STATE == "鍑哄簱閿�)).First();
+                                                if (lockInfo == null)
+                                                {
+                                                    var locInfo1 = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaCode && a.N_ROW == row).Select(a => new { sum = SqlFunc.AggregateSum(a.N_CURRENT_NUM) }).First();
+                                                    if (locInfo1 != null)
+                                                    {
+                                                        LogHelper.Info($"{locInfo1.sum},row:{row}");
+                                                        if (locInfo1.sum == 0)
+                                                        {
+                                                            //绌烘帓
+                                                            result = list[i];
+                                                            break;
+                                                        }
+                                                    }
+                                                    else LogHelper.Info("鏈壘鍒拌鎺�);
+                                                }
+                                                else
+                                                {
+                                                    LogHelper.Info("璇ユ帓鏈夐攣");
+                                                }
+                                            }
+                                        }
+                                    }
+                                    else LogHelper.Info($"鏈幏鍙栧埌绌烘帓锛屽簱鍖虹紪鐮侊細{it.areaCode}");
+                                    #endregion
+                                }
+
+                                if(result != null)
+                                {
+                                    break;
+                                }
                             }
                         }
+                        catch (Exception ex)
+                        {
+                            Console.WriteLine("GetLocationIn:" + ex.Message + ex.StackTrace);
+                            LogHelper.Error("GetLocationIn:" + ex.Message, ex);
+                        }
                     }
-                    catch (Exception ex)
-                    {
-                        Console.WriteLine("GetLocationIn:" + ex.Message + ex.StackTrace);
-                        LogHelper.Error("GetLocationIn:" + ex.Message, ex);
-                    }
+                    
                 }
                 else
                 {
@@ -1414,47 +1423,55 @@
             }
             else
             {
-                LogHelper.Info($"鍑哄簱绠楁硶01:area锛歿areaName},itemCode:{itemCode}");
-                var areaInfo = Settings.areaInfos.Where(a => a.areaName == areaName && a.enable == 1).FirstOrDefault();
-                if(areaInfo != null)
+                var areaInfo = Settings.areaInfos.Where(a => a.areaName.Contains(areaName) && a.enable == 1).OrderBy(a => a.pri).ToList();
+                if(areaInfo.Count > 0)
                 {
-                    var locList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0).OrderBy(a => a.N_ROW).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).Includes(a => a.LocCntrRel).ToList();
-                    if(locList.Count > 0)
+                    foreach(var it in areaInfo)
                     {
-                        LogHelper.Info($"鍑哄簱绠楁硶02:鏌ヨ鍒板彲鍑鸿揣浣嶆暟閲忥細{locList.Count}");
-                        foreach (var a in locList)
+                        LogHelper.Info($"鍑哄簱绠楁硶01:area锛歿it.areaName},itemCode:{itemCode}");
+                        var locList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == it.areaCode && a.N_CURRENT_NUM > 0).OrderBy(a => a.N_ROW).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).Includes(a => a.LocCntrRel).ToList();
+                        if (locList.Count > 0)
                         {
-                            LogHelper.Info($"鍑哄簱绠楁硶03:鏌ヨ璐т綅锛歿a.S_CODE},閿佺姸鎬侊細{a.S_LOCK_STATE}");
-                            if (a.S_LOCK_STATE == "鏃�)
+                            LogHelper.Info($"鍑哄簱绠楁硶02:鏌ヨ鍒板彲鍑鸿揣浣嶆暟閲忥細{locList.Count}");
+                            foreach (var a in locList)
                             {
-                                var cntrInfo = db.Queryable<LocCntrRel>().Where(b => b.S_LOC_CODE == a.S_CODE).First();
-                                if(cntrInfo != null)
+                                LogHelper.Info($"鍑哄簱绠楁硶03:鏌ヨ璐т綅锛歿a.S_CODE},閿佺姸鎬侊細{a.S_LOCK_STATE}");
+                                if (a.S_LOCK_STATE == "鏃�)
                                 {
-                                    LogHelper.Info($"鍑哄簱绠楁硶04:褰撳墠璐т綅缁戝畾鐨勬墭鐩樼爜涓猴細{cntrInfo.S_CNTR_CODE}");
-                                    string endItemCode = "";
-                                    var itemInfo = db.Queryable<CntrItemRel>().Where(b => b.S_CNTR_CODE == cntrInfo.S_CNTR_CODE).First();
-                                    if(itemInfo != null && itemInfo.S_ITEM_CODE == itemCode)
+                                    var cntrInfo = db.Queryable<LocCntrRel>().Where(b => b.S_LOC_CODE == a.S_CODE).First();
+                                    if (cntrInfo != null)
                                     {
-                                        endItemCode = itemInfo.S_ITEM_CODE;
-                                    }
-                                    if(endItemCode == itemCode)
-                                    {
-                                        //鍒ゆ柇褰撳墠鎺掓湁鏃犻攣
-                                        var lockInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == areaInfo.areaCode && b.N_ROW == a.N_ROW && (b.S_LOCK_STATE == "鍏ュ簱閿� || b.S_LOCK_STATE == "鍑哄簱閿�)).First();
-                                        if (lockInfo == null)
+                                        LogHelper.Info($"鍑哄簱绠楁硶04:褰撳墠璐т綅缁戝畾鐨勬墭鐩樼爜涓猴細{cntrInfo.S_CNTR_CODE}");
+                                        string endItemCode = "";
+                                        var itemInfo = db.Queryable<CntrItemRel>().Where(b => b.S_CNTR_CODE == cntrInfo.S_CNTR_CODE).First();
+                                        if (itemInfo != null && itemInfo.S_ITEM_CODE == itemCode)
                                         {
-                                            result = a;
-                                            break;
+                                            endItemCode = itemInfo.S_ITEM_CODE;
                                         }
-                                        else
+                                        if (endItemCode == itemCode)
                                         {
-                                            LogHelper.Info($"鍑哄簱绠楁硶05:褰撳墠鎺掓湁閿侊紝璐т綅鍙凤細{lockInfo.S_CODE}");
+                                            //鍒ゆ柇褰撳墠鎺掓湁鏃犻攣
+                                            var lockInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == it.areaCode && b.N_ROW == a.N_ROW && (b.S_LOCK_STATE == "鍏ュ簱閿� || b.S_LOCK_STATE == "鍑哄簱閿�)).First();
+                                            if (lockInfo == null)
+                                            {
+                                                result = a;
+                                                break;
+                                            }
+                                            else
+                                            {
+                                                LogHelper.Info($"鍑哄簱绠楁硶05:褰撳墠鎺掓湁閿侊紝璐т綅鍙凤細{lockInfo.S_CODE}");
+                                            }
                                         }
                                     }
                                 }
                             }
                         }
+                        if(result != null)
+                        {
+                            break;
+                        }
                     }
+                    
                 }
                 else
                 {

--
Gitblit v1.9.1