From 37038449ab2a3d1d37a90a2b2530ffa3754f7277 Mon Sep 17 00:00:00 2001 From: Angus <760515805@qq.com> Date: Tue, 11 Nov 2025 01:58:55 +0000 Subject: [PATCH] =?UTF-8?q?!781=20Excel=E6=A8=A1=E7=89=88=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E6=95=B0=E6=8D=AE=E4=B8=8B=E6=8B=89=20*=20Excel?= =?UTF-8?q?=E6=A8=A1=E7=89=88=E5=8A=A8=E6=80=81=E6=95=B0=E6=8D=AE=E4=B8=8B?= =?UTF-8?q?=E6=8B=89=20*=20Excel=E6=A8=A1=E7=89=88=E5=8A=A8=E6=80=81?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E4=B8=8B=E6=8B=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../excel/annotation/ExcelDynamicOptions.java | 20 +++++++++++++++++++ .../common/excel/core/ExcelDownHandler.java | 14 +++++++++++++ .../excel/service/ExcelOptionsProvider.java | 18 +++++++++++++++++ 3 files changed, 52 insertions(+) create mode 100644 ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/annotation/ExcelDynamicOptions.java create mode 100644 ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/service/ExcelOptionsProvider.java diff --git a/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/annotation/ExcelDynamicOptions.java b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/annotation/ExcelDynamicOptions.java new file mode 100644 index 000000000..b0160b5b9 --- /dev/null +++ b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/annotation/ExcelDynamicOptions.java @@ -0,0 +1,20 @@ +package org.dromara.common.excel.annotation; + +import java.lang.annotation.*; + +/** + * Excel动态下拉选项注解 + * + * @author Angus + */ +@Target({ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@Inherited +public @interface ExcelDynamicOptions { + + /** + * 提供者类全限定名 + * 实现org.dromara.common.excel.service.ExcelOptionsProvider实现类接口 + */ + Class providerClass(); +} diff --git a/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/core/ExcelDownHandler.java b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/core/ExcelDownHandler.java index 139728390..b94c51410 100644 --- a/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/core/ExcelDownHandler.java +++ b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/core/ExcelDownHandler.java @@ -23,7 +23,9 @@ import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.annotation.ExcelDynamicOptions; import org.dromara.common.excel.annotation.ExcelEnumFormat; +import org.dromara.common.excel.service.ExcelOptionsProvider; import java.lang.reflect.Field; import java.util.*; @@ -117,6 +119,18 @@ public class ExcelDownHandler implements SheetWriteHandler { ExcelEnumFormat format = field.getDeclaredAnnotation(ExcelEnumFormat.class); List values = EnumUtil.getFieldValues(format.enumClass(), format.textField()); options = StreamUtils.toList(values, Convert::toStr); + } else if (field.isAnnotationPresent(ExcelDynamicOptions.class)) { + // 处理动态下拉选项 + ExcelDynamicOptions dynamicOptions = field.getDeclaredAnnotation(ExcelDynamicOptions.class); + Class providerClass = dynamicOptions.providerClass(); + if (providerClass == null) { + throw new ServiceException("使用ExcelDynamicOptions注解,必须给providerClass赋予ExcelOptionsProvider的实现类" + + ",字段:{}", field.getName()); + } + // 获取提供者实例 + ExcelOptionsProvider provider = (ExcelOptionsProvider) SpringUtils.getBean(providerClass); + Set optionSets = provider.getOptions(); + options = new ArrayList<>(CollUtil.isNotEmpty(optionSets) ? new ArrayList<>(optionSets) : Collections.emptyList()); } if (ObjectUtil.isNotEmpty(options)) { // 仅当下拉可选项不为空时执行 diff --git a/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/service/ExcelOptionsProvider.java b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/service/ExcelOptionsProvider.java new file mode 100644 index 000000000..f51d753ba --- /dev/null +++ b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/service/ExcelOptionsProvider.java @@ -0,0 +1,18 @@ +package org.dromara.common.excel.service; + +import java.util.Set; + +/** + * Excel下拉选项数据提供接口 + * + * @author Angus + */ +public interface ExcelOptionsProvider { + + /** + * 获取下拉选项数据 + * + * @return 下拉选项列表 + */ + Set getOptions(); +}