From 9ce6731460179c71f0f2c636b2a1598324d5194e Mon Sep 17 00:00:00 2001 From: wangxinhui <wangxinhui@hnkhzn.com> Date: 星期六, 20 九月 2025 15:16:48 +0800 Subject: [PATCH] 最新代码更新 --- 项目代码/WMS/WMSServices/WIDESEA_BasicService/Service/LocationInfoService_Common.cs | 366 ++++++++++++++++------------------------------------ 1 files changed, 114 insertions(+), 252 deletions(-) diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_BasicService/Service/LocationInfoService_Common.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_BasicService/Service/LocationInfoService_Common.cs" index b4f28e1..f0a60d1 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_BasicService/Service/LocationInfoService_Common.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_BasicService/Service/LocationInfoService_Common.cs" @@ -20,12 +20,15 @@ using WIDESEA_Common.LocationEnum; using WIDESEA_Common.TaskEnum; using WIDESEA_Common.WareHouseEnum; +using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup; namespace WIDESEA_BasicService { public partial class LocationInfoService { - + /// <summary> + /// 鍒嗛厤璐т綅 + /// </summary> public Dt_LocationInfo? AssignLocation(string roadwayNo, int palletType, int warehouseId, string beRelocationCode = "", int heightType = 0) { Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == warehouseId); @@ -33,33 +36,28 @@ { throw new Exception($"鏈壘鍒颁粨搴撲俊鎭�"); } - //Dt_PalletTypeInfo? palletTypeInfo = _basicRepository.PalletTypeInfoRepository.QueryFirst(x => x.PalletType == palletType && x.WarehouseId == warehouseId); - //if (palletTypeInfo == null) - //{ - // if (warehouse.WarehouseCode == WarehouseEnum.HA153.ToString() && warehouse.WarehouseCode == WarehouseEnum.HA71.ToString() && warehouse.WarehouseCode == WarehouseEnum.HA60.ToString()) - // { - // palletTypeInfo = new Dt_PalletTypeInfo() - // { - // LocaitonCount = 1, - // PalletType = 0, - // IsOdd = false, - // }; - // } - // else - // throw new Exception($"璇烽厤缃墭鐩樼被鍨嬩俊鎭�"); - //} + Dt_PalletTypeInfo? palletTypeInfo = _basicRepository.PalletTypeInfoRepository.QueryFirst(x => x.PalletType == palletType && x.WarehouseId == warehouseId); + if (palletTypeInfo == null) + { + if (warehouse.WarehouseCode == WarehouseEnum.LLDYL.ToString()) + { + throw new Exception($"璇烽厤缃墭鐩樼被鍨嬩俊鎭�"); + } + } return warehouse.WarehouseCode switch { - "LLDCP" or "LLDYL"=> AssignLocation(roadwayNo), + "LLDCP" or "LLDFL" => AssignLocation(roadwayNo), + "LLDYL" => AssignLocationYL(roadwayNo, palletTypeInfo), _ => throw new Exception($"鏈壘鍒颁粨搴撹揣浣嶅垎閰嶆柟娉�") }; } private readonly static object _locker = new object(); + private readonly static object _AssignLocationYL = new object(); private static List<LocationCache> locationCaches = new List<LocationCache>(); /// <summary> - /// + /// 鍒嗛厤璐т綅 /// </summary> /// <param name="roadwayNo"></param> /// <returns></returns> @@ -76,12 +74,9 @@ List<string> lockLocations = locationCaches.Select(x => x.LocationCode).ToList(); - List<Dt_LocationInfo> locationInfos = BaseDal.QueryData(x => x.RoadwayNo == roadwayNo);//鏌ヨ宸烽亾鎵�鏈夎揣浣嶄俊鎭� - Dictionary<string, OrderByType> orderBy = new Dictionary<string, OrderByType>() { - - { nameof(Dt_LocationInfo.Column),OrderByType.Desc }, + { nameof(Dt_LocationInfo.Columns),OrderByType.Desc }, { nameof(Dt_LocationInfo.Layer),OrderByType.Asc }, { nameof(Dt_LocationInfo.Depth),OrderByType.Desc }, { nameof(Dt_LocationInfo.Row),OrderByType.Asc } @@ -90,7 +85,67 @@ return BaseDal.QueryFirst(x => x.RoadwayNo == roadwayNo && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.EnableStatus != EnableStatusEnum.Disable.ObjToInt() && !lockLocations.Contains(x.LocationCode), orderBy);//鏌ヨ绌鸿揣浣嶄俊鎭苟鎺掗櫎5鍒嗛挓鍐呭垎閰嶇殑璐т綅,鏍规嵁灞傘�佸垪銆佹繁搴︺�佽鎺掑簭 } } + /// <summary> + /// 鍘熸枡鍒嗛厤璐т綅 + /// </summary> + /// <returns></returns> + public Dt_LocationInfo? AssignLocationYL(string roadwayNo, Dt_PalletTypeInfo palletTypeInfo) + { + lock (_AssignLocationYL) + { + List<LocationCache> removeItems = locationCaches.Where(x => (DateTime.Now - x.DateTime).TotalMinutes > 5).ToList();//鏌ヨ娣诲姞闈欐�佸彉閲忚秴杩�5鍒嗛挓鐨勮揣浣� + int count = removeItems.Count; + for (int i = 0; i < count; i++) + { + locationCaches.Remove(removeItems[i]);//绉婚櫎鏌ヨ娣诲姞闈欐�佸彉閲忚秴杩�5鍒嗛挓鐨勮揣浣� + } + List<string> lockLocations = locationCaches.Select(x => x.LocationCode).ToList(); + + List<Dt_LocationInfo> locationInfos = BaseDal.QueryData(x => x.RoadwayNo == roadwayNo);//鏌ヨ宸烽亾鎵�鏈夎揣浣嶄俊鎭� + + Dictionary<string, OrderByType> orderBy = new Dictionary<string, OrderByType>() + { + { nameof(Dt_LocationInfo.Columns),OrderByType.Desc }, + { nameof(Dt_LocationInfo.Layer),OrderByType.Asc }, + { nameof(Dt_LocationInfo.Depth),OrderByType.Desc }, + { nameof(Dt_LocationInfo.Row),OrderByType.Asc } + }; + if (roadwayNo.Contains("YLDual")) + { + if (palletTypeInfo.LocaitonCount==1) + { + return BaseDal.QueryFirst(x => x.LocationType == LocationTypeEnum.SmallPallet.ObjToInt() && x.RoadwayNo == roadwayNo && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.EnableStatus != EnableStatusEnum.Disable.ObjToInt() && !lockLocations.Contains(x.LocationCode), orderBy);//鏌ヨ绌鸿揣浣嶄俊鎭苟鎺掗櫎5鍒嗛挓鍐呭垎閰嶇殑璐т綅,鏍规嵁灞傘�佸垪銆佹繁搴︺�佽鎺掑簭 + } + else + { + //鏌ヨ绌鸿揣浣嶄俊鎭苟鎺掗櫎5鍒嗛挓鍐呭垎閰嶇殑璐т綅,鏍规嵁灞傘�佸垪銆佹繁搴︺�佽鎺掑簭 + List<Dt_LocationInfo> locationInfosMedium = BaseDal.QueryData(x => x.LocationType == LocationTypeEnum.MediumPallet.ObjToInt() && x.RoadwayNo == roadwayNo && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.EnableStatus != EnableStatusEnum.Disable.ObjToInt() && !lockLocations.Contains(x.LocationCode), orderBy); + Dt_LocationInfo locationInfo = new Dt_LocationInfo(); + foreach (var item in locationInfosMedium) + { + //鑾峰彇鏇存敼搴撲綅 + Dt_LocationInfo? nearLocation1; + Dt_LocationInfo? nearLocation2; + + nearLocation1 = locationInfos.FirstOrDefault(x => x.LocationType == LocationTypeEnum.SmallPallet.ObjToInt() && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.Row == item.Row && x.Layer == item.Layer && x.Depth == item.Depth && x.Columns == item.Columns - 1); + nearLocation2 = locationInfos.FirstOrDefault(x => x.LocationType == LocationTypeEnum.SmallPallet.ObjToInt() && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.Row == item.Row && x.Layer == item.Layer && x.Depth == item.Depth && x.Columns == item.Columns + 1); + if (nearLocation1!=null && nearLocation2!=null) + { + locationInfo = item; + break; + } + } + return locationInfo; + } + } + else + { + return BaseDal.QueryFirst(x => x.RoadwayNo == roadwayNo && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.EnableStatus != EnableStatusEnum.Disable.ObjToInt() && !lockLocations.Contains(x.LocationCode), orderBy);//鏌ヨ绌鸿揣浣嶄俊鎭苟鎺掗櫎5鍒嗛挓鍐呭垎閰嶇殑璐т綅,鏍规嵁灞傘�佸垪銆佹繁搴︺�佽鎺掑簭 + } + + } + } /// <summary> /// 淇敼璐т綅鐘舵�佸強绫诲瀷 /// </summary> @@ -107,181 +162,22 @@ UpdateLocationStatus(location, palletType, locationStatus, warehousId); } - /// <summary> - /// 淇敼璐т綅鐘舵�佸強绫诲瀷 - /// </summary> - /// <param name="location">璐т綅瀵硅薄</param> - /// <param name="palletType">鎵樼洏绫诲瀷</param> - /// <param name="locationStatus">璐т綅鐘舵��</param> - //public void UpdateLocationStatus2(Dt_LocationInfo location, int palletType, LocationStatusEnum locationStatus, int warehousId) - //{ - // List<Dt_LocationInfo> locationInfos = Repository.QueryData(x => x.RoadwayNo == location.RoadwayNo); - // List<Dt_LocationInfo> locations = GetGroupLocations(locationInfos, location); - // if (locationInfos.Max(x => x.Depth) < 3) - // { - // for (int i = 0; i < locations.Count; i++) - // { - // if (locations[i].LocationType != palletType.ObjToInt()) - // { - // locations[i].LocationType = palletType.ObjToInt(); - // } - - // if (locations[i].LocationCode == location.LocationCode) - // { - // locations[i].LocationStatus = locationStatus.ObjToInt(); - // } - // else - // { - // if (locationStatus == LocationStatusEnum.Lock) - // { - // if (locations[i].LocationStatus == LocationStatusEnum.InStock.ObjToInt()) - // { - // locations[i].LocationStatus = LocationStatusEnum.InStockLock.ObjToInt(); - // } - // else if (locations[i].LocationStatus == LocationStatusEnum.Free.ObjToInt()) - // { - // locations[i].LocationStatus = LocationStatusEnum.FreeLock.ObjToInt(); - // } - // } - // else if (locationStatus == LocationStatusEnum.Free || locationStatus == LocationStatusEnum.InStock) - // { - // if (locations[i].LocationStatus == LocationStatusEnum.InStockLock.ObjToInt()) - // { - // locations[i].LocationStatus = LocationStatusEnum.InStock.ObjToInt(); - // } - // else if (locations[i].LocationStatus == LocationStatusEnum.FreeLock.ObjToInt()) - // { - // locations[i].LocationStatus = LocationStatusEnum.Free.ObjToInt(); - // } - // } - // } - // } - - // Dt_LocationInfo? nearLocation = locationInfos.FirstOrDefault(x => x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Column == location.Column + 1); - // if(location.RoadwayNo == "SC01_BC") - // { - // nearLocation = locationInfos.FirstOrDefault(x => x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Column == location.Column + 1); - // } - // if (nearLocation != null) - // { - // List<Dt_LocationInfo> nearLocations = GetGroupLocations(locationInfos, nearLocation); - // for (int i = 0; i < nearLocations.Count; i++) - // { - // if (nearLocations[i].LocationType != palletType.ObjToInt()) - // { - // nearLocations[i].LocationType = palletType.ObjToInt(); - // } - - // if (palletType.ObjToInt() >= PalletTypeEnum.LargePallet.ObjToInt()) - // { - // if (nearLocations[i].LocationCode == nearLocation.LocationCode) - // { - // nearLocations[i].LocationStatus = locationStatus.ObjToInt(); - // } - // else - // { - // if (locationStatus == LocationStatusEnum.Lock) - // { - // if (nearLocations[i].LocationStatus == LocationStatusEnum.InStock.ObjToInt()) - // { - // nearLocations[i].LocationStatus = LocationStatusEnum.InStockLock.ObjToInt(); - // } - // else if (nearLocations[i].LocationStatus == LocationStatusEnum.Free.ObjToInt()) - // { - // nearLocations[i].LocationStatus = LocationStatusEnum.FreeLock.ObjToInt(); - // } - // } - // else if (locationStatus == LocationStatusEnum.InStock) - // { - // if (nearLocations[i].LocationStatus == LocationStatusEnum.InStockLock.ObjToInt()) - // { - // nearLocations[i].LocationStatus = LocationStatusEnum.InStock.ObjToInt(); - // } - // else if (nearLocations[i].LocationStatus == LocationStatusEnum.FreeLock.ObjToInt()) - // { - // nearLocations[i].LocationStatus = LocationStatusEnum.Free.ObjToInt(); - // } - // } - // } - // } - - // } - // locations.AddRange(nearLocations); - // } - // } - // else - // { - // for (int i = 0; i < locations.Count; i++) - // { - // if (locations[i].LocationCode == location.LocationCode) - // { - // locations[i].LocationStatus = locationStatus.ObjToInt(); - // } - // else - // { - // if (locationStatus == LocationStatusEnum.Lock) - // { - // if (locations[i].LocationStatus == LocationStatusEnum.InStock.ObjToInt()) - // { - // locations[i].LocationStatus = LocationStatusEnum.InStockLock.ObjToInt(); - // } - // else if (locations[i].LocationStatus == LocationStatusEnum.Free.ObjToInt()) - // { - // locations[i].LocationStatus = LocationStatusEnum.FreeLock.ObjToInt(); - // } - // } - // else if (locationStatus == LocationStatusEnum.Free || locationStatus == LocationStatusEnum.InStock) - // { - // if (locations[i].LocationStatus == LocationStatusEnum.InStockLock.ObjToInt()) - // { - // locations[i].LocationStatus = LocationStatusEnum.InStock.ObjToInt(); - // } - // else if (locations[i].LocationStatus == LocationStatusEnum.FreeLock.ObjToInt()) - // { - // locations[i].LocationStatus = LocationStatusEnum.Free.ObjToInt(); - // } - // } - // } - // if (locations[i].LocationType != palletType.ObjToInt()) - // { - // locations[i].LocationType = palletType.ObjToInt(); - // } - // } - // } - - // if (locations.Where(x => x.LocationStatus == LocationStatusEnum.Free.ObjToInt()).Count() == locations.Count && locationStatus == LocationStatusEnum.Free) - // { - // locations.ForEach(x => - // { - // x.LocationType = 0; - // }); - // } - - // Repository.UpdateData(locations); - //} - - public void UpdateLocationStatus(Dt_LocationInfo location, int palletType, LocationStatusEnum locationStatus, int warehousId) + public void UpdateLocationStatus(Dt_LocationInfo location, int palletType, LocationStatusEnum locationStatus, int warehouseId) { List<Dt_LocationInfo> locationInfos = Repository.QueryData(x => x.RoadwayNo == location.RoadwayNo); - List<Dt_PalletTypeInfo> palletTypeInfos = _basicRepository.PalletTypeInfoRepository.QueryData(x => x.WarehouseId == warehousId); - Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == warehousId); - //Dt_PalletTypeInfo? palletTypeInfo = palletTypeInfos.FirstOrDefault(x => x.PalletType == palletType && x.WarehouseId == warehousId); - //if (palletTypeInfo == null || warehouse.WarehouseCode == WarehouseEnum.HA60.ToString()) - //{ - // if (warehouse.WarehouseCode == WarehouseEnum.HA153.ToString() || warehouse.WarehouseCode == WarehouseEnum.HA71.ToString() || warehouse.WarehouseCode == WarehouseEnum.HA60.ToString()) - // { - // palletTypeInfo = new Dt_PalletTypeInfo() - // { - // LocaitonCount = 1, - // PalletType = 0, - // IsOdd = false, - // }; - // } - // else - // throw new Exception($"璇烽厤缃墭鐩樼被鍨嬩俊鎭�"); - //} + List<Dt_PalletTypeInfo> palletTypeInfos = _basicRepository.PalletTypeInfoRepository.QueryData(x => x.WarehouseId == warehouseId); + Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == warehouseId); + + Dt_PalletTypeInfo? palletTypeInfo = _basicRepository.PalletTypeInfoRepository.QueryFirst(x => x.PalletType == palletType && x.WarehouseId == warehouseId); + if (palletTypeInfo == null) + { + if (warehouse.WarehouseCode == WarehouseEnum.LLDYL.ToString()) + { + throw new Exception($"璇烽厤缃墭鐩樼被鍨嬩俊鎭�"); + } + } List<Dt_LocationInfo> locations = GetGroupLocations(locationInfos, location); if (locationInfos.Max(x => x.Depth) < 3) { @@ -325,76 +221,42 @@ if (palletTypeInfos.FirstOrDefault(x => x.LocaitonCount == 2) != null) { - Dt_LocationInfo? nearLocation; - //if (palletTypeInfo.IsOdd) - //{ - // nearLocation = locationInfos.FirstOrDefault(x => x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Column == location.Column + 1); - //} - //else - //{ - nearLocation = locationInfos.FirstOrDefault(x => x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Column == location.Column - 1); - //} + //鑾峰彇鏇存敼搴撲綅 + Dt_LocationInfo? nearLocation1; + Dt_LocationInfo? nearLocation2; - if (nearLocation!=null && location.RoadwayNo.Contains("BC")) - { - if (nearLocation?.LocationType == LocationTypeEnum.SmallPallet.ObjToInt()) - { - nearLocation = null; - } - } - if (location.RoadwayNo == "SC01_BC" && palletType != PalletTypeEnum.SmallPallet.ObjToInt()) - { - nearLocation = locationInfos.FirstOrDefault(x => x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Column == location.Column - 1); - if (nearLocation?.LocationType == LocationTypeEnum.SmallPallet.ObjToInt()) - { - nearLocation = null; - } - } + nearLocation1 = locationInfos.FirstOrDefault(x => x.LocationType == LocationTypeEnum.SmallPallet.ObjToInt() && x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Columns == location.Columns - 1); + nearLocation2 = locationInfos.FirstOrDefault(x => x.LocationType == LocationTypeEnum.SmallPallet.ObjToInt() && x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Columns == location.Columns + 1); - if (nearLocation != null) + + if (nearLocation1 != null && nearLocation2 != null) { - List<Dt_LocationInfo> nearLocations = GetGroupLocations(locationInfos, nearLocation); + //鍙岃緟鏂� + List<Dt_LocationInfo> nearLocations = new List<Dt_LocationInfo>() + { + nearLocation1, + nearLocation2 + }; for (int i = 0; i < nearLocations.Count; i++) { - List<int> palletTypes = palletTypeInfos.Select(x => x.PalletType).ToList(); - palletTypes.Add(0); - if (palletTypes.Contains(nearLocations[i].LocationType)) + if (locationStatus == LocationStatusEnum.Lock) { - if (nearLocations[i].LocationType != palletType) + if (nearLocations[i].LocationStatus == LocationStatusEnum.Free.ObjToInt()) { - nearLocations[i].LocationType = palletType; + nearLocations[i].LocationStatus = LocationStatusEnum.FreeLock.ObjToInt(); } - - if (locationStatus == LocationStatusEnum.Lock) + } + else if (locationStatus == LocationStatusEnum.Free) + { + if (nearLocations[i].LocationStatus == LocationStatusEnum.FreeLock.ObjToInt()) { - if (nearLocations[i].LocationStatus == LocationStatusEnum.InStock.ObjToInt()) - { - nearLocations[i].LocationStatus = LocationStatusEnum.InStockLock.ObjToInt(); - } - else if (nearLocations[i].LocationStatus == LocationStatusEnum.Free.ObjToInt()) - { - nearLocations[i].LocationStatus = LocationStatusEnum.FreeLock.ObjToInt(); - } - } - else if (locationStatus == LocationStatusEnum.Free || locationStatus == LocationStatusEnum.InStock) - { - if (nearLocations[i].LocationStatus == LocationStatusEnum.InStockLock.ObjToInt()) - { - nearLocations[i].LocationStatus = LocationStatusEnum.InStock.ObjToInt(); - } - else if (nearLocations[i].LocationStatus == LocationStatusEnum.FreeLock.ObjToInt()) - { - nearLocations[i].LocationStatus = LocationStatusEnum.Free.ObjToInt(); - } + nearLocations[i].LocationStatus = LocationStatusEnum.Free.ObjToInt(); } } } locations.AddRange(nearLocations); } } - - - } else { @@ -452,7 +314,7 @@ for (int j = location.Depth + 1; j <= maxDepth; j++) { row += 1; - Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row); + Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Columns == location.Columns && x.Layer == location.Layer && x.Row == row); if (locationInfo != null) { groupLocations.Add(locationInfo); @@ -462,7 +324,7 @@ for (int j = location.Depth - 1; j >= 1; j--) { row -= 1; - Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row); + Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Columns == location.Columns && x.Layer == location.Layer && x.Row == row); if (locationInfo != null) { groupLocations.Add(locationInfo); @@ -485,7 +347,7 @@ int row = location.Row; for (int j = location.Depth + 1; j <= maxDepth; j++) { - Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && (x.Row == row + 1 || x.Row == row - 1)); + Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Columns == location.Columns && x.Layer == location.Layer && (x.Row == row + 1 || x.Row == row - 1)); if (locationInfo != null) { groupLocations.Add(locationInfo); @@ -494,7 +356,7 @@ for (int j = location.Depth - 1; j >= 1; j--) { - Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && (x.Row == row + 1 || x.Row == row - 1)); + Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Columns == location.Columns && x.Layer == location.Layer && (x.Row == row + 1 || x.Row == row - 1)); if (locationInfo != null) { groupLocations.Add(locationInfo); -- Gitblit v1.9.3