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;
namespace IStation.Application
{
///
/// MonitorRecord
///
[Route("Run/MonitorRecord")]
[ApiDescriptionSettings("Run", Name = "监测记录", Order = 1000)]
public class MonitorRecord_Controller:IDynamicApiController
{
//服务
private readonly Service.MonitorRecord _service = new Service.MonitorRecord();
#region 获取最近记录
#region 通过 MonitorPointID 获取最近记录
///
/// 通过 MonitorPointID 获取最近一条数据(未进行单位转换,使用的是系统单位)
///
[Route("GetLastRecordByMonitorPointID@V1.0")]
[HttpGet]
public List GetLastRecordByMonitorPointID_V1_0([FromQuery][Required] MonitorPointIDUnderCorpInput input)
{
var list = _service.GetLastRecord(input.CorpID, input.MonitorPointID);
var vmList = list?.Select(x => new MonitorRecordDto(x)).ToList();
return vmList;
}
///
/// 通过 MonitorPointID 获取最近一条数据(不需要验证Token)(未进行单位转换,使用的是系统单位)
///
[AllowAnonymous]
[Route("GetLastRecordByMonitorPointID@V1.1")]
[HttpGet]
public List GetLastRecordByMonitorPointID_V1_1([FromQuery][Required] MonitorPointIDUnderCorpInput input)
{
var list = _service.GetLastRecord(input.CorpID, input.MonitorPointID);
var vmList = list?.Select(x => new MonitorRecordDto(x)).ToList();
return vmList;
}
///
/// 通过 MonitorPointID 获取最近一条数据(已进行单位转换,使用的是信号显示单位)
///
[Route("GetLastRecordByMonitorPointID@V2.0")]
[HttpGet]
public List GetLastRecordByMonitorPointID_V2_0([FromQuery][Required] MonitorPointIDUnderCorpInput input)
{
var list = _service.GetLastRecord(input.CorpID, input.MonitorPointID);
if (list == null || list.Count < 1)
return default;
var monitor = new Service.MonitorPoint().GetExSignalWithSignalTypeByID(input.CorpID, input.MonitorPointID);
var vmList = list.Select(x =>
{
var signal = monitor.SignalList.Find(t => t.ID == x.SignalID);
var vm = new MonitorRecordDto(x, signal);
return vm;
}).ToList();
return vmList;
}
///
/// 通过 MonitorPointID 获取最近一条数据(不需要验证Token)(已进行单位转换,使用的是信号显示单位)
///
[AllowAnonymous]
[Route("GetLastRecordByMonitorPointID@V2.1")]
[HttpGet]
public List GetLastRecordByMonitorPointID_V2_1([FromQuery][Required] MonitorPointIDUnderCorpInput input)
{
var list = _service.GetLastRecord(input.CorpID, input.MonitorPointID);
if (list == null || list.Count < 1)
return default;
var monitor = new Service.MonitorPoint().GetExSignalWithSignalTypeByID(input.CorpID, input.MonitorPointID);
var vmList = list.Select(x =>
{
var signal = monitor.SignalList.Find(t => t.ID == x.SignalID);
var vm = new MonitorRecordDto(x, signal);
return vm;
}).ToList();
return vmList;
}
#endregion
#region 通过 MonitorPointIds 获取最近记录
///
/// 通过 MonitorPointIds 获取最近一条数据(未进行单位转换,使用的是系统单位)
///
[Route("GetLastRecordByMonitorPointIds@V1.0")]
[HttpGet]
public List GetLastRecordByMonitorPointIds_V1_0([FromQuery][Required] MonitorPointIdsUnderCorpInput input)
{
var ids = LongListHelper.ToList(input.MonitorPointIds);
var list = _service.GetLastRecord(input.CorpID, ids);
var vmList = list?.Select(x => new MonitorRecordDto(x)).ToList();
return vmList;
}
///
/// 通过 MonitorPointIds 获取最近一条数据(不需要验证Token)(未进行单位转换,使用的是系统单位)
///
[AllowAnonymous]
[Route("GetLastRecordByMonitorPointIds@V1.1")]
[HttpGet]
public List GetLastRecordByMonitorPointIds_V1_1([FromQuery][Required] MonitorPointIdsUnderCorpInput input)
{
var ids = LongListHelper.ToList(input.MonitorPointIds);
var list = _service.GetLastRecord(input.CorpID, ids);
var vmList = list?.Select(x => new MonitorRecordDto(x)).ToList();
return vmList;
}
///
/// 通过 MonitorPointIds 获取最近一条数据(已进行单位转换,使用的是信号显示单位)
///
[Route("GetLastRecordByMonitorPointIds@V2.0")]
[HttpGet]
public List GetLastRecordByMonitorPointIds_V2_0([FromQuery][Required] MonitorPointIdsUnderCorpInput input)
{
var ids = LongListHelper.ToList(input.MonitorPointIds);
var list = _service.GetLastRecord(input.CorpID, ids);
if (list == null || list.Count < 1)
return default;
var monitorList = new Service.MonitorPoint().GetExSignalWithSignalTypeByIds(input.CorpID, ids);
var vmList = list.Select(x =>
{
var monitor = monitorList.Find(t => t.ID == x.MonitorPointID);
var signal = monitor.SignalList.Find(t => t.ID == x.SignalID);
var vm = new MonitorRecordDto(x, signal);
return vm;
}).ToList();
return vmList;
}
///
/// 通过 MonitorPointIds 获取最近一条数据(不需要验证Token)(已进行单位转换,使用的是信号显示单位)
///
[AllowAnonymous]
[Route("GetLastRecordByMonitorPointIds@V2.1")]
[HttpGet]
public List GetLastRecordByMonitorPointIds_V2_1([FromQuery][Required] MonitorPointIdsUnderCorpInput input)
{
var ids = LongListHelper.ToList(input.MonitorPointIds);
var list = _service.GetLastRecord(input.CorpID, ids);
if (list == null || list.Count < 1)
return default;
var monitorList = new Service.MonitorPoint().GetExSignalWithSignalTypeByIds(input.CorpID, ids);
var vmList = list.Select(x =>
{
var monitor = monitorList.Find(t => t.ID == x.MonitorPointID);
var signal = monitor.SignalList.Find(t => t.ID == x.SignalID);
var vm = new MonitorRecordDto(x, signal);
return vm;
}).ToList();
return vmList;
}
#endregion
#region 通过 SignalID 获取最近数据
///
/// 通过 SignalID 获取最近一条数据(未进行单位转换,使用的是系统单位)
///
[Route("GetLastRecordBySignalID@V1.0")]
[HttpGet]
public MonitorRecordDto GetLastRecordBySignalID_V1_0([FromQuery][Required] SignalIDUnderCorpInput input)
{
var model = _service.GetLastRecord(input.CorpID, input.MonitorPointID, input.SignalID);
if (model == null)
return default;
var vm = new MonitorRecordDto(model);
return vm;
}
///
/// 通过 SignalID 获取最近一条数据(不需要验证Token)(未进行单位转换,使用的是系统单位)
///
[AllowAnonymous]
[Route("GetLastRecordBySignalID@V1.1")]
[HttpGet]
public MonitorRecordDto GetLastRecordBySignalID_V1_1([FromQuery][Required] SignalIDUnderCorpInput input)
{
var model = _service.GetLastRecord(input.CorpID, input.MonitorPointID, input.SignalID);
if (model == null)
return default;
var vm = new MonitorRecordDto(model);
return vm;
}
///
/// 通过 SignalID 获取最近一条数据(已进行单位转换,使用的是信号显示单位)
///
[Route("GetLastRecordBySignalID@V2.0")]
[HttpGet]
public MonitorRecordDto GetLastRecordBySignalID_V2_0([FromQuery][Required] SignalIDUnderCorpInput input)
{
var model = _service.GetLastRecord(input.CorpID, input.MonitorPointID, input.SignalID);
if (model == null)
return default;
var signal = new Service.Signal().GetExSignalTypeByID(input.CorpID,input.SignalID);
var vm = new MonitorRecordDto(model, signal);
return vm;
}
///
/// 通过 SignalID 获取最近一条数据(不需要验证Token)(已进行单位转换,使用的是信号显示单位)
///
[AllowAnonymous]
[Route("GetLastRecordBySignalID@V2.1")]
[HttpGet]
public MonitorRecordDto GetLastRecordBySignalID_V2_1([FromQuery][Required] SignalIDUnderCorpInput input)
{
var model = _service.GetLastRecord(input.CorpID, input.MonitorPointID, input.SignalID);
if (model == null)
return default;
var signal = new Service.Signal().GetExSignalTypeByID(input.CorpID, input.SignalID);
var vm = new MonitorRecordDto(model, signal);
return vm;
}
#endregion
#region 通过 SignalIds 获取最近数据
///
/// 通过 SignalIds 获取最近一条数据(未进行单位转换,使用的是系统单位)
///
[Route("GetLastRecordBySignalIds@V1.0")]
[HttpGet]
public List GetLastRecordBySignalIds_V1_0([FromQuery][Required] SignalIdsUnderCorpInput input)
{
var ids = LongListHelper.ToList(input.SignalIds);
var list = _service.GetLastRecord(input.CorpID, input.MonitorPointID, ids);
var vmList = list?.Select(x => new MonitorRecordDto(x)).ToList();
return vmList;
}
///
/// 通过 SignalIds 获取最近一条数据(不需要验证Token)(未进行单位转换,使用的是系统单位)
///
[AllowAnonymous]
[Route("GetLastRecordBySignalIds@V1.1")]
[HttpGet]
public List GetLastRecordBySignalIds_V1_1([FromQuery][Required] SignalIdsUnderCorpInput input)
{
var ids = LongListHelper.ToList(input.SignalIds);
var list = _service.GetLastRecord(input.CorpID, input.MonitorPointID, ids);
var vmList = list?.Select(x => new MonitorRecordDto(x)).ToList();
return vmList;
}
///
/// 通过 SignalIds 获取最近一条数据(已进行单位转换,使用的是信号显示单位)
///
[Route("GetLastRecordBySignalIds@V2.0")]
[HttpGet]
public List GetLastRecordBySignalIds_V2_0([FromQuery][Required] SignalIdsUnderCorpInput input)
{
var ids = LongListHelper.ToList(input.SignalIds);
var list = _service.GetLastRecord(input.CorpID, input.MonitorPointID, ids);
if (list == null || list.Count < 1)
return default;
var signalList = new Service.Signal().GetExSignalTypeBySignalIds(input.CorpID, ids);
var vmList = list.Select(x => new MonitorRecordDto(x, signalList?.Find(t => t.ID == x.SignalID))).ToList();
return vmList;
}
///
/// 通过 SignalIds 获取最近一条数据(不需要验证Token)(已进行单位转换,使用的是信号显示单位)
///
[AllowAnonymous]
[Route("GetLastRecordBySignalIds@V2.1")]
[HttpGet]
public List GetLastRecordBySignalIds_V2_1([FromQuery][Required] SignalIdsUnderCorpInput input)
{
var ids = LongListHelper.ToList(input.SignalIds);
var list = _service.GetLastRecord(input.CorpID, input.MonitorPointID, ids);
if (list == null || list.Count < 1)
return default;
var signalList = new Service.Signal().GetExSignalTypeBySignalIds(input.CorpID, ids);
var vmList = list.Select(x => new MonitorRecordDto(x, signalList?.Find(t => t.ID == x.SignalID))).ToList();
return vmList;
}
#endregion
#endregion
#region 插入最近记录
///
/// 插入最近一条记录
///
[Route("InsertLastRecord@V1.0")]
[HttpPost]
public bool InsertLastRecord([Required] AddMonitorRecordInput input)
{
var monitor = new Service.MonitorPoint().GetExSignalWithSignalTypeByID(input.CorpID, input.MonitorPointID);
var data_time = DateTime.Now;
var last_record_list = new Service.MonitorRecord().GetLastRecord(input.CorpID, input.MonitorPointID);
var bol = false;
switch (monitor.MonitorType)
{
case Model.eMonitorType.General:
{
var signal = monitor.SignalList?.FirstOrDefault();
if (signal != null)
{
var data_status = new List();
var data_value = MonitorHandleHelper.Handle(monitor, signal, last_record_list?.FirstOrDefault(), input.SrcTime, input.SrcValue, data_status);
if (!string.IsNullOrEmpty(data_value))
{
var record = MonitorHandleHelper.BuildMonitorRecord(monitor, signal, input.SrcTime, input.SrcValue, data_time, data_value, data_status);
if (record != null)
{
bol = _service.InsertLastRecord(record);
}
}
}
}
break;
case Model.eMonitorType.Vibration:
{
var sub_record_list = AddMonitorSubRecordInput.ToList(input.SrcValue);
if (sub_record_list != null && sub_record_list.Count > 0)
{
var record_list = new List();
foreach (var sub_record in sub_record_list)
{
var signal = monitor.SignalList?.FirstOrDefault(x => x.ID == sub_record.SignalID);
if (signal == null)
continue;
var last_record = last_record_list?.FirstOrDefault(x => x.SignalID == sub_record.SignalID);
var data_status = new List();
var data_value = MonitorHandleHelper.Handle(monitor, signal, last_record, input.SrcTime, sub_record.SrcValue, data_status);
if (string.IsNullOrEmpty(data_value))
continue;
var record = MonitorHandleHelper.BuildMonitorRecord(monitor, signal, input.SrcTime, sub_record.SrcValue, data_time, data_value, data_status);
if (record == null)
continue;
record_list.Add(record);
}
if (record_list.Count > 0)
{
bol = _service.InsertsLastRecord(monitor.CronType, record_list);
}
}
}
break;
default: break;
}
return bol;
}
///
/// 插入最近多条记录(暂时只支持同一计划类型)
///
[Route("InsertsLastRecord@V1.0")]
[HttpPost]
public bool InsertsLastRecord([Required] List list)
{
var corpIds = list.Select(x => x.CorpID).Distinct().ToList();
if (corpIds.Count > 1)
{
return false;
}
var monitor_id_list = list.Select(x => x.MonitorPointID).Distinct().ToList();
var monitor_list = new Service.MonitorPoint().GetExSignalWithSignalTypeByIds(corpIds[0], monitor_id_list);
if (monitor_list == null || monitor_list.Count < 1)
{
return false;
}
var cron_type_list = monitor_list.Select(x => x.CronType).Distinct().ToList();
if (cron_type_list.Count > 1)
{
return false;
}
var last_record_total_list = _service.GetLastRecord(corpIds[0], monitor_id_list);
var data_time = DateTime.Now;
var record_list = new List();
foreach (var item in list)
{
var monitor = monitor_list.Find(x => x.ID == item.MonitorPointID);
if (monitor == null)
continue;
var last_record_list = last_record_total_list?.Where(x => x.MonitorPointID == item.MonitorPointID).ToList();
switch (monitor.MonitorType)
{
case Model.eMonitorType.General:
{
var signal = monitor.SignalList?.FirstOrDefault();
if (signal != null)
{
var data_status = new List();
var data_value = MonitorHandleHelper.Handle(monitor, signal, last_record_list?.FirstOrDefault(), item.SrcTime, item.SrcValue, data_status);
if (!string.IsNullOrEmpty(data_value))
{
var record = MonitorHandleHelper.BuildMonitorRecord(monitor, signal, item.SrcTime, item.SrcValue, data_time, data_value, data_status);
if (record != null)
{
record_list.Add(record);
}
}
}
}
break;
case Model.eMonitorType.Vibration:
{
var sub_record_list = AddMonitorSubRecordInput.ToList(item.SrcValue);
if (sub_record_list != null && sub_record_list.Count > 0)
{
foreach (var sub_record in sub_record_list)
{
var signal = monitor.SignalList?.FirstOrDefault(x => x.ID == sub_record.SignalID);
if (signal == null)
continue;
var last_record = last_record_list?.FirstOrDefault(x => x.SignalID == sub_record.SignalID);
var data_status = new List();
var data_value = MonitorHandleHelper.Handle(monitor, signal, last_record, item.SrcTime, sub_record.SrcValue, data_status);
if (string.IsNullOrEmpty(data_value))
continue;
var record = MonitorHandleHelper.BuildMonitorRecord(monitor, signal, item.SrcTime, sub_record.SrcValue, data_time, data_value, data_status);
if (record == null)
continue;
record_list.Add(record);
}
}
}
break;
default: break;
}
}
if (record_list.Count < 1)
{
return false;
}
var bol = _service.InsertsLastRecord(cron_type_list[0], record_list);
return bol;
}
#endregion
}
}