优化
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace WMS.Web.Domain.IService.Public
|
||||
{
|
||||
public interface IRedisConcurrentProcessService
|
||||
{
|
||||
bool CanAccessMethod(string cacheKey);
|
||||
|
||||
void UpdateAccessStatus(string cacheKey, bool canAccess);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
using StackExchange.Redis;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using WMS.Web.Domain.IService.Public;
|
||||
|
||||
namespace WMS.Web.Domain.Services.Public
|
||||
{
|
||||
public class RedisConcurrentProcessService: IRedisConcurrentProcessService
|
||||
{
|
||||
private readonly RedisClientService _redisClientService;
|
||||
public RedisConcurrentProcessService(RedisClientService redisClientService)
|
||||
{
|
||||
this._redisClientService = redisClientService;
|
||||
}
|
||||
|
||||
public bool CanAccessMethod(string cacheKey)
|
||||
{
|
||||
// 使用 Redis 来存储并发控制标记
|
||||
return _redisClientService.SetStringKey(cacheKey, "true", TimeSpan.FromMinutes(1));
|
||||
}
|
||||
|
||||
public void UpdateAccessStatus(string cacheKey, bool canAccess)
|
||||
{
|
||||
// 更新 Redis 缓存项的值
|
||||
_redisClientService.SetStringKey(cacheKey, canAccess.ToString(), TimeSpan.FromMinutes(1));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -331,6 +331,7 @@ namespace WMS.Web.Repositories.DependencyInjection
|
||||
Services.AddTransient<IBoxMarkService, BoxMarkService>();
|
||||
Services.AddTransient<ISendMessageService, SendMessageService>();
|
||||
Services.AddTransient<IMaterialService, MaterialService>();
|
||||
Services.AddTransient<IRedisConcurrentProcessService, RedisConcurrentProcessService>();
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ using Microsoft.EntityFrameworkCore.Storage;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using WMS.Web.Core;
|
||||
@@ -762,7 +763,18 @@ namespace WMS.Web.Repositories
|
||||
}
|
||||
if (dto.SerialNumbers != null && dto.SerialNumbers.Count != 0)
|
||||
{
|
||||
var tids= await _context.InStockDetails.Where(w => w.SerialNumbers.SequenceEqual(dto.SerialNumbers)).GroupBy(x => x.TaskId).Select(x => x.Key).ToListAsync();
|
||||
//var tids= await _context.InStockDetails.Where(a => a.SerialNumbers.Intersect(dto.SerialNumbers).Count() == dto.SerialNumbers.Count).GroupBy(x => x.TaskId).Select(x => x.Key).ToListAsync();
|
||||
string str = $"select * from t_wms_instock_details where ";
|
||||
for (int i = 0; i < dto.SerialNumbers.Count(); i++)
|
||||
{
|
||||
if (i == 0)
|
||||
str += $"SerialNumbers like '%\"{dto.SerialNumbers[i]}\"%'";
|
||||
else
|
||||
str += $" or SerialNumbers like '%\"{dto.SerialNumbers[i]}\"%'";
|
||||
}
|
||||
var fs = FormattableStringFactory.Create(str);
|
||||
var InStockDetails = _context.Set<InStockDetails>().FromSqlInterpolated(fs).ToList();
|
||||
var tids=InStockDetails.GroupBy(x => x.TaskId).Select(x => x.Key).ToList();
|
||||
taskIds.AddRange(tids);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user