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