136 lines
4.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}
}