!11 [功能] 拆分出Vo,QueryBo,AddBo,EditBo等领域对象

* [修改] 错误引入的无用导包删除
* [新增] 增加Vo,QueryBo,AddBo,EditBo等视图,并调整controller,service的调用代码
* [新增] 增加CreateAndUpdateMetaObjectHandler,配合fill注解,实现创建和修改人的自动设置,减少重复代码
This commit is contained in:
wugh 2021-03-22 09:32:49 +08:00 committed by 疯狂的狮子li
parent 5d1e977442
commit 3d6fbb93f5
14 changed files with 432 additions and 144 deletions

View File

@ -65,9 +65,9 @@ public class BaseController
* 响应请求分页数据 * 响应请求分页数据
*/ */
@SuppressWarnings({ "rawtypes", "unchecked" }) @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.setCode(HttpStatus.HTTP_OK);
rspData.setMsg("查询成功"); rspData.setMsg("查询成功");
rspData.setRows(list); rspData.setRows(list);
@ -81,7 +81,7 @@ public class BaseController
* @param rows 影响行数 * @param rows 影响行数
* @return 操作结果 * @return 操作结果
*/ */
protected AjaxResult toAjax(int rows) protected AjaxResult<Void> toAjax(int rows)
{ {
return rows > 0 ? AjaxResult.success() : AjaxResult.error(); return rows > 0 ? AjaxResult.success() : AjaxResult.error();
} }
@ -92,7 +92,7 @@ public class BaseController
* @param result 结果 * @param result 结果
* @return 操作结果 * @return 操作结果
*/ */
protected AjaxResult toAjax(boolean result) protected AjaxResult<Void> toAjax(boolean result)
{ {
return result ? success() : error(); return result ? success() : error();
} }
@ -100,7 +100,7 @@ public class BaseController
/** /**
* 返回成功 * 返回成功
*/ */
public AjaxResult success() public AjaxResult<Void> success()
{ {
return AjaxResult.success(); return AjaxResult.success();
} }
@ -108,7 +108,7 @@ public class BaseController
/** /**
* 返回失败消息 * 返回失败消息
*/ */
public AjaxResult error() public AjaxResult<Void> error()
{ {
return AjaxResult.error(); return AjaxResult.error();
} }
@ -116,7 +116,7 @@ public class BaseController
/** /**
* 返回成功消息 * 返回成功消息
*/ */
public AjaxResult success(String message) public AjaxResult<Void> success(String message)
{ {
return AjaxResult.success(message); return AjaxResult.success(message);
} }
@ -124,7 +124,7 @@ public class BaseController
/** /**
* 返回失败消息 * 返回失败消息
*/ */
public AjaxResult error(String message) public AjaxResult<Void> error(String message)
{ {
return AjaxResult.error(message); return AjaxResult.error(message);
} }

View File

