435 lines
19 KiB
C#
Raw Normal View History

2024-10-18 18:41:02 +08:00
using Abp.Auditing;
using Abp.Authorization;
using Abp.Collections.Extensions;
using Abp.Domain.Repositories;
using Abp.Domain.Uow;
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.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.ISMS.BASE.Entities.Models;
using YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionDeviceInfoDto;
using YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionDeviceInfoDto.HistoryData;
using YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionDeviceInfoDto.SearchCondition;
using YunDa.SOMS.Entities.GeneralInformation;
namespace YunDa.ISAS.Application.GeneralInformation
{
/// <summary>
/// 保护装置履历信息管理类
/// </summary>
public class BoardCardInfoAppService : ISASAppServiceBase, IBoardCardInfoAppService
{
private readonly IRepository<EquipmentInfo, Guid> _equipmentInfoRepository;
private readonly IRepository<ProtectionDeviceInfo, Guid> _protectionDeviceInfoRepository;
private readonly IRepository<ProtectionDeviceHistory, Guid> _protectionDeviceHistoryRepository;
private readonly IRepository<BoardCardInfo, Guid> _boardCardInfoRepository;
private readonly IRepository<BoardCardHistory, Guid> _boardCardHistoryRepository;
private readonly IRepository<ImProtectDevice,string> _imProtectDeviceRepository;
private readonly IUnitOfWorkManager _unitOfWorkManager;
public BoardCardInfoAppService(
IRepository<ProtectionDeviceInfo, Guid> protectionDeviceInfoRepository,
IUnitOfWorkManager unitOfWorkManager,
IRepository<ImProtectDevice, string> imProtectDeviceRepository,
IRepository<EquipmentInfo, Guid> equipmentInfoRepository,
IRepository<ProtectionDeviceHistory, Guid> protectionDeviceHistoryRepository,
IRepository<BoardCardInfo, Guid> boardCardInfoRepository,
IRepository<BoardCardHistory, Guid> boardCardHistoryRepository,
ISessionAppService sessionAppService
) :
base(sessionAppService)
{
_unitOfWorkManager = unitOfWorkManager;
_equipmentInfoRepository = equipmentInfoRepository;
_imProtectDeviceRepository = imProtectDeviceRepository;
_protectionDeviceInfoRepository = protectionDeviceInfoRepository;
_protectionDeviceHistoryRepository = protectionDeviceHistoryRepository;
_boardCardInfoRepository = boardCardInfoRepository;
_boardCardHistoryRepository = boardCardHistoryRepository;
}
public async Task<RequestResult<BoardCardInfoOutput>> CreateOrUpdateAsync(EditBoardCardInput input)
{
RequestResult<BoardCardInfoOutput> rst = new RequestResult<BoardCardInfoOutput>();
try
{
if (input.Id.HasValue)
{
var entity = _boardCardInfoRepository.GetAll().FirstOrDefault(t => t.Id == input.Id);
if (entity!=null)
{
entity.LastModificationTime = DateTime.Now;
entity.LastModifierUserId = base.GetCurrentUser().Id;
ObjectMapper.Map(input, entity);
}
}
else
{
var entity = ObjectMapper.Map<BoardCardInfo>(input);
entity.CreatorUserId = base.GetCurrentUser().Id;
entity.CreationTime = DateTime.Now;
await _boardCardInfoRepository.InsertAsync(entity);
}
rst.Flag = true;
}
catch (Exception ex)
{
rst.Message = ex.Message;
rst.Flag = false;
Log4Helper.Error(this.GetType(), "线路管理服务", ex);
}
return rst;
}
/// <summary>
/// 扫码枪输入设备信息
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[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)
{
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 = protectionDevice.Name,
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;
_boardCardHistoryRepository.Insert(boardHistory);
}
}
else
{
_boardCardInfoRepository.Insert(new BoardCardInfo
{
SeqNo = 1,
BoardId=input.BoardId,
SerialNumber=input.SerialNumber,
BoardType=input.BoardType,
ProductionDate=input.ProductionDate,
VerificationDate=input.VerificationDate,
VerificationPerson=input.VerificationPerson,
VerificationRecords=input.VerificationRecords,
ProtectionDeviceInfoId=deviceBoardCard.Id,
});
//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<RequestEasyResult> DeleteByIdAsync(Guid id)
{
RequestEasyResult rst = new RequestEasyResult();
return rst;
}
/// <summary>
/// 删除板卡信息
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
[HttpPost]
public async Task<RequestEasyResult> DeleteByIdsAsync(List<Guid> 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;
}
/// <summary>
/// 查询保护装置板卡信息
/// </summary>
/// <param name="searchCondition"></param>
/// <returns></returns>
[ShowApi]
[AbpAllowAnonymous]
[DisableAuditing]
[HttpPost]
public RequestPageResult<BoardCardInfoOutput> FindDatas(PageSearchCondition<BoardCardInfoSearchConditionInput> searchCondition)
{
RequestPageResult<BoardCardInfoOutput> rst = new RequestPageResult<BoardCardInfoOutput>();
try
{
var repo = _boardCardInfoRepository.GetAllIncluding(t=>t.ProtectionDeviceInfo)
.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<List<BoardCardInfoOutput>>(tmpData);
}
else
{
rst.ResultData = ObjectMapper.Map<List<BoardCardInfoOutput>>(repo);
}
rst.Flag = true;
}
catch (Exception ex)
{
rst.Message = ex.Message;
rst.Flag = false;
Log4Helper.Error(this.GetType(), "保护装置信息管理服务", ex);
}
return rst;
}
/// <summary>
/// 查询板卡历史数据
/// </summary>
/// <param name="equipmentInfoId"></param>
/// <returns></returns>
[ShowApi]
[AbpAllowAnonymous]
[DisableAuditing]
[HttpGet]
public RequestResult<List<BoardCardHistoryOutput>> FindHistoryDataByEquipmentInfoId(Guid? equipmentInfoId)
{
RequestResult<List<BoardCardHistoryOutput>> rst = new RequestResult<List<BoardCardHistoryOutput>>();
try
{
List<BoardCardHistoryOutput> historys = new List<BoardCardHistoryOutput>();
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);
foreach (var board in boards)
{
BoardCardInfo boardCardInfo1 = JsonConvert.DeserializeObject<BoardCardInfo>(board.ContentJson);
BoardCardInfo boardCardInfo2 = JsonConvert.DeserializeObject<BoardCardInfo>(board.ContentNewJson);
BoardCardHistoryOutput boardCardHistoryOutput1 = new BoardCardHistoryOutput()
{
RecodeDate = board.RecodeDate,
BoardId = board.BoardId,
PostUpdate = ObjectMapper.Map<BoardCardHistoryViewOutput>(boardCardInfo2),
PrioUpdate = ObjectMapper.Map<BoardCardHistoryViewOutput>(boardCardInfo1),
SeqNo = board.SeqNo,
};
historys.Add(boardCardHistoryOutput1);
}
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<string> GetProtectionDeviceQRcode(Guid id)
{
RequestResult<string> rst = new RequestResult<string>();
return rst;
}
#if DEBUG
/// <summary>
/// 生成板卡信息
/// </summary>
/// <returns></returns>
[ShowApi]
[AbpAllowAnonymous]
public RequestEasyResult SpwanBoardInfoList()
{
RequestEasyResult rst = new RequestEasyResult();
try
{
if (_boardCardInfoRepository.Count()==0)
{
var devices = _protectionDeviceInfoRepository.GetAll();
foreach (var device in devices)
{
for (int i = 1; i < 7; i++)
{
var boardCardInfo = new BoardCardInfo
{
SeqNo = i,
BoardId = "B0" + i,
BoardType = i == 1 ? "CPU插件" : "IO插件",
ProtectionDeviceInfoId = device.Id,
IsActive = true
};
// 如果 i == 1赋值所有属性
if (i == 1)
{
boardCardInfo.HardwareVersion = "1.0.0";
boardCardInfo.InterfaceVersion = "2.0.0";
boardCardInfo.InterfaceChecksum = "ABCD1234";
boardCardInfo.DatabaseVersion = "v2024.1";
boardCardInfo.ProtectionVersion = "v5.3.1";
boardCardInfo.ProtectionChecksum = "CHECK1234";
boardCardInfo.BootVersion = "BOOT2024";
boardCardInfo.Iec61850Version = "IEC61850-V2";
boardCardInfo.FpgaVersion = "FPGA-X1";
boardCardInfo.CidChecksum = "CIDCHK2024";
boardCardInfo.CcdChecksum = "CCDCHK2024";
boardCardInfo.InstallationDate = DateTime.Now.AddMonths(-6);
boardCardInfo.ProductionDate = DateTime.Now.AddMonths(-12);
boardCardInfo.SerialNumber = "SN202401";
boardCardInfo.VerificationPerson = "John Doe";
boardCardInfo.VerificationDate = "2024-01-01";
boardCardInfo.VerificationRecords = "全部通过";
boardCardInfo.Remark = "CPU 主插件";
}
// 如果 i != 1赋值出厂相关属性和硬件版本
else
{
boardCardInfo.HardwareVersion = "2.1.3";
boardCardInfo.InstallationDate = DateTime.Now.AddMonths(-3);
boardCardInfo.ProductionDate = DateTime.Now.AddMonths(-9);
boardCardInfo.SerialNumber = "SN2024" + i.ToString("D2");
boardCardInfo.Remark = "IO 插件";
}
_boardCardInfoRepository.Insert(boardCardInfo);
}
}
}
}
catch (Exception ex)
{
throw;
}
return rst;
}
/// <summary>
/// 填充出厂编号
/// </summary>
/// <returns></returns>
[ShowApi]
[AbpAllowAnonymous]
[HttpGet]
public async Task<RequestEasyResult> UpdateProtetionInfoForHistoryTest()
{
RequestEasyResult rst = new RequestEasyResult();
try
{
List<BoardCardInfo> 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;
}
#endif
}
}