!11 [功能] 拆分出Vo,QueryBo,AddBo,EditBo等领域对象
* [修改] 错误引入的无用导包删除
* [新增] 增加Vo,QueryBo,AddBo,EditBo等视图,并调整controller,service的调用代码
* [新增] 增加CreateAndUpdateMetaObjectHandler,配合fill注解,实现创建和修改人的自动设置,减少重复代码
已修改9个文件
已添加5个文件
576 ■■■■ 文件已修改
ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-framework/src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-framework/src/main/java/com/ruoyi/framework/mybatisplus/CreateAndUpdateMetaObjectHandler.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-generator/src/main/resources/vm/java/addBo.java.vm 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-generator/src/main/resources/vm/java/controller.java.vm 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-generator/src/main/resources/vm/java/domain.java.vm 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-generator/src/main/resources/vm/java/editBo.java.vm 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-generator/src/main/resources/vm/java/queryBo.java.vm 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-generator/src/main/resources/vm/java/service.java.vm 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm 140 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-generator/src/main/resources/vm/java/vo.java.vm 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java
@@ -65,9 +65,9 @@
     * å“åº”请求分页数据
     */
    @SuppressWarnings({ "rawtypes", "unchecked" })
    protected TableDataInfo getDataTable(List<?> list)
    protected <T> TableDataInfo<T> getDataTable(List<T> list)
    {
        TableDataInfo rspData = new TableDataInfo();
        TableDataInfo<T> rspData = new TableDataInfo();
        rspData.setCode(HttpStatus.HTTP_OK);
        rspData.setMsg("查询成功");
        rspData.setRows(list);
@@ -81,7 +81,7 @@
     * @param rows å½±å“è¡Œæ•°
     * @return æ“ä½œç»“æžœ
     */
    protected AjaxResult toAjax(int rows)
    protected AjaxResult<Void> toAjax(int rows)
    {
        return rows > 0 ? AjaxResult.success() : AjaxResult.error();
    }
@@ -92,7 +92,7 @@
     * @param result ç»“æžœ
     * @return æ“ä½œç»“æžœ
     */
    protected AjaxResult toAjax(boolean result)
    protected AjaxResult<Void> toAjax(boolean result)
    {
        return result ? success() : error();
    }
@@ -100,7 +100,7 @@
    /**
     * è¿”回成功
     */
    public AjaxResult success()
    public AjaxResult<Void> success()
    {
        return AjaxResult.success();
    }
@@ -108,7 +108,7 @@
    /**
     * è¿”回失败消息
     */
    public AjaxResult error()
    public AjaxResult<Void> error()
    {
        return AjaxResult.error();
    }
@@ -116,7 +116,7 @@
    /**
     * è¿”回成功消息
     */
    public AjaxResult success(String message)
    public AjaxResult<Void> success(String message)
    {
        return AjaxResult.success(message);
    }
@@ -124,7 +124,7 @@
    /**
     * è¿”回失败消息
     */
    public AjaxResult error(String message)
    public AjaxResult<Void> error(String message)
    {
        return AjaxResult.error(message);
    }
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java
@@ -2,6 +2,7 @@
import cn.hutool.core.lang.Validator;
import cn.hutool.http.HttpStatus;
import lombok.Data;
import java.util.HashMap;
@@ -10,7 +11,7 @@
 * 
 * @author ruoyi
 */
public class AjaxResult extends HashMap<String, Object>
public class AjaxResult<T> extends HashMap<String, Object>
{
    private static final long serialVersionUID = 1L;
@@ -22,6 +23,17 @@
    /** æ•°æ®å¯¹è±¡ */
    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 @@
     * @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 @@
     * 
     * @return æˆåŠŸæ¶ˆæ¯
     */
    public static AjaxResult success()
    public static AjaxResult<Void> success()
    {
        return AjaxResult.success("操作成功");
    }
@@ -74,7 +86,7 @@
     * 
     * @return æˆåŠŸæ¶ˆæ¯
     */
    public static AjaxResult success(Object data)
    public static <T> AjaxResult<T> success(T data)
    {
        return AjaxResult.success("操作成功", data);
    }
@@ -85,7 +97,7 @@
     * @param msg è¿”回内容
     * @return æˆåŠŸæ¶ˆæ¯
     */
    public static AjaxResult success(String msg)
    public static AjaxResult<Void> success(String msg)
    {
        return AjaxResult.success(msg, null);
    }
@@ -97,7 +109,7 @@
     * @param data æ•°æ®å¯¹è±¡
     * @return æˆåŠŸæ¶ˆæ¯
     */
    public static AjaxResult success(String msg, Object data)
    public static <T> AjaxResult<T> success(String msg, T data)
    {
        return new AjaxResult(HttpStatus.HTTP_OK, msg, data);
    }
@@ -107,7 +119,7 @@
     * 
     * @return
     */
    public static AjaxResult error()
    public static AjaxResult<Void> error()
    {
        return AjaxResult.error("操作失败");
    }
@@ -118,7 +130,7 @@
     * @param msg è¿”回内容
     * @return è­¦å‘Šæ¶ˆæ¯
     */
    public static AjaxResult error(String msg)
    public static AjaxResult<Void> error(String msg)
    {
        return AjaxResult.error(msg, null);
    }
@@ -130,7 +142,7 @@
     * @param data æ•°æ®å¯¹è±¡
     * @return è­¦å‘Šæ¶ˆæ¯
     */
    public static AjaxResult error(String msg, Object data)
    public static <T> AjaxResult<T> error(String msg, T data)
    {
        return new AjaxResult(HttpStatus.HTTP_INTERNAL_ERROR, msg, data);
    }
@@ -142,7 +154,7 @@
     * @param msg è¿”回内容
     * @return è­¦å‘Šæ¶ˆæ¯
     */
    public static AjaxResult error(int code, String msg)
    public static AjaxResult<Void> error(int code, String msg)
    {
        return new AjaxResult(code, msg, null);
    }
ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java
@@ -8,7 +8,7 @@
 * 
 * @author ruoyi
 */
public class TableDataInfo implements Serializable
public class TableDataInfo<T> implements Serializable
{
    private static final long serialVersionUID = 1L;
@@ -16,7 +16,7 @@
    private long total;
    /** åˆ—表数据 */
    private List<?> rows;
    private List<T> rows;
    /** æ¶ˆæ¯çŠ¶æ€ç  */
    private int code;
@@ -37,7 +37,7 @@
     * @param list åˆ—表数据
     * @param total æ€»è®°å½•æ•°
     */
    public TableDataInfo(List<?> list, int total)
    public TableDataInfo(List<T> list, int total)
    {
        this.rows = list;
        this.total = total;
@@ -53,12 +53,12 @@
        this.total = total;
    }
    public List<?> getRows()
    public List<T> getRows()
    {
        return rows;
    }
    public void setRows(List<?> rows)
    public void setRows(List<T> rows)
    {
        this.rows = rows;
    }
ruoyi-framework/src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java
@@ -12,6 +12,7 @@
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 @@
     * å…ƒå¯¹è±¡å­—段填充控制器
     * https://baomidou.com/guide/auto-fill-metainfo.html
     */
//    @Bean
//    public MetaObjectHandler metaObjectHandler() {
//        return new MyMetaObjectHandler();
//    }
    @Bean
    public MetaObjectHandler metaObjectHandler() {
        return new CreateAndUpdateMetaObjectHandler();
    }
    /**
     * sql注入器配置
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;
    }
}
ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java
@@ -129,6 +129,10 @@
    {
        List<String> templates = new ArrayList<String>();
        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 @@
        {
            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());
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
}
ruoyi-generator/src/main/resources/vm/java/controller.java.vm
@@ -18,13 +18,18 @@
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 @@
 * @author ${author}
 * @date ${datetime}
 */
@Api(value = "${functionName}控制器", tags = {"${functionName}管理"})
@RequiredArgsConstructor(onConstructor_ = @Autowired)
@RestController
@RequestMapping("/${moduleName}/${businessName}" )
@@ -42,17 +48,18 @@
    /**
     * æŸ¥è¯¢${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 @@
    /**
     * å¯¼å‡º${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<Void> 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<Void> 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<Void> remove(@PathVariable ${pkColumn.javaType} ${pkColumn.javaField}s) {
        return toAjax(i${ClassName}Service.deleteWithValidByIds(Arrays.asList(${pkColumn.javaField}s), true) ? 1 : 0);
    }
}
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 @@
#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<String, Object> params = new HashMap<>();
}
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
}
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
}
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 @@
 * @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<Long> ids, Boolean isValid);
}
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 @@
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<String, Object> 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<Long> ids, Boolean isValid) {
        if(isValid){
            //TODO åšä¸€äº›ä¸šåŠ¡ä¸Šçš„æ ¡éªŒ,判断是否需要校验
        }
        return this.removeByIds(ids);
    }
}
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
}