@ -2,6 +2,7 @@ package com.ruoyi.common.core.domain;
import cn.hutool.core.lang.Validator; import cn.hutool.core.lang.Validator;
import cn.hutool.http.HttpStatus; import cn.hutool.http.HttpStatus;
import lombok.Data;
import java.util.HashMap; import java.util.HashMap;
@ -10,7 +11,7 @@ import java.util.HashMap;
* *
* @author ruoyi * @author ruoyi
*/ */
public class AjaxResult extends HashMap<String, Object> public class AjaxResult<T> extends HashMap<String, Object>
{ {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ -23,6 +24,17 @@ public class AjaxResult extends HashMap<String, Object>
/** 数据对象 */ /** 数据对象 */
public static final String DATA_TAG = "data"; 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 对象使其表示一个空消息 * 初始化一个新创建的 AjaxResult 对象使其表示一个空消息
*/ */
@ -49,7 +61,7 @@ public class AjaxResult extends HashMap<String, Object>
* @param msg 返回内容 * @param msg 返回内容
* @param data 数据对象 * @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(CODE_TAG, code);
super.put(MSG_TAG, msg); super.put(MSG_TAG, msg);
@ -64,7 +76,7 @@ public class AjaxResult extends HashMap<String, Object>
* *
* @return 成功消息 * @return 成功消息
*/ */
public static AjaxResult success() public static AjaxResult<Void> success()
{ {
return AjaxResult.success("操作成功"); return AjaxResult.success("操作成功");
} }
@ -74,7 +86,7 @@ public class AjaxResult extends HashMap<String, Object>
* *
* @return 成功消息 * @return 成功消息
*/ */
public static AjaxResult success(Object data) public static <T> AjaxResult<T> success(T data)
{ {
return AjaxResult.success("操作成功", data); return AjaxResult.success("操作成功", data);
} }
@ -85,7 +97,7 @@ public class AjaxResult extends HashMap<String, Object>
* @param msg 返回内容 * @param msg 返回内容
* @return 成功消息 * @return 成功消息
*/ */
public static AjaxResult success(String msg) public static AjaxResult<Void> success(String msg)
{ {
return AjaxResult.success(msg, null); return AjaxResult.success(msg, null);
} }
@ -97,7 +109,7 @@ public class AjaxResult extends HashMap<String, Object>
* @param data 数据对象 * @param data 数据对象
* @return 成功消息 * @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); return new AjaxResult(HttpStatus.HTTP_OK, msg, data);
} }
@ -107,7 +119,7 @@ public class AjaxResult extends HashMap<String, Object>
* *
* @return * @return
*/ */
public static AjaxResult error() public static AjaxResult<Void> error()
{ {
return AjaxResult.error("操作失败"); return AjaxResult.error("操作失败");
} }
@ -118,7 +130,7 @@ public class AjaxResult extends HashMap<String, Object>
* @param msg 返回内容 * @param msg 返回内容
* @return 警告消息 * @return 警告消息
*/ */
public static AjaxResult error(String msg) public static AjaxResult<Void> error(String msg)
{ {
return AjaxResult.error(msg, null); return AjaxResult.error(msg, null);
} }
@ -130,7 +142,7 @@ public class AjaxResult extends HashMap<String, Object>
* @param data 数据对象 * @param data 数据对象
* @return 警告消息 * @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); return new AjaxResult(HttpStatus.HTTP_INTERNAL_ERROR, msg, data);
} }
@ -142,7 +154,7 @@ public class AjaxResult extends HashMap<String, Object>
* @param msg 返回内容 * @param msg 返回内容
* @return 警告消息 * @return 警告消息
*/ */
public static AjaxResult error(int code, String msg) public static AjaxResult<Void> error(int code, String msg)
{ {
return new AjaxResult(code, msg, null); return new AjaxResult(code, msg, null);
} }

View File

