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; namespace IStation.Application { /// /// 波形存储接口(城投的航天 市南泵站专用) /// [AllowAnonymous] [Route("smi/vibration/hangtian")] [ApiDescriptionSettings("Vibration", Name = "城投航天振动", Order = 1000)] public class Smi_HangTian_VibrationController : IDynamicApiController { /// /// 单个添加 /// [Route("SingleInsert")] [HttpPost] public bool SingleInsert([Required]AddSmiHangTianVibartionRecordInput input) { //转化为内部使用对象 var model = input.Adapt(); //写redis缓存 var redisHelper = new RedisCache.SmiHangTianVibrationRecord(); redisHelper.SetLastRecord(model); if (ConfigHelper.Smi_HangTian_IsWriteLog) { LogHelper.Info($"航天写入Redis一条振动数据,ObjectId:{model.ObjectId}"); } //获取配置 var configure = new Service.DataDockingConfigure().GetByID(ConfigHelper.Smi_HangTian_CorpID, ConfigHelper.Smi_HangTian_ConfigureID); if (configure != null) { if (configure.Mappers != null && configure.Mappers.Count > 0) { var mapper = configure.Mappers.Find(t=>t.SignId== model.ObjectId); if (mapper != null) { var monitor = new Service.MonitorPoint().GetExSignalWithSignalTypeByID(configure.CorpID, mapper.SysId); if (monitor != null) { if (monitor.MonitorType == Model.eMonitorType.Vibration) { var receive = new Model.MonitorDataDockingReceiveRecord(); receive.SysId = monitor.ID; receive.RecordType = monitor.MonitorType; receive.SrcTime = model.SrcTime; receive.DataStatus = model.DataStatus; //子项列表 var receiveSubList = new List(); //配置 var signal_config = monitor.SignalList.Find(t=>t.Flags!=null&&t.Flags.Contains(LogicFlags.配置)); if (signal_config != null) { var config = model.Adapt(); var config_json = JsonHelper.Object2Json(config); var config_sub = new Model.MonitorDataDockingReceiveSubRecord(); config_sub.SysId = signal_config.ID; config_sub.SrcValue= config_json; receiveSubList.Add(config_sub); } //转速 var signal_rpm = monitor.SignalList.Find(t=>t.Flags!=null&&t.Flags.Contains(LogicFlags.转速)); if (signal_rpm != null) { var rpm_sub = new Model.MonitorDataDockingReceiveSubRecord(); rpm_sub.SysId= signal_rpm.ID; rpm_sub.SrcValue = model.Speed.ToString(); receiveSubList.Add(rpm_sub); } //间歇电压 var signal_u = monitor.SignalList.Find(t=>t.Flags!=null&&t.Flags.Contains(LogicFlags.间歇电压)); if (signal_u != null) { var u_sub = new Model.MonitorDataDockingReceiveSubRecord(); u_sub.SysId = signal_u.ID; u_sub.SrcValue = model.GapValue.ToString(); receiveSubList.Add(u_sub); } //通频值 var signal_tp = monitor.SignalList.Find(t => t.Flags != null && t.Flags.Contains(LogicFlags.通频值)); if (signal_tp != null) { var tp_sub = new Model.MonitorDataDockingReceiveSubRecord(); tp_sub.SysId = signal_tp.ID; tp_sub.SrcValue = model.OverValue.ToString(); receiveSubList.Add(tp_sub); } //波形 var signal_wave= monitor.SignalList.Find(t => t.Flags != null && t.Flags.Contains(LogicFlags.波形)); if (signal_wave != null) { var wave_sub = new Model.MonitorDataDockingReceiveSubRecord(); wave_sub.SysId = signal_wave.ID; wave_sub.SrcValue = model.Wave; receiveSubList.Add(wave_sub); } receive.SrcValue = Model.MonitorDataDockingReceiveSubRecord.ToJson(receiveSubList); var queueHelper = new RabbitMqQueueHelper(); var bol= queueHelper.Push(ConfigHelper.DataDockingQueueName,new Model.MonitorDataDockingCorpRecord() { CorpID=configure.CorpID, ConfigureID=configure.ID, Records=new List() { receive} }); if (bol) { if (ConfigHelper.Smi_HangTian_IsWriteLog) { LogHelper.Info($"航天推入通道一条振动数据,ObjectId:{model.ObjectId},SysId:{monitor.ID}"); } return true; } } } } } } return false; } /// /// 批量添加 /// [Route("BulkInsert")] [HttpPost] public bool BulkInsert([Required]List inputList) { if (inputList == null || inputList.Count < 1) return false; //转化为内部使用对象 var modelList = inputList.Select(x => x.Adapt()).ToList(); //写redis缓存 var redisHelper = new RedisCache.SmiHangTianVibrationRecord(); redisHelper.SetLastRecord(modelList); if (ConfigHelper.Smi_HangTian_IsWriteLog) { LogHelper.Info($"航天写入Redis {modelList.Count} 条振动数据"); } //获取配置 var configure = new Service.DataDockingConfigure().GetByID(ConfigHelper.Smi_HangTian_CorpID, ConfigHelper.Smi_HangTian_ConfigureID); if (configure != null) { if (configure.Mappers != null && configure.Mappers.Count > 0) { var receiveList = new List(); foreach (var model in modelList) { var mapper = configure.Mappers.Find(t => t.SignId == model.ObjectId); if (mapper != null) { var monitor = new Service.MonitorPoint().GetExSignalWithSignalTypeByID(configure.CorpID, mapper.SysId); if (monitor != null) { if (monitor.MonitorType == Model.eMonitorType.Vibration) { var receive = new Model.MonitorDataDockingReceiveRecord(); receive.SysId = monitor.ID; receive.RecordType = monitor.MonitorType; receive.SrcTime = model.SrcTime; receive.DataStatus = model.DataStatus; //子项列表 var receiveSubList = new List(); //配置 var signal_config = monitor.SignalList.Find(t => t.Flags != null && t.Flags.Contains(LogicFlags.配置)); if (signal_config != null) { var config = model.Adapt(); var config_json = JsonHelper.Object2Json(config); var config_sub = new Model.MonitorDataDockingReceiveSubRecord(); config_sub.SysId = signal_config.ID; config_sub.SrcValue = config_json; receiveSubList.Add(config_sub); } //转速 var signal_rpm = monitor.SignalList.Find(t => t.Flags != null && t.Flags.Contains(LogicFlags.转速)); if (signal_rpm != null) { var rpm_sub = new Model.MonitorDataDockingReceiveSubRecord(); rpm_sub.SysId = signal_rpm.ID; rpm_sub.SrcValue = model.Speed.ToString(); receiveSubList.Add(rpm_sub); } //间歇电压 var signal_u = monitor.SignalList.Find(t => t.Flags != null && t.Flags.Contains(LogicFlags.间歇电压)); if (signal_u != null) { var u_sub = new Model.MonitorDataDockingReceiveSubRecord(); u_sub.SysId = signal_u.ID; u_sub.SrcValue = model.GapValue.ToString(); receiveSubList.Add(u_sub); } //通频值 var signal_tp = monitor.SignalList.Find(t => t.Flags != null && t.Flags.Contains(LogicFlags.通频值)); if (signal_tp != null) { var tp_sub = new Model.MonitorDataDockingReceiveSubRecord(); tp_sub.SysId = signal_tp.ID; tp_sub.SrcValue = model.OverValue.ToString(); receiveSubList.Add(tp_sub); } //波形 var signal_wave = monitor.SignalList.Find(t => t.Flags != null && t.Flags.Contains(LogicFlags.波形)); if (signal_wave != null) { var wave_sub = new Model.MonitorDataDockingReceiveSubRecord(); wave_sub.SysId = signal_wave.ID; wave_sub.SrcValue = model.Wave; receiveSubList.Add(wave_sub); } receive.SrcValue = Model.MonitorDataDockingReceiveSubRecord.ToJson(receiveSubList); receiveList.Add(receive); } } } } if (receiveList.Count > 0) { var queueHelper = new RabbitMqQueueHelper(); var bol = queueHelper.Push(ConfigHelper.DataDockingQueueName, new Model.MonitorDataDockingCorpRecord() { CorpID = configure.CorpID, ConfigureID = configure.ID, Records = receiveList }); if (bol) { if (ConfigHelper.Smi_HangTian_IsWriteLog) { LogHelper.Info($"航天推入通道 {receiveList.Count} 条振动数据"); } return true; } } } } return false; } /// /// 通过 ObjectId 查询最近一条记录 /// [Route("QueryLastRecordByObjectId")] [HttpGet] public SmiHangTianVibrationRecordDto QueryLastRecordByObjectId([Required, DataValidation(AllowEmptyStrings = false)] string ObjectId) { var redisCacheHelper = new RedisCache.SmiHangTianVibrationRecord(); var model = redisCacheHelper.GetLastRecord(ObjectId); if (ConfigHelper.Smi_HangTian_IsWriteLog) { LogHelper.Info($"航天通过ObjectId: {ObjectId} 获取 {(model == null ? 0:1)} 条"); } var dto = model?.Adapt(); return dto; } /// /// 通过 ObjectId 查询最近 /// [Route("QueryLastRecordByObjectIds")] [HttpGet] public List QueryLastRecordByObjectIds(string ObjectIds) { var ids = StringListHelper.ToList(ObjectIds); if (ids == null || ids.Count() < 1) { return default; } var redisCacheHelper = new RedisCache.SmiHangTianVibrationRecord(); var modelList = redisCacheHelper.GetLastRecord(ids); if (ConfigHelper.Smi_HangTian_IsWriteLog) { LogHelper.Info($"航天通过ObjectId: {ObjectIds} 获取 {(modelList == null ? 0 : modelList.Count)} 条"); } var dtoList = modelList?.Select(x => x.Adapt()).ToList(); return dtoList; } /// /// 通过 ObjectId 查询最近 /// [Route("QueryLastRecordStartWith")] [HttpGet] public List QueryLastRecordStartWith([Required, DataValidation(AllowEmptyStrings = false)] string ObjectId) { var redisCacheHelper = new RedisCache.SmiHangTianVibrationRecord(); var modelList = redisCacheHelper.GetLastRecordStartWith(ObjectId); if (ConfigHelper.Smi_HangTian_IsWriteLog) { LogHelper.Info($"航天通过ObjectId: {ObjectId} 获取 {(modelList == null ? 0 : modelList.Count)} 条"); } var dtoList = modelList?.Select(x => x.Adapt()).ToList(); return dtoList; } } }