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