diff --git a/ZR.Admin.WebApi/Controllers/Business/OdfPortsController.cs b/ZR.Admin.WebApi/Controllers/Business/OdfPortsController.cs index dd57f71..a7fc27f 100644 --- a/ZR.Admin.WebApi/Controllers/Business/OdfPortsController.cs +++ b/ZR.Admin.WebApi/Controllers/Business/OdfPortsController.cs @@ -13,6 +13,8 @@ using Aliyun.OSS; using System.Linq; using ZR.Model.System.Dto; using Microsoft.AspNetCore.Connections.Features; +using System.Text.RegularExpressions; +using System.Text; //创建时间:2025-08-05 namespace ZR.Admin.WebApi.Controllers.Business @@ -310,6 +312,7 @@ namespace ZR.Admin.WebApi.Controllers.Business var modal = parm.Adapt().ToCreate(HttpContext); modal.CreatedAt = DateTime.Now; modal.UpdatedAt = DateTime.Now; + modal.HistoryRemarks = ToHistoryString(parm.HistoryFault); var response = _OdfPortsService.AddOdfPorts(modal); if (parm.HistoryFault != null && parm.HistoryFault.Count > 0) { @@ -339,6 +342,7 @@ namespace ZR.Admin.WebApi.Controllers.Business { var modal = parm.Adapt().ToUpdate(HttpContext); modal.UpdatedAt = DateTime.Now; + modal.HistoryRemarks = ToHistoryString(parm.HistoryFault); var response = _OdfPortsService.UpdateOdfPorts(modal); var count = await _OdfPortFaultService.CountAsync(it => it.PortId == modal.Id); if (count > 0) @@ -386,10 +390,12 @@ namespace ZR.Admin.WebApi.Controllers.Business if (port.Status == 0) { port.Remarks = ""; + port.OpticalCableOffRemarks = ""; } - + port.HistoryRemarks = ToHistoryString(parm.HistoryFault); 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); @@ -411,6 +417,32 @@ namespace ZR.Admin.WebApi.Controllers.Business return ToResponse(response); } + /// + /// 将历史记录集合转换为字符串 + /// + /// 日期+原因集合 + /// 是否输出时间(true: yyyy-MM-dd HH:mm:ss, false: 仅日期) + /// 拼接好的字符串 + private string ToHistoryString(List items, bool includeTime = true) + { + if (items == null || items.Count == 0) + return string.Empty; + + StringBuilder sb = new StringBuilder(); + + foreach (var item in items) + { + // 判断是否输出时间 + string datePart = includeTime + ? item.FaultTime.ToString("yyyy-MM-dd HH:mm:ss") + : item.FaultTime.ToString("yyyy-MM-dd"); + + sb.AppendLine($"{datePart} {item.FaultReason}"); + } + + return sb.ToString().TrimEnd(); // 去掉最后多余的换行符 + } + /// @@ -611,12 +643,13 @@ namespace ZR.Admin.WebApi.Controllers.Business HistoryRemarks = excelItem.HistoryRemarks?.Trim(), OpticalCableOffRemarks = excelItem.OpticalCableOffRemarks }; - await _OdfPortsService.InsertAsync(port); + port = _OdfPortsService.AddOdfPorts(port); addPortCount++; } else { port.HistoryRemarks = excelItem.HistoryRemarks?.Trim(); + port.Remarks = excelItem.Remarks?.Trim(); port.OpticalAttenuation = excelItem.OpticalAttenuation?.Trim(); port.Status = excelItem.Status; @@ -624,6 +657,40 @@ namespace ZR.Admin.WebApi.Controllers.Business port.UpdatedAt = DateTime.Now; await _OdfPortsService.UpdateAsync(port); } + if (string.IsNullOrEmpty(port.HistoryRemarks)) + { + var count = await _OdfPortFaultService.CountAsync(it => it.PortId == port.Id); + if (count > 0) + { + await _OdfPortFaultService.DeleteAsync(it => it.PortId == port.Id); + } + } + else + { + var count = await _OdfPortFaultService.CountAsync(it => it.PortId == port.Id); + if (count > 0) + { + await _OdfPortFaultService.DeleteAsync(it => it.PortId == port.Id); + } + var list2 = ParseHistory(port.HistoryRemarks); + if (list2.Count > 0) + { + var list3 = new List(); + foreach (var item in list2) + { + var o = new OdfPortFault() + { + CreateTime = item.Date, + FaultReason = item.Reason, + FaultTime = item.Date, + PortId = port.Id, + }; + list3.Add(o); + + } + await _OdfPortFaultService.InsertRangeAsync(list3); + } + } successCount++; } catch (Exception) @@ -636,6 +703,51 @@ namespace ZR.Admin.WebApi.Controllers.Business return SUCCESS($"共查询{list.Count}条数据,导入成功{successCount}条数据!导入失败{errorCount}条!{(addRoomCount > 0 ? "添加机房" + addRoomCount + "条," : "")}{(addRackCount > 0 ? "添加机架" + addRackCount + "条" : "")}{(addFrameCount > 0 ? "添加机框" + addFrameCount + "条" : "")}"); } + /// + /// 解析历史备注字符串,提取日期/时间和原因 + /// + /// 原始字符串 + /// 日期+原因集合 + private List<(DateTime Date, string Reason)> ParseHistory(string historyRemarks) + { + var result = new List<(DateTime, string)>(); + + try + { + if (string.IsNullOrWhiteSpace(historyRemarks)) + return result; + + // 按行拆分 + string[] lines = historyRemarks.Split(new[] { "\r\n", "\n" }, StringSplitOptions.RemoveEmptyEntries); + + // 正则:日期 + 可选时间 + 原因 + Regex regex = new Regex(@"^(?\d{4}-\d{2}-\d{2})(\s+(? /// /// - public PagedInfo ExportList(OdfPortsQueryDto parm) + public PagedInfo ExportList(OdfPortsQueryDto parm) { parm.PageNum = 1; - parm.PageSize = 100000; + parm.PageSize = 10000000; var predicate = QueryExp(parm); var response = Queryable() .Where(predicate.ToExpression()) .OrderBy("RoomId asc,RackId asc,FrameId asc,RowNumber asc,PortNumber Asc") - .Select((it) => new OdfPortsDto() + .Select((it) => new OdfPortsfDto() { }, true) .ToPage(parm); @@ -156,16 +156,16 @@ namespace ZR.Service.Business /// /// /// - public PagedInfo ExportList(OdfPortsQuerysDto parm) + public PagedInfo ExportList(OdfPortsQuerysDto parm) { parm.PageNum = 1; - parm.PageSize = 100000; + parm.PageSize = 10000000; var predicate = QueryExp(parm); var response = Queryable() .Where(predicate.ToExpression()) .OrderBy("RoomId asc,RackId asc,FrameId asc,RowNumber asc,PortNumber Asc") - .Select((it) => new OdfPortsDto() + .Select((it) => new OdfPortsfDto() { }, true) .ToPage(parm);