feat(光缆故障): 重构导出逻辑,增加计算字段与增强故障时间展示
- 将导出数据从手动构建Dictionary改为直接使用DTO序列化,简化Controller逻辑 - 为OdfCableFaultExportDto添加ExcelColumnName属性实现声明式中文列映射 - 在导出前填充计算字段FaultTimesDisplay和DisplayMileage - 将FaultTime和Mileage标记为ExcelIgnore,防止内部字段被导出 - Service层批量查询故障频次时间,并在分页结果中返回供前端使用 - 前端表格故障时间列增强展示,显示首次故障时间及额外频次时间列表
This commit is contained in:
parent
793c1dd691
commit
8e552ef6b5
|
|
@ -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<Dictionary<string, object>>();
|
||||
// 填充计算字段
|
||||
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<string, object>
|
||||
{
|
||||
["编号"] = 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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -114,19 +114,52 @@ namespace ZR.Model.Business.Dto
|
|||
/// </summary>
|
||||
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; }
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<string>();
|
||||
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<dynamic>
|
||||
{
|
||||
Result = list.Cast<dynamic>().ToList(),
|
||||
Result = resultList.Cast<dynamic>().ToList(),
|
||||
TotalNum = total,
|
||||
PageIndex = parm.PageNum,
|
||||
PageSize = parm.PageSize
|
||||
|
|
|
|||
|
|
@ -79,7 +79,15 @@
|
|||
@selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="50" align="center" />
|
||||
<el-table-column prop="id" label="Id" align="center" v-if="columns.showColumn('id')" />
|
||||
<el-table-column prop="faultTime" label="故障时间" align="center" :show-overflow-tooltip="true" v-if="columns.showColumn('faultTime')" />
|
||||
<el-table-column prop="faultTime" label="故障时间" align="center" :show-overflow-tooltip="false" v-if="columns.showColumn('faultTime')">
|
||||
<template #default="scope">
|
||||
<div v-if="scope.row.faultTimes && scope.row.faultTimes.length > 0">
|
||||
<div>{{ scope.row.faultTime }}</div>
|
||||
<div v-for="(t, i) in scope.row.faultTimes" :key="i" style="color: #909399;">{{ t }}</div>
|
||||
</div>
|
||||
<span v-else>{{ scope.row.faultTime }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="personnel" label="人员" align="center" :show-overflow-tooltip="true" v-if="columns.showColumn('personnel')" />
|
||||
<el-table-column prop="faultReason" label="故障原因" align="center" :show-overflow-tooltip="true" v-if="columns.showColumn('faultReason')" />
|
||||
<el-table-column label="表显故障里程" align="center" :show-overflow-tooltip="true" v-if="columns.showColumn('mileage')">
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user