羊只档案导出问题
This commit is contained in:
@@ -209,62 +209,34 @@ public class SheepFileController extends BaseController
|
|||||||
@PostMapping("/export")
|
@PostMapping("/export")
|
||||||
public void export(HttpServletResponse response, HttpServletRequest request)
|
public void export(HttpServletResponse response, HttpServletRequest request)
|
||||||
{
|
{
|
||||||
// 构建查询条件对象
|
|
||||||
SheepFile sheepFile = new SheepFile();
|
SheepFile sheepFile = new SheepFile();
|
||||||
Map<String, Object> customParams = new HashMap<>();
|
Map<String, Object> customParams = new HashMap<>();
|
||||||
|
|
||||||
// 解析所有请求参数
|
|
||||||
Map<String, String[]> parameterMap = request.getParameterMap();
|
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()) {
|
for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
|
||||||
String key = entry.getKey();
|
String key = entry.getKey();
|
||||||
String[] values = entry.getValue();
|
String[] values = entry.getValue();
|
||||||
|
|
||||||
if (values != null && values.length > 0 && StringUtils.isNotBlank(values[0])) {
|
if (values != null && values.length > 0 && StringUtils.isNotBlank(values[0])) {
|
||||||
String value = values[0];
|
String value = values[0];
|
||||||
|
|
||||||
// 使用若依框架的工具方法处理参数
|
|
||||||
switch (key) {
|
switch (key) {
|
||||||
// --- 单值参数 ---
|
case "bsManageTags": sheepFile.setBsManageTags(convertToString(value)); break;
|
||||||
case "bsManageTags":
|
case "electronicTags": sheepFile.setElectronicTags(convertToString(value)); break;
|
||||||
sheepFile.setBsManageTags(convertToString(value));
|
case "drRanch": sheepFile.setDrRanch(convertToString(value)); break;
|
||||||
break;
|
case "variety": sheepFile.setVariety(convertToString(value)); break;
|
||||||
case "electronicTags":
|
case "name": sheepFile.setName(convertToString(value)); break;
|
||||||
sheepFile.setElectronicTags(convertToString(value));
|
case "gender": sheepFile.setGender(Convert.toLong(value)); break;
|
||||||
break;
|
case "statusId": sheepFile.setStatusId(Convert.toLong(value)); break;
|
||||||
case "drRanch":
|
case "breed": sheepFile.setBreed(convertToString(value)); break;
|
||||||
sheepFile.setDrRanch(convertToString(value));
|
case "allEarNumbers": sheepFile.setAllEarNumbers(new ArrayList<>(Arrays.asList(values))); break;
|
||||||
break;
|
case "allEleEarNumbers": sheepFile.setAllEleEarNumbers(new ArrayList<>(Arrays.asList(values))); break;
|
||||||
case "variety":
|
case "allBreedingStatus": sheepFile.setAllBreedingStatus(new ArrayList<>(Arrays.asList(values))); break;
|
||||||
sheepFile.setVariety(convertToString(value));
|
case "allSheepTypes": sheepFile.setAllSheepTypes(new ArrayList<>(Arrays.asList(values))); break;
|
||||||
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 "allGenders":
|
case "allGenders":
|
||||||
List<Long> genderList = new ArrayList<>();
|
List<Long> genderList = new ArrayList<>();
|
||||||
for(String v : values){
|
for(String v : values){
|
||||||
@@ -273,24 +245,50 @@ public class SheepFileController extends BaseController
|
|||||||
}
|
}
|
||||||
sheepFile.setAllGenders(genderList);
|
sheepFile.setAllGenders(genderList);
|
||||||
break;
|
break;
|
||||||
|
case "pageNum": case "pageSize": case "exportIds": case "visibleColumns":
|
||||||
case "pageNum":
|
break; // 忽略这些非数据库实体的字段
|
||||||
case "pageSize":
|
|
||||||
// 忽略分页参数
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
// 自定义参数
|
|
||||||
customParams.put(key, value);
|
customParams.put(key, value);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 调用Service获取数据
|
// 3. 获取数据并执行行过滤
|
||||||
List<SheepFile> list = sheepFileService.selectSheepFileListByCondition(customParams, sheepFile);
|
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);
|
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, "羊只档案数据");
|
util.exportExcel(response, list, "羊只档案数据");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user