From 46709f9bbe18349399121278a3ababef618ee7d4 Mon Sep 17 00:00:00 2001
From: ye1023 <12588209+ye1023@user.noreply.gitee.com>
Date: Mon, 22 Jun 2026 16:03:02 +0800
Subject: [PATCH 1/3] =?UTF-8?q?yxk-20260622-bug=E4=BF=AE=E5=A4=8D=EF=BC=9A?=
=?UTF-8?q?=E5=85=9A=E5=A7=94=E4=BC=9A=E5=AF=BC=E5=87=BA=E6=97=B6=E5=A2=9E?=
=?UTF-8?q?=E5=8A=A0=E5=AD=97=E5=85=B8=E7=BF=BB=E8=AF=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../modules/demo/bgpartymatter/entity/BgPartymatter.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/demo/bgpartymatter/entity/BgPartymatter.java b/jeecg-module-supervision/src/main/java/org/jeecg/modules/demo/bgpartymatter/entity/BgPartymatter.java
index b965a56..058adec 100644
--- a/jeecg-module-supervision/src/main/java/org/jeecg/modules/demo/bgpartymatter/entity/BgPartymatter.java
+++ b/jeecg-module-supervision/src/main/java/org/jeecg/modules/demo/bgpartymatter/entity/BgPartymatter.java
@@ -62,7 +62,7 @@ public class BgPartymatter implements Serializable {
@TableField("meeting_type")
private java.lang.String meetingType;
/**密级*/
- @Excel(name = "密级", width = 15)
+ @Excel(name = "密级", width = 15,dicCode ="secret_level" )
@Dict(dicCode = "secret_level")
@Schema(description = "密级")
private java.lang.String secretLevel;
@@ -117,7 +117,7 @@ public class BgPartymatter implements Serializable {
@Schema(description = "实际执行情况")
private java.lang.String actualExect;
/**完成状态*/
- @Excel(name = "完成状态", width = 15)
+ @Excel(name = "完成状态", width = 15,dicCode = "super_status")
@Dict(dicCode = "super_status")
@Schema(description = "完成状态")
private java.lang.String bpmStatus;
From 8b3dd7fb8f1fc96bab8d8fec6e19a4c7001eb321 Mon Sep 17 00:00:00 2001
From: ye1023 <12588209+ye1023@user.noreply.gitee.com>
Date: Mon, 22 Jun 2026 16:20:20 +0800
Subject: [PATCH 2/3] =?UTF-8?q?yxk-20260622-bug=E4=BF=AE=E5=A4=8D=EF=BC=9A?=
=?UTF-8?q?=E6=8A=8A=E6=8A=8A=E8=84=89=E5=AF=BC=E5=87=BA=E6=97=B6=E5=A2=9E?=
=?UTF-8?q?=E5=8A=A0=E5=AD=97=E5=85=B8=E7=BF=BB=E8=AF=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../jeecg/modules/demo/bqtakepulse/entity/BgTakepulse.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/demo/bqtakepulse/entity/BgTakepulse.java b/jeecg-module-supervision/src/main/java/org/jeecg/modules/demo/bqtakepulse/entity/BgTakepulse.java
index c509c54..aedbf94 100644
--- a/jeecg-module-supervision/src/main/java/org/jeecg/modules/demo/bqtakepulse/entity/BgTakepulse.java
+++ b/jeecg-module-supervision/src/main/java/org/jeecg/modules/demo/bqtakepulse/entity/BgTakepulse.java
@@ -108,7 +108,7 @@ public class BgTakepulse implements Serializable {
@Schema(description = "落实部门")
private java.lang.String implementDeptid;
/**是否采纳*/
- @Excel(name = "是否采纳", width = 15,replace = {"是_Y","否_N"} )
+ @Excel(name = "是否采纳", width = 15,dicCode = "yn" )
@Schema(description = "是否采纳")
private java.lang.String isAdopt;
/**落实措施/解释说明*/
@@ -165,7 +165,7 @@ public class BgTakepulse implements Serializable {
@Schema(description = "紧急程度")
private java.lang.String urgencyLevel;
/**是否需要所办领导审批*/
- @Excel(name = "是否需要所办领导审批", width = 15,replace = {"是_Y","否_N"} )
+ @Excel(name = "是否需要所办领导审批", width = 15 ,dicCode = "yn")
@Schema(description = "是否需要所办领导审批")
private java.lang.String isNeedAppro;
/**所办领导*/
From 9aec8dbbbe90f8730c71dd9143c387692cba5c8f Mon Sep 17 00:00:00 2001
From: new_new_new <8454518+new-twice@user.noreply.gitee.com>
Date: Tue, 23 Jun 2026 10:36:56 +0000
Subject: [PATCH 3/3] =?UTF-8?q?!52=20feat(excel):=20=E6=96=B0=E5=A2=9EEasy?=
=?UTF-8?q?Excel=E5=88=86=E6=89=B9=E5=AF=BC=E5=85=A5=EF=BC=8C=E6=94=AF?=
=?UTF-8?q?=E6=8C=81=E5=AD=97=E5=85=B8=E6=A0=A1=E9=AA=8C=E5=92=8CHibernate?=
=?UTF-8?q?=20Validator?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* feat(excel): 新增EasyExcel分批导入,支持字典校验和Hibernate Validator
* feat(excel): 新增EasyExcel导出工具类,基于@Excel注解解析并支持模板表头下载
* chore: 添加easyexcel依赖
---
jeecg-boot-base-core/pom.xml | 9 +
.../base/controller/JeecgController.java | 116 +++++-
.../jeecg/common/util/excel/ColumnMeta.java | 51 +++
.../common/util/excel/ColumnWidthHandler.java | 43 ++
.../util/excel/ExcelAnnotationUtils.java | 376 ++++++++++++++++++
.../common/util/excel/ExcelDataListener.java | 43 ++
.../util/excel/ExcelImportListener.java | 165 ++++++++
.../controller/BgXiSpeakController.java | 20 +
.../modules/bg/xispeak/entity/BgXiSpeak.java | 15 +-
.../DjInspectImproveController.java | 9 +
pom.xml | 8 +
11 files changed, 828 insertions(+), 27 deletions(-)
create mode 100644 jeecg-boot-base-core/src/main/java/org/jeecg/common/util/excel/ColumnMeta.java
create mode 100644 jeecg-boot-base-core/src/main/java/org/jeecg/common/util/excel/ColumnWidthHandler.java
create mode 100644 jeecg-boot-base-core/src/main/java/org/jeecg/common/util/excel/ExcelAnnotationUtils.java
create mode 100644 jeecg-boot-base-core/src/main/java/org/jeecg/common/util/excel/ExcelDataListener.java
create mode 100644 jeecg-boot-base-core/src/main/java/org/jeecg/common/util/excel/ExcelImportListener.java
diff --git a/jeecg-boot-base-core/pom.xml b/jeecg-boot-base-core/pom.xml
index 3fbe879..94bba34 100644
--- a/jeecg-boot-base-core/pom.xml
+++ b/jeecg-boot-base-core/pom.xml
@@ -327,5 +327,14 @@
org.jeecgframework.boot
jeecg-boot-starter-chatgpt
+
+ org.springframework.boot
+ spring-boot-starter-validation
+
+
+ com.alibaba
+ easyexcel
+ compile
+
diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/base/controller/JeecgController.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/base/controller/JeecgController.java
index f3ff51e..0e42e8a 100644
--- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/base/controller/JeecgController.java
+++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/base/controller/JeecgController.java
@@ -18,7 +18,9 @@ import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.entity.enmus.ExcelType;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.jeecg.common.util.excel.ExcelAnnotationUtils;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.dao.DuplicateKeyException;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
@@ -27,6 +29,7 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
+import java.io.InputStream;
import java.util.*;
/**
@@ -37,12 +40,16 @@ import java.util.*;
*/
@Slf4j
public class JeecgController> {
- /**issues/2933 JeecgController注入service时改用protected修饰,能避免重复引用service*/
+ /**
+ * issues/2933 JeecgController注入service时改用protected修饰,能避免重复引用service
+ */
@Autowired
protected S service;
@Resource
private JeecgBaseConfig jeecgBaseConfig;
-
+
+ private final int BATCH_NUM = 500;
+
/**
* 导出excel
*
@@ -57,7 +64,7 @@ public class JeecgController> {
String selections = request.getParameter("selections");
if (oConvertUtils.isNotEmpty(selections)) {
List selectionList = Arrays.asList(selections.split(","));
- queryWrapper.in("id",selectionList);
+ queryWrapper.in("id", selectionList);
}
// Step.2 获取导出数据
List exportList = service.list(queryWrapper);
@@ -68,53 +75,54 @@ public class JeecgController> {
mv.addObject(NormalExcelConstants.FILE_NAME, title);
mv.addObject(NormalExcelConstants.CLASS, clazz);
//update-begin--Author:liusq Date:20210126 for:图片导出报错,ImageBasePath未设置--------------------
- ExportParams exportParams=new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title);
+ ExportParams exportParams = new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title);
exportParams.setImageBasePath(jeecgBaseConfig.getPath().getUpload());
//update-end--Author:liusq Date:20210126 for:图片导出报错,ImageBasePath未设置----------------------
- mv.addObject(NormalExcelConstants.PARAMS,exportParams);
+ mv.addObject(NormalExcelConstants.PARAMS, exportParams);
mv.addObject(NormalExcelConstants.DATA_LIST, exportList);
return mv;
}
+
/**
* 根据每页sheet数量导出多sheet
*
* @param request
- * @param object 实体类
- * @param clazz 实体类class
- * @param title 标题
+ * @param object 实体类
+ * @param clazz 实体类class
+ * @param title 标题
* @param exportFields 导出字段自定义
- * @param pageNum 每个sheet的数据条数
+ * @param pageNum 每个sheet的数据条数
* @param request
*/
- protected ModelAndView exportXlsSheet(HttpServletRequest request, T object, Class clazz, String title,String exportFields,Integer pageNum) {
+ protected ModelAndView exportXlsSheet(HttpServletRequest request, T object, Class clazz, String title, String exportFields, Integer pageNum) {
// Step.1 组装查询条件
QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(object, request.getParameterMap());
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
// Step.2 计算分页sheet数据
double total = service.count();
- int count = (int)Math.ceil(total/pageNum);
+ int count = (int) Math.ceil(total / pageNum);
//update-begin-author:liusq---date:20220629--for: 多sheet导出根据选择导出写法调整 ---
// Step.3 过滤选中数据
String selections = request.getParameter("selections");
if (oConvertUtils.isNotEmpty(selections)) {
List selectionList = Arrays.asList(selections.split(","));
- queryWrapper.in("id",selectionList);
+ queryWrapper.in("id", selectionList);
}
//update-end-author:liusq---date:20220629--for: 多sheet导出根据选择导出写法调整 ---
// Step.4 多sheet处理
List