From fb745c842df36edc5101291a7f239c11c97bcc2f Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期四, 11 九月 2025 16:46:33 +0800
Subject: [PATCH] 最新代码更新,BST,MES部分

---
 项目代码/WMS/WMSServices/WIDESEA_BasicService/Service/LocationInfoService_Common.cs |  194 +++++++++++++++++++++++++-----------------------
 1 files changed, 101 insertions(+), 93 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_BasicService/Service/LocationInfoService_Common.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_BasicService/Service/LocationInfoService_Common.cs"
index c3e5351..4d4397a 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_BasicService/Service/LocationInfoService_Common.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_BasicService/Service/LocationInfoService_Common.cs"
@@ -20,6 +20,7 @@
 using WIDESEA_Common.LocationEnum;
 using WIDESEA_Common.TaskEnum;
 using WIDESEA_Common.WareHouseEnum;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
 
 namespace WIDESEA_BasicService
 {
@@ -35,33 +36,28 @@
             {
                 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($"璇烽厤缃墭鐩樼被鍨嬩俊鎭�");
-            //}
+            Dt_PalletTypeInfo? palletTypeInfo = _basicRepository.PalletTypeInfoRepository.QueryFirst(x => x.PalletType == palletType && x.WarehouseId == warehouseId);
+            if (palletTypeInfo == null)
+            {
+                if (warehouse.WarehouseCode == WarehouseEnum.LLDYL.ToString())
+                {
+                    throw new Exception($"璇烽厤缃墭鐩樼被鍨嬩俊鎭�");
+                }
+            }
 
             return warehouse.WarehouseCode switch
             {
-                "LLDCP" or "LLDYL"=> AssignLocation(roadwayNo),
+                "LLDCP" or  "LLDFL" => AssignLocation(roadwayNo),
+                "LLDYL" => AssignLocationYL(roadwayNo, palletTypeInfo),
                 _ => throw new Exception($"鏈壘鍒颁粨搴撹揣浣嶅垎閰嶆柟娉�")
             };
         }
 
         private readonly static object _locker = new object();
+        private readonly static object _AssignLocationYL = new object();
         private static List<LocationCache> locationCaches = new List<LocationCache>();
         /// <summary>
-        /// 
+        /// 鍒嗛厤璐т綅
         /// </summary>
         /// <param name="roadwayNo"></param>
         /// <returns></returns>
@@ -78,11 +74,8 @@
 
                 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.Column),OrderByType.Desc },
                     { nameof(Dt_LocationInfo.Layer),OrderByType.Asc },
                     { nameof(Dt_LocationInfo.Depth),OrderByType.Desc },
@@ -92,7 +85,62 @@
                 return BaseDal.QueryFirst(x => x.RoadwayNo == roadwayNo && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.EnableStatus != EnableStatusEnum.Disable.ObjToInt() && !lockLocations.Contains(x.LocationCode), orderBy);//鏌ヨ绌鸿揣浣嶄俊鎭苟鎺掗櫎5鍒嗛挓鍐呭垎閰嶇殑璐т綅,鏍规嵁灞傘�佸垪銆佹繁搴︺�佽鎺掑簭
             }
         }
