136 lines
4.9 KiB
C#
136 lines
4.9 KiB
C#
|
|
using System;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using System.Threading;
|
|||
|
|
using System.Threading.Tasks;
|
|||
|
|
|
|||
|
|
namespace YunDa.SOMS.Application.DataMonitoring.SecondaryCircuitInspection.Services
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// 时间窗口计算服务接口
|
|||
|
|
/// </summary>
|
|||
|
|
public interface ITimeWindowCalculatorService
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// 计算时间窗口内的数据并返回JSON格式结果
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="inspectionItemId">巡检项ID</param>
|
|||
|
|
/// <param name="timeWindowSeconds">时间窗口(秒)</param>
|
|||
|
|
/// <param name="cancellationToken">取消令牌</param>
|
|||
|
|
/// <returns>JSON格式的计算结果,如 {"16835_0": 52.5, "16835_1": 75.3}</returns>
|
|||
|
|
Task<string> CalculateTimeWindowDataAsync(
|
|||
|
|
Guid inspectionItemId,
|
|||
|
|
int timeWindowSeconds = 60,
|
|||
|
|
CancellationToken cancellationToken = default);
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 计算时间窗口内的数据并返回结构化结果
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="inspectionItemId">巡检项ID</param>
|
|||
|
|
/// <param name="timeWindowSeconds">时间窗口(秒)</param>
|
|||
|
|
/// <param name="cancellationToken">取消令牌</param>
|
|||
|
|
/// <returns>结构化的计算结果</returns>
|
|||
|
|
Task<CalculationResult> CalculateTimeWindowDataStructuredAsync(
|
|||
|
|
Guid inspectionItemId,
|
|||
|
|
int timeWindowSeconds = 60,
|
|||
|
|
CancellationToken cancellationToken = default);
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 根据变量代码列表计算时间窗口数据
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="variableCodes">变量代码列表,格式如 ["16835_0", "16835_1"]</param>
|
|||
|
|
/// <param name="timeWindowSeconds">时间窗口(秒)</param>
|
|||
|
|
/// <param name="cancellationToken">取消令牌</param>
|
|||
|
|
/// <returns>JSON格式的计算结果</returns>
|
|||
|
|
Task<string> CalculateVariableDataAsync(
|
|||
|
|
List<string> variableCodes,
|
|||
|
|
int timeWindowSeconds = 60,
|
|||
|
|
CancellationToken cancellationToken = default);
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 计算时间窗口内的历史数据(支持时间序列)
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="inspectionItemId">巡检项ID</param>
|
|||
|
|
/// <param name="timeWindowSeconds">时间窗口(秒)</param>
|
|||
|
|
/// <param name="sampleIntervalSeconds">采样间隔(秒)</param>
|
|||
|
|
/// <param name="cancellationToken">取消令牌</param>
|
|||
|
|
/// <returns>时间序列数据</returns>
|
|||
|
|
Task<List<Dictionary<string, object>>> CalculateTimeSeriesDataAsync(
|
|||
|
|
Guid inspectionItemId,
|
|||
|
|
int timeWindowSeconds = 60,
|
|||
|
|
int sampleIntervalSeconds = 5,
|
|||
|
|
CancellationToken cancellationToken = default);
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 使用JavaScript表达式计算时间窗口数据
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="inspectionItemId">巡检项ID</param>
|
|||
|
|
/// <param name="javascriptExpression">JavaScript表达式</param>
|
|||
|
|
/// <param name="timeWindowSeconds">时间窗口(秒)</param>
|
|||
|
|
/// <param name="cancellationToken">取消令牌</param>
|
|||
|
|
/// <returns>计算结果</returns>
|
|||
|
|
Task<CalculationResult> CalculateWithJavaScriptExpressionAsync(
|
|||
|
|
Guid inspectionItemId,
|
|||
|
|
string javascriptExpression,
|
|||
|
|
int timeWindowSeconds = 60,
|
|||
|
|
CancellationToken cancellationToken = default);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 计算结果类
|
|||
|
|
/// </summary>
|
|||
|
|
public class CalculationResult
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// 计算是否成功
|
|||
|
|
/// </summary>
|
|||
|
|
public bool IsSuccess { get; set; }
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 错误信息
|
|||
|
|
/// </summary>
|
|||
|
|
public string ErrorMessage { get; set; }
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 计算结果数据(变量代码 -> 值)
|
|||
|
|
/// </summary>
|
|||
|
|
public Dictionary<string, decimal> Data { get; set; }
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// JSON格式的结果
|
|||
|
|
/// </summary>
|
|||
|
|
public string JsonResult { get; set; }
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 计算详情
|
|||
|
|
/// </summary>
|
|||
|
|
public List<string> CalculationDetails { get; set; }
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 计算耗时(毫秒)
|
|||
|
|
/// </summary>
|
|||
|
|
public long ExecutionTimeMs { get; set; }
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 计算时间
|
|||
|
|
/// </summary>
|
|||
|
|
public DateTime CalculationTime { get; set; }
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 时间窗口开始时间
|
|||
|
|
/// </summary>
|
|||
|
|
public DateTime WindowStartTime { get; set; }
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 时间窗口结束时间
|
|||
|
|
/// </summary>
|
|||
|
|
public DateTime WindowEndTime { get; set; }
|
|||
|
|
|
|||
|
|
public CalculationResult()
|
|||
|
|
{
|
|||
|
|
Data = new Dictionary<string, decimal>();
|
|||
|
|
CalculationDetails = new List<string>();
|
|||
|
|
CalculationTime = DateTime.Now;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|