diff --git a/src/JiShe.CollectBus.Application/EnergySystem/CacheAppService.cs b/src/JiShe.CollectBus.Application/EnergySystem/CacheAppService.cs index 314c267..71b2595 100644 --- a/src/JiShe.CollectBus.Application/EnergySystem/CacheAppService.cs +++ b/src/JiShe.CollectBus.Application/EnergySystem/CacheAppService.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using JiShe.CollectBus.Common.Consts; using JiShe.CollectBus.EnergySystems.TableViews; using JiShe.CollectBus.FreeSql; using Volo.Abp.Domain.Repositories; @@ -26,8 +27,16 @@ namespace JiShe.CollectBus.EnergySystem foreach (var group in groupData) { - var aa = data.ToDictionary(a => a.Address, b => b); - await FreeRedisProvider.Instance.HSetAsync(group.Key, aa); + try + { + var aa = group.ToDictionary(a => $"{a.ID}_{a.Address}" , b => b); + await FreeRedisProvider.Instance.HSetAsync($"{RedisConst.CacheAmmeterFocusKey}:{group.Key}", aa); + } + catch (Exception e) + { + Console.WriteLine(e); + throw; + } } } diff --git a/src/JiShe.CollectBus.Application/ScheduledMeterReading/BasicScheduledMeterReadingService.cs b/src/JiShe.CollectBus.Application/ScheduledMeterReading/BasicScheduledMeterReadingService.cs index 39be20d..92b937a 100644 --- a/src/JiShe.CollectBus.Application/ScheduledMeterReading/BasicScheduledMeterReadingService.cs +++ b/src/JiShe.CollectBus.Application/ScheduledMeterReading/BasicScheduledMeterReadingService.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Net; using System.Threading.Tasks; using DotNetCore.CAP; +using FreeSql; using JiShe.CollectBus.Ammeters; using JiShe.CollectBus.Common; using JiShe.CollectBus.Common.BuildSendDatas; @@ -24,6 +25,7 @@ using MassTransit; using MassTransit.Internals.GraphValidation; using Microsoft.Extensions.Logging; using Volo.Abp.Domain.Repositories; +using Volo.Abp.Uow; namespace JiShe.CollectBus.ScheduledMeterReading { @@ -35,16 +37,18 @@ namespace JiShe.CollectBus.ScheduledMeterReading private readonly ILogger _logger; private readonly ICapPublisher _capBus; private readonly IRepository _meterReadingIssuedRepository; + private readonly IUnitOfWorkManager _unitOfWorkManager; public BasicScheduledMeterReadingService( ILogger logger, ICapPublisher capBus, - IRepository meterReadingIssuedRepository) + IRepository meterReadingIssuedRepository, IUnitOfWorkManager unitOfWorkManager) { _capBus = capBus; _logger = logger; _meterReadingIssuedRepository = meterReadingIssuedRepository; + _unitOfWorkManager = unitOfWorkManager; } /// @@ -116,7 +120,7 @@ namespace JiShe.CollectBus.ScheduledMeterReading continue; } - var redisCacheKey = $"{string.Format(FreeRedisConst.CacheAmmeterInfoKey, SystemTypeConst.Energy, itemTimeDensity.Key)}{item.Key}"; + var redisCacheKey = $"{string.Format(RedisConst.CacheAmmeterInfoKey, SystemTypeConst.Energy, itemTimeDensity.Key)}{item.Key}"; Dictionary keyValuePairs = new Dictionary(); foreach (var ammeter in item) { @@ -178,7 +182,7 @@ namespace JiShe.CollectBus.ScheduledMeterReading public virtual async Task AmmeterScheduledMeterOneMinuteReading() { //获取缓存中的电表信息 - var redisKeyList = $"{string.Format(FreeRedisConst.CacheAmmeterInfoKey, SystemTypeConst.Energy, 1)}*"; + var redisKeyList = $"{string.Format(RedisConst.CacheAmmeterInfoKey, SystemTypeConst.Energy, 1)}*"; var oneMinutekeyList = await FreeRedisProvider.Instance.KeysAsync(redisKeyList); if (oneMinutekeyList == null || oneMinutekeyList.Length <= 0) { @@ -207,7 +211,7 @@ namespace JiShe.CollectBus.ScheduledMeterReading public virtual async Task AmmeterScheduledMeterFiveMinuteReading() { //获取缓存中的电表信息 - var redisKeyList = $"{string.Format(FreeRedisConst.CacheAmmeterInfoKey, SystemTypeConst.Energy, 5)}*"; + var redisKeyList = $"{string.Format(RedisConst.CacheAmmeterInfoKey, SystemTypeConst.Energy, 5)}*"; var oneMinutekeyList = await FreeRedisProvider.Instance.KeysAsync(redisKeyList); if (oneMinutekeyList == null || oneMinutekeyList.Length <= 0) { @@ -234,7 +238,7 @@ namespace JiShe.CollectBus.ScheduledMeterReading public virtual async Task AmmeterScheduledMeterFifteenMinuteReading() { //获取缓存中的电表信息 - var redisKeyList = $"{string.Format(FreeRedisConst.CacheAmmeterInfoKey, SystemTypeConst.Energy, 15)}*"; + var redisKeyList = $"{string.Format(RedisConst.CacheAmmeterInfoKey, SystemTypeConst.Energy, 15)}*"; var oneMinutekeyList = await FreeRedisProvider.Instance.KeysAsync(redisKeyList); if (oneMinutekeyList == null || oneMinutekeyList.Length <= 0) { @@ -307,7 +311,7 @@ namespace JiShe.CollectBus.ScheduledMeterReading continue; } - var redisCacheKey = $"{string.Format(FreeRedisConst.CacheWatermeterInfoKey, SystemTypeConst.Energy, itemTimeDensity.Key)}{item.Key}"; + var redisCacheKey = $"{string.Format(RedisConst.CacheWatermeterInfoKey, SystemTypeConst.Energy, itemTimeDensity.Key)}{item.Key}"; Dictionary keyValuePairs = new Dictionary(); foreach (var subItem in item) { @@ -327,7 +331,7 @@ namespace JiShe.CollectBus.ScheduledMeterReading public virtual async Task WatermeterScheduledMeterOneMinuteReading() { //获取缓存中的水表信息 - var redisKeyList = $"{string.Format(FreeRedisConst.CacheWatermeterInfoKey, SystemTypeConst.Energy, 1)}*"; + var redisKeyList = $"{string.Format(RedisConst.CacheWatermeterInfoKey, SystemTypeConst.Energy, 1)}*"; var oneMinutekeyList = await FreeRedisProvider.Instance.KeysAsync(redisKeyList); if (oneMinutekeyList == null || oneMinutekeyList.Length <= 0) { @@ -354,7 +358,7 @@ namespace JiShe.CollectBus.ScheduledMeterReading { //获取缓存中的水表信息 - var redisKeyList = $"{string.Format(FreeRedisConst.CacheWatermeterInfoKey, SystemTypeConst.Energy, 5)}*"; + var redisKeyList = $"{string.Format(RedisConst.CacheWatermeterInfoKey, SystemTypeConst.Energy, 5)}*"; var oneMinutekeyList = await FreeRedisProvider.Instance.KeysAsync(redisKeyList); if (oneMinutekeyList == null || oneMinutekeyList.Length <= 0) { @@ -380,7 +384,7 @@ namespace JiShe.CollectBus.ScheduledMeterReading public virtual async Task WatermeterScheduledMeterFifteenMinuteReading() { //获取缓存中的水表信息 - var redisKeyList = $"{string.Format(FreeRedisConst.CacheWatermeterInfoKey, SystemTypeConst.Energy, 15)}*"; + var redisKeyList = $"{string.Format(RedisConst.CacheWatermeterInfoKey, SystemTypeConst.Energy, 15)}*"; var oneMinutekeyList = await FreeRedisProvider.Instance.KeysAsync(redisKeyList); if (oneMinutekeyList == null || oneMinutekeyList.Length <= 0) { @@ -434,7 +438,7 @@ namespace JiShe.CollectBus.ScheduledMeterReading { string key = (string)item[0];//集中器地址对应的Redis缓存Key object[] fieldsAndValues = (object[])item[1];//缓存Key对应的Hash表数据集合 - var redisCacheKey = $"{string.Format(FreeRedisConst.CacheAmmeterInfoKey, SystemTypeConst.Energy, minute)}"; + var redisCacheKey = $"{string.Format(RedisConst.CacheAmmeterInfoKey, SystemTypeConst.Energy, minute)}"; string focusAddress = key.Replace(redisCacheKey, "");//集中器地址 var meterHashs = new Dictionary(); @@ -515,7 +519,16 @@ namespace JiShe.CollectBus.ScheduledMeterReading foreach (var group in focusHashGroups) { //TODO _meterReadingIssuedRepository 需要优化 - //_ = Task.Run(async () => { await CreatePublishTask(eventName, group.Value); }); + + await Task.Factory.StartNew(async () => + { + using var uow = _unitOfWorkManager.Begin(); + await CreatePublishTask(eventName, group.Value); + await uow.SaveChangesAsync(); + }); + + + //await Task.Run(async () => { await CreatePublishTask(eventName, group.Value); }); await CreatePublishTask(eventName, group.Value); } diff --git a/src/JiShe.CollectBus.Application/ScheduledMeterReading/EnergySystemScheduledMeterReadingService.cs b/src/JiShe.CollectBus.Application/ScheduledMeterReading/EnergySystemScheduledMeterReadingService.cs index a95312b..4662ca8 100644 --- a/src/JiShe.CollectBus.Application/ScheduledMeterReading/EnergySystemScheduledMeterReadingService.cs +++ b/src/JiShe.CollectBus.Application/ScheduledMeterReading/EnergySystemScheduledMeterReadingService.cs @@ -11,6 +11,7 @@ using JiShe.CollectBus.IotSystems.Watermeter; using Microsoft.AspNetCore.Authorization; using Microsoft.Extensions.Logging; using Volo.Abp.Domain.Repositories; +using Volo.Abp.Uow; namespace JiShe.CollectBus.ScheduledMeterReading { @@ -22,7 +23,10 @@ namespace JiShe.CollectBus.ScheduledMeterReading public class EnergySystemScheduledMeterReadingService : BasicScheduledMeterReadingService { - public EnergySystemScheduledMeterReadingService(ILogger logger, ICapPublisher capBus, IRepository meterReadingIssuedRepository) :base(logger, capBus, meterReadingIssuedRepository) + public EnergySystemScheduledMeterReadingService(ILogger logger, + ICapPublisher capBus, + IRepository meterReadingIssuedRepository, + IUnitOfWorkManager unitOfWorkManager) :base(logger, capBus, meterReadingIssuedRepository, unitOfWorkManager) { } diff --git a/src/JiShe.CollectBus.Common/Consts/FreeRedisConst.cs b/src/JiShe.CollectBus.Common/Consts/RedisConst.cs similarity index 71% rename from src/JiShe.CollectBus.Common/Consts/FreeRedisConst.cs rename to src/JiShe.CollectBus.Common/Consts/RedisConst.cs index 859e86e..0dcfd93 100644 --- a/src/JiShe.CollectBus.Common/Consts/FreeRedisConst.cs +++ b/src/JiShe.CollectBus.Common/Consts/RedisConst.cs @@ -6,36 +6,41 @@ using System.Threading.Tasks; namespace JiShe.CollectBus.Common.Consts { - public class FreeRedisConst + public class RedisConst { /// /// 缓存基础目录 /// - public const string CacheBasicDirectoryKey = "CollectBus:"; + public const string CacheBasicDirectoryKey = "CollectBus"; /// /// 1分钟采集间隔 /// - public const string OneMinuteAcquisitionTimeInterval = $"one"; + public const string OneMinuteAcquisitionTimeInterval = "One"; /// /// 5分钟采集间隔 /// - public const string FiveMinuteAcquisitionTimeInterval = $"Five"; + public const string FiveMinuteAcquisitionTimeInterval = "Five"; /// /// 15分钟采集间隔 /// - public const string FifteenMinuteAcquisitionTimeInterval = $"Fifteen"; + public const string FifteenMinuteAcquisitionTimeInterval = "Fifteen"; /// /// 缓存电表信息 /// - public const string CacheAmmeterInfoKey = $"{CacheBasicDirectoryKey}{"{0}"}:{"{1}"}:AmmeterInfo:"; + public const string CacheAmmeterInfoKey = $"{CacheBasicDirectoryKey}:{"{0}"}:{"{1}"}:AmmeterInfo:"; /// /// 缓存水表信息 /// - public const string CacheWatermeterInfoKey = $"{CacheBasicDirectoryKey}{"{0}"}:{"{1}"}:WatermeterInfo:"; + public const string CacheAmmeterFocusKey = $"{CacheBasicDirectoryKey}:AmmeterFocus"; + + /// + /// 缓存水表信息 + /// + public const string CacheWatermeterInfoKey = $"{CacheBasicDirectoryKey}:{"{0}"}:{"{1}"}:WatermeterInfo:"; } }