From a2f948006c6c7e918ba4f2e66d477cc2d5017a75 Mon Sep 17 00:00:00 2001
From: heshaofeng <heshaofeng@hnkhzn.com>
Date: 星期三, 10 十二月 2025 21:49:58 +0800
Subject: [PATCH] Merge branch 'master' of http://115.159.85.185:8098/r/ZhongRui/ALDbanyunxiangmu

---
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_BasicService/LocationInfoService.cs |   99 +++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 83 insertions(+), 16 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/LocationInfoService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/LocationInfoService.cs"
index 33789ce..0a34266 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/LocationInfoService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_BasicService/LocationInfoService.cs"
@@ -35,7 +35,7 @@
     {
         private readonly IUnitOfWorkManage _unitOfWorkManage;
         private readonly IRepository<Dt_StockInfo> _stockInfoRepository;
-        public  IRepository<Dt_LocationInfo> Repository => BaseDal;
+        public IRepository<Dt_LocationInfo> Repository => BaseDal;
         public readonly IRepository<Dt_LocationType> _locationTypeRepository;
 
         public LocationInfoService(IRepository<Dt_LocationInfo> BaseDal, IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_StockInfo> stockInfoRepository, IRepository<Dt_LocationType> locationTypeRepository) : base(BaseDal)
@@ -116,12 +116,74 @@
 
         private readonly static object _locker = new object();
         static List<LocationCache> locationCaches = new List<LocationCache>();
-        private int locationCacheTime = 10;
+        private int locationCacheTime = 20;
         /// <summary>
         /// 
         /// </summary>
         /// <param name="roadwayNo"></param>
         /// <returns></returns>
+        public Dt_LocationInfo? AssignLocation(int locationType)
+        {
+            if (locationType <= 0)
+            {
+                throw new ArgumentOutOfRangeException("浠撳簱鍖哄煙閿欒锛�");
+            }
+            lock (_locker)
+            {
+
+                List<LocationCache> removeItems = locationCaches.Where(x => (DateTime.Now - x.DateTime).TotalMinutes > locationCacheTime).ToList();
+                int count = removeItems.Count;
+                for (int i = 0; i < count; i++)
+                {
+                    locationCaches.Remove(removeItems[i]);
+                }
+
+                List<string> lockLocationCodes = locationCaches.Select(x => x.LocationCode).ToList();
+
+                //Dictionary<string, SqlSugar.OrderByType> orderBy = new Dictionary<string, OrderByType>()
+                //{
+                //    { nameof(Dt_LocationInfo.RoadwayNo),OrderByType.Asc },
+                //    { nameof(Dt_LocationInfo.Layer),OrderByType.Asc },
+                //    { nameof(Dt_LocationInfo.Column),OrderByType.Asc },
+                //    { nameof(Dt_LocationInfo.Depth),OrderByType.Desc },
+                //    { nameof(Dt_LocationInfo.Row),OrderByType.Asc }
+                //};
+
+                Dictionary<string, SqlSugar.OrderByType> orderBy = new Dictionary<string, OrderByType>()
+                {
+                    //{ nameof(Dt_LocationInfo.RoadwayNo),OrderByType.Asc },                       
+                    { nameof(Dt_LocationInfo.Layer),OrderByType.Asc },
+                    { nameof(Dt_LocationInfo.Row),OrderByType.Asc },
+                    { nameof(Dt_LocationInfo.Column),OrderByType.Asc },
+                    { nameof(Dt_LocationInfo.Depth),OrderByType.Desc },
+
+                };
+
+
+                var first = BaseDal.QueryFirst(x => x.LocationType == locationType && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.EnableStatus != EnableStatusEnum.Disable.ObjToInt() && !lockLocationCodes.Contains(x.LocationCode), orderBy);//鏌ヨ绌鸿揣浣嶄俊鎭苟鎺掗櫎5鍒嗛挓鍐呭垎閰嶇殑璐т綅,鏍规嵁灞傘�佸垪銆佹繁搴︺�佽鎺掑簭
+                if (first != null)
+                {
+                    locationCaches.Add(new LocationCache { LocationCode = first?.LocationCode, DateTime = DateTime.Now });
+
+                    using (var sugarClient = new SqlSugarClient(new ConnectionConfig
+                    {
+                        ConnectionString = DBContext.ConnectionString,
+                        DbType = DBContext.DbType, 
+                        IsAutoCloseConnection = true,  
+                        InitKeyType = InitKeyType.Attribute 
+                    }))
+                    {
+                        sugarClient.Updateable<Dt_LocationInfo>().SetColumns(x => new Dt_LocationInfo
+                        {
+                            LocationStatus = (int)LocationStatusEnum.InStockLock,
+                        }).Where(x => x.Id == first.Id).ExecuteCommand();
+                    }             
+                   
+                }
+
+                return first;
+            }
+        }
         public Dt_LocationInfo? AssignLocation()
         {
             lock (_locker)
@@ -145,14 +207,19 @@
                     { nameof(Dt_LocationInfo.Row),OrderByType.Asc }
                 };
 
-                var first= BaseDal.QueryFirst(x =>   x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.EnableStatus != EnableStatusEnum.Disable.ObjToInt() && !lockLocationCodes.Contains(x.LocationCode), orderBy);//鏌ヨ绌鸿揣浣嶄俊鎭苟鎺掗櫎5鍒嗛挓鍐呭垎閰嶇殑璐т綅,鏍规嵁灞傘�佸垪銆佹繁搴︺�佽鎺掑簭
-
-                locationCaches.Add(new LocationCache { LocationCode = first.LocationCode, DateTime = DateTime.Now });
+                var first = BaseDal.QueryFirst(x => x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.EnableStatus != EnableStatusEnum.Disable.ObjToInt() && !lockLocationCodes.Contains(x.LocationCode), orderBy);//鏌ヨ绌鸿揣浣嶄俊鎭苟鎺掗櫎5鍒嗛挓鍐呭垎閰嶇殑璐т綅,鏍规嵁灞傘�佸垪銆佹繁搴︺�佽鎺掑簭
+                if (first != null)
+                {
+                    locationCaches.Add(new LocationCache { LocationCode = first.LocationCode, DateTime = DateTime.Now });
+                    Db.Updateable<Dt_LocationInfo>().SetColumns(x => new Dt_LocationInfo
+                    {
+                        LocationStatus = (int)LocationStatusEnum.InStockLock,
+                    }).Where(x => x.Id == first.Id).ExecuteCommand();
+                }
 
                 return first;
             }
         }
