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)}请根据不同系统类型进行实现");
}
}
}