using Abp.Auditing; using Abp.Authorization; using Abp.Collections.Extensions; using Abp.Domain.Entities; using Abp.Domain.Repositories; using Abp.Domain.Uow; using Amazon.Runtime.Internal.Transform; using Microsoft.AspNetCore.Mvc; using MongoDB.Driver.Linq; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Dynamic.Core; using System.Text; using System.Threading.Tasks; using System.Xml.Serialization; using ToolLibrary.LogHelper; using YunDa.ISAS.Application.Core; using YunDa.ISAS.Application.Core.Session; using YunDa.ISAS.Application.Core.SwaggerHelper; using YunDa.ISAS.DataTransferObject; using YunDa.ISAS.Entities.GeneralInformation; using YunDa.ISAS.Redis.Repositories; using YunDa.ISMS.BASE.Entities.Models; using YunDa.SOMS.DataTransferObject.CommonDto; using YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionDeviceInfoDto; using YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionDeviceInfoDto.HistoryData; using YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionDeviceInfoDto.SearchCondition; using YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionSettingDto; using YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.OperationReport; using YunDa.SOMS.Entities.GeneralInformation; namespace YunDa.ISAS.Application.GeneralInformation { /// /// 保护装置履历信息管理类 /// public class BoardCardInfoAppService : ISASAppServiceBase, IBoardCardInfoAppService { private readonly IRepository _equipmentInfoRepository; private readonly IRepository _protectionDeviceInfoRepository; private readonly IRepository _protectionDeviceTypeRepository; private readonly IRepository _protectionDeviceHistoryRepository; private readonly IRepository _boardCardInfoRepository; private readonly IRepository _boardCardHistoryRepository; private readonly IRepository _manufacturerInfoRepository; private readonly IRepository _imProtectDeviceRepository; private readonly IUnitOfWorkManager _unitOfWorkManager; IRedisRepository _deviceBoardStatesRedis; string deviceIORedisKey = "deviceIO"; IRedisRepository _deviceIOsRedis; // 定义 BoardType 与 BoardTypeId 的映射字典 Dictionary boardTypeMapping = new Dictionary { { "CPU插件", "J2CA" }, { "交流插件", "J2JA" }, { "开入插件", "J2IA" }, { "开出插件", "J2OA" }, { "操作插件", "J2OC" }, { "电源插件", "J2IA" }, { "液晶", "液晶" } }; public BoardCardInfoAppService( IRepository protectionDeviceInfoRepository, IUnitOfWorkManager unitOfWorkManager, IRepository imProtectDeviceRepository, IRepository equipmentInfoRepository, IRepository protectionDeviceHistoryRepository, IRepository boardCardInfoRepository, IRepository boardCardHistoryRepository, IRepository manufacturerInfoRepository, IRedisRepository deviceBoardStatesRedis, IRedisRepository deviceIOsRedis, IRepository protectionDeviceTypeRepository, ISessionAppService sessionAppService ) : base(sessionAppService) { _unitOfWorkManager = unitOfWorkManager; _equipmentInfoRepository = equipmentInfoRepository; _imProtectDeviceRepository = imProtectDeviceRepository; _protectionDeviceInfoRepository = protectionDeviceInfoRepository; _protectionDeviceHistoryRepository = protectionDeviceHistoryRepository; _boardCardInfoRepository = boardCardInfoRepository; _boardCardHistoryRepository = boardCardHistoryRepository; _manufacturerInfoRepository = manufacturerInfoRepository; _deviceBoardStatesRedis = deviceBoardStatesRedis; _deviceIOsRedis = deviceIOsRedis; _protectionDeviceTypeRepository = protectionDeviceTypeRepository; } public async Task> CreateOrUpdateAsync(EditBoardCardInput input) { RequestResult rst = new RequestResult(); try { if (boardTypeMapping.ContainsKey(input.BoardType)) { input.BoardTypeId = boardTypeMapping[input.BoardType]; } if (input.Id.HasValue) { InsertBoadHistory(input); } else { var entity = ObjectMapper.Map(input); entity.CreatorUserId = base.GetCurrentUser().Id; entity.CreationTime = DateTime.Now; entity = await _boardCardInfoRepository.InsertAsync(entity); var boardHistory = new BoardCardHistory { ContentJson = JsonConvert.SerializeObject(entity), CreationTime = DateTime.Now, CreatorUserId = base.GetCurrentUser().Id, Name = entity.BoardId, RecodeDate = DateTime.Now, BoardId = input.BoardId, BoardCardInfoId = entity.Id, ProtectionDeviceInfoId = input.ProtectionDeviceInfoId, EventDescription ="新建板卡信息台账", EventRecordType = EventRecordTypeEnum.Board, SeqNo = 1 }; await _boardCardHistoryRepository.InsertAsync(boardHistory); } rst.Flag = true; } catch (Exception ex) { rst.Message = ex.Message; rst.Flag = false; Log4Helper.Error(this.GetType(), "线路管理服务", ex); } return rst; } private void InsertBoadHistory(EditBoardCardInput input) { if (input.BoardId != null) { var entity = _boardCardInfoRepository.GetAllIncluding(t => t.ProtectionDeviceInfo) .FirstOrDefault(t => t.Id == input.Id ); if (entity != null) { // 记录更新前的数据 var originalContent = JsonConvert.SerializeObject(entity); // 初始化事件描述 StringBuilder eventDescription = new StringBuilder("板卡信息更新: "); if (entity.HardwareVersion != input.HardwareVersion) { eventDescription.Append($"硬件版本更新为'{input.HardwareVersion}', "); entity.HardwareVersion = input.HardwareVersion; } if (entity.InterfaceVersion != input.InterfaceVersion) { eventDescription.Append($"接口程序版本更新为'{input.InterfaceVersion}', "); entity.InterfaceVersion = input.InterfaceVersion; } if (entity.InterfaceChecksum != input.InterfaceChecksum) { eventDescription.Append($"接口程序校验码更新为'{input.InterfaceChecksum}', "); entity.InterfaceChecksum = input.InterfaceChecksum; } if (entity.ProtectionDatabaseVersion != input.ProtectionDatabaseVersion) { eventDescription.Append($"保护数据库版本更新为'{input.InterfaceDatabaseVersion}', "); entity.ProtectionDatabaseVersion = input.ProtectionDatabaseVersion; } if (entity.InterfaceDatabaseVersion != input.InterfaceDatabaseVersion) { eventDescription.Append($"接口数据库版本更新为'{input.InterfaceDatabaseVersion}', "); entity.InterfaceDatabaseVersion = input.InterfaceDatabaseVersion; } if (entity.ProtectionVersion != input.ProtectionVersion) { eventDescription.Append($"保护程序版本更新为'{input.ProtectionVersion}', "); entity.ProtectionVersion = input.ProtectionVersion; } if (entity.ProtectionChecksum != input.ProtectionChecksum) { eventDescription.Append($"保护程序校验码更新为'{input.ProtectionChecksum}', "); entity.ProtectionChecksum = input.ProtectionChecksum; } if (entity.BootVersion != input.BootVersion) { eventDescription.Append($"BOOT 版本更新为'{input.BootVersion}', "); entity.BootVersion = input.BootVersion; } if (entity.Iec61850Version != input.Iec61850Version) { eventDescription.Append($"IEC 61850 版本更新为'{input.Iec61850Version}', "); entity.Iec61850Version = input.Iec61850Version; } if (entity.FpgaVersion != input.FpgaVersion) { eventDescription.Append($"FPGA 版本更新为'{input.FpgaVersion}', "); entity.FpgaVersion = input.FpgaVersion; } if (entity.CidChecksum != input.CidChecksum) { eventDescription.Append($"CID 校验码更新为'{input.CidChecksum}', "); entity.CidChecksum = input.CidChecksum; } if (entity.CcdChecksum != input.CcdChecksum) { eventDescription.Append($"CCD 校验码更新为'{input.CcdChecksum}', "); entity.CcdChecksum = input.CcdChecksum; } if (entity.InstallationDate != input.InstallationDate) { eventDescription.Append($"安装时间更新为'{input.InstallationDate?.ToString()}', "); entity.InstallationDate = input.InstallationDate; } if (entity.ProductionDate != input.ProductionDate) { eventDescription.Append($"生产日期更新为'{input.ProductionDate?.ToString()}', "); entity.ProductionDate = input.ProductionDate; } if (entity.SerialNumber != input.SerialNumber) { eventDescription.Append($"出厂编号更新为'{input.SerialNumber}', "); entity.SerialNumber = input.SerialNumber; } if (entity.VerificationPerson != input.VerificationPerson) { eventDescription.Append($"检验人员更新为'{input.VerificationPerson}', "); entity.VerificationPerson = input.VerificationPerson; } if (entity.VerificationDate != input.VerificationDate) { eventDescription.Append($"检验日期更新为'{input.VerificationDate}', "); entity.VerificationDate = input.VerificationDate; } if (entity.VerificationRecords != input.VerificationRecords) { eventDescription.Append($"检验记录更新为'{input.VerificationRecords}', "); entity.VerificationRecords = input.VerificationRecords; } if (entity.MaintenanceRecord != input.MaintenanceRecord) { eventDescription.Append($"维修记录更新为'{input.MaintenanceRecord}', "); entity.MaintenanceRecord = input.MaintenanceRecord; } if (entity.ProgramVersion != input.ProgramVersion) { eventDescription.Append($"程序版本更新为'{input.ProgramVersion}', "); entity.ProgramVersion = input.ProgramVersion; } if (entity.ProgramVersion != input.ProgramVersionCrc) { eventDescription.Append($"程序版本校验码更新为'{input.ProgramVersionCrc}', "); entity.ProgramVersionCrc = input.ProgramVersionCrc; } // 检查是否有变化并记录历史 var updatedContent = JsonConvert.SerializeObject(entity); // 如果数据发生了变化,则记录历史 if (originalContent != updatedContent) { var history = new BoardCardHistory { ProtectionDeviceInfoId = entity.ProtectionDeviceInfoId, CreationTime = DateTime.Now, BoardId = entity.BoardId, SeqNo = 1, Name = entity.BoardId, BoardCardInfoId = entity.Id, RecodeDate = DateTime.Now, ContentJson = originalContent, // 记录更新前的内容 ContentNewJson = updatedContent, // 记录更新后的内容 EventDescription = eventDescription.ToString().TrimEnd(','), EventRecordType = EventRecordTypeEnum.Board, // 假设更新为事件类型 Remark = "自动记录板卡信息更新", IsSend = false // 如果不需要立即发送给主站 }; // 保存历史记录 _boardCardHistoryRepository.Insert(history); } } } } /// /// 扫码枪输入设备信息 /// /// /// [ShowApi] [AbpAllowAnonymous] [HttpPost] public RequestEasyResult ScanDeviceQRCode(EditBoardCardQrCodeInput input) { RequestEasyResult rst = new RequestEasyResult(); try { var repo = _protectionDeviceInfoRepository.GetAllIncluding(t => t.EquipmentInfo,t=>t.ProtectionDeviceType).ToList(); var boardCards = _boardCardInfoRepository.GetAll().ToList(); var protectionDevice = repo.FirstOrDefault(t => t.Name.Contains(input.ProtectionDeviceName)); if (protectionDevice != null) { var deviceBoardCard = boardCards.FirstOrDefault(t => t.ProtectionDeviceInfoId == protectionDevice.Id&&t.BoardId == input.BoardId); if (deviceBoardCard!=null) { if (deviceBoardCard.SerialNumber != input.SerialNumber || deviceBoardCard.MaintenanceRecord != input.MaintenanceRecord || deviceBoardCard.VerificationRecords != input.VerificationRecords || deviceBoardCard.VerificationDate != input.VerificationDate || deviceBoardCard.VerificationPerson != input.VerificationPerson || deviceBoardCard.ProductionDate != input.ProductionDate || deviceBoardCard.ProductionDate != input.ProductionDate ) { var deviceBoardCardHistory = _boardCardHistoryRepository.GetAll().Where(t => t.BoardCardInfoId == deviceBoardCard.Id).ToList(); var json = JsonConvert.SerializeObject(deviceBoardCard); var boardHistory = new BoardCardHistory { ContentJson = json, CreationTime = DateTime.Now, CreatorUserId = base.GetCurrentUser().Id, Name = deviceBoardCard.BoardId, RecodeDate = DateTime.Now, BoardId = input.BoardId, BoardCardInfoId = deviceBoardCard.Id, ProtectionDeviceInfoId = protectionDevice.Id, SeqNo = deviceBoardCardHistory.Count > 0 ? deviceBoardCardHistory.Max(t => t.SeqNo) + 1 : 1 }; deviceBoardCard.SerialNumber = input.SerialNumber; deviceBoardCard.ProductionDate = input.ProductionDate; deviceBoardCard.VerificationDate = input.VerificationDate; deviceBoardCard.VerificationPerson = input.VerificationPerson; deviceBoardCard.VerificationRecords = input.VerificationRecords; var newjson = JsonConvert.SerializeObject(deviceBoardCard); boardHistory.ContentNewJson = newjson; // 记录变更内容 var eventDescription = new StringBuilder(); // 通过判定每个字段是否发生变化,动态生成描述 if (deviceBoardCard.SerialNumber != input.SerialNumber) { eventDescription.AppendLine($"更换了设备的厂商序列号: {deviceBoardCard.SerialNumber} -> {input.SerialNumber}"); } if (deviceBoardCard.MaintenanceRecord != input.MaintenanceRecord) { eventDescription.AppendLine($"更新了设备的维修记录: {deviceBoardCard.MaintenanceRecord} -> {input.MaintenanceRecord}"); } if (deviceBoardCard.VerificationRecords != input.VerificationRecords) { eventDescription.AppendLine($"更改了设备的验证记录: {deviceBoardCard.VerificationRecords} -> {input.VerificationRecords}"); } if (deviceBoardCard.VerificationDate != input.VerificationDate) { eventDescription.AppendLine($"修改了设备的验证日期: {deviceBoardCard.VerificationDate} -> {input.VerificationDate}"); } if (deviceBoardCard.VerificationPerson != input.VerificationPerson) { eventDescription.AppendLine($"更新了设备的验证人员: {deviceBoardCard.VerificationPerson} -> {input.VerificationPerson}"); } if (deviceBoardCard.ProductionDate != input.ProductionDate) { eventDescription.AppendLine($"更改了设备的生产日期: {deviceBoardCard.ProductionDate} -> {input.ProductionDate}"); } if (deviceBoardCard.ProgramVersion != input.ProgramVersion) { eventDescription.Append($"程序版本更新为'{input.ProgramVersion}', "); deviceBoardCard.ProgramVersion = input.ProgramVersion; } if (deviceBoardCard.ProgramVersion != input.ProgramVersionCrc) { eventDescription.Append($"程序版本校验码更新为'{input.ProgramVersionCrc}', "); deviceBoardCard.ProgramVersionCrc = input.ProgramVersionCrc; } boardHistory.EventDescription = eventDescription.ToString().TrimEnd(','); boardHistory.EventRecordType = EventRecordTypeEnum.Board; boardHistory.Remark = input.Remark; _boardCardHistoryRepository.Insert(boardHistory); } } else { //rst.Message = "未找到对应板卡"; } rst.Flag = true; } else { rst.Message = "未找到对应装置"; } } catch (Exception ex) { rst.Message = ex.Message; rst.Flag = false; Log4Helper.Error(this.GetType(), "", ex); } return rst; } public async Task DeleteByIdAsync(Guid id) { RequestEasyResult rst = new RequestEasyResult(); return rst; } /// /// 删除板卡信息 /// /// /// [HttpPost] public async Task DeleteByIdsAsync(List ids) { RequestEasyResult rst = new RequestEasyResult(); try { await _boardCardInfoRepository.DeleteAsync(t => ids.Contains(t.Id)); rst.Flag = true; } catch (Exception ex) { rst.Message = ex.Message; rst.Flag = false; Log4Helper.Error(this.GetType(), "保护装置信息管理服务", ex); } return rst; } /// /// 查询保护装置板卡信息 /// /// /// [ShowApi] [AbpAllowAnonymous] [DisableAuditing] [HttpPost] public RequestPageResult FindDatas(PageSearchCondition searchCondition) { RequestPageResult rst = new RequestPageResult(); try { var repo = _boardCardInfoRepository.GetAllIncluding(t=>t.ProtectionDeviceInfo,t=>t.ManufacturerInfo) .WhereIf(searchCondition.SearchCondition.EquipmentInfoId.HasValue, t => t.ProtectionDeviceInfo?.EquipmentInfoId == searchCondition.SearchCondition.EquipmentInfoId) .WhereIf(searchCondition.SearchCondition.ProtectionDeviceInfoId.HasValue, t => t.ProtectionDeviceInfoId == searchCondition.SearchCondition.ProtectionDeviceInfoId); rst.TotalCount = repo.Count(); if (searchCondition.PageSize>0&& searchCondition.PageIndex>0) { int skipCount = searchCondition.PageSize * (searchCondition.PageIndex - 1); var tmpData = repo.Skip(skipCount).Take(searchCondition.PageSize); rst.ResultData = ObjectMapper.Map>(tmpData); } else { rst.ResultData = ObjectMapper.Map>(repo); } rst.Flag = true; } catch (Exception ex) { rst.Message = ex.Message; rst.Flag = false; Log4Helper.Error(this.GetType(), "保护装置信息管理服务", ex); } return rst; } /// /// 查询板卡历史数据 /// /// /// [ShowApi] [AbpAllowAnonymous] [DisableAuditing] [HttpGet] public RequestResult> FindHistoryDataByEquipmentInfoId(Guid? equipmentInfoId) { RequestResult> rst = new RequestResult>(); try { List historys = new List(); var protectionDevice = _protectionDeviceInfoRepository.GetAllIncluding(t => t.EquipmentInfo) .FirstOrDefault(t => t.EquipmentInfoId == equipmentInfoId); if (protectionDevice != null) { var boards = _boardCardHistoryRepository.GetAll() .Where(t => t.ProtectionDeviceInfoId == protectionDevice.Id) .OrderByDescending(t => t.RecodeDate); historys = ObjectMapper.Map>(boards); rst.Flag = true; rst.ResultData = historys; rst.TotalCount = historys.Count; } } catch (Exception ex) { rst.Message = ex.Message; rst.Flag = false; Log4Helper.Error(this.GetType(), "保护装置信息管理服务", ex); } return rst; } /// /// 查询板卡历史版本数据 /// /// /// [ShowApi] [AbpAllowAnonymous] [DisableAuditing] [HttpGet] public RequestResult> FindHistorySoftVersionByEquipmentInfoId(Guid? equipmentInfoId) { RequestResult> rst = new(); try { List historys = new List(); var protectionDevice = _protectionDeviceInfoRepository.GetAllIncluding(t => t.EquipmentInfo) .FirstOrDefault(t => t.EquipmentInfoId == equipmentInfoId); if (protectionDevice != null) { var boards = _boardCardHistoryRepository.GetAll() .Where(t => t.ProtectionDeviceInfoId == protectionDevice.Id) .OrderByDescending(t => t.RecodeDate); foreach ( var board in boards) { BoardCardSolftVersionOutput boardCardSolftVersionOutput = new BoardCardSolftVersionOutput(); if (string.IsNullOrEmpty( board.ContentNewJson)) { if (!string.IsNullOrEmpty(board.ContentJson)) { boardCardSolftVersionOutput = JsonConvert.DeserializeObject(board.ContentJson); boardCardSolftVersionOutput.RecodeDate = board.RecodeDate; } } else { boardCardSolftVersionOutput = JsonConvert.DeserializeObject(board.ContentNewJson); boardCardSolftVersionOutput.RecodeDate = board.RecodeDate; } if (boardCardSolftVersionOutput.RecodeDate.HasValue) { historys.Add(boardCardSolftVersionOutput); } } rst.Flag = true; rst.ResultData = historys; rst.TotalCount = historys.Count; } } catch (Exception ex) { rst.Message = ex.Message; rst.Flag = false; Log4Helper.Error(this.GetType(), "保护装置信息管理服务", ex); } return rst; } public RequestResult GetProtectionDeviceQRcode(Guid id) { RequestResult rst = new RequestResult(); return rst; } string deviceBoardStatesRedisKey = "deviceBoardStates"; List iopositions = new List { new NameIntValueProperty("运行", 0), new NameIntValueProperty("告警", 0), new NameIntValueProperty("IO插件1", 0), new NameIntValueProperty("IO插件2", 0), new NameIntValueProperty("IO插件3", 0), new NameIntValueProperty("IO插件4", 0), new NameIntValueProperty("电源插件(IO5)", 0), new NameIntValueProperty("液晶", 0) }; /// /// 获取板卡状态 /// /// /// /// [HttpGet] [AbpAllowAnonymous] [ShowApi] public async Task>> GetBoardStateInfo(Guid equipmentId,Guid deviceId) { RequestResult> rst = new RequestResult>(); try { ProtectionDeviceInfo protectionDeviceInfo = null; if (deviceId == default) { protectionDeviceInfo = _protectionDeviceInfoRepository.GetAll().FirstOrDefault(t => t.EquipmentInfoId == equipmentId); } else { protectionDeviceInfo = _protectionDeviceInfoRepository.Get(deviceId); } if (protectionDeviceInfo != null) { var state = await _deviceBoardStatesRedis.HashSetGetAllAsync(deviceBoardStatesRedisKey, protectionDeviceInfo.DeviceAddress.ToString()); if (state != null) { rst.ResultData = state.States.Select(t => new DeviceRunState { Name = t.Name, State = t.Value }).ToList(); } else { rst.ResultData = iopositions.Select(t => new DeviceRunState { Name = t.Name, State = t.Value }).ToList(); } rst.Flag = true; } } catch (Exception ex) { rst.Flag = false; rst.Message = ex.Message; } return rst; } /// /// 获取板卡IO信息 /// /// /// /// [HttpGet] [AbpAllowAnonymous] [ShowApi] public async Task>> GetBoardIOState(Guid equipmentId, Guid deviceId) { RequestResult> rst = new RequestResult>(); try { ProtectionDeviceInfo protectionDeviceInfo = null; if (deviceId == default) { protectionDeviceInfo = _protectionDeviceInfoRepository.GetAll().FirstOrDefault(t => t.EquipmentInfoId == equipmentId); } else { protectionDeviceInfo = _protectionDeviceInfoRepository.Get(deviceId); } if (protectionDeviceInfo != null) { var states =await _deviceIOsRedis.HashSetGetDicAllAsync(deviceIORedisKey); var datas = states.Where(t => t.Key.Contains($"{protectionDeviceInfo.DeviceAddress}_")).GroupBy(t=>t.Key.Split('_')[1]).Select(t => new IOStateList { Name ="B0"+ t.Key, IOStates =t.Select(x=>x.Value).ToList(), }).OrderBy(t=>t.Name); rst.ResultData = datas.ToList(); rst.Flag = true; } } catch (Exception ex) { rst.Flag = false; rst.Message = ex.Message; } return rst; } /// /// 生成板卡信息 /// /// [ShowApi] [AbpAllowAnonymous] [HttpGet] public RequestEasyResult SpwanBoardInfoList() { RequestEasyResult rst = new RequestEasyResult(); try { var boards = _boardCardInfoRepository.GetAll().ToList(); var devices = _protectionDeviceInfoRepository.GetAll(); var manfac = _manufacturerInfoRepository.GetAll().FirstOrDefault(t => t.ManufacturerName.Contains("运达")); foreach (var device in devices) { var boardInfos = boards.Where(t => t.ProtectionDeviceInfoId == device.Id); if (boardInfos.Count() > 0) { continue; } // 插件信息表 var pluginData = new BoardCardInfo[] { new BoardCardInfo{ BoardId = "B01", SeqNo = 1, SerialNumber = "1933CA00300001", BoardType = "CPU插件", BoardTypeId = "J2CA", ProductionDate = new DateTime(2019, 8, 13), Remark = "CPU 主插件" }, new BoardCardInfo{ BoardId = "B02", SeqNo = 2, SerialNumber = "1933JA04100001", BoardType = "交流插件", BoardTypeId = "J2JA", ProductionDate = new DateTime(2019, 8, 13), Remark = "交流插件" }, new BoardCardInfo{ BoardId = "B03", SeqNo = 3, SerialNumber = "2233IA220V400001", BoardType = "开入插件", BoardTypeId = "J2IA", ProductionDate = new DateTime(2022, 8, 13), Remark = "开入插件1" }, new BoardCardInfo{ BoardId = "B04", SeqNo = 4, SerialNumber = "2233IA220V400002", BoardType = "开入插件", BoardTypeId = "J2IA", ProductionDate = new DateTime(2022, 8, 13), Remark = "开入插件2" }, new BoardCardInfo{ BoardId = "B05", SeqNo = 5, SerialNumber = "2233OA0000400001", BoardType = "开出插件", BoardTypeId = "J2OA", ProductionDate = new DateTime(2022, 8, 13), Remark = "开出插件" }, new BoardCardInfo{ BoardId = "B06", SeqNo = 6, SerialNumber = "2233OC220V400001", BoardType = "操作插件", BoardTypeId = "J2OC", ProductionDate = new DateTime(2022, 8, 13), Remark = "操作插件" }, new BoardCardInfo{ BoardId = "B07", SeqNo = 7, SerialNumber = "1933DA00100001", BoardType = "电源插件", BoardTypeId = "J2IA", ProductionDate = new DateTime(2019, 8, 13), Remark = "电源插件" }, new BoardCardInfo{ BoardId = "液晶", SeqNo = 8, SerialNumber = "1933DA00100001", BoardType = "液晶", BoardTypeId = "液晶", ProductionDate = new DateTime(2019, 8, 13), Remark = "液晶" }, }; // 模拟插入插件数据 foreach (var plugin in pluginData) { var boardCardInfo = new BoardCardInfo { SeqNo = plugin.SeqNo, BoardId = plugin.BoardId, BoardType = plugin.BoardType, ManufacturerInfoId = manfac.Id, ProtectionDeviceInfoId = device.Id, IsActive = true, SerialNumber = plugin.SerialNumber, ProductionDate = plugin.ProductionDate, Remark = plugin.Remark, InstallationDate = DateTime.Now.AddMonths(-3) // 默认安装时间 }; if (plugin.SeqNo == 1) { boardCardInfo.HardwareVersion = "1.0.0"; boardCardInfo.InterfaceVersion = "2.0.0"; boardCardInfo.InterfaceChecksum = "8b18"; boardCardInfo.InterfaceDatabaseVersion = "v1.104"; boardCardInfo.ProtectionDatabaseVersion = "v1.104"; boardCardInfo.SystemVersion = "3.10.10-ADI-2013R1"; boardCardInfo.ProtectionVersion = "v5.3.1"; boardCardInfo.ProtectionChecksum = "8b18"; boardCardInfo.BootVersion = "BOOT2024"; boardCardInfo.Iec61850Version = "IEC61850-V2"; boardCardInfo.FpgaVersion = "v4.000"; boardCardInfo.CidChecksum = "CIDCHK2024"; boardCardInfo.CcdChecksum = "CCDCHK2024"; boardCardInfo.VerificationPerson = "贺严玲"; boardCardInfo.VerificationDate = "2024-01-01"; boardCardInfo.VerificationRecords = "全部通过"; boardCardInfo.CreationTime = DateTime.Now; } // 模拟插入数据库 var entity = _boardCardInfoRepository.Insert(boardCardInfo); var boardHistory = new BoardCardHistory { ContentJson = JsonConvert.SerializeObject(entity), CreationTime = DateTime.Now, CreatorUserId = base.GetCurrentUser().Id, Name = entity.BoardId, RecodeDate = DateTime.Now, BoardId = entity.BoardId, BoardCardInfoId = entity.Id, ProtectionDeviceInfoId = device.Id, EventDescription ="建立板卡信息台账", EventRecordType = EventRecordTypeEnum.Board, SeqNo = 1 }; _boardCardHistoryRepository.Insert(boardHistory); } } rst.Flag = true; } catch (Exception ex) { throw; } return rst; } /// /// 更新版本信息 /// /// [ShowApi] [AbpAllowAnonymous] [HttpPost] public RequestEasyResult ModifyBoardInfoList(ProtectionDeviceVersionInfo input) { RequestEasyResult rst = new RequestEasyResult(); try { var boards = _boardCardInfoRepository.GetAll().ToList(); var devices = _protectionDeviceInfoRepository.GetAll().Where(t => t.DeviceAddress == input.DeviceAddr).ToList(); var protectionDeviceTypes = _protectionDeviceTypeRepository.GetAll().ToList(); if (devices.Count > 0) { var device = devices[0]; device.ProtectionDeviceTypeId = protectionDeviceTypes.FirstOrDefault(t => t.Model == input.DeviceType)?.Id; var deviceBoards = boards.Where(t => t.ProtectionDeviceInfoId == device.Id).ToList(); // 记录历史数据的方法 void RecordBoardCardHistory(BoardCardInfo oldCardInfo, BoardCardInfo newCardInfo, string boardId) { if (oldCardInfo != null && newCardInfo != null) { var eventDescription = new StringBuilder(); var eventRecordType = EventRecordTypeEnum.Software; // 默认修改事件类型 // 比较各个字段,如果不一致则记录 if (oldCardInfo.FpgaVersion != newCardInfo.FpgaVersion) eventDescription.AppendLine($"FPGA版本更改: {oldCardInfo.FpgaVersion} -> {newCardInfo.FpgaVersion}"); if (oldCardInfo.InterfaceDatabaseVersion != newCardInfo.InterfaceDatabaseVersion) eventDescription.AppendLine($"接口数据库版本更改: {oldCardInfo.InterfaceDatabaseVersion} -> {newCardInfo.InterfaceDatabaseVersion}"); if (oldCardInfo.InterfaceVersion != newCardInfo.InterfaceVersion) eventDescription.AppendLine($"接口版本更改: {oldCardInfo.InterfaceVersion} -> {newCardInfo.InterfaceVersion}"); if (oldCardInfo.InterfaceChecksum != newCardInfo.InterfaceChecksum) eventDescription.AppendLine($"接口校验和更改: {oldCardInfo.InterfaceChecksum} -> {newCardInfo.InterfaceChecksum}"); if (oldCardInfo.SystemVersion != newCardInfo.SystemVersion) eventDescription.AppendLine($"系统版本更改: {oldCardInfo.SystemVersion} -> {newCardInfo.SystemVersion}"); if (oldCardInfo.ProtectionChecksum != newCardInfo.ProtectionChecksum) eventDescription.AppendLine($"保护校验和更改: {oldCardInfo.ProtectionChecksum} -> {newCardInfo.ProtectionChecksum}"); if (oldCardInfo.ProtectionDatabaseVersion != newCardInfo.ProtectionDatabaseVersion) eventDescription.AppendLine($"保护数据库版本更改: {oldCardInfo.ProtectionDatabaseVersion} -> {newCardInfo.ProtectionDatabaseVersion}"); if (oldCardInfo.ProtectionVersion != newCardInfo.ProtectionVersion) eventDescription.AppendLine($"保护版本更改: {oldCardInfo.ProtectionVersion} -> {newCardInfo.ProtectionVersion}"); if (oldCardInfo.YjVersion != newCardInfo.YjVersion) eventDescription.AppendLine($"液晶版本更改: {oldCardInfo.YjVersion} -> {newCardInfo.YjVersion}"); if (oldCardInfo.YjCrc != newCardInfo.YjCrc) eventDescription.AppendLine($"液晶CRC更改: {oldCardInfo.YjCrc} -> {newCardInfo.YjCrc}"); if (eventDescription.Length > 0) { var json = JsonConvert.SerializeObject(oldCardInfo); var newJson = JsonConvert.SerializeObject(newCardInfo); // 创建历史记录 var historyRecord = new BoardCardHistory { ProtectionDeviceInfoId = device.Id, BoardCardInfoId = oldCardInfo.Id, BoardId = boardId, RecodeDate = DateTime.Now, ContentJson = json, ContentNewJson = newJson, EventDescription = eventDescription.ToString().TrimEnd(','), EventRecordType = eventRecordType, SeqNo = deviceBoards.Count > 0 ? deviceBoards.Max(t => t.SeqNo) + 1 : 1, IsSend = false // 默认为未发送,您可以根据需要调整 }; // 记录历史 _boardCardHistoryRepository.Insert(historyRecord); } } } // 保护板卡 BoardCardInfo cpuCardInfo = deviceBoards.FirstOrDefault(t => t.BoardId == "B01"); if (cpuCardInfo != null) { var newCpuCardInfo = new BoardCardInfo { FpgaVersion = input.FpgaVer, InterfaceDatabaseVersion = input.CommcpuCfgVer, InterfaceVersion = input.CommcpuVer, InterfaceChecksum = input.CommcpuCrc, SystemVersion = input.LinuxVer, ProtectionChecksum = input.ProtectCrc, ProtectionDatabaseVersion = input.ProtectCfgVer, ProtectionVersion = input.ProtectVer }; RecordBoardCardHistory(cpuCardInfo, newCpuCardInfo, "B01"); } // 液晶板卡 BoardCardInfo ioyjCardInfo = deviceBoards.FirstOrDefault(t => t.BoardId == "液晶"); if (ioyjCardInfo != null) { var newIoyjCardInfo = new BoardCardInfo { YjVersion = input.YjVer, YjCrc = input.YjCrc }; RecordBoardCardHistory(ioyjCardInfo, newIoyjCardInfo, "液晶"); } // IO板卡 if (input.IoVersion.Count > 0) { var boardIdMap = new Dictionary { { "B03", 0 }, { "B04", 1 }, { "B05", 2 }, { "B06", 3 }, { "B07", 4 } }; foreach (var boardId in boardIdMap.Keys) { var boardCardInfo = deviceBoards.FirstOrDefault(t => t.BoardId == boardId); if (boardCardInfo != null) { var ioVersion = input.IoVersion[boardIdMap[boardId]]; var newIoCardInfo = new BoardCardInfo { IOVersion = ioVersion.IoVer, IOCrc = ioVersion.IoCrc }; RecordBoardCardHistory(boardCardInfo, newIoCardInfo, boardId); } } } } rst.Flag = true; } catch (Exception ex) { rst.Message = ex.Message; } return rst; } /// /// 生成板卡信息 /// /// [ShowApi] [AbpAllowAnonymous] public async Task SpwanBoardMancfactoryJDYDList() { RequestEasyResult rst = new RequestEasyResult(); try { var manfac = _manufacturerInfoRepository.GetAll().FirstOrDefault(t => t.ManufacturerName.Contains("运达")); if (manfac!=null) { using (var unitOfWork = _unitOfWorkManager.Begin()) { var boards = _boardCardInfoRepository.GetAll(); foreach (var board in boards) { board.ManufacturerInfoId = manfac.Id; board.BoardTypeId = "JDYD"; } await unitOfWork.CompleteAsync(); } using (var unitOfWork = _unitOfWorkManager.Begin()) { var devices = _protectionDeviceInfoRepository.GetAllIncluding(t => t.EquipmentInfo); foreach (var device in devices) { device.EquipmentInfo.ManufacturerInfoId = manfac.Id; } await unitOfWork.CompleteAsync(); } } } catch (Exception ex) { throw; } return rst; } /// /// 填充出厂编号 /// /// [ShowApi] [AbpAllowAnonymous] [HttpGet] public async Task UpdateProtetionInfoForHistoryTest() { RequestEasyResult rst = new RequestEasyResult(); try { List datas; using (var unitOfWork = _unitOfWorkManager.Begin()) { datas = _boardCardInfoRepository.GetAllIncluding(t=>t.ProtectionDeviceInfo).ToList(); await unitOfWork.CompleteAsync(); } Random random = new Random(); for (int i = 0; i < 3; i++) { foreach (var data in datas) { EditBoardCardQrCodeInput deviceInfo = new EditBoardCardQrCodeInput { ProtectionDeviceName = data.ProtectionDeviceInfo.Name, BoardId = data.BoardId, BoardType = data.BoardType, SerialNumber = "210" + random.Next(100000, 1000000).ToString(), // 出厂编号设为 "210" 开头 + 6 位随机数 ProductionDate = new DateTime(2023, 5, 15), // 示例生产日期 VerificationPerson = "贺严玲", // 示例检验人员 VerificationDate = DateTime.Now.AddDays(-100 + i).ToString("yyyy-MM-dd"), // 检验日期设为当前日期 VerificationRecords = "检验板卡外观及功能,均符合要求" // 示例检验记录 }; using (var unitOfWork = _unitOfWorkManager.Begin()) { ScanDeviceQRCode(deviceInfo); await unitOfWork.CompleteAsync(); } } } } catch (Exception ex) { throw; } return rst; } /// /// 生成初始的历史记录 /// /// [ShowApi] [AbpAllowAnonymous] [HttpGet] public RequestEasyResult SpawnBoardHistory() { var rst = new RequestEasyResult(); try { var boards = _boardCardInfoRepository.GetAllIncluding(t=>t.ProtectionDeviceInfo).ToList(); // 模拟插入数据库 foreach (var board in boards) { var boardHistory = new BoardCardHistory { ContentJson = JsonConvert.SerializeObject(board), CreationTime = DateTime.Now, CreatorUserId = base.GetCurrentUser().Id, Name = board.BoardId, RecodeDate = board.CreationTime, BoardId = board.BoardId, BoardCardInfoId = board.Id, EventRecordType = EventRecordTypeEnum.Board, EventDescription = "创建板卡信息台账", ProtectionDeviceInfoId = board.ProtectionDeviceInfoId, SeqNo = 1 }; _boardCardHistoryRepository.Insert(boardHistory); } rst.Flag = true; } catch (Exception e) { throw; } return rst; } } }