Эх сурвалжийг харах

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

puhui999 5 сар өмнө
parent
commit
3e3dbce047

+ 30 - 0
yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenVOTypeEnum.java

@@ -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;
+
+}

+ 9 - 0
yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/framework/codegen/config/CodegenProperties.java

@@ -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;
+
     /**
      * 是否生成单元测试
      */

+ 4 - 4
yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/utils/FileTypeUtils.java

@@ -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,对于 doc,jar 等文件会有误差
@@ -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);
     }
 
     /**

+ 26 - 1
yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java

@@ -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;
     }
 

+ 24 - 12
yudao-module-infra/src/main/resources/codegen/java/controller/controller.vm

@@ -49,8 +49,8 @@ public class ${sceneEnum.prefixClass}${table.className}Controller {
 #if ($sceneEnum.scene == 1)
     @PreAuthorize("@ss.hasPermission('${permissionPrefix}:create')")
 #end
-    public CommonResult<${primaryColumn.javaType}> create${simpleClassName}(@Valid @RequestBody ${sceneEnum.prefixClass}${table.className}SaveReqVO createReqVO) {
-        return success(${classNameVar}Service.create${simpleClassName}(createReqVO));
+    public CommonResult<${primaryColumn.javaType}> create${simpleClassName}(@Valid @RequestBody ${saveReqVOClass} ${saveReqVOVar}) {
+        return success(${classNameVar}Service.create${simpleClassName}(${saveReqVOVar}));
     }
 
     @PutMapping("/update")
@@ -58,8 +58,8 @@ public class ${sceneEnum.prefixClass}${table.className}Controller {
 #if ($sceneEnum.scene == 1)
     @PreAuthorize("@ss.hasPermission('${permissionPrefix}:update')")
 #end
-    public CommonResult<Boolean> update${simpleClassName}(@Valid @RequestBody ${sceneEnum.prefixClass}${table.className}SaveReqVO updateReqVO) {
-        ${classNameVar}Service.update${simpleClassName}(updateReqVO);
+    public CommonResult<Boolean> update${simpleClassName}(@Valid @RequestBody ${updateReqVOClass} ${updateReqVOVar}) {
+        ${classNameVar}Service.update${simpleClassName}(${updateReqVOVar});
         return success(true);
     }
 
@@ -93,9 +93,13 @@ public class ${sceneEnum.prefixClass}${table.className}Controller {
 #if ($sceneEnum.scene == 1)
     @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')")
 #end
-    public CommonResult<${sceneEnum.prefixClass}${table.className}RespVO> get${simpleClassName}(@RequestParam("id") ${primaryColumn.javaType} id) {
+    public CommonResult<${respVOClass}> get${simpleClassName}(@RequestParam("id") ${primaryColumn.javaType} id) {
         ${table.className}DO ${classNameVar} = ${classNameVar}Service.get${simpleClassName}(id);
-        return success(BeanUtils.toBean(${classNameVar}, ${sceneEnum.prefixClass}${table.className}RespVO.class));
+#if ($voType == 10)
+        return success(BeanUtils.toBean(${classNameVar}, ${respVOClass}.class));
+#else
+        return success(${classNameVar});
+#end
     }
 
 #if ( $table.templateType != 2 )
@@ -104,9 +108,13 @@ public class ${sceneEnum.prefixClass}${table.className}Controller {
 #if ($sceneEnum.scene == 1)
     @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')")
 #end
-    public CommonResult<PageResult<${sceneEnum.prefixClass}${table.className}RespVO>> get${simpleClassName}Page(@Valid ${sceneEnum.prefixClass}${table.className}PageReqVO pageReqVO) {
+    public CommonResult<PageResult<${respVOClass}>> get${simpleClassName}Page(@Valid ${sceneEnum.prefixClass}${table.className}PageReqVO pageReqVO) {
         PageResult<${table.className}DO> pageResult = ${classNameVar}Service.get${simpleClassName}Page(pageReqVO);
-        return success(BeanUtils.toBean(pageResult, ${sceneEnum.prefixClass}${table.className}RespVO.class));
+#if ($voType == 10)
+        return success(BeanUtils.toBean(pageResult, ${respVOClass}.class));
+#else
+        return success(pageResult);
+#end
     }
 
 ## 特殊:树表专属逻辑(树不需要分页接口)
@@ -116,9 +124,13 @@ public class ${sceneEnum.prefixClass}${table.className}Controller {
 #if ($sceneEnum.scene == 1)
     @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')")
 #end
-    public CommonResult<List<${sceneEnum.prefixClass}${table.className}RespVO>> get${simpleClassName}List(@Valid ${sceneEnum.prefixClass}${table.className}ListReqVO listReqVO) {
+    public CommonResult<List<${respVOClass}>> get${simpleClassName}List(@Valid ${sceneEnum.prefixClass}${table.className}ListReqVO listReqVO) {
         List<${table.className}DO> list = ${classNameVar}Service.get${simpleClassName}List(listReqVO);
-        return success(BeanUtils.toBean(list, ${sceneEnum.prefixClass}${table.className}RespVO.class));
+#if ($voType == 10)
+        return success(BeanUtils.toBean(list, ${respVOClass}.class));
+#else
+	    return success(list);
+#end
     }
 
 #end
@@ -134,8 +146,8 @@ public class ${sceneEnum.prefixClass}${table.className}Controller {
         pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
         List<${table.className}DO> list = ${classNameVar}Service.get${simpleClassName}Page(pageReqVO).getList();
         // 导出 Excel
-        ExcelUtils.write(response, "${table.classComment}.xls", "数据", ${sceneEnum.prefixClass}${table.className}RespVO.class,
-                        BeanUtils.toBean(list, ${sceneEnum.prefixClass}${table.className}RespVO.class));
+        ExcelUtils.write(response, "${table.classComment}.xls", "数据", ${respVOClass}.class,
+                        BeanUtils.toBean(list, ${respVOClass}.class));
     }
 ## 特殊:树表专属逻辑(树不需要分页接口)
 #else

+ 29 - 0
yudao-module-infra/src/main/resources/codegen/java/dal/do.vm

@@ -12,6 +12,18 @@ import java.time.LocalDateTime;
 #end
 import com.baomidou.mybatisplus.annotation.*;
 import ${BaseDOClassName};
+## 处理 Excel 导出 + Schema 注解(仅 DO 模式)
+#if ($voType == 20)
+import io.swagger.v3.oas.annotations.media.Schema;
+import com.alibaba.excel.annotation.*;
+#foreach ($column in $columns)
+    #if ("$!column.dictType" != "")## 有设置数据字典
+		import ${DictFormatClassName};
+		import ${DictConvertClassName};
+        #break
+    #end
+#end
+#end
 
 /**
  * ${table.classComment} DO
@@ -26,6 +38,11 @@ import ${BaseDOClassName};
 @Builder
 @NoArgsConstructor
 @AllArgsConstructor
+## 处理 Excel 导出 + Schema 注解(仅 DO 模式)
+#if ($voType == 20)
+@Schema(description = "${sceneEnum.name} - ${table.classComment} Response VO")
+@ExcelIgnoreUnannotated
+#end
 public class ${table.className}DO extends BaseDO {
 
 ## 特殊:树表专属逻辑
@@ -45,6 +62,18 @@ public class ${table.className}DO extends BaseDO {
     #if (${column.primaryKey})##处理主键
     @TableId#if (${column.javaType} == 'String')(type = IdType.INPUT)#end
     #end
+#if ($voType == 20)
+## 1. 处理 Swagger 注解
+    @Schema(description = "${column.columnComment}"#if (!${column.nullable}), requiredMode = Schema.RequiredMode.REQUIRED#end#if ("$!column.example" != ""), example = "${column.example}"#end)
+## 2. 处理 Excel 导出
+#if ("$!column.dictType" != "")##处理枚举值
+    @ExcelProperty(value = "${column.columnComment}", converter = DictConvert.class)
+    @DictFormat("${column.dictType}") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+#else
+    @ExcelProperty("${column.columnComment}")
+#end
+#end
+## 3. 处理字段定义
     private ${column.javaType} ${column.javaField};
 #end
 #end

+ 20 - 0
yudao-module-infra/src/main/resources/codegen/java/dal/do_sub.vm

@@ -14,6 +14,17 @@ import java.time.LocalDateTime;
 #end
 import com.baomidou.mybatisplus.annotation.*;
 import ${BaseDOClassName};
+## 处理 Schema 注解(仅 DO 模式)
+#if ($voType == 20)
+import io.swagger.v3.oas.annotations.media.Schema;
+#foreach ($column in $columns)
+    #if ("$!column.dictType" != "")## 有设置数据字典
+        import ${DictFormatClassName};
+        import ${DictConvertClassName};
+        #break
+    #end
+#end
+#end
 
 /**
  * ${subTable.classComment} DO
@@ -28,6 +39,10 @@ import ${BaseDOClassName};
 @Builder
 @NoArgsConstructor
 @AllArgsConstructor
+## 处理 Schema 注解(仅 DO 模式)
+#if ($voType == 20)
+@Schema(description = "${sceneEnum.name} - ${table.classComment} Response VO")
+#end
 public class ${subTable.className}DO extends BaseDO {
 
 #foreach ($column in $subColumns)
@@ -42,6 +57,11 @@ public class ${subTable.className}DO extends BaseDO {
     #if (${column.primaryKey})##处理主键
     @TableId#if (${column.javaType} == 'String')(type = IdType.INPUT)#end
     #end
+#if ($voType == 20)
+## 1. 处理 Swagger 注解
+    @Schema(description = "${column.columnComment}"#if (!${column.nullable}), requiredMode = Schema.RequiredMode.REQUIRED#end#if ("$!column.example" != ""), example = "${column.example}"#end)
+#end
+## 2. 处理字段定义
     private ${column.javaType} ${column.javaField};
 #end
 #end

+ 4 - 4
yudao-module-infra/src/main/resources/codegen/java/service/service.vm

@@ -21,17 +21,17 @@ public interface ${table.className}Service {
     /**
      * 创建${table.classComment}
      *
-     * @param createReqVO 创建信息
+     * @param ${saveReqVOVar} 创建信息
      * @return 编号
      */
