羊只档案导出问题
This commit is contained in:
@@ -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, "羊只档案数据");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user