update SystemSetting

This commit is contained in:
Timi
2026-09-08 16:52:32 +08:00
parent d920b8630d
commit af76eb43b8
23 changed files with 329 additions and 487 deletions
@@ -0,0 +1,82 @@
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;
}
}