+        public Dt_LocationInfo? AssignLocationYL(string roadwayNo, Dt_PalletTypeInfo palletTypeInfo)
+        {
+            lock (_AssignLocationYL)
+            {
+                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.Column),OrderByType.Desc },
+                    { nameof(Dt_LocationInfo.Layer),OrderByType.Asc },
+                    { nameof(Dt_LocationInfo.Depth),OrderByType.Desc },
+                    { nameof(Dt_LocationInfo.Row),OrderByType.Asc }
+                };
+                if (roadwayNo.Contains("YLDual"))
+                {
+                    if (palletTypeInfo.LocaitonCount==1)
+                    {
+                        return BaseDal.QueryFirst(x => x.LocationType == LocationTypeEnum.SmallPallet.ObjToInt() && x.RoadwayNo == roadwayNo && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.EnableStatus != EnableStatusEnum.Disable.ObjToInt() && !lockLocations.Contains(x.LocationCode), orderBy);//鏌ヨ绌鸿揣浣嶄俊鎭苟鎺掗櫎5鍒嗛挓鍐呭垎閰嶇殑璐т綅,鏍规嵁灞傘�佸垪銆佹繁搴︺�佽鎺掑簭
+                    }
+                    else
+                    {
+                        //鏌ヨ绌鸿揣浣嶄俊鎭苟鎺掗櫎5鍒嗛挓鍐呭垎閰嶇殑璐т綅,鏍规嵁灞傘�佸垪銆佹繁搴︺�佽鎺掑簭
+                        List<Dt_LocationInfo> locationInfosMedium = BaseDal.QueryData(x => x.LocationType == LocationTypeEnum.MediumPallet.ObjToInt() && x.RoadwayNo == roadwayNo && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.EnableStatus != EnableStatusEnum.Disable.ObjToInt() && !lockLocations.Contains(x.LocationCode), orderBy);
+                        Dt_LocationInfo locationInfo = new Dt_LocationInfo();
+                        foreach (var item in locationInfosMedium)
+                        {
+                            //鑾峰彇鏇存敼搴撲綅
+                            Dt_LocationInfo? nearLocation1;
+                            Dt_LocationInfo? nearLocation2;
+
+                            nearLocation1 = locationInfos.FirstOrDefault(x => x.LocationType == LocationTypeEnum.SmallPallet.ObjToInt() && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.Row == item.Row && x.Layer == item.Layer && x.Depth == item.Depth && x.Column == item.Column - 1);
+                            nearLocation2 = locationInfos.FirstOrDefault(x => x.LocationType == LocationTypeEnum.SmallPallet.ObjToInt() && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.Row == item.Row && x.Layer == item.Layer && x.Depth == item.Depth && x.Column == item.Column + 1);
+                            if (nearLocation1!=null && nearLocation2!=null)
+                            {
+                                locationInfo = item;
+                            }
+                        }
+                        return locationInfo;
+                    }
+                }
+                else
+                {
+                    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>
@@ -263,27 +311,21 @@
         //    Repository.UpdateData(locations);
         //}
 
-        public void UpdateLocationStatus(Dt_LocationInfo location, int palletType, LocationStatusEnum locationStatus, int warehousId)
+        public void UpdateLocationStatus(Dt_LocationInfo location, int palletType, LocationStatusEnum locationStatus, int warehouseId)
         {
             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_PalletTypeInfo> palletTypeInfos = _basicRepository.PalletTypeInfoRepository.QueryData(x => x.WarehouseId == warehouseId);
+            Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == warehouseId);
+
+            Dt_PalletTypeInfo? palletTypeInfo = _basicRepository.PalletTypeInfoRepository.QueryFirst(x => x.PalletType == palletType && x.WarehouseId == warehouseId);
+            if (palletTypeInfo == null)
+            {
+                if (warehouse.WarehouseCode == WarehouseEnum.LLDYL.ToString())
+                {
+                    throw new Exception($"璇烽厤缃墭鐩樼被鍨嬩俊鎭�");
+                }
+            }
             List<Dt_LocationInfo> locations = GetGroupLocations(locationInfos, location);
             if (locationInfos.Max(x => x.Depth) < 3)
             {
@@ -327,76 +369,42 @@
 
                 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);
-                    //}
+                    //鑾峰彇鏇存敼搴撲綅
+                    Dt_LocationInfo? nearLocation1;
+                    Dt_LocationInfo? nearLocation2;
 
-                    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;
-                        }
-                    }
+                    nearLocation1 = locationInfos.FirstOrDefault(x => x.LocationType == LocationTypeEnum.SmallPallet.ObjToInt() && x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Column == location.Column - 1);
+                    nearLocation2 = locationInfos.FirstOrDefault(x => x.LocationType == LocationTypeEnum.SmallPallet.ObjToInt() && x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Column == location.Column + 1);
 
-                    if (nearLocation != null)
+
+                    if (nearLocation1 != null && nearLocation2 != null)
                     {
-                        List<Dt_LocationInfo> nearLocations = GetGroupLocations(locationInfos, nearLocation);
+                        //鍙岃緟鏂�
+                        List<Dt_LocationInfo> nearLocations = new List<Dt_LocationInfo>()
+                        {
+                            nearLocation1,
+                            nearLocation2
+                        };
                         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 (locationStatus == LocationStatusEnum.Lock)
                             {
-                                if (nearLocations[i].LocationType != palletType)
+                                if (nearLocations[i].LocationStatus == LocationStatusEnum.Free.ObjToInt())
                                 {
-                                    nearLocations[i].LocationType = palletType;
+                                    nearLocations[i].LocationStatus = LocationStatusEnum.FreeLock.ObjToInt();
                                 }
-
-                                if (locationStatus == LocationStatusEnum.Lock)
+                            }
+                            else if (locationStatus == LocationStatusEnum.Free)
+                            {
+                                if (nearLocations[i].LocationStatus == LocationStatusEnum.FreeLock.ObjToInt())
                                 {
-                                    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();
-                                    }
+                                    nearLocations[i].LocationStatus = LocationStatusEnum.Free.ObjToInt();
                                 }
                             }
                         }
                         locations.AddRange(nearLocations);
                     }
                 }
-
-
-
             }
             else
             {

--
Gitblit v1.9.3