301 lines
14 KiB
C#
Raw Normal View History

2024-10-18 18:41:02 +08:00
using Abp.Authorization;
2024-11-29 09:03:54 +08:00
using Abp.Domain.Entities;
2024-10-18 18:41:02 +08:00
using Abp.Domain.Repositories;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ToolLibrary.LogHelper;
using YunDa.ISAS.Application.Core;
using YunDa.ISAS.Application.Core.Configuration;
using YunDa.ISAS.Application.Core.Session;
using YunDa.ISAS.Application.Core.SwaggerHelper;
using YunDa.ISAS.DataTransferObject;
2024-11-29 09:03:54 +08:00
using YunDa.ISAS.Entities.DataMonitoring;
2024-10-18 18:41:02 +08:00
using YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionDeviceInfoDto.SearchCondition;
using YunDa.SOMS.DataTransferObject.GeneralInformation.SecondaryCircuitDto;
using YunDa.SOMS.Entities.GeneralInformation;
2024-11-29 09:03:54 +08:00
using static iText.StyledXmlParser.Jsoup.Select.Evaluator;
using static NetMQ.NetMQSelector;
2024-10-18 18:41:02 +08:00
namespace YunDa.ISAS.Application.GeneralInformation.SecondaryCircuitInfo
{
/// <summary>
/// 二次回路逻辑表达式类
/// </summary>
public class SecondaryCircuitLogicExpressionAppService : ISASAppServiceBase, ISecondaryCircuitLogicExpressionAppService
{
private readonly IRepository<SecondaryCircuit, Guid> _secondaryCircuitRepository;
private readonly IRepository<SecondaryCircuitLogicExpression, Guid> _secondaryCircuitLogicExpressionRepository;
2024-11-29 09:03:54 +08:00
private readonly IRepository<SecondaryCircuitProtectionDevice, Guid> _secondaryCircuitProtectionDeviceRepository;
private readonly IRepository<TelemeteringConfiguration, Guid> _telemeteringConfigurationRepository;
private readonly IRepository<TelesignalisationConfiguration, Guid> _telesignalisationConfigurationRepository;
2024-10-18 18:41:02 +08:00
public SecondaryCircuitLogicExpressionAppService(ISessionAppService sessionAppService,
IRepository<SecondaryCircuitLogicExpression, Guid> secondaryCircuitLogicExpressionRepository,
IRepository<SecondaryCircuit, Guid> secondaryCircuitRepository,
2024-11-29 09:03:54 +08:00
IRepository<SecondaryCircuitProtectionDevice, Guid> secondaryCircuitProtectionDeviceRepository,
IRepository<TelemeteringConfiguration, Guid> telemeteringConfigurationRepository,
IRepository<TelesignalisationConfiguration, Guid> telesignalisationConfigurationRepository,
IAppServiceConfiguration appServiceConfiguration) : base(sessionAppService, appServiceConfiguration)
2024-10-18 18:41:02 +08:00
{
_secondaryCircuitLogicExpressionRepository = secondaryCircuitLogicExpressionRepository;
_secondaryCircuitRepository = secondaryCircuitRepository;
2024-11-29 09:03:54 +08:00
_secondaryCircuitProtectionDeviceRepository = secondaryCircuitProtectionDeviceRepository;
_telemeteringConfigurationRepository = telemeteringConfigurationRepository;
_telesignalisationConfigurationRepository = telesignalisationConfigurationRepository;
2024-10-18 18:41:02 +08:00
}
/// <summary>
/// 添加或者修改二次回路的逻辑表达式
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
[ShowApi]
[AbpAllowAnonymous]
public async Task<RequestResult<SecondaryCircuitLogicExpressionOutput>> CreateOrUpdateAsync(EditSecondaryCircuitLogicExpressionInput input)
{
RequestResult<SecondaryCircuitLogicExpressionOutput> result = new RequestResult<SecondaryCircuitLogicExpressionOutput>();
try
{
SecondaryCircuitLogicExpression entity;
if (input.Id.HasValue)
{
// 更新逻辑
entity = await _secondaryCircuitLogicExpressionRepository.FirstOrDefaultAsync(input.Id.Value);
if (entity == null)
{
result.Message = "未找到该逻辑表达式记录";
result.Flag = false;
return result;
}
ObjectMapper.Map(input, entity);
entity.LastModificationTime = DateTime.Now;
}
else
{
// 新建逻辑
entity = ObjectMapper.Map<SecondaryCircuitLogicExpression>(input);
entity.CreationTime = DateTime.Now;
2024-11-29 09:03:54 +08:00
var secondaryCircuitProtectionDevice = _secondaryCircuitProtectionDeviceRepository.GetAllIncluding(t => t.ProtectionDevice, t => t.ProtectionDevice.EquipmentInfo)
.Where(t => t.SecondaryCircuitId == input.SecondaryCircuitId).FirstOrDefault();
if (secondaryCircuitProtectionDevice != null)
{
int dispatchaddr = 1;
if (_telemeteringConfigurationRepository.GetAll().Where(t => t.DataSourceCategory == DataSourceCategoryEnum.None).Count()>0)
{
dispatchaddr =(int) _telemeteringConfigurationRepository.GetAll().Where(t => t.DataSourceCategory == DataSourceCategoryEnum.None)?.Select(t => t.DispatcherAddress)?.Max() + 1;
}
2024-11-29 09:03:54 +08:00
var telemetering = InsertTelemetering(secondaryCircuitProtectionDevice, entity.Name, dispatchaddr);
var telemeteringId = await _telemeteringConfigurationRepository.InsertAndGetIdAsync(telemetering);
if (telemeteringId!=default)
{
entity.TelemeteringConfigurationId = telemeteringId;
}
2024-12-02 14:52:11 +08:00
if (_telemeteringConfigurationRepository.GetAll().Where(t => t.DataSourceCategory == DataSourceCategoryEnum.None).Count()>0)
{
dispatchaddr = (int)_telemeteringConfigurationRepository.GetAll().Where(t => t.DataSourceCategory == DataSourceCategoryEnum.None)?.Select(t => t.DispatcherAddress)?.Max() + 1;
}
var telesignal = InsertTelesignal(secondaryCircuitProtectionDevice, entity.Name, dispatchaddr);
2024-11-29 09:03:54 +08:00
var telesignalId = await _telesignalisationConfigurationRepository.InsertAndGetIdAsync(telesignal);
if (telesignalId!= default)
{
entity.TelesignalisationConfigurationId = telesignalId;
}
}
2024-10-18 18:41:02 +08:00
await _secondaryCircuitLogicExpressionRepository.InsertAsync(entity);
}
result.ResultData = null;// ObjectMapper.Map<SecondaryCircuitLogicExpressionOutput>(entity);
result.Flag = true;
}
catch (Exception ex)
{
result.Message = ex.Message;
result.Flag = false;
Log4Helper.Error(this.GetType(), "CreateOrUpdate逻辑表达式", ex);
}
return result;
}
2024-11-29 09:03:54 +08:00
private TelemeteringConfiguration InsertTelemetering(SecondaryCircuitProtectionDevice secondaryCircuitProtectionDevice, string secondaryCircuitName, int dispatchaddr)
{
if (secondaryCircuitProtectionDevice!=null)
{
// 新增的记录
var entity = new TelemeteringConfiguration();
2024-12-02 14:52:11 +08:00
entity.DispatcherAddress = dispatchaddr;
2024-11-29 09:03:54 +08:00
entity.CPUSector = 0;
2024-12-02 14:52:11 +08:00
entity.DeviceAddress = 1;
2024-11-29 09:03:54 +08:00
entity.InfoAddress = 0;
entity.InfoCPUSector = 0;
2024-12-02 15:35:31 +08:00
entity.InfoDeviceAddress = 1;
2024-11-29 09:03:54 +08:00
entity.IsVirtualDevice = true;
entity.IsSelfCheckingValue = false;
entity.Name = $"{secondaryCircuitName}_判定遥测";
2024-12-02 15:35:31 +08:00
entity.SeqNo = dispatchaddr;
2024-11-29 09:03:54 +08:00
entity.IsActive = true;
entity.IsSave = false;
entity.IsSendDispatcher = false;
entity.IsVisible = true;
entity.UpperLimit = 10;
entity.LowerLimit = 0;
entity.DecimalDigits = 2;
entity.Coefficient = 1;
entity.Unit = "";
entity.TransformerSubstationId = secondaryCircuitProtectionDevice.ProtectionDevice.TransformerSubstationId;
entity.DataSourceCategory = DataSourceCategoryEnum.None;
entity.EquipmentInfoId = secondaryCircuitProtectionDevice.ProtectionDevice.EquipmentInfoId;
entity.EquipmentTypeId = secondaryCircuitProtectionDevice.ProtectionDevice.EquipmentInfo.EquipmentTypeId;
return entity;
}
return null;
}
2024-12-02 14:52:11 +08:00
private TelesignalisationConfiguration InsertTelesignal(SecondaryCircuitProtectionDevice secondaryCircuitProtectionDevice, string secondaryCircuitName, int dispatchaddr)
2024-11-29 09:03:54 +08:00
{
// 新增的记录
var entity = new TelesignalisationConfiguration
{
Name = $"{secondaryCircuitName}_判定虚遥信",
2024-12-02 14:52:11 +08:00
DispatcherAddress = dispatchaddr,
2024-11-29 09:03:54 +08:00
CPUSector = 0,
2024-12-02 14:52:11 +08:00
DeviceAddress = 1,
2024-11-29 09:03:54 +08:00
InfoAddress = 0,
InfoCPUSector = 0,
InfoDeviceAddress = 0,
IsVirtualDevice = true,
IsSelfCheckingValue = false,
2024-12-02 15:35:31 +08:00
SeqNo = dispatchaddr,
2024-11-29 09:03:54 +08:00
IsActive = true,
IsSave = false,
IsSendDispatcher = true,
IsVisible = true,
RemoteType = RemoteTypeEnum.DoublePoint,
YesContent = "故障",
NoContent = "消失",
UnsurenessContent = "不定",
DataSourceCategory = DataSourceCategoryEnum.None,
2024-11-29 09:03:54 +08:00
IsCommStatus = false,
TransformerSubstationId = secondaryCircuitProtectionDevice.ProtectionDevice.TransformerSubstationId,
2024-12-02 14:52:11 +08:00
EquipmentInfoId = secondaryCircuitProtectionDevice.ProtectionDevice.EquipmentInfoId,
EquipmentTypeId = secondaryCircuitProtectionDevice.ProtectionDevice.EquipmentInfo.EquipmentTypeId,
2024-11-29 09:03:54 +08:00
};
return entity;
}
2024-10-18 18:41:02 +08:00
[HttpGet]
[ShowApi]
[AbpAllowAnonymous]
public async Task<RequestEasyResult> DeleteByIdAsync(Guid id)
{
RequestEasyResult result = new RequestEasyResult();
try
{
2024-11-29 09:03:54 +08:00
var entity = await _secondaryCircuitLogicExpressionRepository.FirstOrDefaultAsync(id);
if (entity != null)
{
await _telesignalisationConfigurationRepository.DeleteAsync(entity.TelesignalisationConfigurationId.Value);
await _telemeteringConfigurationRepository.DeleteAsync(entity.TelemeteringConfigurationId.Value);
}
2024-10-18 18:41:02 +08:00
await _secondaryCircuitLogicExpressionRepository.DeleteAsync(id);
result.Flag = true;
}
catch (Exception ex)
{
result.Message = ex.Message;
result.Flag = false;
Log4Helper.Error(this.GetType(), "DeleteById逻辑表达式", ex);
}
return result;
}
/// <summary>
/// 删除逻辑表达式
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
[HttpPost]
[ShowApi]
[AbpAllowAnonymous]
public async Task<RequestEasyResult> DeleteByIdsAsync(List<Guid> ids)
{
RequestEasyResult result = new RequestEasyResult();
try
{
foreach (var id in ids)
{
2024-11-29 09:03:54 +08:00
var entity = await _secondaryCircuitLogicExpressionRepository.FirstOrDefaultAsync(id);
if (entity != null)
{
await _telesignalisationConfigurationRepository.DeleteAsync(entity.TelesignalisationConfigurationId.Value);
await _telemeteringConfigurationRepository.DeleteAsync(entity.TelemeteringConfigurationId.Value);
}
2024-10-18 18:41:02 +08:00
await _secondaryCircuitLogicExpressionRepository.DeleteAsync(id);
}
result.Flag = true;
}
catch (Exception ex)
{
result.Message = ex.Message;
result.Flag = false;
Log4Helper.Error(this.GetType(), "DeleteByIds逻辑表达式", ex);
}
return result;
}
/// <summary>
/// 查询逻辑表达式
/// </summary>
/// <param name="searchCondition"></param>
/// <returns></returns>
[HttpPost]
[ShowApi]
[AbpAllowAnonymous]
public RequestPageResult<SecondaryCircuitLogicExpressionOutput> FindDatas(PageSearchCondition<SecondaryCircuitLogicExpressionSearchConditionInput> searchCondition)
{
RequestPageResult<SecondaryCircuitLogicExpressionOutput> result = new RequestPageResult<SecondaryCircuitLogicExpressionOutput>();
try
{
var query = _secondaryCircuitLogicExpressionRepository.GetAllIncluding(x => x.TelemeteringConfiguration, x => x.TelesignalisationConfiguration);
if (!string.IsNullOrWhiteSpace(searchCondition.SearchCondition.Name))
{
query = query.Where(x => x.Name.Contains(searchCondition.SearchCondition.Name));
}
if (searchCondition.SearchCondition.SecondaryCircuitId.HasValue)
{
query = query.Where(x => x.SecondaryCircuitId == searchCondition.SearchCondition.SecondaryCircuitId.Value);
}
if (searchCondition.SearchCondition.IsOnlyActive.HasValue)
{
query = query.Where(x => x.IsActive == searchCondition.SearchCondition.IsOnlyActive.Value);
}
result.TotalCount = query.Count();
var data = new List<SecondaryCircuitLogicExpression>();
if (searchCondition.PageSize > 0)
{
data = query.Skip((searchCondition.PageIndex - 1) * searchCondition.PageSize)
.Take(searchCondition.PageSize)
.ToList();
}
else
{
data = query.ToList();
}
result.ResultData = ObjectMapper.Map<List<SecondaryCircuitLogicExpressionOutput>>(data);
result.Flag = true;
}
catch (Exception ex)
{
result.Message = ex.Message;
result.Flag = false;
Log4Helper.Error(this.GetType(), "FindDatas逻辑表达式", ex);
}
return result;
}
}
}