From 4bc0e18b94a2bf17c1b7277910d63ef82fbe616a Mon Sep 17 00:00:00 2001 From: wangxinhui <wangxinhui@hnkhzn.com> Date: 星期五, 10 一月 2025 09:39:51 +0800 Subject: [PATCH] Merge branch 'master' of http://115.159.85.185:8098/r/MeiRuiAn/HuaiAn --- 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/LocationInfoService_Common.cs | 259 +++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 219 insertions(+), 40 deletions(-) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/LocationInfoService_Common.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/LocationInfoService_Common.cs" index 3cd8b9c..2b520c4 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/LocationInfoService_Common.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/LocationInfoService_Common.cs" @@ -18,54 +18,50 @@ 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) { 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), + "HA58" => AssignLocation_PP(roadwayNo, palletType, palletTypeInfo), + "HA152" => AssignLocation_GM(roadwayNo, palletType, palletTypeInfo), + "HA64" => AssignLocation_CSJ(roadwayNo, palletType, palletTypeInfo), + "闃荤剨浠�" => AssignLocation_ZH(roadwayNo, palletType, palletTypeInfo), + "HA153" => AssignLocation(roadwayNo), + "HA71" => 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>(); @@ -107,7 +103,7 @@ /// <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) @@ -123,7 +119,7 @@ /// <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); @@ -169,6 +165,10 @@ } 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); @@ -198,7 +198,7 @@ nearLocations[i].LocationStatus = LocationStatusEnum.FreeLock.ObjToInt(); } } - else if (locationStatus == LocationStatusEnum.Free || locationStatus == LocationStatusEnum.InStock) + else if (locationStatus == LocationStatusEnum.InStock) { if (nearLocations[i].LocationStatus == LocationStatusEnum.InStockLock.ObjToInt()) { @@ -255,10 +255,183 @@ } } } + + 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) + { + 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) + { + locations[i].LocationType = palletType; + } + + 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 (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); + } + + 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++) + { + List<int> palletTypes = palletTypeInfos.Select(x => x.PalletType).ToList(); + palletTypes.Add(0); + if (palletTypes.Contains(nearLocations[i].LocationType)) + { + if (nearLocations[i].LocationType != palletType) + { + nearLocations[i].LocationType = palletType; + } + + 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.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(); + } + } + } + } + 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(); + } + } + } + Repository.UpdateData(locations); + } /// <summary> /// 鑾峰彇涓嶅悓娣卞害鐨勫悓缁勮揣浣嶄俊鎭� @@ -270,9 +443,11 @@ { 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); @@ -281,7 +456,8 @@ 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); @@ -301,9 +477,11 @@ 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); @@ -312,7 +490,8 @@ 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); -- Gitblit v1.9.3