@ -8,7 +8,7 @@ import java.util.List;
* *
* @author ruoyi * @author ruoyi
*/ */
public class TableDataInfo implements Serializable public class TableDataInfo<T> implements Serializable
{ {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ -16,7 +16,7 @@ public class TableDataInfo implements Serializable
private long total; private long total;
/** 列表数据 */ /** 列表数据 */
private List<?> rows; private List<T> rows;
/** 消息状态码 */ /** 消息状态码 */
private int code; private int code;
@ -37,7 +37,7 @@ public class TableDataInfo implements Serializable
* @param list 列表数据 * @param list 列表数据
* @param total 总记录数 * @param total 总记录数
*/ */
public TableDataInfo(List<?> list, int total) public TableDataInfo(List<T> list, int total)
{ {
this.rows = list; this.rows = list;
this.total = total; this.total = total;
@ -53,12 +53,12 @@ public class TableDataInfo implements Serializable
this.total = total; this.total = total;
} }
public List<?> getRows() public List<T> getRows()
{ {
return rows; return rows;
} }
public void setRows(List<?> rows) public void setRows(List<T> rows)
{ {
this.rows = rows; this.rows = rows;
} }

View File

@ -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.IllegalSQLInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; 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.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.transaction.annotation.EnableTransactionManagement;
@ -83,10 +84,10 @@ public class MybatisPlusConfig {
* 元对象字段填充控制器 * 元对象字段填充控制器
* https://baomidou.com/guide/auto-fill-metainfo.html * https://baomidou.com/guide/auto-fill-metainfo.html
*/ */
// @Bean @Bean
// public MetaObjectHandler metaObjectHandler() { public MetaObjectHandler metaObjectHandler() {
// return new MyMetaObjectHandler(); return new CreateAndUpdateMetaObjectHandler();
// } }
/** /**
* sql注入器配置 * sql注入器配置

View File

@ -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;
}
}

View File

@ -129,6 +129,10 @@ public class VelocityUtils
{ {
List<String> templates = new ArrayList<String>(); List<String> templates = new ArrayList<String>();
templates.add("vm/java/domain.java.vm"); 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/mapper.java.vm");
templates.add("vm/java/service.java.vm"); templates.add("vm/java/service.java.vm");
templates.add("vm/java/serviceImpl.java.vm"); templates.add("vm/java/serviceImpl.java.vm");
@ -176,6 +180,22 @@ public class VelocityUtils
{ {
fileName = StrUtil.format("{}/domain/{}.java", javaPath, className); 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())) if (template.contains("sub-domain.java.vm") && StrUtil.equals(GenConstants.TPL_SUB, genTable.getTplCategory()))
{ {
fileName = StrUtil.format("{}/domain/{}.java", javaPath, genTable.getSubTable().getClassName()); fileName = StrUtil.format("{}/domain/{}.java", javaPath, genTable.getSubTable().getClassName());

View File

@ -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
}

View File

@ -18,13 +18,18 @@ import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType; 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 ${packageName}.service.I${ClassName}Service;
import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.utils.poi.ExcelUtil;
#if($table.crud || $table.sub) #if($table.crud || $table.sub)
import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.page.TableDataInfo;
#elseif($table.tree) #elseif($table.tree)
#end #end
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
/** /**
* ${functionName}Controller * ${functionName}Controller
@ -32,6 +37,7 @@ import com.ruoyi.common.core.page.TableDataInfo;
* @author ${author} * @author ${author}
* @date ${datetime} * @date ${datetime}
*/ */
@Api(value = "${functionName}控制器", tags = {"${functionName}管理"})
@RequiredArgsConstructor(onConstructor_ = @Autowired) @RequiredArgsConstructor(onConstructor_ = @Autowired)
@RestController @RestController
@RequestMapping("/${moduleName}/${businessName}" ) @RequestMapping("/${moduleName}/${businessName}" )
@ -42,17 +48,18 @@ public class ${ClassName}Controller extends BaseController {
/** /**
* 查询${functionName}列表 * 查询${functionName}列表
*/ */
@ApiOperation("查询${functionName}列表")
@PreAuthorize("@ss.hasPermi('${permissionPrefix}:list')") @PreAuthorize("@ss.hasPermi('${permissionPrefix}:list')")
@GetMapping("/list") @GetMapping("/list")
#if($table.crud || $table.sub) #if($table.crud || $table.sub)
public TableDataInfo list(${ClassName} ${className}) { public TableDataInfo<${ClassName}Vo> list(${ClassName}QueryBo bo) {
startPage(); startPage();
List<${ClassName}> list = i${ClassName}Service.queryList(${className}); List<${ClassName}Vo> list = i${ClassName}Service.queryList(bo);
return getDataTable(list); return getDataTable(list);
} }
#elseif($table.tree) #elseif($table.tree)
public AjaxResult list(${ClassName} ${className}) { public AjaxResult<${ClassName}Vo> list(${ClassName}QueryBo bo) {
List<${ClassName}> list = i${ClassName}Service.queryList(${className}); List<${ClassName}Vo> list = i${ClassName}Service.queryList(bo);
return AjaxResult.success(list); return AjaxResult.success(list);
} }
#end #end
@ -60,51 +67,56 @@ public class ${ClassName}Controller extends BaseController {
/** /**
* 导出${functionName}列表 * 导出${functionName}列表
*/ */
@ApiOperation("导出${functionName}列表")
@PreAuthorize("@ss.hasPermi('${permissionPrefix}:export')" ) @PreAuthorize("@ss.hasPermi('${permissionPrefix}:export')" )
@Log(title = "${functionName}" , businessType = BusinessType.EXPORT) @Log(title = "${functionName}" , businessType = BusinessType.EXPORT)
@GetMapping("/export" ) @GetMapping("/export" )
public AjaxResult export(${ClassName} ${className}) { public AjaxResult<${ClassName}Vo> export(${ClassName}QueryBo bo) {
List<${ClassName}> list = i${ClassName}Service.queryList(${className}); List<${ClassName}Vo> list = i${ClassName}Service.queryList(bo);
ExcelUtil<${ClassName}> util = new ExcelUtil<${ClassName}>(${ClassName}.class); ExcelUtil<${ClassName}Vo> util = new ExcelUtil<${ClassName}Vo>(${ClassName}Vo.class);
return util.exportExcel(list, "${businessName}" ); return util.exportExcel(list, "${businessName}" );
} }
/** /**
* 获取${functionName}详细信息 * 获取${functionName}详细信息
*/ */
@ApiOperation("获取${functionName}详细信息")
@PreAuthorize("@ss.hasPermi('${permissionPrefix}:query')" ) @PreAuthorize("@ss.hasPermi('${permissionPrefix}:query')" )
@GetMapping(value = "/{${pkColumn.javaField}}" ) @GetMapping(value = "/{${pkColumn.javaField}}" )
public AjaxResult getInfo(@PathVariable("${pkColumn.javaField}" ) ${pkColumn.javaType} ${pkColumn.javaField}) { public AjaxResult<${ClassName}Vo> getInfo(@PathVariable("${pkColumn.javaField}" ) ${pkColumn.javaType} ${pkColumn.javaField}) {
return AjaxResult.success(i${ClassName}Service.getById(${pkColumn.javaField})); return AjaxResult.success(i${ClassName}Service.queryById(${pkColumn.javaField}));
} }
/** /**
* 新增${functionName} * 新增${functionName}
*/ */
@ApiOperation("新增${functionName}")
@PreAuthorize("@ss.hasPermi('${permissionPrefix}:add')" ) @PreAuthorize("@ss.hasPermi('${permissionPrefix}:add')" )
@Log(title = "${functionName}" , businessType = BusinessType.INSERT) @Log(title = "${functionName}" , businessType = BusinessType.INSERT)
@PostMapping @PostMapping
public AjaxResult add(@RequestBody ${ClassName} ${className}) { public AjaxResult<Void> add(@RequestBody ${ClassName}AddBo bo) {
return toAjax(i${ClassName}Service.save(${className}) ? 1 : 0); return toAjax(i${ClassName}Service.insertByAddBo(bo) ? 1 : 0);
} }
/** /**
* 修改${functionName} * 修改${functionName}
*/ */
@ApiOperation("修改${functionName}")
@PreAuthorize("@ss.hasPermi('${permissionPrefix}:edit')" ) @PreAuthorize("@ss.hasPermi('${permissionPrefix}:edit')" )
@Log(title = "${functionName}" , businessType = BusinessType.UPDATE) @Log(title = "${functionName}" , businessType = BusinessType.UPDATE)
@PutMapping @PutMapping
public AjaxResult edit(@RequestBody ${ClassName} ${className}) { public AjaxResult<Void> edit(@RequestBody ${ClassName}EditBo bo) {
return toAjax(i${ClassName}Service.updateById(${className}) ? 1 : 0); return toAjax(i${ClassName}Service.updateByEditBo(bo) ? 1 : 0);
} }
/** /**
* 删除${functionName} * 删除${functionName}
*/ */
@ApiOperation("删除${functionName}")
@PreAuthorize("@ss.hasPermi('${permissionPrefix}:remove')" ) @PreAuthorize("@ss.hasPermi('${permissionPrefix}:remove')" )
@Log(title = "${functionName}" , businessType = BusinessType.DELETE) @Log(title = "${functionName}" , businessType = BusinessType.DELETE)
@DeleteMapping("/{${pkColumn.javaField}s}" ) @DeleteMapping("/{${pkColumn.javaField}s}" )
public AjaxResult remove(@PathVariable ${pkColumn.javaType}[] ${pkColumn.javaField}s) { public AjaxResult<Void> remove(@PathVariable ${pkColumn.javaType} ${pkColumn.javaField}s) {
return toAjax(i${ClassName}Service.removeByIds(Arrays.asList(${pkColumn.javaField}s)) ? 1 : 0); return toAjax(i${ClassName}Service.deleteWithValidByIds(Arrays.asList(${pkColumn.javaField}s), true) ? 1 : 0);
} }
} }

View File

@ -1,14 +1,9 @@
package ${packageName}.domain; package ${packageName}.domain;
import com.fasterxml.jackson.annotation.JsonFormat; import com.baomidou.mybatisplus.annotation.*;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.experimental.Accessors; 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.io.Serializable;
import java.util.Date; import java.util.Date;
import java.util.Map; import java.util.Map;
@ -32,30 +27,19 @@ private static final long serialVersionUID=1L;
#foreach ($column in $columns) #foreach ($column in $columns)
/** $column.columnComment */ /** $column.columnComment */
#if($column.list) #if($column.javaField=="createBy"||$column.javaField=="createTime")
#set($parentheseIndex=$column.columnComment.indexOf("")) @TableField(fill = FieldFill.INSERT)
#if($parentheseIndex != -1)
#set($comment=$column.columnComment.substring(0, $parentheseIndex))
#else
#set($comment=$column.columnComment)
#end #end
#if($parentheseIndex != -1) #if($column.javaField=="updateBy"||$column.javaField=="updateTime")
@Excel(name = "${comment}" , readConverterExp = "$column.readConverterExp()") @TableField(fill = FieldFill.INSERT_UPDATE)
#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 #end
#if($column.javaField=='delFlag')
@TableLogic
#end #end
#if($column.isPk==1) #if($column.isPk==1)
@TableId(value = "$column.columnName") @TableId(value = "$column.columnName")
private $column.javaType $column.javaField;
#else
private $column.javaType $column.javaField;
#end #end
private $column.javaType $column.javaField;
#end #end
@TableField(exist = false)
private Map<String, Object> params = new HashMap<>();
} }

View File

@ -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
}

