1. 实现集中式的附件统一管理,统一上传统一预览(代码生成器,公共组件,公共附件元数据定义)

2. 实现统一的 DB 字段数据库定义(代码生成器,共用规范检查)

(cherry picked from commit c2195ee3cf)
This commit is contained in:
chenbowen
2025-08-01 08:47:13 +08:00
committed by chenbowen
parent f9dc200d26
commit 014bd716de
63 changed files with 1674 additions and 351 deletions

View File

@@ -3,10 +3,16 @@ package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePac
import org.springframework.web.bind.annotation.*;
import ${jakartaPackage}.annotation.Resource;
import org.springframework.validation.annotation.Validated;
#if ($sceneEnum.scene == 1)import org.springframework.security.access.prepost.PreAuthorize;#end
#if ($sceneEnum.scene == 1)
import org.springframework.security.access.prepost.PreAuthorize;
#end
#if($isBusiness && $isBusiness == true)
import ${basePackage}.framework.business.interceptor.BusinessControllerMarker;
#end
#if($isFileUpload && $isFileUpload == true)
import ${basePackage}.framework.business.annotation.FileUploadController;
import ${basePackage}.framework.business.controller.AbstractFileUploadController;
#end
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
@@ -42,11 +48,27 @@ import ${basePackage}.module.${table.moduleName}.service.${table.businessName}.$
##二级的 businessName 暂时不算在 HTTP 路径上,可以根据需要写
@RequestMapping("/${table.moduleName}/${simpleClassName_strikeCase}")
@Validated
#if($isFileUpload && $isFileUpload == true)
@FileUploadController(source = "${table.moduleName}.${table.businessName}")
#end
## 支持业务基类标记isBusiness=true 时继承 BusinessControllerMarker
#if($isBusiness && $isBusiness == true)
#if($isBusiness && $isBusiness == true && (!$isFileUpload || !$isFileUpload == true))
public class ${sceneEnum.prefixClass}${table.className}Controller implements BusinessControllerMarker {
#else
#elseif((!$isBusiness || !$isBusiness == true) && (!$isFileUpload || !$isFileUpload == true))
public class ${sceneEnum.prefixClass}${table.className}Controller {
#elseif($isBusiness && $isBusiness == true && $isFileUpload && $isFileUpload == true)
public class ${sceneEnum.prefixClass}${table.className}Controller extends AbstractFileUploadController implements BusinessControllerMarker{
#elseif((!$isBusiness || !$isBusiness == true) && $isFileUpload && $isFileUpload == true)
public class ${sceneEnum.prefixClass}${table.className}Controller extends AbstractFileUploadController {
#end
#if($isFileUpload && $isFileUpload == true)
static {
FileUploadController annotation = DemoContractController.class.getAnnotation(FileUploadController.class);
if (annotation != null) {
setFileUploadInfo(annotation);
}
}
#end
@Resource
@@ -57,7 +79,7 @@ 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 ${saveReqVOClass} ${saveReqVOVar}) {
public CommonResult<${respVOClass}> create${simpleClassName}(@Valid @RequestBody ${saveReqVOClass} ${saveReqVOVar}) {
return success(${classNameVar}Service.create${simpleClassName}(${saveReqVOVar}));
}

View File

@@ -3,12 +3,12 @@ package ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.busines
import lombok.*;
import java.util.*;
#foreach ($column in $columns)
#if (${column.javaType} == "BigDecimal")
import java.math.BigDecimal;
#end
#if (${column.javaType} == "LocalDateTime")
import java.time.LocalDateTime;
#end
#if (${column.javaType} == "BigDecimal")
import java.math.BigDecimal;
#end
#if (${column.javaType} == "LocalDateTime")
import java.time.LocalDateTime;
#end
#end
import com.baomidou.mybatisplus.annotation.*;
## 导入基类
@@ -21,19 +21,19 @@ import ${BaseDOClassName};
#if ($voType == 20)
import io.swagger.v3.oas.annotations.media.Schema;
import com.alibaba.excel.annotation.*;
#foreach ($column in $columns)
#if ("$!column.dictType" != "")## 有设置数据字典
#foreach ($column in $columns)
#if ("$!column.dictType" != "")## 有设置数据字典
import ${DictFormatClassName};
import ${DictConvertClassName};
#break
#break
#end
#end
#end
#end
/**
* ${table.classComment} DO
*
* @author ${table.author}
*/
* ${table.classComment} DO
*
* @author ${table.author}
*/
@TableName("${table.tableName.toLowerCase()}")
@KeySequence("${table.tableName.toLowerCase()}_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@@ -48,8 +48,8 @@ import com.alibaba.excel.annotation.*;
@ExcelIgnoreUnannotated
#end
/**
* 支持业务基类继承isBusiness=true 时继承 BusinessBaseDO否则继承 BaseDO
*/
* 支持业务基类继承isBusiness=true 时继承 BusinessBaseDO否则继承 BaseDO
*/
#if($isBusiness && $isBusiness == true)
public class ${table.className}DO extends BusinessBaseDO {
#else
@@ -58,67 +58,53 @@ public class ${table.className}DO extends BaseDO {
## 特殊:树表专属逻辑
#if ( $table.templateType == 2 )
public static final Long ${treeParentColumn_javaField_underlineCase.toUpperCase()}_ROOT = 0L;
public static final Long ${treeParentColumn_javaField_underlineCase.toUpperCase()}_ROOT = 0L;
#end
## 字段定义宏,统一渲染字段
#macro(renderField $column $isStandardized)
/**
* ${column.columnComment}
#if ("$!column.dictType" != "")
*
* 枚举 {@link TODO ${column.dictType} 对应的类}
#end
*/
#if (${column.primaryKey})
@TableId#if (${column.javaType} == 'String')(type = IdType.INPUT)#else(type = IdType.ASSIGN_ID)#end
#end
#if ($voType == 20)
@Schema(description = "${column.columnComment}"#if (!${column.nullable}), requiredMode = Schema.RequiredMode.REQUIRED#end#if (
"$!column.example" != ""), example = "${column.example}"#end)
#if ("$!column.dictType" != "")
@ExcelProperty(value = "${column.columnComment}", converter = DictConvert.class)
@DictFormat("${column.dictType}") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
#else
@ExcelProperty("${column.columnComment}")
#end
#end
#if($isStandardized == true)
#if(!${column.primaryKey})
@TableField("${column.columnName}")
#end
#end
private ${column.javaType} ${column.javaField};
#end
## 字段定义,分支避免嵌套,保证 Velocity 兼容性
#if($isBusiness == true)
#foreach ($column in $columns)
#if (!${businessBaseDOFields.contains(${column.javaField})})
/**
* ${column.columnComment}
#if ("$!column.dictType" != "")##处理枚举值
*
* 枚举 {@link TODO ${column.dictType} 对应的类}
#foreach ($column in $columns)
#if (!${businessBaseDOFields.contains(${column.javaField})})
#renderField($column $isStandardized)
#end
#end
*/
#if (${column.primaryKey})##处理主键
@TableId#if (${column.javaType} == 'String')(type = IdType.INPUT)#else(type = IdType.ASSIGN_ID)#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
#else
#foreach ($column in $columns)
#if (!${baseDOFields.contains(${column.javaField})})
/**
* ${column.columnComment}
#if ("$!column.dictType" != "")##处理枚举值
*
* 枚举 {@link TODO ${column.dictType} 对应的类}
#foreach ($column in $columns)
#if (!${baseDOFields.contains(${column.javaField})})
#renderField($column $isStandardized)
#end
#end
*/
#if (${column.primaryKey})##处理主键
@TableId#if (${column.javaType} == 'String')(type = IdType.INPUT)#else(type = IdType.ASSIGN_ID)#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
#end
## 特殊:主子表专属逻辑(非 ERP 模式)
@@ -126,21 +112,21 @@ public class ${table.className}DO extends BaseDO {
#foreach ($subTable in $subTables)
#set ($index = $foreach.count - 1)
#if ( $subTable.subJoinMany)
/**
* ${subTable.classComment}列表
*/
@Schema(description = "${subTable.classComment}列表")
@TableField(exist = false)
private List<${subTable.className}DO> ${subClassNameVars.get($index)}s;
/**
* ${subTable.classComment}列表
*/
@Schema(description = "${subTable.classComment}列表")
@TableField(exist = false)
private List
<${subTable.className}DO> ${subClassNameVars.get($index)}s;
#else
/**
* ${subTable.classComment}
*/
@Schema(description = "${subTable.classComment}")
@TableField(exist = false)
private ${subTable.className}DO ${subClassNameVars.get($index)};
/**
* ${subTable.classComment}
*/
@Schema(description = "${subTable.classComment}")
@TableField(exist = false)
private ${subTable.className}DO ${subClassNameVars.get($index)};
#end
#end
#end
}

View File

@@ -24,7 +24,7 @@ public interface ${table.className}Service {
* @param ${saveReqVOVar} 创建信息
* @return 编号
*/
${primaryColumn.javaType} create${simpleClassName}(@Valid ${saveReqVOClass} ${saveReqVOVar});
${respVOClass} create${simpleClassName}(@Valid ${saveReqVOClass} ${saveReqVOVar});
/**
* 更新${table.classComment}

View File

@@ -52,7 +52,7 @@ 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}(${saveReqVOClass} ${saveReqVOVar}) {
public ${respVOClass} create${simpleClassName}(${saveReqVOClass} ${saveReqVOVar}) {
## 特殊:树表专属逻辑
#if ( $table.templateType == 2 )
#set ($TreeParentJavaField = $treeParentColumn.javaField.substring(0,1).toUpperCase() + ${treeParentColumn.javaField.substring(1)})##首字母大写
@@ -86,7 +86,7 @@ public class ${table.className}ServiceImpl implements ${table.className}Service
#end
#end
// 返回
return ${classNameVar}.getId();
return BeanUtils.toBean(${classNameVar}, ${respVOClass}.class);
}
@Override