From b7f53ba61fbc1844d7b92ff852762b140d46ab54 Mon Sep 17 00:00:00 2001 From: huanghongfeng <huanghongfeng@hnkhzn.com> Date: 星期一, 23 六月 2025 19:58:16 +0800 Subject: [PATCH] 最新 --- 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Base/LocationInfoService.cs | 135 ++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 132 insertions(+), 3 deletions(-) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Base/LocationInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Base/LocationInfoService.cs" index 6f58879..860a837 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Base/LocationInfoService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Base/LocationInfoService.cs" @@ -1,10 +1,13 @@ -锘縰sing SqlSugar; +锘縰sing Microsoft.Data.SqlClient; +using Org.BouncyCastle.Bcpg.Sig; +using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Core; +using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_Core.Enums; using WIDESEA_Core.Helper; @@ -20,6 +23,9 @@ { private readonly IBasicRepository _basicRepository; public ILocationInfoRepository Repository => BaseDal; + private readonly static object _locker = new object(); + + public static List<LocationCache> locationCaches = new List<LocationCache>(); public LocationInfoService(ILocationInfoRepository BaseDal, IBasicRepository basicRepository) : base(BaseDal) { @@ -47,7 +53,7 @@ List<Dt_LocationInfo> locationInfos = Repository.QueryData(x => keys.Contains(x.Id)); locationInfos.ForEach(x => { - x.EnableStatus = EnableEnum.Enable.ObjToInt(); + x.EnableStatus = EnableStatusEnum.Normal.ObjToInt(); }); Repository.UpdateData(locationInfos); @@ -59,7 +65,7 @@ List<Dt_LocationInfo> locationInfos = Repository.QueryData(x => keys.Contains(x.Id)); locationInfos.ForEach(x => { - x.EnableStatus = EnableEnum.Disable.ObjToInt(); + x.EnableStatus = EnableStatusEnum.Disable.ObjToInt(); }); Repository.UpdateData(locationInfos); @@ -76,6 +82,122 @@ return LocationDisableStatus(new int[] { key }); } + + //浼犲叆宸烽亾鍙�2 璐ф灦绫诲瀷10 + public Dt_LocationInfo? GetLocation(string roadway,int Locationtype) + { + lock (_locker) + { + List<LocationCache> removeItems = locationCaches.Where(x => (DateTime.Now - x.DateTime).TotalMinutes > 20).ToList();//鏌ヨ娣诲姞闈欐�佸彉閲忚秴杩�20鍒嗛挓鐨勮揣浣� + 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 == roadway && x.LocationType == Locationtype && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && !lockLocations.Contains(x.LocationCode));//鏌ヨ宸烽亾鎵�鏈夎揣浣嶄俊鎭� + + + List<Dt_LocationInfo> emptyLocations = locationInfos.Where(x => x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && !lockLocations.Contains(x.LocationCode)).OrderBy(x => x.Layer).ThenBy(x => x.Column).ThenByDescending(x => x.Depth).ThenBy(x => x.Row).ToList();//鏌ヨ绌鸿揣浣嶄俊鎭苟鎺掗櫎20鍒嗛挓鍐呭垎閰嶇殑璐т綅,鏍规嵁灞傘�佸垪銆佹繁搴︺�佽鎺掑簭 + + + for (int i = 0; i < emptyLocations.Count; i++) + { + if (emptyLocations[i].Depth == 1)//鍒ゆ柇鏄惁1娣辫揣浣� + { + Dt_LocationInfo? sencondDepthLocation = locationInfos.FirstOrDefault(x => Math.Abs(x.Row - emptyLocations[i].Row) == 1 && x.Layer == emptyLocations[i].Layer && x.Column == emptyLocations[i].Column);//鏌ヨ2娣辫揣浣嶅搴旂殑1娣辫揣浣嶆槸鍚︿负绌�,闃叉鍑虹幇鍒嗛厤1娣辫揣浣嶈��2娣辫揣浣嶄负绌虹殑鎯呭喌 + if (sencondDepthLocation != null && sencondDepthLocation.LocationStatus == LocationStatusEnum.Free.ObjToInt()) + { + locationCaches.Add(new LocationCache { DateTime = DateTime.Now, LocationCode = sencondDepthLocation.LocationCode }); + return sencondDepthLocation;//1娣辫揣浣嶅強2娣辫揣浣嶉兘涓虹┖鐨勬儏鍐典笅,浼樺厛鍒嗛厤2娣辫揣浣� + } + else + { + locationCaches.Add(new LocationCache { DateTime = DateTime.Now, LocationCode = emptyLocations[i].LocationCode }); + return emptyLocations[i]; + } + } + else + { + Dt_LocationInfo? sencondDepthLocation = locationInfos.FirstOrDefault(x => Math.Abs(x.Row - emptyLocations[i].Row) == 1 && x.Layer == emptyLocations[i].Layer && x.Column == emptyLocations[i].Column);//鏌ヨ2娣辫揣浣嶅搴旂殑1娣辫揣浣嶆槸鍚︿负绌� + + if (sencondDepthLocation != null && sencondDepthLocation.LocationStatus == LocationStatusEnum.Free.ObjToInt()) + { + locationCaches.Add(new LocationCache { DateTime = DateTime.Now, LocationCode = emptyLocations[i].LocationCode }); + return emptyLocations[i]; + } + } + } + return null; + } + } + + + public Dt_LocationInfo? GetLocation2(string roadway, int Locationtype,int Startingcolumn,int Terminationcolumn) + { + lock (_locker) + { + List<LocationCache> removeItems = locationCaches.Where(x => (DateTime.Now - x.DateTime).TotalMinutes > 20).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 == roadway && x.LocationType == Locationtype && x.Column> Startingcolumn && x.Column< Terminationcolumn && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && !lockLocations.Contains(x.LocationCode));//鏌ヨ宸烽亾鎵�鏈夎揣浣嶄俊鎭� + + + List<Dt_LocationInfo> emptyLocations = locationInfos.Where(x => x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && !lockLocations.Contains(x.LocationCode)).OrderBy(x => x.Layer).ThenBy(x => x.Column).ThenByDescending(x => x.Depth).ThenBy(x => x.Row).ToList();//鏌ヨ绌鸿揣浣嶄俊鎭苟鎺掗櫎5鍒嗛挓鍐呭垎閰嶇殑璐т綅,鏍规嵁灞傘�佸垪銆佹繁搴︺�佽鎺掑簭 + + + for (int i = 0; i < emptyLocations.Count; i++) + { + if (emptyLocations[i].Depth == 1)//鍒ゆ柇鏄惁1娣辫揣浣� + { + Dt_LocationInfo? sencondDepthLocation = locationInfos.FirstOrDefault(x => Math.Abs(x.Row - emptyLocations[i].Row) == 1 && x.Layer == emptyLocations[i].Layer && x.Column == emptyLocations[i].Column);//鏌ヨ2娣辫揣浣嶅搴旂殑1娣辫揣浣嶆槸鍚︿负绌�,闃叉鍑虹幇鍒嗛厤1娣辫揣浣嶈��2娣辫揣浣嶄负绌虹殑鎯呭喌 + if (sencondDepthLocation != null && sencondDepthLocation.LocationStatus == LocationStatusEnum.Free.ObjToInt()) + { + locationCaches.Add(new LocationCache { DateTime = DateTime.Now, LocationCode = sencondDepthLocation.LocationCode }); + return sencondDepthLocation;//1娣辫揣浣嶅強2娣辫揣浣嶉兘涓虹┖鐨勬儏鍐典笅,浼樺厛鍒嗛厤2娣辫揣浣� + } + else + { + locationCaches.Add(new LocationCache { DateTime = DateTime.Now, LocationCode = emptyLocations[i].LocationCode }); + return emptyLocations[i]; + + } + } + else + { + Dt_LocationInfo? sencondDepthLocation = locationInfos.FirstOrDefault(x => Math.Abs(x.Row - emptyLocations[i].Row) == 1 && x.Layer == emptyLocations[i].Layer && x.Column == emptyLocations[i].Column);//鏌ヨ2娣辫揣浣嶅搴旂殑1娣辫揣浣嶆槸鍚︿负绌� + if (sencondDepthLocation != null && sencondDepthLocation.LocationStatus == LocationStatusEnum.Free.ObjToInt()) + { + locationCaches.Add(new LocationCache { DateTime = DateTime.Now, LocationCode = emptyLocations[i].LocationCode }); + return emptyLocations[i]; + } + } + } + return null; + } + } + + + public Dt_LocationInfo? GetLocationplatform(string LocationCode) + { + Dt_LocationInfo locationInfos = BaseDal.QueryFirst(x => x.LocationCode == LocationCode); + if(locationInfos !=null) + { + return locationInfos; + } + else + { + return null; + } + } public WebResponseContent InitializationLocation(InitializationLocationDTO initializationLocationDTO) { try @@ -136,5 +258,12 @@ return WebResponseContent.Instance.Error(ex.Message); } } + + public class LocationCache + { + public string LocationCode { get; set; } + + public DateTime DateTime { get; set; } + } } } -- Gitblit v1.9.3