using Abp.Application.Services; using Abp.Authorization; using Abp.Domain.Repositories; using Abp.Domain.Uow; using Abp.EntityFrameworkCore.Repositories; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Linq; using System.Text.RegularExpressions; using System.Threading.Tasks; using YunDa.ISAS.Application.Core.SwaggerHelper; using YunDa.ISAS.DataTransferObject; using YunDa.ISAS.DataTransferObject.SecondaryElectricalEquipmentInfoDto.ProtectDeviceDto; using YunDa.ISAS.Entities.DataMonitoring; using YunDa.ISAS.Entities.GeneralInformation; using YunDa.ISAS.Entities.MySQL.DataMonitoring; using YunDa.ISMS.BASE.Entities.Models; namespace YunDa.ISAS.Application.GeneralInformation { /// /// 二次设备信息 /// [Description("二次设备信息")] public class SecondaryElectricalEquipmentInfoAppService : ApplicationService { private readonly IRepository _imDeviceDatumRepository; private readonly IRepository _imProtectDeviceRepository; private readonly IRepository _imDeviceYcRepository; private readonly IRepository _imDeviceYxRepository; private readonly IRepository _dmalarmCategoryRepository; private readonly IRepository _equipmentInfoRepository; private readonly IRepository _telemeteringConfigurationRepository; private readonly IRepository _telesignalisationConfigurationRepository; private readonly IUnitOfWorkManager _unitOfWorkManager; public SecondaryElectricalEquipmentInfoAppService( IRepository imDeviceDatumRepository, IRepository imProtectDeviceRepository, IRepository equipmentInfoRepository, IRepository telemeteringConfigurationRepository, IRepository telesignalisationConfigurationRepository, IRepository dmalarmCategoryRepository, IRepository imDeviceYcRepository, IRepository imDeviceYxRepository, IUnitOfWorkManager unitOfWorkManager ) { _imDeviceDatumRepository = imDeviceDatumRepository; _imProtectDeviceRepository = imProtectDeviceRepository; _equipmentInfoRepository = equipmentInfoRepository; _telemeteringConfigurationRepository = telemeteringConfigurationRepository; _telesignalisationConfigurationRepository = telesignalisationConfigurationRepository; _unitOfWorkManager = unitOfWorkManager; _imDeviceYcRepository = imDeviceYcRepository; _imDeviceYxRepository = imDeviceYxRepository; _dmalarmCategoryRepository = dmalarmCategoryRepository; } [HttpGet] [AbpAllowAnonymous] [ShowApi] public RequestEasyResult Test() { RequestEasyResult rst = new RequestEasyResult(); try { var repo = _imProtectDeviceRepository.GetAllIncluding(t=>t.StatCodeNavigation); foreach (var item in repo) { Debug.WriteLine(item.DeviceName+" " + item.Id); } rst.Flag = true; } catch (Exception ex) { rst.Message = ex.Message; } return rst; } /// /// 迁移综自的数据到运维系统中 三遥信息 /// static int index = 0; [HttpGet] [AbpAllowAnonymous] [ShowApi] [UnitOfWork(isTransactional: false)] public async Task MergerDeviceData() { RequestEasyResult rst = new RequestEasyResult(); try { // 初始化数据 List deviceDatas; List ImDeviceYcs; List ImDeviceYxs; List dmalarmCategories; List equipments; using (var unitOfWork = _unitOfWorkManager.Begin()) { deviceDatas = _imDeviceDatumRepository.GetAllIncluding(t => t.Device).ToList(); ImDeviceYcs = _imDeviceYcRepository.GetAll().ToList(); ImDeviceYxs = _imDeviceYxRepository.GetAll().ToList(); unitOfWork.Complete(); } using (var unitOfWork = _unitOfWorkManager.Begin()) { equipments = _equipmentInfoRepository.GetAll().ToList(); dmalarmCategories = _dmalarmCategoryRepository.GetAll().ToList(); unitOfWork.Complete(); } // 将设备数据和设备映射到字典中 var equipmentDict = equipments.ToDictionary(e => e.Name); var telemeteringConfigIds = new HashSet(_telemeteringConfigurationRepository.GetAll().Select(t => t.ismsbaseYCId)); var telesignalisationConfigIds = new HashSet(_telesignalisationConfigurationRepository.GetAll().Select(t => t.ismsbaseYXId)); List telemeteringConfigurations = new List(); List telesignalisationConfigurations = new List(); foreach (var deviceData in deviceDatas) { if (!equipmentDict.TryGetValue(deviceData.Device.DeviceName, out var equipment)) { continue; // 未匹配到设备,跳过 } if (deviceData.DataType == "YC" && !telemeteringConfigIds.Contains(deviceData.Id)) { var yc = ImDeviceYcs.FirstOrDefault(t => t.Id == deviceData.Id); if (yc != null) { telemeteringConfigurations.Add(new TelemeteringConfiguration { DataSourceCategory = DataSourceCategoryEnum.Zongzi, Coefficient = (float)yc.Cof, CPUSector = 0, CreationTime = DateTime.Now, CreatorUserId = default, DeviceAddress = 1, DecimalDigits = (int)yc.Precise, DispatcherAddress = deviceData.InfoAddr, InfoCPUSector = 0, IsSelfCheckingValue = false, EquipmentInfoId = equipment.Id, EquipmentTypeId = equipment.EquipmentTypeId, IsActive = true, IsSave = true, Name = deviceData.DataName, IsVisible = true, SeqNo = 0, TransformerSubstationId = equipment.TransformerSubstationId, Unit = yc.Unit, IsVirtualDevice = false, IsEnvironmentTemp = false, ismsbaseYCId = deviceData.Id }); telemeteringConfigIds.Add(deviceData.Id); // 添加到已存在集合中 } } else if (deviceData.DataType == "YX" && !telesignalisationConfigIds.Contains(deviceData.Id)) { var yx = ImDeviceYxs.FirstOrDefault(t => t.Id == deviceData.Id); if (yx != null) { string levelStr = Regex.Match(yx.AlertLevel, @"\d+")?.Value; if (string.IsNullOrWhiteSpace(levelStr)) { levelStr = "4"; } var defaultDma = dmalarmCategories.FirstOrDefault(t => t.Level == int.Parse(levelStr)); telesignalisationConfigurations.Add(new TelesignalisationConfiguration { DataSourceCategory = DataSourceCategoryEnum.Zongzi, CPUSector = 0, CreationTime = DateTime.Now, CreatorUserId = default, DispatcherAddress = deviceData.InfoAddr, DeviceAddress = 1, InfoCPUSector = 0, IsSelfCheckingValue = false, EquipmentInfoId = equipment.Id, EquipmentTypeId = equipment.EquipmentTypeId, YesContent = yx.SwOnStr ?? "", NoContent = yx.SwOffStr ?? "", UnsurenessContent = yx.SwUncertStr ?? "", DMAlarmCategoryId = defaultDma?.Id, IsActive = true, IsSave = true, Name = deviceData.DataName, IsVisible = true, SeqNo = 0, TransformerSubstationId = equipment.TransformerSubstationId, IsVirtualDevice = false, ismsbaseYXId = deviceData.Id }); telesignalisationConfigIds.Add(deviceData.Id); // 添加到已存在集合中 } } } // 批量插入 using (var unitOfWork = _unitOfWorkManager.Begin()) { if (telemeteringConfigurations.Any()) await _telemeteringConfigurationRepository.InsertRangeAsync(telemeteringConfigurations); if (telesignalisationConfigurations.Any()) await _telesignalisationConfigurationRepository.InsertRangeAsync(telesignalisationConfigurations); unitOfWork.Complete(); } rst.Flag = true; rst.Message = "批量插入成功!"; } catch (Exception ex) { rst.Flag = false; rst.Message = ex.Message; } return rst; } //[HttpGet] //[AbpAllowAnonymous] //[ShowApi] //public RequestResult> FindProtectDevicesData(string stationName) //{ // RequestResult> rst = new(); // try // { // var repo = _imProtectDeviceRepository.GetAllIncluding(); // rst.ResultData =ObjectMapper.Map>(repo); // rst.Flag = true; // } // catch (Exception ex) // { // rst.Flag = false; // } // return rst; //} [HttpGet] [AbpAllowAnonymous] [ShowApi] public RequestResult> FindDevicesData(string devName) { RequestResult> rst = new(); try { //var repo = _imDeviceDatumRepository.GetAllIncluding(t=>t.Device).Where(t=>t.Device.DeviceName == protectDevName); rst.Flag = true; } catch (Exception ex) { rst.Flag = false; } return rst; } } }