83 lines
2.9 KiB
Java
83 lines
2.9 KiB
Java
package com.imyeyu.api.util;
|
|
|
|
import com.imyeyu.api.bean.SettingEnum;
|
|
import com.imyeyu.api.config.dbsource.TimiServerDBConfig;
|
|
import com.imyeyu.api.modules.common.entity.Setting;
|
|
import com.imyeyu.api.modules.common.service.SettingService;
|
|
import com.imyeyu.java.TimiJava;
|
|
import lombok.RequiredArgsConstructor;
|
|
import org.springframework.beans.factory.config.BeanDefinition;
|
|
import org.springframework.boot.ApplicationArguments;
|
|
import org.springframework.boot.ApplicationRunner;
|
|
import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
|
|
import org.springframework.core.Ordered;
|
|
import org.springframework.core.annotation.Order;
|
|
import org.springframework.core.type.filter.AssignableTypeFilter;
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
/// 启动时初始化内建系统配置
|
|
///
|
|
/// @author 夜雨
|
|
/// @since 2026-09-08
|
|
@Component
|
|
@RequiredArgsConstructor
|
|
@Order(Ordered.HIGHEST_PRECEDENCE)
|
|
public class InitBuiltinSetting implements ApplicationRunner {
|
|
|
|
/// 设置枚举所在的扫描包
|
|
private static final String SCAN_PACKAGE = "com.imyeyu.api";
|
|
|
|
private final SettingService settingService;
|
|
|
|
/// 初始化所有设置枚举对应的系统配置
|
|
///
|
|
/// @param args 启动参数
|
|
/// @throws Exception 初始化异常
|
|
@Override
|
|
@Transactional(TimiServerDBConfig.ROLLBACKER)
|
|
public void run(ApplicationArguments args) throws Exception {
|
|
for (SettingEnum item : findSettingEnumList()) {
|
|
if (settingService.getSystem(item) == null) {
|
|
Setting setting = new Setting();
|
|
setting.setBizType(item.getBizType());
|
|
setting.setBizId(TimiJava.ZERO_UUID);
|
|
setting.setCode(item.name());
|
|
setting.setValue(item.getDefaultValue());
|
|
setting.setValueType(item.getValueType());
|
|
setting.setIsPrivate(true);
|
|
settingService.create(setting);
|
|
}
|
|
}
|
|
}
|
|
|
|
/// 扫描所有实现设置枚举接口的枚举常量
|
|
///
|
|
/// @return 设置枚举常量列表
|
|
/// @throws ClassNotFoundException 枚举类无法加载
|
|
private List<SettingEnum> findSettingEnumList() throws ClassNotFoundException {
|
|
ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false);
|
|
scanner.addIncludeFilter(new AssignableTypeFilter(SettingEnum.class));
|
|
|
|
List<BeanDefinition> candidateList = new ArrayList<>(scanner.findCandidateComponents(SCAN_PACKAGE));
|
|
List<SettingEnum> result = new ArrayList<>();
|
|
for (BeanDefinition candidate : candidateList) {
|
|
String className = candidate.getBeanClassName();
|
|
if (className == null) {
|
|
continue;
|
|
}
|
|
Class<?> candidateClass = Class.forName(className);
|
|
if (!candidateClass.isEnum() || !SettingEnum.class.isAssignableFrom(candidateClass)) {
|
|
continue;
|
|
}
|
|
for (Object constant : candidateClass.getEnumConstants()) {
|
|
result.add((SettingEnum) constant);
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
}
|