diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/controller/GoodsController.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/controller/GoodsController.java index e9b938a4..d3b36a33 100644 --- a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/controller/GoodsController.java +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/controller/GoodsController.java @@ -1,7 +1,6 @@ package net.lab1024.sa.admin.module.business.goods.controller; import cn.dev33.satoken.annotation.SaCheckPermission; -import com.alibaba.excel.EasyExcel; import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.Operation; import net.lab1024.sa.admin.constant.AdminSwaggerTagConst; @@ -11,17 +10,16 @@ import net.lab1024.sa.admin.module.business.goods.domain.form.GoodsUpdateForm; import net.lab1024.sa.admin.module.business.goods.domain.vo.GoodsExcelVO; import net.lab1024.sa.admin.module.business.goods.domain.vo.GoodsVO; import net.lab1024.sa.admin.module.business.goods.service.GoodsService; +import net.lab1024.sa.admin.util.excel.ExcelUtils; import net.lab1024.sa.base.common.domain.PageResult; import net.lab1024.sa.base.common.domain.ResponseDTO; import net.lab1024.sa.base.common.domain.ValidateList; -import net.lab1024.sa.base.common.util.SmartResponseUtil; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; -import java.io.IOException; import java.util.List; /** @@ -87,18 +85,10 @@ public class GoodsController { @Operation(summary = "导出 @author 卓大") @GetMapping("/goods/exportGoods") @SaCheckPermission("goods:exportGoods") - public void exportGoods(HttpServletResponse response) throws IOException { - + public void exportGoods(HttpServletResponse response) { List goodsList = goodsService.getAllGoods(); - - // 设置下载消息头 - SmartResponseUtil.setDownloadFileHeader(response, "商品列表.xls", null); - - // 下载 - EasyExcel.write(response.getOutputStream(), GoodsExcelVO.class) - .autoCloseStream(Boolean.FALSE) - .sheet("商品") - .doWrite(goodsList); + ExcelUtils utils = new ExcelUtils<>(GoodsExcelVO.class); + utils.exportData(response,goodsList,"商品列表"); } } diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseController.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseController.java index 7b3d3f4a..6055eddf 100644 --- a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseController.java +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/enterprise/EnterpriseController.java @@ -1,7 +1,6 @@ package net.lab1024.sa.admin.module.business.oa.enterprise; import cn.dev33.satoken.annotation.SaCheckPermission; -import com.alibaba.excel.EasyExcel; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; @@ -11,6 +10,7 @@ import net.lab1024.sa.admin.module.business.oa.enterprise.domain.vo.EnterpriseEm import net.lab1024.sa.admin.module.business.oa.enterprise.domain.vo.EnterpriseExcelVO; import net.lab1024.sa.admin.module.business.oa.enterprise.domain.vo.EnterpriseListVO; import net.lab1024.sa.admin.module.business.oa.enterprise.domain.vo.EnterpriseVO; +import net.lab1024.sa.admin.util.excel.ExcelUtils; import net.lab1024.sa.base.common.domain.PageResult; import net.lab1024.sa.base.common.domain.RequestUser; import net.lab1024.sa.base.common.domain.ResponseDTO; @@ -23,7 +23,6 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; -import java.io.IOException; import java.util.List; /** @@ -53,21 +52,14 @@ public class EnterpriseController { @Operation(summary = "导出企业信息 @author 卓大") @PostMapping("/oa/enterprise/exportExcel") - public void exportExcel(@RequestBody @Valid EnterpriseQueryForm queryForm, HttpServletResponse response) throws IOException { + public void exportExcel(@RequestBody @Valid EnterpriseQueryForm queryForm, HttpServletResponse response) { List data = enterpriseService.getExcelExportData(queryForm); if (CollectionUtils.isEmpty(data)) { SmartResponseUtil.write(response, ResponseDTO.userErrorParam("暂无数据")); return; } - - // 设置下载消息头 - SmartResponseUtil.setDownloadFileHeader(response, "企业基本信息.xls", null); - - // 下载 - EasyExcel.write(response.getOutputStream(), EnterpriseExcelVO.class) - .autoCloseStream(Boolean.FALSE) - .sheet("企业信息") - .doWrite(data); + ExcelUtils utils = new ExcelUtils<>(EnterpriseExcelVO.class); + utils.exportData(response,data,"企业基本信息"); } @Operation(summary = "查询企业详情 @author 开云") diff --git a/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/util/excel/ExcelUtils.java b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/util/excel/ExcelUtils.java new file mode 100644 index 00000000..faab0509 --- /dev/null +++ b/smart-admin-api/sa-admin/src/main/java/net/lab1024/sa/admin/util/excel/ExcelUtils.java @@ -0,0 +1,96 @@ +package net.lab1024.sa.admin.util.excel; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.extra.spring.SpringUtil; +import com.alibaba.excel.EasyExcel; +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.admin.module.system.login.domain.LoginResultVO; +import net.lab1024.sa.admin.module.system.login.service.LoginService; +import net.lab1024.sa.admin.util.AdminRequestUtil; +import net.lab1024.sa.base.common.util.SmartResponseUtil; +import org.springframework.core.env.Environment; + +import javax.servlet.http.HttpServletResponse; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * @author liuzhexian + * @since 2024-04-16 + * @email 1037512352@qq.com + */ +@Slf4j +public class ExcelUtils implements Serializable { + + private static final long serialVersionUID = 1L; + + + /** + * 导出文件后缀 + */ + public static final String XLSX = ".xlsx"; + + /** + * 实体对象 + */ + public Class clazz; + + public ExcelUtils(Class clazz) { + this.clazz = clazz; + } + + /** + * 通用导出方法 + * + * @param response response + * @param list 导出的列表 + * @param title 导出的名称 + */ + public void exportData(HttpServletResponse response, List list, String title) { + // 设置下载消息头 + SmartResponseUtil.setDownloadFileHeader(response, title + XLSX, null); + // 根据配置文件中的参数判断导出是否带水印 + String show = SpringUtil.getBean(Environment.class).getProperty("export.show-watermark"); + if(Boolean.parseBoolean(show)) { + exportSheetWithWatermark(response, list, title); + } else { + exportSheet(response, list, title); + } + } + + /** + * 通用导出方法(不带水印) + * + * @param response response + * @param list 导出的列表 + * @param title 导出的名称 + */ + public void exportSheet(HttpServletResponse response, List list, String title) { + try { + EasyExcel.write(response.getOutputStream(), this.clazz).sheet(title).doWrite(list); + } catch (Exception e) { + log.error("{}导出异常", title, e); + } + } + + /** + * 通用导出方法(带水印) + * + * @param response response + * @param exportList 导出的列表 + * @param title 导出的名称 + */ + public void exportSheetWithWatermark(HttpServletResponse response, List exportList, String title) { + try { + LoginResultVO loginResult = SpringUtil.getBean(LoginService.class).getLoginResult(AdminRequestUtil.getRequestUser()); + // 注册水印处理器 水印 员工昵称 + 日期 + Watermark watermark = new Watermark(String.format("%s %s",loginResult.getActualName(), DateUtil.formatDate(new Date()))); + // 一定要inMemory + EasyExcel.write(response.getOutputStream(), this.clazz) + .inMemory(true).sheet(title).registerWriteHandler(new CustomWaterMarkHandler(watermark)).doWrite(exportList); + } catch (Exception e) { + log.error("{}导出异常", title, e); + } + } +}