diff --git a/.gitignore b/.gitignore index 298ef0b6..120a947a 100644 --- a/.gitignore +++ b/.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 diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/excel/XgClassMsgImportTemplateHandler.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/excel/XgClassMsgImportTemplateHandler.java new file mode 100644 index 00000000..b52cb12e --- /dev/null +++ b/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 + ")"); + } + } +} diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/excel/XgClassMsgImportTemplateWriter.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/excel/XgClassMsgImportTemplateWriter.java new file mode 100644 index 00000000..3a439288 --- /dev/null +++ b/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 list, HttpServletResponse response, + List 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); + } + } +}