月度报表
This commit is contained in:
parent
8a4fceebc0
commit
3be81cf517
@ -23,14 +23,14 @@ namespace YunDa.SOMS.Application.DataMonitoring.SecondaryCircuitInspection
|
||||
EditSecondaryCircuitEventDrivenConfigInput input,
|
||||
CancellationToken cancellationToken = default);
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 分页查询事件驱动配置列表
|
||||
/// </summary>
|
||||
RequestPageResult<SecondaryCircuitEventDrivenConfigOutput> FindDatas(
|
||||
PageSearchCondition<SecondaryCircuitEventDrivenConfigSearchInput> searchCondition);
|
||||
|
||||
Task<RequestPageResult<SecondaryCircuitEventDrivenConfigOutput>> FindDatasAsync(
|
||||
PageSearchCondition<SecondaryCircuitEventDrivenConfigSearchInput> input,
|
||||
CancellationToken cancellationToken = default);
|
||||
/// <summary>
|
||||
/// 查询所有事件驱动配置(不分页)
|
||||
/// </summary>
|
||||
|
||||
@ -31,6 +31,8 @@ using YunDa.SOMS.Entities.DataMonitoring.SecondaryCircuitInspection;
|
||||
using YunDa.SOMS.Entities.GeneralInformation;
|
||||
using YunDa.SOMS.Redis.Repositories;
|
||||
using YunDa.SOMS.Application.DataMonitoring.SecondaryCircuitInspection.Test;
|
||||
using Abp.Linq.Extensions;
|
||||
using Abp.UI;
|
||||
|
||||
namespace YunDa.SOMS.Application.DataMonitoring.SecondaryCircuitInspection
|
||||
{
|
||||
@ -924,23 +926,197 @@ namespace YunDa.SOMS.Application.DataMonitoring.SecondaryCircuitInspection
|
||||
|
||||
#endregion
|
||||
|
||||
#region 私有方法
|
||||
#region 分页查询
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public RequestPageResult<SecondaryCircuitEventDrivenConfigOutput> FindDatas(PageSearchCondition<SecondaryCircuitEventDrivenConfigSearchInput> searchCondition)
|
||||
/// <summary>
|
||||
/// 获取事件驱动配置列表(分页)
|
||||
/// </summary>
|
||||
/// <param name="input">分页搜索条件</param>
|
||||
/// <param name="cancellationToken">取消令牌</param>
|
||||
/// <returns>分页结果</returns>
|
||||
/// <exception cref="UserFriendlyException">查询失败时抛出</exception>
|
||||
[ShowApi]
|
||||
[AllowAnonymous]
|
||||
[HttpPost]
|
||||
public async Task<RequestPageResult<SecondaryCircuitEventDrivenConfigOutput>> FindDatasAsync(
|
||||
PageSearchCondition<SecondaryCircuitEventDrivenConfigSearchInput> input,
|
||||
CancellationToken cancellationToken = default)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
RequestPageResult<SecondaryCircuitEventDrivenConfigOutput> rst = new RequestPageResult<SecondaryCircuitEventDrivenConfigOutput>();
|
||||
try
|
||||
{
|
||||
// Build query with eager loading of related entities
|
||||
var query = _eventDrivenConfigRepository.GetAll()
|
||||
.Include(x => x.SecondaryCircuitInspectionEventItems)
|
||||
.ThenInclude(t => t.InspectionItem)
|
||||
.ThenInclude(t => t.TelemetryConfigs)
|
||||
.ThenInclude(t => t.TelemeteringConfiguration)
|
||||
.Include(x => x.SecondaryCircuitInspectionEventItems)
|
||||
.ThenInclude(t => t.InspectionItem)
|
||||
.ThenInclude(t => t.TelesignalConfigs)
|
||||
.ThenInclude(t => t.TelesignalisationConfiguration)
|
||||
.Include(x => x.TelemetryConfigs)
|
||||
.ThenInclude(t => t.TelemeteringConfiguration)
|
||||
.Include(x => x.TelesignalConfigs)
|
||||
.ThenInclude(t => t.TelesignalisationConfiguration)
|
||||
.AsQueryable()
|
||||
;
|
||||
|
||||
// Apply search conditions
|
||||
if (input.SearchCondition != null)
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(input.SearchCondition.Name))
|
||||
{
|
||||
query = query.Where(x => x.Name.Contains(input.SearchCondition.Name) ||
|
||||
x.Remark.Contains(input.SearchCondition.Name));
|
||||
}
|
||||
|
||||
if (input.SearchCondition.Priority.HasValue)
|
||||
{
|
||||
query = query.Where(x => x.Priority == input.SearchCondition.Priority.Value);
|
||||
}
|
||||
|
||||
if (input.SearchCondition.IsActive.HasValue)
|
||||
{
|
||||
query = query.Where(x => x.IsActive == input.SearchCondition.IsActive.Value);
|
||||
}
|
||||
}
|
||||
|
||||
// Get total count before pagination
|
||||
var totalCount = await query.CountAsync(cancellationToken).ConfigureAwait(false);
|
||||
|
||||
// Apply sorting
|
||||
query = query.OrderBy(x => x.CreationTime).ThenBy(x => x.Name);
|
||||
|
||||
// Apply pagination
|
||||
int skipCount = input.PageIndex <= 0 ? 0 : ((input.PageIndex - 1) * input.PageSize);
|
||||
if (input.PageSize > 0)
|
||||
{
|
||||
query = query.PageBy(skipCount, input.PageSize);
|
||||
}
|
||||
|
||||
var entities = await query.ToListAsync(cancellationToken).ConfigureAwait(false);
|
||||
|
||||
// Load equipment info dictionary for efficient lookups
|
||||
var equipmentInfoDict = await _equipmentInfoRepository.GetAll()
|
||||
.ToDictionaryAsync(e => e.Id, e => e.Name, cancellationToken)
|
||||
.ConfigureAwait(false);
|
||||
|
||||
// Map entities to output DTOs
|
||||
var outputList = new List<SecondaryCircuitEventDrivenConfigOutput>();
|
||||
foreach (var entity in entities)
|
||||
{
|
||||
var output = ObjectMapper.Map<SecondaryCircuitEventDrivenConfigOutput>(entity);
|
||||
output.SecondaryCircuitInspectionEventItems = ObjectMapper.Map<List<SecondaryCircuitInspectionItemOutput>>(
|
||||
entity.SecondaryCircuitInspectionEventItems.Select(t => t.InspectionItem));
|
||||
|
||||
// Enrich nested inspection items with telemetry and telesignal config details
|
||||
foreach (var eventItem in entity.SecondaryCircuitInspectionEventItems)
|
||||
{
|
||||
if (eventItem.InspectionItem == null) continue;
|
||||
|
||||
var outputItem = output.SecondaryCircuitInspectionEventItems.FirstOrDefault(x => x.Id == eventItem.InspectionItem.Id);
|
||||
if (outputItem == null) continue;
|
||||
|
||||
// Enrich telemetry configs for nested inspection item
|
||||
if (eventItem.InspectionItem.TelemetryConfigs != null && eventItem.InspectionItem.TelemetryConfigs.Any())
|
||||
{
|
||||
outputItem.TelemetryConfigs = eventItem.InspectionItem.TelemetryConfigs.Select(tc => new SecondaryCircuitInspectionTelemetryConfigOutput
|
||||
{
|
||||
Id = tc.Id,
|
||||
EquipmentInfoId = tc.TelemeteringConfiguration.EquipmentInfoId.Value,
|
||||
EquipmentInfoName = equipmentInfoDict.ContainsKey(tc.TelemeteringConfiguration.EquipmentInfoId.Value)
|
||||
? equipmentInfoDict[tc.TelemeteringConfiguration.EquipmentInfoId.Value]
|
||||
: string.Empty,
|
||||
TelemetryConfigurationId = tc.TelemetryConfigurationId ?? Guid.Empty,
|
||||
TelemetryConfigurationName = tc.TelemeteringConfiguration?.Name,
|
||||
TelemetryConfigurationIsmsId = tc.TelemeteringConfiguration?.ismsbaseYCId
|
||||
}).ToList();
|
||||
outputItem.TelemetryConfigCount = outputItem.TelemetryConfigs.Count;
|
||||
}
|
||||
|
||||
// Enrich telesignal configs for nested inspection item
|
||||
if (eventItem.InspectionItem.TelesignalConfigs != null && eventItem.InspectionItem.TelesignalConfigs.Any())
|
||||
{
|
||||
outputItem.TelesignalConfigs = eventItem.InspectionItem.TelesignalConfigs.Select(tc => new SecondaryCircuitInspectionTelesignalConfigOutput
|
||||
{
|
||||
Id = tc.Id,
|
||||
EquipmentInfoId = tc.TelesignalisationConfiguration.EquipmentInfoId.Value,
|
||||
EquipmentInfoName = equipmentInfoDict.ContainsKey(tc.TelesignalisationConfiguration.EquipmentInfoId.Value)
|
||||
? equipmentInfoDict[tc.TelesignalisationConfiguration.EquipmentInfoId.Value]
|
||||
: string.Empty,
|
||||
TelesignalConfigurationId = tc.TelesignalConfigurationId ?? Guid.Empty,
|
||||
TelesignalConfigurationName = tc.TelesignalisationConfiguration?.Name,
|
||||
TelesignalConfigurationIsmsId = tc.TelesignalisationConfiguration?.ismsbaseYXId
|
||||
}).ToList();
|
||||
outputItem.TelesignalConfigCount = outputItem.TelesignalConfigs.Count;
|
||||
}
|
||||
}
|
||||
|
||||
// Map telemetry configs
|
||||
if (entity.TelemetryConfigs != null && entity.TelemetryConfigs.Any())
|
||||
{
|
||||
output.TelemetryConfigs = entity.TelemetryConfigs.Select(tc => new SecondaryCircuitInspectionTelemetryConfigOutput
|
||||
{
|
||||
Id = tc.Id,
|
||||
EquipmentInfoId = tc.TelemeteringConfiguration.EquipmentInfoId.Value,
|
||||
EquipmentInfoName = equipmentInfoDict.ContainsKey(tc.TelemeteringConfiguration.EquipmentInfoId.Value)
|
||||
? equipmentInfoDict[tc.TelemeteringConfiguration.EquipmentInfoId.Value]
|
||||
: string.Empty,
|
||||
TelemetryConfigurationId = tc.TelemetryConfigurationId ?? Guid.Empty,
|
||||
TelemetryConfigurationName = tc.TelemeteringConfiguration?.Name,
|
||||
TelemetryConfigurationIsmsId = tc.TelemeteringConfiguration?.ismsbaseYCId
|
||||
}).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
output.TelemetryConfigs = new List<SecondaryCircuitInspectionTelemetryConfigOutput>();
|
||||
}
|
||||
|
||||
// Map telesignal configs
|
||||
if (entity.TelesignalConfigs != null && entity.TelesignalConfigs.Any())
|
||||
{
|
||||
output.TelesignalConfigs = entity.TelesignalConfigs.Select(tc => new SecondaryCircuitInspectionTelesignalConfigOutput
|
||||
{
|
||||
Id = tc.Id,
|
||||
EquipmentInfoId = tc.TelesignalisationConfiguration.EquipmentInfoId.Value,
|
||||
EquipmentInfoName = equipmentInfoDict.ContainsKey(tc.TelesignalisationConfiguration.EquipmentInfoId.Value)
|
||||
? equipmentInfoDict[tc.TelesignalisationConfiguration.EquipmentInfoId.Value]
|
||||
: string.Empty,
|
||||
TelesignalConfigurationId = tc.TelesignalConfigurationId ?? Guid.Empty,
|
||||
TelesignalConfigurationName = tc.TelesignalisationConfiguration?.Name,
|
||||
TelesignalConfigurationIsmsId = tc.TelesignalisationConfiguration?.ismsbaseYXId
|
||||
}).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
output.TelesignalConfigs = new List<SecondaryCircuitInspectionTelesignalConfigOutput>();
|
||||
}
|
||||
|
||||
outputList.Add(output);
|
||||
}
|
||||
|
||||
// Set pagination result properties
|
||||
rst.PageSize = input.PageSize;
|
||||
rst.PageIndex = input.PageIndex;
|
||||
rst.TotalCount = totalCount;
|
||||
rst.Flag = true;
|
||||
rst.ResultData = outputList;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log4Helper.Error($"获取事件驱动配置列表失败: {ex.Message}", ex);
|
||||
throw new UserFriendlyException($"获取事件驱动配置列表失败: {ex.Message}");
|
||||
}
|
||||
return rst;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 私有方法
|
||||
|
||||
#endregion
|
||||
|
||||
#region 辅助类
|
||||
|
||||
/// <summary>
|
||||
|
||||
@ -1596,7 +1596,9 @@ namespace YunDa.SOMS.Application.DataMonitoring.SecondaryCircuitInspection
|
||||
var datas = _imVariantBoolRepository.GetAll().Select(t => new VirtualPointInfoOutput
|
||||
{
|
||||
id = t.Id,
|
||||
name = t.Vaname
|
||||
name = t.Vaname,
|
||||
ExprDesc = t.ExprDesc,
|
||||
AlertMsg = t.AlertMsg
|
||||
});
|
||||
rst.ResultData = datas.ToList();
|
||||
rst.Flag = true;
|
||||
|
||||
@ -194,6 +194,102 @@ namespace YunDa.SOMS.Application.DataMonitoring.SecondaryCircuitInspection
|
||||
return rst;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取巡检结果(分页)
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
/// <exception cref="UserFriendlyException"></exception>
|
||||
[ShowApi]
|
||||
[AllowAnonymous]
|
||||
[HttpPost]
|
||||
public async Task<RequestPageResult<SecondaryCircuitInspectionSimPlanOutput>> FindDatasAsync(
|
||||
PageSearchCondition<SecondaryCircuitInspectionPlanSearchInput> input,
|
||||
CancellationToken cancellationToken = default)
|
||||
{
|
||||
RequestPageResult<SecondaryCircuitInspectionSimPlanOutput> rst = new RequestPageResult<SecondaryCircuitInspectionSimPlanOutput>();
|
||||
try
|
||||
{
|
||||
// Build query with search conditions
|
||||
var query = _inspectionPlanRepository.GetAll()
|
||||
.WhereIf(!string.IsNullOrWhiteSpace(input.SearchCondition.Name),
|
||||
x => x.Name.Contains(input.SearchCondition.Name) || x.Description.Contains(input.SearchCondition.Name))
|
||||
.WhereIf(input.SearchCondition.Priority.HasValue,
|
||||
x => x.Priority == input.SearchCondition.Priority.Value)
|
||||
.WhereIf(input.SearchCondition.IsActive.HasValue,
|
||||
x => x.IsActive == input.SearchCondition.IsActive.Value);
|
||||
|
||||
// Get total count before pagination
|
||||
var totalCount = await query.CountAsync(cancellationToken).ConfigureAwait(false);
|
||||
|
||||
// Apply sorting
|
||||
query = query.OrderBy(x => x.ScheduledHour).ThenBy(t=>t.ScheduledMinute);
|
||||
|
||||
// Apply pagination
|
||||
int skipCount = input.PageIndex <= 0 ? 0 : ((input.PageIndex - 1) * input.PageSize);
|
||||
if (input.PageSize > 0)
|
||||
{
|
||||
query = query.PageBy(skipCount, input.PageSize);
|
||||
}
|
||||
|
||||
var entities = await query.ToListAsync(cancellationToken).ConfigureAwait(false);
|
||||
|
||||
// Load telemetry and telesignal configurations into memory to avoid MySQL connection reuse issues
|
||||
//var telemetrys = await _telemeteringConfigurationRepository
|
||||
// .GetAllIncluding(t => t.EquipmentInfo)
|
||||
// .ToListAsync(cancellationToken)
|
||||
// .ConfigureAwait(false);
|
||||
//var telesignals = await _telesignalisationConfigurationRepository
|
||||
// .GetAllIncluding(t => t.EquipmentInfo)
|
||||
// .ToListAsync(cancellationToken)
|
||||
// .ConfigureAwait(false);
|
||||
|
||||
var outputs = new List<SecondaryCircuitInspectionSimPlanOutput>();
|
||||
var inspectionItems = _inspectionPlanItemRepository.GetAll()
|
||||
.Include(t => t.InspectionItem);
|
||||
|
||||
foreach (var entity in entities)
|
||||
{
|
||||
var output = ObjectMapper.Map<SecondaryCircuitInspectionSimPlanOutput>(entity);
|
||||
output.ScheduledWeekDaysList = entity.GetScheduledWeekDaysList();
|
||||
if (entity.ScheduledHour.HasValue && entity.ScheduledMinute.HasValue)
|
||||
{
|
||||
output.ScheduledTimeString = $"{entity.ScheduledHour:D2}:{entity.ScheduledMinute.Value:D2}";
|
||||
}
|
||||
// 统计子项数量
|
||||
output.InspectionItemCount = inspectionItems.Where(t => t.InspectionPlanId == entity.Id).Count();
|
||||
// 包含详细信息
|
||||
if (output.InspectionItemCount > 0)
|
||||
{
|
||||
var items = inspectionItems.Where(t => t.InspectionPlanId == entity.Id).OrderBy(t => t.ExecutionOrder);
|
||||
|
||||
//output.PlanItems = ObjectMapper.Map<List<SecondaryCircuitInspectionPlanItemOutput>>(items);
|
||||
var tempInspectionItems = items.Select(t => t.InspectionItem);
|
||||
foreach (var item in tempInspectionItems)
|
||||
{
|
||||
var outputitem = ObjectMapper.Map<SecondaryCircuitInspectionItemSimOutput>(item);
|
||||
output.InspectionItems.Add(outputitem);
|
||||
}
|
||||
}
|
||||
|
||||
outputs.Add(output);
|
||||
}
|
||||
|
||||
// Set pagination result properties
|
||||
rst.PageSize = input.PageSize;
|
||||
rst.PageIndex = input.PageIndex;
|
||||
rst.TotalCount = totalCount;
|
||||
rst.Flag = true;
|
||||
rst.ResultData = outputs;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log4Helper.Error($"获取二次回路巡检计划列表失败: {ex.Message}", ex);
|
||||
throw new UserFriendlyException($"获取巡检计划列表失败: {ex.Message}");
|
||||
}
|
||||
return rst;
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取巡检计划详情
|
||||
/// </summary>
|
||||
|
||||
@ -436,6 +436,7 @@ namespace YunDa.SOMS.Application.DataMonitoring
|
||||
start++;
|
||||
|
||||
}
|
||||
|
||||
rst.Flag = true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
||||
@ -334,7 +334,8 @@ namespace YunDa.SOMS.Application.GeneralInformation.ProtectionDevice
|
||||
public async Task<RequestEasyResult> DataChanged(Guid equipmentId)
|
||||
{
|
||||
var result = new RequestEasyResult();
|
||||
|
||||
result.Flag = true;
|
||||
return result;
|
||||
// 1. 速率限制检查 - 防止过于频繁的更新
|
||||
var lastUpdateTime = _lastUpdateTimeCache.GetOrAdd(equipmentId, DateTime.MinValue);
|
||||
var timeSinceLastUpdate = DateTime.Now - lastUpdateTime;
|
||||
@ -448,18 +449,18 @@ namespace YunDa.SOMS.Application.GeneralInformation.ProtectionDevice
|
||||
}
|
||||
|
||||
// 9. 调用PushDynamicsInternalAsync推送数据 (使用内部方法避免授权问题)
|
||||
var dynamicsJson = Newtonsoft.Json.JsonConvert.SerializeObject(dynamicsData);
|
||||
Log4Helper.Info(GetType(), $"准备推送动态数据,数据点数量: {dynamicsData.Count},JSON长度: {dynamicsJson.Length}");
|
||||
//var dynamicsJson = Newtonsoft.Json.JsonConvert.SerializeObject(dynamicsData);
|
||||
//Log4Helper.Info(GetType(), $"准备推送动态数据,数据点数量: {dynamicsData.Count},JSON长度: {dynamicsJson.Length}");
|
||||
|
||||
bool pushResult = await _beijingYounuoApiAppService.PushDynamicsInternalAsync(dynamicsJson);
|
||||
//bool pushResult = await _beijingYounuoApiAppService.PushDynamicsInternalAsync(dynamicsJson);
|
||||
|
||||
// 10. 更新最后更新时间(无论推送成功与否,都更新时间戳以防止重试风暴)
|
||||
_lastUpdateTimeCache.AddOrUpdate(equipmentId, DateTime.Now, (key, oldValue) => DateTime.Now);
|
||||
//// 10. 更新最后更新时间(无论推送成功与否,都更新时间戳以防止重试风暴)
|
||||
//_lastUpdateTimeCache.AddOrUpdate(equipmentId, DateTime.Now, (key, oldValue) => DateTime.Now);
|
||||
|
||||
result.Flag = pushResult;
|
||||
result.Message = pushResult ?
|
||||
$"成功推送设备 {equipmentId} 的动态数据,数据点数量: {dynamicsData.Count}" :
|
||||
$"推送设备 {equipmentId} 的动态数据失败";
|
||||
//result.Flag = pushResult;
|
||||
//result.Message = pushResult ?
|
||||
// $"成功推送设备 {equipmentId} 的动态数据,数据点数量: {dynamicsData.Count}" :
|
||||
// $"推送设备 {equipmentId} 的动态数据失败";
|
||||
|
||||
Log4Helper.Info(GetType(), $"数据变位信号处理完成,结果: {result.Message}");
|
||||
}
|
||||
|
||||
@ -26,6 +26,7 @@ namespace YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspectio
|
||||
/// 设备名称
|
||||
/// </summary>
|
||||
public string deviceName { get; set; }
|
||||
public string ValueStr { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 调度地址
|
||||
@ -84,7 +85,8 @@ namespace YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspectio
|
||||
/// <summary>
|
||||
/// 时间戳
|
||||
/// </summary>
|
||||
public string timeStamp { get; set; }
|
||||
public string timeStamp { get; set; }
|
||||
public string valueStr { get; set; }
|
||||
}
|
||||
public class TelesignalData
|
||||
{
|
||||
@ -93,7 +95,6 @@ namespace YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspectio
|
||||
/// </summary>
|
||||
public int value { get; set; }
|
||||
public string valueStr { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 时间戳
|
||||
/// </summary>
|
||||
@ -114,6 +115,10 @@ namespace YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspectio
|
||||
/// 虚点名称
|
||||
/// </summary>
|
||||
public string name { get; set; }
|
||||
public string ValueStr { get; set; }
|
||||
public string ExprDesc { get; set; }
|
||||
public string AlertMsg { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 数据列表
|
||||
@ -130,7 +135,9 @@ namespace YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspectio
|
||||
/// 数据值
|
||||
/// </summary>
|
||||
public int value { get; set; }
|
||||
|
||||
public string ValueStr { get; set; }
|
||||
public string ExprDesc { get; set; }
|
||||
public string AlertMsg { get; set; }
|
||||
/// <summary>
|
||||
/// 时间戳
|
||||
/// </summary>
|
||||
@ -151,7 +158,7 @@ namespace YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspectio
|
||||
/// 网关名称
|
||||
/// </summary>
|
||||
public string name { get; set; }
|
||||
|
||||
public string ValueStr { get; set; }
|
||||
/// <summary>
|
||||
/// 数据列表
|
||||
/// </summary>
|
||||
@ -167,7 +174,7 @@ namespace YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspectio
|
||||
/// 数据值(丢帧率,float类型,例如:0.001表示0.1%丢帧率)
|
||||
/// </summary>
|
||||
public float value { get; set; }
|
||||
|
||||
public string ValueStr { get; set; }
|
||||
/// <summary>
|
||||
/// 时间戳
|
||||
/// </summary>
|
||||
|
||||
@ -159,6 +159,15 @@ namespace YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspectio
|
||||
GatewayConfigs = new List<SecondaryCircuitInspectionGatewayOutput>();
|
||||
}
|
||||
}
|
||||
[AutoMapFrom(typeof(SecondaryCircuitInspectionItem))]
|
||||
public class SecondaryCircuitInspectionItemSimOutput : EntityDto<Guid>
|
||||
{
|
||||
/// <summary>
|
||||
/// 子项名称
|
||||
/// </summary>
|
||||
public string Name { get; set; }
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 编辑二次回路巡检子项输入DTO
|
||||
|
||||
@ -83,6 +83,78 @@ namespace YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspectio
|
||||
}
|
||||
}
|
||||
|
||||
[AutoMapFrom(typeof(SecondaryCircuitInspectionPlan))]
|
||||
public class SecondaryCircuitInspectionSimPlanOutput : EntityDto<Guid>
|
||||
{
|
||||
/// <summary>
|
||||
/// 巡检计划名称
|
||||
/// </summary>
|
||||
public string Name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 巡检计划描述
|
||||
/// </summary>
|
||||
public string Description { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 巡检优先级
|
||||
/// </summary>
|
||||
public SecondaryCircuitInspectionPriority Priority { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否启用
|
||||
/// </summary>
|
||||
public bool IsActive { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 计划巡检 - 执行星期列表
|
||||
/// </summary>
|
||||
public List<int> ScheduledWeekDaysList { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 定时任务日期
|
||||
/// </summary>
|
||||
public virtual string ScheduledDate { get; set; }
|
||||
/// <summary>
|
||||
/// 计划巡检 - 执行时间(小时)
|
||||
/// </summary>
|
||||
public int? ScheduledHour { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 计划巡检 - 执行时间(分钟)
|
||||
/// </summary>
|
||||
public int? ScheduledMinute { get; set; }
|
||||
/// <summary>
|
||||
/// 计划巡检 - 执行时间字符串
|
||||
/// </summary>
|
||||
public string ScheduledTimeString { get; set; }
|
||||
/// <summary>
|
||||
/// 是否排除检修装置
|
||||
/// </summary>
|
||||
public bool ExcludeMaintenanceDevices { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 计算检修状态表达式
|
||||
/// </summary>
|
||||
public virtual string ExcludeMaintenanceExpreesion { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 巡检子项数量
|
||||
/// </summary>
|
||||
public int InspectionItemCount { get; set; }
|
||||
/// <summary>
|
||||
/// 巡检项列表
|
||||
/// </summary>
|
||||
public List<SecondaryCircuitInspectionItemSimOutput> InspectionItems { get; set; }
|
||||
|
||||
public SecondaryCircuitInspectionSimPlanOutput()
|
||||
{
|
||||
InspectionItems = new List<SecondaryCircuitInspectionItemSimOutput>();
|
||||
ScheduledWeekDaysList = new List<int>();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 编辑二次回路巡检计划输入DTO
|
||||
/// </summary>
|
||||
@ -173,7 +245,7 @@ namespace YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspectio
|
||||
/// <summary>
|
||||
/// 二次回路巡检计划查询输入DTO
|
||||
/// </summary>
|
||||
public class SecondaryCircuitInspectionPlanSearchInput : PagedAndSortedResultRequestDto
|
||||
public class SecondaryCircuitInspectionPlanSearchInput:PagedAndSortedResultRequestDto
|
||||
{
|
||||
/// <summary>
|
||||
/// 关键字搜索(名称、描述)
|
||||
|
||||
@ -30,17 +30,26 @@ namespace YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspectio
|
||||
public SecondaryCircuitInspectionModuleType? ModuleType { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 开始时间
|
||||
/// 日期范围字符串(支持多种格式,优先使用此参数)
|
||||
/// 格式说明:
|
||||
/// - "yyyy-MM-dd" : 按天查询,如 "2025-11-19" 查询当天 00:00:00 至 23:59:59
|
||||
/// - "yyyy-MM" : 按月查询,如 "2025-11" 查询当月第一天至最后一天
|
||||
/// - "yyyy" : 按年查询,如 "2025" 查询当年第一天至最后一天
|
||||
/// - "yyyy-Www" 或 "yyyyWww" : 按周查询(ISO 8601),如 "2025-W47" 查询第47周(周一至周日)
|
||||
/// - "yyyy-MM-dd~yyyy-MM-dd" : 日期范围查询,如 "2025-11-17~2025-11-23" 查询指定范围
|
||||
/// </summary>
|
||||
public string DateRange { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 开始时间(当 DateRange 未提供时使用)
|
||||
/// </summary>
|
||||
[Required(ErrorMessage = "开始时间不能为空")]
|
||||
public DateTime? StartTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 结束时间
|
||||
/// 结束时间(当 DateRange 未提供时使用)
|
||||
/// </summary>
|
||||
[Required(ErrorMessage = "结束时间不能为空")]
|
||||
public DateTime? EndTime { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 是否包含详细分析
|
||||
/// </summary>
|
||||
|
||||
@ -49,32 +49,16 @@ namespace YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspectio
|
||||
/// </summary>
|
||||
public DateTime StatisticsEndTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 按变电站统计详情
|
||||
/// </summary>
|
||||
public List<SecondaryCircuitInspectionStatisticsByStation> StatisticsByStation { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 按巡检计划统计详情
|
||||
/// </summary>
|
||||
public List<SecondaryCircuitInspectionStatisticsByPlan> StatisticsByPlan { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 按模块类型统计详情
|
||||
/// </summary>
|
||||
public List<SecondaryCircuitInspectionStatisticsByModule> StatisticsByModule { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 按时间统计详情
|
||||
/// </summary>
|
||||
public List<SecondaryCircuitInspectionStatisticsByTime> StatisticsByTime { get; set; }
|
||||
|
||||
|
||||
public SecondaryCircuitInspectionStatisticsOutput()
|
||||
{
|
||||
StatisticsByStation = new List<SecondaryCircuitInspectionStatisticsByStation>();
|
||||
StatisticsByPlan = new List<SecondaryCircuitInspectionStatisticsByPlan>();
|
||||
StatisticsByModule = new List<SecondaryCircuitInspectionStatisticsByModule>();
|
||||
StatisticsByTime = new List<SecondaryCircuitInspectionStatisticsByTime>();
|
||||
}
|
||||
}
|
||||
|
||||
@ -241,4 +225,46 @@ namespace YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspectio
|
||||
/// </summary>
|
||||
public double AbnormalRate { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 年度统计按月分组输出DTO
|
||||
/// </summary>
|
||||
public class YearlyStatisticsByMonthOutput
|
||||
{
|
||||
/// <summary>
|
||||
/// 年份
|
||||
/// </summary>
|
||||
public int Year { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 月度统计列表(包含12个月的统计数据)
|
||||
/// </summary>
|
||||
public List<MonthlyStatisticsItem> MonthlyStatistics { get; set; }
|
||||
|
||||
public YearlyStatisticsByMonthOutput()
|
||||
{
|
||||
MonthlyStatistics = new List<MonthlyStatisticsItem>();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 月度统计项
|
||||
/// </summary>
|
||||
public class MonthlyStatisticsItem
|
||||
{
|
||||
/// <summary>
|
||||
/// 年份
|
||||
/// </summary>
|
||||
public int Year { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 月份(1-12)
|
||||
/// </summary>
|
||||
public int Month { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 该月的统计数据
|
||||
/// </summary>
|
||||
public SecondaryCircuitInspectionStatisticsOutput Statistics { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@ -63,5 +63,6 @@
|
||||
_searchCondition = value;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@ -9972,6 +9972,11 @@
|
||||
网关配置关联列表
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionItemSimOutput.Name">
|
||||
<summary>
|
||||
子项名称
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.EditSecondaryCircuitInspectionItemInput">
|
||||
<summary>
|
||||
编辑二次回路巡检子项输入DTO
|
||||
@ -10422,6 +10427,71 @@
|
||||
巡检项列表
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionSimPlanOutput.Name">
|
||||
<summary>
|
||||
巡检计划名称
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionSimPlanOutput.Description">
|
||||
<summary>
|
||||
巡检计划描述
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionSimPlanOutput.Priority">
|
||||
<summary>
|
||||
巡检优先级
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionSimPlanOutput.IsActive">
|
||||
<summary>
|
||||
是否启用
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionSimPlanOutput.ScheduledWeekDaysList">
|
||||
<summary>
|
||||
计划巡检 - 执行星期列表
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionSimPlanOutput.ScheduledDate">
|
||||
<summary>
|
||||
定时任务日期
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionSimPlanOutput.ScheduledHour">
|
||||
<summary>
|
||||
计划巡检 - 执行时间(小时)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionSimPlanOutput.ScheduledMinute">
|
||||
<summary>
|
||||
计划巡检 - 执行时间(分钟)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionSimPlanOutput.ScheduledTimeString">
|
||||
<summary>
|
||||
计划巡检 - 执行时间字符串
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionSimPlanOutput.ExcludeMaintenanceDevices">
|
||||
<summary>
|
||||
是否排除检修装置
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionSimPlanOutput.ExcludeMaintenanceExpreesion">
|
||||
<summary>
|
||||
计算检修状态表达式
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionSimPlanOutput.InspectionItemCount">
|
||||
<summary>
|
||||
巡检子项数量
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionSimPlanOutput.InspectionItems">
|
||||
<summary>
|
||||
巡检项列表
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.EditSecondaryCircuitInspectionPlanInput">
|
||||
<summary>
|
||||
编辑二次回路巡检计划输入DTO
|
||||
@ -10992,14 +11062,25 @@
|
||||
主模块类型
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionStatisticsInput.DateRange">
|
||||
<summary>
|
||||
日期范围字符串(支持多种格式,优先使用此参数)
|
||||
格式说明:
|
||||
- "yyyy-MM-dd" : 按天查询,如 "2025-11-19" 查询当天 00:00:00 至 23:59:59
|
||||
- "yyyy-MM" : 按月查询,如 "2025-11" 查询当月第一天至最后一天
|
||||
- "yyyy" : 按年查询,如 "2025" 查询当年第一天至最后一天
|
||||
- "yyyy-Www" 或 "yyyyWww" : 按周查询(ISO 8601),如 "2025-W47" 查询第47周(周一至周日)
|
||||
- "yyyy-MM-dd~yyyy-MM-dd" : 日期范围查询,如 "2025-11-17~2025-11-23" 查询指定范围
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionStatisticsInput.StartTime">
|
||||
<summary>
|
||||
开始时间
|
||||
开始时间(当 DateRange 未提供时使用)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionStatisticsInput.EndTime">
|
||||
<summary>
|
||||
结束时间
|
||||
结束时间(当 DateRange 未提供时使用)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionStatisticsInput.IncludeDetailAnalysis">
|
||||
@ -11052,26 +11133,11 @@
|
||||
统计时间范围结束
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionStatisticsOutput.StatisticsByStation">
|
||||
<summary>
|
||||
按变电站统计详情
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionStatisticsOutput.StatisticsByPlan">
|
||||
<summary>
|
||||
按巡检计划统计详情
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionStatisticsOutput.StatisticsByModule">
|
||||
<summary>
|
||||
按模块类型统计详情
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionStatisticsOutput.StatisticsByTime">
|
||||
<summary>
|
||||
按时间统计详情
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionStatisticsByStation">
|
||||
<summary>
|
||||
按变电站统计详情
|
||||
@ -11232,6 +11298,41 @@
|
||||
异常率
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.YearlyStatisticsByMonthOutput">
|
||||
<summary>
|
||||
年度统计按月分组输出DTO
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.YearlyStatisticsByMonthOutput.Year">
|
||||
<summary>
|
||||
年份
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.YearlyStatisticsByMonthOutput.MonthlyStatistics">
|
||||
<summary>
|
||||
月度统计列表(包含12个月的统计数据)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.MonthlyStatisticsItem">
|
||||
<summary>
|
||||
月度统计项
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.MonthlyStatisticsItem.Year">
|
||||
<summary>
|
||||
年份
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.MonthlyStatisticsItem.Month">
|
||||
<summary>
|
||||
月份(1-12)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.MonthlyStatisticsItem.Statistics">
|
||||
<summary>
|
||||
该月的统计数据
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:YunDa.SOMS.DataTransferObject.DataMonitoring.SelfCheckingConfigurationDto.EditSelfCheckingConfigurationInput">
|
||||
<summary>
|
||||
预置点识别配置
|
||||
|
||||
@ -0,0 +1,435 @@
|
||||
# DateRange 解析测试用例
|
||||
|
||||
## 测试目的
|
||||
验证 `ParseDateRange` 方法能够正确处理各种日期格式和边界情况。
|
||||
|
||||
---
|
||||
|
||||
## 测试用例 1:按天查询 - 普通日期
|
||||
|
||||
**输入:** `"2025-11-19"`
|
||||
|
||||
**预期输出:**
|
||||
- StartTime: `2025-11-19 00:00:00.000`
|
||||
- EndTime: `2025-11-19 23:59:59.999`
|
||||
|
||||
**验证点:**
|
||||
- ✅ 正确解析 yyyy-MM-dd 格式
|
||||
- ✅ 开始时间为当天 00:00:00
|
||||
- ✅ 结束时间为当天 23:59:59.999
|
||||
|
||||
---
|
||||
|
||||
## 测试用例 2:按天查询 - 月末日期
|
||||
|
||||
**输入:** `"2025-11-30"`
|
||||
|
||||
**预期输出:**
|
||||
- StartTime: `2025-11-30 00:00:00.000`
|
||||
- EndTime: `2025-11-30 23:59:59.999`
|
||||
|
||||
**验证点:**
|
||||
- ✅ 正确处理月末日期
|
||||
- ✅ 不会溢出到下个月
|
||||
|
||||
---
|
||||
|
||||
## 测试用例 3:按天查询 - 年末日期
|
||||
|
||||
**输入:** `"2025-12-31"`
|
||||
|
||||
**预期输出:**
|
||||
- StartTime: `2025-12-31 00:00:00.000`
|
||||
- EndTime: `2025-12-31 23:59:59.999`
|
||||
|
||||
**验证点:**
|
||||
- ✅ 正确处理年末日期
|
||||
- ✅ 不会溢出到下一年
|
||||
|
||||
---
|
||||
|
||||
## 测试用例 4:按月查询 - 31天的月份
|
||||
|
||||
**输入:** `"2025-01"`
|
||||
|
||||
**预期输出:**
|
||||
- StartTime: `2025-01-01 00:00:00.000`
|
||||
- EndTime: `2025-01-31 23:59:59.999`
|
||||
|
||||
**验证点:**
|
||||
- ✅ 正确解析 yyyy-MM 格式
|
||||
- ✅ 正确计算31天月份的最后一天
|
||||
|
||||
---
|
||||
|
||||
## 测试用例 5:按月查询 - 30天的月份
|
||||
|
||||
**输入:** `"2025-11"`
|
||||
|
||||
**预期输出:**
|
||||
- StartTime: `2025-11-01 00:00:00.000`
|
||||
- EndTime: `2025-11-30 23:59:59.999`
|
||||
|
||||
**验证点:**
|
||||
- ✅ 正确计算30天月份的最后一天
|
||||
|
||||
---
|
||||
|
||||
## 测试用例 6:按月查询 - 2月(平年)
|
||||
|
||||
**输入:** `"2025-02"`
|
||||
|
||||
**预期输出:**
|
||||
- StartTime: `2025-02-01 00:00:00.000`
|
||||
- EndTime: `2025-02-28 23:59:59.999`
|
||||
|
||||
**验证点:**
|
||||
- ✅ 正确处理平年2月(28天)
|
||||
|
||||
---
|
||||
|
||||
## 测试用例 7:按月查询 - 2月(闰年)
|
||||
|
||||
**输入:** `"2024-02"`
|
||||
|
||||
**预期输出:**
|
||||
- StartTime: `2024-02-01 00:00:00.000`
|
||||
- EndTime: `2024-02-29 23:59:59.999`
|
||||
|
||||
**验证点:**
|
||||
- ✅ 正确处理闰年2月(29天)
|
||||
- ✅ 自动识别闰年
|
||||
|
||||
---
|
||||
|
||||
## 测试用例 8:按月查询 - 12月
|
||||
|
||||
**输入:** `"2025-12"`
|
||||
|
||||
**预期输出:**
|
||||
- StartTime: `2025-12-01 00:00:00.000`
|
||||
- EndTime: `2025-12-31 23:59:59.999`
|
||||
|
||||
**验证点:**
|
||||
- ✅ 正确处理年末月份
|
||||
- ✅ 不会溢出到下一年
|
||||
|
||||
---
|
||||
|
||||
## 测试用例 9:按年查询 - 平年
|
||||
|
||||
**输入:** `"2025"`
|
||||
|
||||
**预期输出:**
|
||||
- StartTime: `2025-01-01 00:00:00.000`
|
||||
- EndTime: `2025-12-31 23:59:59.999`
|
||||
|
||||
**验证点:**
|
||||
- ✅ 正确解析 yyyy 格式
|
||||
- ✅ 开始时间为1月1日
|
||||
- ✅ 结束时间为12月31日
|
||||
|
||||
---
|
||||
|
||||
## 测试用例 10:按年查询 - 闰年
|
||||
|
||||
**输入:** `"2024"`
|
||||
|
||||
**预期输出:**
|
||||
- StartTime: `2024-01-01 00:00:00.000`
|
||||
- EndTime: `2024-12-31 23:59:59.999`
|
||||
|
||||
**验证点:**
|
||||
- ✅ 正确处理闰年
|
||||
- ✅ 结束时间仍为12月31日(不受闰年影响)
|
||||
|
||||
---
|
||||
|
||||
## 测试用例 11:按周查询 - ISO 8601 格式(带连字符)
|
||||
|
||||
**输入:** `"2025-W47"`
|
||||
|
||||
**预期输出:**
|
||||
- StartTime: `2025-11-17 00:00:00.000`(周一)
|
||||
- EndTime: `2025-11-23 23:59:59.999`(周日)
|
||||
|
||||
**验证点:**
|
||||
- ✅ 正确解析 yyyy-Www 格式
|
||||
- ✅ 周一为一周的第一天
|
||||
- ✅ 周日为一周的最后一天
|
||||
- ✅ 正确计算第47周的日期范围
|
||||
|
||||
---
|
||||
|
||||
## 测试用例 12:按周查询 - ISO 8601 格式(无连字符)
|
||||
|
||||
**输入:** `"2025W47"`
|
||||
|
||||
**预期输出:**
|
||||
- StartTime: `2025-11-17 00:00:00.000`(周一)
|
||||
- EndTime: `2025-11-23 23:59:59.999`(周日)
|
||||
|
||||
**验证点:**
|
||||
- ✅ 正确解析 yyyyWww 格式
|
||||
- ✅ 与带连字符格式结果一致
|
||||
|
||||
---
|
||||
|
||||
## 测试用例 13:按周查询 - 第1周(可能跨年)
|
||||
|
||||
**输入:** `"2025-W01"`
|
||||
|
||||
**预期输出:**
|
||||
- StartTime: `2024-12-30 00:00:00.000`(周一,跨年到2024年)
|
||||
- EndTime: `2025-01-05 23:59:59.999`(周日)
|
||||
|
||||
**验证点:**
|
||||
- ✅ 正确处理跨年周
|
||||
- ✅ 遵循 ISO 8601 标准(第1周包含该年第一个周四)
|
||||
- ✅ 周一可能在上一年
|
||||
|
||||
---
|
||||
|
||||
## 测试用例 14:按周查询 - 最后一周
|
||||
|
||||
**输入:** `"2025-W52"`
|
||||
|
||||
**预期输出:**
|
||||
- StartTime: `2025-12-22 00:00:00.000`(周一)
|
||||
- EndTime: `2025-12-28 23:59:59.999`(周日)
|
||||
|
||||
**验证点:**
|
||||
- ✅ 正确处理年末周
|
||||
- ✅ 不会溢出到下一年
|
||||
|
||||
---
|
||||
|
||||
## 测试用例 15:按周查询 - 闰年的第1周
|
||||
|
||||
**输入:** `"2024-W01"`
|
||||
|
||||
**预期输出:**
|
||||
- StartTime: `2024-01-01 00:00:00.000`(周一)
|
||||
- EndTime: `2024-01-07 23:59:59.999`(周日)
|
||||
|
||||
**验证点:**
|
||||
- ✅ 正确处理闰年的周
|
||||
- ✅ 2024年第1周从1月1日开始(因为1月1日是周一)
|
||||
|
||||
---
|
||||
|
||||
## 测试用例 16:日期范围查询 - 7天范围
|
||||
|
||||
**输入:** `"2025-11-17~2025-11-23"`
|
||||
|
||||
**预期输出:**
|
||||
- StartTime: `2025-11-17 00:00:00.000`
|
||||
- EndTime: `2025-11-23 23:59:59.999`
|
||||
|
||||
**验证点:**
|
||||
- ✅ 正确解析日期范围格式
|
||||
- ✅ 使用 `~` 分隔符
|
||||
- ✅ 包含起始和结束日期
|
||||
|
||||
---
|
||||
|
||||
## 测试用例 17:日期范围查询 - 单天范围
|
||||
|
||||
**输入:** `"2025-11-19~2025-11-19"`
|
||||
|
||||
**预期输出:**
|
||||
- StartTime: `2025-11-19 00:00:00.000`
|
||||
- EndTime: `2025-11-19 23:59:59.999`
|
||||
|
||||
**验证点:**
|
||||
- ✅ 支持起始和结束日期相同
|
||||
- ✅ 等同于按天查询
|
||||
|
||||
---
|
||||
|
||||
## 测试用例 18:日期范围查询 - 跨月范围
|
||||
|
||||
**输入:** `"2025-11-25~2025-12-05"`
|
||||
|
||||
**预期输出:**
|
||||
- StartTime: `2025-11-25 00:00:00.000`
|
||||
- EndTime: `2025-12-05 23:59:59.999`
|
||||
|
||||
**验证点:**
|
||||
- ✅ 正确处理跨月日期范围
|
||||
- ✅ 共11天
|
||||
|
||||
---
|
||||
|
||||
## 测试用例 19:日期范围查询 - 跨年范围
|
||||
|
||||
**输入:** `"2025-12-28~2026-01-03"`
|
||||
|
||||
**预期输出:**
|
||||
- StartTime: `2025-12-28 00:00:00.000`
|
||||
- EndTime: `2026-01-03 23:59:59.999`
|
||||
|
||||
**验证点:**
|
||||
- ✅ 正确处理跨年日期范围
|
||||
- ✅ 共7天
|
||||
|
||||
---
|
||||
|
||||
## 测试用例 20:错误格式 - 周数超出范围
|
||||
|
||||
**输入:** `"2025-W54"`
|
||||
|
||||
**预期输出:**
|
||||
- 抛出异常:`周数无效: 54。有效范围为 1-53`
|
||||
|
||||
**验证点:**
|
||||
- ✅ 验证周数范围
|
||||
- ✅ 拒绝无效的周数
|
||||
|
||||
---
|
||||
|
||||
## 测试用例 21:错误格式 - 日期范围顺序错误
|
||||
|
||||
**输入:** `"2025-11-23~2025-11-17"`
|
||||
|
||||
**预期输出:**
|
||||
- 抛出异常:`结束日期 (2025-11-23) 不能早于开始日期 (2025-11-17)`
|
||||
|
||||
**验证点:**
|
||||
- ✅ 验证日期范围顺序
|
||||
- ✅ 提供清晰的错误提示
|
||||
|
||||
---
|
||||
|
||||
## 测试用例 22:错误格式 - 日期范围格式错误
|
||||
|
||||
**输入:** `"2025-11-17~2025/11/23"`
|
||||
|
||||
**预期输出:**
|
||||
- 抛出异常:`无法解析日期范围: 2025-11-17~2025/11/23。日期格式应为 yyyy-MM-dd~yyyy-MM-dd`
|
||||
|
||||
**验证点:**
|
||||
- ✅ 验证日期范围中的日期格式
|
||||
- ✅ 提供格式说明
|
||||
|
||||
---
|
||||
|
||||
## 测试用例 23:错误格式 - 斜杠分隔
|
||||
|
||||
**输入:** `"2025/11/19"`
|
||||
|
||||
**预期输出:**
|
||||
- 抛出异常,包含所有支持的格式说明
|
||||
|
||||
**验证点:**
|
||||
- ✅ 拒绝不支持的日期格式
|
||||
- ✅ 提供清晰的错误提示
|
||||
|
||||
---
|
||||
|
||||
## 测试用例 24:错误格式 - 无效日期
|
||||
|
||||
**输入:** `"2025-13-01"` (13月不存在)
|
||||
|
||||
**预期输出:**
|
||||
- 抛出异常:`无法解析日期范围参数...`
|
||||
|
||||
**验证点:**
|
||||
- ✅ 验证日期有效性
|
||||
- ✅ 拒绝无效的月份
|
||||
|
||||
---
|
||||
|
||||
## 测试用例 25:错误格式 - 空字符串
|
||||
|
||||
**输入:** `""`
|
||||
|
||||
**预期输出:**
|
||||
- 抛出异常:`日期范围参数不能为空`
|
||||
|
||||
**验证点:**
|
||||
- ✅ 验证参数非空
|
||||
|
||||
---
|
||||
|
||||
## 测试用例 26:边界情况 - 前导/尾随空格
|
||||
|
||||
**输入:** `" 2025-11-19 "`
|
||||
|
||||
**预期输出:**
|
||||
- StartTime: `2025-11-19 00:00:00.000`
|
||||
- EndTime: `2025-11-19 23:59:59.999`
|
||||
|
||||
**验证点:**
|
||||
- ✅ 自动去除前导和尾随空格
|
||||
- ✅ 正确解析日期
|
||||
|
||||
---
|
||||
|
||||
## ISO 8601 周标准说明
|
||||
|
||||
### 基本规则
|
||||
1. **周的定义**:每周从周一开始,到周日结束
|
||||
2. **第1周的定义**:包含该年第一个周四的那一周
|
||||
3. **周数范围**:每年有52或53周
|
||||
|
||||
### 跨年周示例
|
||||
- **2025年第1周**:2024-12-30(周一)至 2025-01-05(周日)
|
||||
- 因为2025年1月2日是周四,所以包含这个周四的周是2025年第1周
|
||||
- 这一周的周一在2024年12月
|
||||
|
||||
- **2024年第53周**:2024-12-30(周一)至 2025-01-05(周日)
|
||||
- 注意:2024年第53周和2025年第1周是同一周
|
||||
- 使用哪个周数取决于查询的年份
|
||||
|
||||
### C# ISOWeek 类
|
||||
.NET Core 3.0+ 提供了 `System.Globalization.ISOWeek` 类:
|
||||
- `ISOWeek.ToDateTime(year, week, dayOfWeek)` - 将周数转换为日期
|
||||
- `ISOWeek.GetWeekOfYear(date)` - 获取日期所在的周数
|
||||
- `ISOWeek.GetWeeksInYear(year)` - 获取某年的周数(52或53)
|
||||
|
||||
---
|
||||
|
||||
## 实现验证
|
||||
|
||||
### 闰年判断逻辑
|
||||
C# 的 `DateTime` 类会自动处理闰年:
|
||||
- `new DateTime(2024, 2, 29)` ✅ 有效(2024是闰年)
|
||||
- `new DateTime(2025, 2, 29)` ❌ 抛出异常(2025不是闰年)
|
||||
|
||||
### 月份天数计算
|
||||
使用 `AddMonths(1).AddMilliseconds(-1)` 方法:
|
||||
- 自动计算下个月第一天
|
||||
- 减去1毫秒得到当月最后一刻
|
||||
- 无需手动判断月份天数
|
||||
|
||||
### 周查询实现
|
||||
使用正则表达式和 ISOWeek 类:
|
||||
```csharp
|
||||
var weekPattern = @"^(\d{4})-?W(\d{1,2})$";
|
||||
var weekMatch = Regex.Match(dateRange, weekPattern, RegexOptions.IgnoreCase);
|
||||
if (weekMatch.Success)
|
||||
{
|
||||
int year = int.Parse(weekMatch.Groups[1].Value);
|
||||
int week = int.Parse(weekMatch.Groups[2].Value);
|
||||
var monday = ISOWeek.ToDateTime(year, week, DayOfWeek.Monday);
|
||||
var sunday = monday.AddDays(6);
|
||||
}
|
||||
```
|
||||
|
||||
### 日期范围查询实现
|
||||
使用字符串分割和日期解析:
|
||||
```csharp
|
||||
if (dateRange.Contains("~"))
|
||||
{
|
||||
var parts = dateRange.Split('~');
|
||||
DateTime.TryParseExact(parts[0].Trim(), "yyyy-MM-dd", ...);
|
||||
DateTime.TryParseExact(parts[1].Trim(), "yyyy-MM-dd", ...);
|
||||
}
|
||||
```
|
||||
|
||||
### 时间精度
|
||||
- 使用毫秒级精度(.999)
|
||||
- 确保包含当天/当周/当月/当年的所有数据
|
||||
- 避免边界数据遗漏
|
||||
|
||||
@ -0,0 +1,246 @@
|
||||
# 二次回路巡检统计 API - 日期范围查询示例
|
||||
|
||||
## 功能说明
|
||||
|
||||
`GetStatisticsAsync` 方法现在支持两种方式指定查询时间范围:
|
||||
|
||||
1. **新方式(推荐)**:使用 `DateRange` 字符串参数,支持按天/按月/按年查询
|
||||
2. **传统方式**:使用 `StartTime` 和 `EndTime` 参数
|
||||
|
||||
优先级:如果同时提供了 `DateRange` 和 `StartTime/EndTime`,将优先使用 `DateRange`。
|
||||
|
||||
---
|
||||
|
||||
## API 请求示例
|
||||
|
||||
### 1. 按天查询
|
||||
|
||||
查询 2025年11月19日 的所有巡检统计数据。
|
||||
|
||||
**请求体:**
|
||||
```json
|
||||
{
|
||||
"dateRange": "2025-11-19"
|
||||
}
|
||||
```
|
||||
|
||||
**实际查询范围:**
|
||||
- 开始时间:2025-11-19 00:00:00.000
|
||||
- 结束时间:2025-11-19 23:59:59.999
|
||||
|
||||
**说明:**
|
||||
- 格式:`yyyy-MM-dd`
|
||||
- 自动查询该日期的完整一天数据
|
||||
- 如果是历史日期,会使用缓存提升性能
|
||||
|
||||
---
|
||||
|
||||
### 2. 按月查询
|
||||
|
||||
查询 2025年11月 整月的巡检统计数据。
|
||||
|
||||
**请求体:**
|
||||
```json
|
||||
{
|
||||
"dateRange": "2025-11"
|
||||
}
|
||||
```
|
||||
|
||||
**实际查询范围:**
|
||||
- 开始时间:2025-11-01 00:00:00.000
|
||||
- 结束时间:2025-11-30 23:59:59.999
|
||||
|
||||
**说明:**
|
||||
- 格式:`yyyy-MM`
|
||||
- 自动计算该月的第一天和最后一天
|
||||
- 正确处理不同月份的天数(28/29/30/31天)
|
||||
- 历史月份的每一天都会使用缓存
|
||||
|
||||
---
|
||||
|
||||
### 3. 按年查询
|
||||
|
||||
查询 2025年 全年的巡检统计数据。
|
||||
|
||||
**请求体:**
|
||||
```json
|
||||
{
|
||||
"dateRange": "2025"
|
||||
}
|
||||
```
|
||||
|
||||
**实际查询范围:**
|
||||
- 开始时间:2025-01-01 00:00:00.000
|
||||
- 结束时间:2025-12-31 23:59:59.999
|
||||
|
||||
**说明:**
|
||||
- 格式:`yyyy`
|
||||
- 自动查询该年的完整数据
|
||||
- 正确处理闰年(如2024年2月有29天)
|
||||
- 历史年份的每一天都会使用缓存
|
||||
|
||||
---
|
||||
|
||||
### 4. 按周查询(ISO 8601 标准)
|
||||
|
||||
查询 2025年第47周 的巡检统计数据。
|
||||
|
||||
**请求体(方式一):**
|
||||
```json
|
||||
{
|
||||
"dateRange": "2025-W47"
|
||||
}
|
||||
```
|
||||
|
||||
**请求体(方式二):**
|
||||
```json
|
||||
{
|
||||
"dateRange": "2025W47"
|
||||
}
|
||||
```
|
||||
|
||||
**实际查询范围:**
|
||||
- 开始时间:2025-11-17 00:00:00.000(周一)
|
||||
- 结束时间:2025-11-23 23:59:59.999(周日)
|
||||
|
||||
**说明:**
|
||||
- 格式:`yyyy-Www` 或 `yyyyWww`(W 可大写或小写)
|
||||
- 遵循 ISO 8601 标准:周一为一周的第一天,周日为最后一天
|
||||
- 每年第1周的定义:包含该年第一个周四的那一周
|
||||
- 自动处理跨年周(如2025年第1周可能包含2024年12月的日期)
|
||||
- 周数范围:1-53
|
||||
|
||||
---
|
||||
|
||||
### 5. 日期范围查询
|
||||
|
||||
查询指定日期范围的巡检统计数据。
|
||||
|
||||
**请求体:**
|
||||
```json
|
||||
{
|
||||
"dateRange": "2025-11-17~2025-11-23"
|
||||
}
|
||||
```
|
||||
|
||||
**实际查询范围:**
|
||||
- 开始时间:2025-11-17 00:00:00.000
|
||||
- 结束时间:2025-11-23 23:59:59.999
|
||||
|
||||
**说明:**
|
||||
- 格式:`yyyy-MM-dd~yyyy-MM-dd`
|
||||
- 使用 `~` 符号分隔起始日期和结束日期
|
||||
- 支持任意天数的范围,不限于7天
|
||||
- 结束日期必须大于或等于开始日期
|
||||
- 适用于查询自定义时间段
|
||||
|
||||
---
|
||||
|
||||
### 6. 传统方式查询(向后兼容)
|
||||
|
||||
使用明确的开始时间和结束时间。
|
||||
|
||||
**请求体:**
|
||||
```json
|
||||
{
|
||||
"startTime": "2025-11-01T00:00:00",
|
||||
"endTime": "2025-11-19T23:59:59"
|
||||
}
|
||||
```
|
||||
|
||||
**说明:**
|
||||
- 当 `DateRange` 未提供时,使用此方式
|
||||
- 支持任意时间范围
|
||||
- 与旧版本 API 完全兼容
|
||||
|
||||
---
|
||||
|
||||
### 7. 结合其他过滤条件
|
||||
|
||||
可以将 `DateRange` 与其他过滤条件组合使用。
|
||||
|
||||
**请求体:**
|
||||
```json
|
||||
{
|
||||
"dateRange": "2025-11",
|
||||
"transformerSubstationId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
|
||||
"inspectionPlanId": "3fa85f64-5717-4562-b3fc-2c963f66afa7"
|
||||
}
|
||||
```
|
||||
|
||||
**说明:**
|
||||
- 查询2025年11月指定变电站和巡检计划的统计数据
|
||||
- 所有过滤条件可以自由组合
|
||||
|
||||
---
|
||||
|
||||
## 错误处理
|
||||
|
||||
### 无效的日期格式
|
||||
|
||||
**请求:**
|
||||
```json
|
||||
{
|
||||
"dateRange": "2025/11/19"
|
||||
}
|
||||
```
|
||||
|
||||
**响应:**
|
||||
```json
|
||||
{
|
||||
"success": false,
|
||||
"error": "无法解析日期范围参数: 2025/11/19。支持的格式:yyyy-MM-dd(按天)、yyyy-MM(按月)、yyyy(按年)"
|
||||
}
|
||||
```
|
||||
|
||||
### 未提供任何时间参数
|
||||
|
||||
**请求:**
|
||||
```json
|
||||
{
|
||||
"transformerSubstationId": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
|
||||
}
|
||||
```
|
||||
|
||||
**响应:**
|
||||
```json
|
||||
{
|
||||
"success": false,
|
||||
"error": "请提供 DateRange 参数或 StartTime/EndTime 参数"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 性能优化说明
|
||||
|
||||
### 缓存机制
|
||||
|
||||
1. **历史日期数据**:自动缓存到 MongoDB,后续查询直接从缓存读取
|
||||
2. **当天数据**:实时计算,不缓存(因为数据仍在更新)
|
||||
3. **跨月/跨年查询**:历史部分从缓存读取,当天部分实时计算
|
||||
|
||||
### 查询性能对比
|
||||
|
||||
| 查询类型 | 首次查询 | 后续查询 | 性能提升 |
|
||||
|---------|---------|---------|---------|
|
||||
| 按天(历史) | 正常速度 | 极快(缓存) | 10-100倍 |
|
||||
| 按月(历史) | 正常速度 | 极快(缓存) | 10-100倍 |
|
||||
| 按年(历史) | 较慢 | 快(缓存) | 10-100倍 |
|
||||
| 包含当天 | 正常速度 | 部分提升 | 2-10倍 |
|
||||
|
||||
---
|
||||
|
||||
## 日志示例
|
||||
|
||||
查询时会在服务器日志中记录详细信息:
|
||||
|
||||
```
|
||||
[INFO] 使用 DateRange 参数解析时间范围: DateRange=2025-11, StartTime=2025-11-01 00:00:00, EndTime=2025-11-30 23:59:59
|
||||
[INFO] 解析为按月查询: 2025-11 -> 2025-11-01 00:00:00.000 至 2025-11-30 23:59:59.999
|
||||
[INFO] 从缓存获取统计数据成功: Date=2025-11-01
|
||||
[INFO] 从缓存获取统计数据成功: Date=2025-11-02
|
||||
...
|
||||
[INFO] 当天统计数据实时计算: Date=2025-11-19
|
||||
```
|
||||
|
||||
@ -0,0 +1,21 @@
|
||||
using System;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using YunDa.SOMS.DataTransferObject;
|
||||
using YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection;
|
||||
using YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.Output;
|
||||
|
||||
namespace YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection
|
||||
{
|
||||
public interface ISecondaryCircuitInspectionResultStatisticsAppService
|
||||
{
|
||||
Task<RequestResult<DailyReportOutput>> GetDailyReportAsync(DateTime reportDate, CancellationToken cancellationToken = default);
|
||||
Task<RequestResult<ModuleTypeStatisticsOutput>> GetModuleTypeStatisticsAsync(CancellationToken cancellationToken = default);
|
||||
Task<RequestResult<MonthlyFaultPredictionOutput>> GetMonthlyFaultPredictionAsync(CancellationToken cancellationToken = default);
|
||||
Task<RequestResult<MonthlyReportOutput>> GetMonthlyReportAsync(int year, int month, CancellationToken cancellationToken = default);
|
||||
Task<SecondaryCircuitInspectionStatisticsOutput> GetStatisticsAsync(SecondaryCircuitInspectionStatisticsInput input, CancellationToken cancellationToken = default);
|
||||
Task<RequestResult<TimePeriodStatisticsOutput>> GetTimePeriodStatisticsAsync(TimePeriodStatisticsInput input, CancellationToken cancellationToken = default);
|
||||
Task<RequestResult<WeeklyReportOutput>> GetWeeklyReportAsync(DateTime startDate, DateTime endDate, CancellationToken cancellationToken = default);
|
||||
Task<RequestResult<YearlyStatisticsByMonthOutput>> GetYearlyStatisticsByMonthAsync(int year, CancellationToken cancellationToken = default);
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,205 @@
|
||||
# 按周查询详细指南
|
||||
|
||||
## ISO 8601 周标准
|
||||
|
||||
### 什么是 ISO 8601 周?
|
||||
|
||||
ISO 8601 是国际标准化组织制定的日期和时间表示标准。在这个标准中:
|
||||
|
||||
1. **周的定义**
|
||||
- 每周从**周一**开始,到**周日**结束
|
||||
- 这与某些国家(如美国)以周日为一周开始的习惯不同
|
||||
|
||||
2. **第1周的定义**
|
||||
- 每年的第1周是包含该年**第一个周四**的那一周
|
||||
- 这意味着第1周至少有4天在新的一年中
|
||||
|
||||
3. **周数范围**
|
||||
- 大多数年份有52周
|
||||
- 某些年份有53周(长年)
|
||||
|
||||
---
|
||||
|
||||
## 跨年周的处理
|
||||
|
||||
### 示例 1:2025年第1周
|
||||
|
||||
```
|
||||
2024年12月 2025年1月
|
||||
一 二 三 四 五 六 日 一 二 三 四 五 六 日
|
||||
30 31 1 2 3 4 5
|
||||
```
|
||||
|
||||
- **2025年第1周**:2024-12-30(周一)至 2025-01-05(周日)
|
||||
- **原因**:2025年1月2日(周四)是该年的第一个周四
|
||||
- **注意**:这一周的前两天(12月30-31日)在2024年
|
||||
|
||||
### 示例 2:2024年第1周
|
||||
|
||||
```
|
||||
2023年12月 2024年1月
|
||||
一 二 三 四 五 六 日 一 二 三 四 五 六 日
|
||||
1 2 3 4 5 6 7
|
||||
```
|
||||
|
||||
- **2024年第1周**:2024-01-01(周一)至 2024-01-07(周日)
|
||||
- **原因**:2024年1月1日是周一,1月4日(周四)是该年的第一个周四
|
||||
- **注意**:这一周完全在2024年内
|
||||
|
||||
### 示例 3:2026年第1周
|
||||
|
||||
```
|
||||
2025年12月 2026年1月
|
||||
一 二 三 四 五 六 日 一 二 三 四 五 六 日
|
||||
29 30 31 1 2 3 4
|
||||
```
|
||||
|
||||
- **2026年第1周**:2025-12-29(周一)至 2026-01-04(周日)
|
||||
- **原因**:2026年1月1日(周四)是该年的第一个周四
|
||||
- **注意**:这一周的前三天(12月29-31日)在2025年
|
||||
|
||||
---
|
||||
|
||||
## API 使用示例
|
||||
|
||||
### 查询2025年第47周
|
||||
|
||||
**请求:**
|
||||
```json
|
||||
{
|
||||
"dateRange": "2025-W47"
|
||||
}
|
||||
```
|
||||
|
||||
或
|
||||
|
||||
```json
|
||||
{
|
||||
"dateRange": "2025W47"
|
||||
}
|
||||
```
|
||||
|
||||
**实际查询范围:**
|
||||
- 开始:2025-11-17 00:00:00.000(周一)
|
||||
- 结束:2025-11-23 23:59:59.999(周日)
|
||||
|
||||
**日志输出:**
|
||||
```
|
||||
[INFO] 解析为按周查询 (ISO 8601): 2025-W47 -> 2025-11-17 00:00:00.000 至 2025-11-23 23:59:59.999 (周一至周日)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 查询2025年第1周(跨年)
|
||||
|
||||
**请求:**
|
||||
```json
|
||||
{
|
||||
"dateRange": "2025-W01"
|
||||
}
|
||||
```
|
||||
|
||||
**实际查询范围:**
|
||||
- 开始:2024-12-30 00:00:00.000(周一,在2024年)
|
||||
- 结束:2025-01-05 23:59:59.999(周日,在2025年)
|
||||
|
||||
**说明:**
|
||||
- 虽然周一在2024年,但这是2025年的第1周
|
||||
- 系统会自动处理跨年情况
|
||||
- 缓存机制会分别缓存2024-12-30、2024-12-31和2025-01-01至2025-01-05的数据
|
||||
|
||||
---
|
||||
|
||||
### 查询2024年第53周
|
||||
|
||||
**请求:**
|
||||
```json
|
||||
{
|
||||
"dateRange": "2024-W53"
|
||||
}
|
||||
```
|
||||
|
||||
**实际查询范围:**
|
||||
- 开始:2024-12-30 00:00:00.000(周一)
|
||||
- 结束:2025-01-05 23:59:59.999(周日)
|
||||
|
||||
**注意:**
|
||||
- 2024年有53周(长年)
|
||||
- 2024年第53周和2025年第1周是同一周
|
||||
- 使用哪个周数取决于你想查询哪一年的数据
|
||||
|
||||
---
|
||||
|
||||
## 如何判断某年有多少周?
|
||||
|
||||
使用 C# 代码:
|
||||
```csharp
|
||||
int weeksIn2024 = System.Globalization.ISOWeek.GetWeeksInYear(2024); // 返回 53
|
||||
int weeksIn2025 = System.Globalization.ISOWeek.GetWeeksInYear(2025); // 返回 52
|
||||
```
|
||||
|
||||
**长年(53周)的条件:**
|
||||
- 该年的1月1日是周四,或
|
||||
- 该年是闰年且1月1日是周三
|
||||
|
||||
---
|
||||
|
||||
## 错误处理
|
||||
|
||||
### 无效的周数
|
||||
|
||||
**请求:**
|
||||
```json
|
||||
{
|
||||
"dateRange": "2025-W54"
|
||||
}
|
||||
```
|
||||
|
||||
**响应:**
|
||||
```json
|
||||
{
|
||||
"success": false,
|
||||
"error": "周数无效: 54。有效范围为 1-53"
|
||||
}
|
||||
```
|
||||
|
||||
### 不存在的周
|
||||
|
||||
**请求:**
|
||||
```json
|
||||
{
|
||||
"dateRange": "2025-W53"
|
||||
}
|
||||
```
|
||||
|
||||
**响应:**
|
||||
```json
|
||||
{
|
||||
"success": false,
|
||||
"error": "无效的周数: 2025年第53周不存在。..."
|
||||
}
|
||||
```
|
||||
|
||||
**说明:**2025年只有52周,第53周不存在
|
||||
|
||||
---
|
||||
|
||||
## 与缓存机制的配合
|
||||
|
||||
按周查询完全兼容现有的按日缓存机制:
|
||||
|
||||
1. **查询过程**
|
||||
- 系统将周范围拆分为7天
|
||||
- 对每一天检查缓存
|
||||
- 历史日期从缓存读取,当天数据实时计算
|
||||
|
||||
2. **性能优化**
|
||||
- 首次查询某周:需要计算7天的数据
|
||||
- 后续查询同一周:历史部分直接从缓存读取
|
||||
- 如果查询的周包含今天:今天的数据实时计算,其他6天从缓存读取
|
||||
|
||||
3. **跨年周的缓存**
|
||||
- 跨年周的每一天都会单独缓存
|
||||
- 例如2025-W01包含2024年的2天和2025年的5天
|
||||
- 这7天的数据会分别缓存,互不影响
|
||||
|
||||
@ -892,61 +892,16 @@
|
||||
批量删除巡检结果
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultAppService.GetStatisticsAsync(YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionStatisticsInput,System.Threading.CancellationToken)">
|
||||
<summary>
|
||||
获取巡检统计信息
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultAppService.GetTimePeriodStatisticsAsync(YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.Output.TimePeriodStatisticsInput,System.Threading.CancellationToken)">
|
||||
<summary>
|
||||
获取时间段统计信息
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultAppService.GetModuleTypeStatisticsAsync(System.Threading.CancellationToken)">
|
||||
<summary>
|
||||
获取按模块类型分组的统计信息
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultAppService.FindRootParentType(YunDa.SOMS.Entities.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionModuleType,System.Collections.Generic.List{YunDa.SOMS.Entities.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionModuleType})">
|
||||
<summary>
|
||||
查找根父类型
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultAppService.GetMonthlyFaultPredictionAsync(System.Threading.CancellationToken)">
|
||||
<summary>
|
||||
获取月度故障统计及预测
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultAppService.PredictNextMonths(System.Collections.Generic.List{YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.Output.MonthlyFaultData},System.Int32)">
|
||||
<summary>
|
||||
使用简单线性趋势预测未来月份的故障概率
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultAppService.GetDailyReportAsync(System.DateTime,System.Threading.CancellationToken)">
|
||||
<summary>
|
||||
获取日报
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultAppService.GetWeeklyReportAsync(System.DateTime,System.DateTime,System.Threading.CancellationToken)">
|
||||
<summary>
|
||||
获取周报
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultAppService.GetMonthlyReportAsync(System.Int32,System.Int32,System.Threading.CancellationToken)">
|
||||
<summary>
|
||||
获取月报
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultAppService.UpdateReportWithAIAnalysisAsync(YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.Output.UpdateReportAIAnalysisInput,System.Threading.CancellationToken)">
|
||||
<summary>
|
||||
更新报告AI分析结果和巡检结果处理措施
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultAppService.GetSortDefinition(System.String)">
|
||||
<summary>
|
||||
获取排序定义
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultAppService.GetCollectionsForTimeRange(System.Nullable{System.DateTime},System.Nullable{System.DateTime})">
|
||||
<summary>
|
||||
根据时间范围获取需要查询的集合列表
|
||||
@ -967,81 +922,161 @@
|
||||
根据ID列表批量删除巡检结果(跨分片集合删除)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultAppService.GetCachedReportAsync(System.String,System.DateTime,System.DateTime,System.Threading.CancellationToken)">
|
||||
<member name="T:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultStatisticsAppService">
|
||||
<summary>
|
||||
二次回路巡检结果服务实现
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultStatisticsAppService.GetCollection``1(System.String)">
|
||||
<summary>
|
||||
获取MongoDB集合
|
||||
</summary>
|
||||
<typeparam name="T">实体类型</typeparam>
|
||||
<param name="collectionName">集合名称</param>
|
||||
<returns>MongoDB集合</returns>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultStatisticsAppService.GetStatisticsAsync(YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionStatisticsInput,System.Threading.CancellationToken)">
|
||||
<summary>
|
||||
获取巡检统计信息(支持按日缓存和灵活的日期范围格式)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultStatisticsAppService.ParseDateRange(System.String)">
|
||||
<summary>
|
||||
解析日期范围字符串,支持多种格式
|
||||
</summary>
|
||||
<param name="dateRange">日期范围字符串</param>
|
||||
<returns>开始时间和结束时间的元组</returns>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultStatisticsAppService.GetDailyStatisticsFromCacheAsync(System.DateTime,System.Threading.CancellationToken)">
|
||||
<summary>
|
||||
从缓存获取某一天的统计数据
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultStatisticsAppService.SaveDailyStatisticsToCacheAsync(System.DateTime,YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionStatisticsOutput,System.Threading.CancellationToken)">
|
||||
<summary>
|
||||
保存某一天的统计数据到缓存
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultStatisticsAppService.CalculateDailyStatisticsAsync(System.DateTime,System.DateTime,System.Threading.CancellationToken)">
|
||||
<summary>
|
||||
计算某一天的统计数据(包含基础数据填充)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultStatisticsAppService.MergeDailyStatistics(System.Collections.Generic.List{YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionStatisticsOutput})">
|
||||
<summary>
|
||||
合并多天的统计数据
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultStatisticsAppService.GetTimePeriodStatisticsAsync(YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.Output.TimePeriodStatisticsInput,System.Threading.CancellationToken)">
|
||||
<summary>
|
||||
获取时间段统计信息
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultStatisticsAppService.GetYearlyStatisticsByMonthAsync(System.Int32,System.Threading.CancellationToken)">
|
||||
<summary>
|
||||
获取年度统计信息(按月分组)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultStatisticsAppService.GetModuleTypeStatisticsAsync(System.Threading.CancellationToken)">
|
||||
<summary>
|
||||
获取按模块类型分组的统计信息
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultStatisticsAppService.FindRootParentType(YunDa.SOMS.Entities.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionModuleType,System.Collections.Generic.List{YunDa.SOMS.Entities.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionModuleType})">
|
||||
<summary>
|
||||
查找根父类型
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultStatisticsAppService.GetMonthlyFaultPredictionAsync(System.Threading.CancellationToken)">
|
||||
<summary>
|
||||
获取月度故障统计及预测
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultStatisticsAppService.PredictNextMonths(System.Collections.Generic.List{YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.Output.MonthlyFaultData},System.Int32)">
|
||||
<summary>
|
||||
使用简单线性趋势预测未来月份的故障概率
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultStatisticsAppService.GetDailyReportAsync(System.DateTime,System.Threading.CancellationToken)">
|
||||
<summary>
|
||||
获取日报
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultStatisticsAppService.GetWeeklyReportAsync(System.DateTime,System.DateTime,System.Threading.CancellationToken)">
|
||||
<summary>
|
||||
获取周报
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultStatisticsAppService.GetMonthlyReportAsync(System.Int32,System.Int32,System.Threading.CancellationToken)">
|
||||
<summary>
|
||||
获取月报
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultStatisticsAppService.GetCollectionsForTimeRange(System.Nullable{System.DateTime},System.Nullable{System.DateTime})">
|
||||
<summary>
|
||||
根据时间范围获取需要查询的集合列表
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultStatisticsAppService.GetCachedReportAsync(System.String,System.DateTime,System.DateTime,System.Threading.CancellationToken)">
|
||||
<summary>
|
||||
获取缓存的报告
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultAppService.SaveReportAsync(System.String,System.DateTime,System.DateTime,MongoDB.Bson.BsonDocument,System.Threading.CancellationToken)">
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultStatisticsAppService.SaveReportAsync(System.String,System.DateTime,System.DateTime,MongoDB.Bson.BsonDocument,System.Threading.CancellationToken)">
|
||||
<summary>
|
||||
保存报告到缓存
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultAppService.GenerateDailyReportAsync(System.DateTime,System.DateTime,System.Threading.CancellationToken)">
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultStatisticsAppService.GenerateDailyReportAsync(System.DateTime,System.DateTime,System.Threading.CancellationToken)">
|
||||
<summary>
|
||||
生成日报
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultAppService.GenerateWeeklyReportAsync(System.DateTime,System.DateTime,System.Threading.CancellationToken)">
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultStatisticsAppService.GenerateWeeklyReportAsync(System.DateTime,System.DateTime,System.Threading.CancellationToken)">
|
||||
<summary>
|
||||
生成周报
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultAppService.GenerateMonthlyReportAsync(System.Int32,System.Int32,System.Threading.CancellationToken)">
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultStatisticsAppService.GenerateMonthlyReportAsync(System.Int32,System.Int32,System.Threading.CancellationToken)">
|
||||
<summary>
|
||||
生成月报
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultAppService.GetModuleTypeStatisticsForResultsAsync(System.Collections.Generic.List{Yunda.SOMS.MongoDB.Entities.Inspection.SecondaryCircuitInspectionResult},System.Threading.CancellationToken)">
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultStatisticsAppService.GetModuleTypeStatisticsForResultsAsync(System.Collections.Generic.List{Yunda.SOMS.MongoDB.Entities.Inspection.SecondaryCircuitInspectionResult},System.Threading.CancellationToken)">
|
||||
<summary>
|
||||
获取模块类型统计(用于日报)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultAppService.GetModuleTypeDistributionAsync(System.Collections.Generic.List{Yunda.SOMS.MongoDB.Entities.Inspection.SecondaryCircuitInspectionResult},System.Threading.CancellationToken)">
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultStatisticsAppService.GetModuleTypeDistributionAsync(System.Collections.Generic.List{Yunda.SOMS.MongoDB.Entities.Inspection.SecondaryCircuitInspectionResult},System.Threading.CancellationToken)">
|
||||
<summary>
|
||||
获取模块类型分布(用于周报和月报)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultAppService.CalculateKeyIndicatorComparisonAsync(System.Int32,System.Int32,System.Collections.Generic.List{Yunda.SOMS.MongoDB.Entities.Inspection.SecondaryCircuitInspectionResult},System.Threading.CancellationToken)">
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultStatisticsAppService.CalculateKeyIndicatorComparisonAsync(System.Int32,System.Int32,System.Collections.Generic.List{Yunda.SOMS.MongoDB.Entities.Inspection.SecondaryCircuitInspectionResult},System.Threading.CancellationToken)">
|
||||
<summary>
|
||||
计算关键指标对比
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultAppService.CreateIndicatorComparison(System.String,System.Double,System.Double)">
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultStatisticsAppService.CreateIndicatorComparison(System.String,System.Double,System.Double)">
|
||||
<summary>
|
||||
创建指标对比对象
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultAppService.CalculateMTBF(System.Collections.Generic.List{Yunda.SOMS.MongoDB.Entities.Inspection.SecondaryCircuitInspectionResult})">
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultStatisticsAppService.CalculateMTBF(System.Collections.Generic.List{Yunda.SOMS.MongoDB.Entities.Inspection.SecondaryCircuitInspectionResult})">
|
||||
<summary>
|
||||
计算平均故障间隔(MTBF)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultAppService.CalculateTimelinessRateAsync(System.Collections.Generic.List{Yunda.SOMS.MongoDB.Entities.Inspection.SecondaryCircuitInspectionResult},System.Int32,System.Threading.CancellationToken)">
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultStatisticsAppService.CalculateTimelinessRateAsync(System.Collections.Generic.List{Yunda.SOMS.MongoDB.Entities.Inspection.SecondaryCircuitInspectionResult},System.Int32,System.Threading.CancellationToken)">
|
||||
<summary>
|
||||
计算异常处理及时率
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultAppService.CalculateDisposalCompletionRateAsync(System.Collections.Generic.List{Yunda.SOMS.MongoDB.Entities.Inspection.SecondaryCircuitInspectionResult},System.Threading.CancellationToken)">
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultStatisticsAppService.CalculateDisposalCompletionRateAsync(System.Collections.Generic.List{Yunda.SOMS.MongoDB.Entities.Inspection.SecondaryCircuitInspectionResult},System.Threading.CancellationToken)">
|
||||
<summary>
|
||||
计算处置完成率
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultAppService.GetAbnormalAnalysisAsync(YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionAbnormalAnalysisInput,System.Threading.CancellationToken)">
|
||||
<summary>
|
||||
获取异常分析数据
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultAppService.GetDeviceReportAsync(YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionDeviceReportInput,System.Threading.CancellationToken)">
|
||||
<summary>
|
||||
获取设备巡检报告
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionResultAppService.GetItemExecutionHistoryAsync(System.Guid,YunDa.SOMS.DataTransferObject.DataMonitoring.SecondaryCircuitInspection.SecondaryCircuitInspectionExecutionHistoryInput,System.Threading.CancellationToken)">
|
||||
<summary>
|
||||
获取巡检子项执行历史
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:YunDa.SOMS.MongoDB.Application.Inspection.IInspectionItemResultAppService">
|
||||
<summary>
|
||||
巡检项结果管理服务
|
||||
@ -1201,12 +1236,6 @@
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.Inspection.InspectionItemResultAppService.TestGetAlarmMessage(System.String,System.String,System.String)">
|
||||
<summary>
|
||||
测试报警api
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:YunDa.SOMS.MongoDB.Application.Inspection.InspectionItemResultAppService.GetAlarmMessage(System.Nullable{System.Guid},System.Int32,System.String)">
|
||||
<summary>
|
||||
获取报警信息
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
"ISMS_ReportServerTempDBSqlServerSetting": "Server=127.0.0.1;User ID=sa;Password=sa;Database=ReportServerTempDB;Trusted_Connection=False;TrustServerCertificate=True",
|
||||
|
||||
"MongoDBSetting": {
|
||||
"Host": "127.0.0.1",
|
||||
"Host": "192.168.81.22",
|
||||
"Port": "37017",
|
||||
"DatabaseName": "soms_mongodb",
|
||||
"IsAuth": "false",
|
||||
@ -30,7 +30,7 @@
|
||||
"PassWord": "123456"
|
||||
},
|
||||
"RedisSetting": {
|
||||
"Host": "127.0.0.1",
|
||||
"Host": "192.168.81.22",
|
||||
"Port": "36379",
|
||||
"Auth": "yunda123",
|
||||
"Name": "",
|
||||
@ -47,7 +47,7 @@
|
||||
"DataMonitoringServiceBaseUrl": "http://127.0.0.1:8093/SOMS/api/dataMonitoringService/",
|
||||
"MaxDataCount": 80000,
|
||||
"Swagger": true,
|
||||
"IsmsGateWayIp": "http://192.168.81.231:38094",
|
||||
"IsmsGateWayIp": "http://192.168.81.22:38094",
|
||||
"IsmsftpIp": "192.168.65.33:48021",
|
||||
"IsmsftpUserName": "admin",
|
||||
"IsmsftpPassword": "yunda123",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user