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>
|
/// MonitorGeneralDayRecord
|
/// </summary>
|
[Route("Run/MonitorGeneralDayRecord/Mgr")]
|
[ApiDescriptionSettings("Run", Name = "监测常规日记录(管理)", Order = 930)]
|
public class MonitorGeneralDayRecord_MgrController : IDynamicApiController
|
{
|
|
/// <summary>
|
/// 重新分析某个日期区间(仅针对一个常规日分析测点的分析,会删除已有记录)
|
/// </summary>
|
[Route("AnalyAgainOfDayRange@V1.0")]
|
[HttpPost]
|
public AnalyAgainMonitorGeneralDayRecordOfDayRangeResultDto AnalyAgainOfDayRange([Required] AnalyAgainMonitorGeneralDayRecordOfDayRangeInput 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.EachDay)
|
{
|
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.MonitorDayRecord().GetBySignalIDOfDay(corpId, x, y, startDay.AddDays(-1));
|
});
|
var getRecordList = new Func<long, long, Model.Monitor.eCronType, DateTime, DateTime, List<Model.MonitorBasicRecord>>((x, y, cy, st, et) =>
|
{
|
switch (cy)
|
{
|
case Model.Monitor.eCronType.Real:
|
{
|
return new Service.MonitorRealRecord()
|
.GetBySignalIDOfTimeRange(corpId, x, y, st, et)?.Select(x => x as Model.MonitorBasicRecord).ToList();
|
}
|
case Model.Monitor.eCronType.EachHour:
|
{
|
return new Service.MonitorHourRecord().GetBySignalIDOfHourRange
|
(monitor.CorpID, x, y, st.Date, st.Hour + 1, et.AddHours(-1).Date, et.AddHours(-1).Hour + 1)?.Select(x => x as Model.MonitorBasicRecord).ToList();
|
}
|
default: return default;
|
}
|
});
|
|
List<Model.MonitorDayRecordPure> recordList = null;
|
string msg = string.Empty;
|
switch (analyModel.FormulaType)
|
{
|
case Model.Monitor.FormulaType.Statistics_Max://最大值统计
|
{
|
recordList = MonitorFormulaHistoryCalcuHelper.StatisticalDayMaxValue
|
(startDay, endDay, monitor, analyModel.FormulaParas, getMonitorPoint, getRecordList, getLastRecord, out msg);
|
}
|
break;
|
case Model.Monitor.FormulaType.Statistics_Min://最小值统计
|
{
|
recordList = MonitorFormulaHistoryCalcuHelper.StatisticalDayMinValue
|
(startDay, endDay, monitor, analyModel.FormulaParas, getMonitorPoint, getRecordList, getLastRecord, out msg);
|
}
|
break;
|
case Model.Monitor.FormulaType.Statistics_Avg://平均值统计
|
{
|
recordList = MonitorFormulaHistoryCalcuHelper.StatisticalDayAvgValue
|
(startDay, endDay, monitor, analyModel.FormulaParas, getMonitorPoint, getRecordList, getLastRecord, out msg);
|
}
|
break;
|
case Model.Monitor.FormulaType.Statistics_Diff://差值统计
|
{
|
recordList = MonitorFormulaHistoryCalcuHelper.StatisticalDayDiffValue
|
(startDay, endDay, monitor, analyModel.FormulaParas, getMonitorPoint, getRecordList, getLastRecord, out msg);
|
}
|
break;
|
case Model.Monitor.FormulaType.Statistics_Sum://和值统计
|
{
|
recordList = MonitorFormulaHistoryCalcuHelper.StatisticalDaySumValue
|
(startDay, endDay, monitor, analyModel.FormulaParas, getMonitorPoint, getRecordList, getLastRecord, out msg);
|
}
|
break;
|
default: msg = $"不支持的公式类型:{analyModel.FormulaType}"; break;
|
}
|
|
if (recordList == null || recordList.Count < 1)
|
{
|
return new AnalyAgainMonitorGeneralDayRecordOfDayRangeResultDto(false, msg);
|
}
|
var bol = new Service.MonitorDayRecord().InsertsAgain(recordList);
|
return new AnalyAgainMonitorGeneralDayRecordOfDayRangeResultDto(bol, msg);
|
}
|
|
}
|
}
|