Merge remote-tracking branch 'yudao/master-jdk17' into vben5-antd-schema

This commit is contained in:
puhui999
2025-05-20 09:57:17 +08:00
10 changed files with 164 additions and 32 deletions

View File

@@ -0,0 +1,30 @@
package cn.iocoder.yudao.module.infra.enums.codegen;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 代码生成的 VO 类型枚举
*
* 目前的作用Controller 新增、修改、响应时,使用 VO 还是 DO
* 注意:不包括 Controller 的分页参数!
*
* @author 芋道源码
*/
@AllArgsConstructor
@Getter
public enum CodegenVOTypeEnum {
VO(10, "VO"),
DO(20, "DO");
/**
* 场景
*/
private final Integer type;
/**
* 场景名
*/
private final String name;
}

View File

@@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.infra.framework.codegen.config;
import cn.iocoder.yudao.module.infra.enums.codegen.CodegenFrontTypeEnum;
import cn.iocoder.yudao.module.infra.enums.codegen.CodegenVOTypeEnum;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.validation.annotation.Validated;
@@ -34,6 +35,14 @@ public class CodegenProperties {
@NotNull(message = "代码生成的前端类型不能为空")
private Integer frontType;
/**
* 代码生成的 VO 类型
*
* 枚举 {@link CodegenVOTypeEnum#getType()}
*/
@NotNull(message = "代码生成的 VO 类型不能为空")
private Integer voType;
/**
* 是否生成单元测试
*/

View File

@@ -21,7 +21,7 @@ import java.io.IOException;
@Slf4j
public class FileTypeUtils {
private static final ThreadLocal<Tika> TIKA = TransmittableThreadLocal.withInitial(Tika::new);
private static final Tika TIKA = new Tika();
/**
* 获得文件的 mineType对于 docjar 等文件会有误差
@@ -31,7 +31,7 @@ public class FileTypeUtils {
*/
@SneakyThrows
public static String getMineType(byte[] data) {
return TIKA.get().detect(data);
return TIKA.detect(data);
}
/**
@@ -41,7 +41,7 @@ public class FileTypeUtils {
* @return mineType 无法识别时会返回“application/octet-stream”
*/
public static String getMineType(String name) {
return TIKA.get().detect(name);
return TIKA.detect(name);
}
/**
@@ -52,7 +52,7 @@ public class FileTypeUtils {
* @return mineType 无法识别时会返回“application/octet-stream”
*/
public static String getMineType(byte[] data, String name) {
return TIKA.get().detect(data, name);
return TIKA.detect(data, name);
}
/**

View File

@@ -31,6 +31,7 @@ import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.CodegenTableDO;
import cn.iocoder.yudao.module.infra.enums.codegen.CodegenFrontTypeEnum;
import cn.iocoder.yudao.module.infra.enums.codegen.CodegenSceneEnum;
import cn.iocoder.yudao.module.infra.enums.codegen.CodegenTemplateTypeEnum;
import cn.iocoder.yudao.module.infra.enums.codegen.CodegenVOTypeEnum;
import cn.iocoder.yudao.module.infra.framework.codegen.config.CodegenProperties;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ImmutableTable;
@@ -234,6 +235,7 @@ public class CodegenEngine {
globalBindingMap.put("baseFrameworkPackage", codegenProperties.getBasePackage()
+ '.' + "framework"); // 用于后续获取测试类的 package 地址
globalBindingMap.put("jakartaPackage", jakartaEnable ? "jakarta" : "javax");
globalBindingMap.put("voType", codegenProperties.getVoType());
// 全局 Java Bean
globalBindingMap.put("CommonResultClassName", CommonResult.class.getName());
globalBindingMap.put("PageResultClassName", PageResult.class.getName());
@@ -383,11 +385,13 @@ public class CodegenEngine {
// className 相关
// 去掉指定前缀,将 TestDictType 转换成 DictType. 因为在 create 等方法后,不需要带上 Test 前缀
String className = table.getClassName();
String simpleClassName = equalsAnyIgnoreCase(table.getClassName(), table.getModuleName()) ? table.getClassName()
: removePrefix(table.getClassName(), upperFirst(table.getModuleName()));
String classNameVar = lowerFirst(simpleClassName);
bindingMap.put("simpleClassName", simpleClassName);
bindingMap.put("simpleClassName_underlineCase", toUnderlineCase(simpleClassName)); // 将 DictType 转换成 dict_type
bindingMap.put("classNameVar", lowerFirst(simpleClassName)); // 将 DictType 转换成 dictType用于变量
bindingMap.put("classNameVar", classNameVar); // 将 DictType 转换成 dictType用于变量
// 将 DictType 转换成 dict-type
String simpleClassNameStrikeCase = toSymbolCase(simpleClassName, '-');
bindingMap.put("simpleClassName_strikeCase", simpleClassNameStrikeCase);
@@ -441,6 +445,22 @@ public class CodegenEngine {
bindingMap.put("subClassNameVars", subClassNameVars);
bindingMap.put("subSimpleClassName_strikeCases", subSimpleClassNameStrikeCases);
}
// 多个 vm 公用的 VO 变量
if (ObjectUtil.equal(codegenProperties.getVoType(), CodegenVOTypeEnum.VO.getType())) {
String prefixClass = CodegenSceneEnum.valueOf(table.getScene()).getPrefixClass();
bindingMap.put("saveReqVOClass", prefixClass + className + "SaveReqVO");
bindingMap.put("updateReqVOClass", prefixClass + className + "SaveReqVO");
bindingMap.put("respVOClass", prefixClass + className + "RespVO");
bindingMap.put("saveReqVOVar", "createReqVO");
bindingMap.put("updateReqVOVar", "updateReqVO");
} else if (ObjectUtil.equal(codegenProperties.getVoType(), CodegenVOTypeEnum.DO.getType())) {
bindingMap.put("saveReqVOClass", className + "DO");
bindingMap.put("updateReqVOClass", className + "DO");
bindingMap.put("respVOClass", className + "DO");
bindingMap.put("saveReqVOVar", classNameVar);
bindingMap.put("updateReqVOVar", classNameVar);
}
return bindingMap;
}
@@ -461,6 +481,11 @@ public class CodegenEngine {
templates.remove(javaTemplatePath("test/serviceTest"));
templates.remove("codegen/sql/h2.vm");
}
// 如果禁用 VO 类型,则移除对应的模版
if (ObjectUtil.notEqual(codegenProperties.getVoType(), CodegenVOTypeEnum.VO.getType())) {
templates.remove(javaTemplatePath("controller/vo/respVO"));
templates.remove(javaTemplatePath("controller/vo/saveReqVO"));
}
return templates;
}