羊只档案导出问题

This commit is contained in:
ll
2026-03-04 20:47:31 +08:00
parent b8b15604b3
commit 0fc748bbfd

View File

@@ -209,62 +209,34 @@ public class SheepFileController extends BaseController
@PostMapping("/export")
public void export(HttpServletResponse response, HttpServletRequest request)
{
// 构建查询条件对象
SheepFile sheepFile = new SheepFile();
Map<String, Object> customParams = new HashMap<>();
// 解析所有请求参数
Map<String, String[]> parameterMap = request.getParameterMap();
// 1. 更直接地获取前端参数
String exportIdsStr = request.getParameter("exportIds");
String visibleColumnsStr = request.getParameter("visibleColumns");
// 2. 遍历其他条件
for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
String key = entry.getKey();
String[] values = entry.getValue();
if (values != null && values.length > 0 && StringUtils.isNotBlank(values[0])) {
String value = values[0];
// 使用若依框架的工具方法处理参数
switch (key) {
// --- 单值参数 ---
case "bsManageTags":
sheepFile.setBsManageTags(convertToString(value));
break;
case "electronicTags":
sheepFile.setElectronicTags(convertToString(value));
break;
case "drRanch":
sheepFile.setDrRanch(convertToString(value));
break;
case "variety":
sheepFile.setVariety(convertToString(value));
break;
case "name":
sheepFile.setName(convertToString(value));
break;
case "gender":
sheepFile.setGender(Convert.toLong(value));
break;
case "statusId":
sheepFile.setStatusId(Convert.toLong(value));
break;
case "breed":
sheepFile.setBreed(convertToString(value));
break;
// --- 新增:处理多选数组参数 ---
// request.getParameterMap 中的值本身就是 String[],可以直接使用
case "allEarNumbers":
sheepFile.setAllEarNumbers(new ArrayList<>(Arrays.asList(values)));
break;
case "allEleEarNumbers":
sheepFile.setAllEleEarNumbers(new ArrayList<>(Arrays.asList(values)));
break;
case "allBreedingStatus":
sheepFile.setAllBreedingStatus(new ArrayList<>(Arrays.asList(values)));
break;
case "allSheepTypes":
sheepFile.setAllSheepTypes(new ArrayList<>(Arrays.asList(values)));
break;
case "bsManageTags": sheepFile.setBsManageTags(convertToString(value)); break;
case "electronicTags": sheepFile.setElectronicTags(convertToString(value)); break;
case "drRanch": sheepFile.setDrRanch(convertToString(value)); break;
case "variety": sheepFile.setVariety(convertToString(value)); break;
case "name": sheepFile.setName(convertToString(value)); break;
case "gender": sheepFile.setGender(Convert.toLong(value)); break;
case "statusId": sheepFile.setStatusId(Convert.toLong(value)); break;
case "breed": sheepFile.setBreed(convertToString(value)); break;
case "allEarNumbers": sheepFile.setAllEarNumbers(new ArrayList<>(Arrays.asList(values))); break;
case "allEleEarNumbers": sheepFile.setAllEleEarNumbers(new ArrayList<>(Arrays.asList(values))); break;
case "allBreedingStatus": sheepFile.setAllBreedingStatus(new ArrayList<>(Arrays.asList(values))); break;
case "allSheepTypes": sheepFile.setAllSheepTypes(new ArrayList<>(Arrays.asList(values))); break;
case "allGenders":
List<Long> genderList = new ArrayList<>();
for(String v : values){
@@ -273,24 +245,50 @@ public class SheepFileController extends BaseController
}
sheepFile.setAllGenders(genderList);
break;
case "pageNum":
case "pageSize":
// 忽略分页参数
break;
case "pageNum": case "pageSize": case "exportIds": case "visibleColumns":
break; // 忽略这些非数据库实体的字段
default:
// 自定义参数
customParams.put(key, value);
break;
}
}
}
// 调用Service获取数据
// 3. 获取数据并执行行过滤
List<SheepFile> list = sheepFileService.selectSheepFileListByCondition(customParams, sheepFile);
if (StringUtils.isNotBlank(exportIdsStr)) {
List<String> exportIdList = Arrays.asList(exportIdsStr.split(","));
list = list.stream()
.filter(item -> exportIdList.contains(String.valueOf(item.getId())))
.collect(java.util.stream.Collectors.toList());
}
// 使用若依框架的Excel工具类导出
// 4. 执行列过滤
ExcelUtil<SheepFile> util = new ExcelUtil<>(SheepFile.class);
if (StringUtils.isNotBlank(visibleColumnsStr)) {
// 清理字符串可能的空格并转为List
List<String> visibleColumns = Arrays.asList(visibleColumnsStr.split("\\s*,\\s*"));
List<String> colsToHide = new ArrayList<>();
Class<?> clazz = SheepFile.class;
while (clazz != null) {
for (java.lang.reflect.Field field : clazz.getDeclaredFields()) {
if (field.isAnnotationPresent(com.zhyc.common.annotation.Excel.class)) {
if (!visibleColumns.contains(field.getName())) {
colsToHide.add(field.getName());
}
}
}
clazz = clazz.getSuperclass();
}
// 【核心修复】一次性把所有的字段数组传进去,规避若依底层循环覆盖的 Bug
if (!colsToHide.isEmpty()) {
util.hideColumn(colsToHide.toArray(new String[0]));
}
}
util.exportExcel(response, list, "羊只档案数据");
}