dengjunjie
2024-12-24 18d1f45193e34e00fc1b6f65b8596ddb29c5267d
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/LocationInfoService_Common.cs
@@ -45,6 +45,28 @@
            };
        }
        //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>();
        /// <summary>
@@ -110,8 +132,40 @@
            {
                for (int i = 0; i < locations.Count; i++)
                {
                    locations[i].LocationStatus = locationStatus.ObjToInt();
                    locations[i].LocationType = palletType.ObjToInt();
                    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);
@@ -120,11 +174,44 @@
                    List<Dt_LocationInfo> nearLocations = GetGroupLocations(locationInfos, nearLocation);
                    for (int i = 0; i < nearLocations.Count; i++)
                    {
                        nearLocations[i].LocationType = palletType.ObjToInt();
                        if (palletType == PalletTypeEnum.LargePallet)
                        if (nearLocations[i].LocationType != palletType.ObjToInt())
                        {
                            nearLocations[i].LocationStatus = locationStatus.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.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);
                }
@@ -133,12 +220,45 @@
            {
                for (int i = 0; i < locations.Count; i++)
                {
                    locations[i].LocationStatus = locationStatus.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();
                            }
                        }
                    }
                    if (locations[i].LocationType != palletType.ObjToInt())
                    {
                        locations[i].LocationType = palletType.ObjToInt();
                    }
                }
            }
            Repository.UpdateData(locations);
        }
        /// <summary>
        /// èŽ·å–ä¸åŒæ·±åº¦çš„åŒç»„è´§ä½ä¿¡æ¯
@@ -146,7 +266,7 @@
        /// <param name="locationInfos"></param>
        /// <param name="location"></param>
        /// <returns></returns>
        private List<Dt_LocationInfo> GetGroupLocations(List<Dt_LocationInfo> locationInfos, Dt_LocationInfo location)
        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);
@@ -169,6 +289,37 @@
            }
            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);
            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);
                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);
                if (locationInfo != null)
                {
                    groupLocations.Add(locationInfo);
                }
            }
            return groupLocations;
        }
    }
}