View File

@ -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
}

View File

@ -1,7 +1,13 @@
package ${packageName}.service; package ${packageName}.service;
import ${packageName}.domain.${ClassName}; 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 com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
import java.util.List; import java.util.List;
/** /**
@ -11,9 +17,36 @@ import java.util.List;
* @date ${datetime} * @date ${datetime}
*/ */
public interface I${ClassName}Service extends IService<${ClassName}> { 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);
} }

View File

@ -1,16 +1,23 @@
package ${packageName}.service.impl; package ${packageName}.service.impl;
import cn.hutool.core.bean.BeanUtil;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.apache.commons.lang3.StringUtils; 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}.domain.${ClassName};
import ${packageName}.mapper.${ClassName}Mapper;
import ${packageName}.vo.${ClassName}Vo;
import ${packageName}.service.I${ClassName}Service; import ${packageName}.service.I${ClassName}Service;
import java.util.Collection;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.stream.Collectors;
/** /**
* ${functionName}Service业务层处理 * ${functionName}Service业务层处理
@ -22,86 +29,30 @@ import java.util.Map;
public class ${ClassName}ServiceImpl extends ServiceImpl<${ClassName}Mapper, ${ClassName}> implements I${ClassName}Service { public class ${ClassName}ServiceImpl extends ServiceImpl<${ClassName}Mapper, ${ClassName}> implements I${ClassName}Service {
@Override @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(); LambdaQueryWrapper<${ClassName}> lqw = Wrappers.lambdaQuery();
#foreach($column in $columns) #foreach($column in $columns)
#if($column.query)
#set($queryType=$column.queryType) #set($queryType=$column.queryType)
#set($javaField=$column.javaField) #set($javaField=$column.javaField)
#set($javaType=$column.javaType) #set($javaType=$column.javaType)
#set($columnName=$column.columnName) #set($columnName=$column.columnName)
#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
#if($column.query) #set($mpMethod=$column.queryType.toLowerCase())
#if($column.queryType == "EQ") #if($queryType != 'BETWEEN')
#if($javaType == 'String') #if($javaType == 'String')
if (StringUtils.isNotBlank(${className}.get$AttrName())){ #set($condition='StringUtils.isNotBlank(bo.get'+$AttrName+'())')
lqw.eq(${ClassName}::get$AttrName ,${className}.get$AttrName());
}
#else #else
if (${className}.get$AttrName() != null){ #set($condition='bo.get'+$AttrName+'() != null')
lqw.eq(${ClassName}::get$AttrName ,${className}.get$AttrName());
}
#end #end
#elseif($queryType == "NE") lqw.$mpMethod($condition, ${ClassName}::get$AttrName, bo.get$AttrName());
#if($javaType == 'String')
if (StringUtils.isNotBlank(${className}.get$AttrName())){
lqw.ne(${ClassName}::get$AttrName ,${className}.get$AttrName());
}
#else #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(); Map<String, Object> params = ${className}.getParams();
if (params.get("begin$AttrName") != null && params.get("end$AttrName") != null) { 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"));
@ -109,6 +60,49 @@ public class ${ClassName}ServiceImpl extends ServiceImpl<${ClassName}Mapper, ${C
#end #end
#end #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);
} }
} }

View File

@ -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
}