소스 검색

整理 vm 模板
提交 test 生成的示例

YunaiV 4 년 전
부모
커밋
5442f6522e
25개의 변경된 파일412개의 추가작업 그리고 246개의 파일을 삭제
  1. 17 30
      ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java
  2. 0 32
      ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTable.java
  3. 0 61
      ruoyi-generator/src/main/resources/vm/java/service.java.vm
  4. 0 95
      ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm
  5. 0 1
      src/main/java/cn/iocoder/dashboard/modules/infra/convert/package-info.java
  6. 1 0
      src/main/java/cn/iocoder/dashboard/modules/system/controller/test/package-info.java
  7. 30 0
      src/main/java/cn/iocoder/dashboard/modules/system/controller/test/vo/SysTestDemoBaseVO.java
  8. 14 0
      src/main/java/cn/iocoder/dashboard/modules/system/controller/test/vo/SysTestDemoCreateReqVO.java
  9. 41 0
      src/main/java/cn/iocoder/dashboard/modules/system/controller/test/vo/SysTestDemoPageReqVO.java
  10. 19 0
      src/main/java/cn/iocoder/dashboard/modules/system/controller/test/vo/SysTestDemoRespVO.java
  11. 21 0
      src/main/java/cn/iocoder/dashboard/modules/system/controller/test/vo/SysTestDemoUpdateReqVO.java
  12. 28 0
      src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dao/test/SysTestDemoMapper.java
  13. 44 0
      src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dataobject/test/SysTestDemoDO.java
  14. 66 0
      src/main/java/cn/iocoder/dashboard/modules/system/service/test/SysTestDemoService.java
  15. 46 10
      src/main/java/cn/iocoder/dashboard/modules/tool/service/codegen/impl/ToolCodegenBuilder.java
  16. 16 3
      src/main/java/cn/iocoder/dashboard/modules/tool/service/codegen/impl/ToolCodegenEngine.java
  17. 2 2
      src/main/resources/codegen/controller/vo/updateReqVO.vm
  18. 22 0
      src/main/resources/codegen/convert/convert.vm
  19. 1 1
      src/main/resources/codegen/dal/do.vm
  20. 6 5
      src/main/resources/codegen/dal/mapper.vm
  21. 2 0
      src/main/resources/codegen/enums/errorcode.vm
  22. 4 4
      src/main/resources/codegen/service/service.vm
  23. 30 0
      src/main/resources/codegen/service/serviceImpl.vm
  24. 1 1
      src/test/java/cn/iocoder/dashboard/modules/tool/service/codegen/impl/ToolCodegenEngineTest.java
  25. 1 1
      src/test/java/cn/iocoder/dashboard/modules/tool/service/codegen/impl/ToolCodegenServiceImplTest.java

+ 17 - 30
ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java

@@ -5,6 +5,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import javax.servlet.http.HttpServletResponse;
+
 import org.apache.commons.io.IOUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -30,13 +31,12 @@ import com.ruoyi.generator.service.IGenTableService;
 
 /**
  * 代码生成 操作处理
- * 
+ *
  * @author ruoyi
  */
 @RestController
 @RequestMapping("/tool/gen")
