using FreeRedis; using JiShe.CollectBus.Ammeters; using JiShe.CollectBus.Common.Consts; using JiShe.CollectBus.Watermeter; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Volo.Abp.Application.Services; using static FreeSql.Internal.GlobalFilter; namespace JiShe.CollectBus.Workers { /// /// 定时采集服务 /// public abstract class BasicScheduledMeterReadingService : CollectBusAppService, IScheduledMeterReadingService { /// /// 系统类型 /// public abstract string SystemType { get; } /// /// 获取电表信息 /// /// 采集端Code /// public virtual Task> GetAmmeterInfoList(string gatherCode = "") { throw new NotImplementedException($"{nameof(GetAmmeterInfoList)}请根据不同系统类型进行实现"); } /// /// 初始化电表缓存数据 /// /// 采集端Code /// public virtual async Task InitAmmeterCacheData(string gatherCode = "") { var meterInfos = await GetAmmeterInfoList(gatherCode); if (meterInfos == null || meterInfos.Count <= 0) { throw new NullReferenceException($"{nameof(InitWatermeterCacheData)} 初始化电表缓存数据时,电表数据为空"); } //将表计信息根据集中器分组 var meterInfoGroup = meterInfos.GroupBy(x => x.FocusAddress).ToList(); foreach (var item in meterInfoGroup) { if (string.IsNullOrWhiteSpace(item.Key)) { continue; } var redisCacheKey = $"{string.Format(FreeRedisConst.CacheAmmeterInfoKey, SystemTypeConst.Energy)}{item.Key}"; Dictionary keyValuePairs = new Dictionary(); foreach (var subItem in item) { keyValuePairs.TryAdd($"{subItem.ID}", subItem); } await FreeRedisProvider.FreeRedis.HSetAsync(redisCacheKey, keyValuePairs); } } /// /// 获取水表信息 /// /// 采集端Code /// public virtual async Task> GetWatermeterInfoList(string gatherCode = "") { throw new NotImplementedException($"{nameof(GetWatermeterInfoList)}请根据不同系统类型进行实现"); } /// /// 初始化水表缓存数据 /// /// 采集端Code /// public virtual async Task InitWatermeterCacheData(string gatherCode = "") { var meterInfos = await GetWatermeterInfoList(gatherCode); if (meterInfos == null || meterInfos.Count <= 0) { throw new NullReferenceException($"{nameof(InitWatermeterCacheData)} 初始化水表缓存数据时,水表数据为空"); } //将表计信息根据集中器分组 var meterInfoGroup = meterInfos.GroupBy(x => x.FocusAddress).ToList(); foreach (var item in meterInfoGroup) { if (string.IsNullOrWhiteSpace(item.Key)) { continue; } var redisCacheKey = $"{string.Format(FreeRedisConst.CacheWatermeterInfoKey, SystemTypeConst.Energy)}{item.Key}"; Dictionary keyValuePairs = new Dictionary(); foreach (var subItem in item) { keyValuePairs.TryAdd($"{subItem.ID}", subItem); } await FreeRedisProvider.FreeRedis.HSetAsync(redisCacheKey, keyValuePairs); } } /// /// 1分钟采集电表数据 /// /// public virtual Task ScheduledMeterOneMinuteReading() { throw new NotImplementedException($"{nameof(ScheduledMeterOneMinuteReading)}请根据不同系统类型进行实现"); } /// /// 5分钟采集电表数据 /// /// public virtual Task ScheduledMeterFiveMinuteReading() { throw new NotImplementedException($"{nameof(ScheduledMeterFiveMinuteReading)}请根据不同系统类型进行实现"); } /// /// 15分钟采集电表数据 /// /// public virtual Task ScheduledMeterFifteenMinuteReading() { throw new NotImplementedException($"{nameof(ScheduledMeterFifteenMinuteReading)}请根据不同系统类型进行实现"); } } }