2024-12-12 09:16:55 +08:00

1400 lines
65 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Abp.Auditing;
using Abp.Authorization;
using Abp.Collections.Extensions;
using Abp.Domain.Entities;
using Abp.Domain.Repositories;
using Abp.Domain.Uow;
using Abp.EntityFrameworkCore.Repositories;
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 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.DataTransferObject.CommonDto;
using YunDa.ISAS.DataTransferObject.DataMonitoring.TelemeteringConfigurationDto;
using YunDa.ISAS.Entities.DataMonitoring;
using YunDa.ISAS.Entities.GeneralInformation;
using YunDa.ISAS.Redis.Repositories;
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.DataTransferObject.GeneralInformation.ProtectionSettingDto;
using YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.OperationReport;
using YunDa.SOMS.Entities.GeneralInformation;
using static NetMQ.NetMQSelector;
namespace YunDa.ISAS.Application.GeneralInformation
{
/// <summary>
/// 保护装置履历信息管理类
/// </summary>
public class ProtectionDeviceAppService : ISASAppServiceBase,IProtectionDeviceAppService
{
private readonly IRepository<EquipmentInfo, Guid> _equipmentInfoRepository;
private readonly IRepository<EquipmentType, Guid> _equipmentTypeRepository;
private readonly IRepository<ManufacturerInfo, Guid> _manufacturerInfoRepository;
private readonly IRepository<TransformerSubstation, Guid> _transformerSubstationRepository;
private readonly IRepository<ProtectionDeviceInfo, Guid> _protectionDeviceInfoRepository;
private readonly IRepository<ProtectionDeviceHistory, Guid> _protectionDeviceHistoryRepository;
private readonly IRepository<SecondaryCircuitProtectionDevice, Guid> _secondaryCircuitProtectionDeviceRepository;
private readonly IRepository<BoardCardInfo, Guid> _boardCardInfoRepository;
private readonly IRepository<BoardCardHistory, Guid> _boardCardHistoryRepository;
private readonly IRepository<ImProtectDevice,string> _imProtectDeviceRepository;
private readonly IRepository<ImGateWay, string> _imGateWayRepository;
private readonly IRepository<ImPuCtgy, string> _imPuCtgyRepository;
private readonly IRepository<ImEventType, int> _imEventTypeRepository;
private readonly IRepository<TelemeteringConfiguration, Guid> _telemeteringConfigurationRepository;
private readonly IRepository<TelesignalisationConfiguration, Guid> _telesignalisationConfigurationRepository;
private readonly IRepository<ProtectionDeviceGateway, Guid> _protectionDeviceGatewayRepository;
private readonly IRepository<ProtectionDeviceType, Guid> _protectionDeviceTypeyRepository;
private readonly IRepository<ImDeviceDz, string> _imDeviceDzRepository;
private readonly IRedisRepository<ImDeviceDzOutput, string> _imDeviceDzRedis;
private readonly IUnitOfWorkManager _unitOfWorkManager;
private readonly IRedisRepository<BCodeAndNTP, string> _bcodeAndNTP;
public ProtectionDeviceAppService(
IRepository<ProtectionDeviceInfo, Guid> protectionDeviceInfoRepository,
IUnitOfWorkManager unitOfWorkManager,
IRepository<ImProtectDevice, string> imProtectDeviceRepository,
IRepository<EquipmentInfo, Guid> equipmentInfoRepository,
IRepository<SecondaryCircuitProtectionDevice, Guid> secondaryCircuitProtectionDeviceRepository
,
IRepository<TelemeteringConfiguration, Guid> telemeteringConfigurationRepository,
IRepository<TelesignalisationConfiguration, Guid> telesignalisationConfigurationRepository,
IRepository<ProtectionDeviceType, Guid> protectionDeviceTypeyRepository,
IRepository<ImPuCtgy, string> imPuCtgyRepository,
IRepository<ProtectionDeviceGateway, Guid> protectionDeviceGatewayRepository,
IRepository<ImGateWay, string> imGateWayRepository,
IRepository<BoardCardInfo, Guid> boardCardInfoRepository,
IRepository<BoardCardHistory, Guid> boardCardHistoryRepository,
IRepository<ProtectionDeviceHistory, Guid> protectionDeviceHistoryRepository,
IRepository<EquipmentType, Guid> equipmentTypeRepository,
IRepository<ManufacturerInfo, Guid> manufacturerInfoRepository,
IRepository<TransformerSubstation, Guid> transformerSubstationRepository,
IRepository<ImDeviceDz, string> imDeviceDzRepository,
IRepository<ImEventType, int> imEventTypeRepository,
IRedisRepository<BCodeAndNTP, string> bcodeAndNTP,
ISessionAppService sessionAppService
) :
base(sessionAppService)
{
_unitOfWorkManager = unitOfWorkManager;
_equipmentInfoRepository = equipmentInfoRepository;
_imProtectDeviceRepository = imProtectDeviceRepository;
_protectionDeviceInfoRepository = protectionDeviceInfoRepository;
_protectionDeviceHistoryRepository = protectionDeviceHistoryRepository;
_boardCardInfoRepository = boardCardInfoRepository;
_boardCardHistoryRepository = boardCardHistoryRepository;
_secondaryCircuitProtectionDeviceRepository = secondaryCircuitProtectionDeviceRepository;
_imGateWayRepository = imGateWayRepository;
_protectionDeviceGatewayRepository = protectionDeviceGatewayRepository;
_imPuCtgyRepository = imPuCtgyRepository;
_protectionDeviceTypeyRepository = protectionDeviceTypeyRepository;
_equipmentTypeRepository = equipmentTypeRepository;
_manufacturerInfoRepository = manufacturerInfoRepository;
_transformerSubstationRepository = transformerSubstationRepository;
_imDeviceDzRepository = imDeviceDzRepository;
_imEventTypeRepository = imEventTypeRepository;
_telemeteringConfigurationRepository = telemeteringConfigurationRepository;
_telesignalisationConfigurationRepository = telesignalisationConfigurationRepository;
_bcodeAndNTP = bcodeAndNTP;
}
public async Task<RequestResult<ProtectionDeviceInfoViewOutput>> CreateOrUpdateAsync(EditProtectionDeviceInfoInput input)
{
RequestResult<ProtectionDeviceInfoViewOutput> rst = new RequestResult<ProtectionDeviceInfoViewOutput>();
try
{
if (input.Id.HasValue)
{
InsertUpdateRecord(input);
}
else
{
var entity = new ProtectionDeviceInfo();
entity.CreatorUserId = base.GetCurrentUser().Id;
entity.CreationTime = DateTime.Now;
// 逐字段赋值
entity.SeqNo = input.SeqNo;
entity.Name = input.Name;
entity.Specification = input.Specification;
entity.DeviceAddress = input.DeviceAddress;
entity.BaselineBoardVersion = input.BaselineBoardVersion;
entity.HardwareVersion = input.HardwareVersion;
entity.IsActive = input.IsActive;
entity.EquipmentInfo = new EquipmentInfo();
entity.EquipmentInfo.ManufacturerInfoId = input.ManufacturerInfoId;
entity.EquipmentInfo.SeqNo = input.SeqNo;
entity.EquipmentInfo.Name = input.Name;
entity.EquipmentInfo.InstallationDate = input.InstallationDate;
entity.EquipmentInfo.ProductionDate = input.ProductionDate;
entity.EquipmentInfo.FactorySerialNumber = input.FactorySerialNumber;
entity.EquipmentInfo.VerificationPerson = input.VerificationPerson;
entity.EquipmentInfo.VerificationDate = input.VerificationDate;
entity.EquipmentInfo.VerificationRecords = input.VerificationRecords;
entity.EquipmentInfo.ManufacturerInfoId = input.ManufacturerInfoId;
entity.EquipmentInfo.MaintenanceRecord = input.MaintenanceRecord;
var equipmentInfoId =await _equipmentInfoRepository.InsertAndGetIdAsync(entity.EquipmentInfo);
entity.EquipmentInfoId = equipmentInfoId;
var protectionDeviceInfo = await _protectionDeviceInfoRepository.InsertAsync(entity);
// 记录历史数据
var protectionDeviceHistory = new ProtectionDeviceHistory
{
Name = input.Name,
ProtectionDeviceInfoId = protectionDeviceInfo.Id,
RecodeDate = DateTime.Now,
ContentJson = "", // 原始数据
ContentNewJson = JsonConvert.SerializeObject(entity), // 新数据
EventDescription = "设备台账建立",
EventRecordType = EventRecordTypeEnum.Device,
IsSend = false // 默认未发送
};
// 插入历史记录
_protectionDeviceHistoryRepository.Insert(protectionDeviceHistory);
}
rst.Flag = true;
}
catch (Exception ex)
{
rst.Message = ex.Message;
rst.Flag = false;
Log4Helper.Error(this.GetType(), "线路管理服务", ex);
}
return rst;
}
private void InsertUpdateRecord(EditProtectionDeviceInfoInput input)
{
if (input.Id.HasValue)
{
var entity = _protectionDeviceInfoRepository.GetAllIncluding(t => t.EquipmentInfo)
.FirstOrDefault(t => t.Id == input.Id);
if (entity != null)
{
// 记录更新前的数据
var originalContent = JsonConvert.SerializeObject(entity);
// 初始化事件描述
StringBuilder eventDescription = new StringBuilder("设备信息更新: ");
// 比较并更新字段
if (entity.SeqNo != input.SeqNo)
{
eventDescription.Append("顺序号更新, ");
entity.SeqNo = input.SeqNo;
}
if (entity.Name != input.Name)
{
eventDescription.Append($"设备名称更新:'{input.Name}', ");
entity.Name = input.Name;
}
if (entity.Specification != input.Specification)
{
eventDescription.Append($"规格更新:'{input.Specification}', ");
entity.Specification = input.Specification;
}
if (entity.DeviceAddress != input.DeviceAddress)
{
eventDescription.Append($"设备地址更新:'{input.DeviceAddress}', ");
entity.DeviceAddress = input.DeviceAddress;
}
if (entity.BaselineBoardVersion != input.BaselineBoardVersion)
{
eventDescription.Append($"基板版本更新:'{input.BaselineBoardVersion}', ");
entity.BaselineBoardVersion = input.BaselineBoardVersion;
}
if (entity.HardwareVersion != input.HardwareVersion)
{
eventDescription.Append($"硬件版本更新:'{input.HardwareVersion}', ");
entity.HardwareVersion = input.HardwareVersion;
}
if (entity.IsActive != input.IsActive)
{
eventDescription.Append($"启用状态更新:'{input.IsActive}', ");
entity.IsActive = input.IsActive;
}
// 设备信息赋值
if (entity.EquipmentInfo != null)
{
if (entity.EquipmentInfo.ManufacturerInfoId != input.ManufacturerInfoId)
{
eventDescription.Append($"制造商ID更新'{input.ManufacturerInfoId}', ");
entity.EquipmentInfo.ManufacturerInfoId = input.ManufacturerInfoId;
}
if (entity.EquipmentInfo.Name != input.Name)
{
eventDescription.Append($"设备名称更新:'{input.Name}', ");
entity.EquipmentInfo.Name = input.Name;
}
if (entity.EquipmentInfo.InstallationDate != input.InstallationDate)
{
eventDescription.Append($"安装日期更新:'{input.InstallationDate}', ");
entity.EquipmentInfo.InstallationDate = input.InstallationDate;
}
if (entity.EquipmentInfo.ProductionDate != input.ProductionDate)
{
eventDescription.Append($"生产日期更新:'{input.ProductionDate}', ");
entity.EquipmentInfo.ProductionDate = input.ProductionDate;
}
if (entity.EquipmentInfo.FactorySerialNumber != input.FactorySerialNumber)
{
eventDescription.Append($"出厂序列号更新:'{input.FactorySerialNumber}', ");
entity.EquipmentInfo.FactorySerialNumber = input.FactorySerialNumber;
}
if (entity.EquipmentInfo.VerificationPerson != input.VerificationPerson)
{
eventDescription.Append($"验证人更新:'{input.VerificationPerson}', ");
entity.EquipmentInfo.VerificationPerson = input.VerificationPerson;
}
if (entity.EquipmentInfo.VerificationDate != input.VerificationDate)
{
eventDescription.Append($"验证日期更新:'{input.VerificationDate}', ");
entity.EquipmentInfo.VerificationDate = input.VerificationDate;
}
if (entity.EquipmentInfo.VerificationRecords != input.VerificationRecords)
{
eventDescription.Append($"验证记录更新:'{input.VerificationRecords}', ");
entity.EquipmentInfo.VerificationRecords = input.VerificationRecords;
}
if (entity.EquipmentInfo.MaintenanceRecord != input.MaintenanceRecord)
{
eventDescription.Append($"维修记录更新:'{input.MaintenanceRecord}', ");
entity.EquipmentInfo.MaintenanceRecord = input.MaintenanceRecord;
}
}
// 检查是否有变化并记录历史
var updatedContent = JsonConvert.SerializeObject(entity);
// 如果数据发生了变化,则记录历史
if (originalContent != updatedContent)
{
var history = new ProtectionDeviceHistory
{
ProtectionDeviceInfoId = entity.Id,
RecodeDate = DateTime.Now,
ContentJson = originalContent, // 记录更新前的内容
ContentNewJson = updatedContent, // 记录更新后的内容
EventDescription = eventDescription.ToString().TrimEnd(','),
EventRecordType = EventRecordTypeEnum.Device, // 假设更新:事件类型
Remark = "自动记录设备信息更新",
IsSend = false // 如果不需要立即发送给主站
};
// 保存历史记录
_protectionDeviceHistoryRepository.Insert(history);
}
}
}
}
/// <summary>
/// 扫码枪输入设备信息
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[ShowApi]
[AbpAllowAnonymous]
[HttpPost]
public RequestEasyResult ScanDeviceQRCode(EditProtectionQrCodeDeviceInfoInput input)
{
RequestEasyResult rst = new RequestEasyResult();
try
{
var repo = _protectionDeviceInfoRepository.GetAllIncluding(t => t.EquipmentInfo,t=>t.ProtectionDeviceType).ToList();
var protectionDevice = repo.FirstOrDefault(t => t.Name.Contains(input.Name));
if (protectionDevice != null)
{
//当出厂编号不一致进行履历更新
if (protectionDevice.EquipmentInfo.FactorySerialNumber != input.SerialNumber
|| protectionDevice.EquipmentInfo.MaintenanceRecord!= input.MaintenanceRecord
|| protectionDevice.EquipmentInfo.VerificationRecords != input.VerificationRecords
|| protectionDevice.EquipmentInfo.VerificationDate != input.VerificationDate
|| protectionDevice.EquipmentInfo.VerificationPerson!= input.VerificationPerson
|| protectionDevice.EquipmentInfo.ProductionDate != input.ProductionDate
)
{
var json = JsonConvert.SerializeObject(protectionDevice);
var protectionDeviceHistory = _protectionDeviceHistoryRepository.GetAll().Where(t => t.ProtectionDeviceInfoId == protectionDevice.Id).ToList();
var deviceHistory = new ProtectionDeviceHistory
{
ContentJson = json,
CreationTime = DateTime.Now,
CreatorUserId = base.GetCurrentUser().Id,
Name = protectionDevice.Name,
RecodeDate = DateTime.Now,
ProtectionDeviceInfoId = protectionDevice.Id,
SeqNo = protectionDeviceHistory.Count > 0 ? protectionDeviceHistory.Max(t => t.SeqNo) : 1
};
protectionDevice.Specification = input.Specification;
protectionDevice.EquipmentInfo.FactorySerialNumber = input.SerialNumber;
protectionDevice.EquipmentInfo.ProductionDate = input.ProductionDate;
protectionDevice.EquipmentInfo.VerificationDate = input.VerificationDate;
protectionDevice.EquipmentInfo.VerificationPerson = input.VerificationPerson;
protectionDevice.EquipmentInfo.VerificationRecords = input.VerificationRecords;
var newjson = JsonConvert.SerializeObject(protectionDevice);
deviceHistory.ContentNewJson = newjson;
// 记录变更内容
var eventDescription = new StringBuilder();
// 通过判定每个字段是否发生变化,动态生成描述
if (protectionDevice.EquipmentInfo.FactorySerialNumber != input.SerialNumber)
{
eventDescription.AppendLine($"更换了设备的厂商序列号: {protectionDevice.EquipmentInfo.FactorySerialNumber} -> {input.SerialNumber}");
}
if (protectionDevice.EquipmentInfo.MaintenanceRecord != input.MaintenanceRecord)
{
eventDescription.AppendLine($"更新了设备的维修记录: {protectionDevice.EquipmentInfo.MaintenanceRecord} -> {input.MaintenanceRecord}");
}
if (protectionDevice.EquipmentInfo.VerificationRecords != input.VerificationRecords)
{
eventDescription.AppendLine($"更改了设备的检验记录: {protectionDevice.EquipmentInfo.VerificationRecords} -> {input.VerificationRecords}");
}
if (protectionDevice.EquipmentInfo.VerificationDate != input.VerificationDate)
{
eventDescription.AppendLine($"修改了设备的检验日期: {protectionDevice.EquipmentInfo.VerificationDate} -> {input.VerificationDate}");
}
if (protectionDevice.EquipmentInfo.VerificationPerson != input.VerificationPerson)
{
eventDescription.AppendLine($"更新了设备的检验人员: {protectionDevice.EquipmentInfo.VerificationPerson} -> {input.VerificationPerson}");
}
if (protectionDevice.EquipmentInfo.ProductionDate != input.ProductionDate)
{
eventDescription.AppendLine($"更改了设备的生产日期: {protectionDevice.EquipmentInfo.ProductionDate} -> {input.ProductionDate}");
}
deviceHistory.Name = protectionDevice.Name;
deviceHistory.EventDescription = eventDescription.ToString();
deviceHistory.EventRecordType = EventRecordTypeEnum.Device;
deviceHistory.Remark = input.Remark;
_protectionDeviceHistoryRepository.Insert(deviceHistory);
}
rst.Flag = true;
}
else
{
rst.Message = "未找到对应装置";
}
}
catch (Exception ex)
{
rst.Message = ex.Message;
}
return rst;
}
public async Task<RequestEasyResult> DeleteByIdAsync(Guid id)
{
RequestEasyResult rst = new RequestEasyResult();
return rst;
}
public async Task<RequestEasyResult> DeleteByIdsAsync(List<Guid> ids)
{
RequestEasyResult rst = new RequestEasyResult();
return rst;
}
/// <summary>
/// 查询保护装置信息
/// </summary>
/// <param name="searchCondition"></param>
/// <returns></returns>
[ShowApi]
[AbpAllowAnonymous]
[DisableAuditing]
[HttpPost]
public RequestPageResult<ProtectionDeviceInfoViewOutput> FindDatas(PageSearchCondition<ProtectionDeviceInfoSearchConditionInput> searchCondition)
{
RequestPageResult<ProtectionDeviceInfoViewOutput> rst = new RequestPageResult<ProtectionDeviceInfoViewOutput>();
try
{
var repo = _protectionDeviceInfoRepository.GetAllIncluding(t => t.EquipmentInfo)
.WhereIf(searchCondition.SearchCondition.IsOnlyActive.HasValue, t => t.IsActive)
.WhereIf(searchCondition.SearchCondition.Id.HasValue, t => t.Id == searchCondition.SearchCondition.Id.Value)
.WhereIf(searchCondition.SearchCondition.TransformerSubstationId.HasValue, t => t.Id == searchCondition.SearchCondition.TransformerSubstationId.Value).ToList();
List<ProtectionDeviceInfoViewOutput> datas = default;
if (!string.IsNullOrWhiteSpace( searchCondition.SearchCondition.Name))
{
repo = repo.Where(t => t.Name.Contains(searchCondition.SearchCondition.Name)).ToList();
}
rst.TotalCount = repo.Count();
if (repo.Count()>0)
{
rst.PageSize = searchCondition.PageSize;
rst.PageIndex = searchCondition.PageIndex;
if ( searchCondition.PageSize>0)
{
var dataTemps = repo.Skip((searchCondition.PageIndex-1)* searchCondition.PageSize).Take(searchCondition.PageSize);
datas = ObjectMapper.Map<List<ProtectionDeviceInfoViewOutput>>(dataTemps);
}
else
{
datas = ObjectMapper.Map<List<ProtectionDeviceInfoViewOutput>>(repo);
}
}
rst.ResultData= datas;
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<ProtectionDeviceInfoViewOutput> FindDatasByCircuit(PageSearchCondition<ProtectionDeviceInfoSearchConditionInput> searchCondition)
{
RequestPageResult<ProtectionDeviceInfoViewOutput> rst = new RequestPageResult<ProtectionDeviceInfoViewOutput>();
try
{
var repo = _secondaryCircuitProtectionDeviceRepository.GetAllIncluding(t => t.ProtectionDevice)
.Where(t=>t.SecondaryCircuitId == searchCondition.SearchCondition.SecondaryCircuitId).ToList();
List<ProtectionDeviceInfoViewOutput> datas = default;
rst.TotalCount = repo.Count();
if (repo.Count() > 0)
{
rst.PageSize = searchCondition.PageSize;
rst.PageIndex = searchCondition.PageIndex;
if (searchCondition.PageSize > 0)
{
var dataTemps = repo.Skip((searchCondition.PageIndex - 1) * searchCondition.PageSize).Take(searchCondition.PageSize);
datas = ObjectMapper.Map<List<ProtectionDeviceInfoViewOutput>>(dataTemps.Select(t=>t.ProtectionDevice));
}
else
{
datas = ObjectMapper.Map<List<ProtectionDeviceInfoViewOutput>>(repo);
}
}
rst.ResultData = datas;
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<ProtectionDeviceInfoViewOutput> FindDataByEquipmentInfoId(Guid? equipmentInfoId)
{
RequestResult<ProtectionDeviceInfoViewOutput> rst = new RequestResult<ProtectionDeviceInfoViewOutput>();
try
{
var entity = _protectionDeviceInfoRepository.GetAllIncluding(t => t.EquipmentInfo,t=>t.EquipmentInfo.ManufacturerInfo)
.FirstOrDefault(t => t.EquipmentInfoId == equipmentInfoId);
if (entity!=null)
{
rst.ResultData = ObjectMapper.Map<ProtectionDeviceInfoViewOutput>(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="equipmentInfoId"></param>
/// <returns></returns>
[ShowApi]
[AbpAllowAnonymous]
[DisableAuditing]
[HttpGet]
public RequestResult<List<ProtectionDeviceHistoryOutput>> FindHistoryDataByEquipmentInfoId(Guid? equipmentInfoId)
{
RequestResult<List<ProtectionDeviceHistoryOutput>> rst = new RequestResult<List<ProtectionDeviceHistoryOutput>>();
try
{
List<ProtectionDeviceHistoryOutput> historys = new List<ProtectionDeviceHistoryOutput>();
var protectionDevice = _protectionDeviceInfoRepository.GetAllIncluding(t => t.EquipmentInfo)
.FirstOrDefault(t => t.EquipmentInfoId == equipmentInfoId);
if (protectionDevice != null)
{
var entitys = _protectionDeviceHistoryRepository.GetAll()
.Where(t => t.ProtectionDeviceInfoId == protectionDevice.Id)
.OrderByDescending(t=>t.RecodeDate)
;
historys = ObjectMapper.Map<List<ProtectionDeviceHistoryOutput>>(entitys);
rst.Flag = true;
rst.ResultData = historys;
}
}
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;
}
/// <summary>
/// 获取保护装置列表
/// </summary>
/// <param name="stationId"></param>
/// <returns></returns>
[HttpGet]
[ShowApi]
[AbpAllowAnonymous]
[DisableAuditing]
public RequestResult<List<SelectModelOutput>> FindProtectionDeviceForSelect(Guid stationId)
{
var rst = new RequestResult<List<SelectModelOutput>> { Flag = false };
try
{
var datas = _protectionDeviceInfoRepository.GetAllIncluding()
.Where(e => e.IsActive)
.Where(t=>t.TransformerSubstationId == stationId)
.OrderBy(x=>x.SeqNo).ThenBy(x => x.Name);
rst.ResultData = datas.Select(item => new SelectModelOutput
{
Value = item.Id.ToString().ToLower(),
Key = item.Id,
Text = item.Name
}).ToList();
rst.Flag = true;
}
catch (Exception ex)
{
rst.Message = ex.Message;
rst.Flag = false;
Log4Helper.Error(this.GetType(), "获取保护装置列表", ex);
}
return rst;
}
/// <summary>
/// 只在所内有效-获取变电所装置的ip地址
/// </summary>
/// <returns></returns>
[HttpGet]
[ShowApi]
[AbpAllowAnonymous]
[UnitOfWork(false)]
public RequestResult<List<ProtectionDeviceCommInfoOutput>> FindProtectionDeviceCommInfo(string stationName)
{
RequestResult<List<ProtectionDeviceCommInfoOutput>> rst = new RequestResult<List<ProtectionDeviceCommInfoOutput>>();
try
{
Dictionary<string, ProtectionDeviceInfo> porotectionDeviceInfos = default;
using (var unitOfWork = _unitOfWorkManager.Begin())
{
porotectionDeviceInfos = _protectionDeviceInfoRepository.GetAllIncluding().Where(t=>t.IsActive).ToDictionary(t => t.ISMS_DeviceId);
unitOfWork.Complete();
}
using (var unitOfWork = _unitOfWorkManager.Begin())
{
var devices = _imProtectDeviceRepository.GetAllIncluding(t => t.StatCodeNavigation, t => t.GateWay, t => t.PuctgyCodeNavigation).OrderBy(t => t.DeviceAddr);
List<ProtectionDeviceCommInfoOutput> datas = new List<ProtectionDeviceCommInfoOutput>();
foreach (var item in devices)
{
if (!porotectionDeviceInfos.ContainsKey(item.Id))
{
continue;
}
var deviceCommInfo = new ProtectionDeviceCommInfoOutput
{
EquipmentInfoName = porotectionDeviceInfos[item.Id].Name,
EquipmentInfoId = porotectionDeviceInfos[item.Id].EquipmentInfoId,
ProtectionDeviceId = porotectionDeviceInfos[item.Id].Id,
DeviceAddr = item.DeviceAddr,
DeviceName = item.DeviceName,
GatewayIP1 = item.GateWay.GatewayIp1,
GatewayIP2 = item.GateWay.GatewayIp2,
GatewayIP3 = "",
MaskEth1 = "255.255.255.0",
MaskEth2 = "255.255.255.0",
MaskEth3 = "255.255.255.0",
Gateway = "192.168.61.1",
Sntp1 = "192.168.61.99",
Sntp2 = "192.168.61.99",
IsZY = item.PuctgyCodeNavigation.PuctgyName.Contains("站域")
};
datas.Add(deviceCommInfo);
}
rst.ResultData = datas;
unitOfWork.Complete();
}
rst.Flag = true;
}
catch (Exception ex)
{
rst.Message = ex.Message;
rst.Flag = false;
Log4Helper.Error(this.GetType(), "保护装置信息管理服务", ex);
}
return rst;
}
/// <summary>
/// 根据装置id获取装置通信参数
/// </summary>
/// <returns></returns>
[HttpGet]
[ShowApi]
[AbpAllowAnonymous]
[UnitOfWork(false)]
public async Task<RequestResult<ProtectionDeviceCommInfoOutput>> GetProtectionDeviceCommInfo(Guid deviceId,Guid equipmentId)
{
RequestResult<ProtectionDeviceCommInfoOutput> rst = new RequestResult<ProtectionDeviceCommInfoOutput>();
try
{
ProtectionDeviceInfo protectionDeviceInfo = null;
using (var work = _unitOfWorkManager.Begin())
{
if (deviceId == default)
{
protectionDeviceInfo = _protectionDeviceInfoRepository.GetAll().FirstOrDefault(t=>t.EquipmentInfoId == equipmentId);
}
else
{
protectionDeviceInfo = _protectionDeviceInfoRepository.Get(deviceId);
}
await work.CompleteAsync();
}
if (protectionDeviceInfo==null)
{
rst.Message = "传输id错误";
return rst;
}
ImProtectDevice device = null;
using (var work = _unitOfWorkManager.Begin())
{
device = _imProtectDeviceRepository.GetAllIncluding(t => t.StatCodeNavigation, t => t.GateWay).FirstOrDefault(t=>t.Id == protectionDeviceInfo.ISMS_DeviceId);
await work.CompleteAsync();
}
if (device!=null)
{
var deviceCommInfo = new ProtectionDeviceCommInfoOutput
{
DeviceAddr = device.DeviceAddr,
DeviceName = device.DeviceName,
GatewayIP1 = device.GateWay.GatewayIp1,
GatewayIP2 = device.GateWay.GatewayIp2,
GatewayIP3 = "",
MaskEth1 = "",
MaskEth2 = "",
MaskEth3 = "",
Gateway = "t192.168.61.1",
Sntp1 = "192.168.61.99",
Sntp2 = "192.168.61.99"
};
rst.ResultData = deviceCommInfo;
}
rst.Flag = true;
}
catch (Exception ex)
{
rst.Message = ex.Message;
rst.Flag = false;
Log4Helper.Error(this.GetType(), "保护装置信息管理服务", ex);
}
return rst;
}
/// <summary>
/// 从综自后台数据库迁移数据到运维数据库中(保护装置数据)
/// </summary>
/// <returns></returns>
[ShowApi]
[AbpAllowAnonymous]
[HttpGet]
[UnitOfWork(isTransactional: false)]
public RequestEasyResult MigreteDeviceEquipementDataFromISMS()
{
RequestEasyResult rst = new RequestEasyResult();
try
{
Dictionary<string,EquipmentInfo> equipments = default;
Dictionary<string, ImProtectDevice> imProtectDevices = default;
Dictionary<string, ProtectionDeviceInfo> porotectionDeviceInfos = default;
EquipmentType equipmentType = default;
ManufacturerInfo manufacturerInfo = default;
TransformerSubstation transformerSubstation = default;
using (var unitOfWork = _unitOfWorkManager.Begin())
{
transformerSubstation = _transformerSubstationRepository.GetAll().First();
equipments = _equipmentInfoRepository.GetAllIncluding().ToDictionary(t => t.Name);
equipmentType = _equipmentTypeRepository.GetAll().FirstOrDefault(t => t.Name.Contains("保护装置"));
manufacturerInfo = _manufacturerInfoRepository.GetAll().FirstOrDefault(t => t.ManufacturerName.Contains("运达"));
porotectionDeviceInfos = _protectionDeviceInfoRepository.GetAllIncluding().ToDictionary(t=>t.Name);
unitOfWork.Complete();
}
using (var unitOfWork = _unitOfWorkManager.Begin())
{
imProtectDevices = _imProtectDeviceRepository.GetAllIncluding().ToDictionary(t => t.DeviceName);
unitOfWork.Complete();
}
int count = 0;
using (var unitOfWork = _unitOfWorkManager.Begin())
{
foreach (var item in imProtectDevices.Keys)
{
var imProtectDevice = imProtectDevices[item];
Guid equipmentInfoId = default;
if (!equipments.ContainsKey(item))
{
var equipmentinfo = new EquipmentInfo
{
SeqNo = imProtectDevice.DeviceAddr,
TransformerSubstationId = transformerSubstation.Id,
CreationTime = DateTime.Now,
CreatorUserId = null,
IsActive = true,
EquipmentTypeId = equipmentType.Id,
ManufacturerInfoId = manufacturerInfo.Id,
Name = item
};
equipmentInfoId = _equipmentInfoRepository.InsertAndGetId(equipmentinfo);
}
else {
equipmentInfoId = equipments[item].Id;
}
if (!porotectionDeviceInfos.ContainsKey(item))
{
ProtectionDeviceInfo protectionDeviceInfo = new ProtectionDeviceInfo()
{
CanSwitchDZZone = imProtectDevice.CanSwDzzone == 1 ? true : false,
CreationTime = DateTime.Now,
CreatorUserId = null,
SupportsDualCurrent = imProtectDevice.SupportVersion,
BayName = imProtectDevice.BayName,
DeviceAddress = imProtectDevice.DeviceAddr,
DeviceState = imProtectDevice.DeviceState,
EndOfDKJL = imProtectDevice.EndOfDkjl,
EquipmentInfoId = equipmentInfoId,
IsActive = true,
ISMS_DeviceId = imProtectDevice.Id,
Name = item,
ProtectionDeviceGatewayId = null,
ProtectionDeviceTypeId = null,
TransformerSubstationId = transformerSubstation.Id,
};
_protectionDeviceInfoRepository.Insert(protectionDeviceInfo);
// 记录历史数据
var protectionDeviceHistory = new ProtectionDeviceHistory
{
Name = item,
ProtectionDeviceInfoId = protectionDeviceInfo.Id,
RecodeDate = DateTime.Now,
ContentJson = "", // 原始数据
ContentNewJson = JsonConvert.SerializeObject(protectionDeviceInfo), // 新数据
EventDescription = "设备台账建立",
EventRecordType = EventRecordTypeEnum.Device,
IsSend = false // 默认未发送
};
// 插入历史记录
_protectionDeviceHistoryRepository.Insert(protectionDeviceHistory);
}
else
{
porotectionDeviceInfos[item].DeviceAddress = imProtectDevice.DeviceAddr;
}
}
unitOfWork.Complete();
}
rst.Flag = true;
rst.Message = $"共完成{count}信息迁移";
}
catch (Exception ex)
{
rst.Message = ex.Message;
rst.Flag = false;
Log4Helper.Error(this.GetType(), "线路管理服务", ex);
}
return rst;
}
/// <summary>
/// 从综自后台数据库迁移数据到运维数据库中(保护装置类型数据)
/// </summary>
/// <returns></returns>
[ShowApi]
[AbpAllowAnonymous]
[HttpGet]
[UnitOfWork(isTransactional: false)]
public RequestEasyResult MigreteImProtectionDeviceTypeDataFromISMS()
{
RequestEasyResult rst = new RequestEasyResult();
try
{
Dictionary<string,ProtectionDeviceType> protectionDeviceTypes = default;
List<ImPuCtgy> imPuCtgies = default;
using (var unitOfWork = _unitOfWorkManager.Begin())
{
protectionDeviceTypes = _protectionDeviceTypeyRepository.GetAll().ToDictionary(t=>t.Name);
unitOfWork.Complete();
}
using (var unitOfWork = _unitOfWorkManager.Begin())
{
imPuCtgies = _imPuCtgyRepository.GetAll().ToList();
unitOfWork.Complete();
}
using (var unitOfWork = _unitOfWorkManager.Begin())
{
// 提前获取已经存在的保护设备类型名称,避免每次循环都查询
var existingProtectionDeviceTypes = _protectionDeviceTypeyRepository
.GetAll()
.Where(t => imPuCtgies.Select(im => im.PuctgyName).Contains(t.Name))
.ToDictionary(t => t.Name, t => t);
// 创建一个 ProtectionDeviceType 的集合来批量插入
var protectionDeviceTypesToInsert = new List<ProtectionDeviceType>();
foreach (var imPuCtgie in imPuCtgies)
{
// 检查该类型是否已经存在
if (existingProtectionDeviceTypes.ContainsKey(imPuCtgie.PuctgyName))
{
continue;
}
// 创建新的 ProtectionDeviceType 对象
var protectionDeviceType = new ProtectionDeviceType
{
CanSwitchDZZone = false,
CreationTime = DateTime.Now,
CreatorUserId = base.GetCurrentUser().Id,
DZZoneCount = imPuCtgie.DzzoneCount,
IsCRCC = true,
PUCtgyCode = 0,
Support12YC = false,
AnalogParseMode = imPuCtgie.AnalogParseMode,
DZReadOnly = false,
EventParseMode = imPuCtgie.EventParseMode,
IsActive = true,
ManufacturerInfoId = default,
Model = imPuCtgie.Model,
Name = imPuCtgie.PuctgyName,
Generation = imPuCtgie.Generation,
};
// 添加到集合中,准备批量插入
protectionDeviceTypesToInsert.Add(protectionDeviceType);
}
// 批量插入新记录
if (protectionDeviceTypesToInsert.Any())
{
_protectionDeviceTypeyRepository.InsertRange(protectionDeviceTypesToInsert);
}
// 提交事务
unitOfWork.Complete();
}
rst.Flag = true;
}
catch (Exception ex)
{
rst.Message = ex.Message;
rst.Flag = false;
Log4Helper.Error(this.GetType(), "线路管理服务", ex);
}
return rst;
}
/// <summary>
/// 从综自后台数据库迁移数据到运维数据库中(保护装置网关数据)
/// </summary>
/// <returns></returns>
[ShowApi]
[AbpAllowAnonymous]
[HttpGet]
[UnitOfWork(isTransactional: false)]
public RequestEasyResult MigreteImGatewayDataFromISMS()
{
RequestEasyResult rst = new RequestEasyResult();
try
{
Dictionary<string, ImProtectDevice> imProtectDevices = default;
Dictionary<string, ProtectionDeviceInfo> porotectionDeviceInfos = default;
//Dictionary<string, ImGateWay> imGateWays = default;
using (var unitOfWork = _unitOfWorkManager.Begin())
{
porotectionDeviceInfos = _protectionDeviceInfoRepository.GetAllIncluding(t=>t.EquipmentInfo).ToDictionary(t => t.Name);
unitOfWork.Complete();
}
using (var unitOfWork = _unitOfWorkManager.Begin())
{
imProtectDevices = _imProtectDeviceRepository.GetAllIncluding(t=>t.GateWay,t=>t.PuctgyCodeNavigation).ToDictionary(t => t.DeviceName);
unitOfWork.Complete();
}
int count = 0;
using (var unitOfWork = _unitOfWorkManager.Begin())
{
foreach (var device in imProtectDevices.Keys)
{
var porotectionDevice = porotectionDeviceInfos[device];
var imProtectDevice = imProtectDevices[device];
if (porotectionDevice != null)
{
ProtectionDeviceGateway protectionDeviceGateway = new ProtectionDeviceGateway
{
CreationTime = DateTime.Now,
CreatorUserId = base.GetCurrentUser().Id,
GatewayIP1 = imProtectDevice.GateWay.GatewayIp1,
GatewayIP2 = imProtectDevice.GateWay.GatewayIp2,
GatewayPort1 = imProtectDevice.GateWay.GatewayPort1,
GatewayPort2 = imProtectDevice.GateWay.GatewayPort2,
IsActive = true,
Name = imProtectDevice.GateWay.GateWayName,
PhysicalAddress = imProtectDevice.GateWay.PhyAddr,
Protocol = imProtectDevice.GateWay.Protocol,
TransformerSubstationId = porotectionDevice.TransformerSubstationId,
ProtectionDeviceInfoId = porotectionDevice.Id
};
ProtectionDeviceType protectionDeviceType = new ProtectionDeviceType
{
CanSwitchDZZone = false,
CreationTime = DateTime.Now,
CreatorUserId = base.GetCurrentUser().Id,
DZZoneCount = imProtectDevice.PuctgyCodeNavigation.DzzoneCount,
IsCRCC = true,
PUCtgyCode = imProtectDevice.PuctgyCode,
Support12YC = false,
AnalogParseMode = imProtectDevice.PuctgyCodeNavigation.AnalogParseMode,
DZReadOnly = false,
EventParseMode = imProtectDevice.PuctgyCodeNavigation.EventParseMode,
IsActive = true,
ManufacturerInfoId = porotectionDevice.EquipmentInfo.ManufacturerInfoId,
Model = imProtectDevice.PuctgyCodeNavigation.Model,
Name = imProtectDevice.PuctgyCodeNavigation.PuctgyName,
Generation = imProtectDevice.PuctgyCodeNavigation.Generation,
};
_protectionDeviceTypeyRepository.Insert(protectionDeviceType);
_protectionDeviceGatewayRepository.Insert(protectionDeviceGateway);
}
}
unitOfWork.Complete();
}
rst.Flag = true;
rst.Message = $"共完成{count}信息迁移";
}
catch (Exception ex)
{
rst.Message = ex.Message;
rst.Flag = false;
Log4Helper.Error(this.GetType(), "线路管理服务", ex);
}
return rst;
}
/// <summary>
/// 获取装置事件类型
/// </summary>
/// <param name="deviceAddr"></param>
/// <param name="eventCode"></param>
/// <returns></returns>
[ShowApi]
[AbpAllowAnonymous]
[HttpGet]
[DisableAuditing]
public RequestResult<EquipmentInfoAbnormalComponent> GetDeviceEventType(int deviceAddr,int eventCode)
{
RequestResult <EquipmentInfoAbnormalComponent> rst= new RequestResult<EquipmentInfoAbnormalComponent>();
try
{
var device = _imProtectDeviceRepository.GetAll().FirstOrDefault(t => t.DeviceAddr == deviceAddr);
if (device!=null)
{
var imEvent = _imEventTypeRepository.GetAll().FirstOrDefault(t=>t.Id == eventCode&&t.PuctgyCode == device.PuctgyCode);
if (imEvent!=null)
{
EquipmentInfoAbnormalComponent abnormalComponent = new EquipmentInfoAbnormalComponent()
{
ComponentName = device.DeviceName,
AbnormalReason = imEvent.EvtName,
HandlingMeasures ="",
};
rst.ResultData = abnormalComponent;
rst.Flag = true;
}
}
}
catch (Exception ex)
{
rst.Message = ex.Message;
Log4Helper.Error(this.GetType(), "获取装置事件类型", ex);
}
return rst;
}
/// <summary>
/// 获取装置状态
/// </summary>
/// <param name="equipmentInfoId"></param>
/// <returns></returns>
[ShowApi]
[AbpAllowAnonymous]
[HttpGet]
[DisableAuditing]
[UnitOfWork(isTransactional: false)]
public async Task<RequestResult<DeviceStatus>> GetDeviceStatusAsync(Guid equipmentInfoId)
{
RequestResult<DeviceStatus> rst = new RequestResult<DeviceStatus>();
try
{
ProtectionDeviceInfo protectionDeviceInfo = default;
using (var unitOfWork = _unitOfWorkManager.Begin())
{
protectionDeviceInfo = _protectionDeviceInfoRepository.GetAllIncluding(t=>t.EquipmentInfo).FirstOrDefault(t=>t.EquipmentInfoId == equipmentInfoId);
await unitOfWork.CompleteAsync();
}
if (protectionDeviceInfo != null)
{
using (var unitOfWork = _unitOfWorkManager.Begin())
{
var device = _imProtectDeviceRepository.GetAllIncluding(t=>t.GateWay).FirstOrDefault(t => t.Id == protectionDeviceInfo.ISMS_DeviceId);
if (device != null)
{
DeviceStatus deviceStatus = new DeviceStatus()
{
ConnectionStatus104=0,
EquipmentInfoId = equipmentInfoId,
EquipmentInfoName = protectionDeviceInfo.EquipmentInfo.Name,
FreeMemory = "0KB",
UsedMemory ="0KB",
LcdOperationPassword ="",
ProtectionDeviceId = protectionDeviceInfo.Id,
TotalDisk = "0M",
UsedDisk ="0M",
NetworkInterfaces = new List<NetworkInterfaceStatus>
{
new NetworkInterfaceStatus
{
IpAddress =device.GateWay.GatewayIp1,
InterfaceName ="eth0",
},
new NetworkInterfaceStatus
{
IpAddress =device.GateWay.GatewayIp2,
InterfaceName ="eth1",
},
new NetworkInterfaceStatus
{
IpAddress ="",
InterfaceName ="eth2",
},
}
};
rst.ResultData = deviceStatus;
rst.Flag = true;
}
await unitOfWork.CompleteAsync();
}
}
}
catch (Exception ex)
{
rst.Message = ex.Message;
Log4Helper.Error(this.GetType(), "线路管理服务", ex);
}
return rst;
}
/// <summary>
/// 根据关键字获取保护装置的遥信遥测
/// </summary>
/// <param name="equipmentInfoId"></param>
/// <param name="keyword"></param>
/// <returns></returns>
[ShowApi]
[AbpAllowAnonymous]
[HttpGet]
[DisableAuditing]
public async Task<RequestResult<List<TelemeteringConfigurationProperty>>> GetTelemeteringByKeywordAsync(Guid equipmentInfoId,string keyword)
{
RequestResult<List<TelemeteringConfigurationProperty>> rst = new();
try
{
if (equipmentInfoId!=default&&!string.IsNullOrWhiteSpace(keyword))
{
var repo =(await _telemeteringConfigurationRepository.GetAllIncludingAsync())
.Where(t => t.EquipmentInfoId == equipmentInfoId).ToList();
var data = repo.Where(t => t.Name.ToLower().Contains(keyword.ToLower()));
rst.ResultData = ObjectMapper.Map<List<TelemeteringConfigurationProperty>>(data);
rst.Flag = true;
}
//.Where(t=>t.Name.Contains())
}
catch (Exception ex)
{
Log4Helper.Error(this.GetType(), "线路管理服务", ex);
}
return rst;
}
/// <summary>
/// 获取装置初始监测状态
/// </summary>
/// <param name="equipmentInfoId"></param>
/// <returns></returns>
[AbpAllowAnonymous]
[HttpGet]
[DisableAuditing]
public async Task<RequestResult<DeviceCPUMonitoring>> GetDeviceCPUMonitoring(Guid equipmentInfoId)
{
RequestResult<DeviceCPUMonitoring> rst = new();
try
{
rst.ResultData = new DeviceCPUMonitoring
{
EquipmentInfoId = equipmentInfoId,
CPU5V1 = 5f,
CPU5V2 = 5f,
CPU5V3 = 5f,
CPUTemperature = 0,
SurfaceTemperature = 0,
Time = DateTime.Now,
};
rst.Flag = true;
}
catch (Exception ex)
{
rst.Message = ex.Message;
Log4Helper.Error(this.GetType(), "线路管理服务", ex);
}
return rst;
}
[AbpAllowAnonymous]
[HttpGet]
[DisableAuditing]
public async Task<RequestResult<BCodeAndNTP>> GetDeviceBCondeAndNTP(Guid equipmentInfoId)
{
RequestResult<BCodeAndNTP> rst = new();
try
{
var device = _protectionDeviceInfoRepository.GetAll().FirstOrDefault(t => t.EquipmentInfoId == equipmentInfoId);
if (device!=null)
{
var entity =await _bcodeAndNTP.HashSetGetOneAsync(nameof(BCodeAndNTP), device.DeviceAddress.ToString());
rst.ResultData = entity;
rst.Flag = true;
}
}
catch (Exception ex)
{
rst.Message = ex.Message;
Log4Helper.Error(this.GetType(), "线路管理服务", ex);
}
return rst;
}
#if DEBUG
/// <summary>
/// 填充出厂编号
/// </summary>
/// <returns></returns>
[ShowApi]
[AbpAllowAnonymous]
[HttpGet]
public RequestEasyResult UpdateProtetionInfoForTest()
{
RequestEasyResult rst = new RequestEasyResult();
try
{
var datas = _protectionDeviceInfoRepository.GetAllIncluding(t => t.EquipmentInfo);
Random random = new Random();
foreach (var data in datas) {
data.BaselineBoardVersion = "v1.100.001";
data.Specification = "110V 1A";
data.EquipmentInfo.FactorySerialNumber = "210"+ random.Next(100000, 1000000).ToString();
// 设置出厂时间:当前日期的前一天(您可以根据需求调整时间)
data.EquipmentInfo.ProductionDate = DateTime.Now.AddDays(-100);
// 设置检验人员
data.EquipmentInfo.VerificationPerson = "贺严玲"; // 请替换:实际人员名称
// 设置检验日期:当前日期
data.EquipmentInfo.VerificationDate = DateTime.Now.AddDays(0).ToString("yyyy-MM-dd"); // 日期格式: "yyyy-MM-dd"
// 设置检验记录内容
data.EquipmentInfo.VerificationRecords = "检验装置外观及功能,均符合要求";
}
}
catch (Exception ex)
{
throw;
}
return rst;
}
/// <summary>
/// 填充出厂编号
/// </summary>
/// <returns></returns>
[ShowApi]
[AbpAllowAnonymous]
[HttpGet]
public async Task<RequestEasyResult> UpdateProtetionInfoForHistoryTest()
{
RequestEasyResult rst = new RequestEasyResult();
try
{
List<ProtectionDeviceInfo> datas;
using (var unitOfWork = _unitOfWorkManager.Begin())
{
datas = _protectionDeviceInfoRepository.GetAllIncluding(t => t.EquipmentInfo).ToList();
await unitOfWork.CompleteAsync();
}
Random random = new Random();
for (int i = 0; i < 3; i++)
{
foreach (var data in datas)
{
EditProtectionQrCodeDeviceInfoInput deviceInfo = new EditProtectionQrCodeDeviceInfoInput
{
Name = data.Name, // 示例装置名称
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
/// <summary>
/// 生成装置的初始历史记录
/// </summary>
/// <returns></returns>
[ShowApi]
[AbpAllowAnonymous]
[HttpGet]
public RequestEasyResult SpawnDeviceinfoHistory()
{
RequestEasyResult rst = new();
var protectionDevices = _protectionDeviceInfoRepository.GetAllIncluding(t => t.EquipmentInfo).ToList();
foreach (var protectionDevice in protectionDevices)
{
// 记录历史数据
var protectionDeviceHistory = new ProtectionDeviceHistory
{
Name = protectionDevice.Name,
ProtectionDeviceInfoId = protectionDevice.Id,
RecodeDate = protectionDevice.CreationTime,
ContentJson = "", // 原始数据
ContentNewJson = JsonConvert.SerializeObject(protectionDevice), // 新数据
EventDescription = "保护设备台账建立",
EventRecordType = EventRecordTypeEnum.Device,
IsSend = false // 默认未发送
};
// 插入历史记录
_protectionDeviceHistoryRepository.Insert(protectionDeviceHistory);
}
rst.Flag = true;
return rst;
}
}
}