-public class GenController extends BaseController
-{
+public class GenController extends BaseController {
     @Autowired
     private IGenTableService genTableService;
 
@@ -48,8 +48,7 @@ public class GenController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('tool:gen:list')")
     @GetMapping("/list")
-    public TableDataInfo genList(GenTable genTable)
-    {
+    public TableDataInfo genList(GenTable genTable) {
         startPage();
         List<GenTable> list = genTableService.selectGenTableList(genTable);
         return getDataTable(list);
@@ -60,8 +59,7 @@ public class GenController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('tool:gen:query')")
     @GetMapping(value = "/{talbleId}")
-    public AjaxResult getInfo(@PathVariable Long talbleId)
-    {
+    public AjaxResult getInfo(@PathVariable Long talbleId) {
         GenTable table = genTableService.selectGenTableById(talbleId);
         List<GenTableColumn> list = genTableColumnService.selectGenTableColumnListByTableId(talbleId);
         Map<String, Object> map = new HashMap<String, Object>();
@@ -75,8 +73,7 @@ public class GenController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('tool:gen:list')")
     @GetMapping("/db/list")
-    public TableDataInfo dataList(GenTable genTable)
-    {
+    public TableDataInfo dataList(GenTable genTable) {
         startPage();
         List<GenTable> list = genTableService.selectDbTableList(genTable);
         return getDataTable(list);
@@ -87,8 +84,7 @@ public class GenController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('tool:gen:list')")
     @GetMapping(value = "/column/{talbleId}")
-    public TableDataInfo columnList(Long tableId)
-    {
+    public TableDataInfo columnList(Long tableId) {
         TableDataInfo dataInfo = new TableDataInfo();
         List<GenTableColumn> list = genTableColumnService.selectGenTableColumnListByTableId(tableId);
         dataInfo.setRows(list);
@@ -102,8 +98,7 @@ public class GenController extends BaseController
     @PreAuthorize("@ss.hasPermi('tool:gen:list')")
     @Log(title = "代码生成", businessType = BusinessType.IMPORT)
     @PostMapping("/importTable")
-    public AjaxResult importTableSave(String tables)
-    {
+    public AjaxResult importTableSave(String tables) {
         String[] tableNames = Convert.toStrArray(tables);
         // 查询表信息
         List<GenTable> tableList = genTableService.selectDbTableListByNames(tableNames);
@@ -117,8 +112,7 @@ public class GenController extends BaseController
     @PreAuthorize("@ss.hasPermi('tool:gen:edit')")
     @Log(title = "代码生成", businessType = BusinessType.UPDATE)
     @PutMapping
-    public AjaxResult editSave(@Validated @RequestBody GenTable genTable)
-    {
+    public AjaxResult editSave(@Validated @RequestBody GenTable genTable) {
         genTableService.validateEdit(genTable);
         genTableService.updateGenTable(genTable);
         return AjaxResult.success();
@@ -130,8 +124,7 @@ public class GenController extends BaseController
     @PreAuthorize("@ss.hasPermi('tool:gen:remove')")
     @Log(title = "代码生成", businessType = BusinessType.DELETE)
     @DeleteMapping("/{tableIds}")
-    public AjaxResult remove(@PathVariable Long[] tableIds)
-    {
+    public AjaxResult remove(@PathVariable Long[] tableIds) {
         genTableService.deleteGenTableByIds(tableIds);
         return AjaxResult.success();
     }
@@ -141,8 +134,7 @@ public class GenController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('tool:gen:preview')")
     @GetMapping("/preview/{tableId}")
-    public AjaxResult preview(@PathVariable("tableId") Long tableId) throws IOException
-    {
+    public AjaxResult preview(@PathVariable("tableId") Long tableId) throws IOException {
         Map<String, String> dataMap = genTableService.previewCode(tableId);
         return AjaxResult.success(dataMap);
     }
@@ -153,8 +145,7 @@ public class GenController extends BaseController
     @PreAuthorize("@ss.hasPermi('tool:gen:code')")
     @Log(title = "代码生成", businessType = BusinessType.GENCODE)
     @GetMapping("/download/{tableName}")
-    public void download(HttpServletResponse response, @PathVariable("tableName") String tableName) throws IOException
-    {
+    public void download(HttpServletResponse response, @PathVariable("tableName") String tableName) throws IOException {
         byte[] data = genTableService.downloadCode(tableName);
         genCode(response, data);
     }
@@ -165,8 +156,7 @@ public class GenController extends BaseController
     @PreAuthorize("@ss.hasPermi('tool:gen:code')")
     @Log(title = "代码生成", businessType = BusinessType.GENCODE)
     @GetMapping("/genCode/{tableName}")
-    public AjaxResult genCode(@PathVariable("tableName") String tableName)
-    {
+    public AjaxResult genCode(@PathVariable("tableName") String tableName) {
         genTableService.generatorCode(tableName);
         return AjaxResult.success();
     }
@@ -177,8 +167,7 @@ public class GenController extends BaseController
     @PreAuthorize("@ss.hasPermi('tool:gen:edit')")
     @Log(title = "代码生成", businessType = BusinessType.UPDATE)
     @GetMapping("/synchDb/{tableName}")
-    public AjaxResult synchDb(@PathVariable("tableName") String tableName)
-    {
+    public AjaxResult synchDb(@PathVariable("tableName") String tableName) {
         genTableService.synchDb(tableName);
         return AjaxResult.success();
     }
@@ -189,8 +178,7 @@ public class GenController extends BaseController
     @PreAuthorize("@ss.hasPermi('tool:gen:code')")
     @Log(title = "代码生成", businessType = BusinessType.GENCODE)
     @GetMapping("/batchGenCode")
-    public void batchGenCode(HttpServletResponse response, String tables) throws IOException
-    {
+    public void batchGenCode(HttpServletResponse response, String tables) throws IOException {
         String[] tableNames = Convert.toStrArray(tables);
         byte[] data = genTableService.downloadCode(tableNames);
         genCode(response, data);
@@ -199,8 +187,7 @@ public class GenController extends BaseController
     /**
      * 生成zip文件
      */
-    private void genCode(HttpServletResponse response, byte[] data) throws IOException
-    {
+    private void genCode(HttpServletResponse response, byte[] data) throws IOException {
         response.reset();
         response.addHeader("Access-Control-Allow-Origin", "*");
         response.addHeader("Access-Control-Expose-Headers", "Content-Disposition");
@@ -209,4 +196,4 @@ public class GenController extends BaseController
         response.setContentType("application/octet-stream; charset=UTF-8");
         IOUtils.write(data, response.getOutputStream());
     }
-}
+}

+ 0 - 32
ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTable.java

@@ -22,11 +22,6 @@ public class GenTable extends BaseEntity {
     @NotBlank(message = "生成包路径不能为空")
     private String packageName;
 
-    /**
-     * 主键信息
-     */
-    private GenTableColumn pkColumn;
-
     /**
      * 其它生成选项
      */
@@ -57,31 +52,4 @@ public class GenTable extends BaseEntity {
      */
     private String parentMenuName;
 
-    public boolean isTree() {
-        return isTree(this.tplCategory);
-    }
-
-    public static boolean isTree(String tplCategory) {
-        return tplCategory != null && StringUtils.equals(GenConstants.TPL_TREE, tplCategory);
-    }
-
-    public boolean isCrud() {
-        return isCrud(this.tplCategory);
-    }
-
-    public static boolean isCrud(String tplCategory) {
-        return tplCategory != null && StringUtils.equals(GenConstants.TPL_CRUD, tplCategory);
-    }
-
-    public boolean isSuperColumn(String javaField) {
-        return isSuperColumn(this.tplCategory, javaField);
-    }
-
-    public static boolean isSuperColumn(String tplCategory, String javaField) {
-        if (isTree(tplCategory)) {
-            return StringUtils.equalsAnyIgnoreCase(javaField,
-                    ArrayUtils.addAll(GenConstants.TREE_ENTITY, GenConstants.BASE_ENTITY));
-        }
-        return StringUtils.equalsAnyIgnoreCase(javaField, GenConstants.BASE_ENTITY);
-    }
 }

+ 0 - 61
ruoyi-generator/src/main/resources/vm/java/service.java.vm

@@ -1,61 +0,0 @@
-package ${packageName}.service;
-
-import java.util.List;
-import ${packageName}.domain.${ClassName};
-
-/**
- * ${functionName}Service接口
- * 
- * @author ${author}
- * @date ${datetime}
- */
-public interface I${ClassName}Service 
-{
-    /**
-     * 查询${functionName}
-     * 
-     * @param ${pkColumn.javaField} ${functionName}ID
-     * @return ${functionName}
-     */
-    public ${ClassName} select${ClassName}ById(${pkColumn.javaType} ${pkColumn.javaField});
-
-    /**
-     * 查询${functionName}列表
-     * 
-     * @param ${className} ${functionName}
-     * @return ${functionName}集合
-     */
-    public List<${ClassName}> select${ClassName}List(${ClassName} ${className});
-
-    /**
-     * 新增${functionName}
-     * 
-     * @param ${className} ${functionName}
-     * @return 结果
-     */
-    public int insert${ClassName}(${ClassName} ${className});
-
-    /**
-     * 修改${functionName}
-     * 
-     * @param ${className} ${functionName}
-     * @return 结果
-     */
-    public int update${ClassName}(${ClassName} ${className});
-
-    /**
-     * 批量删除${functionName}
-     * 
-     * @param ${pkColumn.javaField}s 需要删除的${functionName}ID
-     * @return 结果
-     */
-    public int delete${ClassName}ByIds(${pkColumn.javaType}[] ${pkColumn.javaField}s);
-
-    /**
-     * 删除${functionName}信息
-     * 
-     * @param ${pkColumn.javaField} ${functionName}ID
-     * @return 结果
-     */
-    public int delete${ClassName}ById(${pkColumn.javaType} ${pkColumn.javaField});
-}

+ 0 - 95
ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm

@@ -1,95 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="${packageName}.mapper.${ClassName}Mapper">
-    
-    <resultMap type="${ClassName}" id="${ClassName}Result">
-#foreach ($column in $columns)
-        <result property="${column.javaField}"    column="${column.columnName}"    />
-#end
-    </resultMap>
-
-    <sql id="select${ClassName}Vo">
-        select#foreach($column in $columns) $column.columnName#if($velocityCount != $columns.size()),#end#end from ${tableName}
-    </sql>
-
-    <select id="select${ClassName}List" parameterType="${ClassName}" resultMap="${ClassName}Result">
-        <include refid="select${ClassName}Vo"/>
-        <where>  
-#foreach($column in $columns)
-#set($queryType=$column.queryType)
-#set($javaField=$column.javaField)
-#set($javaType=$column.javaType)
-#set($columnName=$column.columnName)
-#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
-#if($column.query)
-#if($column.queryType == "EQ")
-            <if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName = #{$javaField}</if>
-#elseif($queryType == "NE")
-            <if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName != #{$javaField}</if>
-#elseif($queryType == "GT")
-            <if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName &gt; #{$javaField}</if>
-#elseif($queryType == "GTE")
-            <if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName &gt;= #{$javaField}</if>
-#elseif($queryType == "LT")
-            <if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName &lt; #{$javaField}</if>
-#elseif($queryType == "LTE")
-            <if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName &lt;= #{$javaField}</if>
-#elseif($queryType == "LIKE")
-            <if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName like concat('%', #{$javaField}, '%')</if>
-#elseif($queryType == "BETWEEN")
-            <if test="params.begin$AttrName != null and params.begin$AttrName != '' and params.end$AttrName != null and params.end$AttrName != ''"> and $columnName between #{params.begin$AttrName} and #{params.end$AttrName}</if>
-#end
-#end
-#end
-        </where>
-    </select>
-    
-    <select id="select${ClassName}ById" parameterType="${pkColumn.javaType}" resultMap="${ClassName}Result">
-        <include refid="select${ClassName}Vo"/>
-        where ${pkColumn.columnName} = #{${pkColumn.javaField}}
-    </select>
-        
-    <insert id="insert${ClassName}" parameterType="${ClassName}"#if($pkColumn.increment) useGeneratedKeys="true" keyProperty="$pkColumn.javaField"#end>
-        insert into ${tableName}
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-#foreach($column in $columns)
-#if($column.columnName != $pkColumn.columnName || !$pkColumn.increment)
-            <if test="$column.javaField != null#if($column.javaType == 'String' && $column.required) and $column.javaField != ''#end">$column.columnName,</if>
-#end
-#end
-         </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-#foreach($column in $columns)
-#if($column.columnName != $pkColumn.columnName || !$pkColumn.increment)
-            <if test="$column.javaField != null#if($column.javaType == 'String' && $column.required) and $column.javaField != ''#end">#{$column.javaField},</if>
-#end
-#end
-         </trim>
-    </insert>
-
-    <update id="update${ClassName}" parameterType="${ClassName}">
-        update ${tableName}
-        <trim prefix="SET" suffixOverrides=",">
-#foreach($column in $columns)
-#if($column.columnName != $pkColumn.columnName)
-            <if test="$column.javaField != null#if($column.javaType == 'String' && $column.required) and $column.javaField != ''#end">$column.columnName = #{$column.javaField},</if>
-#end
-#end
-        </trim>
-        where ${pkColumn.columnName} = #{${pkColumn.javaField}}
-    </update>
-
-    <delete id="delete${ClassName}ById" parameterType="${pkColumn.javaType}">
-        delete from ${tableName} where ${pkColumn.columnName} = #{${pkColumn.javaField}}
-    </delete>
-
-    <delete id="delete${ClassName}ByIds" parameterType="String">
-        delete from ${tableName} where ${pkColumn.columnName} in 
-        <foreach item="${pkColumn.javaField}" collection="array" open="(" separator="," close=")">
-            #{${pkColumn.javaField}}
-        </foreach>
-    </delete>
-    
-</mapper>

+ 0 - 1
src/main/java/cn/iocoder/dashboard/modules/infra/convert/package-info.java

@@ -1 +0,0 @@
-package cn.iocoder.dashboard.modules.infra.convert;

+ 1 - 0
src/main/java/cn/iocoder/dashboard/modules/system/controller/test/package-info.java

@@ -0,0 +1 @@
+package cn.iocoder.dashboard.modules.system.controller.test;

+ 30 - 0
src/main/java/cn/iocoder/dashboard/modules/system/controller/test/vo/SysTestDemoBaseVO.java

@@ -0,0 +1,30 @@
+package cn.iocoder.dashboard.modules.system.controller.test.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+* 字典类型 Base VO,提供给添加、修改、详细的子 VO 使用
+* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
+*/
+@Data
+public class SysTestDemoBaseVO {
+
+    @ApiModelProperty(value = "字典名称", required = true, example = "性别额")
+    @NotNull(message = "字典名称不能为空")
+    private String name;
+
+    @ApiModelProperty(value = "字典类型", required = true, example = "sys_sex")
+    @NotNull(message = "字典类型不能为空")
+    private String dictType;
+
+    @ApiModelProperty(value = "状态", required = true, example = "1")
+    @NotNull(message = "状态不能为空")
+    private Integer status;
+
+    @ApiModelProperty(value = "备注", example = "我是备注")
+    private String remark;
+
+}

+ 14 - 0
src/main/java/cn/iocoder/dashboard/modules/system/controller/test/vo/SysTestDemoCreateReqVO.java

@@ -0,0 +1,14 @@
+package cn.iocoder.dashboard.modules.system.controller.test.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+@ApiModel("字典类型创建 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class SysTestDemoCreateReqVO extends SysTestDemoBaseVO {
+
+}

+ 41 - 0
src/main/java/cn/iocoder/dashboard/modules/system/controller/test/vo/SysTestDemoPageReqVO.java

@@ -0,0 +1,41 @@
+package cn.iocoder.dashboard.modules.system.controller.test.vo;
+
+import cn.iocoder.dashboard.common.pojo.PageParam;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+import static cn.iocoder.dashboard.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@ApiModel("字典类型分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class SysTestDemoPageReqVO extends PageParam {
+
+    @ApiModelProperty(value = "字典名称", example = "性别额")
+    private String name;
+
+    @ApiModelProperty(value = "字典类型", example = "sys_sex")
+    private String dictType;
+
+    @ApiModelProperty(value = "状态", example = "1")
+    private Integer status;
+
+    @ApiModelProperty(value = "备注", example = "我是备注")
+    private String remark;
+
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    @ApiModelProperty(value = "开始创建时间")
+    private Date beginCreateTime;
+
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    @ApiModelProperty(value = "结束创建时间")
+    private Date endCreateTime;
+
+}

+ 19 - 0
src/main/java/cn/iocoder/dashboard/modules/system/controller/test/vo/SysTestDemoRespVO.java

@@ -0,0 +1,19 @@
+package cn.iocoder.dashboard.modules.system.controller.test.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.annotations.*;
+
+@ApiModel("字典类型 Response VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class SysTestDemoRespVO extends SysTestDemoBaseVO {
+
+    @ApiModelProperty(value = "字典主键", required = true, example = "1")
+    private Long id;
+
+    @ApiModelProperty(value = "创建时间", required = true)
+    private Date createTime;
+
+}

+ 21 - 0
src/main/java/cn/iocoder/dashboard/modules/system/controller/test/vo/SysTestDemoUpdateReqVO.java

@@ -0,0 +1,21 @@
+package cn.iocoder.dashboard.modules.system.controller.test.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+import javax.validation.constraints.NotNull;
+
+@ApiModel("字典类型更新 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class SysTestDemoUpdateReqVO extends SysTestDemoBaseVO {
+
+    @ApiModelProperty(value = "字典主键", required = true, example = "1")
+    @NotNull(message = "字典主键不能为空")
+    private Long id;
+
+}

+ 28 - 0
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dao/test/SysTestDemoMapper.java

@@ -0,0 +1,28 @@
+package cn.iocoder.dashboard.modules.system.dal.mysql.dao.test;
+
+import cn.iocoder.dashboard.common.pojo.PageResult;
+import cn.iocoder.dashboard.framework.mybatis.core.query.QueryWrapperX;
+import cn.iocoder.dashboard.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.test.SysTestDemoDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.iocoder.dashboard.modules.system.controller.test.vo.SysTestDemoPageReqVO;
+
+/**
+* 字典类型 Mapper
+*
+* @author 芋艿
+*/
+@Mapper
+public interface SysTestDemoMapper extends BaseMapperX<SysTestDemoDO> {
+
+    default PageResult<SysTestDemoDO> selectPage(SysTestDemoPageReqVO reqVO) {
+        return selectPage(reqVO, new QueryWrapperX<SysTestDemoDO>()
+            .likeIfPresent("name", reqVO.getName())
+            .eqIfPresent("dict_type", reqVO.getDictType())
+            .eqIfPresent("status", reqVO.getStatus())
+            .eqIfPresent("remark", reqVO.getRemark())
+            .betweenIfPresent("create_time", reqVO.getBeginCreateTime(), reqVO.getEndCreateTime())
+        );
+    }
+
+}

+ 44 - 0
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dataobject/test/SysTestDemoDO.java

@@ -0,0 +1,44 @@
+package cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.test;
+
+import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+/**
+* 字典类型 DO
+*
+* @author 芋艿
+*/
+@TableName("sys_test_demo")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SysTestDemoDO extends BaseDO {
+
+    /**
+    * 字典主键
+    */
+    @TableId
+    private Long id;
+    /**
+    * 字典名称
+    */
+    private String name;
+    /**
+    * 字典类型
+    */
+    private String dictType;
+    /**
+    * 状态
+    */
+    private Integer status;
+    /**
+    * 备注
+    */
+    private String remark;
+
+}

+ 66 - 0
src/main/java/cn/iocoder/dashboard/modules/system/service/test/SysTestDemoService.java

@@ -0,0 +1,66 @@
+package cn.iocoder.dashboard.modules.system.service.test;
+
+import cn.iocoder.dashboard.common.pojo.PageResult;
+import cn.iocoder.dashboard.modules.system.controller.test.vo.SysTestDemoCreateReqVO;
+import cn.iocoder.dashboard.modules.system.controller.test.vo.SysTestDemoPageReqVO;
+import cn.iocoder.dashboard.modules.system.controller.test.vo.SysTestDemoUpdateReqVO;
+import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.test.SysTestDemoDO;
+
+import javax.validation.Valid;
+import java.util.Collection;
+import java.util.List;
+
+/**
+* 字典类型 Service 接口
+*
+* @author 芋艿
+*/
+public interface SysTestDemoService {
+
+    /**
+     * 创建字典类型
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createTestDemo(@Valid SysTestDemoCreateReqVO createReqVO);
+
+    /**
+     * 更新字典类型
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateTestDemo(@Valid SysTestDemoUpdateReqVO updateReqVO);
+
+    /**
+     * 删除字典类型
+     *
+     * @param id 编号
+     */
+    void deleteTestDemo(Long id);
+
+    /**
+     * 获得字典类型
+     *
+     * @param id 编号
+     * @return 字典类型
+     */
+    SysTestDemoDO getTestDemo(Long id);
+
+    /**
+     * 获得字典类型列表
+     *
+     * @param ids 编号
+     * @return 字典类型列表
+     */
+    List<SysTestDemoDO> getTestDemoList(Collection<Long> ids);
+
+    /**
+     * 获得字典类型分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 字典类型分页
+     */
+	PageResult<SysTestDemoDO> getTestDemoPage(SysTestDemoPageReqVO pageReqVO);
+
+}

+ 46 - 10
src/main/java/cn/iocoder/dashboard/modules/tool/service/codegen/impl/ToolCodegenBuilder.java

@@ -17,6 +17,8 @@ import org.springframework.stereotype.Component;
 import java.math.BigDecimal;
 import java.util.*;
 
+import static cn.hutool.core.text.CharSequenceUtil.*;
+
 /**
  * 代码生成器的 Builder,负责:
  * 1. 将数据库的表 {@link ToolInformationSchemaTableDO} 定义,构建成 {@link ToolCodegenTableDO}
@@ -25,6 +27,18 @@ import java.util.*;
 @Component
 public class ToolCodegenBuilder {
 
+    /**
+     * Module 名字的映射 TODO 后续梳理到配置类
+     *
+     * key:模块的完整名
+     * value:模块的缩写名
+     */
+    private static final Map<String, String> moduleNames = MapUtil.<String, String>builder()
+            .put("system", "sys")
+            .put("infra", "inf")
+            .put("tool", "tool")
+            .build();
+
     /**
      * 字段名与 {@link ToolCodegenColumnListConditionEnum} 的默认映射
      * 注意,字段的匹配以后缀的方式
@@ -93,9 +107,9 @@ public class ToolCodegenBuilder {
         CREATE_OPERATION_EXCLUDE_COLUMN.addAll(BASE_DO_FIELDS);
         UPDATE_OPERATION_EXCLUDE_COLUMN.addAll(BASE_DO_FIELDS);
         LIST_OPERATION_EXCLUDE_COLUMN.addAll(BASE_DO_FIELDS);
-        LIST_OPERATION_EXCLUDE_COLUMN.remove("create_time"); // 创建时间,还是可能需要传递的
+        LIST_OPERATION_EXCLUDE_COLUMN.remove("createTime"); // 创建时间,还是可能需要传递的
         LIST_OPERATION_RESULT_EXCLUDE_COLUMN.addAll(BASE_DO_FIELDS);
-        LIST_OPERATION_RESULT_EXCLUDE_COLUMN.remove("create_time"); // 创建时间,还是需要返回的
+        LIST_OPERATION_RESULT_EXCLUDE_COLUMN.remove("createTime"); // 创建时间,还是需要返回的
     }
 
     public ToolCodegenTableDO buildTable(ToolInformationSchemaTableDO schemaTable) {
@@ -110,13 +124,12 @@ public class ToolCodegenBuilder {
      * @param table 表定义
      */
     private void initTableDefault(ToolCodegenTableDO table) {
-        table.setModuleName(StrUtil.subBefore(table.getTableName(),
-                '_', false)); // 第一个 _ 前缀的前面,作为 module 名字
-        table.setBusinessName(StrUtil.subAfter(table.getTableName(),
-                '_', false)); // 第一个 _ 前缀的后面,作为 module 名字
-        table.setBusinessName(StrUtil.toCamelCase(table.getBusinessName())); // 可能存在多个 _ 的情况,转换成驼峰
-        table.setClassName(StrUtil.upperFirst(StrUtil.toCamelCase(table.getTableName()))); // 驼峰 + 首字母大写
-        table.setClassComment(StrUtil.subBefore(table.getTableComment(), // 去除结尾的表,作为类描述
+        table.setModuleName(getFullModuleName(StrUtil.subBefore(table.getTableName(),
+                '_', false))); // 第一个 _ 前缀的前面,作为 module 名字
+        table.setBusinessName(toCamelCase(subAfter(table.getTableName(),
+                '_', false))); // 第一步,第一个 _ 前缀的后面,作为 module 名字; 第二步,可能存在多个 _ 的情况,转换成驼峰
+        table.setClassName(upperFirst(toCamelCase(table.getTableName()))); // 驼峰 + 首字母大写
+        table.setClassComment(subBefore(table.getTableComment(), // 去除结尾的表,作为类描述
                 '表', true));
         table.setAuthor("芋艿"); // TODO 稍后改成创建人
         table.setTemplateType(ToolCodegenTemplateTypeEnum.CRUD.getType());
@@ -144,7 +157,7 @@ public class ToolCodegenBuilder {
 
     private void processColumnJava(ToolCodegenColumnDO column) {
         // 处理 javaField 字段
-        column.setJavaField(StrUtil.toCamelCase(column.getColumnName()));
+        column.setJavaField(toCamelCase(column.getColumnName()));
         // 处理 dictType 字段,暂无
         // 处理 javaType 字段
         String dbType = StrUtil.subBefore(column.getColumnType(), '(', false);
@@ -194,4 +207,27 @@ public class ToolCodegenBuilder {
         }
     }
 
+    /**
+     * 获得模块的缩略名
+     *
+     * @param fullModuleName 模块的完整名
+     * @return 缩略名
+     */
+    public String getSimpleModuleName(String fullModuleName) {
+        return moduleNames.getOrDefault(fullModuleName, fullModuleName);
+    }
+
+    /**
+     * 获得模块的完整名
+     *
+     * @param shortModuleName 模块的缩略名
+     * @return 完整名
+     */
+    public String getFullModuleName(String shortModuleName) {
+        return moduleNames.entrySet().stream()
+                .filter(entry -> entry.getValue().equals(shortModuleName)) // 匹配
+                .findFirst().map(Map.Entry::getKey) // 返回 key
+                .orElse(shortModuleName); // 兜底返回 shortModuleName
+    }
+
 }

+ 16 - 3
src/main/java/cn/iocoder/dashboard/modules/tool/service/codegen/impl/ToolCodegenEngine.java

@@ -14,6 +14,7 @@ import cn.iocoder.dashboard.util.collection.CollectionUtils;
 import cn.iocoder.dashboard.util.date.DateUtils;
 import org.springframework.stereotype.Component;
 
+import javax.annotation.Resource;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -31,6 +32,9 @@ import static cn.hutool.core.text.CharSequenceUtil.*;
 @Component
 public class ToolCodegenEngine {
 
+    @Resource
+    private ToolCodegenBuilder codegenBuilder;
+
     /**
      * 模板引擎,由 hutool 实现
      */
@@ -69,9 +73,15 @@ public class ToolCodegenEngine {
         Map<String, Object> bindingMap = new HashMap<>(globalBindingMap);
         bindingMap.put("table", table);
         bindingMap.put("columns", columns);
-        bindingMap.put("primaryColumn", CollectionUtils.findFirst(columns, ToolCodegenColumnDO::getPrimaryKey));
-        bindingMap.put("simpleClassName", upperFirst(toCamelCase(subAfter( // 去掉第一个驼峰,例如说 SysUser 去掉后是 User
-                toUnderlineCase(table.getClassName()), '_', false))));
+        bindingMap.put("primaryColumn", CollectionUtils.findFirst(columns, ToolCodegenColumnDO::getPrimaryKey)); // 主键字段
+        String simpleModuleName = codegenBuilder.getSimpleModuleName(table.getModuleName());
+        bindingMap.put("simpleModuleName", simpleModuleName); // 将 system 转成 sys
+        // className 相关
+        String simpleClassName = subAfter(table.getClassName(), upperFirst(simpleModuleName)
+                , false); // 将 TestDictType 转换成 DictType. 因为在 create 等方法后,不需要带上 Test 前缀
+        bindingMap.put("simpleClassName", simpleClassName);
+        bindingMap.put("simpleClassName_underlineCase", toUnderlineCase(simpleClassName)); // 将 DictType 转换成 dict_type
+        bindingMap.put("classNameVar", lowerFirst(simpleClassName)); // 将 DictType 转换成 dictType,用于变量
         // 执行生成
 //        String result = templateEngine.getTemplate("codegen/dal/do.vm").render(bindingMap);
 //        String result = templateEngine.getTemplate("codegen/dal/mapper.vm").render(bindingMap);
@@ -80,7 +90,10 @@ public class ToolCodegenEngine {
 //        String result = templateEngine.getTemplate("codegen/controller/vo/createReqVO.vm").render(bindingMap);
 //        String result = templateEngine.getTemplate("codegen/controller/vo/updateReqVO.vm").render(bindingMap);
 //        String result = templateEngine.getTemplate("codegen/controller/vo/respVO.vm").render(bindingMap);
+//        String result = templateEngine.getTemplate("codegen/convert/convert.vm").render(bindingMap);
+//        String result = templateEngine.getTemplate("codegen/enums/errorcode.vm").render(bindingMap);
         String result = templateEngine.getTemplate("codegen/service/service.vm").render(bindingMap);
+//        String result = templateEngine.getTemplate("codegen/service/serviceImpl.vm").render(bindingMap);
         System.out.println(result);
     }
 

+ 2 - 2
src/main/resources/codegen/controller/vo/updateReqVO.vm

@@ -6,8 +6,8 @@ import io.swagger.annotations.*;
 import javax.validation.constraints.*;
 ## 处理 Date 字段的引入
 #foreach ($column in $columns)
-#if (${column.updateOperation} && (!${column.createOperation} || !${column.listOperationResult}))
-    && ${column.javaType} == "Date")## 时间类型
+#if (${column.updateOperation} && (!${column.createOperation} || !${column.listOperationResult})
+    && ${column.javaType} == "Date"))## 时间类型
 import org.springframework.format.annotation.DateTimeFormat;
 
 import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;

+ 22 - 0
src/main/resources/codegen/convert/convert.vm

@@ -0,0 +1,22 @@
+package ${basePackage}.${table.moduleName}.convert.${table.businessName};
+
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+import ${basePackage}.${table.moduleName}.controller.${table.businessName}.vo.*;
+import ${basePackage}.${table.moduleName}.dal.mysql.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(${table.className}CreateReqVO bean);
+
+    ${table.className}DO convert(${table.className}UpdateReqVO bean);
+
+}

+ 1 - 1
src/main/resources/codegen/dal/do.vm

@@ -3,7 +3,7 @@ package ${basePackage}.${table.moduleName}.dal.mysql.dataobject.${table.business
 import lombok.*;
 import java.util.*;
 import com.baomidou.mybatisplus.annotation.*;
-import ${BaseDOClassName};
+import ${baseDOClassName};
 
 /**
 * ${table.classComment} DO

+ 6 - 5
src/main/resources/codegen/dal/mapper.vm

@@ -5,6 +5,7 @@ import ${QueryWrapperClassName};
 import ${BaseMapperClassName};
 import ${basePackage}.${table.moduleName}.dal.mysql.dataobject.${table.businessName}.${table.className}DO;
 import org.apache.ibatis.annotations.Mapper;
+import ${basePackage}.${table.moduleName}.controller.${table.businessName}.vo.${table.className}PageReqVO;
 
 /**
 * ${table.classComment} Mapper
@@ -26,19 +27,19 @@ public interface ${table.className}Mapper extends BaseMapperX<${table.className}
             .neIfPresent("${column.columnName}", reqVO.get${JavaField}())
 #end
 #if (${column.listOperationCondition} == ">")##情况三,> 的时候
-        .gtIfPresent("${column.columnName}", reqVO.get${JavaField}())
+            .gtIfPresent("${column.columnName}", reqVO.get${JavaField}())
 #end
 #if (${column.listOperationCondition} == ">=")##情况四,>= 的时候
-        .geIfPresent("${column.columnName}", reqVO.get${JavaField}())
+            .geIfPresent("${column.columnName}", reqVO.get${JavaField}())
 #end
 #if (${column.listOperationCondition} == "<")##情况五,< 的时候
-        .gtIfPresent("${column.columnName}", reqVO.get${JavaField}())
+            .gtIfPresent("${column.columnName}", reqVO.get${JavaField}())
 #end
 #if (${column.listOperationCondition} == "LIKE")##情况七,Like 的时候
-        .likeIfPresent("${column.columnName}", reqVO.get${JavaField}())
+            .likeIfPresent("${column.columnName}", reqVO.get${JavaField}())
 #end
 #if (${column.listOperationCondition} == "BETWEEN")##情况八,Between 的时候
-        .betweenIfPresent("${column.columnName}", reqVO.getBegin${JavaField}(), reqVO.getEnd${JavaField}())
+            .betweenIfPresent("${column.columnName}", reqVO.getBegin${JavaField}(), reqVO.getEnd${JavaField}())
 #end
 #end
 #end

+ 2 - 0
src/main/resources/codegen/enums/errorcode.vm

@@ -0,0 +1,2 @@
+// ========== ${table.classCommet} TODO 补充编号 ==========
+ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_NOT_FOUND = new ErrorCode(TODO 补充编号, "${table.classComment}不存在}");

+ 4 - 4
src/main/resources/codegen/service/service.vm

@@ -17,7 +17,7 @@ public interface ${table.className}Service {
      * 创建${table.classComment}
      *
      * @param createReqVO 创建信息
-     * @return ${class.description}
+     * @return 编号
      */
     ${primaryColumn.javaType} create${simpleClassName}(@Valid ${table.className}CreateReqVO createReqVO);
 
@@ -39,7 +39,7 @@ public interface ${table.className}Service {
      * 获得${table.classComment}
      *
      * @param id 编号
-     * @return ${class.description}
+     * @return ${table.classComment}
      */
     ${table.className}DO get${simpleClassName}(${primaryColumn.javaType} id);
 
@@ -47,7 +47,7 @@ public interface ${table.className}Service {
      * 获得${table.classComment}列表
      *
      * @param ids 编号
-     * @return ${class.classComment}列表
+     * @return ${table.classComment}列表
      */
     List<${table.className}DO> get${simpleClassName}List(Collection<${primaryColumn.javaType}> ids);
 
@@ -55,7 +55,7 @@ public interface ${table.className}Service {
      * 获得${table.classComment}分页
      *
      * @param pageReqVO 分页查询
-     * @return ${class.classComment}分页
+     * @return ${table.classComment}分页
      */
 	PageResult<${table.className}DO> get${simpleClassName}Page(${table.className}PageReqVO pageReqVO);
 

+ 30 - 0
src/main/resources/codegen/service/serviceImpl.vm

@@ -0,0 +1,30 @@
+package ${basePackage}.${table.moduleName}.service.${table.businessName}.impl;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+
+import java.util.*;
+import ${basePackage}.${table.moduleName}.controller.${table.businessName}.vo.*;
+import ${basePackage}.${table.moduleName}.dal.mysql.dataobject.${table.businessName}.${table.className}DO;
+import ${PageResultClassName};
+
+import static ${basePackage}.${table.moduleName}.enums.${simpleModuleName.substring(0,1).toUpperCase()}${simpleModuleName.substring(1)}ErrorCodeConstants.*;
+
+/**
+* ${table.classComment} Service 实现类
+*
+* @author ${table.author}
+*/
+@Validated
+public class ${table.className}ServiceImpl implements {table.className}Service {
+
+    @Resource
+    private ${table.className}Mapper ${classNameVar}Mapper;
+
+    @Override
+    public ${primaryColumn.javaType} create${simpleClassName}(@Valid ${table.className}CreateReqVO createReqVO) {
+    }
+
+}

+ 1 - 1
src/test/java/cn/iocoder/dashboard/modules/tool/service/codegen/impl/ToolCodegenEngineTest.java

@@ -24,7 +24,7 @@ public class ToolCodegenEngineTest {
 
     @Test
     public void testExecute() {
-        ToolCodegenTableDO table = codegenTableMapper.selectById(8);
+        ToolCodegenTableDO table = codegenTableMapper.selectById(10);
         List<ToolCodegenColumnDO> columns = codegenColumnMapper.selectByTableId(table.getId());
         codegenEngine.execute(table, columns);
     }

+ 1 - 1
src/test/java/cn/iocoder/dashboard/modules/tool/service/codegen/impl/ToolCodegenServiceImplTest.java

@@ -16,7 +16,7 @@ class ToolCodegenServiceImplTest {
 
     @Test
     public void tetCreateCodegenTable() {
-        toolCodegenService.createCodegenTable("sys_dict_type");
+        toolCodegenService.createCodegenTable("sys_test_demo");
     }
 
 }