using Abp.Auditing; using Abp.Authorization; using Abp.Domain.Repositories; using Abp.Domain.Uow; using Abp.EntityFrameworkCore.Repositories; //using Google.Protobuf.WellKnownTypes; using Microsoft.AspNetCore.Components.Server.Circuits; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.IO; 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 { /// /// 二次回路类 /// public class SecondaryCircuitAppService : ISASAppServiceBase, ISecondaryCircuitAppService { private readonly IRepository _protectionDeviceInfoRepository; private readonly IRepository _secondaryCircuitRepository; private readonly IRepository _secondaryCircuitProtectionDeviceRepository; private readonly IUnitOfWorkManager _unitOfWorkManager; public SecondaryCircuitAppService(ISessionAppService sessionAppService , IRepository protectionDeviceInfoRepository , IRepository secondaryCircuitRepository , IRepository secondaryCircuitProtectionDeviceRepository , IUnitOfWorkManager unitOfWorkManager , IAppServiceConfiguration appServiceConfiguration) : base(sessionAppService, appServiceConfiguration) { _protectionDeviceInfoRepository = protectionDeviceInfoRepository; _secondaryCircuitRepository = secondaryCircuitRepository; _secondaryCircuitProtectionDeviceRepository = secondaryCircuitProtectionDeviceRepository; _unitOfWorkManager = unitOfWorkManager; } [HttpPost] public async Task> CreateOrUpdateAsync(EditSecondaryCircuitInput input) { RequestResult result = new RequestResult(); 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); entity.PicturePath = Path.Combine(base.GetAttachmentDirectory(), "images","circuit", $"{input.Name}.jpg"); base.Base64ToImage(input.PictureBase64, entity.PicturePath); entity.LastModificationTime = DateTime.Now; entity.LastModifierUserId = base.GetCurrentUser().Id; } else { // 新建逻辑 entity = ObjectMapper.Map(input); entity.CreationTime = DateTime.Now; entity.CreatorUserId = base.GetCurrentUser().Id; entity.PicturePath = Path.Combine(base.GetAttachmentDirectory(), "images","circuit", $"{input.Name}.jpg"); base.Base64ToImage(input.PictureBase64, entity.PicturePath); await _secondaryCircuitRepository.InsertAsync(entity); } result.ResultData = ObjectMapper.Map(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 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 DeleteByIdsAsync(List 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 DeleteSecondaryCircuitProtectionDeviceByIdsAsync([FromBody]List 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; } /// /// 获取回路数据 /// /// /// [HttpPost] [ShowApi] [DisableAuditing] [AbpAllowAnonymous] public RequestPageResult FindDatas(PageSearchCondition searchCondition) { RequestPageResult result = new RequestPageResult(); 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); } if (searchCondition.SearchCondition.CircuitType.HasValue&& Enum.IsDefined(typeof(CircuitTypeEnum), searchCondition.SearchCondition.CircuitType.Value)) { query = query.Where(x => x.CircuitType == searchCondition.SearchCondition.CircuitType.Value); } result.TotalCount = query.Count(); var data = new List(); if (searchCondition.PageSize> 0) { data = query.Skip((searchCondition.PageIndex - 1) * searchCondition.PageSize) .Take(searchCondition.PageSize) .ToList(); } else { data = query.ToList(); } result.ResultData = ObjectMapper.Map>(data); result.Flag = true; } catch (Exception ex) { result.Message = ex.Message; result.Flag = false; Log4Helper.Error(this.GetType(), "FindDatas二次回路", ex); } return result; } /// /// 获取回路关联的保护装置列表 /// /// /// [HttpGet] [ShowApi] [AbpAllowAnonymous] [DisableAuditing] public RequestResult> FindProtectionDeviceForSelect(Guid secondaryCircuitId) { var rst = new RequestResult> { 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; } /// /// 获取回路类型 /// /// [HttpGet] public RequestResult> GetCircuitTypes() { RequestResult> rst = new RequestResult>(); try { var data = base.GetEnumTypes(); rst.ResultData = data.ToList(); rst.Flag = true; } catch (Exception ex) { rst.Message = ex.Message; rst.Flag = false; Log4Helper.Error(this.GetType(), "获取保护装置列表", ex); } return rst; } /// /// 关联保护装置到二次回路 /// /// [HttpPost] public async Task LinkProtectionDeviceToCircuitAsync(List 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 /// /// 生成10个测试回路信息 /// /// [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(); string base64png = GetImageBase64(Path.Combine(base.GetAttachmentDirectory(), "images","circuit", "断路器控制回路.png")); // 生成交流回路 20 条数据 for (int i = 1; i <= 20; i++) { var entity = new SecondaryCircuit { SeqNo = i, Name = $"交流回路_{i}", CircuitType = CircuitTypeEnum.ACCircuit, PicturePath = $"/images/circuit/断路器控制回路.png", PictureBase64 = base64png, 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, PicturePath = $"/images/circuit/断路器控制回路.png", PictureBase64 = base64png, 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, PicturePath = $"/images/circuit/断路器控制回路.png", PictureBase64 = base64png, Code = $"OFC{i:D3}", TransformerSubstationId = transstationId, // 生成一个随机的变电站ID,可根据实际情况调整 Description = $"光纤回路描述_{i}", Remark = $"光纤回路备注_{i}", IsActive = true, CreationTime = DateTime.Now, CreatorUserId = currentUserId }; testData.Add(entity); } // 插入数据到数据库 foreach (var item in testData) { _secondaryCircuitRepository.Insert(item); } //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(); // 创建指定数量的随机关联数据 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); } // 将生成的关联数据保存到数据库 foreach (var item in associations) { _secondaryCircuitProtectionDeviceRepository.Insert(item); } //await _secondaryCircuitProtectionDeviceRepository.InsertRangeAsync(associations); Console.WriteLine("随机关联数据生成完毕!"); } #endif } }