Browse Source

fix: 取消 excel/ 忽略规则并纳入班级导入模板源码

避免 org.dromara.xg.excel 源码被误忽略,导致同事拉取后编译失败。

Co-authored-by: Cursor <cursoragent@cursor.com>
zlwu 2 tháng trước cách đây
mục cha
commit
a15efa8ef8

+ 0 - 1
.gitignore

@@ -161,7 +161,6 @@ coverage/
 *.crt
 *.p12
 *.keystore/xgxt/
-excel/
 
 backend/script/sql/add-related-type-field.sql
 backend/script/sql/execute-fix-stgl-member.sql

+ 58 - 0
backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/excel/XgClassMsgImportTemplateHandler.java

@@ -0,0 +1,58 @@
+package org.dromara.xg.excel;
+
+import cn.idev.excel.write.handler.WorkbookWriteHandler;
+import cn.idev.excel.write.metadata.holder.WriteWorkbookHolder;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+
+/**
+ * 班级导入模板增强:加宽学院/专业/学历层级列,毕业年份按入学年份+学制公式自动计算
+ *
+ * @author zlwu
+ */
+public class XgClassMsgImportTemplateHandler implements WorkbookWriteHandler {
+
+    /** 学院列 */
+    private static final int COL_COLLEGE = 0;
+    /** 专业列 */
+    private static final int COL_MAJOR = 1;
+    /** 学历层级列 */
+    private static final int COL_CLASS_TYPE = 3;
+    /** 毕业年份列 */
+    private static final int COL_GRADUATION_YEAR = 7;
+    /** 预置公式行数(含示例行),对应 Excel 第 2 行起 */
+    private static final int FORMULA_ROW_COUNT = 200;
+
+    @Override
+    public void afterWorkbookDispose(WriteWorkbookHolder writeWorkbookHolder) {
+        Workbook workbook = writeWorkbookHolder.getWorkbook();
+        if (workbook.getNumberOfSheets() <= 0) {
+            return;
+        }
+        Sheet sheet = workbook.getSheetAt(0);
+
+        // 加宽下拉相关列(单位:1/256 字符宽)
+        sheet.setColumnWidth(COL_COLLEGE, 24 * 256);
+        sheet.setColumnWidth(COL_MAJOR, 30 * 256);
+        sheet.setColumnWidth(COL_CLASS_TYPE, 20 * 256);
+
+        // 毕业年份 = 入学年份(F) + 学制(G);空值时不显示 0
+        for (int rowIndex = 1; rowIndex <= FORMULA_ROW_COUNT; rowIndex++) {
+            int excelRowNum = rowIndex + 1;
+            Row row = sheet.getRow(rowIndex);
+            if (row == null) {
+                row = sheet.createRow(rowIndex);
+            }
+            Cell cell = row.getCell(COL_GRADUATION_YEAR);
+            if (cell == null) {
+                cell = row.createCell(COL_GRADUATION_YEAR);
+            } else {
+                cell.setBlank();
+            }
+            cell.setCellFormula("IF(OR(F" + excelRowNum + "=\"\",G" + excelRowNum + "=\"\"),\"\",F"
+                + excelRowNum + "+G" + excelRowNum + ")");
+        }
+    }
+}

+ 49 - 0
backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/excel/XgClassMsgImportTemplateWriter.java

@@ -0,0 +1,49 @@
+package org.dromara.xg.excel;
+
+import cn.idev.excel.FastExcel;
+import cn.idev.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
+import jakarta.servlet.ServletOutputStream;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.dromara.common.core.utils.file.FileUtils;
+import org.dromara.common.excel.convert.ExcelBigNumberConvert;
+import org.dromara.common.excel.core.DropDownOptions;
+import org.dromara.common.excel.core.ExcelDownHandler;
+import org.dromara.common.excel.handler.DataWriteHandler;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.xg.domain.vo.XgClassMsgImportVo;
+
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * 班级信息导入模板导出
+ *
+ * @author zlwu
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public class XgClassMsgImportTemplateWriter {
+
+    public static void write(List<XgClassMsgImportVo> list, HttpServletResponse response,
+                             List<DropDownOptions> options) {
+        String sheetName = "班级信息导入模板";
+        try {
+            String filename = ExcelUtil.encodingFilename(sheetName);
+            FileUtils.setAttachmentResponseHeader(response, filename);
+            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8");
+            ServletOutputStream os = response.getOutputStream();
+            FastExcel.write(os, XgClassMsgImportVo.class)
+                .autoCloseStream(false)
+                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
+                .registerConverter(new ExcelBigNumberConvert())
+                .registerWriteHandler(new DataWriteHandler(XgClassMsgImportVo.class))
+                .registerWriteHandler(new ExcelDownHandler(options))
+                .registerWriteHandler(new XgClassMsgImportTemplateHandler())
+                .sheet(sheetName)
+                .doWrite(list);
+        } catch (IOException e) {
+            throw new RuntimeException("导出班级信息导入模板异常", e);
+        }
+    }
+}