| | |
| | | using WIDESEA_Model.Models; |
| | | using WIDESEA_Common.CommonEnum; |
| | | using WIDESEA_Common.LocationEnum; |
| | | using WIDESEA_Common.TaskEnum; |
| | | using WIDESEA_Common.WareHouseEnum; |
| | | |
| | | namespace WIDESEA_BasicService |
| | | { |
| | | public partial class LocationInfoService |
| | | { |
| | | public Dt_LocationInfo? AssignLocation(string roadwayNo, PalletTypeEnum palletType, int warehouseId) |
| | | |
| | | 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); |
| | | if (warehouse == null) |
| | | { |
| | | throw new Exception($"æªæ¾å°ä»åºä¿¡æ¯"); |
| | | } |
| | | |
| | | return warehouse.WarehouseName switch |
| | | Dt_PalletTypeInfo? palletTypeInfo = _basicRepository.PalletTypeInfoRepository.QueryFirst(x => x.PalletType == palletType && x.WarehouseId == warehouseId); |
| | | if (palletTypeInfo == null) |
| | | { |
| | | "æ¿æä»" => AssignLocation_BC(roadwayNo, palletType), |
| | | "PPä»" => AssignLocation_PP(roadwayNo, palletType), |
| | | "å¹²èä»" => AssignLocation_GM(roadwayNo, palletType), |
| | | "æµè¯æ¶ä»" => AssignLocation_CSJ(roadwayNo, palletType), |
| | | "é»çä»" => AssignLocation_ZH(roadwayNo, palletType), |
| | | "油墨ä»" => AssignLocation(roadwayNo), |
| | | "æåä»" => AssignLocation(roadwayNo), |
| | | "è¾
æä»" => AssignLocation(roadwayNo), |
| | | 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($"请é
ç½®æçç±»åä¿¡æ¯"); |
| | | } |
| | | |
| | | return warehouse.WarehouseCode switch |
| | | { |
| | | "HA57" => AssignLocation_BC(roadwayNo, palletType, palletTypeInfo, beRelocationCode, heightType), |
| | | "HA58" => AssignLocation_PP(roadwayNo, palletType, palletTypeInfo, beRelocationCode), |
| | | "HA152" => AssignLocation_GM(roadwayNo, palletType, palletTypeInfo, beRelocationCode), |
| | | "HA64" => AssignLocation_CSJ(roadwayNo, palletType, palletTypeInfo, beRelocationCode), |
| | | "HA154" => AssignLocation_ZH(roadwayNo, palletType, palletTypeInfo, beRelocationCode), |
| | | "HA153" => AssignLocation(roadwayNo), |
| | | "HA71" or "HA72" or "HA73" => AssignLocation(roadwayNo), |
| | | "HA60" => AssignLocation(roadwayNo), |
| | | _ => throw new Exception($"æªæ¾å°ä»åºè´§ä½åé
æ¹æ³") |
| | | }; |
| | | } |
| | | |
| | | //public bool LittleDepthLocationIsEmpty(Dt_LocationInfo locationInfo, PalletTypeEnum palletType) |
| | | //{ |
| | | // Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == locationInfo.WarehouseId); |
| | | // if (warehouse == null) |
| | | // { |
| | | // throw new Exception($"æªæ¾å°ä»åºä¿¡æ¯"); |
| | | // } |
| | | |
| | | // return warehouse.WarehouseName switch |
| | | // { |
| | | // "æ¿æä»" => false, |
| | | // "PPä»" => false, |
| | | // "å¹²èä»" => false, |
| | | // "æµè¯æ¶ä»" => LittleDepthLocationIsEmpty_CSJ(locationInfo, palletType), |
| | | // "é»çä»" => false, |
| | | // "油墨ä»" => true, |
| | | // "æåä»" => true, |
| | | // "è¾
æä»" => true, |
| | | // _ => throw new Exception($"æªæ¾å°ä»åºè´§ä½åé
æ¹æ³") |
| | | // }; |
| | | //} |
| | | |
| | | private readonly static object _locker = new object(); |
| | | private static List<LocationCache> locationCaches = new List<LocationCache>(); |
| | |
| | | { nameof(Dt_LocationInfo.Row),OrderByType.Asc } |
| | | }; |
| | | |
| | | return BaseDal.QueryFirst(x => x.RoadwayNo == roadwayNo && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && !lockLocations.Contains(x.LocationCode), orderBy);//æ¥è¯¢ç©ºè´§ä½ä¿¡æ¯å¹¶æé¤5åéå
åé
çè´§ä½,æ ¹æ®å±ãåãæ·±åº¦ãè¡æåº |
| | | return BaseDal.QueryFirst(x => x.RoadwayNo == roadwayNo && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.EnableStatus != EnableStatusEnum.Disable.ObjToInt() && !lockLocations.Contains(x.LocationCode), orderBy);//æ¥è¯¢ç©ºè´§ä½ä¿¡æ¯å¹¶æé¤5åéå
åé
çè´§ä½,æ ¹æ®å±ãåãæ·±åº¦ãè¡æåº |
| | | } |
| | | } |
| | | |
| | |
| | | /// <param name="locationCode">è´§ä½ç¼å·</param> |
| | | /// <param name="palletType">æçç±»å</param> |
| | | /// <param name="locationStatus">è´§ä½ç¶æ</param> |
| | | public void UpdateLocationStatus(string locationCode, PalletTypeEnum palletType, LocationStatusEnum locationStatus, int warehousId) |
| | | public void UpdateLocationStatus(string locationCode, int palletType, LocationStatusEnum locationStatus, int warehousId) |
| | | { |
| | | Dt_LocationInfo location = Repository.QueryFirst(x => x.LocationCode == locationCode); |
| | | if (location == null) |
| | |
| | | /// <param name="location">è´§ä½å¯¹è±¡</param> |
| | | /// <param name="palletType">æçç±»å</param> |
| | | /// <param name="locationStatus">è´§ä½ç¶æ</param> |
| | | public void UpdateLocationStatus(Dt_LocationInfo location, PalletTypeEnum palletType, LocationStatusEnum locationStatus, int warehousId) |
| | | //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) |
| | | { |
| | | 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_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()) |
| | | if (locations[i].LocationType != palletType) |
| | | { |
| | | locations[i].LocationType = palletType.ObjToInt(); |
| | | locations[i].LocationType = palletType; |
| | | } |
| | | |
| | | if (locations[i].LocationCode == location.LocationCode) |
| | |
| | | } |
| | | } |
| | | |
| | | Dt_LocationInfo? nearLocation = locationInfos.FirstOrDefault(x => x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Column == location.Column + 1); |
| | | if (nearLocation != null) |
| | | if (palletTypeInfos.FirstOrDefault(x => x.LocaitonCount == 2) != null) |
| | | { |
| | | List<Dt_LocationInfo> nearLocations = GetGroupLocations(locationInfos, nearLocation); |
| | | for (int i = 0; i < nearLocations.Count; i++) |
| | | Dt_LocationInfo? nearLocation; |
| | | if (palletTypeInfo.IsOdd) |
| | | { |
| | | if (nearLocations[i].LocationType != palletType.ObjToInt()) |
| | | if (warehouse.WarehouseCode==WarehouseEnum.HA154.ToString()) |
| | | { |
| | | nearLocations[i].LocationType = palletType.ObjToInt(); |
| | | nearLocation = locationInfos.FirstOrDefault(x => x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Column == location.Column - 1); |
| | | } |
| | | |
| | | if (palletType.ObjToInt() >= PalletTypeEnum.LargePallet.ObjToInt()) |
| | | else |
| | | { |
| | | if (nearLocations[i].LocationCode == nearLocation.LocationCode) |
| | | 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); |
| | | } |
| | | |
| | | 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; |
| | | } |
| | | } |
| | | |
| | | if (nearLocation != null) |
| | | { |
| | | List<Dt_LocationInfo> nearLocations = GetGroupLocations(locationInfos, nearLocation); |
| | | 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)) |
| | | { |
| | | nearLocations[i].LocationStatus = locationStatus.ObjToInt(); |
| | | } |
| | | else |
| | | { |
| | | if (nearLocations[i].LocationType != palletType) |
| | | { |
| | | nearLocations[i].LocationType = palletType; |
| | | } |
| | | |
| | | if (locationStatus == LocationStatusEnum.Lock) |
| | | { |
| | | if (nearLocations[i].LocationStatus == LocationStatusEnum.InStock.ObjToInt()) |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | locations.AddRange(nearLocations); |
| | | } |
| | | locations.AddRange(nearLocations); |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | | else |
| | | { |
| | |
| | | Repository.UpdateData(locations); |
| | | } |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// è·åä¸å深度çåç»è´§ä½ä¿¡æ¯ |
| | | /// </summary> |
| | |
| | | { |
| | | List<Dt_LocationInfo> groupLocations = new List<Dt_LocationInfo>() { location }; |
| | | int maxDepth = locationInfos.Max(x => x.Depth); |
| | | 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); |
| | | row += 1; |
| | | Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row); |
| | | if (locationInfo != null) |
| | | { |
| | | groupLocations.Add(locationInfo); |
| | |
| | | |
| | | 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); |
| | | row -= 1; |
| | | Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row); |
| | | if (locationInfo != null) |
| | | { |
| | | groupLocations.Add(locationInfo); |
| | |
| | | |
| | | List<Dt_LocationInfo> groupLocations = new List<Dt_LocationInfo>() { location }; |
| | | int maxDepth = locationInfos.Max(x => x.Depth); |
| | | 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); |
| | | 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)); |
| | | if (locationInfo != null) |
| | | { |
| | | groupLocations.Add(locationInfo); |
| | |
| | | |
| | | 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); |
| | | 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)); |
| | | if (locationInfo != null) |
| | | { |
| | | groupLocations.Add(locationInfo); |