update 优化 !781Excel 模版动态数据下拉 泛型逻辑

This commit is contained in:
秋辞未寒
2025-11-11 17:02:53 +08:00
parent fa6c9696f0
commit 888c14615d
3 changed files with 12 additions and 12 deletions

View File

@@ -1,5 +1,7 @@
package org.dromara.common.excel.annotation; package org.dromara.common.excel.annotation;
import org.dromara.common.excel.core.ExcelOptionsProvider;
import java.lang.annotation.*; import java.lang.annotation.*;
/** /**
@@ -14,7 +16,8 @@ public @interface ExcelDynamicOptions {
/** /**
* 提供者类全限定名 * 提供者类全限定名
* 实现org.dromara.common.excel.service.ExcelOptionsProvider实现类接口 * <p>
* {@link org.dromara.common.excel.core.ExcelOptionsProvider} 接口实现类 class
*/ */
Class<?> providerClass(); Class<? extends ExcelOptionsProvider> providerClass();
} }

View File

@@ -25,7 +25,6 @@ import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.excel.annotation.ExcelDictFormat; import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.annotation.ExcelDynamicOptions; import org.dromara.common.excel.annotation.ExcelDynamicOptions;
import org.dromara.common.excel.annotation.ExcelEnumFormat; import org.dromara.common.excel.annotation.ExcelEnumFormat;
import org.dromara.common.excel.service.ExcelOptionsProvider;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.*; import java.util.*;
@@ -122,15 +121,12 @@ public class ExcelDownHandler implements SheetWriteHandler {
} else if (field.isAnnotationPresent(ExcelDynamicOptions.class)) { } else if (field.isAnnotationPresent(ExcelDynamicOptions.class)) {
// 处理动态下拉选项 // 处理动态下拉选项
ExcelDynamicOptions dynamicOptions = field.getDeclaredAnnotation(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); ExcelOptionsProvider provider = SpringUtils.getBean(dynamicOptions.providerClass());
Set<String> optionSets = provider.getOptions(); Set<String> providerOptions = provider.getOptions();
options = new ArrayList<>(CollUtil.isNotEmpty(optionSets) ? new ArrayList<>(optionSets) : Collections.emptyList()); if (CollUtil.isNotEmpty(providerOptions)) {
options = new ArrayList<>(providerOptions);
}
} }
if (ObjectUtil.isNotEmpty(options)) { if (ObjectUtil.isNotEmpty(options)) {
// 仅当下拉可选项不为空时执行 // 仅当下拉可选项不为空时执行

View File

@@ -1,4 +1,4 @@
package org.dromara.common.excel.service; package org.dromara.common.excel.core;
import java.util.Set; import java.util.Set;
@@ -15,4 +15,5 @@ public interface ExcelOptionsProvider {
* @return 下拉选项列表 * @return 下拉选项列表
*/ */
Set<String> getOptions(); Set<String> getOptions();
} }