363 lines
19 KiB
C#
363 lines
19 KiB
C#
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
|
||
{
|
||
/// <summary>
|
||
/// 二次设备信息
|
||
/// </summary>
|
||
[Description("二次设备信息")]
|
||
public class SecondaryElectricalEquipmentInfoAppService : ApplicationService
|
||
{
|
||
private readonly IRepository<ImDeviceDatum, string> _imDeviceDatumRepository;
|
||
private readonly IRepository<ImProtectDevice, string> _imProtectDeviceRepository;
|
||
private readonly IRepository<ImDeviceYc, string> _imDeviceYcRepository;
|
||
private readonly IRepository<ImDeviceYx, string> _imDeviceYxRepository;
|
||
|
||
private readonly IRepository<DMAlarmCategory, Guid> _dmalarmCategoryRepository;
|
||
|
||
private readonly IRepository<EquipmentInfo, Guid> _equipmentInfoRepository;
|
||
private readonly IRepository<TelemeteringConfiguration, Guid> _telemeteringConfigurationRepository;
|
||
private readonly IRepository<TelesignalisationConfiguration, Guid> _telesignalisationConfigurationRepository;
|
||
private readonly IUnitOfWorkManager _unitOfWorkManager;
|
||
|
||
public SecondaryElectricalEquipmentInfoAppService(
|
||
IRepository<ImDeviceDatum, string> imDeviceDatumRepository,
|
||
IRepository<ImProtectDevice, string> imProtectDeviceRepository,
|
||
IRepository<EquipmentInfo, Guid> equipmentInfoRepository,
|
||
IRepository<TelemeteringConfiguration, Guid> telemeteringConfigurationRepository,
|
||
IRepository<TelesignalisationConfiguration, Guid> telesignalisationConfigurationRepository,
|
||
IRepository<DMAlarmCategory, Guid> dmalarmCategoryRepository,
|
||
IRepository<ImDeviceYc, string> imDeviceYcRepository,
|
||
IRepository<ImDeviceYx, string> 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;
|
||
}
|
||
/// <summary>
|
||
/// 迁移综自的数据到运维系统中 三遥信息
|
||
/// </summary>
|
||
static int index = 0;
|
||
[HttpGet]
|
||
[AbpAllowAnonymous]
|
||
[ShowApi]
|
||
[UnitOfWork(isTransactional: false)]
|
||
public async Task<RequestEasyResult> MergerDeviceData()
|
||
{
|
||
RequestEasyResult rst = new RequestEasyResult();
|
||
try
|
||
{
|
||
// 初始化数据
|
||
List<ImDeviceDatum> deviceDatas;
|
||
List<ImDeviceYc> ImDeviceYcs;
|
||
List<ImDeviceYx> ImDeviceYxs;
|
||
List<DMAlarmCategory> dmalarmCategories;
|
||
List<EquipmentInfo> 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<string>(_telemeteringConfigurationRepository.GetAll().Select(t => t.ismsbaseYCId));
|
||
var telesignalisationConfigIds = new HashSet<string>(_telesignalisationConfigurationRepository.GetAll().Select(t => t.ismsbaseYXId));
|
||
|
||
List<TelemeteringConfiguration> telemeteringConfigurations = new List<TelemeteringConfiguration>();
|
||
List<TelesignalisationConfiguration> telesignalisationConfigurations = new List<TelesignalisationConfiguration>();
|
||
|
||
foreach (var deviceData in deviceDatas)
|
||
{
|
||
if (!equipmentDict.TryGetValue(deviceData.Device.DeviceName, out var equipment))
|
||
{
|
||
continue; // 未匹配到设备,跳过
|
||
}
|
||
|
||
if (deviceData.DataType == "YC")
|
||
{
|
||
var yc = ImDeviceYcs.FirstOrDefault(t => t.Id == deviceData.Id);
|
||
if (telemeteringConfigIds.Contains(deviceData.Id))
|
||
{
|
||
// 更新已有的 Telemetering 配置
|
||
var existingTelemeteringConfig = _telemeteringConfigurationRepository
|
||
.FirstOrDefault(t => t.ismsbaseYCId == deviceData.Id);
|
||
if (existingTelemeteringConfig != null)
|
||
{
|
||
existingTelemeteringConfig.Coefficient = (float)yc.Cof;
|
||
existingTelemeteringConfig.DecimalDigits = (int)yc.Precise;
|
||
existingTelemeteringConfig.Name = deviceData.DataName;
|
||
existingTelemeteringConfig.Unit = yc.Unit;
|
||
existingTelemeteringConfig.IsSelfCheckingValue = false; // 假设这是需要更新的字段
|
||
existingTelemeteringConfig.EquipmentInfoId = equipment.Id; // 更新设备信息ID
|
||
existingTelemeteringConfig.EquipmentTypeId = equipment.EquipmentTypeId; // 更新设备类型ID
|
||
existingTelemeteringConfig.TransformerSubstationId = equipment.TransformerSubstationId; // 更新变电站ID
|
||
existingTelemeteringConfig.IsVirtualDevice = false; // 假设这是需要更新的字段
|
||
existingTelemeteringConfig.IsEnvironmentTemp = false; // 假设这是需要更新的字段
|
||
existingTelemeteringConfig.InfoAddress = deviceData.InfoAddr; // 更新信息地址
|
||
existingTelemeteringConfig.DispatcherAddress = deviceData.InfoAddr; // 更新调度器地址
|
||
existingTelemeteringConfig.IsActive = true; // 更新是否激活
|
||
existingTelemeteringConfig.IsSave = true; // 更新是否保存
|
||
existingTelemeteringConfig.IsVisible = true; // 更新是否可见
|
||
existingTelemeteringConfig.SeqNo = 0; // 假设这是需要更新的字段
|
||
existingTelemeteringConfig.CPUSector = 0; ; // 更新CPU扇区
|
||
existingTelemeteringConfig.InfoCPUSector = deviceData.CpuIndex; ; // 更新信息CPU扇区
|
||
existingTelemeteringConfig.CreatorUserId = default; // 更新创建用户ID(如果需要)
|
||
existingTelemeteringConfig.LastModificationTime = DateTime.Now; // 更新创建时间
|
||
// 这里可以添加更多的更新字段
|
||
// 保存到数据库
|
||
_telemeteringConfigurationRepository.Update(existingTelemeteringConfig);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
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,
|
||
InfoAddress = 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")
|
||
{
|
||
var yx = ImDeviceYxs.FirstOrDefault(t => t.Id == deviceData.Id);
|
||
if (telesignalisationConfigIds.Contains(deviceData.Id))
|
||
{
|
||
// 更新已有的 Telesignalisation 配置
|
||
var existingTelesignalisationConfig = _telesignalisationConfigurationRepository
|
||
.FirstOrDefault(t => t.ismsbaseYXId == deviceData.Id);
|
||
if (existingTelesignalisationConfig != null)
|
||
{
|
||
// 处理 AlertLevel 字段
|
||
string levelStr = Regex.Match(yx.AlertLevel, @"\d+")?.Value;
|
||
if (string.IsNullOrWhiteSpace(levelStr))
|
||
{
|
||
levelStr = "4"; // 默认值
|
||
}
|
||
var defaultDma = dmalarmCategories.FirstOrDefault(t => t.Level == int.Parse(levelStr));
|
||
|
||
// 更新 Telesignalisation 配置的各个字段
|
||
existingTelesignalisationConfig.YesContent = yx.SwOnStr ?? ""; // 如果为空,设置为默认值
|
||
existingTelesignalisationConfig.NoContent = yx.SwOffStr ?? ""; // 如果为空,设置为默认值
|
||
existingTelesignalisationConfig.UnsurenessContent = yx.SwUncertStr ?? "不定"; // 如果为空,设置为默认值
|
||
existingTelesignalisationConfig.DMAlarmCategoryId = defaultDma?.Id; // 更新报警分类ID
|
||
existingTelesignalisationConfig.Name = deviceData.DataName; // 更新名称
|
||
existingTelesignalisationConfig.InfoAddress = deviceData.InfoAddr; // 更新信息地址
|
||
existingTelesignalisationConfig.DispatcherAddress = deviceData.InfoAddr; // 更新调度器地址
|
||
existingTelesignalisationConfig.EquipmentInfoId = equipment.Id; // 更新设备信息ID
|
||
existingTelesignalisationConfig.EquipmentTypeId = equipment.EquipmentTypeId; // 更新设备类型ID
|
||
existingTelesignalisationConfig.TransformerSubstationId = equipment.TransformerSubstationId; // 更新变电站ID
|
||
existingTelesignalisationConfig.IsActive = true; // 更新是否激活
|
||
existingTelesignalisationConfig.IsSave = true; // 更新是否保存
|
||
existingTelesignalisationConfig.IsVisible = true; // 更新是否可见
|
||
existingTelesignalisationConfig.SeqNo = 0; // 假设需要设置序号
|
||
existingTelesignalisationConfig.CPUSector = 0; // 更新CPU扇区
|
||
existingTelesignalisationConfig.InfoCPUSector = deviceData.CpuIndex; // 更新信息CPU扇区
|
||
existingTelesignalisationConfig.IsVirtualDevice = false; // 更新虚拟设备标志
|
||
existingTelesignalisationConfig.CreatorUserId = default; // 更新创建用户ID
|
||
existingTelesignalisationConfig.LastModificationTime = DateTime.Now; // 更新创建时间
|
||
|
||
// 这里可以继续添加其他字段更新的代码
|
||
|
||
// 保存到数据库
|
||
_telesignalisationConfigurationRepository.Update(existingTelesignalisationConfig);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
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,
|
||
InfoAddress = 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);
|
||
|
||
// 完成数据库操作
|
||
await unitOfWork.CompleteAsync();
|
||
}
|
||
|
||
rst.Flag = true;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
rst.Flag = false;
|
||
rst.Message = ex.Message;
|
||
}
|
||
|
||
return rst;
|
||
}
|
||
|
||
|
||
|
||
//[HttpGet]
|
||
//[AbpAllowAnonymous]
|
||
//[ShowApi]
|
||
//public RequestResult<List<ProtectDeviceOutput>> FindProtectDevicesData(string stationName)
|
||
//{
|
||
// RequestResult<List<ProtectDeviceOutput>> rst = new();
|
||
|
||
// try
|
||
// {
|
||
// var repo = _imProtectDeviceRepository.GetAllIncluding();
|
||
// rst.ResultData =ObjectMapper.Map<List<ProtectDeviceOutput>>(repo);
|
||
// rst.Flag = true;
|
||
// }
|
||
// catch (Exception ex)
|
||
// {
|
||
// rst.Flag = false;
|
||
// }
|
||
|
||
// return rst;
|
||
//}
|
||
[HttpGet]
|
||
[AbpAllowAnonymous]
|
||
[ShowApi]
|
||
public RequestResult<List<ProtectDeviceOutput>> FindDevicesData(string devName)
|
||
{
|
||
RequestResult<List<ProtectDeviceOutput>> 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;
|
||
}
|
||
|
||
|
||
}
|
||
}
|