1
dengjunjie
2025-01-09 be0856c1bf533ed6001ff786908ae98e4b853eb5
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/LocationInfoService_Common.cs
@@ -18,12 +18,14 @@
using WIDESEA_Model.Models;
using WIDESEA_Common.CommonEnum;
using WIDESEA_Common.LocationEnum;
using WIDESEA_Common.TaskEnum;
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)
@@ -31,16 +33,22 @@
                throw new Exception($"未找到仓库信息");
            }
            return warehouse.WarehouseName switch
            Dt_PalletTypeInfo palletTypeInfo = _basicRepository.PalletTypeInfoRepository.QueryFirst(x => x.PalletType == palletType && x.WarehouseId == warehouse.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),
                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($"未找到仓库货位分配方法")
            };
        }
@@ -85,7 +93,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)
@@ -101,7 +109,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);
@@ -176,7 +184,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())
                                    {
@@ -233,10 +241,164 @@
                    }
                }
            }
            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_PalletTypeInfo? palletTypeInfo = palletTypeInfos.FirstOrDefault(x => x.PalletType == palletType && x.WarehouseId == warehousId);
            if (palletTypeInfo == null)
            {
                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 (nearLocation != null)
                    {
                        List<Dt_LocationInfo> nearLocations = GetGroupLocations(locationInfos, nearLocation);
                        for (int i = 0; i < nearLocations.Count; i++)
                        {
                            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>
        /// èŽ·å–ä¸åŒæ·±åº¦çš„åŒç»„è´§ä½ä¿¡æ¯