From 501cfe5afa7fc951e8d92dcdb80bfc8a5406543a Mon Sep 17 00:00:00 2001 From: YunaiV Date: Mon, 19 May 2025 13:04:25 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat=EF=BC=9A=E3=80=90INFRA=20=E5=9F=BA?= =?UTF-8?q?=E7=A1=80=E8=AE=BE=E6=96=BD=E3=80=91=E4=BB=A3=E7=A0=81=E7=94=9F?= =?UTF-8?q?=E6=88=90=E6=97=B6=EF=BC=8C=E6=94=AF=E6=8C=81=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=20VO/DO=20=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../enums/codegen/CodegenVOTypeEnum.java | 30 ++++++++++++++++ .../codegen/config/CodegenProperties.java | 9 +++++ .../service/codegen/inner/CodegenEngine.java | 27 +++++++++++++- .../codegen/java/controller/controller.vm | 36 ++++++++++++------- .../src/main/resources/codegen/java/dal/do.vm | 29 +++++++++++++++ .../main/resources/codegen/java/dal/do_sub.vm | 20 +++++++++++ .../resources/codegen/java/service/service.vm | 8 ++--- .../codegen/java/service/serviceImpl.vm | 28 +++++++++------ .../src/main/resources/application.yaml | 1 + 9 files changed, 160 insertions(+), 28 deletions(-) create mode 100644 yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenVOTypeEnum.java diff --git a/yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenVOTypeEnum.java b/yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenVOTypeEnum.java new file mode 100644 index 0000000000..60b4790533 --- /dev/null +++ b/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; + +} diff --git a/yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/framework/codegen/config/CodegenProperties.java b/yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/framework/codegen/config/CodegenProperties.java index cfa1fa2fbe..ada7995cb3 100644 --- a/yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/framework/codegen/config/CodegenProperties.java +++ b/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; + /** * 是否生成单元测试 */ diff --git a/yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java b/yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java index bce07e0c1d..d94dc40796 100644 --- a/yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java +++ b/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; } diff --git a/yudao-module-infra/src/main/resources/codegen/java/controller/controller.vm b/yudao-module-infra/src/main/resources/codegen/java/controller/controller.vm index 5aa3baef83..934f8da3b8 100644 --- a/yudao-module-infra/src/main/resources/codegen/java/controller/controller.vm +++ b/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 update${simpleClassName}(@Valid @RequestBody ${sceneEnum.prefixClass}${table.className}SaveReqVO updateReqVO) { - ${classNameVar}Service.update${simpleClassName}(updateReqVO); + public CommonResult update${simpleClassName}(@Valid @RequestBody ${updateReqVOClass} ${updateReqVOVar}) { + ${classNameVar}Service.update${simpleClassName}(${updateReqVOVar}); return success(true); } @@ -80,9 +80,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 ) @@ -91,9 +95,13 @@ public class ${sceneEnum.prefixClass}${table.className}Controller { #if ($sceneEnum.scene == 1) @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')") #end - public CommonResult> get${simpleClassName}Page(@Valid ${sceneEnum.prefixClass}${table.className}PageReqVO pageReqVO) { + public CommonResult> 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 } ## 特殊:树表专属逻辑(树不需要分页接口) @@ -103,9 +111,13 @@ public class ${sceneEnum.prefixClass}${table.className}Controller { #if ($sceneEnum.scene == 1) @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')") #end - public CommonResult> get${simpleClassName}List(@Valid ${sceneEnum.prefixClass}${table.className}ListReqVO listReqVO) { + public CommonResult> 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 @@ -121,8 +133,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 diff --git a/yudao-module-infra/src/main/resources/codegen/java/dal/do.vm b/yudao-module-infra/src/main/resources/codegen/java/dal/do.vm index b019d6e12f..13a1b6c95c 100644 --- a/yudao-module-infra/src/main/resources/codegen/java/dal/do.vm +++ b/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 diff --git a/yudao-module-infra/src/main/resources/codegen/java/dal/do_sub.vm b/yudao-module-infra/src/main/resources/codegen/java/dal/do_sub.vm index 16be55e8a5..0dfc38ffef 100644 --- a/yudao-module-infra/src/main/resources/codegen/java/dal/do_sub.vm +++ b/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 diff --git a/yudao-module-infra/src/main/resources/codegen/java/service/service.vm b/yudao-module-infra/src/main/resources/codegen/java/service/service.vm index c4ee4f0f64..cd7296a1de 100644 --- a/yudao-module-infra/src/main/resources/codegen/java/service/service.vm +++ b/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} diff --git a/yudao-module-infra/src/main/resources/codegen/java/service/serviceImpl.vm b/yudao-module-infra/src/main/resources/codegen/java/service/serviceImpl.vm index 80bc71b026..71c23881b9 100644 --- a/yudao-module-infra/src/main/resources/codegen/java/service/serviceImpl.vm +++ b/yudao-module-infra/src/main/resources/codegen/java/service/serviceImpl.vm @@ -49,19 +49,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 ) @@ -73,9 +75,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 @@ -88,22 +90,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) @@ -114,9 +120,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 diff --git a/yudao-server/src/main/resources/application.yaml b/yudao-server/src/main/resources/application.yaml index bdb30b49f0..c49c460b80 100644 --- a/yudao-server/src/main/resources/application.yaml +++ b/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 From bb236af6310b852337e501d026d08048fad945bf Mon Sep 17 00:00:00 2001 From: YunaiV Date: Mon, 19 May 2025 20:29:39 +0800 Subject: [PATCH 2/2] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=20FileTypeUtils?= =?UTF-8?q?=20=E7=9A=84=20TIKA=20=E5=88=9B=E5=BB=BA=EF=BC=8C=E6=8F=90?= =?UTF-8?q?=E5=8D=87=E6=80=A7=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../infra/framework/file/core/utils/FileTypeUtils.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/utils/FileTypeUtils.java b/yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/utils/FileTypeUtils.java index 5f9308ec65..e2c607842f 100644 --- a/yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/utils/FileTypeUtils.java +++ b/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 = 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); } /**