From 5d7b65670282a4fad015e37d567cfa171b162052 Mon Sep 17 00:00:00 2001 From: huliguo <2023611923@qq.com> Date: 星期二, 20 五月 2025 12:25:19 +0800 Subject: [PATCH] 基础代码 --- pt-errand/src/main/java/com/ruoyi/errand/utils/BatchNumberUtils.java | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 120 insertions(+), 0 deletions(-) diff --git a/pt-errand/src/main/java/com/ruoyi/errand/utils/BatchNumberUtils.java b/pt-errand/src/main/java/com/ruoyi/errand/utils/BatchNumberUtils.java new file mode 100644 index 0000000..3b03656 --- /dev/null +++ b/pt-errand/src/main/java/com/ruoyi/errand/utils/BatchNumberUtils.java @@ -0,0 +1,120 @@ +package com.ruoyi.errand.utils; + +import cn.afterturn.easypoi.excel.ExcelExportUtil; +import cn.afterturn.easypoi.excel.entity.ExportParams; +import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; +import com.ruoyi.common.exception.GlobalException; +import org.apache.poi.ss.usermodel.Workbook; + +import java.io.FileOutputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public class BatchNumberUtils { + + private static final String PREFIX = "第"; + private static final String SUFFIX = "批"; + + /** + * 生成批次信息 + * + * @param lastBatchNumber + * @return + */ + public static String getBatchNumber(String lastBatchNumber) { + if (lastBatchNumber == null || !lastBatchNumber.startsWith(PREFIX) || !lastBatchNumber.endsWith(SUFFIX)) { + return PREFIX + "1" + SUFFIX; + } + try { + // 提取中间的数字 + String numberPart = lastBatchNumber.substring(PREFIX.length(), lastBatchNumber.length() - SUFFIX.length()); + int batchNumber = Integer.parseInt(numberPart); + + if (batchNumber < 1 || batchNumber >= 9999) { + throw new GlobalException("批次数必须在 1 到 9999 之间"); + } + + // 计算下一个批次 + return PREFIX + (batchNumber + 1) + SUFFIX; + } catch (NumberFormatException e) { + throw new GlobalException("批次中的数字解析失败,请确保格式正确"); + } + } + + public static void main(String[] args) throws Exception { + // 1. 创建导出参数 + ExportParams exportParams = new ExportParams("动态表头示例", "Sheet1"); + + // 2. 创建表头 + List<ExcelExportEntity> columnList = new ArrayList<>(); + + // 3. 添加静态列 + columnList.add(new ExcelExportEntity("编号", "id")); + columnList.add(new ExcelExportEntity("补偿资金总额(万元)", "totalCompensation")); + columnList.add(new ExcelExportEntity("25%首付款", "firstPayment")); + columnList.add(new ExcelExportEntity("过渡补贴", "transitionSubsidy")); + + // 4. 创建父级列 "每季度需支付款项(万元)",设置 key 为 "dynamic" + ExcelExportEntity parentColumn = new ExcelExportEntity("每季度需支付款项(万元)", "dynamic"); + List<ExcelExportEntity> dynamicColumns = new ArrayList<>(); + + // 5. 生成动态列(2025-2027,每年4个季度) + List<String> dynamicHeaders = generateDynamicHeaders(2025, 2027); + for (String header : dynamicHeaders) { + ExcelExportEntity column = new ExcelExportEntity(header, header); + column.setFormat("0.00"); // 确保Excel数值格式正确 + dynamicColumns.add(column); + } + + // 6. 关联子列 + parentColumn.setList(dynamicColumns); + columnList.add(parentColumn); + + // 7. 组织数据 + List<Map<String, Object>> dataList = new ArrayList<>(); + for (int i = 1; i <= 5; i++) { // 生成5行数据 + Map<String, Object> row = new HashMap<>(); + row.put("id", i); + row.put("totalCompensation", 500 + i * 10); + row.put("firstPayment", 120 + i * 5); + row.put("transitionSubsidy", 30 + i * 2); + + // 新建子Map存放动态列数据 + Map<String, Object> dynamicData = new HashMap<>(); + for (String header : dynamicHeaders) { + dynamicData.put(header, Math.round(Math.random() * 100 * 100.0) / 100.0); // 存储 Double 类型数据 + } + // 将子Map以 key "dynamic" 存入 row 中 + row.put("dynamic", dynamicData); + + System.out.println("生成数据:" + row); // 调试输出 + dataList.add(row); + } + + // 8. 导出 Excel + Workbook workbook = ExcelExportUtil.exportExcel(exportParams, columnList, dataList); + + // 9. 写入文件 + try (FileOutputStream fos = new FileOutputStream("DynamicTable.xlsx")) { + workbook.write(fos); + } + workbook.close(); + + System.out.println("Excel 导出成功!"); + } + + // 生成动态季度时间列 + public static List<String> generateDynamicHeaders(int startYear, int endYear) { + List<String> headers = new ArrayList<>(); + String[] quarters = {"1月", "4月", "7月", "10月"}; + for (int year = startYear; year <= endYear; year++) { + for (String quarter : quarters) { + headers.add(year + "年" + quarter); + } + } + return headers; + } +} -- Gitblit v1.7.1