Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/AspNetCoreSchedule.cs
@@ -1,6 +1,7 @@ using Masuit.Tools; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using WIDESEA_Cache; using WIDESEA_Core.Const; using WIDESEA_DTO.WMS; using WIDESEA_IServices; @@ -17,10 +18,11 @@ private readonly IDt_StationManagerRepository _stationManagerRepository; private readonly ISys_ConfigService _configService; private readonly ILocationInfoRepository _locationRepository; private readonly ISimpleCacheService _simpleCacheService; private Timer _timer; public MyBackgroundService(ILogger<MyBackgroundService> logger, ILocationInfoRepository locationRepository, IStockInfoRepository stockInfoRepository, IDt_AreaInfoRepository areaInfoRepository, IDt_TaskRepository taskRepository, IDt_StationManagerRepository stationManagerRepository, ISys_ConfigService configService) public MyBackgroundService(ILogger<MyBackgroundService> logger, ILocationInfoRepository locationRepository, IStockInfoRepository stockInfoRepository, IDt_AreaInfoRepository areaInfoRepository, IDt_TaskRepository taskRepository, IDt_StationManagerRepository stationManagerRepository, ISys_ConfigService configService, ISimpleCacheService simpleCacheService) { _logger = logger; _locationRepository = locationRepository; @@ -29,11 +31,12 @@ _taskRepository = taskRepository; _stationManagerRepository = stationManagerRepository; _configService = configService; _simpleCacheService = simpleCacheService; } public Task StartAsync(CancellationToken cancellationToken) { _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromMinutes(10)); _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromMinutes(20)); return Task.CompletedTask; } @@ -44,10 +47,12 @@ var area = _areaInfoRepository.QueryFirst(x => x.AreaCode == "GWSC1"); if (area == null) { return; } var stockInfo = _stockInfoRepository.Db.Queryable<DtStockInfo>() .Includes(x => x.LocationInfo) // 预加载LocationInfo .Includes(x => x.StockInfoDetails) // 预加载StockInfoDetails .Where(x => x.AreaCode == area.AreaCode && x.OutboundTime < DateTime.Now && x.IsFull == true) // 过滤条件 IDictionary<string, DtStockInfo>? stockInfos = _simpleCacheService.HashGetAll<DtStockInfo>(WIDESEA_Cache.CacheConst.Cache_DtStockInfo); List<DtStockInfo> stockInfoList = stockInfos.Values.ToList(); var stockInfo = stockInfoList.Where(x => x.AreaCode == area.AreaCode && x.OutboundTime < DateTime.Now && x.IsFull == true) // 过滤条件 .Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && x.LocationInfo.AreaId == area.AreaID) // 过滤条件 .OrderBy(x => x.OutboundTime) // 排序 .ToList(); // 获取第一个元素 Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs
@@ -1,6 +1,6 @@ using Autofac.Core; using Mapster; using Mapster; using Masuit.Tools; using NewLife.Caching; using SqlSugar; using System.Text.RegularExpressions; using WIDESEA_Cache; @@ -450,6 +450,9 @@ if (isResult) { _locationStatusChangeRecordRepository.AddLocationStatusChangeRecord(locationInf, lastStatus, (int)StatusChangeTypeEnum.AutomaticStorage, task.TaskNum); _simpleCacheService.HashAdd(WIDESEA_Cache.CacheConst.Cache_DtStockInfo, stock.PalletCode, stock); content.OK("入库任务完成成功"); } else @@ -1342,7 +1345,7 @@ // .WhereIF(!materielCodes.IsNullOrEmpty(), x => x.StockInfoDetails.Any(y => materielCodes.Contains(y.MaterielCode))) // .OrderBy(x => x.OutboundTime) // 排序 // .FirstAsync(); // 获取第一个元素 #endregion #endregion 请求出库(实盘&空盘) return result; } @@ -1359,29 +1362,43 @@ return null; } var outBoundMateriel = AppSettings.app<OutBoundMateriel>("OutBoundMateriel"); List<string> materielCodes = null; if (outBoundMateriel.Count != 0) { materielCodes = outBoundMateriel.Where(x => x.ProductionLine == productionLine && x.ProcessCode == areaCodes[0]).Select(x => x.MaterielCode).ToList(); } //var outBoundMateriel = AppSettings.app<OutBoundMateriel>("OutBoundMateriel"); //List<string> materielCodes = null; //if (outBoundMateriel.Count != 0) //{ // materielCodes = outBoundMateriel.Where(x => x.ProductionLine == productionLine && x.ProcessCode == areaCodes[0]).Select(x => x.MaterielCode).ToList(); //} var devices = SqlSugarHelper.DbWCS.Queryable<Dt_DeviceInfo>() var outBoundMateriel = AppSettings.app<OutBoundMateriel>("OutBoundMateriel"); List<string>? materielCodes = outBoundMateriel.Count != 0 ? outBoundMateriel.Where(x => x.ProductionLine == productionLine && x.ProcessCode == areaCodes[0]) .Select(x => x.MaterielCode) .ToList() : null; var deviceCode = SqlSugarHelper.DbWCS.Queryable<Dt_DeviceInfo>() .Where(x => x.DeviceStatus == "1") .Where(x => x.DeviceCode.Contains("CWSC")) .ToList(); var deviceCode = devices.Select(x => x.DeviceCode).ToList(); .ToList().Select(x => x.DeviceCode).ToList(); //var deviceCode = devices.Select(x => x.DeviceCode).ToList(); var result = await _stockInfoRepository.Db.Queryable<DtStockInfo>() .Includes(x => x.LocationInfo) // 预加载LocationInfo .Includes(x => x.StockInfoDetails) // 预加载StockInfoDetails .Where(x => areaCodes.Contains(x.AreaCode) && x.OutboundTime < DateTime.Now && x.IsFull == true) // 过滤条件 IDictionary<string, DtStockInfo>? stockInfos = _simpleCacheService.HashGetAll<DtStockInfo>(WIDESEA_Cache.CacheConst.Cache_DtStockInfo); List<DtStockInfo> stockInfoList = stockInfos.Values.ToList(); var result = stockInfoList.Where(x => areaCodes.Contains(x.AreaCode) && x.OutboundTime < DateTime.Now && x.IsFull == true) // 过滤条件 .WhereIF(!productionLine.IsNullOrEmpty(), x => x.ProductionLine == productionLine) .Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && areaId.Contains(x.LocationInfo.AreaId) && x.LocationInfo.EnalbeStatus == (int)EnableEnum.Enable) // 过滤条件 .WhereIF(!deviceCode.IsNullOrEmpty(), x => deviceCode.Contains(x.LocationInfo.RoadwayNo)) .WhereIF(!materielCodes.IsNullOrEmpty(), x => x.StockInfoDetails.Any(y => materielCodes.Contains(y.MaterielCode))) .OrderBy(x => x.OutboundTime) // 排序 .FirstAsync(); // 获取第一个元素 .FirstOrDefault(); // 获取第一个元素 if (result != null) { stockInfoList = stockInfoList.Where(x => x != result).ToList(); _simpleCacheService.HashDel<DtStockInfo>(WIDESEA_Cache.CacheConst.Cache_DtStockInfo, new string[] { result.PalletCode }); } return result; } @@ -1398,26 +1415,28 @@ ConsoleHelper.WriteColorLine(station.Roadway, ConsoleColor.Magenta); var stackers = station.Roadway.Split(',').ToList(); var devices = SqlSugarHelper.DbWCS.Queryable<Dt_DeviceInfo>() var deviceCode = SqlSugarHelper.DbWCS.Queryable<Dt_DeviceInfo>() .Where(x => x.DeviceStatus == "1") .Where(x => stackers.Contains(x.DeviceCode)) .ToList(); .ToList().Select(x => x.DeviceCode).ToList(); var deviceCode = devices.Select(x => x.DeviceCode).ToList(); IDictionary<string, DtStockInfo>? stockInfos = _simpleCacheService.HashGetAll<DtStockInfo>(WIDESEA_Cache.CacheConst.Cache_DtStockInfo); List<DtStockInfo> stockInfoList = stockInfos.Values.ToList(); var result = await _stockInfoRepository.Db.Queryable<DtStockInfo>() .Includes(x => x.LocationInfo) // 预加载LocationInfo .Includes(x => x.StockInfoDetails) // 预加载StockInfoDetails .Where(x => x.ProductionLine == station.productLine) var result = stockInfoList.Where(x => x.ProductionLine == station.productLine) .Where(x => x.AreaCode == areaCode && x.IsFull == false) .Where(x => x.StockInfoDetails.Any(y => y.MaterielCode == "空托盘")) .Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && x.LocationInfo.AreaId == area.AreaID && x.LocationInfo.EnalbeStatus == (int)EnableEnum.Enable) // 过滤条件 .WhereIF(!deviceCode.IsNullOrEmpty(), x => deviceCode.Contains(x.LocationInfo.RoadwayNo)) .OrderBy(x => x.CreateDate) // 排序 .FirstAsync(); // 转换为列表 .FirstOrDefault(); // 转换为列表 //var firstOrDefault = result[0]; // 查找第一个匹配的元素 //return firstOrDefault; if (result != null) { stockInfoList = stockInfoList.Where(x => x != result).ToList(); _simpleCacheService.HashDel<DtStockInfo>(WIDESEA_Cache.CacheConst.Cache_DtStockInfo, new string[] { result.PalletCode }); } return result; } Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs
@@ -1,4 +1,5 @@ using Masuit.Tools; using SqlSugar; using WIDESEA_Common.CustomModels; //using WIDESEA_Common.CustomModels; @@ -948,26 +949,28 @@ ConsoleHelper.WriteColorLine(station.Roadway, ConsoleColor.Magenta); var stackers = station.Roadway.Split(',').ToList(); var devices = SqlSugarHelper.DbWCS.Queryable<Dt_DeviceInfo>() var deviceCode = SqlSugarHelper.DbWCS.Queryable<Dt_DeviceInfo>() .Where(x => x.DeviceStatus == "1") .Where(x => stackers.Contains(x.DeviceCode)) .ToList(); .ToList().Select(x => x.DeviceCode).ToList(); var deviceCode = devices.Select(x => x.DeviceCode).ToList(); // 从缓存中获取库存信息 IDictionary<string, DtStockInfo>? stockInfos = _simpleCacheService.HashGetAll<DtStockInfo>(WIDESEA_Cache.CacheConst.Cache_DtStockInfo); List<DtStockInfo> stockInfoList = stockInfos.Values.ToList(); var result = await _stockInfoRepository.Db.Queryable<DtStockInfo>() .Includes(x => x.LocationInfo) // 预加载LocationInfo .Includes(x => x.StockInfoDetails) // 预加载StockInfoDetails .Where(x => x.ProductionLine == productLine) var result = stockInfoList.Where(x => x.ProductionLine == productLine) .Where(x => x.AreaCode == areaCode && x.IsFull == false) .Where(x => x.StockInfoDetails.Any(y => y.MaterielCode == "空托盘")) .Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && x.LocationInfo.AreaId == area.AreaID && x.LocationInfo.EnalbeStatus == (int)EnableEnum.Enable) // 过滤条件 .WhereIF(!deviceCode.IsNullOrEmpty(), x => deviceCode.Contains(x.LocationInfo.RoadwayNo)) .OrderBy(x => x.CreateDate) // 排序 .FirstAsync(); // 转换为列表 .FirstOrDefault(); // 转换为列表 //var firstOrDefault = result[0]; // 查找第一个匹配的元素 //return firstOrDefault; if (result != null) { stockInfoList = stockInfoList.Where(x => x != result).ToList(); _simpleCacheService.HashDel<DtStockInfo>(WIDESEA_Cache.CacheConst.Cache_DtStockInfo, new string[] { result.PalletCode }); } return result; } @@ -1013,23 +1016,32 @@ Dt_StationManager station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == json.Position && x.stationType == 12 && x.stationArea == "Call"); if (station == null) { throw new Exception($"未找到包装站台信息,请检查传入参数{json.Position}"); } var devices = SqlSugarHelper.DbWCS.Queryable<Dt_DeviceInfo>() var deviceCode = SqlSugarHelper.DbWCS.Queryable<Dt_DeviceInfo>() .Where(x => x.DeviceStatus == "1") .Where(x => x.DeviceCode.Contains("CWSC")) // 过滤条件 .ToList(); var deviceCode = devices.Select(x => x.DeviceCode).ToList(); .ToList().Select(x => x.DeviceCode).ToList(); //LogFactory.GetLog("常温3出库至包装").Info(true, $"常温3出库至包装传入参数:" + JsonConvert.SerializeObject(json, Formatting.Indented)); var stockInfo = _stockInfoRepository.Db.Queryable<DtStockInfo>() .Where(x => x.ProductionLine == station.productLine) .Includes(x => x.LocationInfo) // 预加载LocationInfo // 从缓存中获取库存信息 IDictionary<string, DtStockInfo>? stockInfos = _simpleCacheService.HashGetAll<DtStockInfo>(WIDESEA_Cache.CacheConst.Cache_DtStockInfo); List<DtStockInfo> stockInfoList = stockInfos.Values.ToList(); var stockInfo = stockInfoList.Where(x => x.ProductionLine == station.productLine) .Where(x => x.AreaCode == "CWSC3" && x.IsFull == true) // 过滤条件 .Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock) // 过滤条件 .WhereIF(!deviceCode.IsNullOrEmpty(), x => deviceCode.Contains(x.LocationInfo.RoadwayNo)) .OrderBy(x => x.OutboundTime) // 排序 .First(); // 获取第一个元素 .FirstOrDefault(); // 获取第一个元素 //DtStockInfo stockInfo = _stockInfoRepository.QueryFirst(X => X.IsFull && X.AreaCode == "CWSC3" && X.ProductionLine == station.productLine); if (stockInfo != null) { stockInfoList = stockInfoList.Where(x => x != stockInfo).ToList(); _simpleCacheService.HashDel<DtStockInfo>(WIDESEA_Cache.CacheConst.Cache_DtStockInfo, new string[] { stockInfo.PalletCode }); } if (stockInfo == null) throw new Exception($"库内{station.productLine}无满足条件的库存可出库"); DtLocationInfo locationInfo = _locationRepository.QueryFirst(x => x.AreaId == 5 && x.LocationCode == stockInfo.LocationCode); Code Management/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json
@@ -11,9 +11,9 @@ //连接字符串 //"ConnectionString": "HTI6FB1H05Krd07mNm9yBCNhofW6edA5zLs9TY~MNthRYW3kn0qKbMIsGp~3yyPDF1YZUCPBQx8U0Jfk4PH~ajNFXVIwlH85M3F~v_qKYQ3CeAz3q1mLVDn8O5uWt1~3Ut2V3KRkEwYHvW2oMDN~QIDXPxDgXN0R2oTIhc9dNu7QNaLEknblqmHhjaNSSpERdDVZIgHnMKejU_SL49tralBkZmDNi0hmkbL~837j1NWe37u9fJKmv91QPb~16JsuI9uu0EvNZ06g6PuZfOSAeFH9GMMIZiketdcJG3tHelo=", //"ConnectionString": "Data Source=192.168.5.251;Initial Catalog=WIDESEA_WMSDB_BBMain;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", //"ConnectionString": "Data Source=127.0.0.1;Initial Catalog=WIDESEA_WMS2F08;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", "ConnectionString": "Data Source=127.0.0.1;Initial Catalog=WIDESEA_WMS2F08;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", //"ConnectionString": "Data Source=.\\LIULEI;Initial Catalog=WIDESEA_WMSDB_BBMain;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", "ConnectionString": "Data Source=192.168.20.251;Initial Catalog=WIDESEA_WMSDB;User ID=sa;Password=123456@gy;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", //"ConnectionString": "Data Source=192.168.20.251;Initial Catalog=WIDESEA_WMSDB;User ID=sa;Password=123456@gy;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", //"ConnectionStringWCS": "Data Source=192.168.5.251;Initial Catalog=WIDESEAWCS_TEST;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", "ConnectionStringWCS": "Data Source=127.0.0.1;Initial Catalog=WIDESEA_WCSDB;User ID=sa;Password=sa123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", //跨域