ningshuxia
2022-12-01 391e0e408d09e698850eb5daaef485d088612b4f
Application/IStation.Application.Run/data_docking/DataDocking_StandardController.cs
@@ -13,6 +13,7 @@
using Furion.DataEncryption;
using AutoMapper;
using System.Text;
using IStation.Calculation;
namespace IStation.Application
{
@@ -24,23 +25,26 @@
    [ApiDescriptionSettings("Run", Name = "标准数据对接", Order = 1100)]
    public class DataDocking_StandardController : IDynamicApiController
    {
        //配置列表
        private static List<Model.DataDockingConfigureExStandard> _standardConfigureList = null;
        /// <summary>
        /// 插入
        /// </summary>
        [Route("Insert@V1.0")]
        [HttpPost]
        public bool Insert([Required] DataDockingStandardCorpRecordInput input)
        public bool Insert([Required] DataDockingStandardInput input)
        {
            LogHelper.Info($"客户:{input.CorpId},注册码:{input.RegisterCode},插入数据记录:{input.Records.Count}.");
            var corpration = new Service.Corpration().GetByTerminalId(input.CorpId);
            if (corpration == null)
            LogHelper.Info($"数据标准对接接口中,注册码:{input.RegisterCode},插入数据记录数量:{input.Records.Count}.");
            var corpIds = DataDockingCorpHelper.GetCorpIds();
            if (corpIds == null || corpIds.Count < 1)
            {
                throw new Exception("未检索到客户信息!");
                throw new Exception("未检索到客户标识配置信息!");
            }
            var standardConfigureList = DataDockingStandardCacheHelper.GetCache(corpration.ID);
            if (standardConfigureList == null||standardConfigureList.Count<1)
            if (_standardConfigureList == null)
            {
                var configureList = new Service.DataDockingConfigure().GetByCorpID(corpration.ID);
                var configureList = new Service.DataDockingConfigure().GetByCorpIds(corpIds);
                if (configureList == null || configureList.Count < 1)
                {
                    throw new Exception("未检索到数据对接配置信息!");
@@ -50,11 +54,9 @@
                {
                    throw new Exception("未检索到数据对接标准配置信息!");
                }
                standardConfigureList = configureList.Select(x => new Model.DataDockingConfigureExStandard(x)).ToList();
                DataDockingStandardCacheHelper.SetCache(corpration.ID, standardConfigureList);
                _standardConfigureList = configureList.Select(x => new Model.DataDockingConfigureExStandard(x)).ToList();
            }
            var standardConfigure = standardConfigureList.Find(x => x.ConfigureParas != null && x.ConfigureParas.RegisterCode == input.RegisterCode);
            var standardConfigure = _standardConfigureList.Find(x => x.ConfigureParas != null && x.ConfigureParas.RegisterCode == input.RegisterCode);
            if (standardConfigure == null)
            {
                throw new Exception("未检索到数据对接标准配置信息!");
@@ -62,20 +64,23 @@
            if (standardConfigure.Mappers == null || standardConfigure.Mappers.Count < 1)
            {
                throw new Exception("数据对接标准配置信息中,未配置有效映射关系!");
            }
            }
            var records = new List<Model.MonitorDataDockingReceiveRecord>();
            var inputRecords = input.Records.OrderByDescending(x=>x.RecordTime).ToList();
            foreach (var mapper in standardConfigure.Mappers)
            {
                var inputRecord = input.Records.Find(x=>x.RecordId==mapper.SignId);
                var inputRecord = inputRecords.Find(x => x.RecordId == mapper.SignId);
                if (inputRecord != null)
                {
                    var record = new Model.MonitorDataDockingReceiveRecord();
                    record.SysId = mapper.SysId;
                    record.RecordType = inputRecord.RecordType;
                    record.SrcTime = inputRecord.RecordTime;
                    record.SrcValue = inputRecord.RecordValue;
                    record.DataStatus = new List<string>();
                    var record = new Model.MonitorDataDockingReceiveRecord
                    {
                        SysId = mapper.SysId,
                        RecordType = inputRecord.RecordType,
                        SrcTime = inputRecord.RecordTime,
                        SrcValue = inputRecord.RecordValue,
                        DataStatus = new List<string>()
                    };
                    records.Add(record);
                }
            }
@@ -86,25 +91,115 @@
            }
            var queueHelper = new RabbitMqQueueHelper();
            var bol = queueHelper.Push(ConfigHelper.DataDockingQueueName, new Model.MonitorDataDockingCorpRecord()
            var bol = queueHelper.Push(Settings.Queue.DataDockingQueueName, new Model.MonitorDataDockingCorpRecord()
            {
                CorpID = corpration.ID,
                CorpID = standardConfigure.CorpID,
                ConfigureID = standardConfigure.ID,
                Records = records
            });
            if (bol)
            {
                LogHelper.Info($"客户:{corpration.ID},标准数据对接配置:{standardConfigure.ID},推入通道记录数量:{records.Count}.");
                LogHelper.Info($"数据标准对接接口中,客户:{standardConfigure.CorpID},标准数据对接配置:{standardConfigure.ID},推入通道记录数量:{records.Count}.");
                return true;
            }
            return false;
        }
        /// <summary>
        /// 补录
        /// </summary>
        [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<Model.MonitorBasicRecord>();
            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;
        }