diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java index ebf2376a..516d1023 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java @@ -65,9 +65,9 @@ public class BaseController * 响应请求分页数据 */ @SuppressWarnings({ "rawtypes", "unchecked" }) - protected TableDataInfo getDataTable(List list) + protected TableDataInfo getDataTable(List list) { - TableDataInfo rspData = new TableDataInfo(); + TableDataInfo rspData = new TableDataInfo(); rspData.setCode(HttpStatus.HTTP_OK); rspData.setMsg("查询成功"); rspData.setRows(list); @@ -81,7 +81,7 @@ public class BaseController * @param rows 影响行数 * @return 操作结果 */ - protected AjaxResult toAjax(int rows) + protected AjaxResult toAjax(int rows) { return rows > 0 ? AjaxResult.success() : AjaxResult.error(); } @@ -92,7 +92,7 @@ public class BaseController * @param result 结果 * @return 操作结果 */ - protected AjaxResult toAjax(boolean result) + protected AjaxResult toAjax(boolean result) { return result ? success() : error(); } @@ -100,7 +100,7 @@ public class BaseController /** * 返回成功 */ - public AjaxResult success() + public AjaxResult success() { return AjaxResult.success(); } @@ -108,7 +108,7 @@ public class BaseController /** * 返回失败消息 */ - public AjaxResult error() + public AjaxResult error() { return AjaxResult.error(); } @@ -116,7 +116,7 @@ public class BaseController /** * 返回成功消息 */ - public AjaxResult success(String message) + public AjaxResult success(String message) { return AjaxResult.success(message); } @@ -124,7 +124,7 @@ public class BaseController /** * 返回失败消息 */ - public AjaxResult error(String message) + public AjaxResult error(String message) { return AjaxResult.error(message); } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java index 5609a8f6..a7d2297b 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java @@ -2,6 +2,7 @@ package com.ruoyi.common.core.domain; import cn.hutool.core.lang.Validator; import cn.hutool.http.HttpStatus; +import lombok.Data; import java.util.HashMap; @@ -10,7 +11,7 @@ import java.util.HashMap; * * @author ruoyi */ -public class AjaxResult extends HashMap +public class AjaxResult extends HashMap { private static final long serialVersionUID = 1L; @@ -23,6 +24,17 @@ public class AjaxResult extends HashMap /** 数据对象 */ public static final String DATA_TAG = "data"; + public Integer getCode(){ + return (Integer) super.get(CODE_TAG); + } + + public String getMsg(){ + return (String) super.get(MSG_TAG); + } + public T getData(){ + return (T) super.get(DATA_TAG); + } + /** * 初始化一个新创建的 AjaxResult 对象,使其表示一个空消息。 */ @@ -49,7 +61,7 @@ public class AjaxResult extends HashMap * @param msg 返回内容 * @param data 数据对象 */ - public AjaxResult(int code, String msg, Object data) + public AjaxResult(int code, String msg, T data) { super.put(CODE_TAG, code); super.put(MSG_TAG, msg); @@ -64,7 +76,7 @@ public class AjaxResult extends HashMap * * @return 成功消息 */ - public static AjaxResult success() + public static AjaxResult success() { return AjaxResult.success("操作成功"); } @@ -74,7 +86,7 @@ public class AjaxResult extends HashMap * * @return 成功消息 */ - public static AjaxResult success(Object data) + public static AjaxResult success(T data) { return AjaxResult.success("操作成功", data); } @@ -85,7 +97,7 @@ public class AjaxResult extends HashMap * @param msg 返回内容 * @return 成功消息 */ - public static AjaxResult success(String msg) + public static AjaxResult success(String msg) { return AjaxResult.success(msg, null); } @@ -97,7 +109,7 @@ public class AjaxResult extends HashMap * @param data 数据对象 * @return 成功消息 */ - public static AjaxResult success(String msg, Object data) + public static AjaxResult success(String msg, T data) { return new AjaxResult(HttpStatus.HTTP_OK, msg, data); } @@ -107,7 +119,7 @@ public class AjaxResult extends HashMap * * @return */ - public static AjaxResult error() + public static AjaxResult error() { return AjaxResult.error("操作失败"); } @@ -118,7 +130,7 @@ public class AjaxResult extends HashMap * @param msg 返回内容 * @return 警告消息 */ - public static AjaxResult error(String msg) + public static AjaxResult error(String msg) { return AjaxResult.error(msg, null); } @@ -130,7 +142,7 @@ public class AjaxResult extends HashMap * @param data 数据对象 * @return 警告消息 */ - public static AjaxResult error(String msg, Object data) + public static AjaxResult error(String msg, T data) { return new AjaxResult(HttpStatus.HTTP_INTERNAL_ERROR, msg, data); } @@ -142,7 +154,7 @@ public class AjaxResult extends HashMap * @param msg 返回内容 * @return 警告消息 */ - public static AjaxResult error(int code, String msg) + public static AjaxResult error(int code, String msg) { return new AjaxResult(code, msg, null); } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java index 847685ba..71aed2cc 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java @@ -8,7 +8,7 @@ import java.util.List; * * @author ruoyi */ -public class TableDataInfo implements Serializable +public class TableDataInfo implements Serializable { private static final long serialVersionUID = 1L; @@ -16,7 +16,7 @@ public class TableDataInfo implements Serializable private long total; /** 列表数据 */ - private List rows; + private List rows; /** 消息状态码 */ private int code; @@ -37,7 +37,7 @@ public class TableDataInfo implements Serializable * @param list 列表数据 * @param total 总记录数 */ - public TableDataInfo(List list, int total) + public TableDataInfo(List list, int total) { this.rows = list; this.total = total; @@ -53,12 +53,12 @@ public class TableDataInfo implements Serializable this.total = total; } - public List getRows() + public List getRows() { return rows; } - public void setRows(List rows) + public void setRows(List rows) { this.rows = rows; } diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java index c274e36d..fb9c7f7b 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java @@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerIntercep import com.baomidou.mybatisplus.extension.plugins.inner.IllegalSQLInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import com.ruoyi.framework.mybatisplus.CreateAndUpdateMetaObjectHandler; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.annotation.EnableTransactionManagement; @@ -83,10 +84,10 @@ public class MybatisPlusConfig { * 元对象字段填充控制器 * https://baomidou.com/guide/auto-fill-metainfo.html */ -// @Bean -// public MetaObjectHandler metaObjectHandler() { -// return new MyMetaObjectHandler(); -// } + @Bean + public MetaObjectHandler metaObjectHandler() { + return new CreateAndUpdateMetaObjectHandler(); + } /** * sql注入器配置 diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/mybatisplus/CreateAndUpdateMetaObjectHandler.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/mybatisplus/CreateAndUpdateMetaObjectHandler.java new file mode 100644 index 00000000..d4ef1449 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/mybatisplus/CreateAndUpdateMetaObjectHandler.java @@ -0,0 +1,67 @@ +package com.ruoyi.framework.mybatisplus; + +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; +import com.ruoyi.common.utils.SecurityUtils; +import org.apache.ibatis.reflection.MetaObject; + +import java.util.Date; + +/** + * @author woo + * @date 2021/3/11 + */ +public class CreateAndUpdateMetaObjectHandler implements MetaObjectHandler { + @Override + public void insertFill(MetaObject metaObject) { + //region 处理创建人信息 + Object createBy = this.getFieldValByName("createBy", metaObject); + Object createTime = this.getFieldValByName("createTime", metaObject); + if (createBy == null) { + createBy = SecurityUtils.getUsername(); + this.setFieldValByName("createBy", createBy, metaObject); + } + if (createTime == null) { + createTime = new Date(); + this.setFieldValByName("createTime", createTime, metaObject); + } + //endregion + //region 处理修改人信息 + Object updateBy = this.getFieldValByName("updateBy", metaObject); + Object updateTime = this.getFieldValByName("updateTime", metaObject); + if (updateBy == null) { + updateBy = createBy; + this.setFieldValByName("updateBy", updateBy, metaObject); + } + if (updateTime == null) { + updateTime = createTime; + this.setFieldValByName("updateTime", updateTime, metaObject); + } + //endregion + } + + @Override + public void updateFill(MetaObject metaObject) { + //region 处理修改人信息 + Object updateBy = this.getFieldValByName("updateBy", metaObject); + Object updateTime = this.getFieldValByName("updateTime", metaObject); + if (updateBy == null) { + updateBy = SecurityUtils.getUsername(); + this.setFieldValByName("updateBy", updateBy, metaObject); + } + if (updateTime == null) { + updateTime = new Date(); + this.setFieldValByName("updateTime", updateTime, metaObject); + } + //endregion + } + + @Override + public boolean openInsertFill() { + return true; + } + + @Override + public boolean openUpdateFill() { + return true; + } +} 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 81d0d479..69421cc0 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 @@ -129,6 +129,10 @@ public class VelocityUtils { List templates = new ArrayList(); templates.add("vm/java/domain.java.vm"); + templates.add("vm/java/vo.java.vm"); + templates.add("vm/java/queryBo.java.vm"); + templates.add("vm/java/addBo.java.vm"); + templates.add("vm/java/editBo.java.vm"); templates.add("vm/java/mapper.java.vm"); templates.add("vm/java/service.java.vm"); templates.add("vm/java/serviceImpl.java.vm"); @@ -176,6 +180,22 @@ public class VelocityUtils { fileName = StrUtil.format("{}/domain/{}.java", javaPath, className); } + if (template.contains("vo.java.vm")) + { + fileName = StrUtil.format("{}/vo/{}Vo.java", javaPath, className); + } + if (template.contains("queryBo.java.vm")) + { + fileName = StrUtil.format("{}/bo/{}QueryBo.java", javaPath, className); + } + if (template.contains("addBo.java.vm")) + { + fileName = StrUtil.format("{}/bo/{}AddBo.java", javaPath, className); + } + if (template.contains("editBo.java.vm")) + { + fileName = StrUtil.format("{}/bo/{}EditBo.java", javaPath, className); + } if (template.contains("sub-domain.java.vm") && StrUtil.equals(GenConstants.TPL_SUB, genTable.getTplCategory())) { fileName = StrUtil.format("{}/domain/{}.java", javaPath, genTable.getSubTable().getClassName()); diff --git a/ruoyi-generator/src/main/resources/vm/java/addBo.java.vm b/ruoyi-generator/src/main/resources/vm/java/addBo.java.vm new file mode 100644 index 00000000..2f0770fe --- /dev/null +++ b/ruoyi-generator/src/main/resources/vm/java/addBo.java.vm @@ -0,0 +1,36 @@ +package ${packageName}.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +#foreach ($import in $importList) +import ${import}; +#end + +/** + * ${functionName}添加对象 ${tableName} + * + * @author ${author} + * @date ${datetime} + */ +@Data +@ApiModel("${functionName}添加对象") +public class ${ClassName}AddBo { + private static final long serialVersionUID = 1L; + +#foreach ($column in $columns) +#if($column.isInsert && $column.isPk!=1) + /** $column.columnComment */ + @ApiModelProperty("$column.columnComment") + private $column.javaType $column.javaField; +#end +#end +#if($table.sub) + + /** $table.subTable.functionName信息 */ + @ApiModelProperty("$table.subTable.functionName") + private List<${subClassName}> ${subclassName}List; +#end +} 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 4e4309d3..46f5617a 100644 --- a/ruoyi-generator/src/main/resources/vm/java/controller.java.vm +++ b/ruoyi-generator/src/main/resources/vm/java/controller.java.vm @@ -18,13 +18,18 @@ 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}.vo.${ClassName}Vo; +import ${packageName}.bo.${ClassName}QueryBo; +import ${packageName}.bo.${ClassName}AddBo; +import ${packageName}.bo.${ClassName}EditBo; import ${packageName}.service.I${ClassName}Service; import com.ruoyi.common.utils.poi.ExcelUtil; #if($table.crud || $table.sub) import com.ruoyi.common.core.page.TableDataInfo; #elseif($table.tree) #end +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; /** * ${functionName}Controller @@ -32,6 +37,7 @@ import com.ruoyi.common.core.page.TableDataInfo; * @author ${author} * @date ${datetime} */ +@Api(value = "${functionName}控制器", tags = {"${functionName}管理"}) @RequiredArgsConstructor(onConstructor_ = @Autowired) @RestController @RequestMapping("/${moduleName}/${businessName}" ) @@ -42,17 +48,18 @@ public class ${ClassName}Controller extends BaseController { /** * 查询${functionName}列表 */ + @ApiOperation("查询${functionName}列表") @PreAuthorize("@ss.hasPermi('${permissionPrefix}:list')") @GetMapping("/list") #if($table.crud || $table.sub) - public TableDataInfo list(${ClassName} ${className}) { + public TableDataInfo<${ClassName}Vo> list(${ClassName}QueryBo bo) { startPage(); - List<${ClassName}> list = i${ClassName}Service.queryList(${className}); + List<${ClassName}Vo> list = i${ClassName}Service.queryList(bo); return getDataTable(list); } #elseif($table.tree) - public AjaxResult list(${ClassName} ${className}) { - List<${ClassName}> list = i${ClassName}Service.queryList(${className}); + public AjaxResult<${ClassName}Vo> list(${ClassName}QueryBo bo) { + List<${ClassName}Vo> list = i${ClassName}Service.queryList(bo); return AjaxResult.success(list); } #end @@ -60,51 +67,56 @@ public class ${ClassName}Controller extends BaseController { /** * 导出${functionName}列表 */ + @ApiOperation("导出${functionName}列表") @PreAuthorize("@ss.hasPermi('${permissionPrefix}:export')" ) @Log(title = "${functionName}" , businessType = BusinessType.EXPORT) @GetMapping("/export" ) - public AjaxResult export(${ClassName} ${className}) { - List<${ClassName}> list = i${ClassName}Service.queryList(${className}); - ExcelUtil<${ClassName}> util = new ExcelUtil<${ClassName}>(${ClassName}.class); + public AjaxResult<${ClassName}Vo> export(${ClassName}QueryBo bo) { + List<${ClassName}Vo> list = i${ClassName}Service.queryList(bo); + ExcelUtil<${ClassName}Vo> util = new ExcelUtil<${ClassName}Vo>(${ClassName}Vo.class); return util.exportExcel(list, "${businessName}" ); } /** * 获取${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(i${ClassName}Service.getById(${pkColumn.javaField})); + public AjaxResult<${ClassName}Vo> getInfo(@PathVariable("${pkColumn.javaField}" ) ${pkColumn.javaType} ${pkColumn.javaField}) { + return AjaxResult.success(i${ClassName}Service.queryById(${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(i${ClassName}Service.save(${className}) ? 1 : 0); + public AjaxResult add(@RequestBody ${ClassName}AddBo bo) { + return toAjax(i${ClassName}Service.insertByAddBo(bo) ? 1 : 0); } /** * 修改${functionName} */ + @ApiOperation("修改${functionName}") @PreAuthorize("@ss.hasPermi('${permissionPrefix}:edit')" ) @Log(title = "${functionName}" , businessType = BusinessType.UPDATE) @PutMapping - public AjaxResult edit(@RequestBody ${ClassName} ${className}) { - return toAjax(i${ClassName}Service.updateById(${className}) ? 1 : 0); + public AjaxResult edit(@RequestBody ${ClassName}EditBo bo) { + return toAjax(i${ClassName}Service.updateByEditBo(bo) ? 1 : 0); } /** * 删除${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(i${ClassName}Service.removeByIds(Arrays.asList(${pkColumn.javaField}s)) ? 1 : 0); + public AjaxResult remove(@PathVariable ${pkColumn.javaType} ${pkColumn.javaField}s) { + return toAjax(i${ClassName}Service.deleteWithValidByIds(Arrays.asList(${pkColumn.javaField}s), true) ? 1 : 0); } } 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 028b1eaf..6fd46957 100644 --- a/ruoyi-generator/src/main/resources/vm/java/domain.java.vm +++ b/ruoyi-generator/src/main/resources/vm/java/domain.java.vm @@ -1,14 +1,9 @@ package ${packageName}.domain; -import com.fasterxml.jackson.annotation.JsonFormat; +import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; -import com.ruoyi.common.annotation.Excel; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; import java.io.Serializable; import java.util.Date; import java.util.Map; @@ -32,30 +27,19 @@ private static final long serialVersionUID=1L; #foreach ($column in $columns) /** $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) +#if($column.javaField=="createBy"||$column.javaField=="createTime") + @TableField(fill = FieldFill.INSERT) #end -#if($parentheseIndex != -1) - @Excel(name = "${comment}" , readConverterExp = "$column.readConverterExp()") -#elseif($column.javaType == 'Date') - @Excel(name = "${comment}" , width = 30, dateFormat = "yyyy-MM-dd") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") -#else - @Excel(name = "${comment}") +#if($column.javaField=="updateBy"||$column.javaField=="updateTime") + @TableField(fill = FieldFill.INSERT_UPDATE) #end +#if($column.javaField=='delFlag') + @TableLogic #end #if($column.isPk==1) @TableId(value = "$column.columnName") - private $column.javaType $column.javaField; -#else - private $column.javaType $column.javaField; #end + private $column.javaType $column.javaField; #end - @TableField(exist = false) - private Map params = new HashMap<>(); } diff --git a/ruoyi-generator/src/main/resources/vm/java/editBo.java.vm b/ruoyi-generator/src/main/resources/vm/java/editBo.java.vm new file mode 100644 index 00000000..a0fac483 --- /dev/null +++ b/ruoyi-generator/src/main/resources/vm/java/editBo.java.vm @@ -0,0 +1,36 @@ +package ${packageName}.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +#foreach ($import in $importList) +import ${import}; +#end + +/** + * ${functionName}编辑对象 ${tableName} + * + * @author ${author} + * @date ${datetime} + */ +@Data +@ApiModel("${functionName}编辑对象") +public class ${ClassName}EditBo { + private static final long serialVersionUID = 1L; + +#foreach ($column in $columns) +#if($column.isEdit) + + /** $column.columnComment */ + @ApiModelProperty("$column.columnComment") + private $column.javaType $column.javaField; +#end +#end +#if($table.sub) + + /** $table.subTable.functionName信息 */ + @ApiModelProperty("$table.subTable.functionName") + private List<${subClassName}> ${subclassName}List; +#end +} diff --git a/ruoyi-generator/src/main/resources/vm/java/queryBo.java.vm b/ruoyi-generator/src/main/resources/vm/java/queryBo.java.vm new file mode 100644 index 00000000..7452cfbd --- /dev/null +++ b/ruoyi-generator/src/main/resources/vm/java/queryBo.java.vm @@ -0,0 +1,42 @@ +package ${packageName}.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +#foreach ($import in $importList) +import ${import}; +#end + +/** + * ${functionName}分页查询对象 ${tableName} + * + * @author ${author} + * @date ${datetime} + */ +@Data +@ApiModel("${functionName}分页查询对象") +public class ${ClassName}QueryBo { + private static final long serialVersionUID = 1L; + /** 分页大小 */ + @ApiModelProperty("分页大小") + private Integer pageSize; + /** 当前页数 */ + @ApiModelProperty("当前页数") + private Integer pageNum; + /** 排序列 */ + @ApiModelProperty("排序列") + private String orderByColumn; + /** 排序的方向desc或者asc */ + @ApiModelProperty(value = "排序的方向", example = "asc,desc") + private String isAsc; + + +#foreach ($column in $columns) +#if(!$table.isSuperColumn($column.javaField) && $column.query) + /** $column.columnComment */ + @ApiModelProperty("$column.columnComment") + private $column.javaType $column.javaField; +#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 97fe2d5c..6a5ce974 100644 --- a/ruoyi-generator/src/main/resources/vm/java/service.java.vm +++ b/ruoyi-generator/src/main/resources/vm/java/service.java.vm @@ -1,7 +1,13 @@ package ${packageName}.service; import ${packageName}.domain.${ClassName}; +import ${packageName}.vo.${ClassName}Vo; +import ${packageName}.bo.${ClassName}QueryBo; +import ${packageName}.bo.${ClassName}AddBo; +import ${packageName}.bo.${ClassName}EditBo; import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.Collection; import java.util.List; /** @@ -11,9 +17,36 @@ import java.util.List; * @date ${datetime} */ public interface I${ClassName}Service extends IService<${ClassName}> { + /** + * 查询单个 + * @return + */ + ${ClassName}Vo queryById(${pkColumn.javaType} ${pkColumn.javaField}); - /** - * 查询列表 - */ - List<${ClassName}> queryList(${ClassName} ${className}); + /** + * 查询列表 + */ + List<${ClassName}Vo> queryList(${ClassName}QueryBo bo); + + /** + * 根据新增业务对象插入${functionName} + * @param bo ${functionName}新增业务对象 + * @return + */ + Boolean insertByAddBo(${ClassName}AddBo bo); + + /** + * 根据编辑业务对象修改${functionName} + * @param bo ${functionName}编辑业务对象 + * @return + */ + Boolean updateByEditBo(${ClassName}EditBo bo); + + /** + * 校验并删除数据 + * @param ids 主键集合 + * @param isValid 是否校验,true-删除前校验,false-不校验 + * @return + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); } 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 f1497634..6a52f893 100644 --- a/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm +++ b/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm @@ -1,16 +1,23 @@ package ${packageName}.service.impl; +import cn.hutool.core.bean.BeanUtil; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import org.apache.commons.lang3.StringUtils; -import ${packageName}.mapper.${ClassName}Mapper; +import ${packageName}.bo.${ClassName}AddBo; +import ${packageName}.bo.${ClassName}QueryBo; +import ${packageName}.bo.${ClassName}EditBo; import ${packageName}.domain.${ClassName}; +import ${packageName}.mapper.${ClassName}Mapper; +import ${packageName}.vo.${ClassName}Vo; import ${packageName}.service.I${ClassName}Service; +import java.util.Collection; +import java.util.Collections; import java.util.List; -import java.util.Map; +import java.util.stream.Collectors; /** * ${functionName}Service业务层处理 @@ -22,93 +29,80 @@ import java.util.Map; public class ${ClassName}ServiceImpl extends ServiceImpl<${ClassName}Mapper, ${ClassName}> implements I${ClassName}Service { @Override - public List<${ClassName}> queryList(${ClassName} ${className}) { + public ${ClassName}Vo queryById(${pkColumn.javaType} ${pkColumn.javaField}){ + ${ClassName} db = this.baseMapper.selectById(${pkColumn.javaField}); + return entity2Vo(Collections.singletonList(db)).get(0); + } + + @Override + public List<${ClassName}Vo> queryList(${ClassName}QueryBo bo) { LambdaQueryWrapper<${ClassName}> lqw = Wrappers.lambdaQuery(); #foreach($column in $columns) +#if($column.query) #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") +#set($mpMethod=$column.queryType.toLowerCase()) +#if($queryType != 'BETWEEN') #if($javaType == 'String') - if (StringUtils.isNotBlank(${className}.get$AttrName())){ - lqw.eq(${ClassName}::get$AttrName ,${className}.get$AttrName()); - } +#set($condition='StringUtils.isNotBlank(bo.get'+$AttrName+'())') #else - if (${className}.get$AttrName() != null){ - lqw.eq(${ClassName}::get$AttrName ,${className}.get$AttrName()); - } +#set($condition='bo.get'+$AttrName+'() != null') #end -#elseif($queryType == "NE") -#if($javaType == 'String') - if (StringUtils.isNotBlank(${className}.get$AttrName())){ - lqw.ne(${ClassName}::get$AttrName ,${className}.get$AttrName()); - } + lqw.$mpMethod($condition, ${ClassName}::get$AttrName, bo.get$AttrName()); #else - if (${className}.get$AttrName() != null){ - lqw.ne(${ClassName}::get$AttrName ,${className}.get$AttrName()); - } -#end -#elseif($queryType == "GT") -#if($javaType == 'String') - if (StringUtils.isNotBlank(${className}.get$AttrName())){ - lqw.gt(${ClassName}::get$AttrName ,${className}.get$AttrName()); - } -#else - if (${className}.get$AttrName() != null){ - lqw.gt(${ClassName}::get$AttrName ,${className}.get$AttrName()); - } -#end -#elseif($queryType == "GTE") -#if($javaType == 'String') - if (StringUtils.isNotBlank(${className}.get$AttrName())){ - lqw.ge(${ClassName}::get$AttrName ,${className}.get$AttrName()); - } -#else - if (${className}.get$AttrName() != null){ - lqw.ge(${ClassName}::get$AttrName ,${className}.get$AttrName()); - } -#end -#elseif($queryType == "LT") -#if($javaType == 'String') - if (StringUtils.isNotBlank(${className}.get$AttrName())){ - lqw.lt(${ClassName}::get$AttrName ,${className}.get$AttrName()); - } -#else - if (${className}.get$AttrName() != null){ - lqw.lt(${ClassName}::get$AttrName ,${className}.get$AttrName()); - } -#end -#elseif($queryType == "LTE") -#if($javaType == 'String') - if (StringUtils.isNotBlank(${className}.get$AttrName())){ - lqw.le(${ClassName}::get$AttrName ,${className}.get$AttrName()); - } -#else - if (${className}.get$AttrName() != null){ - lqw.le(${ClassName}::get$AttrName ,${className}.get$AttrName()); - } -#end -#elseif($queryType == "LIKE") -#if($javaType == 'String') - if (StringUtils.isNotBlank(${className}.get$AttrName())){ - lqw.like(${ClassName}::get$AttrName ,${className}.get$AttrName()); - } -#else - if (${className}.get$AttrName() != null){ - lqw.like(${ClassName}::get$AttrName ,${className}.get$AttrName()); - } -#end -#elseif($queryType == "BETWEEN") Map params = ${className}.getParams(); if (params.get("begin$AttrName") != null && params.get("end$AttrName") != null) { - lqw.between(${ClassName}::get$AttrName ,params.get("begin$AttrName"),params.get("end$AttrName")); + lqw.between(${ClassName}::get$AttrName ,params.get("begin$AttrName"), params.get("end$AttrName")); } #end #end #end - return this.list(lqw); + return entity2Vo(this.list(lqw)); + } + + /** + * 实体类转化成视图对象 + * + * @param collection 实体类集合 + * @return + */ + private List<${ClassName}Vo> entity2Vo(Collection<${ClassName}> collection) { + return collection.stream() + .map(any -> BeanUtil.toBean(any, ${ClassName}Vo.class)) + .collect(Collectors.toList()); + } + + @Override + public Boolean insertByAddBo(${ClassName}AddBo bo) { + ${ClassName} add = BeanUtil.toBean(bo, ${ClassName}.class); + validEntityBeforeSave(add); + return this.save(add); + } + + @Override + public Boolean updateByEditBo(${ClassName}EditBo bo) { + ${ClassName} update = BeanUtil.toBean(bo, ${ClassName}.class); + validEntityBeforeSave(update); + return this.updateById(update); + } + + /** + * 保存前的数据校验 + * + * @param entity 实体类数据 + */ + private void validEntityBeforeSave(${ClassName} entity){ + //TODO 做一些数据校验,如唯一约束 + } + + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return this.removeByIds(ids); } } diff --git a/ruoyi-generator/src/main/resources/vm/java/vo.java.vm b/ruoyi-generator/src/main/resources/vm/java/vo.java.vm new file mode 100644 index 00000000..8546f5cf --- /dev/null +++ b/ruoyi-generator/src/main/resources/vm/java/vo.java.vm @@ -0,0 +1,51 @@ +package ${packageName}.vo; + +import com.ruoyi.common.annotation.Excel; +import com.fasterxml.jackson.annotation.JsonFormat; +#foreach ($import in $importList) +import ${import}; +#end +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + + +/** + * ${functionName}视图对象 mall_package + * + * @author ${author} + * @date ${datetime} + */ +@Data +@ApiModel("${functionName}视图对象") +public class ${ClassName}Vo { + private static final long serialVersionUID = 1L; + + /** $pkColumn.columnComment */ + @ApiModelProperty("$pkColumn.columnComment") + private ${pkColumn.javaType} ${pkColumn.javaField}; + +#foreach ($column in $columns) +#if($column.isList) + /** $column.columnComment */ +#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.javaType == 'Date') + @Excel(name = "${comment}" , width = 30, dateFormat = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") +#else + @Excel(name = "${comment}") +#end + @ApiModelProperty("$column.columnComment") + private $column.javaType $column.javaField; +#end +#end + +}