diff --git a/jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/base/controller/JeecgController.java b/jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/base/controller/JeecgController.java index f3ff51edd..fdf3089b0 100644 --- a/jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/base/controller/JeecgController.java +++ b/jeecg-boot/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/base/controller/JeecgController.java @@ -18,6 +18,7 @@ import org.jeecgframework.poi.excel.entity.ExportParams; import org.jeecgframework.poi.excel.entity.ImportParams; import org.jeecgframework.poi.excel.entity.enmus.ExcelType; import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; +import org.jeecgframework.poi.handler.inter.IExcelExportServer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; @@ -127,6 +128,53 @@ public class JeecgController> { return mv; } + /** + * 大数据导出 + * @param request + * @param object + * @param clazz + * @param title + * @param pageSize 每次查询的数据量 + * @return + * @author chenrui + * @date 2025/8/11 16:11 + */ + protected ModelAndView exportXlsForBigData(HttpServletRequest request, T object, Class clazz, String title,Integer pageSize) { + // 组装查询条件 + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(object, request.getParameterMap()); + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + // 计算分页数 + double total = service.count(); + int count = (int) Math.ceil(total / pageSize); + // 过滤选中数据 + String selections = request.getParameter("selections"); + if (oConvertUtils.isNotEmpty(selections)) { + List selectionList = Arrays.asList(selections.split(",")); + queryWrapper.in("id", selectionList); + } + + // 定义IExcelExportServer + IExcelExportServer excelExportServer = (queryParams, pageNum) -> { + if (pageNum > count) { + return null; + } + Page page = new Page(pageNum, pageSize); + IPage pageList = service.page(page, (QueryWrapper) queryParams); + return new ArrayList<>(pageList.getRecords()); + }; + + // AutoPoi 导出Excel + ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); + //此处设置的filename无效 ,前端会重更新设置一下 + mv.addObject(NormalExcelConstants.FILE_NAME, title); + mv.addObject(NormalExcelConstants.CLASS, clazz); + ExportParams exportParams = new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title, jeecgBaseConfig.getPath().getUpload()); + mv.addObject(NormalExcelConstants.PARAMS, exportParams); + mv.addObject(NormalExcelConstants.EXPORT_SERVER, excelExportServer); + mv.addObject(NormalExcelConstants.QUERY_PARAMS, queryWrapper); + return mv; + } + /** * 根据权限导出excel,传入导出字段参数