From daae3039abef764852625e4af4686df287a99685 Mon Sep 17 00:00:00 2001
From: zlwu <704541015@qq.com>
Date: Wed, 30 Jul 2025 22:15:31 +0800
Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ruoyi-common/ruoyi-common-excel/pom.xml | 6 +
.../excel/annotation/ExcelSqlCacheFormat.java | 44 ++
.../config/SqlCacheConfigInitializer.java | 78 ++
.../convert/ExcelDictPreloadConvert.java | 150 ++++
.../excel/convert/ExcelSqlCacheConvert.java | 200 ++++++
.../excel/service/BaseExportService.java | 87 +++
.../excel/service/SqlCacheConfigService.java | 146 ++++
.../xg/controller/XgStudentMsgController.java | 134 +++-
.../xg/domain/vo/XgStudentMsgExportVo.java | 679 ++++++++++++++++++
.../dromara/xg/mapper/XgStudentMsgMapper.java | 13 +
.../xg/service/IXgStudentMsgService.java | 11 +
.../service/impl/XgStudentMsgServiceImpl.java | 37 +
.../mapper/studentMsg/XgStudentMsgMapper.xml | 66 ++
...cord-2025-01-27-sql-cache-export-config.md | 228 ++++++
...st-record-2025-01-27-student-export-fix.md | 111 +++
...student-export-performance-optimization.md | 185 +++++
...st-record-2025-07-30-export-timeout-fix.md | 107 +++
...5-07-30-student-export-content-type-fix.md | 103 +++
.../code-adjust-record-2025-07-30-wuzilong.md | 75 ++
docs/开发文档/SQL缓存导出配置使用指南.md | 260 +++++++
web/src/assets/styles/index.scss | 4 +
web/src/utils/request.ts | 5 +-
.../xg/xsjcxx/studentMsg/studentMsg/index.vue | 41 +-
23 files changed, 2760 insertions(+), 10 deletions(-)
create mode 100644 backend/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/annotation/ExcelSqlCacheFormat.java
create mode 100644 backend/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/config/SqlCacheConfigInitializer.java
create mode 100644 backend/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/convert/ExcelDictPreloadConvert.java
create mode 100644 backend/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/convert/ExcelSqlCacheConvert.java
create mode 100644 backend/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/service/BaseExportService.java
create mode 100644 backend/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/service/SqlCacheConfigService.java
create mode 100644 backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/vo/XgStudentMsgExportVo.java
create mode 100644 docs/变更管理/code-adjust-record-2025-01-27-sql-cache-export-config.md
create mode 100644 docs/变更管理/code-adjust-record-2025-01-27-student-export-fix.md
create mode 100644 docs/变更管理/code-adjust-record-2025-01-27-student-export-performance-optimization.md
create mode 100644 docs/变更管理/code-adjust-record-2025-07-30-export-timeout-fix.md
create mode 100644 docs/变更管理/code-adjust-record-2025-07-30-student-export-content-type-fix.md
create mode 100644 docs/变更管理/code-adjust-record-2025-07-30-wuzilong.md
create mode 100644 docs/开发文档/SQL缓存导出配置使用指南.md
diff --git a/backend/ruoyi-common/ruoyi-common-excel/pom.xml b/backend/ruoyi-common/ruoyi-common-excel/pom.xml
index 47ba5284..11c5477c 100644
--- a/backend/ruoyi-common/ruoyi-common-excel/pom.xml
+++ b/backend/ruoyi-common/ruoyi-common-excel/pom.xml
@@ -25,6 +25,12 @@
cn.idev.excel
fastexcel
+
+
+
+ org.springframework.boot
+ spring-boot-starter-jdbc
+
diff --git a/backend/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/annotation/ExcelSqlCacheFormat.java b/backend/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/annotation/ExcelSqlCacheFormat.java
new file mode 100644
index 00000000..7a932900
--- /dev/null
+++ b/backend/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/annotation/ExcelSqlCacheFormat.java
@@ -0,0 +1,44 @@
+package org.dromara.common.excel.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * SQL缓存格式化注解
+ * 用于配置SQL查询来加载数据到缓存进行匹配
+ *
+ * @author Lion Li
+ */
+@Target(ElementType.FIELD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ExcelSqlCacheFormat {
+
+ /**
+ * SQL缓存键,用于标识不同的SQL查询配置
+ */
+ String sqlKey() default "";
+
+ /**
+ * SQL查询语句
+ * 支持动态SQL,可以使用参数占位符
+ */
+ String sql() default "";
+
+ /**
+ * 值字段名(用于匹配的字段)
+ */
+ String valueColumn() default "id";
+
+ /**
+ * 标签字段名(用于显示的字段)
+ */
+ String labelColumn() default "name";
+
+ /**
+ * 分隔符
+ */
+ String separator() default ",";
+
+}
diff --git a/backend/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/config/SqlCacheConfigInitializer.java b/backend/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/config/SqlCacheConfigInitializer.java
new file mode 100644
index 00000000..2f2ff099
--- /dev/null
+++ b/backend/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/config/SqlCacheConfigInitializer.java
@@ -0,0 +1,78 @@
+package org.dromara.common.excel.config;
+
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.excel.service.SqlCacheConfigService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * SQL缓存配置初始化器
+ * 在应用启动时注册SQL配置
+ *
+ * @author Lion Li
+ */
+@Slf4j
+@Component
+public class SqlCacheConfigInitializer implements CommandLineRunner {
+
+ @Autowired
+ private SqlCacheConfigService sqlCacheConfigService;
+
+ @Override
+ public void run(String... args) throws Exception {
+ log.info("开始初始化SQL缓存配置...");
+
+ // 注册默认的SQL配置
+ registerDefaultSqlConfigs();
+
+ log.info("SQL缓存配置初始化完成");
+ }
+
+ /**
+ * 注册默认的SQL配置
+ */
+ private void registerDefaultSqlConfigs() {
+ Map configs = new HashMap<>();
+
+ // 示例:学生班级信息查询
+ // configs.put("student_class_info", new SqlCacheConfigService.SqlCacheConfig(
+ // "SELECT class_id as id, class_name as name FROM xg_class WHERE deleted = 0",
+ // "id",
+ // "name"));
+
+ // 示例:学院信息查询
+ // configs.put("college_info", new SqlCacheConfigService.SqlCacheConfig(
+ // "SELECT college_id as id, college_name as name FROM xg_college WHERE deleted
+ // = 0",
+ // "id",
+ // "name"));
+
+ // 示例:专业信息查询
+ // configs.put("major_info", new SqlCacheConfigService.SqlCacheConfig(
+ // "SELECT major_id as id, major_name as name FROM xg_major WHERE deleted = 0",
+ // "id",
+ // "name"));
+
+ // 示例:班主任信息查询
+ // configs.put("class_teacher_info", new SqlCacheConfigService.SqlCacheConfig(
+ // "SELECT user_id as id, nick_name as name FROM sys_user WHERE deleted = 0 AND
+ // user_type = '00'",
+ // "id",
+ // "name"));
+
+ // 楼栋信息
+ configs.put("xg_dorm_building", new SqlCacheConfigService.SqlCacheConfig(
+ "SELECT id as id, building_name as name FROM xg_dorm_building",
+ "id",
+ "name"));
+
+ // 批量注册配置
+ sqlCacheConfigService.registerSqlConfigs(configs);
+
+ log.info("注册了 {} 个默认SQL配置", configs.size());
+ }
+}
diff --git a/backend/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/convert/ExcelDictPreloadConvert.java b/backend/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/convert/ExcelDictPreloadConvert.java
new file mode 100644
index 00000000..386379a3
--- /dev/null
+++ b/backend/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/convert/ExcelDictPreloadConvert.java
@@ -0,0 +1,150 @@
+package org.dromara.common.excel.convert;
+
+import cn.hutool.core.annotation.AnnotationUtil;
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.util.ObjectUtil;
+import cn.idev.excel.converters.Converter;
+import cn.idev.excel.enums.CellDataTypeEnum;
+import cn.idev.excel.metadata.GlobalConfiguration;
+import cn.idev.excel.metadata.data.ReadCellData;
+import cn.idev.excel.metadata.data.WriteCellData;
+import cn.idev.excel.metadata.property.ExcelContentProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.core.service.DictService;
+import org.dromara.common.core.utils.SpringUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.excel.utils.ExcelUtil;
+import lombok.extern.slf4j.Slf4j;
+
+import java.lang.reflect.Field;
+import java.util.Arrays;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
+
+/**
+ * 高性能字典格式化转换处理 - 预加载字典数据到内存缓存
+ *
+ * @author Lion Li
+ */
+@Slf4j
+public class ExcelDictPreloadConvert implements Converter