大批量插入测试
This commit is contained in:
parent
abde2b5161
commit
b5f1f1f50b
@ -14,12 +14,14 @@ using JiShe.CollectBus.IotSystems.Watermeter;
|
|||||||
using JiShe.CollectBus.Kafka.Producer;
|
using JiShe.CollectBus.Kafka.Producer;
|
||||||
using JiShe.CollectBus.Protocol.Contracts;
|
using JiShe.CollectBus.Protocol.Contracts;
|
||||||
using JiShe.CollectBus.Repository.MeterReadingRecord;
|
using JiShe.CollectBus.Repository.MeterReadingRecord;
|
||||||
|
using Mapster;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using static FreeSql.Internal.GlobalFilter;
|
||||||
|
|
||||||
namespace JiShe.CollectBus.ScheduledMeterReading
|
namespace JiShe.CollectBus.ScheduledMeterReading
|
||||||
{
|
{
|
||||||
@ -207,26 +209,30 @@ namespace JiShe.CollectBus.ScheduledMeterReading
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public virtual async Task InitAmmeterCacheData(string gatherCode = "")
|
public virtual async Task InitAmmeterCacheData(string gatherCode = "")
|
||||||
{
|
{
|
||||||
//#if DEBUG
|
#if DEBUG
|
||||||
// var timeDensity = "15";
|
var timeDensity = "15";
|
||||||
// //获取缓存中的电表信息
|
string tempCacheMeterInfoKey = $"CollectBus:{"{0}:{1}"}:MeterInfo:{"{2}"}:{"{3}"}";
|
||||||
// var redisKeyList = $"{string.Format(RedisConst.CacheMeterInfoKey, SystemType, ServerTagName, MeterTypeEnum.Ammeter, timeDensity)}*";
|
//获取缓存中的电表信息
|
||||||
|
var redisKeyList = $"{string.Format(tempCacheMeterInfoKey, SystemType, "JiSheCollectBus", MeterTypeEnum.Ammeter, timeDensity)}*";
|
||||||
|
|
||||||
// var oneMinutekeyList = await FreeRedisProvider.Instance.KeysAsync(redisKeyList);
|
var oneMinutekeyList = await FreeRedisProvider.Instance.KeysAsync(redisKeyList);
|
||||||
// var meterInfos = await GetMeterRedisCacheListData<AmmeterInfo>(oneMinutekeyList, SystemType, ServerTagName, timeDensity, MeterTypeEnum.Ammeter);
|
var tempMeterInfos = await GetMeterRedisCacheListData<AmmeterInfoTemp>(oneMinutekeyList, SystemType, ServerTagName, timeDensity, MeterTypeEnum.Ammeter);
|
||||||
//List<string> focusAddressDataLista = new List<string>();
|
//List<string> focusAddressDataLista = new List<string>();
|
||||||
// foreach (var item in meterInfos)
|
List<AmmeterInfo> meterInfos = new List<AmmeterInfo>();
|
||||||
// {
|
foreach (var item in tempMeterInfos)
|
||||||
|
{
|
||||||
|
var tempData = item.Adapt<AmmeterInfo>();
|
||||||
|
tempData.FocusId = item.FocusID;
|
||||||
|
tempData.MeterId = item.Id;
|
||||||
|
meterInfos.Add(tempData);
|
||||||
//focusAddressDataLista.Add(item.FocusAddress);
|
//focusAddressDataLista.Add(item.FocusAddress);
|
||||||
// }
|
}
|
||||||
|
|
||||||
//DeviceGroupBalanceControl.InitializeCache(focusAddressDataLista);
|
//DeviceGroupBalanceControl.InitializeCache(focusAddressDataLista);
|
||||||
// return;
|
#else
|
||||||
//#else
|
|
||||||
// var meterInfos = await GetAmmeterInfoList(gatherCode);
|
|
||||||
//#endif
|
|
||||||
|
|
||||||
var meterInfos = await GetAmmeterInfoList(gatherCode);
|
var meterInfos = await GetAmmeterInfoList(gatherCode);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (meterInfos == null || meterInfos.Count <= 0)
|
if (meterInfos == null || meterInfos.Count <= 0)
|
||||||
{
|
{
|
||||||
throw new NullReferenceException($"{nameof(InitAmmeterCacheData)} 初始化电表缓存数据时,电表数据为空");
|
throw new NullReferenceException($"{nameof(InitAmmeterCacheData)} 初始化电表缓存数据时,电表数据为空");
|
||||||
@ -238,6 +244,7 @@ namespace JiShe.CollectBus.ScheduledMeterReading
|
|||||||
{
|
{
|
||||||
throw new NullReferenceException($"{nameof(InitAmmeterCacheData)} 初始化电表缓存数据时,采集项类型数据为空");
|
throw new NullReferenceException($"{nameof(InitAmmeterCacheData)} 初始化电表缓存数据时,采集项类型数据为空");
|
||||||
}
|
}
|
||||||
|
var timer = Stopwatch.StartNew();
|
||||||
|
|
||||||
List<string> focusAddressDataList = new List<string>();//用于处理Kafka主题分区数据的分发和处理。
|
List<string> focusAddressDataList = new List<string>();//用于处理Kafka主题分区数据的分发和处理。
|
||||||
|
|
||||||
@ -245,6 +252,12 @@ namespace JiShe.CollectBus.ScheduledMeterReading
|
|||||||
var meterInfoGroupByTimeDensity = meterInfos.GroupBy(d => d.TimeDensity);
|
var meterInfoGroupByTimeDensity = meterInfos.GroupBy(d => d.TimeDensity);
|
||||||
foreach (var itemTimeDensity in meterInfoGroupByTimeDensity)
|
foreach (var itemTimeDensity in meterInfoGroupByTimeDensity)
|
||||||
{
|
{
|
||||||
|
var redisCacheKey = $"{string.Format(RedisConst.CacheMeterInfoKey, SystemType, ServerTagName, MeterTypeEnum.Ammeter, itemTimeDensity.Key)}";
|
||||||
|
var redisCacheFocusIndexKey = $"{string.Format(RedisConst.CacheMeterInfoFocusIndexKey, SystemType, ServerTagName, MeterTypeEnum.Ammeter, itemTimeDensity.Key)}";
|
||||||
|
var redisCacheScoresIndexKey = $"{string.Format(RedisConst.CacheMeterInfoScoresIndexKey, SystemType, ServerTagName, MeterTypeEnum.Ammeter, itemTimeDensity.Key)}";
|
||||||
|
var redisCacheGlobalIndexKey = $"{string.Format(RedisConst.CacheMeterInfoGlobalIndexKey, SystemType, ServerTagName, MeterTypeEnum.Ammeter, itemTimeDensity.Key)}";
|
||||||
|
|
||||||
|
List<AmmeterInfo> ammeterInfos = new List<AmmeterInfo>();
|
||||||
//将表计信息根据集中器分组,获得集中器号
|
//将表计信息根据集中器分组,获得集中器号
|
||||||
var meterInfoGroup = itemTimeDensity.GroupBy(x => x.FocusAddress).ToList();
|
var meterInfoGroup = itemTimeDensity.GroupBy(x => x.FocusAddress).ToList();
|
||||||
foreach (var item in meterInfoGroup)
|
foreach (var item in meterInfoGroup)
|
||||||
@ -256,17 +269,17 @@ namespace JiShe.CollectBus.ScheduledMeterReading
|
|||||||
|
|
||||||
focusAddressDataList.Add(item.Key);
|
focusAddressDataList.Add(item.Key);
|
||||||
|
|
||||||
var redisCacheKey = $"{string.Format(RedisConst.CacheMeterInfoKey, SystemType, ServerTagName, MeterTypeEnum.Ammeter, itemTimeDensity.Key)}{item.Key}";
|
// var redisCacheKey = $"{string.Format(RedisConst.CacheMeterInfoKey, SystemType, ServerTagName, MeterTypeEnum.Ammeter, itemTimeDensity.Key)}{item.Key}";
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
//每次缓存时,删除缓存,避免缓存数据有不准确的问题
|
//每次缓存时,删除缓存,避免缓存数据有不准确的问题
|
||||||
//await FreeRedisProvider.Instance.DelAsync(redisCacheKey);
|
//await FreeRedisProvider.Instance.DelAsync(redisCacheKey);
|
||||||
#else
|
#else
|
||||||
//每次缓存时,删除缓存,避免缓存数据有不准确的问题
|
//每次缓存时,删除缓存,避免缓存数据有不准确的问题
|
||||||
await FreeRedisProvider.Instance.DelAsync(redisCacheKey);
|
//await FreeRedisProvider.Instance.DelAsync(redisCacheKey);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
Dictionary<string, AmmeterInfo> keyValuePairs = new Dictionary<string, AmmeterInfo>();
|
//Dictionary<string, AmmeterInfo> keyValuePairs = new Dictionary<string, AmmeterInfo>();
|
||||||
foreach (var ammeter in item)
|
foreach (var ammeter in item)
|
||||||
{
|
{
|
||||||
//处理ItemCode
|
//处理ItemCode
|
||||||
@ -311,11 +324,18 @@ namespace JiShe.CollectBus.ScheduledMeterReading
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
keyValuePairs.TryAdd($"{ammeter.MeterId}", ammeter);
|
ammeterInfos.Add(ammeter);
|
||||||
|
//keyValuePairs.TryAdd($"{ammeter.MeterId}", ammeter);
|
||||||
}
|
}
|
||||||
await FreeRedisProvider.Instance.HSetAsync(redisCacheKey, keyValuePairs);
|
//await FreeRedisProvider.Instance.HSetAsync(redisCacheKey, keyValuePairs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
await FreeRedisProvider.BatchAddMeterData<AmmeterInfo>(
|
||||||
|
redisCacheKey,
|
||||||
|
redisCacheFocusIndexKey,
|
||||||
|
redisCacheScoresIndexKey,
|
||||||
|
redisCacheGlobalIndexKey, ammeterInfos);
|
||||||
|
|
||||||
//在缓存表信息数据的时候,新增下一个时间的自动处理任务,1分钟后执行所有的采集频率任务
|
//在缓存表信息数据的时候,新增下一个时间的自动处理任务,1分钟后执行所有的采集频率任务
|
||||||
TasksToBeIssueModel nextTask = new TasksToBeIssueModel()
|
TasksToBeIssueModel nextTask = new TasksToBeIssueModel()
|
||||||
{
|
{
|
||||||
@ -338,7 +358,9 @@ namespace JiShe.CollectBus.ScheduledMeterReading
|
|||||||
DeviceGroupBalanceControl.InitializeCache(focusAddressDataList);
|
DeviceGroupBalanceControl.InitializeCache(focusAddressDataList);
|
||||||
}
|
}
|
||||||
|
|
||||||
_logger.LogInformation($"{nameof(InitAmmeterCacheData)} 初始化电表缓存数据完成");
|
timer.Stop();
|
||||||
|
|
||||||
|
_logger.LogInformation($"{nameof(InitAmmeterCacheData)} 初始化电表缓存数据完成,耗时{timer.ElapsedMilliseconds}毫秒");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@ -114,10 +114,10 @@ namespace JiShe.CollectBus.ScheduledMeterReading
|
|||||||
WHERE 1=1 and C.Special = 0 ";
|
WHERE 1=1 and C.Special = 0 ";
|
||||||
//TODO 记得移除特殊表过滤
|
//TODO 记得移除特殊表过滤
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(gatherCode))
|
//if (!string.IsNullOrWhiteSpace(gatherCode))
|
||||||
{
|
//{
|
||||||
sql = $@"{sql} AND A.GatherCode = '{gatherCode}'";
|
// sql = $@"{sql} AND A.GatherCode = '{gatherCode}'";
|
||||||
}
|
//}
|
||||||
return await SqlProvider.Instance.Change(DbEnum.EnergyDB)
|
return await SqlProvider.Instance.Change(DbEnum.EnergyDB)
|
||||||
.Ado
|
.Ado
|
||||||
.QueryAsync<AmmeterInfo>(sql);
|
.QueryAsync<AmmeterInfo>(sql);
|
||||||
|
|||||||
@ -28,25 +28,44 @@ namespace JiShe.CollectBus.Common.Consts
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public const string FifteenMinuteAcquisitionTimeInterval = "Fifteen";
|
public const string FifteenMinuteAcquisitionTimeInterval = "Fifteen";
|
||||||
|
|
||||||
|
public const string MeterInfo = "MeterInfo";
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 缓存表计信息,{0}=>系统类型,{1}=>应用服务部署标记,{2}=>表计类别,{3}=>采集频率
|
/// 缓存表计信息,{0}=>系统类型,{1}=>应用服务部署标记,{2}=>表计类别,{3}=>采集频率
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const string CacheMeterInfoKey = $"{CacheBasicDirectoryKey}{"{0}:{1}"}:MeterInfo:{"{2}"}:{"{3}"}:";
|
public const string CacheMeterInfoKey = $"{CacheBasicDirectoryKey}{"{0}:{1}"}:{MeterInfo}:{"{2}"}:{"{3}"}";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 缓存表计信息集中器索引Set缓存Key,{0}=>系统类型,{1}=>应用服务部署标记,{2}=>表计类别,{3}=>采集频率
|
||||||
|
/// </summary>
|
||||||
|
public const string CacheMeterInfoFocusIndexKey = $"{CacheBasicDirectoryKey}{"{0}:{1}"}:{MeterInfo}:{"{2}"}:FocusIndex:{"{3}"}";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 缓存表计信息集中器排序索引ZSET缓存Key,{0}=>系统类型,{1}=>应用服务部署标记,{2}=>表计类别,{3}=>采集频率
|
||||||
|
/// </summary>
|
||||||
|
public const string CacheMeterInfoScoresIndexKey = $"{CacheBasicDirectoryKey}{"{0}:{1}"}:{MeterInfo}:{"{2}"}:ScoresIndex:{"{3}"}";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 缓存表计信息集中器采集频率分组全局索引ZSet缓存Key,{0}=>系统类型,{1}=>应用服务部署标记,{2}=>表计类别,{3}=>采集频率
|
||||||
|
/// </summary>
|
||||||
|
public const string CacheMeterInfoGlobalIndexKey = $"{CacheBasicDirectoryKey}{"{0}:{1}"}:{MeterInfo}:{"{2}"}:GlobalIndex:{"{3}"}";
|
||||||
|
|
||||||
|
|
||||||
|
public const string TaskInfo = "TaskInfo";
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 缓存待下发的指令生产任务数据,{0}=>系统类型,{1}=>应用服务部署标记,{2}=>表计类别,{3}=>采集频率
|
/// 缓存待下发的指令生产任务数据,{0}=>系统类型,{1}=>应用服务部署标记,{2}=>表计类别,{3}=>采集频率
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const string CacheTasksToBeIssuedKey = $"{CacheBasicDirectoryKey}{"{0}:{1}"}:TaskInfo:{"{2}"}:{"{3}"}";
|
public const string CacheTasksToBeIssuedKey = $"{CacheBasicDirectoryKey}{"{0}:{1}"}:{TaskInfo}:{"{2}"}{"{3}"}";
|
||||||
|
|
||||||
|
public const string TelemetryPacket = "TelemetryPacket";
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 缓存表计下发指令数据集,{0}=>系统类型,{1}=>应用服务部署标记,{2}=>表计类别,{3}=>采集频率
|
/// 缓存表计下发指令数据集,{0}=>系统类型,{1}=>应用服务部署标记,{2}=>表计类别,{3}=>采集频率
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const string CacheTelemetryPacketInfoKey = $"{CacheBasicDirectoryKey}{"{0}:{1}"}:TelemetryPacket:{"{2}"}:{"{3}"}:";
|
public const string CacheTelemetryPacketInfoKey = $"{CacheBasicDirectoryKey}{"{0}:{1}"}:{TelemetryPacket}:{"{2}"}:{"{3}"}";
|
||||||
|
|
||||||
/// <summary>
|
///// <summary>
|
||||||
/// 缓存设备平衡关系映射结果,{0}=>系统类型,{1}=>应用服务部署标记
|
///// 缓存设备平衡关系映射结果,{0}=>系统类型,{1}=>应用服务部署标记
|
||||||
/// </summary>
|
///// </summary>
|
||||||
public const string CacheDeviceBalanceRelationMapResultKey = $"{CacheBasicDirectoryKey}{"{0}:{1}"}:RelationMap";
|
//public const string CacheDeviceBalanceRelationMapResultKey = $"{CacheBasicDirectoryKey}{"{0}:{1}"}:RelationMap";
|
||||||
|
|
||||||
public const string CacheAmmeterFocusKey = "CacheAmmeterFocusKey";
|
public const string CacheAmmeterFocusKey = "CacheAmmeterFocusKey";
|
||||||
}
|
}
|
||||||
|
|||||||
@ -17,6 +17,7 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="JetBrains.Annotations" Version="2024.2.0" />
|
<PackageReference Include="JetBrains.Annotations" Version="2024.2.0" />
|
||||||
|
<PackageReference Include="Mapster" Version="7.4.0" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="8.0.0" />
|
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="8.0.0" />
|
||||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.1" />
|
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.1" />
|
||||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.2" />
|
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.2" />
|
||||||
|
|||||||
152
src/JiShe.CollectBus.Domain/Ammeters/AmmeterInfoTemp.cs
Normal file
152
src/JiShe.CollectBus.Domain/Ammeters/AmmeterInfoTemp.cs
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
using JiShe.CollectBus.Common.Models;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace JiShe.CollectBus.Ammeters
|
||||||
|
{
|
||||||
|
public class AmmeterInfoTemp
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 集中器Id
|
||||||
|
/// </summary>
|
||||||
|
public int FocusID { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 表Id
|
||||||
|
/// </summary>
|
||||||
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 电表名称
|
||||||
|
/// </summary>
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 集中器地址
|
||||||
|
/// </summary>
|
||||||
|
public string FocusAddress { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 集中器地址
|
||||||
|
/// </summary>
|
||||||
|
public string Address { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 集中器区域代码
|
||||||
|
/// </summary>
|
||||||
|
public string AreaCode { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 电表类别 (1单相、2三相三线、3三相四线),
|
||||||
|
/// 07协议: 开合闸指令(1A开闸断电,1C单相表合闸,1B多相表合闸) 645 2007 表
|
||||||
|
/// 97协议://true(合闸);false(跳闸) 545 1997 没有单相多相 之分 "true" ? "9966" : "3355"
|
||||||
|
/// </summary>
|
||||||
|
public int TypeName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 跳合闸状态字段: 0 合闸,1 跳闸
|
||||||
|
/// 电表:TripState (0 合闸-通电, 1 断开、跳闸);
|
||||||
|
/// </summary>
|
||||||
|
public int TripState { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 规约 -电表default(30) 1:97协议,30:07协议
|
||||||
|
/// </summary>
|
||||||
|
public int? Protocol { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 一个集中器下的[MeteringCode]必须唯一。 PN
|
||||||
|
/// </summary>
|
||||||
|
public int MeteringCode { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 电表通信地址
|
||||||
|
/// </summary>
|
||||||
|
public string AmmerterAddress { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 波特率 default(2400)
|
||||||
|
/// </summary>
|
||||||
|
public int Baudrate { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// MeteringPort 端口就几个可以枚举。
|
||||||
|
/// </summary>
|
||||||
|
public int MeteringPort { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 电表密码
|
||||||
|
/// </summary>
|
||||||
|
public string Password { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 采集时间间隔(分钟,如15)
|
||||||
|
/// </summary>
|
||||||
|
public int TimeDensity { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 该电表方案下采集项,JSON格式,如:["0D_80","0D_80"]
|
||||||
|
/// </summary>
|
||||||
|
public string ItemCodes { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// State表状态:
|
||||||
|
/// 0新装(未下发),1运行(档案下发成功时设置状态值1), 2暂停, 100销表(销表后是否重新启用)
|
||||||
|
/// 特定:State -1 已删除
|
||||||
|
/// </summary>
|
||||||
|
public int State { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否自动采集(0:主动采集,1:自动采集)
|
||||||
|
/// </summary>
|
||||||
|
public int AutomaticReport { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 该电表方案下采集项编号
|
||||||
|
/// </summary>
|
||||||
|
public string DataTypes { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 品牌型号
|
||||||
|
/// </summary>
|
||||||
|
public string BrandType { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 采集器编号
|
||||||
|
/// </summary>
|
||||||
|
public string GatherCode { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否特殊表,1是特殊电表
|
||||||
|
/// </summary>
|
||||||
|
public int Special { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 费率类型,单、多 (SingleRate :单费率(单相表1),多费率(其他0) ,与TypeName字段无关)
|
||||||
|
/// SingleRate ? "单" : "复"
|
||||||
|
/// [SingleRate] --0 复费率 false , 1 单费率 true (与PayPlanID保持一致)
|
||||||
|
///对应 TB_PayPlan.Type: 1复费率,2单费率
|
||||||
|
/// </summary>
|
||||||
|
public bool SingleRate { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 项目ID
|
||||||
|
/// </summary>
|
||||||
|
public int ProjectID { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 数据库业务ID
|
||||||
|
/// </summary>
|
||||||
|
public int DatabaseBusiID { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否异常集中器 0:正常,1异常
|
||||||
|
/// </summary>
|
||||||
|
public int AbnormalState { get; set; }
|
||||||
|
|
||||||
|
public DateTime LastTime { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user