using Microsoft.AspNetCore.Mvc;
|
using System.Net;
|
using System.Net.Http.Headers;
|
using Microsoft.Extensions.Hosting.Internal;
|
using Microsoft.AspNetCore.Http.Extensions;
|
using IStation.Untity;
|
using Furion.DynamicApiController;
|
using System.ComponentModel.DataAnnotations;
|
using Mapster;
|
using IStation.Calculation;
|
using IStation.Model;
|
using Microsoft.AspNetCore.Authorization;
|
using Furion.FriendlyException;
|
|
namespace IStation.Application
|
{
|
/// <summary>
|
/// MonitorGeneralHourRecord
|
/// </summary>
|
[Route("Run/MonitorGeneralHourRecord/Mgr")]
|
[ApiDescriptionSettings("Run", Name = "监测常规时记录(管理)", Order = 930)]
|
public class MonitorGeneralHourRecord_MgrController : IDynamicApiController
|
{
|
|
/// <summary>
|
/// 重新分析某个日期区间(仅针对一个常规时分析测点的分析,会删除已有记录)
|
/// </summary>
|
[Route("AnalyAgainOfDayRange@V1.0")]
|
[HttpPost]
|
public AnalyAgainMonitorGeneralHourRecordOfDayRangeResultDto AnalyAgainOfDayRange([Required] AnalyAgainMonitorGeneralHourRecordOfDayRangeInput input)
|
{
|
var corpId = input.CorpID;
|
var monitorId = input.MonitorPointID;
|
var startDay = input.StartDay.Date;
|
var endDay = input.EndDay.Date;
|
var monitor = new Service.MonitorPoint().GetExSignalWithSignalTypeByID(corpId, monitorId);
|
if (monitor == null)
|
{
|
throw Oops.Oh(ErrorCodes.D001, $"测点:{monitorId}");
|
}
|
if (monitor.CronType != Model.Monitor.eCronType.EachHour)
|
{
|
throw Oops.Oh(ErrorCodes.D002, $"测点:{monitorId}", "不是时测点");
|
}
|
if (monitor.SourceType != Model.Monitor.eSourceType.Analyse)
|
{
|
throw Oops.Oh(ErrorCodes.D002, $"测点:{monitorId}", "不是分析测点");
|
}
|
if (string.IsNullOrEmpty(monitor.SourceParas))
|
{
|
throw Oops.Oh(ErrorCodes.D002, $"测点:{monitorId}", "未配置分析参数");
|
}
|
var analyModel = Model.Monitor.AnalyseParameters.ToModel(monitor.SourceParas);
|
if (analyModel == null)
|
{
|
throw Oops.Oh(ErrorCodes.D002, $"测点:{monitorId}", "分析参数配置错误");
|
}
|
if (string.IsNullOrEmpty(analyModel.FormulaType))
|
{
|
throw Oops.Oh(ErrorCodes.D002, $"测点:{monitorId}", "未配置公式类型");
|
}
|
if (string.IsNullOrEmpty(analyModel.FormulaParas))
|
{
|
throw Oops.Oh(ErrorCodes.D002, $"测点:{monitorId}", "未配置公式参数");
|
}
|
|
var getMonitorPoint = new Func<long, Model.MonitorPoint_Signal_SignalType>(x => {
|
return new Service.MonitorPoint().GetExSignalWithSignalTypeByID(corpId, x);
|
});
|
var getLastRecord = new Func<long, long, Model.MonitorBasicRecord>((x, y) => {
|
return new Service.MonitorHourRecord().GetBySignalIDOfHour(corpId, x, y, startDay.AddDays(-1),24);
|
});
|
var getRecordList = new Func<long, long,DateTime,DateTime, List<Model.MonitorBasicRecord>>((x, y,st,et) => {
|
return new Service.MonitorRealRecord().GetBySignalIDOfTimeRange(corpId, x, y,st,et )?.Select(t => t as Model.MonitorBasicRecord).ToList();
|
});
|
|
List<Model.MonitorHourRecordPure> recordList = null;
|
string msg = string.Empty;
|
switch (analyModel.FormulaType)
|
{
|
case Model.Monitor.FormulaType.Statistics_Max://最大值统计
|
{
|
recordList = MonitorFormulaHistoryCalcuHelper.StatisticalHourMaxValue
|
(startDay, endDay, monitor, analyModel.FormulaParas, getMonitorPoint, getRecordList, getLastRecord, out msg);
|
}
|
break;
|
case Model.Monitor.FormulaType.Statistics_Min://最小值统计
|
{
|
recordList = MonitorFormulaHistoryCalcuHelper.StatisticalHourMinValue
|
(startDay, endDay, monitor, analyModel.FormulaParas, getMonitorPoint, getRecordList, getLastRecord, out msg);
|
}
|
break;
|
case Model.Monitor.FormulaType.Statistics_Avg://平均值统计
|
{
|
recordList = MonitorFormulaHistoryCalcuHelper.StatisticalHourAvgValue
|
(startDay, endDay, monitor, analyModel.FormulaParas, getMonitorPoint, getRecordList, getLastRecord, out msg);
|
}
|
break;
|
case Model.Monitor.FormulaType.Statistics_Diff://差值统计
|
{
|
recordList = MonitorFormulaHistoryCalcuHelper.StatisticalHourDiffValue
|
(startDay, endDay, monitor, analyModel.FormulaParas, getMonitorPoint, getRecordList, getLastRecord, out msg);
|
}
|
break;
|
case Model.Monitor.FormulaType.Statistics_Sum://和值统计
|
{
|
recordList = MonitorFormulaHistoryCalcuHelper.StatisticalHourSumValue
|
(startDay, endDay, monitor, analyModel.FormulaParas, getMonitorPoint, getRecordList, getLastRecord, out msg);
|
}
|
break;
|
default: msg = $"不支持的公式类型:{analyModel.FormulaType}"; break;
|
}
|
|
if (recordList == null || recordList.Count < 1)
|
{
|
return new AnalyAgainMonitorGeneralHourRecordOfDayRangeResultDto(false, msg);
|
}
|
var bol = new Service.MonitorHourRecord().InsertsAgain(recordList);
|
return new AnalyAgainMonitorGeneralHourRecordOfDayRangeResultDto(bol, msg);
|
}
|
|
}
|
}
|