mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-04 20:28:44 +08:00 
			
		
		
		
	代码生成器:简化 vo 和 convert 的生成逻辑
This commit is contained in:
		@@ -1,7 +1,6 @@
 | 
			
		||||
package cn.iocoder.yudao.module.infra.service.codegen.inner;
 | 
			
		||||
 | 
			
		||||
import cn.hutool.core.collection.CollUtil;
 | 
			
		||||
import cn.hutool.core.lang.Filter;
 | 
			
		||||
import cn.hutool.core.map.MapUtil;
 | 
			
		||||
import cn.hutool.core.util.ObjectUtil;
 | 
			
		||||
import cn.hutool.core.util.StrUtil;
 | 
			
		||||
@@ -15,6 +14,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.util.date.DateUtils;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.util.string.StrUtils;
 | 
			
		||||
import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
 | 
			
		||||
@@ -63,16 +63,11 @@ public class CodegenEngine {
 | 
			
		||||
     */
 | 
			
		||||
    private static final Map<String, String> SERVER_TEMPLATES = MapUtil.<String, String>builder(new LinkedHashMap<>()) // 有序
 | 
			
		||||
            // Java module-biz Main
 | 
			
		||||
            .put(javaTemplatePath("controller/vo/baseVO"), javaModuleImplVOFilePath("BaseVO"))
 | 
			
		||||
            .put(javaTemplatePath("controller/vo/createReqVO"), javaModuleImplVOFilePath("CreateReqVO"))
 | 
			
		||||
            .put(javaTemplatePath("controller/vo/pageReqVO"), javaModuleImplVOFilePath("PageReqVO"))
 | 
			
		||||
            .put(javaTemplatePath("controller/vo/respVO"), javaModuleImplVOFilePath("RespVO"))
 | 
			
		||||
            .put(javaTemplatePath("controller/vo/updateReqVO"), javaModuleImplVOFilePath("UpdateReqVO"))
 | 
			
		||||
            .put(javaTemplatePath("controller/vo/listReqVO"), javaModuleImplVOFilePath("ListReqVO"))
 | 
			
		||||
            .put(javaTemplatePath("controller/vo/excelVO"), javaModuleImplVOFilePath("ExcelVO"))
 | 
			
		||||
            .put(javaTemplatePath("controller/vo/respVO"), javaModuleImplVOFilePath("RespVO"))
 | 
			
		||||
            .put(javaTemplatePath("controller/vo/saveReqVO"), javaModuleImplVOFilePath("SaveReqVO"))
 | 
			
		||||
            .put(javaTemplatePath("controller/controller"), javaModuleImplControllerFilePath())
 | 
			
		||||
            .put(javaTemplatePath("convert/convert"),
 | 
			
		||||
                    javaModuleImplMainFilePath("convert/${table.businessName}/${table.className}Convert"))
 | 
			
		||||
            .put(javaTemplatePath("dal/do"),
 | 
			
		||||
                    javaModuleImplMainFilePath("dal/dataobject/${table.businessName}/${table.className}DO"))
 | 
			
		||||
            .put(javaTemplatePath("dal/do_sub"), // 特殊:主子表专属逻辑
 | 
			
		||||
@@ -192,6 +187,7 @@ public class CodegenEngine {
 | 
			
		||||
        globalBindingMap.put("DictConvertClassName", DictConvert.class.getName());
 | 
			
		||||
        globalBindingMap.put("OperateLogClassName", OperateLog.class.getName());
 | 
			
		||||
        globalBindingMap.put("OperateTypeEnumClassName", OperateTypeEnum.class.getName());
 | 
			
		||||
        globalBindingMap.put("BeanUtils", BeanUtils.class.getName());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -218,11 +214,16 @@ public class CodegenEngine {
 | 
			
		||||
                generateSubCode(table, subTables, result, vmPath, filePath, bindingMap);
 | 
			
		||||
                return;
 | 
			
		||||
                // 2.2 特殊:树表专属逻辑
 | 
			
		||||
            } else if (isPageTemplate(vmPath)) {
 | 
			
		||||
            } else if (isPageReqVOTemplate(vmPath)) {
 | 
			
		||||
                // 减少多余的类生成,例如说 PageVO.java 类
 | 
			
		||||
                if (CodegenTemplateTypeEnum.isTree(table.getTemplateType())) {
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
            } else if (isListReqVOTemplate(vmPath)) {
 | 
			
		||||
                // 减少多余的类生成,例如说 ListVO.java 类
 | 
			
		||||
                if (!CodegenTemplateTypeEnum.isTree(table.getTemplateType())) {
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            // 2.3 默认生成
 | 
			
		||||
            generateCode(result, vmPath, filePath, bindingMap);
 | 
			
		||||
@@ -469,8 +470,12 @@ public class CodegenEngine {
 | 
			
		||||
        return path.contains("_sub");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static boolean isPageTemplate(String path) {
 | 
			
		||||
        return path.contains("page");
 | 
			
		||||
    private static boolean isPageReqVOTemplate(String path) {
 | 
			
		||||
        return path.contains("pageReqVO");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static boolean isListReqVOTemplate(String path) {
 | 
			
		||||
        return path.contains("listReqVO");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -18,6 +18,7 @@ import java.io.IOException;
 | 
			
		||||
import ${PageParamClassName};
 | 
			
		||||
import ${PageResultClassName};
 | 
			
		||||
import ${CommonResultClassName};
 | 
			
		||||
import ${BeanUtils};
 | 
			
		||||
import static ${CommonResultClassName}.success;
 | 
			
		||||
 | 
			
		||||
import ${ExcelUtilsClassName};
 | 
			
		||||
@@ -31,7 +32,6 @@ import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.business
 | 
			
		||||
#foreach ($subTable in $subTables)
 | 
			
		||||
import ${basePackage}.module.${subTable.moduleName}.dal.dataobject.${subTable.businessName}.${subTable.className}DO;
 | 
			
		||||
#end
 | 
			
		||||
import ${basePackage}.module.${table.moduleName}.convert.${table.businessName}.${table.className}Convert;
 | 
			
		||||
import ${basePackage}.module.${table.moduleName}.service.${table.businessName}.${table.className}Service;
 | 
			
		||||
 | 
			
		||||
@Tag(name = "${sceneEnum.name} - ${table.classComment}")
 | 
			
		||||
@@ -49,7 +49,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 ${sceneEnum.prefixClass}${table.className}CreateReqVO createReqVO) {
 | 
			
		||||
    public CommonResult<${primaryColumn.javaType}> create${simpleClassName}(@Valid @RequestBody ${sceneEnum.prefixClass}${table.className}SaveReqVO createReqVO) {
 | 
			
		||||
        return success(${classNameVar}Service.create${simpleClassName}(createReqVO));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -58,7 +58,7 @@ 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}UpdateReqVO updateReqVO) {
 | 
			
		||||
    public CommonResult<Boolean> update${simpleClassName}(@Valid @RequestBody ${sceneEnum.prefixClass}${table.className}SaveReqVO updateReqVO) {
 | 
			
		||||
        ${classNameVar}Service.update${simpleClassName}(updateReqVO);
 | 
			
		||||
        return success(true);
 | 
			
		||||
    }
 | 
			
		||||
@@ -82,7 +82,7 @@ public class ${sceneEnum.prefixClass}${table.className}Controller {
 | 
			
		||||
#end
 | 
			
		||||
    public CommonResult<${sceneEnum.prefixClass}${table.className}RespVO> get${simpleClassName}(@RequestParam("id") ${primaryColumn.javaType} id) {
 | 
			
		||||
        ${table.className}DO ${classNameVar} = ${classNameVar}Service.get${simpleClassName}(id);
 | 
			
		||||
        return success(${table.className}Convert.INSTANCE.convert(${classNameVar}));
 | 
			
		||||
        return success(BeanUtils.toBean(${classNameVar}, ${sceneEnum.prefixClass}${table.className}RespVO.class));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#if ( $table.templateType != 2 )
 | 
			
		||||
@@ -93,7 +93,7 @@ public class ${sceneEnum.prefixClass}${table.className}Controller {
 | 
			
		||||
#end
 | 
			
		||||
    public CommonResult<PageResult<${sceneEnum.prefixClass}${table.className}RespVO>> get${simpleClassName}Page(@Valid ${sceneEnum.prefixClass}${table.className}PageReqVO pageReqVO) {
 | 
			
		||||
        PageResult<${table.className}DO> pageResult = ${classNameVar}Service.get${simpleClassName}Page(pageReqVO);
 | 
			
		||||
        return success(${table.className}Convert.INSTANCE.convertPage(pageResult));
 | 
			
		||||
        return success(BeanUtils.toBean(pageResult, ${sceneEnum.prefixClass}${table.className}RespVO.class));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
## 特殊:树表专属逻辑(树不需要分页接口)
 | 
			
		||||
@@ -105,7 +105,7 @@ public class ${sceneEnum.prefixClass}${table.className}Controller {
 | 
			
		||||
#end
 | 
			
		||||
    public CommonResult<List<${sceneEnum.prefixClass}${table.className}RespVO>> get${simpleClassName}List(@Valid ${sceneEnum.prefixClass}${table.className}ListReqVO listReqVO) {
 | 
			
		||||
        List<${table.className}DO> list = ${classNameVar}Service.get${simpleClassName}List(listReqVO);
 | 
			
		||||
        return success(${table.className}Convert.INSTANCE.convertList(list));
 | 
			
		||||
        return success(BeanUtils.toBean(list, ${sceneEnum.prefixClass}${table.className}RespVO.class));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#end
 | 
			
		||||
@@ -115,13 +115,25 @@ public class ${sceneEnum.prefixClass}${table.className}Controller {
 | 
			
		||||
    @PreAuthorize("@ss.hasPermission('${permissionPrefix}:export')")
 | 
			
		||||
#end
 | 
			
		||||
    @OperateLog(type = EXPORT)
 | 
			
		||||
#if ( $table.templateType != 2 )
 | 
			
		||||
    public void export${simpleClassName}Excel(@Valid ${sceneEnum.prefixClass}${table.className}PageReqVO pageReqVO,
 | 
			
		||||
              HttpServletResponse response) throws IOException {
 | 
			
		||||
        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", "数据", ${table.className}RespVO.class,
 | 
			
		||||
                        BeanUtils.toBean(list, ${table.className}RespVO.class));
 | 
			
		||||
    }
 | 
			
		||||
## 特殊:树表专属逻辑(树不需要分页接口)
 | 
			
		||||
#else
 | 
			
		||||
    public void export${simpleClassName}Excel(@Valid ${sceneEnum.prefixClass}${table.className}ListReqVO listReqVO,
 | 
			
		||||
              HttpServletResponse response) throws IOException {
 | 
			
		||||
        List<${table.className}DO> list = ${classNameVar}Service.get${simpleClassName}List(listReqVO);
 | 
			
		||||
        // 导出 Excel
 | 
			
		||||
        List<${sceneEnum.prefixClass}${table.className}ExcelVO> dataList = ${table.className}Convert.INSTANCE.convertList02(list);
 | 
			
		||||
        ExcelUtils.write(response, "${table.classComment}.xls", "数据", ${sceneEnum.prefixClass}${table.className}ExcelVO.class, dataList);
 | 
			
		||||
        ExcelUtils.write(response, "${table.classComment}.xls", "数据", ${table.className}RespVO.class,
 | 
			
		||||
                        BeanUtils.toBean(list, ${table.className}RespVO.class));
 | 
			
		||||
    }
 | 
			
		||||
#end
 | 
			
		||||
 | 
			
		||||
## 特殊:主子表专属逻辑
 | 
			
		||||
#foreach ($subTable in $subTables)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,13 +0,0 @@
 | 
			
		||||
## 提供给 baseVO、createVO、updateVO 生成字段
 | 
			
		||||
    @Schema(description = "${column.columnComment}"#if (!${column.nullable}), requiredMode = Schema.RequiredMode.REQUIRED#end#if ("$!column.example" != ""), example = "${column.example}"#end)
 | 
			
		||||
#if (!${column.nullable})## 判断 @NotEmpty 和 @NotNull 注解
 | 
			
		||||
#if (${column.javaType} == 'String')
 | 
			
		||||
    @NotEmpty(message = "${column.columnComment}不能为空")
 | 
			
		||||
#else
 | 
			
		||||
    @NotNull(message = "${column.columnComment}不能为空")
 | 
			
		||||
#end
 | 
			
		||||
#end
 | 
			
		||||
#if (${column.javaType} == "LocalDateTime")## 时间类型
 | 
			
		||||
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
 | 
			
		||||
#end
 | 
			
		||||
    private ${column.javaType} ${column.javaField};
 | 
			
		||||
@@ -1,30 +0,0 @@
 | 
			
		||||
package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo;
 | 
			
		||||
 | 
			
		||||
import lombok.*;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
import io.swagger.v3.oas.annotations.media.Schema;
 | 
			
		||||
import javax.validation.constraints.*;
 | 
			
		||||
## 处理 Date 字段的引入
 | 
			
		||||
#foreach ($column in $columns)
 | 
			
		||||
#if (${column.createOperation} && (!${column.updateOperation} || !${column.listOperationResult})
 | 
			
		||||
    && ${column.javaType} == "LocalDateTime")## 时间类型
 | 
			
		||||
import org.springframework.format.annotation.DateTimeFormat;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 | 
			
		||||
#break
 | 
			
		||||
#end
 | 
			
		||||
#end
 | 
			
		||||
 | 
			
		||||
@Schema(description = "${sceneEnum.name} - ${table.classComment}创建 Request VO")
 | 
			
		||||
@Data
 | 
			
		||||
@EqualsAndHashCode(callSuper = true)
 | 
			
		||||
@ToString(callSuper = true)
 | 
			
		||||
public class ${sceneEnum.prefixClass}${table.className}CreateReqVO extends ${sceneEnum.prefixClass}${table.className}BaseVO {
 | 
			
		||||
 | 
			
		||||
#foreach ($column in $columns)
 | 
			
		||||
#if (${column.createOperation} && (!${column.updateOperation} || !${column.listOperationResult}))##不是通用字段
 | 
			
		||||
    #parse("codegen/java/controller/vo/_column.vm")
 | 
			
		||||
 | 
			
		||||
#end
 | 
			
		||||
#end
 | 
			
		||||
}
 | 
			
		||||
@@ -1,47 +0,0 @@
 | 
			
		||||
package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo;
 | 
			
		||||
 | 
			
		||||
import io.swagger.v3.oas.annotations.media.Schema;
 | 
			
		||||
import lombok.*;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
#foreach ($column in $columns)
 | 
			
		||||
#if (${column.javaType} == "BigDecimal")
 | 
			
		||||
import java.math.BigDecimal;
 | 
			
		||||
#break
 | 
			
		||||
#end
 | 
			
		||||
#if (${column.javaType} == "LocalDateTime")
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
#break
 | 
			
		||||
#end
 | 
			
		||||
#end
 | 
			
		||||
 | 
			
		||||
import com.alibaba.excel.annotation.ExcelProperty;
 | 
			
		||||
#foreach ($column in $columns)
 | 
			
		||||
#if ("$!column.dictType" != "")## 有设置数据字典
 | 
			
		||||
import ${DictFormatClassName};
 | 
			
		||||
import ${DictConvertClassName};
 | 
			
		||||
 | 
			
		||||
#break
 | 
			
		||||
#end
 | 
			
		||||
#end
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * ${table.classComment} Excel VO
 | 
			
		||||
 *
 | 
			
		||||
 * @author ${table.author}
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
public class ${sceneEnum.prefixClass}${table.className}ExcelVO {
 | 
			
		||||
 | 
			
		||||
#foreach ($column in $columns)
 | 
			
		||||
    #if (${column.listOperationResult})##返回字段
 | 
			
		||||
    #if ("$!column.dictType" != "")##处理枚举值
 | 
			
		||||
    @ExcelProperty(value = "${column.columnComment}", converter = DictConvert.class)
 | 
			
		||||
    @DictFormat("${column.dictType}") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
 | 
			
		||||
    #else
 | 
			
		||||
    @ExcelProperty("${column.columnComment}")
 | 
			
		||||
    #end
 | 
			
		||||
    private ${column.javaType} ${column.javaField};
 | 
			
		||||
 | 
			
		||||
    #end
 | 
			
		||||
#end
 | 
			
		||||
}
 | 
			
		||||
@@ -4,9 +4,15 @@ import lombok.*;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
import io.swagger.v3.oas.annotations.media.Schema;
 | 
			
		||||
import ${PageParamClassName};
 | 
			
		||||
## 处理 Date 字段的引入
 | 
			
		||||
#foreach ($column in $columns)
 | 
			
		||||
#if (${column.listOperation} && ${column.javaType} == "LocalDateTime")## 时间类型
 | 
			
		||||
#if (${column.javaType} == "BigDecimal")
 | 
			
		||||
import java.math.BigDecimal;
 | 
			
		||||
#break
 | 
			
		||||
#end
 | 
			
		||||
#end
 | 
			
		||||
## 处理 LocalDateTime 字段的引入
 | 
			
		||||
#foreach ($column in $columns)
 | 
			
		||||
#if (${column.listOperation} && ${column.javaType} == "LocalDateTime")
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import org.springframework.format.annotation.DateTimeFormat;
 | 
			
		||||
 | 
			
		||||
@@ -20,9 +26,9 @@ import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 | 
			
		||||
    private ${column.javaType}#if ("$!prefix" != "") ${prefix}${JavaField}#else ${column.javaField}#end;
 | 
			
		||||
#end
 | 
			
		||||
 | 
			
		||||
@Schema(description = "${sceneEnum.name} - ${table.classComment} Excel 导出 Request VO,参数和 ${table.className}PageReqVO 是一致的")
 | 
			
		||||
@Schema(description = "${sceneEnum.name} - ${table.classComment}列表 Request VO")
 | 
			
		||||
@Data
 | 
			
		||||
public class ${sceneEnum.prefixClass}${table.className}ExportReqVO {
 | 
			
		||||
public class ${sceneEnum.prefixClass}${table.className}ListReqVO {
 | 
			
		||||
 | 
			
		||||
#foreach ($column in $columns)
 | 
			
		||||
#if (${column.listOperation})##查询操作
 | 
			
		||||
 
 | 
			
		||||
@@ -4,9 +4,15 @@ import lombok.*;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
import io.swagger.v3.oas.annotations.media.Schema;
 | 
			
		||||
import ${PageParamClassName};
 | 
			
		||||
## 处理 Date 字段的引入
 | 
			
		||||
#foreach ($column in $columns)
 | 
			
		||||
#if (${column.listOperation} && ${column.javaType} == "LocalDateTime")## 时间类型
 | 
			
		||||
#if (${column.javaType} == "BigDecimal")
 | 
			
		||||
import java.math.BigDecimal;
 | 
			
		||||
#break
 | 
			
		||||
#end
 | 
			
		||||
#end
 | 
			
		||||
## 处理 LocalDateTime 字段的引入
 | 
			
		||||
#foreach ($column in $columns)
 | 
			
		||||
#if (${column.listOperationCondition} && ${column.javaType} == "LocalDateTime")
 | 
			
		||||
import org.springframework.format.annotation.DateTimeFormat;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -2,22 +2,51 @@ package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePac
 | 
			
		||||
 | 
			
		||||
import io.swagger.v3.oas.annotations.media.Schema;
 | 
			
		||||
import lombok.*;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
## 处理 BigDecimal 字段的引入
 | 
			
		||||
import java.util.*;
 | 
			
		||||
#foreach ($column in $columns)
 | 
			
		||||
#if (${column.javaType} == "LocalDateTime")
 | 
			
		||||
#if (${column.javaType} == "BigDecimal")
 | 
			
		||||
import java.math.BigDecimal;
 | 
			
		||||
#break
 | 
			
		||||
#end
 | 
			
		||||
#end
 | 
			
		||||
## 处理 LocalDateTime 字段的引入
 | 
			
		||||
#foreach ($column in $columns)
 | 
			
		||||
#if (${table.listOperationResult} && ${column.javaType} == "LocalDateTime")
 | 
			
		||||
import org.springframework.format.annotation.DateTimeFormat;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
#break
 | 
			
		||||
#end
 | 
			
		||||
#end
 | 
			
		||||
## 处理 Excel 导出
 | 
			
		||||
import com.alibaba.excel.annotation.*;
 | 
			
		||||
#foreach ($column in $columns)
 | 
			
		||||
#if ("$!column.dictType" != "")## 有设置数据字典
 | 
			
		||||
import ${DictFormatClassName};
 | 
			
		||||
import ${DictConvertClassName};
 | 
			
		||||
#break
 | 
			
		||||
#end
 | 
			
		||||
#end
 | 
			
		||||
 | 
			
		||||
@Schema(description = "${sceneEnum.name} - ${table.classComment} Response VO")
 | 
			
		||||
@Data
 | 
			
		||||
@EqualsAndHashCode(callSuper = true)
 | 
			
		||||
@ToString(callSuper = true)
 | 
			
		||||
public class ${sceneEnum.prefixClass}${table.className}RespVO extends ${sceneEnum.prefixClass}${table.className}BaseVO {
 | 
			
		||||
@ExcelIgnoreUnannotated
 | 
			
		||||
public class ${sceneEnum.prefixClass}${table.className}RespVO {
 | 
			
		||||
 | 
			
		||||
## 逐个处理字段
 | 
			
		||||
#foreach ($column in $columns)
 | 
			
		||||
#if (${column.listOperationResult} && (!${column.createOperation} || !${column.updateOperation}))##不是通用字段
 | 
			
		||||
#if (${column.listOperationResult})
 | 
			
		||||
## 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
 | 
			
		||||
## 3. 处理字段定义
 | 
			
		||||
    private ${column.javaType} ${column.javaField};
 | 
			
		||||
 | 
			
		||||
#end
 | 
			
		||||
 
 | 
			
		||||
@@ -3,24 +3,20 @@ package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePac
 | 
			
		||||
import io.swagger.v3.oas.annotations.media.Schema;
 | 
			
		||||
import lombok.*;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
import javax.validation.constraints.*;
 | 
			
		||||
## 处理 BigDecimal 字段的引入
 | 
			
		||||
import java.util.*;
 | 
			
		||||
#foreach ($column in $columns)
 | 
			
		||||
#if (${column.javaType} == "BigDecimal")
 | 
			
		||||
import java.math.BigDecimal;
 | 
			
		||||
#break
 | 
			
		||||
#end
 | 
			
		||||
#if (${column.javaType} == "LocalDateTime")
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
#break
 | 
			
		||||
#end
 | 
			
		||||
#end
 | 
			
		||||
import javax.validation.constraints.*;
 | 
			
		||||
## 处理 Date 字段的引入
 | 
			
		||||
## 处理 LocalDateTime 字段的引入
 | 
			
		||||
#foreach ($column in $columns)
 | 
			
		||||
#if (${column.createOperation} && ${column.updateOperation} && ${column.listOperationResult}
 | 
			
		||||
    && ${column.javaType} == "LocalDateTime")## 时间类型
 | 
			
		||||
#if ((${column.createOperation} || ${column.updateOperation}) && ${column.javaType} == "LocalDateTime")
 | 
			
		||||
import org.springframework.format.annotation.DateTimeFormat;
 | 
			
		||||
 | 
			
		||||
import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
#break
 | 
			
		||||
#end
 | 
			
		||||
#end
 | 
			
		||||
@@ -29,16 +25,25 @@ import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 | 
			
		||||
import ${basePackage}.module.${subTable.moduleName}.dal.dataobject.${subTable.businessName}.${subTable.className}DO;
 | 
			
		||||
#end
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * ${table.classComment} Base VO,提供给添加、修改、详细的子 VO 使用
 | 
			
		||||
 * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
 | 
			
		||||
 */
 | 
			
		||||
@Schema(description = "${sceneEnum.name} - ${table.classComment}新增/修改 Request VO")
 | 
			
		||||
@Data
 | 
			
		||||
public class ${sceneEnum.prefixClass}${table.className}BaseVO {
 | 
			
		||||
public class ${sceneEnum.prefixClass}${table.className}SaveReqVO {
 | 
			
		||||
 | 
			
		||||
## 逐个处理字段
 | 
			
		||||
#foreach ($column in $columns)
 | 
			
		||||
#if (${column.createOperation} && ${column.updateOperation} && ${column.listOperationResult})##通用操作
 | 
			
		||||
    #parse("codegen/java/controller/vo/_column.vm")
 | 
			
		||||
#if (${column.createOperation} || ${column.updateOperation})
 | 
			
		||||
## 1. 处理 Swagger 注解
 | 
			
		||||
    @Schema(description = "${column.columnComment}"#if (!${column.nullable}), requiredMode = Schema.RequiredMode.REQUIRED#end#if ("$!column.example" != ""), example = "${column.example}"#end)
 | 
			
		||||
#if (!${column.nullable})
 | 
			
		||||
## 2. 处理 Validator 参数校验
 | 
			
		||||
#if (${column.javaType} == 'String')
 | 
			
		||||
    @NotEmpty(message = "${column.columnComment}不能为空")
 | 
			
		||||
#else
 | 
			
		||||
    @NotNull(message = "${column.columnComment}不能为空")
 | 
			
		||||
#end
 | 
			
		||||
#end
 | 
			
		||||
## 3. 处理字段定义
 | 
			
		||||
    private ${column.javaType} ${column.javaField};
 | 
			
		||||
 | 
			
		||||
#end
 | 
			
		||||
#end
 | 
			
		||||
@@ -1,30 +0,0 @@
 | 
			
		||||
package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo;
 | 
			
		||||
 | 
			
		||||
import io.swagger.v3.oas.annotations.media.Schema;
 | 
			
		||||
import lombok.*;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
import javax.validation.constraints.*;
 | 
			
		||||
## 处理 Date 字段的引入
 | 
			
		||||
#foreach ($column in $columns)
 | 
			
		||||
#if (${column.updateOperation} && (!${column.createOperation} || !${column.listOperationResult})
 | 
			
		||||
    && ${column.javaType} == "LocalDateTime")## 时间类型
 | 
			
		||||
import org.springframework.format.annotation.DateTimeFormat;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 | 
			
		||||
#break
 | 
			
		||||
#end
 | 
			
		||||
#end
 | 
			
		||||
 | 
			
		||||
@Schema(description = "${sceneEnum.name} - ${table.classComment}更新 Request VO")
 | 
			
		||||
@Data
 | 
			
		||||
@EqualsAndHashCode(callSuper = true)
 | 
			
		||||
@ToString(callSuper = true)
 | 
			
		||||
public class ${sceneEnum.prefixClass}${table.className}UpdateReqVO extends ${sceneEnum.prefixClass}${table.className}BaseVO {
 | 
			
		||||
 | 
			
		||||
#foreach ($column in $columns)
 | 
			
		||||
#if (${column.updateOperation} && (!${column.createOperation} || !${column.listOperationResult}))##不是通用字段
 | 
			
		||||
    #parse("codegen/java/controller/vo/_column.vm")
 | 
			
		||||
 | 
			
		||||
#end
 | 
			
		||||
#end
 | 
			
		||||
}
 | 
			
		||||
@@ -1,36 +0,0 @@
 | 
			
		||||
package ${basePackage}.module.${table.moduleName}.convert.${table.businessName};
 | 
			
		||||
 | 
			
		||||
import java.util.*;
 | 
			
		||||
 | 
			
		||||
import ${PageResultClassName};
 | 
			
		||||
 | 
			
		||||
import org.mapstruct.Mapper;
 | 
			
		||||
import org.mapstruct.factory.Mappers;
 | 
			
		||||
import ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo.*;
 | 
			
		||||
import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * ${table.classComment} Convert
 | 
			
		||||
 *
 | 
			
		||||
 * @author ${table.author}
 | 
			
		||||
 */
 | 
			
		||||
@Mapper
 | 
			
		||||
public interface ${table.className}Convert {
 | 
			
		||||
 | 
			
		||||
    ${table.className}Convert INSTANCE = Mappers.getMapper(${table.className}Convert.class);
 | 
			
		||||
 | 
			
		||||
    ${table.className}DO convert(${sceneEnum.prefixClass}${table.className}CreateReqVO bean);
 | 
			
		||||
 | 
			
		||||
    ${table.className}DO convert(${sceneEnum.prefixClass}${table.className}UpdateReqVO bean);
 | 
			
		||||
 | 
			
		||||
    ${sceneEnum.prefixClass}${table.className}RespVO convert(${table.className}DO bean);
 | 
			
		||||
 | 
			
		||||
    List<${sceneEnum.prefixClass}${table.className}RespVO> convertList(List<${table.className}DO> list);
 | 
			
		||||
## 特殊:树表专属逻辑(树不需要分页接口)
 | 
			
		||||
#if ( $table.templateType != 2 )
 | 
			
		||||
    PageResult<${sceneEnum.prefixClass}${table.className}RespVO> convertPage(PageResult<${table.className}DO> page);
 | 
			
		||||
#end
 | 
			
		||||
 | 
			
		||||
    List<${sceneEnum.prefixClass}${table.className}ExcelVO> convertList02(List<${table.className}DO> list);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -57,14 +57,14 @@ public interface ${table.className}Mapper extends BaseMapperX<${table.className}
 | 
			
		||||
                .orderByDesc(${table.className}DO::getId));## 大多数情况下,id 倒序
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#end
 | 
			
		||||
#else
 | 
			
		||||
    default List<${table.className}DO> selectList(${sceneEnum.prefixClass}${table.className}ListReqVO reqVO) {
 | 
			
		||||
        return selectList(new LambdaQueryWrapperX<${table.className}DO>()
 | 
			
		||||
			#listCondition()
 | 
			
		||||
                .orderByDesc(${table.className}DO::getId));## 大多数情况下,id 倒序
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
#end
 | 
			
		||||
 | 
			
		||||
## 特殊:树表专属逻辑
 | 
			
		||||
#if ( $table.templateType == 2 )
 | 
			
		||||
 
 | 
			
		||||
@@ -24,14 +24,14 @@ public interface ${table.className}Service {
 | 
			
		||||
     * @param createReqVO 创建信息
 | 
			
		||||
     * @return 编号
 | 
			
		||||
     */
 | 
			
		||||
    ${primaryColumn.javaType} create${simpleClassName}(@Valid ${sceneEnum.prefixClass}${table.className}CreateReqVO createReqVO);
 | 
			
		||||
    ${primaryColumn.javaType} create${simpleClassName}(@Valid ${sceneEnum.prefixClass}${table.className}SaveReqVO createReqVO);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 更新${table.classComment}
 | 
			
		||||
     *
 | 
			
		||||
     * @param updateReqVO 更新信息
 | 
			
		||||
     */
 | 
			
		||||
    void update${simpleClassName}(@Valid ${sceneEnum.prefixClass}${table.className}UpdateReqVO updateReqVO);
 | 
			
		||||
    void update${simpleClassName}(@Valid ${sceneEnum.prefixClass}${table.className}SaveReqVO updateReqVO);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 删除${table.classComment}
 | 
			
		||||
@@ -57,8 +57,7 @@ public interface ${table.className}Service {
 | 
			
		||||
     * @return ${table.classComment}分页
 | 
			
		||||
     */
 | 
			
		||||
    PageResult<${table.className}DO> get${simpleClassName}Page(${sceneEnum.prefixClass}${table.className}PageReqVO pageReqVO);
 | 
			
		||||
 | 
			
		||||
#end
 | 
			
		||||
#else
 | 
			
		||||
    /**
 | 
			
		||||
     * 获得${table.classComment}列表
 | 
			
		||||
     *
 | 
			
		||||
@@ -66,6 +65,7 @@ public interface ${table.className}Service {
 | 
			
		||||
     * @return ${table.classComment}列表
 | 
			
		||||
     */
 | 
			
		||||
    List<${table.className}DO> get${simpleClassName}List(${sceneEnum.prefixClass}${table.className}ListReqVO listReqVO);
 | 
			
		||||
#end
 | 
			
		||||
 | 
			
		||||
## 特殊:主子表专属逻辑
 | 
			
		||||
#foreach ($subTable in $subTables)
 | 
			
		||||
 
 | 
			
		||||
@@ -14,8 +14,8 @@ import ${basePackage}.module.${subTable.moduleName}.dal.dataobject.${subTable.bu
 | 
			
		||||
#end
 | 
			
		||||
import ${PageResultClassName};
 | 
			
		||||
import ${PageParamClassName};
 | 
			
		||||
import ${BeanUtils};
 | 
			
		||||
 | 
			
		||||
import ${basePackage}.module.${table.moduleName}.convert.${table.businessName}.${table.className}Convert;
 | 
			
		||||
import ${basePackage}.module.${table.moduleName}.dal.mysql.${table.businessName}.${table.className}Mapper;
 | 
			
		||||
## 特殊:主子表专属逻辑
 | 
			
		||||
#foreach ($subTable in $subTables)
 | 
			
		||||
@@ -49,9 +49,9 @@ 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}CreateReqVO createReqVO) {
 | 
			
		||||
    public ${primaryColumn.javaType} create${simpleClassName}(${sceneEnum.prefixClass}${table.className}SaveReqVO createReqVO) {
 | 
			
		||||
        // 插入
 | 
			
		||||
        ${table.className}DO ${classNameVar} = ${table.className}Convert.INSTANCE.convert(createReqVO);
 | 
			
		||||
        ${table.className}DO ${classNameVar} = BeanUtils.toBean(createReqVO, ${table.className}DO.class);
 | 
			
		||||
        ${classNameVar}Mapper.insert(${classNameVar});
 | 
			
		||||
## 特殊:主子表专属逻辑(非 ERP 模式)
 | 
			
		||||
#if ( $subTables && $subTables.size() > 0 && $table.templateType != 11 )
 | 
			
		||||
@@ -78,11 +78,11 @@ 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}UpdateReqVO updateReqVO) {
 | 
			
		||||
    public void update${simpleClassName}(${sceneEnum.prefixClass}${table.className}SaveReqVO updateReqVO) {
 | 
			
		||||
        // 校验存在
 | 
			
		||||
        validate${simpleClassName}Exists(updateReqVO.getId());
 | 
			
		||||
        // 更新
 | 
			
		||||
        ${table.className}DO updateObj = ${table.className}Convert.INSTANCE.convert(updateReqVO);
 | 
			
		||||
        ${table.className}DO updateObj = BeanUtils.toBean(updateReqVO, ${table.className}DO.class);
 | 
			
		||||
        ${classNameVar}Mapper.updateById(updateObj);
 | 
			
		||||
## 特殊:主子表专属逻辑(非 ERP 模式)
 | 
			
		||||
#if ( $subTables && $subTables.size() > 0 && $table.templateType != 11)
 | 
			
		||||
@@ -151,12 +151,12 @@ public class ${table.className}ServiceImpl implements ${table.className}Service
 | 
			
		||||
    public PageResult<${table.className}DO> get${simpleClassName}Page(${sceneEnum.prefixClass}${table.className}PageReqVO pageReqVO) {
 | 
			
		||||
        return ${classNameVar}Mapper.selectPage(pageReqVO);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#end
 | 
			
		||||
#else
 | 
			
		||||
    @Override
 | 
			
		||||
    public List<${table.className}DO> get${simpleClassName}List(${sceneEnum.prefixClass}${table.className}ListReqVO listReqVO) {
 | 
			
		||||
        return ${classNameVar}Mapper.selectList(listReqVO);
 | 
			
		||||
    }
 | 
			
		||||
#end
 | 
			
		||||
 | 
			
		||||
## 特殊:主子表专属逻辑
 | 
			
		||||
#foreach ($subTable in $subTables)
 | 
			
		||||
 
 | 
			
		||||
@@ -77,15 +77,15 @@ public class ${table.className}ServiceImplTest extends BaseDbUnitTest {
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testCreate${simpleClassName}_success() {
 | 
			
		||||
        // 准备参数
 | 
			
		||||
        ${sceneEnum.prefixClass}${table.className}CreateReqVO reqVO = randomPojo(${sceneEnum.prefixClass}${table.className}CreateReqVO.class);
 | 
			
		||||
        ${sceneEnum.prefixClass}${table.className}SaveReqVO createReqVO = randomPojo(${sceneEnum.prefixClass}${table.className}SaveReqVO.class).setId(null);
 | 
			
		||||
 | 
			
		||||
        // 调用
 | 
			
		||||
        ${primaryColumn.javaType} ${classNameVar}Id = ${classNameVar}Service.create${simpleClassName}(reqVO);
 | 
			
		||||
        ${primaryColumn.javaType} ${classNameVar}Id = ${classNameVar}Service.create${simpleClassName}(createReqVO);
 | 
			
		||||
        // 断言
 | 
			
		||||
        assertNotNull(${classNameVar}Id);
 | 
			
		||||
        // 校验记录的属性是否正确
 | 
			
		||||
        ${table.className}DO ${classNameVar} = ${classNameVar}Mapper.selectById(${classNameVar}Id);
 | 
			
		||||
        assertPojoEquals(reqVO, ${classNameVar});
 | 
			
		||||
        assertPojoEquals(createReqVO, ${classNameVar});
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
@@ -94,24 +94,24 @@ public class ${table.className}ServiceImplTest extends BaseDbUnitTest {
 | 
			
		||||
        ${table.className}DO db${simpleClassName} = randomPojo(${table.className}DO.class);
 | 
			
		||||
        ${classNameVar}Mapper.insert(db${simpleClassName});// @Sql: 先插入出一条存在的数据
 | 
			
		||||
        // 准备参数
 | 
			
		||||
        ${sceneEnum.prefixClass}${table.className}UpdateReqVO reqVO = randomPojo(${sceneEnum.prefixClass}${table.className}UpdateReqVO.class, o -> {
 | 
			
		||||
        ${sceneEnum.prefixClass}${table.className}SaveReqVO updateReqVO = randomPojo(${sceneEnum.prefixClass}${table.className}SaveReqVO.class, o -> {
 | 
			
		||||
            o.setId(db${simpleClassName}.getId()); // 设置更新的 ID
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        // 调用
 | 
			
		||||
        ${classNameVar}Service.update${simpleClassName}(reqVO);
 | 
			
		||||
        ${classNameVar}Service.update${simpleClassName}(updateReqVO);
 | 
			
		||||
        // 校验是否更新正确
 | 
			
		||||
        ${table.className}DO ${classNameVar} = ${classNameVar}Mapper.selectById(reqVO.getId()); // 获取最新的
 | 
			
		||||
        assertPojoEquals(reqVO, ${classNameVar});
 | 
			
		||||
        ${table.className}DO ${classNameVar} = ${classNameVar}Mapper.selectById(updateReqVO.getId()); // 获取最新的
 | 
			
		||||
        assertPojoEquals(updateReqVO, ${classNameVar});
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testUpdate${simpleClassName}_notExists() {
 | 
			
		||||
        // 准备参数
 | 
			
		||||
        ${sceneEnum.prefixClass}${table.className}UpdateReqVO reqVO = randomPojo(${sceneEnum.prefixClass}${table.className}UpdateReqVO.class);
 | 
			
		||||
        ${sceneEnum.prefixClass}${table.className}SaveReqVO updateReqVO = randomPojo(${sceneEnum.prefixClass}${table.className}SaveReqVO.class);
 | 
			
		||||
 | 
			
		||||
        // 调用, 并断言异常
 | 
			
		||||
        assertServiceException(() -> ${classNameVar}Service.update${simpleClassName}(reqVO), ${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS);
 | 
			
		||||
        assertServiceException(() -> ${classNameVar}Service.update${simpleClassName}(updateReqVO), ${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
@@ -151,8 +151,7 @@ public class ${table.className}ServiceImplTest extends BaseDbUnitTest {
 | 
			
		||||
       assertEquals(1, pageResult.getList().size());
 | 
			
		||||
       assertPojoEquals(db${simpleClassName}, pageResult.getList().get(0));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#end
 | 
			
		||||
#else
 | 
			
		||||
    @Test
 | 
			
		||||
    @Disabled  // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
 | 
			
		||||
    public void testGet${simpleClassName}List() {
 | 
			
		||||
@@ -164,5 +163,6 @@ public class ${table.className}ServiceImplTest extends BaseDbUnitTest {
 | 
			
		||||
       assertEquals(1, list.size());
 | 
			
		||||
       assertPojoEquals(db${simpleClassName}, list.get(0));
 | 
			
		||||
    }
 | 
			
		||||
#end
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -1,34 +1,36 @@
 | 
			
		||||
-- 将该建表 SQL 语句,添加到 yudao-module-${table.moduleName}-biz 模块的 test/resources/sql/create_tables.sql 文件里
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "${table.tableName.toLowerCase()}" (
 | 
			
		||||
#foreach ($column in $columns)
 | 
			
		||||
#if (${column.javaType} == 'Long')
 | 
			
		||||
    #set ($dataType='bigint')
 | 
			
		||||
#elseif (${column.javaType} == 'Integer')
 | 
			
		||||
    #set ($dataType='int')
 | 
			
		||||
#elseif (${column.javaType} == 'Boolean')
 | 
			
		||||
    #set ($dataType='bit')
 | 
			
		||||
#elseif (${column.javaType} == 'Date')
 | 
			
		||||
    #set ($dataType='datetime')
 | 
			
		||||
#else
 | 
			
		||||
    #set ($dataType='varchar')
 | 
			
		||||
#end
 | 
			
		||||
    #if (${column.javaType} == 'Long')
 | 
			
		||||
        #set ($dataType='bigint')
 | 
			
		||||
    #elseif (${column.javaType} == 'Integer')
 | 
			
		||||
        #set ($dataType='int')
 | 
			
		||||
    #elseif (${column.javaType} == 'Boolean')
 | 
			
		||||
        #set ($dataType='bit')
 | 
			
		||||
    #elseif (${column.javaType} == 'Date')
 | 
			
		||||
        #set ($dataType='datetime')
 | 
			
		||||
    #else
 | 
			
		||||
        #set ($dataType='varchar')
 | 
			
		||||
    #end
 | 
			
		||||
    #if (${column.primaryKey})##处理主键
 | 
			
		||||
    "${column.javaField}"#if (${column.javaType} == 'String') ${dataType} NOT NULL#else ${dataType} NOT NULL GENERATED BY DEFAULT AS IDENTITY#end,
 | 
			
		||||
    #else
 | 
			
		||||
    #if (${column.columnName} == 'create_time')
 | 
			
		||||
    "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
 | 
			
		||||
    #elseif (${column.columnName} == 'update_time')
 | 
			
		||||
    "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 | 
			
		||||
    #elseif (${column.columnName} == 'creator' || ${column.columnName} == 'updater')
 | 
			
		||||
    "${column.columnName}" ${dataType} DEFAULT '',
 | 
			
		||||
    #elseif (${column.columnName} == 'deleted')
 | 
			
		||||
    "deleted" bit NOT NULL DEFAULT FALSE,
 | 
			
		||||
    #else
 | 
			
		||||
    "${column.columnName.toLowerCase()}" ${dataType}#if (${column.nullable} == false) NOT NULL#end,
 | 
			
		||||
    #end
 | 
			
		||||
        #if (${column.columnName} == 'create_time')
 | 
			
		||||
        "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
 | 
			
		||||
        #elseif (${column.columnName} == 'update_time')
 | 
			
		||||
        "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 | 
			
		||||
        #elseif (${column.columnName} == 'creator' || ${column.columnName} == 'updater')
 | 
			
		||||
        "${column.columnName}" ${dataType} DEFAULT '',
 | 
			
		||||
        #elseif (${column.columnName} == 'deleted')
 | 
			
		||||
        "deleted" bit NOT NULL DEFAULT FALSE,
 | 
			
		||||
        #elseif (${column.columnName} == 'tenantId')
 | 
			
		||||
        "tenant_id" bigint NOT NULL DEFAULT 0,
 | 
			
		||||
        #else
 | 
			
		||||
        "${column.columnName.toLowerCase()}" ${dataType}#if (${column.nullable} == false) NOT NULL#end,
 | 
			
		||||
        #end
 | 
			
		||||
    #end
 | 
			
		||||
#end
 | 
			
		||||
    PRIMARY KEY ("${primaryColumn.columnName.toLowerCase()}")
 | 
			
		||||
PRIMARY KEY ("${primaryColumn.columnName.toLowerCase()}")
 | 
			
		||||
) COMMENT '${table.tableComment}';
 | 
			
		||||
 | 
			
		||||
-- 将该删表 SQL 语句,添加到 yudao-module-${table.moduleName}-biz 模块的 test/resources/sql/clean.sql 文件里
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user