From 6e60d634aca5324cedd3110f510929f87adab677 Mon Sep 17 00:00:00 2001 From: zpc Date: Sun, 21 Sep 2025 16:59:17 +0800 Subject: [PATCH] 321 --- .../Business/OdfPortFaultController.cs | 55 ++++++++++++ .../Business/OdfPortsController.cs | 86 +++++++++++++++++-- ZR.Model/Business/Dto/OdfPortFaultDto.cs | 33 +++++++ ZR.Model/Business/Dto/OdfPortsDto.cs | 34 +++++++- ZR.Model/Business/OdfPortFault.cs | 41 +++++++++ .../IBusinessService/IOdfPortFaultService.cs | 20 +++++ ZR.Service/Business/OdfPortFaultService.cs | 70 +++++++++++++++ 7 files changed, 329 insertions(+), 10 deletions(-) create mode 100644 ZR.Admin.WebApi/Controllers/Business/OdfPortFaultController.cs create mode 100644 ZR.Model/Business/Dto/OdfPortFaultDto.cs create mode 100644 ZR.Model/Business/OdfPortFault.cs create mode 100644 ZR.Service/Business/IBusinessService/IOdfPortFaultService.cs create mode 100644 ZR.Service/Business/OdfPortFaultService.cs diff --git a/ZR.Admin.WebApi/Controllers/Business/OdfPortFaultController.cs b/ZR.Admin.WebApi/Controllers/Business/OdfPortFaultController.cs new file mode 100644 index 0000000..eaf2944 --- /dev/null +++ b/ZR.Admin.WebApi/Controllers/Business/OdfPortFaultController.cs @@ -0,0 +1,55 @@ +using Microsoft.AspNetCore.Mvc; +using ZR.Model.Business.Dto; +using ZR.Model.Business; +using ZR.Service.Business.IBusinessService; + +//创建时间:2025-09-21 +namespace ZR.Admin.WebApi.Controllers.Business +{ + /// + /// 错误日志 + /// + [Route("business/OdfPortFault")] + public class OdfPortFaultController : BaseController + { + /// + /// 错误日志接口 + /// + private readonly IOdfPortFaultService _OdfPortFaultService; + + public OdfPortFaultController(IOdfPortFaultService OdfPortFaultService) + { + _OdfPortFaultService = OdfPortFaultService; + } + + /// + /// 查询错误日志列表 + /// + /// + /// + [HttpGet("list")] + [ActionPermissionFilter(Permission = "odfportfault:list")] + public IActionResult QueryOdfPortFault([FromQuery] OdfPortFaultQueryDto parm) + { + var response = _OdfPortFaultService.GetList(parm); + return SUCCESS(response); + } + + + /// + /// 查询错误日志详情 + /// + /// + /// + [HttpGet("{Id}")] + [ActionPermissionFilter(Permission = "odfportfault:query")] + public IActionResult GetOdfPortFault(int Id) + { + var response = _OdfPortFaultService.GetInfo(Id); + + var info = response.Adapt(); + return SUCCESS(info); + } + + } +} \ No newline at end of file diff --git a/ZR.Admin.WebApi/Controllers/Business/OdfPortsController.cs b/ZR.Admin.WebApi/Controllers/Business/OdfPortsController.cs index 9176663..0a5fa63 100644 --- a/ZR.Admin.WebApi/Controllers/Business/OdfPortsController.cs +++ b/ZR.Admin.WebApi/Controllers/Business/OdfPortsController.cs @@ -12,6 +12,7 @@ using ZR.Repository; using Aliyun.OSS; using System.Linq; using ZR.Model.System.Dto; +using Microsoft.AspNetCore.Connections.Features; //创建时间:2025-08-05 namespace ZR.Admin.WebApi.Controllers.Business @@ -51,13 +52,19 @@ namespace ZR.Admin.WebApi.Controllers.Business /// private readonly IOdfFramesService _OdfFramesService; + /// + /// 故障 + /// + private readonly IOdfPortFaultService _OdfPortFaultService; + public OdfPortsController(IOdfRoomsService OdfRoomsService, ISysDeptService sysDeptService, ISysUserService sysUserService, IOdfPortsService odfPortsService, IOdfFramesService odfFramesService, - IOdfRacksService odfRacksService + IOdfRacksService odfRacksService, + IOdfPortFaultService odfPortFaultService ) { @@ -67,7 +74,7 @@ namespace ZR.Admin.WebApi.Controllers.Business _OdfFramesService = odfFramesService; _OdfRacksService = odfRacksService; _SysDeptService = sysDeptService; - + _OdfPortFaultService = odfPortFaultService; } /// @@ -118,12 +125,37 @@ namespace ZR.Admin.WebApi.Controllers.Business Name = it.Name, Status = it.Status, PortNumber = it.PortNumber, - RowNumber = it.RowNumber + RowNumber = it.RowNumber, + Tips = it.Remarks, + OpticalAttenuation = it.OpticalAttenuation }).ToListAsync(); List row = new List(); l.GroupBy(it => it.RowNumber).ToList().ForEach(g => { - var li = l.Where(it => it.RowNumber == g.Key).OrderBy(it => it.PortNumber).Select(it => new OdfPortsMDto { Id = it.Id, Name = it.Name, Status = it.Status }).ToList(); + var li = l.Where(it => it.RowNumber == g.Key).OrderBy(it => it.PortNumber).Select(it => + { + var tips = ""; + if (it.Status == 1) + { + tips = it.OpticalAttenuation; + } + else + { + if (!string.IsNullOrEmpty(it.Tips)) + { + var t = it.Tips.Split(" "); + if (t.Length > 0 && t.Length > 2 && t[2].Length > 0) + { + tips = t[2].Substring(0, 1); + } + else + { + tips = it.Tips.Substring(0, 1); + } + } + } + return new OdfPortsMDto { Id = it.Id, Name = it.Name, Status = it.Status, Tips = tips }; + }).ToList(); row.Add(new OdfPortsMDtot() { RowList = li, Name = (g.Key + 1).ToString() }); }); @@ -141,11 +173,29 @@ namespace ZR.Admin.WebApi.Controllers.Business /// [HttpGet("{Id}")] [ActionPermissionFilter(Permission = "odfports:query")] - public IActionResult GetOdfPorts(int Id) + public async Task GetOdfPorts(int Id) { var response = _OdfPortsService.GetInfo(Id); var info = response.Adapt(); + info.HistoryFault = new List(); + if (info != null) + { + var faults = await _OdfPortFaultService.GetListAsync(it => it.PortId == info.Id); + if (faults != null && faults.Count > 0) + { + + foreach (var item in faults) + { + info.HistoryFault.Add(new OdfPortsHistoryDto() + { + FaultReason = item.FaultReason, + FaultTime = item.FaultTime ?? DateTime.Now, + }); + } + } + + } return SUCCESS(info); } @@ -245,7 +295,6 @@ namespace ZR.Admin.WebApi.Controllers.Business [ActionPermissionFilter(Permission = "odfports:edit")] public IActionResult GetOdfTest() { - return SUCCESS(new { update = true }); } @@ -259,7 +308,7 @@ namespace ZR.Admin.WebApi.Controllers.Business public IActionResult AddOdfPorts([FromBody] OdfPortsDto parm) { var modal = parm.Adapt().ToCreate(HttpContext); - modal.CreatedAt= DateTime.Now; + modal.CreatedAt = DateTime.Now; modal.UpdatedAt = DateTime.Now; var response = _OdfPortsService.AddOdfPorts(modal); @@ -289,7 +338,7 @@ namespace ZR.Admin.WebApi.Controllers.Business [HttpPost("save")] [ActionPermissionFilter(Permission = "odfports:edit")] [Log(Title = "APP修改端口", BusinessType = BusinessType.UPDATE)] - public IActionResult SaveMOdfPorts([FromBody] OdfPortsMMDto parm) + public async Task SaveMOdfPorts([FromBody] OdfPortsMMDto parm) { var port = _OdfPortsService.GetById(parm.Id); if (port == null) @@ -302,13 +351,32 @@ namespace ZR.Admin.WebApi.Controllers.Business port.OpticalAttenuation = parm.OpticalAttenuation; port.UpdatedAt = DateTime.Now; port.OpticalCableOffRemarks = parm.OpticalCableOffRemarks; + if (port.Status == 0) { port.Remarks = ""; } var response = _OdfPortsService.UpdateOdfPorts(port); - + var count = await _OdfPortFaultService.CountAsync(it => it.PortId == port.Id); + if (count > 0) + { + await _OdfPortFaultService.DeleteAsync(it => it.PortId == port.Id); + } + if (parm.HistoryFault != null && parm.HistoryFault.Count > 0) + { + foreach (var item in parm.HistoryFault) + { + var o = new OdfPortFault() + { + CreateTime = DateTime.Now, + FaultReason = item.FaultReason, + FaultTime = item.FaultTime, + PortId = port.Id, + }; + await _OdfPortFaultService.InsertAsync(o); + } + } return ToResponse(response); } diff --git a/ZR.Model/Business/Dto/OdfPortFaultDto.cs b/ZR.Model/Business/Dto/OdfPortFaultDto.cs new file mode 100644 index 0000000..a9ff3d9 --- /dev/null +++ b/ZR.Model/Business/Dto/OdfPortFaultDto.cs @@ -0,0 +1,33 @@ + +namespace ZR.Model.Business.Dto +{ + /// + /// 错误日志查询对象 + /// + public class OdfPortFaultQueryDto : PagerInfo + { + } + + /// + /// 错误日志输入输出对象 + /// + public class OdfPortFaultDto + { + [Required(ErrorMessage = "主键ID不能为空")] + public int Id { get; set; } + + [Required(ErrorMessage = "对应的端口ID不能为空")] + public int PortId { get; set; } + + [Required(ErrorMessage = "历史故障发生时间不能为空")] + public DateTime? FaultTime { get; set; } + + public string FaultReason { get; set; } + + [Required(ErrorMessage = "创建时间不能为空")] + public DateTime? CreateTime { get; set; } + + + + } +} \ No newline at end of file diff --git a/ZR.Model/Business/Dto/OdfPortsDto.cs b/ZR.Model/Business/Dto/OdfPortsDto.cs index 4052ccc..b162c96 100644 --- a/ZR.Model/Business/Dto/OdfPortsDto.cs +++ b/ZR.Model/Business/Dto/OdfPortsDto.cs @@ -92,6 +92,10 @@ namespace ZR.Model.Business.Dto public int Id { get; set; } public string Name { get; set; } public int Status { get; set; } + + public string Tips { get; set; } + + public string OpticalAttenuation { get; set; } } public class OdfPortsMDtoc : OdfPortsMDto { @@ -181,6 +185,10 @@ namespace ZR.Model.Business.Dto [ExcelColumnName("历史故障表")] public string HistoryRemarks { get; set; } + + + public List HistoryFault { get; set; } + [Required(ErrorMessage = "创建时间不能为空")] [ExcelColumn(Name = "创建时间", Format = "yyyy-MM-dd HH:mm:ss", Width = 20)] [ExcelColumnName("创建时间")] @@ -211,7 +219,9 @@ namespace ZR.Model.Business.Dto /// [ExcelColumn(Name = "部门名称")] public string DeptName { get; set; } - + + + } /// @@ -381,6 +391,9 @@ namespace ZR.Model.Business.Dto public int Status { get; set; } + /// + /// 备注 + /// public string Remarks { get; set; } public string OpticalAttenuation { get; set; } @@ -392,7 +405,26 @@ namespace ZR.Model.Business.Dto /// /// /// + public List HistoryFault { get; set; } + + + + /// + /// 光缆段信息 + /// public string OpticalCableOffRemarks { get; set; } } + + public class OdfPortsHistoryDto + { + /// + /// 错误时间 + /// + public DateTime FaultTime { get; set; } + /// + /// 故障原因 + /// + public string FaultReason { get; set; } + } } \ No newline at end of file diff --git a/ZR.Model/Business/OdfPortFault.cs b/ZR.Model/Business/OdfPortFault.cs new file mode 100644 index 0000000..278878f --- /dev/null +++ b/ZR.Model/Business/OdfPortFault.cs @@ -0,0 +1,41 @@ + +namespace ZR.Model.Business +{ + /// + /// 错误日志 + /// + [SugarTable("odf_port_fault")] + public class OdfPortFault + { + /// + /// 主键ID + /// + [SugarColumn(IsPrimaryKey = true, IsIdentity = true)] + public int Id { get; set; } + + /// + /// 对应的端口ID + /// + [SugarColumn(ColumnName = "port_id")] + public int PortId { get; set; } + + /// + /// 历史故障发生时间 + /// + [SugarColumn(ColumnName = "fault_time")] + public DateTime? FaultTime { get; set; } + + /// + /// 历史故障发生原因 + /// + [SugarColumn(ColumnName = "fault_reason")] + public string FaultReason { get; set; } + + /// + /// 创建时间 + /// + [SugarColumn(ColumnName = "create_time")] + public DateTime? CreateTime { get; set; } + + } +} \ No newline at end of file diff --git a/ZR.Service/Business/IBusinessService/IOdfPortFaultService.cs b/ZR.Service/Business/IBusinessService/IOdfPortFaultService.cs new file mode 100644 index 0000000..01451a6 --- /dev/null +++ b/ZR.Service/Business/IBusinessService/IOdfPortFaultService.cs @@ -0,0 +1,20 @@ +using ZR.Model.Business.Dto; +using ZR.Model.Business; + +namespace ZR.Service.Business.IBusinessService +{ + /// + /// 错误日志service接口 + /// + public interface IOdfPortFaultService : IBaseService + { + PagedInfo GetList(OdfPortFaultQueryDto parm); + + OdfPortFault GetInfo(int Id); + + + OdfPortFault AddOdfPortFault(OdfPortFault parm); + + + } +} diff --git a/ZR.Service/Business/OdfPortFaultService.cs b/ZR.Service/Business/OdfPortFaultService.cs new file mode 100644 index 0000000..475de20 --- /dev/null +++ b/ZR.Service/Business/OdfPortFaultService.cs @@ -0,0 +1,70 @@ +using Infrastructure.Attribute; +using Infrastructure.Extensions; +using ZR.Model.Business.Dto; +using ZR.Model.Business; +using ZR.Repository; +using ZR.Service.Business.IBusinessService; + +namespace ZR.Service.Business +{ + /// + /// 错误日志Service业务层处理 + /// + [AppService(ServiceType = typeof(IOdfPortFaultService), ServiceLifetime = LifeTime.Transient)] + public class OdfPortFaultService : BaseService, IOdfPortFaultService + { + /// + /// 查询错误日志列表 + /// + /// + /// + public PagedInfo GetList(OdfPortFaultQueryDto parm) + { + var predicate = QueryExp(parm); + + var response = Queryable() + //.OrderBy("Id asc") + .Where(predicate.ToExpression()) + .ToPage(parm); + + return response; + } + + + /// + /// 获取详情 + /// + /// + /// + public OdfPortFault GetInfo(int Id) + { + var response = Queryable() + .Where(x => x.Id == Id) + .First(); + + return response; + } + + /// + /// 添加错误日志 + /// + /// + /// + public OdfPortFault AddOdfPortFault(OdfPortFault model) + { + return Insertable(model).ExecuteReturnEntity(); + } + + /// + /// 查询导出表达式 + /// + /// + /// + private static Expressionable QueryExp(OdfPortFaultQueryDto parm) + { + var predicate = Expressionable.Create(); + + return predicate; + } + } +} \ No newline at end of file