using AutoMapper; 
 | 
using SqlSugar; 
 | 
using System; 
 | 
using System.Collections.Generic; 
 | 
using System.Linq; 
 | 
using System.Text; 
 | 
using System.Threading.Tasks; 
 | 
using WIDESEA_Core; 
 | 
using WIDESEA_Core.BaseRepository; 
 | 
using WIDESEA_Core.BaseServices; 
 | 
using WIDESEA_Core.Enums; 
 | 
using WIDESEA_Core.Helper; 
 | 
using WIDESEA_Core.Utilities; 
 | 
using WIDESEA_DTO.Basic; 
 | 
using WIDESEA_IBasicRepository; 
 | 
using WIDESEA_IRecordService; 
 | 
using WIDESEA_IBasicService; 
 | 
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, 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($"未找到仓库信息"); 
 | 
            } 
 | 
            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($"请配置托盘类型信息"); 
 | 
            } 
 | 
  
 | 
            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($"未找到仓库货位分配方法") 
 | 
            }; 
 | 
        } 
 | 
  
 | 
        private readonly static object _locker = new object(); 
 | 
        private static List<LocationCache> locationCaches = new List<LocationCache>(); 
 | 
        /// <summary> 
 | 
        ///  
 | 
        /// </summary> 
 | 
        /// <param name="roadwayNo"></param> 
 | 
        /// <returns></returns> 
 | 
        public Dt_LocationInfo? AssignLocation(string roadwayNo) 
 | 
        { 
 | 
            lock (_locker) 
 | 
            { 
 | 
                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.Layer),OrderByType.Asc }, 
 | 
                    { nameof(Dt_LocationInfo.Column),OrderByType.Asc }, 
 | 
                    { nameof(Dt_LocationInfo.Depth),OrderByType.Desc }, 
 | 
                    { nameof(Dt_LocationInfo.Row),OrderByType.Asc } 
 | 
                }; 
 | 
  
 | 
                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> 
 | 
        /// <param name="locationCode">货位编号</param> 
 | 
        /// <param name="palletType">托盘类型</param> 
 | 
        /// <param name="locationStatus">货位状态</param> 
 | 
        public void UpdateLocationStatus(string locationCode, int palletType, LocationStatusEnum locationStatus, int warehousId) 
 | 
        { 
 | 
            Dt_LocationInfo location = Repository.QueryFirst(x => x.LocationCode == locationCode); 
 | 
            if (location == null) 
 | 
            { 
 | 
                throw new Exception($"未找到货位信息,{locationCode}"); 
 | 
            } 
 | 
            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) 
 | 
        { 
 | 
            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) 
 | 
                    { 
 | 
                        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) 
 | 
                    { 
 | 
                        if (warehouse.WarehouseCode==WarehouseEnum.HA154.ToString()) 
 | 
                        { 
 | 
                            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); 
 | 
                        } 
 | 
                    } 
 | 
                    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)) 
 | 
                            { 
 | 
                                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> 
 | 
        /// 获取不同深度的同组货位信息 
 | 
        /// </summary> 
 | 
        /// <param name="locationInfos"></param> 
 | 
        /// <param name="location"></param> 
 | 
        /// <returns></returns> 
 | 
        public List<Dt_LocationInfo> GetGroupLocations(List<Dt_LocationInfo> locationInfos, Dt_LocationInfo location) 
 | 
        { 
 | 
            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++) 
 | 
            { 
 | 
                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--) 
 | 
            { 
 | 
                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); 
 | 
                } 
 | 
            } 
 | 
            return groupLocations; 
 | 
        } 
 | 
  
 | 
        /// <summary> 
 | 
        /// 获取不同深度的同组货位信息 
 | 
        /// </summary> 
 | 
        /// <param name="location"></param> 
 | 
        /// <returns></returns> 
 | 
        public List<Dt_LocationInfo> GetGroupLocations(Dt_LocationInfo location) 
 | 
        { 
 | 
            List<Dt_LocationInfo> locationInfos = Repository.QueryData(x => x.RoadwayNo == location.RoadwayNo && x.WarehouseId == location.WarehouseId); 
 | 
  
 | 
            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 && (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 && (x.Row == row + 1 || x.Row == row - 1)); 
 | 
                if (j == 1 && location.RoadwayNo.Contains("CSJ") && (row==1 || row==6)) 
 | 
                { 
 | 
                    locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && (x.Row == row + 2 || x.Row == row - 2)); 
 | 
                } 
 | 
                if (locationInfo != null) 
 | 
                { 
 | 
                    groupLocations.Add(locationInfo); 
 | 
                } 
 | 
            } 
 | 
            return groupLocations; 
 | 
        } 
 | 
    } 
 | 
  
 | 
} 
 |