You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

73 lines
2.6 KiB

using System.Collections.Generic;
using System.Threading.Tasks;
using StackExchange.Redis;
using Volo.Abp.EventBus;
using Win_in.Sfs.Shared.Event;
using Win_in.Sfs.Wms.Job.Domain;
using Win_in.Sfs.Wms.Job.Domain.Shared;
using Win_in.Sfs.Wms.Store.Application.Contracts;
namespace Win_in.Sfs.Wms.Job.Event.Requests;
using Microsoft.Extensions.Configuration;
public class DeliverJobEventHandler :
JobEventHandlerBase
, ILocalEventHandler<SfsCreatedEntityEventData<DeliverJob>>
, ILocalEventHandler<SfsCreatedEntityEventData<List<DeliverJob>>>
, ILocalEventHandler<SfsCompletedEntityEventData<DeliverJob>>
{
private const string DeliverRequestPrefix = "DeliverRequest";
private readonly IDeliverRequestAppService _deliverRequestAppService;
public DeliverJobEventHandler(
IDeliverRequestAppService deliverRequestAppService
, IConfiguration configuration)
{
_deliverRequestAppService = deliverRequestAppService;
var redisConnectionString = configuration["Redis:Configuration"];
var redisConnection = ConnectionMultiplexer.Connect(redisConnectionString);
RedisDB = redisConnection.GetDatabase();
}
public virtual async Task HandleEventAsync(SfsCreatedEntityEventData<DeliverJob> eventData)
{
var entity = eventData.Entity;
var cacheKey = GetCacheKey(entity.DeliverRequestNumber);
var jobNumber = entity.Number;
await RedisDB.HashSetAsync(cacheKey, jobNumber, true).ConfigureAwait(false);
}
public virtual async Task HandleEventAsync(SfsCreatedEntityEventData<List<DeliverJob>> eventData)
{
var entities = eventData.Entity;
foreach (var entity in entities)
{
var cacheKey = GetCacheKey(entity.DeliverRequestNumber);
var jobNumber = entity.Number;
await RedisDB.HashSetAsync(cacheKey, jobNumber, true).ConfigureAwait(false);
}
}
public virtual async Task HandleEventAsync(SfsCompletedEntityEventData<DeliverJob> eventData)
{
await Task.CompletedTask.ConfigureAwait(false);
//var entity = eventData.Entity;
//var cacheKey = GetCacheKey(entity.DeliverRequestNumber);
//var jobNumber = entity.Number;
//await RedisDB.HashDeleteAsync(cacheKey, jobNumber);
//var count = await RedisDB.HashLengthAsync(cacheKey);
//if (count == 0)
//{
// await _deliverRequestAppService.CompleteAsync(entity.DeliverRequestNumber);
//}
}
private static string GetCacheKey(string requestNumber)
{
return $"{JobConsts.CachePrefix}:{DeliverRequestPrefix}:{requestNumber}";
}
}