453 lines
18 KiB
C#
Raw Normal View History

2024-10-18 18:41:02 +08:00
using Abp.Auditing;
using Abp.Authorization;
using Abp.Domain.Repositories;
using Abp.Domain.Uow;
using Abp.EntityFrameworkCore.Repositories;
2024-11-29 09:03:54 +08:00
//using Google.Protobuf.WellKnownTypes;
2024-10-18 18:41:02 +08:00
using Microsoft.AspNetCore.Components.Server.Circuits;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
2024-11-29 09:03:54 +08:00
using System.IO;
2024-10-18 18:41:02 +08:00
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;
using YunDa.ISAS.DataTransferObject.CommonDto;
using YunDa.ISAS.Entities.GeneralInformation;
using YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionDeviceInfoDto;
using YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionDeviceInfoDto.SearchCondition;
using YunDa.SOMS.Entities.GeneralInformation;
namespace YunDa.ISAS.Application.GeneralInformation.SecondaryCircuitInfo
{
/// <summary>
/// 二次回路类
/// </summary>
public class SecondaryCircuitAppService : ISASAppServiceBase, ISecondaryCircuitAppService
{
private readonly IRepository<ProtectionDeviceInfo, Guid> _protectionDeviceInfoRepository;
private readonly IRepository<SecondaryCircuit, Guid> _secondaryCircuitRepository;
private readonly IRepository<SecondaryCircuitProtectionDevice, Guid> _secondaryCircuitProtectionDeviceRepository;
private readonly IUnitOfWorkManager _unitOfWorkManager;
public SecondaryCircuitAppService(ISessionAppService sessionAppService
, IRepository<ProtectionDeviceInfo, Guid> protectionDeviceInfoRepository
, IRepository<SecondaryCircuit, Guid> secondaryCircuitRepository
, IRepository<SecondaryCircuitProtectionDevice, Guid> secondaryCircuitProtectionDeviceRepository
, IUnitOfWorkManager unitOfWorkManager
, IAppServiceConfiguration appServiceConfiguration) : base(sessionAppService, appServiceConfiguration)
{
_protectionDeviceInfoRepository = protectionDeviceInfoRepository;
_secondaryCircuitRepository = secondaryCircuitRepository;
_secondaryCircuitProtectionDeviceRepository = secondaryCircuitProtectionDeviceRepository;
_unitOfWorkManager = unitOfWorkManager;
}
[HttpPost]
public async Task<RequestResult<SecondaryCircuitOutput>> CreateOrUpdateAsync(EditSecondaryCircuitInput input)
{
RequestResult<SecondaryCircuitOutput> result = new RequestResult<SecondaryCircuitOutput>();
try
{
SecondaryCircuit entity;
if (input.Id.HasValue)
{
// 更新逻辑
entity = await _secondaryCircuitRepository.FirstOrDefaultAsync(input.Id.Value);
if (entity == null)
{
result.Message = "未找到该二次回路记录";
result.Flag = false;
return result;
}
ObjectMapper.Map(input, entity);
2024-11-29 09:03:54 +08:00
entity.PicturePath = Path.Combine(base.GetAttachmentDirectory(), "images","circuit", $"{input.Name}.jpg");
base.Base64ToImage(input.PictureBase64, entity.PicturePath);
2024-10-18 18:41:02 +08:00
entity.LastModificationTime = DateTime.Now;
entity.LastModifierUserId = base.GetCurrentUser().Id;
}
else
{
// 新建逻辑
entity = ObjectMapper.Map<SecondaryCircuit>(input);
entity.CreationTime = DateTime.Now;
entity.CreatorUserId = base.GetCurrentUser().Id;
2024-11-29 09:03:54 +08:00
entity.PicturePath = Path.Combine(base.GetAttachmentDirectory(), "images","circuit", $"{input.Name}.jpg");
base.Base64ToImage(input.PictureBase64, entity.PicturePath);
2024-10-18 18:41:02 +08:00
await _secondaryCircuitRepository.InsertAsync(entity);
}
result.ResultData = ObjectMapper.Map<SecondaryCircuitOutput>(entity);
result.Flag = true;
}
catch (Exception ex)
{
result.Message = ex.Message;
result.Flag = false;
Log4Helper.Error(this.GetType(), "CreateOrUpdate二次回路", ex);
}
return result;
}
[HttpGet]
public async Task<RequestEasyResult> DeleteByIdAsync(Guid id)
{
RequestEasyResult result = new RequestEasyResult();
try
{
await _secondaryCircuitRepository.DeleteAsync(id);
result.Flag = true;
}
catch (Exception ex)
{
result.Message = ex.Message;
result.Flag = false;
Log4Helper.Error(this.GetType(), "Delete二次回路", ex);
}
return result;
}
[HttpPost]
public async Task<RequestEasyResult> DeleteByIdsAsync(List<Guid> ids)
{
RequestEasyResult result = new RequestEasyResult();
try
{
foreach (var id in ids)
{
await _secondaryCircuitRepository.DeleteAsync(id);
}
result.Flag = true;
}
catch (Exception ex)
{
result.Message = ex.Message;
result.Flag = false;
Log4Helper.Error(this.GetType(), "批量Delete二次回路", ex);
}
return result;
}
[HttpPost]
[ShowApi]
[AbpAllowAnonymous]
public async Task<RequestEasyResult> DeleteSecondaryCircuitProtectionDeviceByIdsAsync([FromBody]List<Guid> ids, [FromQuery]Guid circuitId)
{
RequestEasyResult result = new RequestEasyResult();
try
{
var secondaryCircuitProtectionDevices = _secondaryCircuitProtectionDeviceRepository.GetAll()
.Where(t => t.SecondaryCircuitId == circuitId).ToList();
var deleIds = secondaryCircuitProtectionDevices.Where(t=> ids.Contains(t.ProtectionDeviceId));
foreach (var id in deleIds)
{
await _secondaryCircuitProtectionDeviceRepository.DeleteAsync(id);
}
result.Flag = true;
}
catch (Exception ex)
{
result.Message = ex.Message;
result.Flag = false;
Log4Helper.Error(this.GetType(), "批量Delete二次回路", ex);
}
return result;
}
/// <summary>
/// 获取回路数据
/// </summary>
/// <param name="searchCondition"></param>
/// <returns></returns>
[HttpPost]
[ShowApi]
[DisableAuditing]
[AbpAllowAnonymous]
public RequestPageResult<SecondaryCircuitOutput> FindDatas(PageSearchCondition<SecondaryCircuitSearchConditionInput> searchCondition)
{
RequestPageResult<SecondaryCircuitOutput> result = new RequestPageResult<SecondaryCircuitOutput>();
try
{
var query = _secondaryCircuitRepository.GetAll();
if (!string.IsNullOrWhiteSpace(searchCondition.SearchCondition.Name))
{
query = query.Where(x => x.Name.Contains(searchCondition.SearchCondition.Name));
}
if (searchCondition.SearchCondition.TransformerSubstationId.HasValue)
{
query = query.Where(x => x.TransformerSubstationId == searchCondition.SearchCondition.TransformerSubstationId.Value);
}
if (searchCondition.SearchCondition.IsOnlyActive.HasValue)
{
query = query.Where(x => x.IsActive == searchCondition.SearchCondition.IsOnlyActive.Value);
}
2024-11-29 09:03:54 +08:00
if (searchCondition.SearchCondition.CircuitType.HasValue&& Enum.IsDefined(typeof(CircuitTypeEnum), searchCondition.SearchCondition.CircuitType.Value))
2024-10-18 18:41:02 +08:00
{
query = query.Where(x => x.CircuitType == searchCondition.SearchCondition.CircuitType.Value);
}
result.TotalCount = query.Count();
var data = new List<SecondaryCircuit>();
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<SecondaryCircuitOutput>>(data);
result.Flag = true;
}
catch (Exception ex)
{
result.Message = ex.Message;
result.Flag = false;
Log4Helper.Error(this.GetType(), "FindDatas二次回路", ex);
}
return result;
}
/// <summary>
/// 获取回路关联的保护装置列表
/// </summary>
/// <param name="secondaryCircuitId"></param>
/// <returns></returns>
[HttpGet]
[ShowApi]
[AbpAllowAnonymous]
[DisableAuditing]
public RequestResult<List<SelectModelOutput>> FindProtectionDeviceForSelect(Guid secondaryCircuitId)
{
var rst = new RequestResult<List<SelectModelOutput>> { Flag = false };
try
{
var datas = _secondaryCircuitProtectionDeviceRepository.GetAllIncluding(t=>t.ProtectionDevice)
.Where(e => e.IsActive)
.Where(t => t.SecondaryCircuitId == secondaryCircuitId)
;
rst.ResultData = datas.Select(item => new SelectModelOutput
{
Value = item.Id.ToString().ToLower(),
Key = item.Id,
Text = item.ProtectionDevice.Name,
NodeObj = new { EquipmentInfoId = item.ProtectionDevice.EquipmentInfoId }
}).ToList();
rst.Flag = true;
}
catch (Exception ex)
{
rst.Message = ex.Message;
rst.Flag = false;
Log4Helper.Error(this.GetType(), "获取保护装置列表", ex);
}
return rst;
}
/// <summary>
/// 获取回路类型
/// </summary>
/// <returns></returns>
[HttpGet]
public RequestResult<List<SelectModelOutput>> GetCircuitTypes()
{
RequestResult<List<SelectModelOutput>> rst = new RequestResult<List<SelectModelOutput>>();
try
{
var data = base.GetEnumTypes<CircuitTypeEnum>();
rst.ResultData = data.ToList();
rst.Flag = true;
}
catch (Exception ex)
{
rst.Message = ex.Message;
rst.Flag = false;
Log4Helper.Error(this.GetType(), "获取保护装置列表", ex);
}
return rst;
}
/// <summary>
/// 关联保护装置到二次回路
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task<RequestEasyResult> LinkProtectionDeviceToCircuitAsync(List<Guid> deviceIds, [FromQuery]Guid circuitId)
{
RequestEasyResult rst = new RequestEasyResult();
try
{
var circuit = _secondaryCircuitRepository.GetAll().FirstOrDefault(t => t.Id == circuitId);
if (circuit!=null)
{
var secondaryCircuitProtectionDevices = _secondaryCircuitProtectionDeviceRepository.GetAll()
.Where(t => t.SecondaryCircuitId == circuitId)
.Select(t=>t.ProtectionDeviceId);
var protections = _protectionDeviceInfoRepository.GetAll()
.Where(t => deviceIds.Contains(t.Id))
.Select(t=>t.Id).ToList().Except(secondaryCircuitProtectionDevices);
foreach (var item in protections)
{
var entity = new SecondaryCircuitProtectionDevice
{
SecondaryCircuitId = circuitId,
ProtectionDeviceId = item,
IsActive = true,
};
await _secondaryCircuitProtectionDeviceRepository.InsertAsync(entity);
}
rst.Flag = true;
}
}
catch (Exception ex)
{
rst.Message = ex.Message;
rst.Flag = false;
Log4Helper.Error(this.GetType(), "关联保护装置到二次回路", ex);
}
return rst;
}
#if DEBUG
2024-11-29 09:03:54 +08:00
/// <summary>
/// 生成10个测试回路信息
/// </summary>
/// <returns></returns>
2024-10-18 18:41:02 +08:00
[HttpGet]
[ShowApi]
[DisableAuditing]
[AbpAllowAnonymous]
public async Task GenerateSecondaryCircuitTestData()
{
Guid transstationId = new Guid("08d87a1b-f61d-4673-8532-680d307e5d12");
var currentUserId = base.GetCurrentUser().Id;
// 测试数据列表
var testData = new List<SecondaryCircuit>();
2024-11-29 09:03:54 +08:00
string base64png = GetImageBase64(Path.Combine(base.GetAttachmentDirectory(), "images","circuit", "断路器控制回路.png"));
2024-10-18 18:41:02 +08:00
// 生成交流回路 20 条数据
for (int i = 1; i <= 20; i++)
{
var entity = new SecondaryCircuit
{
SeqNo = i,
Name = $"交流回路_{i}",
CircuitType = CircuitTypeEnum.ACCircuit,
2024-11-29 09:03:54 +08:00
PicturePath = $"/images/circuit/断路器控制回路.png",
PictureBase64 = base64png,
2024-10-18 18:41:02 +08:00
Code = $"ACC{i:D3}",
TransformerSubstationId = transstationId, // 生成一个随机的变电站ID可根据实际情况调整
Description = $"交流回路描述_{i}",
Remark = $"交流回路备注_{i}",
IsActive = true,
CreationTime = DateTime.Now,
CreatorUserId = currentUserId
};
testData.Add(entity);
}
// 生成控制回路 20 条数据
for (int i = 1; i <= 20; i++)
{
var entity = new SecondaryCircuit
{
SeqNo = i + 20,
Name = $"控制回路_{i}",
CircuitType = CircuitTypeEnum.ControlCircuit,
2024-11-29 09:03:54 +08:00
PicturePath = $"/images/circuit/断路器控制回路.png",
PictureBase64 = base64png,
2024-10-18 18:41:02 +08:00
Code = $"CTRL{i:D3}",
TransformerSubstationId = transstationId, // 生成一个随机的变电站ID可根据实际情况调整
Description = $"控制回路描述_{i}",
Remark = $"控制回路备注_{i}",
IsActive = true,
CreationTime = DateTime.Now,
CreatorUserId = currentUserId
};
testData.Add(entity);
}
// 生成光纤回路 20 条数据
for (int i = 1; i <= 20; i++)
{
var entity = new SecondaryCircuit
{
SeqNo = i + 40,
Name = $"光纤回路_{i}",
CircuitType = CircuitTypeEnum.OpticalFiberCircuit,
2024-11-29 09:03:54 +08:00
PicturePath = $"/images/circuit/断路器控制回路.png",
PictureBase64 = base64png,
2024-10-18 18:41:02 +08:00
Code = $"OFC{i:D3}",
TransformerSubstationId = transstationId, // 生成一个随机的变电站ID可根据实际情况调整
Description = $"光纤回路描述_{i}",
Remark = $"光纤回路备注_{i}",
IsActive = true,
CreationTime = DateTime.Now,
CreatorUserId = currentUserId
};
testData.Add(entity);
}
// 插入数据到数据库
await _secondaryCircuitRepository.InsertRangeAsync(testData);
Console.WriteLine("二次回路测试数据生成完毕!");
}
[HttpGet]
[ShowApi]
[DisableAuditing]
[AbpAllowAnonymous]
public async Task GenerateRandomSecondaryCircuitProtectionDeviceAssociations(int count)
{
// 获取所有的二次回路和保护装置
var secondaryCircuits = await _secondaryCircuitRepository.GetAllListAsync();
var protectionDevices = await _protectionDeviceInfoRepository.GetAllListAsync();
// 检查是否有足够的数据
if (!secondaryCircuits.Any() || !protectionDevices.Any())
{
Console.WriteLine("二次回路或保护装置数据不足,无法生成关联!");
return;
}
// 创建关联列表
var associations = new List<SecondaryCircuitProtectionDevice>();
// 创建指定数量的随机关联数据
var random = new Random();
for (int i = 0; i < count; i++)
{
var secondaryCircuit = secondaryCircuits[random.Next(secondaryCircuits.Count)];
var protectionDevice = protectionDevices[random.Next(protectionDevices.Count)];
var association = new SecondaryCircuitProtectionDevice
{
SecondaryCircuitId = secondaryCircuit.Id,
ProtectionDeviceId = protectionDevice.Id,
Remark = $"自动生成的关联 {i + 1}",
IsActive = true
};
associations.Add(association);
}
// 将生成的关联数据保存到数据库
await _secondaryCircuitProtectionDeviceRepository.InsertRangeAsync(associations);
Console.WriteLine("随机关联数据生成完毕!");
}
#endif
}
}