-
         /// <summary>
         /// 鑾峰彇鍙嚭搴撹揣浣嶇紪鍙�
         /// </summary>
@@ -160,7 +227,7 @@
         /// <returns></returns>
         public List<string> GetCanOutLocationCodes()
         {
-            return Repository.QueryData(x => x.LocationCode, x =>  x.LocationStatus == LocationStatusEnum.InStock.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyOut.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt())).Distinct().ToList();
+            return Repository.QueryData(x => x.LocationCode, x => x.LocationStatus == LocationStatusEnum.InStock.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyOut.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt())).Distinct().ToList();
         }
 
         /// <summary>
@@ -175,8 +242,8 @@
 
         public List<LocationTypeDto> GetLocationTypes()
         {
-          return   _locationTypeRepository.Db.Queryable<Dt_LocationType>().Select(x=>
-              new LocationTypeDto { LocationType=x.LocationType,LocationTypeDesc=x.LocationTypeDesc}).ToList();   
+            return _locationTypeRepository.Db.Queryable<Dt_LocationType>().Select(x =>
+                new LocationTypeDto { LocationType = x.LocationType, LocationTypeDesc = x.LocationTypeDesc }).ToList();
         }
 
         /// <summary>
@@ -215,7 +282,7 @@
                                     LocationCode = $"HAI-{row.ToString().PadLeft(3, '0')}-{col.ToString().PadLeft(3, '0')}-{layer.ToString().PadLeft(2, '0')} ",
                                     LocationName = $"{row.ToString()}琛寋col.ToString()}鍒梴layer.ToString()}灞� ",
 
-                                    
+
                                     RoadwayNo = roadwayNo,
                                     Row = row,
                                     Column = col,
@@ -242,7 +309,7 @@
                                     LocationCode = $"HAI-{r1.ToString().PadLeft(3, '0')}-{col.ToString().PadLeft(3, '0')}-{layer.ToString().PadLeft(2, '0')} ",
                                     LocationName = $"{r1.ToString()}琛寋col.ToString()}鍒梴layer.ToString()}灞� ",
 
-                              
+
                                     RoadwayNo = roadwayNo,
                                     Row = r1,
                                     Column = col,
@@ -261,7 +328,7 @@
                                     LocationName = $"{r2.ToString()}琛寋col.ToString()}鍒梴layer.ToString()}灞� ",
 
 
-                              
+
                                     RoadwayNo = roadwayNo,
                                     Row = r2,
                                     Column = col,
@@ -322,9 +389,9 @@
                                 Row = i + 1,
                                 Depth = depth,
                             };
-                          
-   locationInfo.LocationCode = $"HAI-{locationInfo.Row.ToString().PadLeft(3, '0')}-{locationInfo.Column.ToString().PadLeft(3, '0')}-{locationInfo.Layer.ToString().PadLeft(2, '0')}";
-    locationInfo.LocationName = $"HAI{locationInfo.RoadwayNo}宸烽亾{locationInfo.Row.ToString().PadLeft(3, '0')}琛寋locationInfo.Column.ToString().PadLeft(3, '0')}鍒梴locationInfo.Layer.ToString().PadLeft(3, '0')}灞�";
+
+                            locationInfo.LocationCode = $"HAI-{locationInfo.Row.ToString().PadLeft(3, '0')}-{locationInfo.Column.ToString().PadLeft(3, '0')}-{locationInfo.Layer.ToString().PadLeft(2, '0')}";
+                            locationInfo.LocationName = $"HAI{locationInfo.RoadwayNo}宸烽亾{locationInfo.Row.ToString().PadLeft(3, '0')}琛寋locationInfo.Column.ToString().PadLeft(3, '0')}鍒梴locationInfo.Layer.ToString().PadLeft(3, '0')}灞�";
 
 
                             //locationInfo.LocationCode = $"{locationInfo.RoadwayNo}-{locationInfo.Row.ToString().PadLeft(3, '0')}-{locationInfo.Column.ToString().PadLeft(3, '0')}-{locationInfo.Layer.ToString().PadLeft(3, '0')}-{locationInfo.Depth.ToString().PadLeft(2, '0')}";
@@ -334,7 +401,7 @@
                         }
                     }
                 }
-             //   BaseDal.AddData(locationInfos);
+                //   BaseDal.AddData(locationInfos);
                 return WebResponseContent.Instance.OK();
             }
             catch (Exception ex)

--
Gitblit v1.9.3