From ed6a42fb41b3f4d144c6a941b511a6fb0006937a Mon Sep 17 00:00:00 2001 From: buaixuexideshitongxue <2936013465@qq.com> Date: Tue, 16 Dec 2025 10:23:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=9A=E6=85=B0=E9=87=91=E7=94=B3=E8=AF=B7?= =?UTF-8?q?=E5=8F=91=E6=94=BE=E6=98=8E=E7=BB=86=E8=A1=A8-=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0excel=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/RpcComfortPacksService.java | 86 +++++++++++++++++- .../ftl/4_抚慰金申请发放明细表.xlsx | Bin 0 -> 9782 bytes 2 files changed, 82 insertions(+), 4 deletions(-) create mode 100644 src/main/resources/static/templates/ftl/4_抚慰金申请发放明细表.xlsx diff --git a/src/main/java/com/biutag/supervision/service/RpcComfortPacksService.java b/src/main/java/com/biutag/supervision/service/RpcComfortPacksService.java index e2d9152..16289c4 100644 --- a/src/main/java/com/biutag/supervision/service/RpcComfortPacksService.java +++ b/src/main/java/com/biutag/supervision/service/RpcComfortPacksService.java @@ -7,6 +7,11 @@ import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.ZipUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.excel.write.metadata.fill.FillConfig; +import com.alibaba.excel.write.metadata.fill.FillWrapper; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -35,8 +40,7 @@ import java.nio.charset.StandardCharsets; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; -import java.util.Date; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; @Service @@ -61,6 +65,9 @@ public class RpcComfortPacksService extends ServiceImpl comforts) throws IOException { + + InputStream templateIs = Thread.currentThread() + .getContextClassLoader() + .getResourceAsStream("static/templates/ftl/4_抚慰金申请发放明细表.xlsx"); + + if (templateIs == null) { + throw new FileNotFoundException("Excel模板不存在:templates/4_抚慰金申请发放明细表.xlsx"); + } + + // 1、单值变量(标题 + 合计) + Map vars = new HashMap<>(); + vars.put("applyMonth", applyMonth); + vars.put("reportMoney", reportMoney == null ? 0D : reportMoney); + + // 2、列表数据 + List> rows = new ArrayList<>(); + for (int i = 0; i < comforts.size(); i++) { + RpcApplyVo it = comforts.get(i); + + Map row = new HashMap<>(); + row.put("rowNo", i + 1); + row.put("departFullName", it.getDepartFullName() == null ? "" : it.getDepartFullName()); + row.put("applicantEmpName", it.getApplicantEmpName() == null ? "" : it.getApplicantEmpName()); + row.put("idCode", it.getIdCode() == null ? "" : it.getIdCode()); + row.put("bankBranch", it.getBankBranch() == null ? "" : it.getBankBranch()); + row.put("bankCardAccount", it.getBankCardAccount() == null ? "" : it.getBankCardAccount()); + row.put("mobile", it.getMobile() == null ? "" : it.getMobile()); + + // 金额:当前项目是用 injurySeverity 作为金额来源 + Double money = 0D; + try { + if (it.getInjurySeverity() != null && !it.getInjurySeverity().isBlank()) { + money = Double.parseDouble(it.getInjurySeverity()); + } + } catch (Exception ignore) {} + row.put("money", money); + + rows.add(row); + } + + // 3、 使用 EasyExcel + 模板填充 + ByteArrayOutputStream os = new ByteArrayOutputStream(); + try (ExcelWriter writer = EasyExcel.write(os) + .withTemplate(templateIs) + .autoCloseStream(false) + .build()) { + + WriteSheet sheet = EasyExcel.writerSheet(0).build(); + + // 先填单值 + writer.fill(vars, sheet); + + // 再填列表(必须 forceNewRow = true) + FillConfig fillConfig = FillConfig.builder().forceNewRow(true).build(); + writer.fill(new FillWrapper("rpcApplys", rows), fillConfig, sheet); + + } finally { + templateIs.close(); + } + + return os; + } + } diff --git a/src/main/resources/static/templates/ftl/4_抚慰金申请发放明细表.xlsx b/src/main/resources/static/templates/ftl/4_抚慰金申请发放明细表.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..9b900105f5c93e6a0a921749d4ecac4d5b4d68a2 GIT binary patch literal 9782 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