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 0000000..9b90010 Binary files /dev/null and b/src/main/resources/static/templates/ftl/4_抚慰金申请发放明细表.xlsx differ