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>
|
/// MonitorGeneralMonthRecord
|
/// </summary>
|
[Route("Run/MonitorGeneralMonthRecord/Mgr")]
|
[ApiDescriptionSettings("Run", Name = "监测常规月记录(管理)", Order = 930)]
|
public class MonitorGeneralMonthRecord_MgrController : IDynamicApiController
|
{
|
|
/// <summary>
|
/// 重新分析某个月份区间(仅针对一个常规月分析测点的分析,会删除已有记录)
|
/// </summary>
|
[Route("AnalyAgainOfMonthRange@V1.0")]
|
[HttpPost]
|
public AnalyAgainMonitorGeneralMonthRecordOfMonthRangeResultDto AnalyAgainOfMonthRange
|
([Required] AnalyAgainMonitorGeneralMonthRecordOfMonthRangeInput input)
|
{
|
var corpId = input.CorpID;
|
var monitorId = input.MonitorPointID;
|
var startYear=input.StartYear;
|
var endYear=input.EndYear;
|
var startMonth=input.StartMonth;
|
var endMonth=input.EndMonth;
|
var monitor = new Service.MonitorPoint().GetExSignalWithSignalTypeByID(corpId, monitorId);
|
if (monitor == null)
|
{
|
throw Oops.Oh(ErrorCodes.D001, $"测点:{monitorId}");
|
}
|
if (monitor.CronType != Model.Monitor.eCronType.EachMonth)
|
{
|
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) => {
|
var dtLast = new DateTime(startYear, startMonth, 1);
|
dtLast = dtLast.AddMonths(-1);
|
return new Service.MonitorMonthRecord().GetBySignalIDOfMonth(corpId, x, y, dtLast.Year,dtLast.Month);
|
});
|
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()
|
.GetFixedBySignalIDOfTimeRange(corpId,x,y,10000,st,et)?.Select(x=>x as Model.MonitorBasicRecord).ToList();
|
}
|
case Model.Monitor.eCronType.EachDay:
|
{
|
return new Service.MonitorDayRecord().GetBySignalIDOfDayRange
|
(monitor.CorpID, x, y,st.Date,et.Date.AddDays(-1))?.Select(x=>x as Model.MonitorBasicRecord).ToList();
|
}
|
default:return default;
|
}
|
});
|
|
List<Model.MonitorMonthRecordPure> recordList = null;
|
string msg = string.Empty;
|
switch (analyModel.FormulaType)
|
{
|
case Model.Monitor.FormulaType.Statistics_Max://最大值统计
|
{
|
recordList = MonitorFormulaHistoryCalcuHelper.StatisticalMonthMaxValue
|
(startYear,startMonth,endYear,endMonth, monitor, analyModel.FormulaParas, getMonitorPoint, getRecordList, getLastRecord, out msg);
|
}
|
break;
|
case Model.Monitor.FormulaType.Statistics_Min://最小值统计
|
{
|
recordList = MonitorFormulaHistoryCalcuHelper.StatisticalMonthMinValue
|
(startYear, startMonth, endYear, endMonth, monitor, analyModel.FormulaParas, getMonitorPoint, getRecordList, getLastRecord, out msg);
|
}
|
break;
|
case Model.Monitor.FormulaType.Statistics_Avg://平均值统计
|
{
|
recordList = MonitorFormulaHistoryCalcuHelper.StatisticalMonthAvgValue
|
(startYear, startMonth, endYear, endMonth, monitor, analyModel.FormulaParas, getMonitorPoint, getRecordList, getLastRecord, out msg);
|
}
|
break;
|
case Model.Monitor.FormulaType.Statistics_Diff://差值统计
|
{
|
recordList = MonitorFormulaHistoryCalcuHelper.StatisticalMonthDiffValue
|
(startYear, startMonth, endYear, endMonth, monitor, analyModel.FormulaParas, getMonitorPoint, getRecordList, getLastRecord, out msg);
|
}
|
break;
|
case Model.Monitor.FormulaType.Statistics_Sum://和值统计
|
{
|
recordList = MonitorFormulaHistoryCalcuHelper.StatisticalMonthSumValue
|
(startYear, startMonth, endYear, endMonth, monitor, analyModel.FormulaParas, getMonitorPoint, getRecordList, getLastRecord, out msg);
|
}
|
break;
|
default: msg = $"不支持的公式类型:{analyModel.FormulaType}"; break;
|
}
|
|
if (recordList == null || recordList.Count < 1)
|
{
|
return new AnalyAgainMonitorGeneralMonthRecordOfMonthRangeResultDto(false, msg);
|
}
|
var bol = new Service.MonitorMonthRecord().InsertsAgain(recordList);
|
return new AnalyAgainMonitorGeneralMonthRecordOfMonthRangeResultDto(bol, msg);
|
}
|
|
|
|
}
|
}
|