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;
namespace IStation.Application
{
///
/// 波形存储接口(城投的恩普特 市南泵站专用)
///
[AllowAnonymous]
[Route("smi/vibration/zept")]
[ApiDescriptionSettings("Vibration", Name = "城投恩普特振动", Order = 1100)]
public class Smi_Zept_VibrationController : IDynamicApiController
{
///
/// 单个添加
///
[Route("SingleInsert")]
public bool SingleInsert([Required]AddSmiExpertVibrationRecordInput input)
{
//转化为内部使用对象
var model = input.Adapt();
//写redis缓存
var redisHelper = new RedisCache.SmiExpertVibrationRecord();
redisHelper.SetLastRecord(model);
if (ConfigHelper.Smi_Expert_IsWriteLog)
{
LogHelper.Info($"恩普特写入Redis一条振动数据,ObjectId:{model.ObjectId}");
}
//获取配置
var configure = new Service.DataDockingConfigure().GetByID(ConfigHelper.Smi_Expert_CorpID, ConfigHelper.Smi_Expert_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.Rpm.ToString();
receiveSubList.Add(rpm_sub);
}
//直流量
var signal_ic = monitor.SignalList.Find(t => t.Flags != null && t.Flags.Contains(LogicFlags.直流量));
if (signal_ic != null)
{
var ic_sub = new Model.MonitorDataDockingReceiveSubRecord();
ic_sub.SysId = signal_ic.ID;
ic_sub.SrcValue = model.DcValue.ToString();
receiveSubList.Add(ic_sub);
}
//频率
var signal_hz = monitor.SignalList.Find(t => t.Flags != null && t.Flags.Contains(LogicFlags.频率));
if (signal_hz != null)
{
var hz_sub = new Model.MonitorDataDockingReceiveSubRecord();
hz_sub.SysId = signal_hz.ID;
hz_sub.SrcValue = model.Frequency.ToString();
receiveSubList.Add(hz_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_Expert_IsWriteLog)
{
LogHelper.Info($"恩普特推入通道一条振动数据,ObjectId:{model.ObjectId},SysId:{monitor.ID}");
}
return true;
}
}
}
}
}
}
return false;
}
///
/// 批量添加
///
[Route("BulkInsert")]
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.SmiExpertVibrationRecord();
redisHelper.SetLastRecord(modelList);
if (ConfigHelper.Smi_HangTian_IsWriteLog)
{
LogHelper.Info($"恩普特写入Redis {modelList.Count} 条振动数据");
}
//获取配置
var configure = new Service.DataDockingConfigure().GetByID(ConfigHelper.Smi_Expert_CorpID, ConfigHelper.Smi_Expert_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.Rpm.ToString();
receiveSubList.Add(rpm_sub);
}
//直流量
var signal_ic = monitor.SignalList.Find(t => t.Flags != null && t.Flags.Contains(LogicFlags.直流量));
if (signal_ic != null)
{
var ic_sub = new Model.MonitorDataDockingReceiveSubRecord();
ic_sub.SysId = signal_ic.ID;
ic_sub.SrcValue = model.DcValue.ToString();
receiveSubList.Add(ic_sub);
}
//频率
var signal_hz = monitor.SignalList.Find(t => t.Flags != null && t.Flags.Contains(LogicFlags.频率));
if (signal_hz != null)
{
var hz_sub = new Model.MonitorDataDockingReceiveSubRecord();
hz_sub.SysId = signal_hz.ID;
hz_sub.SrcValue = model.Frequency.ToString();
receiveSubList.Add(hz_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_Expert_IsWriteLog)
{
LogHelper.Info($"恩普特推入通道 {receiveList.Count} 条振动数据");
}
return true;
}
}
}
}
return false;
}
///
/// 通过 ObjectId 查询最近(已过时)
///
[Route("QueryLastRecordByObjectId")]
[HttpGet]
public List QueryLastRecordByObjectId(string ProductId, string ObjectId)
{
if (string.IsNullOrEmpty(ObjectId))
{
return default;
}
var objectIds = ObjectId.Split(',');
if (objectIds == null || objectIds.Count() < 1)
{
return default;
}
var redisHelper = new RedisCache.SmiExpertVibrationRecord();
var modelList = redisHelper.GetLastRecord(objectIds);
if (ConfigHelper.Smi_Expert_IsWriteLog)
{
LogHelper.Info($"恩普特通过ObjectId: {ObjectId} 获取 {(modelList == null ? 0 : modelList.Count)} 条");
}
var dtoList = modelList?.Select(x => x.Adapt()).ToList();
return dtoList;
}
///
/// 通过 ProductId 查询最近
///
[Route("QueryLastRecordByProductId")]
[HttpGet]
public List QueryLastRecordByProductId(string ProductId)
{
if (string.IsNullOrEmpty(ProductId))
{
return default;
}
var redisHelper = new RedisCache.SmiExpertVibrationRecord();
var modelList = redisHelper.GetLastRecordStartWith(ProductId);
if (ConfigHelper.Smi_Expert_IsWriteLog)
{
LogHelper.Info($"恩普特通过ProductId: {ProductId} 获取 {(modelList == null ? 0 : modelList.Count)} 条");
}
var dtoList = modelList?.Select(x => x.Adapt()).ToList();
return dtoList;
}
}
}