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;
}
}
}