| | |
| | | } |
| | | } |
| | | |
| | | 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> _LocationInfos = definedTypeEmptyLocations; |
| | | 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) |
| | | { |
| | | undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x=>x.Layer <= 4).ToList(); |
| | | definedTypeEmptyLocations = definedTypeEmptyLocations.Where(x => x.Layer <= 4).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) |
| | | //{ |
| | | // undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => x.Layer == 4).ToList(); |
| | | // definedTypeEmptyLocations = definedTypeEmptyLocations.Where(x => x.Layer == 4).ToList(); |
| | | //} |
| | | else if (heightType == 2) |
| | | { |
| | | // ä»
ä¿ç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 (heightType==1 && !definedTypeEmptyLocations.Any()) |
| | | { |
| | | definedTypeEmptyLocations = _LocationInfos.Where(x => x.Layer == 5).ToList(); |
| | | } |
| | | |
| | | if (palletTypeInfo.LocaitonCount == 2) |
| | | { |
| | | if (roadwayNo != "SC01_BC") |
| | |
| | | { |
| | | for (int i = 0; i < definedTypeEmptyLocations.Count; i++) |
| | | { |
| | | Dt_LocationInfo definedTypeEmptyLocation = definedTypeEmptyLocations[i]; |
| | | Dt_LocationInfo? locationInfo = GetUsableLocation_BC(locationInfos, definedTypeEmptyLocation, palletType, palletTypeInfo); |
| | | //å¤æè´§ä½ä¸¤æ·±å以䏿¯å¦åå¨åºåºéå®è´§ä½ |
| | | if (locationInfo?.Depth == 1) |
| | | Dt_LocationInfo currentLocation = definedTypeEmptyLocations[i]; |
| | | Dt_LocationInfo? usableLocation = GetUsableLocation_BC(locationInfos, currentLocation, palletType, palletTypeInfo); |
| | | |
| | | if (usableLocation?.Depth == 1) |
| | | { |
| | | Dt_LocationInfo? IsBebusyLocation = locationInfos.Where(x => x.Row == (locationInfo?.Row == 2 ? locationInfo?.Row - 1 : locationInfo?.Row + 1) && x.Column==locationInfo?.Column && x.Layer== locationInfo?.Layer).FirstOrDefault(); |
| | | if (IsBebusyLocation!=null && (IsBebusyLocation.LocationStatus<LocationStatusEnum.InStock.ObjToInt())) |
| | | 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 (locationInfo != null) |
| | | |
| | | if (usableLocation != null) |
| | | { |
| | | locationCaches_BC.Add(new LocationCache { LocationCode = locationInfo.LocationCode, DateTime = DateTime.Now }); |
| | | return locationInfo; |
| | | locationCaches_BC.Add(new LocationCache { LocationCode = usableLocation.LocationCode, DateTime = DateTime.Now }); |
| | | return usableLocation; |
| | | } |
| | | } |
| | | } |
| | | if (undefinedTypeEmptyLocations.Any() && palletType!=PalletTypeEnum.SmallPallet.ObjToInt())//妿已å®ä¹ç±»åè´§ä½æªè¶
è¿æ¯ä¾ï¼ä¸ææªå®ä¹ç±»åçè´§ä½ |
| | | |
| | | 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) |
| | | { |
| | |
| | | |
| | | for (int i = 0; i < undefinedTypeEmptyLocations.Count; i++) |
| | | { |
| | | Dt_LocationInfo undefinedTypeEmptyLocation = undefinedTypeEmptyLocations[i]; |
| | | Dt_LocationInfo? locationInfo = GetUsableLocation_BC(locationInfos, undefinedTypeEmptyLocation, palletType, palletTypeInfo); |
| | | //å¤æè´§ä½ä¸¤æ·±å以䏿¯å¦åå¨åºåºéå®è´§ä½ |
| | | if (locationInfo?.Depth == 1) |
| | | Dt_LocationInfo currentLocation = undefinedTypeEmptyLocations[i]; |
| | | Dt_LocationInfo? usableLocation = GetUsableLocation_BC(locationInfos, currentLocation, palletType, palletTypeInfo); |
| | | |
| | | if (usableLocation?.Depth == 1) |
| | | { |
| | | Dt_LocationInfo? IsBebusyLocation = locationInfos.Where(x => x.Row == (locationInfo?.Row == 2 ? locationInfo?.Row - 1 : locationInfo?.Row + 1) && x.Column == locationInfo?.Column && x.Layer == locationInfo?.Layer).FirstOrDefault(); |
| | | if (IsBebusyLocation != null && (IsBebusyLocation.LocationStatus < LocationStatusEnum.InStock.ObjToInt())) |
| | | 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 (locationInfo != null) |
| | | |
| | | if (usableLocation != null) |
| | | { |
| | | //UpdateLocationStatus(locationInfo, palletType, LocationStatusEnum.Lock, locationInfo.WarehouseId); |
| | | locationCaches_BC.Add(new LocationCache { LocationCode = locationInfo.LocationCode, DateTime = DateTime.Now }); |
| | | return locationInfo; |
| | | locationCaches_BC.Add(new LocationCache { LocationCode = usableLocation.LocationCode, DateTime = DateTime.Now }); |
| | | return usableLocation; |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | return null; |
| | | } |