-    ${primaryColumn.javaType} create${simpleClassName}(@Valid ${sceneEnum.prefixClass}${table.className}SaveReqVO createReqVO);
+    ${primaryColumn.javaType} create${simpleClassName}(@Valid ${saveReqVOClass} ${saveReqVOVar});
 
     /**
      * 更新${table.classComment}
      *
-     * @param updateReqVO 更新信息
+     * @param ${updateReqVOVar} 更新信息
      */
-    void update${simpleClassName}(@Valid ${sceneEnum.prefixClass}${table.className}SaveReqVO updateReqVO);
+    void update${simpleClassName}(@Valid ${updateReqVOClass} ${updateReqVOVar});
 
     /**
      * 删除${table.classComment}

+ 17 - 11
yudao-module-infra/src/main/resources/codegen/java/service/serviceImpl.vm

@@ -50,19 +50,21 @@ public class ${table.className}ServiceImpl implements ${table.className}Service
 #if ( $subTables && $subTables.size() > 0 && $table.templateType != 11 )
     @Transactional(rollbackFor = Exception.class)
 #end
-    public ${primaryColumn.javaType} create${simpleClassName}(${sceneEnum.prefixClass}${table.className}SaveReqVO createReqVO) {
+    public ${primaryColumn.javaType} create${simpleClassName}(${saveReqVOClass} ${saveReqVOVar}) {
 ## 特殊:树表专属逻辑
 #if ( $table.templateType == 2 )
 #set ($TreeParentJavaField = $treeParentColumn.javaField.substring(0,1).toUpperCase() + ${treeParentColumn.javaField.substring(1)})##首字母大写
 #set ($TreeNameJavaField = $treeNameColumn.javaField.substring(0,1).toUpperCase() + ${treeNameColumn.javaField.substring(1)})##首字母大写
         // 校验${treeParentColumn.columnComment}的有效性
-        validateParent${simpleClassName}(null, createReqVO.get${TreeParentJavaField}());
+        validateParent${simpleClassName}(null, ${createReqVOVar}.get${TreeParentJavaField}());
         // 校验${treeNameColumn.columnComment}的唯一性
-        validate${simpleClassName}${TreeNameJavaField}Unique(null, createReqVO.get${TreeParentJavaField}(), createReqVO.get${TreeNameJavaField}());
+        validate${simpleClassName}${TreeNameJavaField}Unique(null, ${createReqVOVar}.get${TreeParentJavaField}(), ${createReqVOVar}.get${TreeNameJavaField}());
 
 #end
         // 插入
+#if ($voType == 10)
         ${table.className}DO ${classNameVar} = BeanUtils.toBean(createReqVO, ${table.className}DO.class);
+#end
         ${classNameVar}Mapper.insert(${classNameVar});
 ## 特殊:主子表专属逻辑(非 ERP 模式)
 #if ( $subTables && $subTables.size() > 0 && $table.templateType != 11 )
@@ -74,9 +76,9 @@ public class ${table.className}ServiceImpl implements ${table.className}Service
 #set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段
 #set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写
     #if ( $subTable.subJoinMany)
-        create${subSimpleClassName}List(${classNameVar}.getId(), createReqVO.get${subSimpleClassNames.get($index)}s());
+        create${subSimpleClassName}List(${classNameVar}.getId(), ${createReqVOVar}.get${subSimpleClassNames.get($index)}s());
     #else
-        create${subSimpleClassName}(${classNameVar}.getId(), createReqVO.get${subSimpleClassNames.get($index)}());
+        create${subSimpleClassName}(${classNameVar}.getId(), ${createReqVOVar}.get${subSimpleClassNames.get($index)}());
     #end
 #end
 #end
@@ -89,22 +91,26 @@ public class ${table.className}ServiceImpl implements ${table.className}Service
 #if ( $subTables && $subTables.size() > 0 && $table.templateType != 11 )
     @Transactional(rollbackFor = Exception.class)
 #end
-    public void update${simpleClassName}(${sceneEnum.prefixClass}${table.className}SaveReqVO updateReqVO) {
+    public void update${simpleClassName}(${updateReqVOClass} ${updateReqVOVar}) {
         // 校验存在
-        validate${simpleClassName}Exists(updateReqVO.getId());
+        validate${simpleClassName}Exists(${updateReqVOVar}.getId());
 ## 特殊:树表专属逻辑
 #if ( $table.templateType == 2 )
 #set ($TreeParentJavaField = $treeParentColumn.javaField.substring(0,1).toUpperCase() + ${treeParentColumn.javaField.substring(1)})##首字母大写
 #set ($TreeNameJavaField = $treeNameColumn.javaField.substring(0,1).toUpperCase() + ${treeNameColumn.javaField.substring(1)})##首字母大写
         // 校验${treeParentColumn.columnComment}的有效性
-        validateParent${simpleClassName}(updateReqVO.getId(), updateReqVO.get${TreeParentJavaField}());
+        validateParent${simpleClassName}(${updateReqVOVar}.getId(), ${updateReqVOVar}.get${TreeParentJavaField}());
         // 校验${treeNameColumn.columnComment}的唯一性
-        validate${simpleClassName}${TreeNameJavaField}Unique(updateReqVO.getId(), updateReqVO.get${TreeParentJavaField}(), updateReqVO.get${TreeNameJavaField}());
+        validate${simpleClassName}${TreeNameJavaField}Unique(${updateReqVOVar}.getId(), ${updateReqVOVar}.get${TreeParentJavaField}(), ${updateReqVOVar}.get${TreeNameJavaField}());
 
 #end
         // 更新
+#if ($voType == 10)
         ${table.className}DO updateObj = BeanUtils.toBean(updateReqVO, ${table.className}DO.class);
         ${classNameVar}Mapper.updateById(updateObj);
+#else
+        ${classNameVar}Mapper.updateById(${updateReqVOVar});
+#end
 ## 特殊:主子表专属逻辑(非 ERP 模式)
 #if ( $subTables && $subTables.size() > 0 && $table.templateType != 11)
 
@@ -115,9 +121,9 @@ public class ${table.className}ServiceImpl implements ${table.className}Service
 #set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段
 #set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写
     #if ( $subTable.subJoinMany)
-        update${subSimpleClassName}List(updateReqVO.getId(), updateReqVO.get${subSimpleClassNames.get($index)}s());
+        update${subSimpleClassName}List(${updateReqVOVar}.getId(), ${updateReqVOVar}.get${subSimpleClassNames.get($index)}s());
     #else
-        update${subSimpleClassName}(updateReqVO.getId(), updateReqVO.get${subSimpleClassNames.get($index)}());
+        update${subSimpleClassName}(${updateReqVOVar}.getId(), ${updateReqVOVar}.get${subSimpleClassNames.get($index)}());
     #end
 #end
 #end

+ 1 - 0
yudao-server/src/main/resources/application.yaml

@@ -269,6 +269,7 @@ yudao:
     base-package: ${yudao.info.base-package}
     db-schemas: ${spring.datasource.dynamic.datasource.master.name}
     front-type: 20 # 前端模版的类型,参见 CodegenFrontTypeEnum 枚举类
+    vo-type: 10 # VO 的类型,参见 CodegenVOTypeEnum 枚举类
     unit-test-enable: false # 是否生成单元测试
   tenant: # 多租户相关配置项
     enable: true