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 Microsoft.AspNetCore.Http; using Furion.DependencyInjection; using Microsoft.AspNetCore.Authorization; using Furion.DataEncryption; using AutoMapper; using System.Text; using IStation.Calculation; namespace IStation.Application { /// /// 标准数据对接 /// [AllowAnonymous] [Route("Run/DataDocking/Standard")] [ApiDescriptionSettings("Run", Name = "标准数据对接", Order = 1100)] public class DataDocking_StandardController : IDynamicApiController { //配置列表 private static List _standardConfigureList = null; /// /// 插入 /// [Route("Insert@V1.0")] [HttpPost] public bool Insert([Required] DataDockingStandardInput input) { LogHelper.Info($"数据标准对接接口中,注册码:{input.RegisterCode},插入数据记录数量:{input.Records.Count}."); var corpIds = DataDockingCorpHelper.GetCorpIds(); if (corpIds == null || corpIds.Count < 1) { throw new Exception("未检索到客户标识配置信息!"); } if (_standardConfigureList == null) { var configureList = new Service.DataDockingConfigure().GetByCorpIds(corpIds); if (configureList == null || configureList.Count < 1) { throw new Exception("未检索到数据对接配置信息!"); } configureList = configureList.Where(x => x.DockingMode == Model.DataDockingConfigure.eDockingMode.Standard).ToList(); if (configureList == null || configureList.Count < 1) { throw new Exception("未检索到数据对接标准配置信息!"); } _standardConfigureList = configureList.Select(x => new Model.DataDockingConfigureExStandard(x)).ToList(); } var standardConfigure = _standardConfigureList.Find(x => x.ConfigureParas != null && x.ConfigureParas.RegisterCode == input.RegisterCode); if (standardConfigure == null) { throw new Exception("未检索到数据对接标准配置信息!"); } if (standardConfigure.Mappers == null || standardConfigure.Mappers.Count < 1) { throw new Exception("数据对接标准配置信息中,未配置有效映射关系!"); } var records = new List(); var inputRecords = input.Records.OrderByDescending(x=>x.RecordTime).ToList(); foreach (var mapper in standardConfigure.Mappers) { var inputRecord = inputRecords.Find(x => x.RecordId == mapper.SignId); if (inputRecord != null) { var record = new Model.MonitorDataDockingReceiveRecord { SysId = mapper.SysId, RecordType = inputRecord.RecordType, SrcTime = inputRecord.RecordTime, SrcValue = inputRecord.RecordValue, DataStatus = new List() }; records.Add(record); } } if (records.Count < 1) { throw new Exception("未接收到有效数据记录!"); } var queueHelper = new RabbitMqQueueHelper(); var bol = queueHelper.Push(Settings.Queue.DataDockingQueueName, new Model.MonitorDataDockingCorpRecord() { CorpID = standardConfigure.CorpID, ConfigureID = standardConfigure.ID, Records = records }); if (bol) { LogHelper.Info($"数据标准对接接口中,客户:{standardConfigure.CorpID},标准数据对接配置:{standardConfigure.ID},推入通道记录数量:{records.Count}."); return true; } return false; } /// /// 补录 /// [Route("Supplement@V1.0")] [HttpPost] public bool Supplement([Required] DataDockingStandardInput input) { LogHelper.Info($"数据标准对接接口中,注册码:{input.RegisterCode},补录数据记录数量:{input.Records.Count}."); var corpIds = DataDockingCorpHelper.GetCorpIds(); if (corpIds == null || corpIds.Count < 1) { throw new Exception("未检索到客户标识配置信息!"); } if (_standardConfigureList == null) { var configureList = new Service.DataDockingConfigure().GetByCorpIds(corpIds); if (configureList == null || configureList.Count < 1) { throw new Exception("未检索到数据对接配置信息!"); } configureList = configureList.Where(x => x.DockingMode == Model.DataDockingConfigure.eDockingMode.Standard).ToList(); if (configureList == null || configureList.Count < 1) { throw new Exception("未检索到数据对接标准配置信息!"); } _standardConfigureList = configureList.Select(x => new Model.DataDockingConfigureExStandard(x)).ToList(); } var standardConfigure = _standardConfigureList.Find(x => x.ConfigureParas != null && x.ConfigureParas.RegisterCode == input.RegisterCode); if (standardConfigure == null) { throw new Exception("未检索到数据对接标准配置信息!"); } if (standardConfigure.Mappers == null || standardConfigure.Mappers.Count < 1) { throw new Exception("数据对接标准配置信息中,未配置有效映射关系!"); } //生成记录 var recordList = new List(); foreach (var mapper in standardConfigure.Mappers) { var inputRecordList = input.Records.Where(t => t.RecordId == mapper.SignId).ToList(); if (inputRecordList != null && inputRecordList.Count > 0) { var inputGroupList = inputRecordList.GroupBy(x => new { x.RecordId, x.RecordTime }).ToList(); foreach (var inputGroup in inputGroupList) { var inputFirstRecord = inputGroup.First(); var monitor = new Service.MonitorPoint().GetExSignalWithSignalTypeByID(standardConfigure.CorpID, mapper.SysId); if (monitor == null) { continue; } switch (inputFirstRecord.RecordType) { case Model.eMonitorType.General: { var receiveRecord = new Model.MonitorDataDockingReceiveRecord(); receiveRecord.SysId = mapper.SysId; receiveRecord.RecordType = inputFirstRecord.RecordType; receiveRecord.SrcTime = inputFirstRecord.RecordTime; receiveRecord.SrcValue = inputFirstRecord.RecordValue; var record = MonitorHandleHelper.HandleHistory(monitor, monitor.SignalList.First(),receiveRecord,inputFirstRecord.RecordTime); if (record != null) { recordList.Add(record); } } break; case Model.eMonitorType.Vibration: { } break; default: break; } } } } if (recordList.Count < 1) { return false; } //临时 var bol = new Service.MonitorRealRecord().InsertsSupplement(recordList.Select(x=>x as Model.MonitorRealRecordPure).ToList()); return bol; } } }