From 9ec715d2deb18a269dd49c48da91a36632d08c81 Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期三, 18 六月 2025 00:56:26 +0800
Subject: [PATCH] 最新代码上传,优化功能等

---
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/LocationInfoService_Common.cs |  313 ++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 254 insertions(+), 59 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..c4fcbbc 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, string beRelocationCode = "", int heightType = 0)
         {
             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, 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($"鏈壘鍒颁粨搴撹揣浣嶅垎閰嶆柟娉�")
             };
         }
-
-        //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>();
@@ -97,7 +93,7 @@
                     { nameof(Dt_LocationInfo.Row),OrderByType.Asc }
                 };
 
-                return BaseDal.QueryFirst(x => x.RoadwayNo == roadwayNo && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && !lockLocations.Contains(x.LocationCode), orderBy);//鏌ヨ绌鸿揣浣嶄俊鎭苟鎺掗櫎5鍒嗛挓鍐呭垎閰嶇殑璐т綅,鏍规嵁灞傘�佸垪銆佹繁搴︺�佽鎺掑簭
+                return BaseDal.QueryFirst(x => x.RoadwayNo == roadwayNo && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.EnableStatus != EnableStatusEnum.Disable.ObjToInt() && !lockLocations.Contains(x.LocationCode), orderBy);//鏌ヨ绌鸿揣浣嶄俊鎭苟鎺掗櫎5鍒嗛挓鍐呭垎閰嶇殑璐т綅,鏍规嵁灞傘�佸垪銆佹繁搴︺�佽鎺掑簭
             }
         }
 
@@ -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,18 +119,183 @@
         /// <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);
+
+        //    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.ObjToInt())
+                    if (locations[i].LocationType != palletType)
                     {
-                        locations[i].LocationType = palletType.ObjToInt();
+                        locations[i].LocationType = palletType;
                     }
 
                     if (locations[i].LocationCode == location.LocationCode)
@@ -168,25 +329,55 @@
                     }
                 }
 
-                Dt_LocationInfo? nearLocation = locationInfos.FirstOrDefault(x => x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Column == location.Column + 1);
-                if (nearLocation != null)
+                if (palletTypeInfos.FirstOrDefault(x => x.LocaitonCount == 2) != null)
                 {
-                    List<Dt_LocationInfo> nearLocations = GetGroupLocations(locationInfos, nearLocation);
-                    for (int i = 0; i < nearLocations.Count; i++)
+                    Dt_LocationInfo? nearLocation;
+                    if (palletTypeInfo.IsOdd)
                     {
-                        if (nearLocations[i].LocationType != palletType.ObjToInt())
+                        if (warehouse.WarehouseCode==WarehouseEnum.HA154.ToString())
                         {
-                            nearLocations[i].LocationType = palletType.ObjToInt();
+                            nearLocation = locationInfos.FirstOrDefault(x => x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Column == location.Column - 1);
                         }
-
-                        if (palletType.ObjToInt() >= PalletTypeEnum.LargePallet.ObjToInt())
+                        else
                         {
-                            if (nearLocations[i].LocationCode == nearLocation.LocationCode)
+                            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))
                             {
-                                nearLocations[i].LocationStatus = locationStatus.ObjToInt();
-                            }
-                            else
-                            {
+                                if (nearLocations[i].LocationType != palletType)
+                                {
+                                    nearLocations[i].LocationType = palletType;
+                                }
+
                                 if (locationStatus == LocationStatusEnum.Lock)
                                 {
                                     if (nearLocations[i].LocationStatus == LocationStatusEnum.InStock.ObjToInt())
@@ -211,10 +402,12 @@
                                 }
                             }
                         }
-
+                        locations.AddRange(nearLocations);
                     }
-                    locations.AddRange(nearLocations);
                 }
+
+
+
             }
             else
             {
@@ -258,8 +451,6 @@
             Repository.UpdateData(locations);
         }
 
-
-
         /// <summary>
         /// 鑾峰彇涓嶅悓娣卞害鐨勫悓缁勮揣浣嶄俊鎭�
         /// </summary>
@@ -270,9 +461,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 +474,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 +495,10 @@
 
             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);
+                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);
@@ -312,7 +507,7 @@
 
             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);
+                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);

--
Gitblit v1.9.3