From a851070cca78d4f719db0df6729b7346d0e6d872 Mon Sep 17 00:00:00 2001 From: zccbbg Date: Sat, 2 Mar 2024 21:09:25 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E4=BB=A3=E7=A0=81=E7=94=9F?= =?UTF-8?q?=E6=88=90bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application.yml | 50 ++- .../generator/controller/GenController.java | 39 +-- .../service/GenTableServiceImpl.java | 97 +++--- .../com/ruoyi/generator/util/GenUtils.java | 8 +- .../ruoyi/generator/util/VelocityUtils.java | 3 +- .../src/main/resources/generator.yml | 9 +- .../main/resources/vm/java/controller.java.vm | 97 +++--- .../main/resources/vm/java/convert.java.vm | 13 +- .../src/main/resources/vm/java/domain.java.vm | 17 +- .../src/main/resources/vm/java/dto.java.vm | 6 +- .../main/resources/vm/java/example.java.vm | 305 ++++++++++++++++++ .../src/main/resources/vm/java/mapper.java.vm | 93 +----- .../src/main/resources/vm/java/query.java.vm | 52 ++- .../main/resources/vm/java/service.java.vm | 130 ++++++-- .../resources/vm/java/serviceImpl.java.vm | 102 +++--- .../src/main/resources/vm/java/vo.java.vm | 25 +- .../src/main/resources/vm/js/api.js.vm | 21 +- .../src/main/resources/vm/sql/sql.vm | 12 +- .../src/main/resources/vm/vue/index.vue.vm | 44 +-- .../src/main/resources/vm/xml/mapper.xml.vm | 153 +-------- 20 files changed, 750 insertions(+), 526 deletions(-) create mode 100644 ruoyi-generator/src/main/resources/vm/java/example.java.vm diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 4e22218..ecf1495 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -169,31 +169,31 @@ http-pool: max-total: 200 gen: # 作者 - author: + author: zcc # 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool - packageName: com.cyl.demo + packageName: com.cyl.mall # 自动去除表前缀,默认是false autoRemovePre: true # 表前缀(生成类名不会包含表前缀,多个用逗号分隔) - tablePrefix: cscdc_ + tablePrefix: mall_ # 一级权限名 - rootPermission: cscdc + rootPermission: mall # 模板根路径 templateRootPath: vm # 路径 path: # 后端根目录 - backPath: C:\Users\zccbbg\ichengle\ruoyi-vue-fork\ + backPath: D:\java_project\mall\ruoyi-mall # 后端 service 模块名 - serviceModule: mybatis-plus-demo + serviceModule: mall # 后端 api 模块名, 默认与 service 一致 - apiModule: mybatis-plus-api + apiModule: mall # 前端根目录 - frontPath: C:\Users\zccbbg\code\cdc_front_cs\ + frontPath: D:\java_project\mall\ruoyi-mall-vue # 前端 api 目录 - frontApiPath: src/api/emergencyhandle + frontApiPath: src/api/mall # 前端 view 目录 - frontViewPath: src/views/emergencyhandle + frontViewPath: src/views/mall # sql 目录 sql: sql # 环境变量 @@ -206,7 +206,7 @@ gen: fileMap: "api.js.vm": "${frontPath}/${frontApiPath}/${className}.js" "controller.java.vm": "${backPath}/${serviceModule}/${MAIN_JAVA}/${packageName}/controller/${ClassName}Controller.java" - "service.java.vm": "${backPath}/${serviceModule}/${MAIN_JAVA}/${packageName}/service/I${ClassName}Service.java" + "service.java.vm": "${backPath}/${serviceModule}/${MAIN_JAVA}/${packageName}/service/${ClassName}Service.java" "mapper.java.vm": "${backPath}/${serviceModule}/${MAIN_JAVA}/${packageName}/mapper/${ClassName}Mapper.java" "convert.java.vm": "${backPath}/${serviceModule}/${MAIN_JAVA}/${packageName}/convert/${ClassName}Convert.java" "example.java.vm": "${backPath}/${serviceModule}/${MAIN_JAVA}/${packageName}/pojo/example/${ClassName}Example.java" @@ -218,6 +218,32 @@ gen: "sql.vm": "${backPath}/sql/${className}.sql" "h2.sql.vm": "${backPath}/${serviceModule}/${MAIN_JAVA}/db/${tableName}-h2.sql" "add.vue.vm": "${frontPath}/${frontViewPath}/Add${ClassName}.vue" - "index.vue.vm": "${frontPath}/${frontViewPath}/index.vue" + "index.vue.vm": "${frontPath}/${frontViewPath}/${className}/index.vue" "index-tree.vue.vm": "${frontPath}/${frontViewPath}/index.vue" "sub-domain.java.vm": "${frontPath}/${frontViewPath}/Sub${ClassName}.vue" + templates: + - vm/js/api.js.vm + - vm/java/controller.java.vm + - vm/java/service.java.vm + - vm/java/mapper.java.vm + - vm/java/convert.java.vm + - vm/java/query.java.vm + - vm/java/dto.java.vm + - vm/java/vo.java.vm + - vm/java/domain.java.vm + - vm/xml/mapper.xml.vm + - vm/sql/sql.vm + testTemplates: + # - vm/sql/h2.sql.vm + crudTemplates: + # - vm/vue/add.vue.vm + - vm/vue/index.vue.vm + treeTemplates: + # - vm/vue/index-tree.vue.vm + subTemplates: + # - vm/vue/index.vue.vm + # - vm/java/sub-domain.java.vm + type2component: + "String": "a-input(" + "LocalDate": "a-date-picker(" + "LocalDateTime": "a-date-picker(format=\"YYYY-MM-DD HH:mm\"" diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java index 11f7d34..14f6ca2 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java @@ -1,34 +1,27 @@ package com.ruoyi.generator.controller; -import java.io.IOException; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import javax.servlet.http.HttpServletResponse; - -import com.ruoyi.common.utils.SecurityUtils; -import org.apache.commons.io.IOUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.text.Convert; import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.generator.domain.GenTable; import com.ruoyi.generator.domain.GenTableColumn; import com.ruoyi.generator.service.IGenTableColumnService; import com.ruoyi.generator.service.IGenTableService; +import org.apache.commons.io.IOUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * 代码生成 操作处理 @@ -61,12 +54,12 @@ public class GenController extends BaseController * 修改代码生成业务 */ @PreAuthorize("@ss.hasPermi('tool:gen:query')") - @GetMapping(value = "/{talbleId}") - public AjaxResult getInfo(@PathVariable Long talbleId) + @GetMapping(value = "/{tableId}") + public AjaxResult getInfo(@PathVariable Long tableId) { - GenTable table = genTableService.selectGenTableById(talbleId); + GenTable table = genTableService.selectGenTableById(tableId); List tables = genTableService.selectGenTableAll(); - List list = genTableColumnService.selectGenTableColumnListByTableId(talbleId); + List list = genTableColumnService.selectGenTableColumnListByTableId(tableId); Map map = new HashMap(); map.put("info", table); map.put("rows", list); diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java index 30a7c8c..8a21667 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java @@ -184,24 +184,55 @@ public class GenTableServiceImpl implements IGenTableService { Map dataMap = new LinkedHashMap<>(); // 查询表信息 GenTable table = genTableMapper.selectGenTableById(tableId); + Result result = getResult(table); + for (String template : result.templates) { + if (template.endsWith(".java.vm")) { + result.context.put("fullPackage", getFullPackage(template)); + } + // 渲染模板 + StringWriter sw = new StringWriter(); + Template tpl = Velocity.getTemplate(template, Constants.UTF8); + tpl.merge(result.context, sw); + dataMap.put(template, sw.toString()); + } + return dataMap; + } + + private Result getResult(GenTable table) { + initNullValue(table); // 设置主子表信息 setSubTable(table); + setTableFromOptions(table); // 设置主键列信息 setPkColumn(table); + + // 初始化 Class 信息 + genContext.prop2path.put("ClassName", table.getClassName()); + genContext.prop2path.put("className", StrUtil.lowerFirst(table.getClassName())); + genContext.prop2path.put("tableName", table.getTableName()); + + // 初始化模板 VelocityInitializer.initVelocity(); + // 初始化模板变量 VelocityContext context = VelocityUtils.prepareContext(table); - + context.put("env", genContext.genConfig.getEnv()); + context.put("_fullClass", fillHolder(table, genContext.fullQualifiedClassHolder)); + context.put("_className", fillHolder(table, genContext.className)); // 获取模板列表 List templates = VelocityUtils.getTemplateList(table.getTplCategory()); - for (String template : templates) { - // 渲染模板 - StringWriter sw = new StringWriter(); - Template tpl = Velocity.getTemplate(template, Constants.UTF8); - tpl.merge(context, sw); - dataMap.put(template, sw.toString()); + Result result = new Result(context, templates); + return result; + } + + private static class Result { + public final VelocityContext context; + public final List templates; + + public Result(VelocityContext context, List templates) { + this.context = context; + this.templates = templates; } - return dataMap; } /** @@ -228,38 +259,15 @@ public class GenTableServiceImpl implements IGenTableService { public void generatorCode(String tableName) { // 查询表信息 GenTable table = genTableMapper.selectGenTableByName(tableName); - initNullValue(table); - // 设置主子表信息 - setSubTable(table); - setTableFromOptions(table); - // 设置主键列信息 - setPkColumn(table); - - // 初始化 Class 信息 - genContext.prop2path.put("ClassName", table.getClassName()); - genContext.prop2path.put("className", StrUtil.lowerFirst(table.getClassName())); - genContext.prop2path.put("tableName", table.getTableName()); - genContext.prop2path.put("moduleName", table.getModuleName()); - - // 初始化模板 - VelocityInitializer.initVelocity(); - - // 初始化模板变量 - VelocityContext context = VelocityUtils.prepareContext(table); - context.put("env", genContext.genConfig.getEnv()); - context.put("_fullClass", fillHolder(table, genContext.fullQualifiedClassHolder)); - context.put("_className", fillHolder(table, genContext.className)); - - // 获取模板列表 - List templates = VelocityUtils.getTemplateList(table.getTplCategory()); - for (String template : templates) { + Result result = getResult(table); + for (String template : result.templates) { if (template.endsWith(".java.vm")) { - context.put("fullPackage", getFullPackage(template)); + result.context.put("fullPackage", getFullPackage(template)); } // 渲染模板 StringWriter sw = new StringWriter(); Template tpl = Velocity.getTemplate(template, Constants.UTF8); - tpl.merge(context, sw); + tpl.merge(result.context, sw); String path = null; try { path = generatePath(template, table); @@ -390,22 +398,15 @@ public class GenTableServiceImpl implements IGenTableService { private void generatorCode(String tableName, ZipOutputStream zip) { // 查询表信息 GenTable table = genTableMapper.selectGenTableByName(tableName); - // 设置主子表信息 - setSubTable(table); - // 设置主键列信息 - setPkColumn(table); - - VelocityInitializer.initVelocity(); - - VelocityContext context = VelocityUtils.prepareContext(table); - - // 获取模板列表 - List templates = VelocityUtils.getTemplateList(table.getTplCategory()); - for (String template : templates) { + Result result = getResult(table); + for (String template : result.templates) { + if (template.endsWith(".java.vm")) { + result.context.put("fullPackage", getFullPackage(template)); + } // 渲染模板 StringWriter sw = new StringWriter(); Template tpl = Velocity.getTemplate(template, Constants.UTF8); - tpl.merge(context, sw); + tpl.merge(result.context, sw); try { // 添加到zip zip.putNextEntry(new ZipEntry(VelocityUtils.getFileName(template, table))); diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java index 9f047c5..911dc03 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java @@ -191,7 +191,13 @@ public class GenUtils { * @return 业务名 */ public static String getBusinessName(String tableName) { - return StrUtil.toCamelCase(tableName); + boolean autoRemovePre = genConfig.isAutoRemovePre(); + String tablePrefix = genConfig.getTablePrefix(); + if (autoRemovePre && StringUtils.isNotEmpty(tablePrefix)) { + String[] searchList = StringUtils.split(tablePrefix, ","); + tableName = replaceFirst(tableName, searchList); + } + return StringUtils.convertToCamelCase(tableName); } /** diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java index b6fbb84..0f3b23e 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java @@ -1,5 +1,6 @@ package com.ruoyi.generator.util; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import com.ruoyi.common.constant.GenConstants; import com.ruoyi.common.utils.DateUtils; @@ -163,7 +164,7 @@ public class VelocityUtils { // 大写类名 String className = genTable.getClassName(); // 业务名称 - String businessName = genTable.getBusinessName(); + String businessName = StrUtil.lowerFirst(genTable.getBusinessName()); String javaPath = PROJECT_PATH + "/" + StringUtils.replace(packageName, ".", "/"); String mybatisPath = MYBATIS_PATH + "/" + moduleName; diff --git a/ruoyi-generator/src/main/resources/generator.yml b/ruoyi-generator/src/main/resources/generator.yml index 247b94c..55234c4 100644 --- a/ruoyi-generator/src/main/resources/generator.yml +++ b/ruoyi-generator/src/main/resources/generator.yml @@ -1,12 +1,13 @@ -# 代码生成 -gen: +gen: # 作者 author: zcc # 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool packageName: com.cyl.mall # 自动去除表前缀,默认是false - autoRemovePre: false + autoRemovePre: true # 表前缀(生成类名不会包含表前缀,多个用逗号分隔) - tablePrefix: mall_ + tablePrefix: ums_ # 一级权限名 rootPermission: mall + # 模板根路径 + templateRootPath: vm \ No newline at end of file diff --git a/ruoyi-generator/src/main/resources/vm/java/controller.java.vm b/ruoyi-generator/src/main/resources/vm/java/controller.java.vm index f8998c8..a8df03b 100644 --- a/ruoyi-generator/src/main/resources/vm/java/controller.java.vm +++ b/ruoyi-generator/src/main/resources/vm/java/controller.java.vm @@ -1,6 +1,13 @@ -package ${packageName}.controller; +package ${fullPackage}; import java.util.List; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Page; +import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; @@ -13,94 +20,74 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; -import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.enums.BusinessType; -import ${packageName}.domain.${ClassName}; -import ${packageName}.service.I${ClassName}Service; +import ${_fullClass.convert}; +import ${_fullClass.domain}; +import ${_fullClass.query}; +import ${_fullClass.service}; +import ${_fullClass.vo}; import com.ruoyi.common.utils.poi.ExcelUtil; -#if($table.crud || $table.sub) -import com.ruoyi.common.core.page.TableDataInfo; -#elseif($table.tree) -#end - /** * ${functionName}Controller - * + * * @author ${author} * @date ${datetime} */ +@Api(description ="${functionName}接口列表") @RestController -@RequestMapping("/${moduleName}/${businessName}") -public class ${ClassName}Controller extends BaseController { +@RequestMapping("/${moduleName}/${className}") +public class ${_className.controller} extends BaseController { @Autowired - private I${ClassName}Service ${className}Service; + private ${_className.service} service; + @Autowired + private ${_className.convert} convert; - /** - * 查询${functionName}列表 - */ + @ApiOperation("查询${functionName}列表") @PreAuthorize("@ss.hasPermi('${permissionPrefix}:list')") - @GetMapping("/list") -#if($table.crud || $table.sub) - public TableDataInfo list(${ClassName} ${className}) { - startPage(); - List<${ClassName}> list = ${className}Service.select${ClassName}List(${className}); - return getDataTable(list); - } -#elseif($table.tree) - public AjaxResult list(${ClassName} ${className}) { - List<${ClassName}> list = ${className}Service.select${ClassName}List(${className}); - return AjaxResult.success(list); + @PostMapping("/list") + public ResponseEntity> list(@RequestBody ${_className.query} query, Pageable page) { + List<${_className.domain}> list = service.selectList(query, page); + return ResponseEntity.ok(new PageImpl<>(list, page, ((com.github.pagehelper.Page)list).getTotal())); } -#end - /** - * 导出${functionName}列表 - */ + @ApiOperation("导出${functionName}列表") @PreAuthorize("@ss.hasPermi('${permissionPrefix}:export')") @Log(title = "${functionName}", businessType = BusinessType.EXPORT) @GetMapping("/export") - public AjaxResult export(${ClassName} ${className}) { - List<${ClassName}> list = ${className}Service.select${ClassName}List(${className}); - ExcelUtil<${ClassName}> util = new ExcelUtil<${ClassName}>(${ClassName}.class); - return util.exportExcel(list, "${functionName}数据"); + public ResponseEntity export(${_className.query} query) { + List<${ClassName}> list = service.selectList(query, null); + ExcelUtil<${_className.vo}> util = new ExcelUtil<>(${_className.vo}.class); + return ResponseEntity.ok(util.writeExcel(convert.dos2vos(list), "${functionName}数据")); } - /** - * 获取${functionName}详细信息 - */ + @ApiOperation("获取${functionName}详细信息") @PreAuthorize("@ss.hasPermi('${permissionPrefix}:query')") @GetMapping(value = "/{${pkColumn.javaField}}") - public AjaxResult getInfo(@PathVariable("${pkColumn.javaField}") ${pkColumn.javaType} ${pkColumn.javaField}) { - return AjaxResult.success(${className}Service.select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField})); + public ResponseEntity<${ClassName}> getInfo(@PathVariable("${pkColumn.javaField}") ${pkColumn.javaType} ${pkColumn.javaField}) { + return ResponseEntity.ok(service.selectBy${pkColumn.capJavaField}(${pkColumn.javaField})); } - /** - * 新增${functionName} - */ + @ApiOperation("新增${functionName}") @PreAuthorize("@ss.hasPermi('${permissionPrefix}:add')") @Log(title = "${functionName}", businessType = BusinessType.INSERT) @PostMapping - public AjaxResult add(@RequestBody ${ClassName} ${className}) { - return toAjax(${className}Service.insert${ClassName}(${className})); + public ResponseEntity add(@RequestBody ${ClassName} ${className}) { + return ResponseEntity.ok(service.insert(${className})); } - /** - * 修改${functionName} - */ + @ApiOperation("修改${functionName}") @PreAuthorize("@ss.hasPermi('${permissionPrefix}:edit')") @Log(title = "${functionName}", businessType = BusinessType.UPDATE) @PutMapping - public AjaxResult edit(@RequestBody ${ClassName} ${className}) { - return toAjax(${className}Service.update${ClassName}(${className})); + public ResponseEntity edit(@RequestBody ${ClassName} ${className}) { + return ResponseEntity.ok(service.update(${className})); } - /** - * 删除${functionName} - */ + @ApiOperation("删除${functionName}") @PreAuthorize("@ss.hasPermi('${permissionPrefix}:remove')") @Log(title = "${functionName}", businessType = BusinessType.DELETE) @DeleteMapping("/{${pkColumn.javaField}s}") - public AjaxResult remove(@PathVariable ${pkColumn.javaType}[] ${pkColumn.javaField}s) { - return toAjax(${className}Service.delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaField}s)); + public ResponseEntity remove(@PathVariable ${pkColumn.javaType}[] ${pkColumn.javaField}s) { + return ResponseEntity.ok(service.deleteBy${pkColumn.capJavaField}s(${pkColumn.javaField}s)); } } diff --git a/ruoyi-generator/src/main/resources/vm/java/convert.java.vm b/ruoyi-generator/src/main/resources/vm/java/convert.java.vm index 8599f49..2d420b9 100644 --- a/ruoyi-generator/src/main/resources/vm/java/convert.java.vm +++ b/ruoyi-generator/src/main/resources/vm/java/convert.java.vm @@ -1,11 +1,10 @@ -package ${packageName}.convert; +package ${fullPackage}; import org.mapstruct.Mapper; -import ${packageName}.model.entity.${ClassName}; -import ${packageName}.pojo.dto.${ClassName}DTO; -#if($table.sub) -import ${packageName}.convert.${subClassName}Convert; -#end +import ${_fullClass.domain}; +import ${_fullClass.dto}; +import ${_fullClass.vo}; +import java.util.List; /** * ${functionName} DO <=> DTO <=> VO / BO / Query * @@ -25,4 +24,6 @@ public interface ${ClassName}Convert { * @return DO */ ${ClassName} dto2do(${ClassName}DTO source); + + List<${_className.vo}> dos2vos(List<${_className.domain}> list); } diff --git a/ruoyi-generator/src/main/resources/vm/java/domain.java.vm b/ruoyi-generator/src/main/resources/vm/java/domain.java.vm index bad116a..6b8cf3c 100644 --- a/ruoyi-generator/src/main/resources/vm/java/domain.java.vm +++ b/ruoyi-generator/src/main/resources/vm/java/domain.java.vm @@ -1,33 +1,33 @@ -package ${packageName}.model.entity; +package ${fullPackage}; #foreach ($import in $importList) import ${import}; #end -import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.common.annotation.Excel; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; #if(($table.crud || $table.sub) && $table.audit == 1) -import com.bryx.core.common.base.entity.BaseAudit; -#elseif($table.tree) -import com.ruoyi.common.core.domain.TreeEntity; +import ${env.baseAudit}; #end import lombok.Data; +import com.baomidou.mybatisplus.annotation.TableName; /** * ${functionName}对象 ${tableName} * * @author ${author} */ +@ApiModel(description="${functionName}对象") #if(($table.crud || $table.sub) && $table.audit == 1) #set($Entity="BaseAudit") -#elseif($table.tree) -#set($Entity="TreeEntity") #end @Data +@TableName("${tableName}") public class ${ClassName}#if($Entity) extends ${Entity}#end { private static final long serialVersionUID = 1L; #foreach ($column in $columns) #if(!$table.isSuperColumn($column.javaField)) - /** $column.columnComment */ + @ApiModelProperty("$column.columnComment") #if($column.list) #set($parentheseIndex=$column.columnComment.indexOf("(")) #if($parentheseIndex != -1) @@ -38,7 +38,6 @@ public class ${ClassName}#if($Entity) extends ${Entity}#end { #if($parentheseIndex != -1) @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") #elseif($column.isDate()) - @JsonFormat(pattern = "${column.dateFormat}") @Excel(name = "${comment}", width = 30, dateFormat = "${column.dateFormat}") #else @Excel(name = "${comment}") diff --git a/ruoyi-generator/src/main/resources/vm/java/dto.java.vm b/ruoyi-generator/src/main/resources/vm/java/dto.java.vm index d504fc3..bba80d8 100644 --- a/ruoyi-generator/src/main/resources/vm/java/dto.java.vm +++ b/ruoyi-generator/src/main/resources/vm/java/dto.java.vm @@ -1,10 +1,10 @@ -package ${packageName}.pojo.dto; +package ${fullPackage}; #foreach ($import in $importList) import ${import}; #end #if( ${table.audit} == 1 ) -import com.bryx.core.common.base.entity.BaseAudit; +import ${env.baseAudit}; #end import lombok.Data; /** @@ -15,7 +15,7 @@ import lombok.Data; @Data public class ${ClassName}DTO#if( ${table.audit} == 1 ) extends BaseAudit#end { #foreach ($column in $columns) -#if(!$table.isSuperColumn($column.javaField)) +#if(!$table.isSuperColumn($column.javaField) and $column.javaField != "delFlag") private $column.javaType $column.javaField; #end #end diff --git a/ruoyi-generator/src/main/resources/vm/java/example.java.vm b/ruoyi-generator/src/main/resources/vm/java/example.java.vm new file mode 100644 index 0000000..14c3938 --- /dev/null +++ b/ruoyi-generator/src/main/resources/vm/java/example.java.vm @@ -0,0 +1,305 @@ +package ${fullPackage}; + +#foreach ($import in $importList) +import ${import}; +#end +import java.util.ArrayList; +import java.util.Date; +import java.util.Iterator; +import java.util.List; +import java.time.LocalDate; +import java.time.LocalDateTime; + +public class ${ClassName}Example { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public ${ClassName}Example() { + oredCriteria = new ArrayList<>(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList<>(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + protected void addCriterionForJDBCDate(String condition, Date value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + addCriterion(condition, new java.sql.Date(value.getTime()), property); + } + + protected void addCriterionForJDBCDate(String condition, List values, String property) { + if (values == null || values.size() == 0) { + throw new RuntimeException("Value list for " + property + " cannot be null or empty"); + } + List dateList = new ArrayList<>(); + Iterator iter = values.iterator(); + while (iter.hasNext()) { + dateList.add(new java.sql.Date(iter.next().getTime())); + } + addCriterion(condition, dateList, property); + } + + protected void addCriterionForJDBCDate(String condition, Date value1, Date value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + addCriterion(condition, new java.sql.Date(value1.getTime()), new java.sql.Date(value2.getTime()), property); + } +#foreach ($column in $columns) + public Criteria and${column.capJavaField}IsNull() { + addCriterion("${column.columnName} is null"); + return (Criteria) this; + } + + public Criteria and${column.capJavaField}IsNotNull() { + addCriterion("${column.columnName} is not null"); + return (Criteria) this; + } + + public Criteria and${column.capJavaField}EqualTo(${column.javaType} value) { + addCriterion("${column.columnName} =", value, "${column.javaField}"); + return (Criteria) this; + } + + public Criteria and${column.capJavaField}NotEqualTo(${column.javaType} value) { + addCriterion("${column.columnName} <>", value, "${column.javaField}"); + return (Criteria) this; + } + + public Criteria and${column.capJavaField}GreaterThan(${column.javaType} value) { + addCriterion("${column.columnName} >", value, "${column.javaField}"); + return (Criteria) this; + } + + public Criteria and${column.capJavaField}GreaterThanOrEqualTo(${column.javaType} value) { + addCriterion("${column.columnName} >=", value, "${column.javaField}"); + return (Criteria) this; + } + + public Criteria and${column.capJavaField}LessThan(${column.javaType} value) { + addCriterion("${column.columnName} <", value, "${column.javaField}"); + return (Criteria) this; + } + + public Criteria and${column.capJavaField}LessThanOrEqualTo(${column.javaType} value) { + addCriterion("${column.columnName} <=", value, "${column.javaField}"); + return (Criteria) this; + } +#if($column.javaType == 'String') + + public Criteria and${column.capJavaField}Like(${column.javaType} value) { + addCriterion("${column.columnName} like", value, "${column.javaField}"); + return (Criteria) this; + } + + public Criteria and${column.capJavaField}NotLike(${column.javaType} value) { + addCriterion("${column.columnName} not like", value, "${column.javaField}"); + return (Criteria) this; + } + +#end + public Criteria and${column.capJavaField}In(List<${column.javaType}> values) { + addCriterion("${column.columnName} in", values, "${column.javaField}"); + return (Criteria) this; + } + + public Criteria and${column.capJavaField}NotIn(List<${column.javaType}> values) { + addCriterion("${column.columnName} not in", values, "${column.javaField}"); + return (Criteria) this; + } + + public Criteria and${column.capJavaField}Between(${column.javaType} value1, ${column.javaType} value2) { + addCriterion("${column.columnName} between", value1, value2, "${column.javaField}"); + return (Criteria) this; + } + + public Criteria and${column.capJavaField}NotBetween(${column.javaType} value1, ${column.javaType} value2) { + addCriterion("${column.columnName} not between", value1, value2, "${column.javaField}"); + return (Criteria) this; + } +#end + } + + public static class Criteria extends GeneratedCriteria { + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} diff --git a/ruoyi-generator/src/main/resources/vm/java/mapper.java.vm b/ruoyi-generator/src/main/resources/vm/java/mapper.java.vm index 64cf7ca..0d44884 100644 --- a/ruoyi-generator/src/main/resources/vm/java/mapper.java.vm +++ b/ruoyi-generator/src/main/resources/vm/java/mapper.java.vm @@ -1,97 +1,28 @@ -package ${packageName}.mapper; +package ${fullPackage}; import java.util.List; -import ${packageName}.domain.${ClassName}; -#if($table.sub) -import ${packageName}.domain.${subClassName}; -#end +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; +import ${_fullClass.domain}; /** * ${functionName}Mapper接口 * * @author ${author} */ -public interface ${ClassName}Mapper { - /** - * 查询${functionName} - * - * @param ${pkColumn.javaField} ${functionName}主键 - * @return ${functionName} - */ - ${ClassName} selectBy${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); - +public interface ${ClassName}Mapper extends BaseMapper<${ClassName}> { /** * 查询${functionName}列表 - * - * @param ${className} ${functionName} - * @return ${functionName}集合 - */ - List<${ClassName}> selectList(${ClassName} ${className}); - - /** - * 新增${functionName} - * - * @param ${className} ${functionName} - * @return 结果 - */ - int insert(${ClassName} ${className}); - - /** - * 修改${functionName} - * - * @param ${className} ${functionName} - * @return 结果 - */ - int update(${ClassName} ${className}); - - /** - * 删除${functionName} - * - * @param ${pkColumn.javaField} ${functionName}主键 - * @return 结果 - */ - int deleteBy${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); - - /** - * 批量删除${functionName} - * - * @param ${pkColumn.javaField}s 需要删除的数据主键集合 - * @return 结果 - */ - int deleteBy${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s); - - /** - * 更新或插入${functionName} * * @param ${className} ${functionName} - * @return 结果 - */ - int insertOrUpdate(${ClassName} ${className}); -#if($table.sub) - - /** - * 批量删除${subTable.functionName} - * - * @param ${pkColumn.javaField}s 需要删除的数据主键集合 - * @return 结果 - */ - int delete${subClassName}By${subTableFkClassName}s(${pkColumn.javaType}[] ${pkColumn.javaField}s); - - /** - * 批量新增${subTable.functionName} - * - * @param ${subclassName}List ${subTable.functionName}列表 - * @return 结果 + * @return ${functionName}集合 */ - int batch${subClassName}(List<${subClassName}> ${subclassName}List); - + List<${ClassName}> selectByEntity(${ClassName} ${className}); /** - * 通过${functionName}主键删除${subTable.functionName}信息 - * - * @param ${pkColumn.javaField} ${functionName}ID - * @return 结果 - */ - int delete${subClassName}By${subTableFkClassName}(${pkColumn.javaType} ${pkColumn.javaField}); -#end + * 批量软删除 + * @param ids + * @return + */ + int updateDelFlagByIds(@Param("ids") Long[] ids); } diff --git a/ruoyi-generator/src/main/resources/vm/java/query.java.vm b/ruoyi-generator/src/main/resources/vm/java/query.java.vm index b0365ae..b28af37 100644 --- a/ruoyi-generator/src/main/resources/vm/java/query.java.vm +++ b/ruoyi-generator/src/main/resources/vm/java/query.java.vm @@ -1,38 +1,32 @@ -package ${packageName}.pojo.query; -import com.ruoyi.common.core.domain.IQuery; -import ${packageName}.domain.${ClassName}; -import lombok.Setter; +package ${fullPackage}; -import java.util.HashMap; -import java.util.Map; +#foreach ($import in $importList) +import ${import}; +#end +import lombok.Data; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; /** * ${functionName} 查询 对象 * * @author ${author} */ -@Setter -public class ${ClassName}Query extends ${ClassName} implements IQuery { - /** - * 搜索值 - */ - private String searchValue; +@ApiModel(description="${functionName} 查询 对象") +@Data +public class ${_className.query} { +#foreach($column in $columns) +#if($column.query) +## 根据查询类型生成 EQ等于、NE不等于、GT大于、LT小于、LIKE模糊、BETWEEN范围 +## 范围查询, 使用数组实现 +#if($column.queryType == 'BETWEEN') + @ApiModelProperty("${column.genLabel()} 范围") + private ${column.javaType}[] ${column.javaField}${column.queryField}; +#else + @ApiModelProperty("${column.genLabel()} 精确匹配") + private ${column.javaType} ${column.javaField}${column.queryField}; +#end - /** - * 请求参数 - */ - private Map params; - - @Override - public String getSearchValue() { - return this.searchValue; - } - - @Override - public Map getParams() { - if (params == null) { - params = new HashMap<>(); - } - return params; - } +#end +#end } diff --git a/ruoyi-generator/src/main/resources/vm/java/service.java.vm b/ruoyi-generator/src/main/resources/vm/java/service.java.vm index f5f9b54..d2d6508 100644 --- a/ruoyi-generator/src/main/resources/vm/java/service.java.vm +++ b/ruoyi-generator/src/main/resources/vm/java/service.java.vm @@ -1,59 +1,149 @@ -package ${packageName}.service; +package ${fullPackage}; +#foreach ($import in $importList) +import ${import}; +#end +import java.util.Arrays; import java.util.List; -import ${packageName}.domain.${ClassName}; +#if($table.hasDate()) +#foreach($date in $table.dateImports()) +import $date; +#end +#end +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.pagehelper.PageHelper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Pageable; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import ${_fullClass.mapper}; +import #evaluate(${_fullClass.domain}); +import #evaluate(${_fullClass.query}); /** - * ${functionName}Service接口 - * + * ${functionName}Service业务层处理 + * + * * @author ${author} */ -public interface I${ClassName}Service { +@Service +public class ${ClassName}Service { + @Autowired + private ${_className.mapper} ${className}Mapper; + /** * 查询${functionName} - * + * * @param ${pkColumn.javaField} ${functionName}主键 * @return ${functionName} */ - ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); + public ${ClassName} selectBy${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}) { + return ${className}Mapper.selectById(${pkColumn.javaField}); + } /** * 查询${functionName}列表 - * - * @param ${className} ${functionName} - * @return ${functionName}集合 + * + * @param query 查询条件 + * @param page 分页条件 + * @return ${functionName} */ - List<${ClassName}> select${ClassName}List(${ClassName} ${className}); + public List<${_className.domain}> selectList(${_className.query} query, Pageable page) { + if (page != null) { + PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize()); + } + QueryWrapper<${_className.domain}> qw = new QueryWrapper<>(); + qw.eq("del_flag",0); +#foreach($column in $columns) +#if($column.query) +## 根据查询类型生成 EQ等于、NE不等于、GT大于、LT小于、LIKE模糊、BETWEEN范围 +## 范围查询, 使用数组实现 +#if($column.queryType == 'BETWEEN') + ${column.javaType}[] ${column.javaField}${column.queryField} = query.get${column.capJavaField}${column.queryField}(); + if (${column.javaField}${column.queryField} != null && ${column.javaField}${column.queryField}.length == 2) { + ${column.javaType} start = ${column.javaField}${column.queryField}[0]; + if (#if($column.javaType == 'String')!StringUtils.isEmpty(start)#{else}start != null#end) { + qw.ge("${column.columnName}", start); + } + ${column.javaType} end = ${column.javaField}Range[0]; + if (#if($column.javaType == 'String')!StringUtils.isEmpty(end) #{else}end != null#end) { + qw.le("${column.columnName}", end); + } + } +#else + ${column.javaType} ${column.javaField}${column.queryField} = query.get${column.capJavaField}${column.queryField}(); + if (#if($column.javaType == 'String')!StringUtils.isEmpty(${column.javaField}${column.queryField})#{else}${column.javaField}${column.queryField} != null#end) { + qw.${column.queryMethod}("${column.columnName}", ${column.javaField}${column.queryField}); + } +#end +#end +#end + return ${className}Mapper.selectList(qw); + } /** * 新增${functionName} - * + * * @param ${className} ${functionName} * @return 结果 */ - int insert${ClassName}(${ClassName} ${className}); +#if($table.sub) + @Transactional +#end + public int insert(${ClassName} ${className}) { + ${className}.setDelFlag(0); +#foreach ($column in $columns) +#if($column.javaField == 'createTime') + ${className}.setCreateTime(#if($column.javaType == "Date")new Date()#else${column.javaType}.now()#end); +#end +#end +#if($table.sub) + int rows = ${className}Mapper.insert(${className}); + insert${subClassName}(${className}); + return rows; +#else + return ${className}Mapper.insert(${className}); +#end + } /** * 修改${functionName} - * + * * @param ${className} ${functionName} * @return 结果 */ - int update${ClassName}(${ClassName} ${className}); +#if($table.sub) + @Transactional +#end + public int update(${ClassName} ${className}) { +#if($table.sub) + ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${className}.get${pkColumn.capJavaField}()); + insert${subClassName}(${className}); +#end + return ${className}Mapper.updateById(${className}); + } /** * 批量删除${functionName} - * - * @param ${pkColumn.javaField}s 需要删除的${functionName}主键集合 + * + * @param ${pkColumn.javaField}s 需要删除的${functionName}主键 * @return 结果 */ - int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s); +#if($table.sub) + @Transactional +#end + public int deleteBy${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s) { + return ${className}Mapper.updateDelFlagByIds(${pkColumn.javaField}s); + } /** * 删除${functionName}信息 - * + * * @param ${pkColumn.javaField} ${functionName}主键 * @return 结果 */ - int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); + public int deleteBy${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}) { + Long[] ${pkColumn.javaField}s = {${pkColumn.javaField}}; + return ${className}Mapper.updateDelFlagByIds(${pkColumn.javaField}s); + } } diff --git a/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm b/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm index cfd6277..f6480c8 100644 --- a/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm +++ b/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm @@ -1,22 +1,22 @@ -package ${packageName}.service.impl; +package ${fullPackage}; +import java.util.Arrays; import java.util.List; #if($table.hasDate()) #foreach($date in $table.dateImports()) import $date; #end #end +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.pagehelper.PageHelper; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; -#if($table.sub) -import java.util.ArrayList; -import com.ruoyi.common.utils.StringUtils; -import org.springframework.transaction.annotation.Transactional; -import ${packageName}.domain.${subClassName}; -#end -import ${packageName}.mapper.${ClassName}Mapper; -import ${packageName}.domain.${ClassName}; -import ${packageName}.service.I${ClassName}Service; +import org.apache.commons.lang3.StringUtils; +import ${_fullClass.mapper}; +import ${_fullClass.domain}; +import ${_fullClass.query}; +import ${_fullClass.service}; /** * ${functionName}Service业务层处理 @@ -24,9 +24,9 @@ import ${packageName}.service.I${ClassName}Service; * @author ${author} */ @Service -public class ${ClassName}ServiceImpl implements I${ClassName}Service { +public class ${_className.serviceImpl} implements ${_className.service} { @Autowired - private ${ClassName}Mapper ${className}Mapper; + private ${_className.mapper} ${className}Mapper; /** * 查询${functionName} @@ -35,19 +35,48 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service { * @return ${functionName} */ @Override - public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}) { + public ${ClassName} selectBy${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}) { return ${className}Mapper.selectBy${pkColumn.capJavaField}(${pkColumn.javaField}); } /** * 查询${functionName}列表 * - * @param ${className} ${functionName} + * @param query 查询条件 + * @param page 分页条件 * @return ${functionName} */ @Override - public List<${ClassName}> select${ClassName}List(${ClassName} ${className}) { - return ${className}Mapper.selectList(${className}); + public List<${_className.domain}> selectList(${_className.query} query, Pageable page) { + if (page != null) { + PageHelper.startPage(page.getPageNumber() + 1, page.getPageSize()); + } + QueryWrapper<${_className.domain}> qw = new QueryWrapper<>(); +#foreach($column in $columns) +#if($column.query) +## 根据查询类型生成 EQ等于、NE不等于、GT大于、LT小于、LIKE模糊、BETWEEN范围 +## 范围查询, 使用数组实现 +#if($column.queryType == 'BETWEEN') + ${column.javaType}[] ${column.javaField}${column.queryField} = query.get${column.capJavaField}${column.queryField}(); + if (${column.javaField}${column.queryField} != null && ${column.javaField}${column.queryField}.length == 2) { + ${column.javaType} start = ${column.javaField}${column.queryField}[0]; + if (#if($column.javaType == 'String')!StringUtils.isEmpty(start)#{else}start != null#end) { + qw.ge("${column.columnName}", start); + } + ${column.javaType} end = ${column.javaField}Range[0]; + if (#if($column.javaType == 'String')!StringUtils.isEmpty(end) #{else}end != null#end) { + qw.le("${column.columnName}", end); + } + } +#else + ${column.javaType} ${column.javaField}${column.queryField} = query.get${column.capJavaField}${column.queryField}(); + if (#if($column.javaType == 'String')!StringUtils.isEmpty(${column.javaField}${column.queryField})#{else}${column.javaField}${column.queryField} != null#end) { + qw.${column.queryMethod}("${column.columnName}", ${column.javaField}${column.queryField}); + } +#end +#end +#end + return ${className}Mapper.selectList(qw); } /** @@ -60,7 +89,7 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service { @Transactional #end @Override - public int insert${ClassName}(${ClassName} ${className}) { + public int insert(${ClassName} ${className}) { #foreach ($column in $columns) #if($column.javaField == 'createTime') ${className}.setCreateTime(#if($column.javaType == "Date")new Date()#else${column.javaType}.now()#end); @@ -85,17 +114,12 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service { @Transactional #end @Override - public int update${ClassName}(${ClassName} ${className}) { -#foreach ($column in $columns) -#if($column.javaField == 'updateTime') - ${className}.setUpdateTime(DateUtils.getNowDate()); -#end -#end + public int update(${ClassName} ${className}) { #if($table.sub) ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${className}.get${pkColumn.capJavaField}()); insert${subClassName}(${className}); #end - return ${className}Mapper.update(${className}); + return ${className}Mapper.updateById(${className}); } /** @@ -108,11 +132,11 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service { @Transactional #end @Override - public int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s) { + public int deleteBy${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s) { #if($table.sub) ${className}Mapper.delete${subClassName}By${subTableFkClassName}s(${pkColumn.javaField}s); #end - return ${className}Mapper.deleteBy${pkColumn.capJavaField}s(${pkColumn.javaField}s); + return ${className}Mapper.deleteBatchIds(Arrays.asList(${pkColumn.javaField}s)); } /** @@ -122,32 +146,10 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service { * @return 结果 */ @Override - public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}) { + public int deleteBy${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}) { #if($table.sub) ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${pkColumn.javaField}); #end - return ${className}Mapper.deleteBy${pkColumn.capJavaField}(${pkColumn.javaField}); - } -#if($table.sub) - - /** - * 新增${subTable.functionName}信息 - * - * @param ${className} ${functionName}对象 - */ - public void insert${subClassName}(${ClassName} ${className}) { - List<${subClassName}> ${subclassName}List = ${className}.get${subClassName}List(); - ${pkColumn.javaType} ${pkColumn.javaField} = ${className}.get${pkColumn.capJavaField}(); - if (StringUtils.isNotNull(${subclassName}List)) { - List<${subClassName}> list = new ArrayList<${subClassName}>(); - for (${subClassName} ${subclassName} : ${subclassName}List) { - ${subclassName}.set${subTableFkClassName}(${pkColumn.javaField}); - list.add(${subclassName}); - } - if (list.size() > 0) { - ${className}Mapper.batch${subClassName}(list); - } - } + return ${className}Mapper.deleteById(${pkColumn.javaField}); } -#end } diff --git a/ruoyi-generator/src/main/resources/vm/java/vo.java.vm b/ruoyi-generator/src/main/resources/vm/java/vo.java.vm index 1ee4490..5c34821 100644 --- a/ruoyi-generator/src/main/resources/vm/java/vo.java.vm +++ b/ruoyi-generator/src/main/resources/vm/java/vo.java.vm @@ -1,10 +1,12 @@ -package ${packageName}.pojo.vo; +package ${fullPackage}; #foreach ($import in $importList) import ${import}; #end +import com.ruoyi.common.annotation.Excel; +import com.fasterxml.jackson.annotation.JsonFormat; #if(${table.audit} == 1) -import com.bryx.core.common.base.entity.BaseAudit; +import ${env.baseAudit}; #end #if($table.sub) import ${packageName}.pojo.dto.${subClassName}DTO; @@ -18,7 +20,24 @@ import lombok.Data; @Data public class ${ClassName}VO #if(${table.audit} == 1)extends BaseAudit#end { #foreach ($column in $columns) -#if(!$table.isSuperColumn($column.javaField)) +#if(!$table.isSuperColumn($column.javaField) and $column.javaField != "delFlag") + /** $column.columnComment */ +#if($column.list) +#set($parentheseIndex=$column.columnComment.indexOf("(")) +#if($parentheseIndex != -1) + #set($comment=$column.columnComment.substring(0, $parentheseIndex)) +#else + #set($comment=$column.columnComment) +#end +#if($parentheseIndex != -1) + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") +#elseif($column.isDate()) + @JsonFormat(pattern = "${column.dateFormat}") + @Excel(name = "${comment}", width = 30, dateFormat = "${column.dateFormat}") +#else + @Excel(name = "${comment}") +#end +#end private $column.javaType $column.javaField; #end #end diff --git a/ruoyi-generator/src/main/resources/vm/js/api.js.vm b/ruoyi-generator/src/main/resources/vm/js/api.js.vm index 296d41a..5d868f2 100644 --- a/ruoyi-generator/src/main/resources/vm/js/api.js.vm +++ b/ruoyi-generator/src/main/resources/vm/js/api.js.vm @@ -1,18 +1,19 @@ import request from '@/utils/request' // 查询${functionName}列表 -export function list${BusinessName}(query) { +export function list${BusinessName}(query, pageReq) { return request({ - url: '/${moduleName}/${businessName}/list', - method: 'get', - params: query + url: '/${moduleName}/${className}/list', + method: 'post', + data: query, + params: pageReq }) } // 查询${functionName}详细 export function get${BusinessName}(${pkColumn.javaField}) { return request({ - url: '/${moduleName}/${businessName}/' + ${pkColumn.javaField}, + url: '/${moduleName}/${className}/' + ${pkColumn.javaField}, method: 'get' }) } @@ -20,7 +21,7 @@ export function get${BusinessName}(${pkColumn.javaField}) { // 新增${functionName} export function add${BusinessName}(data) { return request({ - url: '/${moduleName}/${businessName}', + url: '/${moduleName}/${className}', method: 'post', data: data }) @@ -29,7 +30,7 @@ export function add${BusinessName}(data) { // 修改${functionName} export function update${BusinessName}(data) { return request({ - url: '/${moduleName}/${businessName}', + url: '/${moduleName}/${className}', method: 'put', data: data }) @@ -38,7 +39,7 @@ export function update${BusinessName}(data) { // 删除${functionName} export function del${BusinessName}(${pkColumn.javaField}) { return request({ - url: '/${moduleName}/${businessName}/' + ${pkColumn.javaField}, + url: '/${moduleName}/${className}/' + ${pkColumn.javaField}, method: 'delete' }) } @@ -46,8 +47,8 @@ export function del${BusinessName}(${pkColumn.javaField}) { // 导出${functionName} export function export${BusinessName}(query) { return request({ - url: '/${moduleName}/${businessName}/export', + url: '/${moduleName}/${className}/export', method: 'get', params: query }) -} \ No newline at end of file +} diff --git a/ruoyi-generator/src/main/resources/vm/sql/sql.vm b/ruoyi-generator/src/main/resources/vm/sql/sql.vm index 3ff8c4f..c1ff1e6 100644 --- a/ruoyi-generator/src/main/resources/vm/sql/sql.vm +++ b/ruoyi-generator/src/main/resources/vm/sql/sql.vm @@ -1,22 +1,22 @@ -- 菜单 SQL insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) -values('${functionName}', '${parentMenuId}', '1', '${businessName}', '${moduleName}/${businessName}/index', 1, 0, 'C', '0', '0', '${permissionPrefix}:list', '#', 1, sysdate(), '', null, '${functionName}菜单'); +values('${functionName}', '${parentMenuId}', '1', '${className}', '${moduleName}/${className}/index', 1, 0, 'C', '0', '0', '${permissionPrefix}:list', '#', 1, sysdate(), 1, null, '${functionName}菜单'); -- 按钮父菜单ID SELECT @parentId := LAST_INSERT_ID(); -- 按钮 SQL insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) -values('${functionName}查询', @parentId, '1', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:query', '#', 1, sysdate(), '', null, ''); +values('${functionName}查询', @parentId, '1', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:query', '#', 1, sysdate(), 1, null, ''); insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) -values('${functionName}新增', @parentId, '2', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:add', '#', 1, sysdate(), '', null, ''); +values('${functionName}新增', @parentId, '2', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:add', '#', 1, sysdate(), 1, null, ''); insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) -values('${functionName}修改', @parentId, '3', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:edit', '#', 1, sysdate(), '', null, ''); +values('${functionName}修改', @parentId, '3', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:edit', '#', 1, sysdate(), 1, null, ''); insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) -values('${functionName}删除', @parentId, '4', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:remove', '#', 1, sysdate(), '', null, ''); +values('${functionName}删除', @parentId, '4', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:remove', '#', 1, sysdate(), 1, null, ''); insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) -values('${functionName}导出', @parentId, '5', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:export', '#', 1, sysdate(), '', null, ''); +values('${functionName}导出', @parentId, '5', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:export', '#', 1, sysdate(), 1, null, ''); diff --git a/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm b/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm index 7a38d79..2e0fca6 100644 --- a/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm +++ b/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm @@ -18,7 +18,7 @@ #if($column.htmlType == "input") #elseif($column.htmlType == "datetime" || $column.htmlType == "date") -#set($valueFormat = 'yyyy-MM-dd HH:mm:ss') +#set($valueFormat = 'yyyy-MM-ddTHH:mm:ss') #if($column.htmlType == "date") #set($valueFormat = 'yyyy-MM-dd') #end @@ -143,7 +143,7 @@ - + #set($count0 = 0) #foreach($column in $columns) @@ -155,7 +155,7 @@ #set($comment=$column.columnComment) #end #if($column.pk) - +## id字段不展示 #elseif($column.list) #if($column.htmlType == "datetime" || $column.htmlType == "date" || $column.htmlType == "time") #set($valueFormat = '') @@ -199,8 +199,8 @@ >删除 - - + + #foreach($column in $columns) #set($field=$column.javaField) -#if($column.insert && !$column.pk) +#if($column.insert && !$column.pk && $field!="delFlag") #if(($column.usableColumn) || (!$column.superColumn)) #set($parentheseIndex=$column.columnComment.indexOf("(")) #if($parentheseIndex != -1) @@ -225,7 +225,7 @@ #set($dictType=$column.dictType) #if($column.htmlType == "input") - + #elseif($column.htmlType == "imageUpload") @@ -290,7 +290,7 @@ #elseif($column.htmlType == "datetime" || $column.htmlType == "date" || $column.htmlType == "time") -#set($valueFormat = 'yyyy-MM-dd HH:mm:ss') +#set($valueFormat = 'yyyy-MM-ddTHH:mm:ss') #if($column.htmlType == "date") #set($valueFormat = 'yyyy-MM-dd') #elseif($column.htmlType == "time") @@ -322,7 +322,7 @@ 删除 - + #foreach($column in $subTable.columns) @@ -337,12 +337,12 @@ #elseif($column.list && "" != $javaField) #end #end - + #end