From 8e552ef6b5935f209b70f3013983fabccdb38597 Mon Sep 17 00:00:00 2001 From: zpc Date: Fri, 3 Apr 2026 11:24:48 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E5=85=89=E7=BC=86=E6=95=85=E9=9A=9C):=20?= =?UTF-8?q?=E9=87=8D=E6=9E=84=E5=AF=BC=E5=87=BA=E9=80=BB=E8=BE=91=EF=BC=8C?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=AE=A1=E7=AE=97=E5=AD=97=E6=AE=B5=E4=B8=8E?= =?UTF-8?q?=E5=A2=9E=E5=BC=BA=E6=95=85=E9=9A=9C=E6=97=B6=E9=97=B4=E5=B1=95?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将导出数据从手动构建Dictionary改为直接使用DTO序列化,简化Controller逻辑 - 为OdfCableFaultExportDto添加ExcelColumnName属性实现声明式中文列映射 - 在导出前填充计算字段FaultTimesDisplay和DisplayMileage - 将FaultTime和Mileage标记为ExcelIgnore,防止内部字段被导出 - Service层批量查询故障频次时间,并在分页结果中返回供前端使用 - 前端表格故障时间列增强展示,显示首次故障时间及额外频次时间列表 --- .../Business/OdfCableFaultsController.cs | 26 ++------- .../Business/Dto/OdfCableFaultsDto.cs | 53 +++++++++++++++---- .../Business/OdfCableFaultsService.cs | 33 +++++++++++- .../src/views/business/OdfCableFaults.vue | 10 +++- 4 files changed, 89 insertions(+), 33 deletions(-) diff --git a/server/ZR.Admin.WebApi/Controllers/Business/OdfCableFaultsController.cs b/server/ZR.Admin.WebApi/Controllers/Business/OdfCableFaultsController.cs index 4d706fc..d7a48fd 100644 --- a/server/ZR.Admin.WebApi/Controllers/Business/OdfCableFaultsController.cs +++ b/server/ZR.Admin.WebApi/Controllers/Business/OdfCableFaultsController.cs @@ -118,8 +118,7 @@ namespace ZR.Admin.WebApi.Controllers.Business var faultIds = list.Select(item => item.Id).ToList(); var allFaultTimes = _OdfCableFaultsService.GetFaultTimesByFaultIds(faultIds); - // 构建中文列头的导出数据 - var exportList = new List>(); + // 填充计算字段 foreach (var item in list) { // 拼接所有故障时间(首次 + 增加的频次时间) @@ -130,28 +129,13 @@ namespace ZR.Admin.WebApi.Controllers.Business times.AddRange(allFaultTimes[item.Id].Select(t => t.ToString("yyyy-MM-dd HH:mm:ss"))); } times.Sort(); + item.FaultTimesDisplay = string.Join("\n", times); - var row = new Dictionary - { - ["编号"] = item.Id, - ["光缆编号"] = item.CableId, - ["故障时间"] = string.Join("\n", times), - ["故障发生频次"] = item.FaultCount, - ["人员"] = item.Personnel, - ["故障原因"] = item.FaultReason, - ["表显故障里程"] = CalcDisplayMileage(item.Mileage, item.MileageCorrection), - ["表显里程矫正"] = item.MileageCorrection, - ["地点"] = item.Location, - ["纬度"] = item.Latitude, - ["经度"] = item.Longitude, - ["备注"] = item.Remark, - ["创建时间"] = item.CreatedAt, - ["所属光缆"] = item.CableName - }; - exportList.Add(row); + // 表显故障里程 = 原始里程 + 矫正值 + item.DisplayMileage = CalcDisplayMileage(item.Mileage, item.MileageCorrection); } - var result = ExportExcelMini(exportList, "故障列表", "故障列表"); + var result = ExportExcelMini(list, "故障列表", "故障列表"); return ExportExcel(result.Item2, result.Item1); } diff --git a/server/ZR.Model/Business/Dto/OdfCableFaultsDto.cs b/server/ZR.Model/Business/Dto/OdfCableFaultsDto.cs index 4fea087..dfa72a8 100644 --- a/server/ZR.Model/Business/Dto/OdfCableFaultsDto.cs +++ b/server/ZR.Model/Business/Dto/OdfCableFaultsDto.cs @@ -114,19 +114,52 @@ namespace ZR.Model.Business.Dto /// public class OdfCableFaultExportDto { + [ExcelColumnName("编号")] public int Id { get; set; } + + [ExcelColumnName("光缆编号")] public int CableId { get; set; } - public DateTime FaultTime { get; set; } - public string Personnel { get; set; } - public string FaultReason { get; set; } - public string Mileage { get; set; } - public string MileageCorrection { get; set; } - public string Location { get; set; } - public decimal Latitude { get; set; } - public decimal Longitude { get; set; } - public string Remark { get; set; } - public DateTime? CreatedAt { get; set; } + + [ExcelColumnName("故障时间")] + public string FaultTimesDisplay { get; set; } + + [ExcelColumnName("故障发生频次")] public int FaultCount { get; set; } + + [ExcelColumnName("人员")] + public string Personnel { get; set; } + + [ExcelColumnName("故障原因")] + public string FaultReason { get; set; } + + [ExcelColumnName("表显故障里程")] + public string DisplayMileage { get; set; } + + [ExcelColumnName("表显里程矫正")] + public string MileageCorrection { get; set; } + + [ExcelColumnName("地点")] + public string Location { get; set; } + + [ExcelColumnName("纬度")] + public decimal Latitude { get; set; } + + [ExcelColumnName("经度")] + public decimal Longitude { get; set; } + + [ExcelColumnName("备注")] + public string Remark { get; set; } + + [ExcelColumnName("创建时间")] + public DateTime? CreatedAt { get; set; } + + [ExcelColumnName("所属光缆")] public string CableName { get; set; } + + // 以下字段不导出,仅内部使用 + [ExcelIgnore] + public DateTime FaultTime { get; set; } + [ExcelIgnore] + public string Mileage { get; set; } } } diff --git a/server/ZR.Service/Business/OdfCableFaultsService.cs b/server/ZR.Service/Business/OdfCableFaultsService.cs index b361884..fc96abf 100644 --- a/server/ZR.Service/Business/OdfCableFaultsService.cs +++ b/server/ZR.Service/Business/OdfCableFaultsService.cs @@ -49,9 +49,40 @@ namespace ZR.Service.Business .OrderByDescending(it => it.FaultTime) .ToPageList(parm.PageNum, parm.PageSize, ref total); + // 批量查询频次时间记录 + var faultIds = list.Select(x => x.Id).ToList(); + var allFaultTimes = GetFaultTimesByFaultIds(faultIds); + + var resultList = list.Select(item => + { + var times = new List(); + if (allFaultTimes.ContainsKey(item.Id)) + { + times = allFaultTimes[item.Id].Select(t => t.ToString("yyyy-MM-dd HH:mm:ss")).ToList(); + } + return new + { + item.Id, + item.CableId, + item.FaultTime, + item.Personnel, + item.FaultReason, + item.Mileage, + item.MileageCorrection, + item.Location, + item.Latitude, + item.Longitude, + item.Remark, + item.CreatedAt, + item.FaultCount, + item.CableName, + FaultTimes = times + }; + }).ToList(); + return new PagedInfo { - Result = list.Cast().ToList(), + Result = resultList.Cast().ToList(), TotalNum = total, PageIndex = parm.PageNum, PageSize = parm.PageSize diff --git a/server/ZR.Vue/src/views/business/OdfCableFaults.vue b/server/ZR.Vue/src/views/business/OdfCableFaults.vue index 71f0575..45035db 100644 --- a/server/ZR.Vue/src/views/business/OdfCableFaults.vue +++ b/server/ZR.Vue/src/views/business/OdfCableFaults.vue @@ -79,7 +79,15 @@ @selection-change="handleSelectionChange"> - + + +