diff --git a/src/JiShe.CollectBus.Application/ScheduledMeterReading/BasicScheduledMeterReadingService.cs b/src/JiShe.CollectBus.Application/ScheduledMeterReading/BasicScheduledMeterReadingService.cs index 7311c42..3782d7a 100644 --- a/src/JiShe.CollectBus.Application/ScheduledMeterReading/BasicScheduledMeterReadingService.cs +++ b/src/JiShe.CollectBus.Application/ScheduledMeterReading/BasicScheduledMeterReadingService.cs @@ -132,8 +132,9 @@ namespace JiShe.CollectBus.ScheduledMeterReading _logger.LogInformation($"{nameof(CreateToBeIssueTasks)} {timeDensity}分钟采集待下发任务创建完成"); - //删除已经处理过的缓存数据 - await FreeRedisProvider.Instance.DelAsync(item); + //根据当前的采集频率和类型,重新更新下一个任务点,把任务的创建源固定在当前逻辑,避免任务处理的逻辑异常导致任务创建失败。 + tasksToBeIssueModel.NextTask = tasksToBeIssueModel.NextTask.AddMinutes(timeDensity); + await FreeRedisProvider.Instance.SetAsync(item, tasksToBeIssueModel); } } @@ -326,9 +327,9 @@ namespace JiShe.CollectBus.ScheduledMeterReading await _meterReadingRecordRepository.InsertManyAsync(meterTaskInfosList, currentTime); } - //删除任务数据 - await FreeRedisProvider.Instance.DelAsync(oneMinutekeyList); - await CacheNextTaskData(timeDensity, MeterTypeEnum.Ammeter); + ////删除任务数据 + //await FreeRedisProvider.Instance.DelAsync(oneMinutekeyList); + //await CacheNextTaskData(timeDensity, MeterTypeEnum.Ammeter); _logger.LogInformation($"{nameof(AmmeterScheduledMeterOneMinuteReading)} {timeDensity}分钟采集电表数据处理完成"); @@ -387,11 +388,11 @@ namespace JiShe.CollectBus.ScheduledMeterReading await _meterReadingRecordRepository.InsertManyAsync(meterTaskInfosList, currentTime); } - //删除任务数据 - await FreeRedisProvider.Instance.DelAsync(fiveMinutekeyList); + ////删除任务数据 + //await FreeRedisProvider.Instance.DelAsync(fiveMinutekeyList); - //缓存下一个时间的任务 - await CacheNextTaskData(timeDensity, MeterTypeEnum.Ammeter); + ////缓存下一个时间的任务 + //await CacheNextTaskData(timeDensity, MeterTypeEnum.Ammeter); _logger.LogInformation($"{nameof(AmmeterScheduledMeterFiveMinuteReading)} {timeDensity}分钟采集电表数据处理完成"); } @@ -452,11 +453,11 @@ namespace JiShe.CollectBus.ScheduledMeterReading await _meterReadingRecordRepository.InsertManyAsync(meterTaskInfosList, currentDateTime); } - //删除任务数据 + ////删除任务数据 //await FreeRedisProvider.Instance.DelAsync(fifteenMinutekeyList); - //缓存下一个时间的任务 - await CacheNextTaskData(timeDensity, MeterTypeEnum.Ammeter); + ////缓存下一个时间的任务 + //await CacheNextTaskData(timeDensity, MeterTypeEnum.Ammeter); stopwatch.Stop(); @@ -838,11 +839,11 @@ namespace JiShe.CollectBus.ScheduledMeterReading await _meterReadingRecordRepository.InsertManyAsync(meterTaskInfosList); } - //删除任务数据 - await FreeRedisProvider.Instance.DelAsync(oneMinutekeyList); + ////删除任务数据 + //await FreeRedisProvider.Instance.DelAsync(oneMinutekeyList); - //缓存下一个时间的任务 - await CacheNextTaskData(timeDensity, MeterTypeEnum.WaterMeter); + ////缓存下一个时间的任务 + //await CacheNextTaskData(timeDensity, MeterTypeEnum.WaterMeter); _logger.LogInformation($"{nameof(WatermeterScheduledMeterOneMinuteReading)} {timeDensity}分钟采集水表数据处理完成"); @@ -900,11 +901,11 @@ namespace JiShe.CollectBus.ScheduledMeterReading await _meterReadingRecordRepository.InsertManyAsync(meterTaskInfosList); } - //删除任务数据 - await FreeRedisProvider.Instance.DelAsync(fiveMinutekeyList); + ////删除任务数据 + //await FreeRedisProvider.Instance.DelAsync(fiveMinutekeyList); - //缓存下一个时间的任务 - await CacheNextTaskData(timeDensity, MeterTypeEnum.WaterMeter); + ////缓存下一个时间的任务 + //await CacheNextTaskData(timeDensity, MeterTypeEnum.WaterMeter); _logger.LogInformation($"{nameof(WatermeterScheduledMeterFiveMinuteReading)} {timeDensity}分钟采集水表数据处理完成"); @@ -961,11 +962,11 @@ namespace JiShe.CollectBus.ScheduledMeterReading await _meterReadingRecordRepository.InsertManyAsync(meterTaskInfosList); } - //删除任务数据 - await FreeRedisProvider.Instance.DelAsync(fifteenMinutekeyList); + ////删除任务数据 + //await FreeRedisProvider.Instance.DelAsync(fifteenMinutekeyList); - //缓存下一个时间的任务 - await CacheNextTaskData(timeDensity, MeterTypeEnum.WaterMeter); + ////缓存下一个时间的任务 + //await CacheNextTaskData(timeDensity, MeterTypeEnum.WaterMeter); _logger.LogInformation($"{nameof(WatermeterScheduledMeterFiveMinuteReading)} {timeDensity}分钟采集水表数据处理完成"); @@ -1050,24 +1051,24 @@ namespace JiShe.CollectBus.ScheduledMeterReading return true; } - /// - /// 缓存下一个时间的任务 - /// - /// 采集频率 - /// 表类型 - /// - private async Task CacheNextTaskData(int timeDensity, MeterTypeEnum meterType) - { - //缓存下一个时间的任务 - TasksToBeIssueModel nextTask = new TasksToBeIssueModel() - { - TimeDensity = timeDensity, - NextTask = DateTime.Now.AddMinutes(timeDensity) - }; + ///// + ///// 缓存下一个时间的任务 + ///// + ///// 采集频率 + ///// 表类型 + ///// + //private async Task CacheNextTaskData(int timeDensity, MeterTypeEnum meterType) + //{ + // //缓存下一个时间的任务 + // TasksToBeIssueModel nextTask = new TasksToBeIssueModel() + // { + // TimeDensity = timeDensity, + // NextTask = DateTime.Now.AddMinutes(timeDensity) + // }; - var redisCacheKey = string.Format(RedisConst.CacheTasksToBeIssuedKey, SystemType, ServerTagName, meterType, timeDensity); - await FreeRedisProvider.Instance.SetAsync(redisCacheKey, nextTask); - } + // var redisCacheKey = string.Format(RedisConst.CacheTasksToBeIssuedKey, SystemType, ServerTagName, meterType, timeDensity); + // await FreeRedisProvider.Instance.SetAsync(redisCacheKey, nextTask); + //} /// diff --git a/src/JiShe.CollectBus.Common/Helpers/CommonHelper.cs b/src/JiShe.CollectBus.Common/Helpers/CommonHelper.cs index 33a0a38..ef2ba8e 100644 --- a/src/JiShe.CollectBus.Common/Helpers/CommonHelper.cs +++ b/src/JiShe.CollectBus.Common/Helpers/CommonHelper.cs @@ -760,5 +760,17 @@ namespace JiShe.CollectBus.Common.Helpers return fontValue; } + + /// + /// 获取任务标识 + /// + /// + /// + /// + /// + public static string GetTaskMark(int afn,int fn,int pn) + { + return $"{afn}{fn}{pn}"; + } } } diff --git a/src/JiShe.CollectBus.Domain/IotSystems/Devices/Device.cs b/src/JiShe.CollectBus.Domain/IotSystems/Devices/Device.cs index a18c9d8..91a5ce7 100644 --- a/src/JiShe.CollectBus.Domain/IotSystems/Devices/Device.cs +++ b/src/JiShe.CollectBus.Domain/IotSystems/Devices/Device.cs @@ -57,6 +57,11 @@ namespace JiShe.CollectBus.IotSystems.Devices /// public DeviceStatus Status { get; set; } + /// + /// 设备任务超时次数,超过一定次数则发出预警。 + /// + public int TaskTimeOutCounts { get; set; } = 0; + public void UpdateByLoginAndHeartbeat(string clientId) { LastOnlineTime = DateTime.Now; diff --git a/src/JiShe.CollectBus.Domain/IotSystems/MeterReadingRecords/MeterReadingRecords.cs b/src/JiShe.CollectBus.Domain/IotSystems/MeterReadingRecords/MeterReadingRecords.cs index 153acdf..b1f1112 100644 --- a/src/JiShe.CollectBus.Domain/IotSystems/MeterReadingRecords/MeterReadingRecords.cs +++ b/src/JiShe.CollectBus.Domain/IotSystems/MeterReadingRecords/MeterReadingRecords.cs @@ -10,7 +10,7 @@ using Volo.Abp.Domain.Entities.Auditing; namespace JiShe.CollectBus.IotSystems.MeterReadingRecords { /// - /// 抄读数据记录 + /// 抄读任务数据记录 /// public class MeterReadingRecords : AggregateRoot { @@ -19,20 +19,25 @@ namespace JiShe.CollectBus.IotSystems.MeterReadingRecords /// public bool ManualOrNot { get; set; } + /// + /// 任务数据唯一标记 + /// + public string TaskMark { get; set; } + + /// + /// 时间戳标记,IoTDB时间列处理,上报通过构建标记获取唯一标记匹配时间戳。 + /// + public long Timestamps { get; set; } + + /// + /// 是否超时 + /// + public bool IsTimeout { get; set; } = false; + /// /// 待抄读时间 /// public DateTime PendingCopyReadTime { get; set; } - - /// - /// 下发消息内容 - /// - public string IssuedMessageHexString { get; set; } - - /// - /// 下发消息Id - /// - public string IssuedMessageId { get; set; } /// /// 集中器ID @@ -88,17 +93,23 @@ namespace JiShe.CollectBus.IotSystems.MeterReadingRecords /// 采集项编码 /// public string ItemCode { get; set;} - - /// - /// 是否超时 - /// - public bool IsTimeout { get; set; } = false; + /// /// 创建时间 /// public DateTime CreationTime { get; set; } + /// + /// 下发消息内容 + /// + public string IssuedMessageHexString { get; set; } + + /// + /// 下发消息Id + /// + public string IssuedMessageId { get; set; } + /// /// 消息上报内容 ///