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 faultIds = list.Select(item => item.Id).ToList();
|
||||||
var allFaultTimes = _OdfCableFaultsService.GetFaultTimesByFaultIds(faultIds);
|
var allFaultTimes = _OdfCableFaultsService.GetFaultTimesByFaultIds(faultIds);
|
||||||
|
|
||||||
// 构建中文列头的导出数据
|
// 填充计算字段
|
||||||
var exportList = new List<Dictionary<string, object>>();
|
|
||||||
foreach (var item in 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.AddRange(allFaultTimes[item.Id].Select(t => t.ToString("yyyy-MM-dd HH:mm:ss")));
|
||||||
}
|
}
|
||||||
times.Sort();
|
times.Sort();
|
||||||
|
item.FaultTimesDisplay = string.Join("\n", times);
|
||||||
|
|
||||||
var row = new Dictionary<string, object>
|
// 表显故障里程 = 原始里程 + 矫正值
|
||||||
{
|
item.DisplayMileage = CalcDisplayMileage(item.Mileage, item.MileageCorrection);
|
||||||
["编号"] = 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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var result = ExportExcelMini(exportList, "故障列表", "故障列表");
|
var result = ExportExcelMini(list, "故障列表", "故障列表");
|
||||||
return ExportExcel(result.Item2, result.Item1);
|
return ExportExcel(result.Item2, result.Item1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -114,19 +114,52 @@ namespace ZR.Model.Business.Dto
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class OdfCableFaultExportDto
|
public class OdfCableFaultExportDto
|
||||||
{
|
{
|
||||||
|
[ExcelColumnName("编号")]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
[ExcelColumnName("光缆编号")]
|
||||||
public int CableId { get; set; }
|
public int CableId { get; set; }
|
||||||
public DateTime FaultTime { get; set; }
|
|
||||||
public string Personnel { get; set; }
|
[ExcelColumnName("故障时间")]
|
||||||
public string FaultReason { get; set; }
|
public string FaultTimesDisplay { get; set; }
|
||||||
public string Mileage { get; set; }
|
|
||||||
public string MileageCorrection { get; set; }
|
[ExcelColumnName("故障发生频次")]
|
||||||
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; }
|
|
||||||
public int FaultCount { get; set; }
|
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; }
|
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)
|
.OrderByDescending(it => it.FaultTime)
|
||||||
.ToPageList(parm.PageNum, parm.PageSize, ref total);
|
.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>
|
return new PagedInfo<dynamic>
|
||||||
{
|
{
|
||||||
Result = list.Cast<dynamic>().ToList(),
|
Result = resultList.Cast<dynamic>().ToList(),
|
||||||
TotalNum = total,
|
TotalNum = total,
|
||||||
PageIndex = parm.PageNum,
|
PageIndex = parm.PageNum,
|
||||||
PageSize = parm.PageSize
|
PageSize = parm.PageSize
|
||||||
|
|
|
||||||
|
|
@ -79,7 +79,15 @@
|
||||||
@selection-change="handleSelectionChange">
|
@selection-change="handleSelectionChange">
|
||||||
<el-table-column type="selection" width="50" align="center" />
|
<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="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="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 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')">
|
<el-table-column label="表显故障里程" align="center" :show-overflow-tooltip="true" v-if="columns.showColumn('mileage')">
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user