feat: include actual receiver dept list in task hall export

This commit is contained in:
Your Name 2026-02-24 16:27:15 +08:00
parent f483ad4738
commit 5dbbec8ac9

View File

@ -15,6 +15,7 @@ import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
@ -149,6 +150,7 @@ public class ExportService {
taskItemsMap.put(virtualId, List.of(correspondingItem));
virtualTaskToItemMap.put(virtualId, correspondingItem);
}
Map<Long, String> taskActualReceiverDeptListMap = buildTaskActualReceiverDeptListMap(filteredItems, deptMap);
// 🔥 第一遍遍历:收集所有出现的任务类型名称(用于动态列)
java.util.LinkedHashSet<String> allTypeNames = new java.util.LinkedHashSet<>();
@ -241,6 +243,12 @@ public class ExportService {
row.put("publisherDept", deptMap.getOrDefault(task.getPublisherDeptId(), ""));
row.put("receiver", userMap.getOrDefault(task.getReceiverId(), ""));
row.put("receiverDept", deptMap.getOrDefault(task.getReceiverDeptId(), ""));
TaskItem currentItem = virtualTaskToItemMap.get(task.getId());
if (currentItem != null) {
row.put("actualReceiverDeptList", taskActualReceiverDeptListMap.getOrDefault(currentItem.getTaskId(), ""));
} else {
row.put("actualReceiverDeptList", "");
}
row.put("status", getStatusText(task.getStatus()));
row.put("releaseType", getReleaseTypeText(task.getReleaseType()));
row.put("isUrgent", task.getIsUrgent() != null && task.getIsUrgent() == 1 ? "是" : "否");
@ -279,6 +287,7 @@ public class ExportService {
headerList.add("发布部门"); fieldList.add("publisherDept");
headerList.add("接收人"); fieldList.add("receiver");
headerList.add("接收部门"); fieldList.add("receiverDept");
headerList.add("实际接单部门列表"); fieldList.add("actualReceiverDeptList");
headerList.add("状态"); fieldList.add("status");
headerList.add("发布类型"); fieldList.add("releaseType");
headerList.add("是否紧急"); fieldList.add("isUrgent");
@ -296,6 +305,26 @@ public class ExportService {
ExcelExportUtil.exportExcel(response, fileName, "任务明细", headers, fieldNames, exportList);
log.info("任务大厅数据导出完成,共 {} 条", exportList.size());
}
private Map<Long, String> buildTaskActualReceiverDeptListMap(List<TaskItem> items, Map<Long, String> deptMap) {
Map<Long, LinkedHashSet<String>> taskDeptSetMap = new HashMap<>();
for (TaskItem item : items) {
if (item.getTaskId() == null || item.getReceiverDeptId() == null) {
continue;
}
String deptName = deptMap.getOrDefault(item.getReceiverDeptId(), "");
if (deptName == null || deptName.isBlank()) {
continue;
}
taskDeptSetMap.computeIfAbsent(item.getTaskId(), k -> new LinkedHashSet<>()).add(deptName);
}
Map<Long, String> result = new HashMap<>();
for (Map.Entry<Long, LinkedHashSet<String>> entry : taskDeptSetMap.entrySet()) {
result.put(entry.getKey(), String.join("、", entry.getValue()));
}
return result;
}
/**
* 获取状态文本
@ -552,4 +581,3 @@ public class ExportService {
ExcelExportUtil.exportExcel(response, fileName, "设计师统计", headers, fieldNames, stats);
}
}