| | |
| | | } |
| | | } |
| | | |
| | | List<Dt_LocationInfo> allDefinedLocations = locationInfos |
| | | .Where(x => |
| | | (x.EnableStatus == EnableStatusEnum.Normal.ObjToInt() || x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt()) && |
| | | x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && |
| | | x.LocationType == palletType.ObjToInt() && |
| | | !lockLocationCodes.Contains(x.LocationCode) |
| | | ) |
| | | .OrderByDescending(x => x.Depth) |
| | | .ThenBy(x => x.Layer) |
| | | .ThenBy(x => x.Column) |
| | | .ThenBy(x => x.Row) |
| | | .ToList(); |
| | | |
| | | //æªå®ä¹ç±»åçç©ºè´§ä½ |
| | | List<Dt_LocationInfo> undefinedTypeEmptyLocations = locationInfos.Where(x => (x.EnableStatus == EnableStatusEnum.Normal.ObjToInt() || x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt()) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.LocationType == LocationTypeEnum.Undefined.ObjToInt() && !lockLocationCodes.Contains(x.LocationCode)).OrderByDescending(x => x.Depth).ThenBy(x => x.Layer).ThenBy(x => x.Column).ThenBy(x => x.Row).ToList(); |
| | | List<Dt_LocationInfo> undefinedTypeEmptyLocations = locationInfos |
| | | .Where(x => |
| | | (x.EnableStatus == EnableStatusEnum.Normal.ObjToInt() || x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt()) && |
| | | x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && |
| | | x.LocationType == LocationTypeEnum.Undefined.ObjToInt() && |
| | | !lockLocationCodes.Contains(x.LocationCode) |
| | | ) |
| | | .OrderByDescending(x => x.Depth) |
| | | .ThenBy(x => x.Layer) |
| | | .ThenBy(x => x.Column) |
| | | .ThenBy(x => x.Row) |
| | | .ToList(); |
| | | |
| | | List<Dt_LocationInfo> definedTypeEmptyLocations = locationInfos.Where(x => (x.EnableStatus == EnableStatusEnum.Normal.ObjToInt() || x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt()) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.LocationType == palletType.ObjToInt() && !lockLocationCodes.Contains(x.LocationCode)).OrderByDescending(x => x.Depth).ThenBy(x => x.Layer).ThenBy(x => x.Column).ThenBy(x => x.Row).ToList(); |
| | | List<Dt_LocationInfo> definedTypeEmptyLocations = new List<Dt_LocationInfo>(); |
| | | List<Dt_LocationInfo> definedLocations1_4 = new List<Dt_LocationInfo>(); // 1-4å±å·²å®ä¹è´§ä½ |
| | | List<Dt_LocationInfo> definedLocations5 = new List<Dt_LocationInfo>(); // 5å±å·²å®ä¹è´§ä½ |
| | | |
| | | if(heightType == 1) |
| | | if (heightType == 1) |
| | | { |
| | | undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x=>x.Layer <= 3).ToList(); |
| | | definedTypeEmptyLocations = definedTypeEmptyLocations.Where(x => x.Layer <= 3).ToList(); |
| | | definedLocations1_4 = allDefinedLocations.Where(x => x.Layer <= 4).ToList(); |
| | | definedLocations5 = allDefinedLocations.Where(x => x.Layer == 5).ToList(); |
| | | definedTypeEmptyLocations = definedLocations1_4; |
| | | // æªå®ä¹ç±»åä»
ä¿ç1-4å± |
| | | undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => x.Layer <= 4).ToList(); |
| | | } |
| | | else if(heightType == 2) |
| | | else if (heightType == 2) |
| | | { |
| | | undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => x.Layer == 4).ToList(); |
| | | definedTypeEmptyLocations = definedTypeEmptyLocations.Where(x => x.Layer == 4).ToList(); |
| | | } |
| | | else if (heightType == 3) |
| | | { |
| | | // ä»
ä¿ç5å± |
| | | definedTypeEmptyLocations = allDefinedLocations.Where(x => x.Layer == 5).ToList(); |
| | | undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => x.Layer == 5).ToList(); |
| | | definedTypeEmptyLocations = definedTypeEmptyLocations.Where(x => x.Layer == 5).ToList(); |
| | | } |
| | | else |
| | | { |
| | | undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => false).ToList(); |
| | | // å
¶ä»heightTypeï¼æ å¯ç¨è´§ä½ |
| | | definedTypeEmptyLocations = definedTypeEmptyLocations.Where(x => false).ToList(); |
| | | undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => false).ToList(); |
| | | } |
| | | |
| | | if (palletTypeInfo.LocaitonCount == 2) |
| | |
| | | { |
| | | for (int i = 0; i < definedTypeEmptyLocations.Count; i++) |
| | | { |
| | | Dt_LocationInfo definedTypeEmptyLocation = definedTypeEmptyLocations[i]; |
| | | Dt_LocationInfo? locationInfo = GetUsableLocation_BC(locationInfos, definedTypeEmptyLocation, palletType, palletTypeInfo); |
| | | if (locationInfo != null) |
| | | Dt_LocationInfo currentLocation = definedTypeEmptyLocations[i]; |
| | | Dt_LocationInfo? usableLocation = GetUsableLocation_BC(locationInfos, currentLocation, palletType, palletTypeInfo); |
| | | |
| | | if (usableLocation?.Depth == 1) |
| | | { |
| | | locationCaches_BC.Add(new LocationCache { LocationCode = locationInfo.LocationCode, DateTime = DateTime.Now }); |
| | | return locationInfo; |
| | | int oppositeRow = usableLocation.Row == 2 ? usableLocation.Row - 1 : usableLocation.Row + 1; |
| | | Dt_LocationInfo? oppositeLocation = locationInfos.FirstOrDefault(x => |
| | | x.Row == oppositeRow && |
| | | x.Column == usableLocation.Column && |
| | | x.Layer == usableLocation.Layer |
| | | ); |
| | | if (oppositeLocation != null && (oppositeLocation.LocationStatus < LocationStatusEnum.InStock.ObjToInt())) |
| | | { |
| | | continue; |
| | | } |
| | | } |
| | | |
| | | if (usableLocation != null) |
| | | { |
| | | locationCaches_BC.Add(new LocationCache { LocationCode = usableLocation.LocationCode, DateTime = DateTime.Now }); |
| | | return usableLocation; |
| | | } |
| | | } |
| | | } |
| | | else if ((/*locationInfos.Count * weightValue_BC >= definedTypeLocations.Count &&*/ undefinedTypeEmptyLocations.Any()))//妿已å®ä¹ç±»åè´§ä½æªè¶
è¿æ¯ä¾ï¼ä¸ææªå®ä¹ç±»åçè´§ä½ |
| | | |
| | | if (heightType == 1 && definedLocations5.Any()) |
| | | { |
| | | List<Dt_LocationInfo> filtered5Locations = definedLocations5; |
| | | if (palletTypeInfo.LocaitonCount == 2) |
| | | { |
| | | if (roadwayNo != "SC01_BC") |
| | | filtered5Locations = filtered5Locations.Where(x => x.Column % 2 == 1).ToList(); |
| | | else |
| | | filtered5Locations = filtered5Locations.Where(x => x.Column % 2 == 0).ToList(); |
| | | } |
| | | |
| | | for (int i = 0; i < filtered5Locations.Count; i++) |
| | | { |
| | | Dt_LocationInfo currentLocation = filtered5Locations[i]; |
| | | Dt_LocationInfo? usableLocation = GetUsableLocation_BC(locationInfos, currentLocation, palletType, palletTypeInfo); |
| | | |
| | | if (usableLocation?.Depth == 1) |
| | | { |
| | | int oppositeRow = usableLocation.Row == 2 ? usableLocation.Row - 1 : usableLocation.Row + 1; |
| | | Dt_LocationInfo? oppositeLocation = locationInfos.FirstOrDefault(x => |
| | | x.Row == oppositeRow && |
| | | x.Column == usableLocation.Column && |
| | | x.Layer == usableLocation.Layer |
| | | ); |
| | | if (oppositeLocation != null && (oppositeLocation.LocationStatus < LocationStatusEnum.InStock.ObjToInt())) |
| | | { |
| | | continue; |
| | | } |
| | | } |
| | | |
| | | if (usableLocation != null) |
| | | { |
| | | locationCaches_BC.Add(new LocationCache { LocationCode = usableLocation.LocationCode, DateTime = DateTime.Now }); |
| | | return usableLocation; |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (undefinedTypeEmptyLocations.Any() && palletType != PalletTypeEnum.SmallPallet.ObjToInt()) |
| | | { |
| | | if (palletTypeInfo.LocaitonCount == 2) |
| | | { |
| | |
| | | undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => x.Column % 2 == 1).ToList(); |
| | | else |
| | | undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => x.Column % 2 == 0).ToList(); |
| | | } |
| | | for (int i = 0; i < undefinedTypeEmptyLocations.Count; i++) |
| | | { |
| | | Dt_LocationInfo undefinedTypeEmptyLocation = undefinedTypeEmptyLocations[i]; |
| | | Dt_LocationInfo? locationInfo = GetUsableLocation_BC(locationInfos, undefinedTypeEmptyLocation, palletType, palletTypeInfo); |
| | | if (locationInfo != null) |
| | | |
| | | for (int i = 0; i < undefinedTypeEmptyLocations.Count; i++) |
| | | { |
| | | //UpdateLocationStatus(locationInfo, palletType, LocationStatusEnum.Lock, locationInfo.WarehouseId); |
| | | locationCaches_BC.Add(new LocationCache { LocationCode = locationInfo.LocationCode, DateTime = DateTime.Now }); |
| | | return locationInfo; |
| | | Dt_LocationInfo currentLocation = undefinedTypeEmptyLocations[i]; |
| | | Dt_LocationInfo? usableLocation = GetUsableLocation_BC(locationInfos, currentLocation, palletType, palletTypeInfo); |
| | | |
| | | if (usableLocation?.Depth == 1) |
| | | { |
| | | int oppositeRow = usableLocation.Row == 2 ? usableLocation.Row - 1 : usableLocation.Row + 1; |
| | | Dt_LocationInfo? oppositeLocation = locationInfos.FirstOrDefault(x => |
| | | x.Row == oppositeRow && |
| | | x.Column == usableLocation.Column && |
| | | x.Layer == usableLocation.Layer |
| | | ); |
| | | if (oppositeLocation != null && (oppositeLocation.LocationStatus < LocationStatusEnum.InStock.ObjToInt())) |
| | | { |
| | | continue; |
| | | } |
| | | } |
| | | |
| | | if (usableLocation != null) |
| | | { |
| | | locationCaches_BC.Add(new LocationCache { LocationCode = usableLocation.LocationCode, DateTime = DateTime.Now }); |
| | | return usableLocation; |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | { |
| | | Dt_LocationInfo? nearLocation = null; |
| | | if (emptyLocation.RoadwayNo != "SC01_BC" && emptyLocation.Column % 2 == 1) |
| | | nearLocation = locationInfos.FirstOrDefault(x => x.Row == emptyLocation.Row && x.Layer == emptyLocation.Layer && x.Depth == emptyLocation.Depth && x.Column == emptyLocation.Column + 1); |
| | | else if (emptyLocation.RoadwayNo == "SC01_BC" && emptyLocation.Column % 2 == 0) |
| | | nearLocation = locationInfos.FirstOrDefault(x => x.Row == emptyLocation.Row && x.Layer == emptyLocation.Layer && x.Depth == emptyLocation.Depth && x.Column == emptyLocation.Column - 1); |
| | | else if (emptyLocation.RoadwayNo == "SC01_BC" && emptyLocation.Column % 2 == 0) |
| | | nearLocation = locationInfos.FirstOrDefault(x => x.Row == emptyLocation.Row && x.Layer == emptyLocation.Layer && x.Depth == emptyLocation.Depth && x.Column == emptyLocation.Column + 1); |
| | | if (nearLocation != null && DepthLocationIsEmpty_BC(locationInfos, nearLocation) != null) |
| | | { |
| | | Dt_LocationInfo? locationInfo = DepthLocationIsEmpty_BC(locationInfos, emptyLocation); |