From b7308bba3d7ffad271ce7fc7a93c8c45d76be87d Mon Sep 17 00:00:00 2001 From: 杨前锦 <1010338399@qq.com> Date: 星期五, 13 六月 2025 17:21:03 +0800 Subject: [PATCH] 优化印尼佳通-硫化胚胎出入库逻辑策略优化 --- HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WMSHelper.cs | 427 ++++++++++++++++++++++++++++++++++++----------------- 1 files changed, 289 insertions(+), 138 deletions(-) diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WMSHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WMSHelper.cs index 5e8905b..da0078c 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WMSHelper.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/wms/WMSHelper.cs @@ -384,121 +384,309 @@ return greenTireInformation; } - /// <summary> + /*/// <summary> /// 鏌ヨ鍏ュ簱缁堢偣璐т綅 + /// 鍏ュ簱绛栫暐锛�+ /// 宸烽亾鍐呭悓瑙勬牸鏁伴噺 灏忎簬 10锛堟殏瀹氾級锛屾寜鐗╂枡鍧囪 璁$畻锛屽鏋滄墍鏈夌殑宸烽亾鍐呭悓瑙勬牸鏁伴噺閮藉ぇ浜�0锛屽垯鎸夌収宸烽亾鍧囪 璁$畻 /// </summary> /// <param name="locNum">1.鍗曡揣浣�2.鍙岃揣浣�/param> /// <returns></returns> - public static EndLocGroup getInStockEndLoc(int locNum) + public static EndLocGroup getInStockEndLoc(int locNum , string itemCode) { var db = new SqlHelper<object>().GetInstance(); EndLocGroup endLocGroup = new EndLocGroup(); List<Location> locations = new List<Location>(); - // 1.鎸夊绉巼浠庡ぇ鍒板皬锛屽宸烽亾杩涜鎺掑簭 - var roadwayOrderList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y") - .GroupBy(a => a.N_ROADWAY) - .Select(a => new { roadway = a.N_ROADWAY , num = SqlFunc.AggregateCount(a.S_CODE)}) - .OrderByDescending(a => a.num) + + List<int> roadwayList = new List<int>(); + + // 1.鎸夊贩閬撹繘琛屽垎缁勶紝鏌ヨ姣忎釜宸烽亾鍐呭悓瑙勬牸鐗╂枡鐨勬暟閲忥紝骞朵粠灏忓埌澶ф帓搴�+ var roadwayItemNumOrderGroup = db.Queryable<Location>() + .LeftJoin<LocCntrRel>((a,b) => a.S_CODE == b.S_LOC_CODE) + .LeftJoin<CntrItemRel>((a,b,c) => b.S_CNTR_CODE == c.S_CNTR_CODE) + .Where((a, b, c) => a.S_AREA_CODE == Settings.stockArea && a.N_CURRENT_NUM == 1 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y" && c.S_ITEM_CODE == itemCode) + .GroupBy((a, b, c) => a.N_ROADWAY) + .Select((a, b, c) => new { roadway = a.N_ROADWAY, num = SqlFunc.AggregateCount(a.S_CODE) }) + .OrderBy(a => a.num) .ToList(); - // 鏌ヨ鍗曡揣浣�- foreach (var order in roadwayOrderList) + roadwayList = roadwayItemNumOrderGroup.Where(a => a.num < 10).OrderBy(a => a.num).Select(a => a.roadway).ToList(); + + // 2.鎸夊贩閬撹繘琛屽垎缁勶紝鏌ヨ姣忎釜宸烽亾绌鸿揣浣嶆暟閲忥紝骞朵粠澶у埌灏忔帓搴�+ if (roadwayList.Count == 0) { - if (locNum == 1) + var roadwayEmptyNumOrderGroup = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y") + .GroupBy(a => a.N_ROADWAY) + .Select(a => new { roadway = a.N_ROADWAY, num = SqlFunc.AggregateCount(a.S_CODE) }) + .OrderByDescending(a => a.num) + .ToList(); + roadwayList = roadwayEmptyNumOrderGroup.Select(a => a.roadway).ToList(); + } + + if (roadwayList.Count > 0) + { + // 鏌ヨ鍗曡揣浣�+ foreach (var roadway in roadwayList) { - /*// 鏌ヨ鎵�湁鐩稿悓鐗╂枡璐т綅 - var sameItemLocList = db.Queryable<Location>() - .LeftJoin<LocCntrRel>((a, b) => a.S_CODE == b.S_LOC_CODE) - .LeftJoin<CntrItemRel>((a, b, c) => b.S_CNTR_CODE == c.S_CNTR_CODE) - .Where((a, b, c) => a.S_AREA_CODE == Settings.stockArea - && a.N_ROADWAY == order.roadway - && a.N_CURRENT_NUM == 1 - && a.N_LOCK_STATE == 0 - && a.C_ENABLE == "Y" - && b.S_CNTR_CODE != null - && c.S_ITEM_CODE == itemCode - ) - .OrderBy((a, b, c) => new { a.N_LAYER, a.N_COL }) - .ToList(); - - // 鏌ヨ鐩稿悓鐗╂枡鐨勫乏鍙虫槸鍚︽湁绌鸿揣浣�- foreach (var loc in sameItemLocList) + if (locNum == 1) { - var leftLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == order.roadway && a.N_ROW == loc.N_ROW && a.N_COL == loc.N_COL - 1 && a.N_LAYER == loc.N_LAYER && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").First(); - if (leftLoc != null) + // 鏌ヨ绌鸿揣浣�+ var emptyLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == roadway && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").OrderBy(a => new { a.N_LAYER, a.N_COL }).First(); + if (emptyLoc != null) { - locations.Add(leftLoc); - break; + locations.Add(emptyLoc); + endLocGroup.endLocList = locations; + return endLocGroup; } + } - var rightLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == order.roadway && a.N_ROW == loc.N_ROW && a.N_COL == loc.N_COL + 1 && a.N_LAYER == loc.N_LAYER && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").First(); - if (rightLoc != null) - { - locations.Add(leftLoc); - break; - } - }*/ - - // 鏌ヨ绌鸿揣浣�- var emptyLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == order.roadway && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").OrderBy(a => new { a.N_LAYER, a.N_COL }).First(); - if (emptyLoc != null) + if (locNum == 2) { - locations.Add(emptyLoc); - endLocGroup.endLocList = locations; - return endLocGroup; + var emptyLocList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == roadway && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").OrderBy(a => new { a.N_LAYER, a.N_COL }).ToList(); + if (emptyLocList.Count > 0) + { + // 浼樺厛鏌ヨ鐩搁偦鍙屾嫋绌鸿揣浣�+ if (locations.Count == 0) + { + foreach (var loc in emptyLocList) + { + // 鏌ヨ鐩搁偦宸︿晶鏄惁鏈夌┖璐т綅 + var leftLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == roadway && a.N_ROW == loc.N_ROW && a.N_COL == loc.N_COL - 1 && a.N_LAYER == loc.N_LAYER && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").First(); + if (leftLoc != null) + { + locations.Add(loc); + locations.Add(leftLoc); + break; + } + + // 鏌ヨ鐩搁偦鍙充晶鏄惁鏈夌┖璐т綅 + var rightLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == roadway && a.N_ROW == loc.N_ROW && a.N_COL == loc.N_COL + 1 && a.N_LAYER == loc.N_LAYER && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").First(); + if (rightLoc != null) + { + locations.Add(loc); + locations.Add(rightLoc); + break; + } + } + } + + if (locations.Count < locNum) + { + // 鏌ヨ涓嶇浉閭荤殑鍗曟嫋璐т綅 + foreach (var loc in emptyLocList) + { + locations.Add(loc); + if (locations.Count == locNum) + { + break; + } + } + } + + if (locations.Count == locNum) + { + endLocGroup.endLocList = locations; + // 鏍¢獙璐т綅鏄惁鏄悓宸烽亾锛屾槸鍒欑敓鎴愪换鍔$粍鍙�+ var groupNum = locations.GroupBy(a => a.N_ROADWAY).Count(); + if (groupNum == 1) + { + endLocGroup.groupNo = WMSHelper.GenerateTaskGroupNo(); + } + return endLocGroup; + } + } } } - - if (locNum == 2) - { - var emptyLocList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == order.roadway && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").OrderBy(a => new { a.N_LAYER, a.N_COL }).ToList(); - - if (emptyLocList.Count > 0) - { - // 鏌ヨ鍙屾嫋绌鸿揣浣�- if (locations.Count == 0) - { - foreach (var loc in emptyLocList) - { - var leftLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == order.roadway && a.N_ROW == loc.N_ROW && a.N_COL == loc.N_COL - 1 && a.N_LAYER == loc.N_LAYER && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").First(); - if (leftLoc != null) - { - locations.Add(loc); - locations.Add(leftLoc); - break; - } - - var rightLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == order.roadway && a.N_ROW == loc.N_ROW && a.N_COL == loc.N_COL + 1 && a.N_LAYER == loc.N_LAYER && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").First(); - if (rightLoc != null) - { - locations.Add(loc); - locations.Add(leftLoc); - break; - } - } - - if (locations.Count == locNum) - { - endLocGroup.groupNo = WMSHelper.GenerateTaskGroupNo(); - endLocGroup.endLocList = locations; - return endLocGroup; - } - } - - // 鏌ヨ鍗曟嫋璐т綅 - foreach (var loc in emptyLocList) - { - locations.Add(loc); - if (locations.Count == locNum) - { - endLocGroup.endLocList = locations; - return endLocGroup; - } - } - } - } } return endLocGroup; + }*/ + + /// <summary> + /// 鏌ヨ鍏ュ簱缁堢偣璐т綅 + /// 鍏ュ簱绛栫暐锛�+ /// 宸烽亾鍐呭悓瑙勬牸鏁伴噺 灏忎簬 10锛堟殏瀹氾級锛屾寜鐗╂枡鍧囪 璁$畻锛屽鏋滄墍鏈夌殑宸烽亾鍐呭悓瑙勬牸鏁伴噺閮藉ぇ浜�0锛屽垯鎸夌収宸烽亾鍧囪 璁$畻 + /// </summary> + /// <param name="locNum"></param> + /// <param name="itemCode"></param> + /// <returns></returns> + public static EndLocGroup getInStockEndLoc(int locNum, string itemCode) + { + var db = new SqlHelper<object>().GetInstance(); + EndLocGroup endLocGroup = new EndLocGroup { endLocList = new List<Location>() }; + + // 1. 鑾峰彇鍊欓�宸烽亾鍒楄〃锛堢墿鏂欏潎琛℃垨宸烽亾鍧囪 锛�+ var candidateRoadways = GetCandidateRoadways(db, itemCode); + if (candidateRoadways.Count == 0) return endLocGroup; + + // 2. 澶勭悊鍗曡揣浣嶅叆搴�+ if (locNum == 1) + { + return FindSingleLocation(db, candidateRoadways); + } + + // 3. 澶勭悊鍙岃揣浣嶅叆搴�+ return FindDoubleLocations(db, candidateRoadways); + } + + /// <summary> + /// 鑾峰彇鍊欓�宸烽亾鍒楄〃锛堟寜绛栫暐鎺掑簭锛�+ /// </summary> + private static List<int> GetCandidateRoadways(SqlSugarClient db, string itemCode) + { + // 绛栫暐1锛氬贩閬撳唴鍚岃鏍肩墿鏂�< 10 鐨勫贩閬擄紙鎸夋暟閲忓崌搴忥級 + var materialRoadways = db.Queryable<Location>() + .LeftJoin<LocCntrRel>((a, b) => a.S_CODE == b.S_LOC_CODE) + .LeftJoin<CntrItemRel>((a, b, c) => b.S_CNTR_CODE == c.S_CNTR_CODE) + .Where((a, b, c) => + a.S_AREA_CODE == Settings.stockArea && + a.N_CURRENT_NUM == 1 && + a.N_LOCK_STATE == 0 && + a.C_ENABLE == "Y" && + b.S_CNTR_CODE != null && + c.S_ITEM_CODE == itemCode) + .GroupBy(a => a.N_ROADWAY) + .Having(a => SqlFunc.AggregateCount(a.S_CODE) < 10) + .Select(a => new { Roadway = a.N_ROADWAY, Count = SqlFunc.AggregateCount(a.S_CODE) }) + .OrderBy(a => a.Count) + .Select(a => a.Roadway) + .ToList(); + + if (materialRoadways.Count > 0) return materialRoadways; + + // 绛栫暐2锛氭墍鏈夊贩閬撴寜绌鸿揣浣嶆暟闄嶅簭鎺掑簭 + return db.Queryable<Location>() + .Where(a => + a.S_AREA_CODE == Settings.stockArea && + a.N_CURRENT_NUM == 0 && + a.N_LOCK_STATE == 0 && + a.C_ENABLE == "Y") + .GroupBy(a => a.N_ROADWAY) + .Select(a => new { Roadway = a.N_ROADWAY, Count = SqlFunc.AggregateCount(a.S_CODE) }) + .OrderByDescending(a => a.Count) + .Select(a => a.Roadway) + .ToList(); + } + + /// <summary> + /// 鏌ユ壘鍗曡揣浣�+ /// </summary> + private static EndLocGroup FindSingleLocation(SqlSugarClient db, List<int> candidateRoadways) + { + foreach (var roadway in candidateRoadways) + { + var location = db.Queryable<Location>() + .Where(a => + a.S_AREA_CODE == Settings.stockArea && + a.N_ROADWAY == roadway && + a.N_CURRENT_NUM == 0 && + a.N_LOCK_STATE == 0 && + a.C_ENABLE == "Y") + .OrderBy(a => a.N_LAYER) + .OrderBy(a => a.N_COL) + .First(); + + if (location != null) + { + return new EndLocGroup + { + endLocList = new List<Location> { location } + }; + } + } + return new EndLocGroup(); + } + + /// <summary> + /// 鏌ユ壘鍙岃揣浣嶏紙浼樺寲鐩搁偦璐т綅鏌ユ壘锛�+ /// </summary> + private static EndLocGroup FindDoubleLocations(SqlSugarClient db, List<int> candidateRoadways) + { + // 鍏堝皾璇曟壘鐩搁偦璐т綅 + foreach (var roadway in candidateRoadways) + { + // 涓�鎬ц幏鍙栧贩閬撴墍鏈夌┖璐т綅锛堝噺灏慏B鏌ヨ锛�+ var emptyLocs = db.Queryable<Location>() + .Where(a => + a.S_AREA_CODE == Settings.stockArea && + a.N_ROADWAY == roadway && + a.N_CURRENT_NUM == 0 && + a.N_LOCK_STATE == 0 && + a.C_ENABLE == "Y") + .OrderBy(a => a.N_LAYER) + .OrderBy(a => a.N_COL) + .ToList(); + + if (emptyLocs.Count < 2) continue; + + // 鍦ㄥ唴瀛樹腑鏌ユ壘鐩搁偦璐т綅锛堥珮鎬ц兘锛�+ var adjacentPair = FindAdjacentLocations(emptyLocs); + if (adjacentPair != null) + { + return CreateDoubleLocGroup(adjacentPair); + } + } + + // 娌℃湁鐩搁偦璐т綅鏃讹紝鍙栦换鎰忎袱涓揣浣�+ foreach (var roadway in candidateRoadways) + { + var emptyLocs = db.Queryable<Location>() + .Where(a => + a.S_AREA_CODE == Settings.stockArea && + a.N_ROADWAY == roadway && + a.N_CURRENT_NUM == 0 && + a.N_LOCK_STATE == 0 && + a.C_ENABLE == "Y") + .OrderBy(a => a.N_LAYER) + .OrderBy(a => a.N_COL) + .Take(2) + .ToList(); + + if (emptyLocs.Count == 2) + { + return CreateDoubleLocGroup(emptyLocs); + } + } + + return new EndLocGroup(); + } + + /// <summary> + /// 鍦ㄥ唴瀛樹腑鏌ユ壘鐩搁偦璐т綅锛堥珮鏁堢畻娉曪級 + /// </summary> + private static List<Location> FindAdjacentLocations(List<Location> locations) + { + // 鎸夊眰->鍒楁帓搴忥紝渚夸簬鏌ユ壘鐩搁偦 + var sorted = locations + .OrderBy(l => l.N_LAYER) + .ThenBy(l => l.N_COL) + .ToList(); + + for (int i = 0; i < sorted.Count - 1; i++) + { + var current = sorted[i]; + var next = sorted[i + 1]; + + // 鍒ゆ柇鏄惁鍚屼竴灞備笖鐩搁偦鍒�+ if (current.N_LAYER == next.N_LAYER && + current.N_COL + 1 == next.N_COL) + { + return new List<Location> { current, next }; + } + } + return null; + } + + /// <summary> + /// 鍒涘缓鍙岃揣浣嶈繑鍥炵粨鏋�+ /// </summary> + private static EndLocGroup CreateDoubleLocGroup(List<Location> locations) + { + return new EndLocGroup + { + endLocList = locations, + groupNo = locations.GroupBy(a => a.N_ROADWAY).Count() == 1 + ? WMSHelper.GenerateTaskGroupNo() + : null + }; } public class EndLocGroup @@ -509,14 +697,15 @@ /// <summary> /// 鏌ヨ鍑哄簱寮�璐т綅 - /// 璁$畻锛�.宸烽亾涓嶆姤璀︺�2.鐗╂枡鐘舵�OK銆�.灏忎簬澶辨晥鏃堕棿 澶т簬绛変簬鐢熸晥鏃堕棿 4.鍔犳�鏂欏厛鍑恒�5.鍏堝叆鍏堝嚭锛堢敓浜ф椂闂达級锛夊嚭搴撶墿鏂�+ /// 1.璁$畻锛�.宸烽亾涓嶆姤璀︺�2.鐗╂枡鐘舵�OK銆�.灏忎簬澶辨晥鏃堕棿 澶т簬绛変簬鐢熸晥鏃堕棿 4.鍔犳�鏂欏厛鍑恒�5.鍏堝叆鍏堝嚭锛堢敓浜ф椂闂达級锛夊嚭搴撶墿鏂�+ /// 2.鍚岀瓑鏉′欢涓嬶紝浼樺厛鍙栧墠涓�墭璐х殑鐩搁偦璐т綅(鏆傛椂涓嶅仛鑰冭檻锛岄渶纭畾鍏堝叆鍏堝嚭锛堢敓浜ф椂闂达級鏄寜澶╃畻锛岃繕鏄簿纭埌鏃跺垎绉� /// </summary> /// <param name="itemCode"></param> - /// <param name="locNum"></param> - public static StartLocGroup getOutStockStartLoc(string itemCode, int locNum ) + /// <param name="prevLoc"></param> + public static Location getOutStockStartLoc(string itemCode, Location prevLoc = null) { var db = new SqlHelper<object>().GetInstance(); - StartLocGroup startLocGroup = new StartLocGroup(); + Location startLoc = null; // 1.鏌ヨ锛堢墿鏂欑姸鎬丱K 锛屼笖灏忎簬澶辨晥鏃堕棿锛屽ぇ浜庣瓑浜庣敓鏁堟椂闂达級鍑哄簱鐗╂枡锛屽苟鎸夊姞鎬ユ枡鍏堝嚭锛屽厛鍏ュ厛鍑猴紙鐢熶骇鏃堕棿锛夌殑鍘熷垯杩涜鎺掑簭 var query = db.Queryable<Location>() @@ -557,48 +746,10 @@ continue; } - var cntrItemRel = db.Queryable<CntrItemRel>().LeftJoin<LocCntrRel>((a, b) => a.S_CNTR_CODE == b.S_CNTR_CODE).Where((a, b) => b.S_LOC_CODE == loc.S_CODE).First(); - if (cntrItemRel != null) - { - startLocGroup.startLocList.Add(loc); - if (locNum == startLocGroup.startLocList.Count) - { - break; - } - - var leftLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == loc.N_ROADWAY && a.N_ROW == loc.N_ROW && a.N_COL == loc.N_COL - 1 && a.N_LAYER == loc.N_LAYER && a.N_CURRENT_NUM == 1 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").First(); - if (leftLoc != null) - { - var locCntrRel = db.Queryable<LocCntrRel>() - .LeftJoin<CntrItemRel>((a, b) => a.S_CNTR_CODE == b.S_CNTR_CODE) - .Where((a, b) => a.S_LOC_CODE == leftLoc.S_CODE && b.S_ITEM_CODE == itemCode) - .First(); - if (locCntrRel != null) - { - startLocGroup.groupNo = WMSHelper.GenerateTaskGroupNo(); - startLocGroup.startLocList.Add(leftLoc); - break; - } - } - - var rightLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == Settings.stockArea && a.N_ROADWAY == loc.N_ROADWAY && a.N_ROW == loc.N_ROW && a.N_COL == loc.N_COL + 1 && a.N_LAYER == loc.N_LAYER && a.N_CURRENT_NUM == 1 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").First(); - if (rightLoc != null && startLocGroup.startLocList.Count == 0) - { - var locCntrRel = db.Queryable<LocCntrRel>() - .LeftJoin<CntrItemRel>((a, b) => a.S_CNTR_CODE == b.S_CNTR_CODE) - .Where((a, b) => a.S_LOC_CODE == rightLoc.S_CODE && b.S_ITEM_CODE == itemCode) - .First(); - if (locCntrRel != null) - { - startLocGroup.groupNo = WMSHelper.GenerateTaskGroupNo(); - startLocGroup.startLocList.Add(rightLoc); - break; - } - } - } + startLoc = loc; } } - return startLocGroup; + return startLoc; } -- Gitblit v1.9.1