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 { /// /// MonitorHourRecord /// [Route("Run/MonitorHourRecord/Mgr")] [ApiDescriptionSettings("Run", Name = "监测时记录(管理)", Order = 980)] public class MonitorHourRecord_MgrController : IDynamicApiController { //服务 private readonly Service.MonitorHourRecord _service = new Service.MonitorHourRecord(); #region 通过 MonitorPointID 查询 /// /// 通过 MonitorPointID 获取(未进行单位转换,使用的是系统单位) /// [Route("GetByMonitorPointID@V1.0")] [HttpGet] public List GetByMonitorPointID_V1_0([FromQuery][Required] MonitorPointIDUnderCorpInput input) { var list = _service.GetByMonitorPointID(input.CorpID, input.MonitorPointID); var vmList = list?.Select(x => new MonitorHourRecordMgrDto(x)).ToList(); return vmList; } /// /// 通过 MonitorPointID 获取某天的数据(未进行显示单位转换,使用的是系统默认单位) /// [Route("GetByMonitorPointIDOfDay@V1.0")] [HttpGet] public List GetByMonitorPointIDOfDay_V1_0 ( [Required, Range(1, long.MaxValue, ErrorMessage = "CorpID 必须大于0")] long CorpID, [Required, Range(1, long.MaxValue, ErrorMessage = "MonitorPointID 必须大于0")] long MonitorPointID, [Required] DateTime Day ) { var list = _service.GetByMonitorPointIDOfDay(CorpID, MonitorPointID, Day); var vmList = list?.Select(x => new MonitorHourRecordMgrDto(x)).ToList(); return vmList; } /// /// 通过 MonitorPointID 获取日期区间内的数据(未进行显示单位转换,使用的是系统默认单位) /// [Route("GetByMonitorPointIDOfDayRange@V1.0")] [HttpGet] public List GetByMonitorPointIDOfDayRange_V1_0 ( [Required, Range(1, long.MaxValue, ErrorMessage = "CorpID 必须大于0")] long CorpID, [Required, Range(1, long.MaxValue, ErrorMessage = "MonitorPointID 必须大于0")] long MonitorPointID, [Required] DateTime StartDay, [Required] DateTime EndDay ) { if (StartDay.Date > EndDay.Date) { return default; } var list = _service.GetByMonitorPointIDOfDayRange(CorpID, MonitorPointID, StartDay, EndDay); var vmList = list?.Select(x => new MonitorHourRecordMgrDto(x)).ToList(); return vmList; } /// /// 通过 MonitorPointID 获取时区间内的数据(未进行显示单位转换,使用的是系统默认单位) /// [Route("GetByMonitorPointIDOfHourRange@V1.0")] [HttpGet] public List GetByMonitorPointIDOfHourRange_V1_0 ( [Required, Range(1, long.MaxValue, ErrorMessage = "CorpID 必须大于0")] long CorpID, [Required, Range(1, long.MaxValue, ErrorMessage = "MonitorPointID 必须大于0")] long MonitorPointID, [Required] DateTime StartDay, [Required, Range(1, 24, ErrorMessage = "StartHour 必须介于1-24之间")] int StartHour, [Required] DateTime EndDay, [Required, Range(1, 24, ErrorMessage = "EndHour 必须介于1-24之间")] int EndHour ) { var list = _service.GetByMonitorPointIDOfHourRange(CorpID, MonitorPointID, StartDay, StartHour, EndDay, EndHour); var vmList = list?.Select(x => new MonitorHourRecordMgrDto(x)).ToList(); return vmList; } #endregion #region 更新 /// /// 更新 /// [Route("Update@V1.0")] [HttpPut] public bool Update([Required] UpdateMonitorHourRecordInput input) { var model = new Model.MonitorHourRecord() { ID = input.ID, CorpID = input.CorpID, MonitorPointID = input.MonitorPointID, SignalID = input.SignalID, RecordType = input.RecordType, DataDay = input.DataDay, DataHour = input.DataHour, SrcTime = input.SrcTime, SrcValue = input.SrcValue, DataTime = input.DataTime, DataValue = input.DataValue, DataStatus = input.DataStatus }; var bol = _service.Update(model); return bol; } /// /// 批量更新 /// [Route("Updates@V1.0")] [HttpPut] public bool Updates([Required] List list) { if (list == null || list.Count < 1) return default; var modelList = list.Select(x => new Model.MonitorHourRecord() { ID = x.ID, CorpID = x.CorpID, MonitorPointID = x.MonitorPointID, SignalID = x.SignalID, RecordType = x.RecordType, DataDay= x.DataDay, DataHour= x.DataHour, SrcTime = x.SrcTime, SrcValue = x.SrcValue, DataTime = x.DataTime, DataValue = x.DataValue, DataStatus = x.DataStatus }).ToList(); var bol = _service.Updates(modelList); return bol; } #endregion #region 补录 /// /// 补录一条 /// [Route("InsertSupplement@V1.0")] [HttpPost] public bool InsertSupplement([Required] SupplementMonitorHourRecordInput input) { var monitor = new Service.MonitorPoint().GetExSignalWithSignalTypeByID(input.CorpID, input.MonitorPointID); if (monitor.CronType != Model.Monitor.eCronType.EachHour) { return false; } var bol = false; var dataTime = DateTime.Now; 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, lastRecord: null, input.SrcTime, input.SrcValue, data_status); if (!string.IsNullOrEmpty(data_value)) { var record = new Model.MonitorHourRecordPure(); record.CorpID = input.CorpID; record.MonitorPointID = input.MonitorPointID; record.SignalID = signal.ID; record.RecordType = monitor.MonitorType; record.SrcTime = input.SrcTime; record.SrcValue = input.SrcValue; record.DataTime = dataTime; record.DataValue = data_value; record.DataStatus = data_status; record.DataDay = input.DataDay.Date; record.DataHour = input.DataHour; bol = _service.InsertSupplement(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 data_status = new List(); var data_value = MonitorHandleHelper.Handle(monitor, signal, lastRecord: null, input.SrcTime, sub_record.SrcValue, data_status); if (string.IsNullOrEmpty(data_value)) continue; var record = new Model.MonitorHourRecordPure(); record.CorpID = input.CorpID; record.MonitorPointID = input.MonitorPointID; record.SignalID = signal.ID; record.RecordType = monitor.MonitorType; record.SrcTime = input.SrcTime; record.SrcValue = sub_record.SrcValue; record.DataTime = dataTime; record.DataValue = data_value; record.DataStatus = data_status; record.DataDay = input.DataDay.Date; record.DataHour = input.DataHour; record_list.Add(record); } if (record_list.Count > 0) { bol = _service.InsertsSupplement(record_list); } } } break; default: break; } return bol; } /// /// 补录多条 /// [Route("InsertsSupplement@V1.0")] [HttpPost] public bool InsertsSupplement([Required] List list) { var corpIds = list.Select(x => x.CorpID).Distinct().ToList(); if (corpIds.Count > 1) { return false; } var dataTime = DateTime.Now; var record_list = new List(); foreach (var item in list) { var monitor = new Service.MonitorPoint().GetExSignalWithSignalTypeByID(item.CorpID, item.MonitorPointID); if (monitor.CronType != Model.Monitor.eCronType.EachHour) { continue; } 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, lastRecord: null, item.SrcTime, item.SrcValue, data_status); if (!string.IsNullOrEmpty(data_value)) { var record = new Model.MonitorHourRecordPure(); record.CorpID = item.CorpID; record.MonitorPointID = item.MonitorPointID; record.SignalID = signal.ID; record.RecordType = monitor.MonitorType; record.SrcTime = item.SrcTime; record.SrcValue = item.SrcValue; record.DataTime = dataTime; record.DataValue = data_value; record.DataStatus = data_status; record.DataDay = item.DataDay.Date; record.DataHour = item.DataHour; 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 data_status = new List(); var data_value = MonitorHandleHelper.Handle(monitor, signal, lastRecord: null, item.SrcTime, sub_record.SrcValue, data_status); if (string.IsNullOrEmpty(data_value)) continue; var record = new Model.MonitorHourRecordPure(); record.CorpID = item.CorpID; record.MonitorPointID = item.MonitorPointID; record.SignalID = signal.ID; record.RecordType = monitor.MonitorType; record.SrcTime = item.SrcTime; record.SrcValue = sub_record.SrcValue; record.DataTime = dataTime; record.DataValue = data_value; record.DataStatus = data_status; record.DataDay = item.DataDay.Date; record.DataHour = item.DataHour; record_list.Add(record); } } } break; default: break; } } if (record_list.Count < 1) { return false; } var bol = _service.InsertsSupplement(record_list); return bol; } #endregion #region 重录 /// /// 重录一条(重录会删除已存在的记录) /// [Route("InsertAgain@V1.0")] [HttpPost] public bool InsertAgain([Required] AgainMonitorHourRecordInput input) { var monitor = new Service.MonitorPoint().GetExSignalWithSignalTypeByID(input.CorpID, input.MonitorPointID); if (monitor.CronType != Model.Monitor.eCronType.EachHour) { return false; } var bol = false; var dataTime = DateTime.Now; 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, lastRecord: null, input.SrcTime, input.SrcValue, data_status); if (!string.IsNullOrEmpty(data_value)) { var record = new Model.MonitorHourRecordPure(); record.CorpID = input.CorpID; record.MonitorPointID = input.MonitorPointID; record.SignalID = signal.ID; record.RecordType = monitor.MonitorType; record.SrcTime = input.SrcTime; record.SrcValue = input.SrcValue; record.DataTime = dataTime; record.DataValue = data_value; record.DataStatus = data_status; record.DataDay = input.DataDay.Date; record.DataHour = input.DataHour; bol = _service.InsertAgain(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 data_status = new List(); var data_value = MonitorHandleHelper.Handle(monitor, signal, lastRecord: null, input.SrcTime, sub_record.SrcValue, data_status); if (string.IsNullOrEmpty(data_value)) continue; var record = new Model.MonitorHourRecordPure(); record.CorpID = input.CorpID; record.MonitorPointID = input.MonitorPointID; record.SignalID = signal.ID; record.RecordType = monitor.MonitorType; record.SrcTime = input.SrcTime; record.SrcValue = sub_record.SrcValue; record.DataTime = dataTime; record.DataValue = data_value; record.DataStatus = data_status; record.DataDay = input.DataDay.Date; record.DataHour = input.DataHour; record_list.Add(record); } if (record_list.Count > 0) { bol = _service.InsertsAgain(record_list); } } } break; default: break; } return bol; } /// /// 重录多条(重录会删除已存在的记录) /// [Route("InsertsAgain@V1.0")] [HttpPost] public bool InsertsAgain([Required] List list) { var corpIds = list.Select(x => x.CorpID).Distinct().ToList(); if (corpIds.Count > 1) { return false; } var dataTime = DateTime.Now; var record_list = new List(); foreach (var item in list) { var monitor = new Service.MonitorPoint().GetExSignalWithSignalTypeByID(item.CorpID, item.MonitorPointID); if (monitor.CronType != Model.Monitor.eCronType.EachHour) { continue; } 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, lastRecord: null, item.SrcTime, item.SrcValue, data_status); if (!string.IsNullOrEmpty(data_value)) { var record = new Model.MonitorHourRecordPure(); record.CorpID = item.CorpID; record.MonitorPointID = item.MonitorPointID; record.SignalID = signal.ID; record.RecordType = monitor.MonitorType; record.SrcTime = item.SrcTime; record.SrcValue = item.SrcValue; record.DataTime = dataTime; record.DataValue = data_value; record.DataStatus = data_status; record.DataDay = item.DataDay.Date; record.DataHour = item.DataHour; 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 data_status = new List(); var data_value = MonitorHandleHelper.Handle(monitor, signal, lastRecord: null, item.SrcTime, sub_record.SrcValue, data_status); if (string.IsNullOrEmpty(data_value)) continue; var record = new Model.MonitorHourRecordPure(); record.CorpID = item.CorpID; record.MonitorPointID = item.MonitorPointID; record.SignalID = signal.ID; record.RecordType = monitor.MonitorType; record.SrcTime = item.SrcTime; record.SrcValue = sub_record.SrcValue; record.DataTime = dataTime; record.DataValue = data_value; record.DataStatus = data_status; record.DataDay = item.DataDay.Date; record.DataHour = item.DataHour; record_list.Add(record); } } } break; default: break; } } if (record_list.Count < 1) { return false; } var bol = _service.InsertsAgain(record_list); return bol; } #endregion } }