wangxinhui
4 天以前 9ec715d2deb18a269dd49c48da91a36632d08c81
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/LocationInfoService_Common.cs
@@ -26,7 +26,7 @@
    public partial class LocationInfoService
    {
        public Dt_LocationInfo? AssignLocation(string roadwayNo, int 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)
@@ -51,13 +51,13 @@
            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),
                "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" => AssignLocation(roadwayNo),
                "HA71" or "HA72" or "HA73" => AssignLocation(roadwayNo),
                "HA60" => AssignLocation(roadwayNo),
                _ => throw new Exception($"未找到仓库货位分配方法")
            };
@@ -119,153 +119,153 @@
        /// <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);
        //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();
                    }
        //    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();
                            }
                        }
                    }
                }
        //            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();
                        }
        //        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();
                                    }
                                }
                            }
                        }
        //                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();
                    }
                }
            }
        //            }
        //            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;
                });
            }
        //    if (locations.Where(x => x.LocationStatus == LocationStatusEnum.Free.ObjToInt()).Count() == locations.Count && locationStatus == LocationStatusEnum.Free)
        //    {
        //        locations.ForEach(x =>
        //        {
        //            x.LocationType = 0;
        //        });
        //    }
            Repository.UpdateData(locations);
        }
        //    Repository.UpdateData(locations);
        //}
        public void UpdateLocationStatus(Dt_LocationInfo location, int palletType, LocationStatusEnum locationStatus, int warehousId)
        {
@@ -274,7 +274,7 @@
            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 (palletTypeInfo == null || warehouse.WarehouseCode == WarehouseEnum.HA60.ToString())
            {
                if (warehouse.WarehouseCode == WarehouseEnum.HA153.ToString() || warehouse.WarehouseCode == WarehouseEnum.HA71.ToString() || warehouse.WarehouseCode == WarehouseEnum.HA60.ToString())
                {
@@ -334,16 +334,34 @@
                    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);
                        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 (location.RoadwayNo == "SC01_BC")
                    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)
@@ -480,8 +498,7 @@
            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);
                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);
@@ -490,8 +507,7 @@
            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);
                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);