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; }
+
///
/// 消息上报内容
///