diff --git a/ruoyi-modules/ruoyi-generator/pom.xml b/ruoyi-modules/ruoyi-generator/pom.xml
index b0974e2..921c40c 100644
--- a/ruoyi-modules/ruoyi-generator/pom.xml
+++ b/ruoyi-modules/ruoyi-generator/pom.xml
@@ -41,6 +41,7 @@
ruoyi-common-web
+
diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java b/ruoyi-modules/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java
index a20beb4..43e3092 100644
--- a/ruoyi-modules/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java
+++ b/ruoyi-modules/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java
@@ -15,7 +15,7 @@ import com.ruoyi.generator.domain.GenTableColumn;
/**
* 模板处理工具类
- *
+ *
* @author ruoyi
*/
public class VelocityUtils
@@ -45,6 +45,7 @@ public class VelocityUtils
VelocityContext velocityContext = new VelocityContext();
velocityContext.put("tplCategory", genTable.getTplCategory());
velocityContext.put("tableName", genTable.getTableName());
+ velocityContext.put("CapitalTableName", StringUtils.upperCase(genTable.getTableName()));//表名大写:SYS_USER
velocityContext.put("functionName", StringUtils.isNotEmpty(functionName) ? functionName : "【请填写功能名称】");
velocityContext.put("ClassName", genTable.getClassName());
velocityContext.put("className", StringUtils.uncapitalize(genTable.getClassName()));
@@ -130,6 +131,8 @@ 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/bo.java.vm");
templates.add("vm/java/mapper.java.vm");
templates.add("vm/java/service.java.vm");
templates.add("vm/java/serviceImpl.java.vm");
@@ -177,10 +180,16 @@ public class VelocityUtils
{
fileName = StringUtils.format("{}/domain/{}.java", javaPath, className);
}
- if (template.contains("sub-domain.java.vm") && StringUtils.equals(GenConstants.TPL_SUB, genTable.getTplCategory()))
+ else if (template.contains("sub-domain.java.vm") && StringUtils.equals(GenConstants.TPL_SUB, genTable.getTplCategory()))
{
fileName = StringUtils.format("{}/domain/{}.java", javaPath, genTable.getSubTable().getClassName());
}
+ else if (template.contains("vo.java.vm")) {
+ fileName = StringUtils.format("{}/domain/vo/{}Vo.java", javaPath, className);
+ }
+ else if (template.contains("bo.java.vm")) {
+ fileName = StringUtils.format("{}/domain/bo/{}Bo.java", javaPath, className);
+ }
else if (template.contains("mapper.java.vm"))
{
fileName = StringUtils.format("{}/mapper/{}Mapper.java", javaPath, className);
@@ -234,7 +243,7 @@ public class VelocityUtils
/**
* 根据列类型获取导入包
- *
+ *
* @param genTable 业务表对象
* @return 返回需要导入的包列表
*/
@@ -264,7 +273,7 @@ public class VelocityUtils
/**
* 根据列类型获取字典组
- *
+ *
* @param genTable 业务表对象
* @return 返回字典组
*/
@@ -283,7 +292,7 @@ public class VelocityUtils
/**
* 添加字典列表
- *
+ *
* @param dicts 字典列表
* @param columns 列集合
*/
diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/bo.java.vm b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/bo.java.vm
new file mode 100644
index 0000000..408af13
--- /dev/null
+++ b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/bo.java.vm
@@ -0,0 +1,44 @@
+package ${packageName}.domain.bo;
+
+import ${packageName}.domain.${ClassName};
+import com.ruoyi.common.orm.core.domain.BaseEntity;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+#foreach ($import in $importList)
+import ${import};
+#end
+
+/**
+ * ${functionName}业务对象 ${tableName}
+ *
+ * @author ${author}
+ * @date ${datetime}
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = ${ClassName}.class, reverseConvertGenerate = false)
+public class ${ClassName}Bo extends BaseEntity {
+
+#foreach ($column in $columns)
+#if(!$table.isSuperColumn($column.javaField) && ($column.query || $column.insert || $column.edit))
+ /**
+ * $column.columnComment
+ */
+#if($column.required)
+#if($column.javaType == 'String')
+ @NotBlank(message = "$column.columnComment不能为空")
+#else
+ @NotNull(message = "$column.columnComment不能为空")
+#end
+#end
+#if($column.javaType == 'Date')
+ @JsonFormat(pattern = "yyyy-MM-dd")
+#end
+ private $column.javaType $column.javaField;
+
+#end
+#end
+
+}
diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/controller.java.vm b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/controller.java.vm
index 8215e7a..1ce61c2 100644
--- a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/controller.java.vm
+++ b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/controller.java.vm
@@ -1,27 +1,25 @@
package ${packageName}.controller;
import java.util.List;
-
-import com.ruoyi.common.orm.core.page.TableDataInfo;
+import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
-import jakarta.annotation.Resource;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.ruoyi.common.core.core.annotation.Log;
-import com.ruoyi.common.web.core.BaseController;
-import com.ruoyi.common.core.core.domain.AjaxResult;
+import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
-import ${packageName}.domain.${ClassName};
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import com.ruoyi.common.core.core.domain.R;
+import com.ruoyi.common.excel.utils.ExcelUtil;
+import com.ruoyi.common.log.annotation.Log;
+import com.ruoyi.common.log.enums.BusinessType;
+import com.ruoyi.common.web.annotation.RepeatSubmit;
+import com.ruoyi.common.web.core.BaseController;
+import jakarta.annotation.Resource;
+import ${packageName}.domain.vo.${ClassName}Vo;
+import ${packageName}.domain.bo.${ClassName}Bo;
import ${packageName}.service.I${ClassName}Service;
-import com.ruoyi.common.core.core.utils.poi.ExcelUtil;
#if($table.crud || $table.sub)
+import com.ruoyi.common.orm.core.page.TableDataInfo;
#elseif($table.tree)
#end
@@ -31,6 +29,8 @@ import com.ruoyi.common.core.core.utils.poi.ExcelUtil;
* @author ${author}
* ${datetime}
*/
+@Validated
+@RequiredArgsConstructor
@RestController
@RequestMapping("/${moduleName}/${businessName}")
public class ${ClassName}Controller extends BaseController
@@ -44,17 +44,15 @@ public class ${ClassName}Controller extends BaseController
@SaCheckPermission("${permissionPrefix}:list")
@GetMapping("/list")
#if($table.crud || $table.sub)
- public TableDataInfo list(${ClassName} ${className})
+ public TableDataInfo<${ClassName}Vo> list(${ClassName}Bo ${className}Bo)
{
- startPage();
- List<${ClassName}> list = ${className}Service.select${ClassName}List(${className});
- return getDataTable(list);
+ return ${className}Service.selectPage(${className}Bo);
}
#elseif($table.tree)
- public AjaxResult list(${ClassName} ${className})
+ public R> list(${ClassName}Bo ${className}Bo)
{
- List<${ClassName}> list = ${className}Service.select${ClassName}List(${className});
- return success(list);
+ List<${ClassName}Vo> list = ${className}Service.selectList(${className}Bo);
+ return R.ok(list);
}
#end
@@ -64,11 +62,10 @@ public class ${ClassName}Controller extends BaseController
@SaCheckPermission("${permissionPrefix}:export")
@Log(title = "${functionName}", businessType = BusinessType.EXPORT)
@PostMapping("/export")
- public void export(HttpServletResponse response, ${ClassName} ${className})
+ public void export(HttpServletResponse response, ${ClassName}Bo ${className}Bo)
{
- List<${ClassName}> list = ${className}Service.select${ClassName}List(${className});
- ExcelUtil<${ClassName}> util = new ExcelUtil<>(${ClassName}.class);
- util.exportExcel(response, list, "${functionName}数据");
+ List<${ClassName}Vo> list = ${className}Service.selectList(${className}Bo);
+ ExcelUtil.exportExcel(list, "${functionName}", ${ClassName}Vo.class, response);
}
/**
@@ -76,9 +73,9 @@ public class ${ClassName}Controller extends BaseController
*/
@SaCheckPermission("${permissionPrefix}:query")
@GetMapping(value = "/{${pkColumn.javaField}}")
- public AjaxResult getInfo(@PathVariable("${pkColumn.javaField}") ${pkColumn.javaType} ${pkColumn.javaField})
+ public R<${ClassName}Vo> getInfo(@PathVariable ${pkColumn.javaType} ${pkColumn.javaField})
{
- return success(${className}Service.select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField}));
+ return R.ok(${className}Service.selectById(${pkColumn.javaField}));
}
/**
@@ -86,10 +83,15 @@ public class ${ClassName}Controller extends BaseController
*/
@SaCheckPermission("${permissionPrefix}:add")
@Log(title = "${functionName}", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
@PostMapping
- public AjaxResult add(@RequestBody ${ClassName} ${className})
+ public R add(@Validated @RequestBody ${ClassName}Bo ${className}Bo)
{
- return toAjax(${className}Service.insert${ClassName}(${className}));
+ boolean inserted = ${className}Service.insert(${className}Bo);
+ if (!inserted) {
+ return R.fail("新增${functionName}记录失败!");
+ }
+ return R.ok();
}
/**
@@ -97,10 +99,15 @@ public class ${ClassName}Controller extends BaseController
*/
@SaCheckPermission("${permissionPrefix}:edit")
@Log(title = "${functionName}", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
@PutMapping
- public AjaxResult edit(@RequestBody ${ClassName} ${className})
+ public R edit(@Validated @RequestBody ${ClassName}Bo ${className}Bo)
{
- return toAjax(${className}Service.update${ClassName}(${className}));
+ Boolean updated = ${className}Service.update(${className}Bo);
+ if (!updated) {
+ R.fail("修改${functionName}记录失败!");
+ }
+ return R.ok();
}
/**
@@ -108,9 +115,13 @@ public class ${ClassName}Controller extends BaseController
*/
@SaCheckPermission("${permissionPrefix}:remove")
@Log(title = "${functionName}", businessType = BusinessType.DELETE)
- @DeleteMapping("/{${pkColumn.javaField}s}")
- public AjaxResult remove(@PathVariable ${pkColumn.javaType}[] ${pkColumn.javaField}s)
+ @DeleteMapping("/{${pkColumn.javaField}s}")
+ public R remove(@PathVariable ${pkColumn.javaType}[] ${pkColumn.javaField}s)
{
- return toAjax(${className}Service.delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaField}s));
+ boolean deleted = ${className}Service.deleteByIds(${pkColumn.javaField}s);
+ if (!deleted) {
+ R.fail("删除${functionName}记录失败!");
+ }
+ return R.ok();
}
}
diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/domain.java.vm b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/domain.java.vm
index d17d2a9..fd1a9f2 100644
--- a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/domain.java.vm
+++ b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/domain.java.vm
@@ -3,7 +3,6 @@ package ${packageName}.domain;
#foreach ($import in $importList)
import ${import};
#end
-import java.io.Serial;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.Table;
import lombok.Data;
@@ -29,9 +28,6 @@ import com.ruoyi.common.orm.core.domain.BaseEntity;
@Table(value = "${tableName}")
public class ${ClassName} extends ${Entity}
{
- @Serial
- private static final long serialVersionUID = 1L;
-
#foreach ($column in $columns)
#if(!$table.isSuperColumn($column.javaField))
/** $column.columnComment */
diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/mapper.java.vm b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/mapper.java.vm
index eb97f19..8c2745f 100644
--- a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/mapper.java.vm
+++ b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/mapper.java.vm
@@ -1,6 +1,7 @@
package ${packageName}.mapper;
-import java.util.List;
+import com.mybatisflex.core.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
import ${packageName}.domain.${ClassName};
#if($table.sub)
import ${packageName}.domain.${subClassName};
@@ -8,84 +9,12 @@ import ${packageName}.domain.${subClassName};
/**
* ${functionName}Mapper接口
- *
+ *
* @author ${author}
* ${datetime}
*/
-public interface ${ClassName}Mapper
+@Mapper
+public interface ${ClassName}Mapper extends BaseMapper<${ClassName}>
{
- /**
- * 查询${functionName}
- *
- * @param ${pkColumn.javaField} ${functionName}主键
- * @return ${functionName}
- */
- ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField});
- /**
- * 查询${functionName}列表
- *
- * @param ${className} ${functionName}
- * @return ${functionName}集合
- */
- List<${ClassName}> select${ClassName}List(${ClassName} ${className});
-
- /**
- * 新增${functionName}
- *
- * @param ${className} ${functionName}
- * @return 结果
- */
- int insert${ClassName}(${ClassName} ${className});
-
- /**
- * 修改${functionName}
- *
- * @param ${className} ${functionName}
- * @return 结果
- */
- int update${ClassName}(${ClassName} ${className});
-
- /**
- * 删除${functionName}
- *
- * @param ${pkColumn.javaField} ${functionName}主键
- * @return 结果
- */
- int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField});
-
- /**
- * 批量删除${functionName}
- *
- * @param ${pkColumn.javaField}s 需要删除的数据主键集合
- * @return 结果
- */
- int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s);
-#if($table.sub)
-
- /**
- * 批量删除${subTable.functionName}
- *
- * @param ${pkColumn.javaField}s 需要删除的数据主键集合
- * @return 结果
- */
- int delete${subClassName}By${subTableFkClassName}s(${pkColumn.javaType}[] ${pkColumn.javaField}s);
-
- /**
- * 批量新增${subTable.functionName}
- *
- * @param ${subclassName}List ${subTable.functionName}列表
- * @return 结果
- */
- int batch${subClassName}(List<${subClassName}> ${subclassName}List);
-
-
- /**
- * 通过${functionName}主键删除${subTable.functionName}信息
- *
- * @param ${pkColumn.javaField} ${functionName}ID
- * @return 结果
- */
- int delete${subClassName}By${subTableFkClassName}(${pkColumn.javaType} ${pkColumn.javaField});
-#end
}
diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/service.java.vm b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/service.java.vm
index 535fea8..72ba8eb 100644
--- a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/service.java.vm
+++ b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/service.java.vm
@@ -2,60 +2,69 @@ package ${packageName}.service;
import java.util.List;
import ${packageName}.domain.${ClassName};
+import ${packageName}.domain.vo.${ClassName}Vo;
+import ${packageName}.domain.bo.${ClassName}Bo;
+import com.ruoyi.common.orm.core.service.IBaseService;
+#if($table.crud || $table.sub)
+import com.ruoyi.common.orm.core.page.TableDataInfo;
+#end
/**
* ${functionName}Service接口
- *
+ *
* @author ${author}
* ${datetime}
*/
-public interface I${ClassName}Service
+public interface I${ClassName}Service extends IBaseService<${ClassName}>
{
/**
* 查询${functionName}
- *
+ *
* @param ${pkColumn.javaField} ${functionName}主键
* @return ${functionName}
*/
- ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField});
+ ${ClassName}Vo selectById(${pkColumn.javaType} ${pkColumn.javaField});
/**
* 查询${functionName}列表
- *
- * @param ${className} ${functionName}
+ *
+ * @param ${className}Bo ${functionName}Bo
* @return ${functionName}集合
*/
- List<${ClassName}> select${ClassName}List(${ClassName} ${className});
+ List<${ClassName}Vo> selectList(${ClassName}Bo ${className}Bo);
+
+#if($table.crud || $table.sub)
+ /**
+ * 分页查询${functionName}列表
+ *
+ * @param ${className}Bo ${functionName}Bo
+ * @return 分页${functionName}集合
+ */
+ TableDataInfo<${ClassName}Vo> selectPage(${ClassName}Bo ${className}Bo);
+#end
/**
* 新增${functionName}
- *
- * @param ${className} ${functionName}
- * @return 结果
+ *
+ * @param ${className}Bo ${functionName}Bo
+ * @return 结果:true 操作成功,false 操作失败
*/
- int insert${ClassName}(${ClassName} ${className});
+ boolean insert(${ClassName}Bo ${className}Bo);
/**
* 修改${functionName}
- *
- * @param ${className} ${functionName}
- * @return 结果
+ *
+ * @param ${className}Bo ${functionName}Bo
+ * @return 结果:true 更新成功,false 更新失败
*/
- int update${ClassName}(${ClassName} ${className});
+ boolean update(${ClassName}Bo ${className}Bo);
/**
* 批量删除${functionName}
- *
+ *
* @param ${pkColumn.javaField}s 需要删除的${functionName}主键集合
- * @return 结果
+ * @return 结果:true 删除成功,false 删除失败
*/
- int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s);
+ boolean deleteByIds(${pkColumn.javaType}[] ${pkColumn.javaField}s);
- /**
- * 删除${functionName}信息
- *
- * @param ${pkColumn.javaField} ${functionName}主键
- * @return 结果
- */
- int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField});
}
diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm
index 5a76ca0..b46edf6 100644
--- a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm
+++ b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm
@@ -1,24 +1,37 @@
package ${packageName}.service.impl;
+import java.util.Arrays;
import java.util.List;
+import java.util.Map;
+import cn.hutool.core.util.ObjectUtil;
+import com.mybatisflex.core.paginate.Page;
+import com.mybatisflex.core.query.QueryWrapper;
+import com.ruoyi.common.core.utils.MapstructUtils;
+import com.ruoyi.common.core.utils.StringUtils;
+import com.ruoyi.common.orm.core.page.PageQuery;
+import com.ruoyi.common.orm.core.page.TableDataInfo;
+import com.ruoyi.common.orm.core.service.impl.BaseServiceImpl;
#foreach ($column in $columns)
#if($column.javaField == 'createTime' || $column.javaField == 'updateTime')
-import com.ruoyi.common.core.core.utils.DateUtils;
+import com.ruoyi.common.core.utils.DateUtils;
#break
#end
#end
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
#if($table.sub)
import java.util.ArrayList;
-import com.ruoyi.common.core.core.utils.StringUtils;
-import org.springframework.transaction.annotation.Transactional;
import ${packageName}.domain.${subClassName};
#end
import ${packageName}.mapper.${ClassName}Mapper;
import ${packageName}.domain.${ClassName};
+import ${packageName}.domain.bo.${ClassName}Bo;
+import ${packageName}.domain.vo.${ClassName}Vo;
import ${packageName}.service.I${ClassName}Service;
+import static ${packageName}.domain.table.${ClassName}TableDef.${CapitalTableName};
+
/**
* ${functionName}Service业务层处理
*
@@ -26,11 +39,49 @@ import ${packageName}.service.I${ClassName}Service;
* ${datetime}
*/
@Service
-public class ${ClassName}ServiceImpl implements I${ClassName}Service
+public class ${ClassName}ServiceImpl extends BaseServiceImpl<${ClassName}Mapper, ${ClassName}> implements I${ClassName}Service
{
@Resource
private ${ClassName}Mapper ${className}Mapper;
+ @Override
+ public QueryWrapper query() {
+ return super.query().from(${CapitalTableName});
+ }
+
+ private QueryWrapper buildQueryWrapper(${ClassName}Bo ${className}Bo) {
+ QueryWrapper queryWrapper = super.buildBaseQueryWrapper();
+
+#foreach($column in $columns)
+ #if($column.query)
+ #set($queryType=$column.queryType)
+ #set($javaField=$column.javaField)
+ #set($javaType=$column.javaType)
+ #set($columnName=$column.columnName)
+ #set($capitalColumnName=$column.columnName.toUpperCase())
+ #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
+ #set($mpMethod=$column.queryType.toLowerCase())
+ #if($queryType != 'BETWEEN')
+ #if($javaType == 'String')
+ #set($condition='StringUtils.isNotBlank('+${className}+'Bo.get'+$AttrName+'())')
+ #else
+ #set($condition=${className}+'Bo.get'+$AttrName+'() != null')
+ #end
+ if ($condition) {
+ queryWrapper.and(${CapitalTableName}.${capitalColumnName}.$mpMethod(${className}Bo.get$AttrName()));
+ }
+ #else
+ Map params = ${className}Bo.getParams();
+ if (params.get("begin$AttrName") != null && params.get("end$AttrName") != null) {
+ queryWrapper.and(${CapitalTableName}.${capitalColumnName}.$mpMethod(params.get("begin$AttrName"), params.get("end$AttrName")));
+ }
+ #end
+ #end
+#end
+
+ return queryWrapper;
+ }
+
/**
* 查询${functionName}
*
@@ -38,116 +89,113 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service
* @return ${functionName}
*/
@Override
- public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField})
+ public ${ClassName}Vo selectById(${pkColumn.javaType} ${pkColumn.javaField})
{
- return ${className}Mapper.select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField});
+ #set($CapitalPkColumn=${pkColumn.columnName.toUpperCase()})
+ return this.getOneAs(query().where(${CapitalTableName}.${CapitalPkColumn}.eq(${pkColumn.javaField})), ${ClassName}Vo.class);
}
/**
* 查询${functionName}列表
*
- * @param ${className} ${functionName}
- * @return ${functionName}
+ * @param ${className}Bo ${functionName}Bo
+ * @return ${functionName}集合
*/
@Override
- public List<${ClassName}> select${ClassName}List(${ClassName} ${className})
+ public List<${ClassName}Vo> selectList(${ClassName}Bo ${className}Bo)
{
- return ${className}Mapper.select${ClassName}List(${className});
+ QueryWrapper queryWrapper = buildQueryWrapper(${className}Bo);
+ return this.listAs(queryWrapper, ${ClassName}Vo.class);
}
+#if($table.crud || $table.sub)
+ /**
+ * 分页查询${functionName}列表
+ *
+ * @param ${className}Bo ${functionName}Bo
+ * @return 分页${functionName}集合
+ */
+ @Override
+ public TableDataInfo<${ClassName}Vo> selectPage(${ClassName}Bo ${className}Bo)
+ {
+ QueryWrapper queryWrapper = buildQueryWrapper(${className}Bo);
+ Page<${ClassName}Vo> page = this.pageAs(PageQuery.build(), queryWrapper, ${ClassName}Vo.class);
+ return TableDataInfo.build(page);
+ }
+#end
+
/**
* 新增${functionName}
*
- * @param ${className} ${functionName}
- * @return 结果
+ * @param ${className}Bo ${functionName}Bo
+ * @return 结果:true 操作成功,false 操作失败
*/
#if($table.sub)
@Transactional
#end
@Override
- public int insert${ClassName}(${ClassName} ${className})
+ public boolean insert(${ClassName}Bo ${className}Bo)
{
-#foreach ($column in $columns)
-#if($column.javaField == 'createTime')
- ${className}.setCreateTime(DateUtils.getNowDate());
-#end
-#end
+ ${ClassName} ${className} = MapstructUtils.convert(${className}Bo, ${ClassName}.class);
+
#if($table.sub)
- int rows = ${className}Mapper.insert${ClassName}(${className});
- insert${subClassName}(${className});
- return rows;
+ boolean inserted = this.save(${className});//使用全局配置的雪花算法主键生成器生成ID值
+ if (inserted) {
+ return insert${subClassName}(${className});
+ }
+ return false;
#else
- return ${className}Mapper.insert${ClassName}(${className});
+ return this.save(${className});//使用全局配置的雪花算法主键生成器生成ID值
#end
}
/**
* 修改${functionName}
*
- * @param ${className} ${functionName}
- * @return 结果
+ * @param ${className}Bo ${functionName}Bo
+ * @return 结果:true 更新成功,false 更新失败
*/
#if($table.sub)
@Transactional
#end
@Override
- public int update${ClassName}(${ClassName} ${className})
+ public boolean update(${ClassName}Bo ${className}Bo)
{
-#foreach ($column in $columns)
-#if($column.javaField == 'updateTime')
- ${className}.setUpdateTime(DateUtils.getNowDate());
-#end
-#end
-#if($table.sub)
- ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${className}.get${pkColumn.capJavaField}());
- insert${subClassName}(${className});
-#end
- return ${className}Mapper.update${ClassName}(${className});
+ ${ClassName} ${className} = MapstructUtils.convert(${className}Bo, ${ClassName}.class);
+ boolean updated = this.updateById(${className});
+
+ #if($table.sub)
+ if (updated) {
+ ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${className}.get${pkColumn.capJavaField}());
+ return insert${subClassName}(${className});
+ }
+ #end
+ return updated;
}
/**
* 批量删除${functionName}
*
- * @param ${pkColumn.javaField}s 需要删除的${functionName}主键
- * @return 结果
+ * @param ${pkColumn.javaField}s 需要删除的${functionName}主键集合
+ * @return 结果:true 删除成功,false 删除失败
*/
-#if($table.sub)
@Transactional
-#end
@Override
- public int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s)
+ public boolean deleteByIds(${pkColumn.javaType}[] ${pkColumn.javaField}s)
{
#if($table.sub)
${className}Mapper.delete${subClassName}By${subTableFkClassName}s(${pkColumn.javaField}s);
#end
- return ${className}Mapper.delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaField}s);
+ return this.removeByIds(Arrays.asList(${pkColumn.javaField}s));
}
- /**
- * 删除${functionName}信息
- *
- * @param ${pkColumn.javaField} ${functionName}主键
- * @return 结果
- */
#if($table.sub)
- @Transactional
-#end
- @Override
- public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField})
- {
-#if($table.sub)
- ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${pkColumn.javaField});
-#end
- return ${className}Mapper.delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField});
- }
-#if($table.sub)
-
/**
* 新增${subTable.functionName}信息
*
* @param ${className} ${functionName}对象
*/
- public void insert${subClassName}(${ClassName} ${className})
+ public boolean insert${subClassName}(${ClassName} ${className})
{
List<${subClassName}> ${subclassName}List = ${className}.get${subClassName}List();
${pkColumn.javaType} ${pkColumn.javaField} = ${className}.get${pkColumn.capJavaField}();
@@ -164,6 +212,7 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service
${className}Mapper.batch${subClassName}(list);
}
}
+ return true;
}
#end
}
diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/vo.java.vm b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/vo.java.vm
new file mode 100644
index 0000000..8d24a58
--- /dev/null
+++ b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/vo.java.vm
@@ -0,0 +1,66 @@
+package ${packageName}.domain.vo;
+
+#foreach ($import in $importList)
+import ${import};
+#end
+import ${packageName}.domain.${ClassName};
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.ruoyi.common.excel.annotation.ExcelDictFormat;
+import com.ruoyi.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+#if($table.crud || $table.sub)
+import com.ruoyi.common.orm.core.domain.BaseEntity;
+#elseif($table.tree)
+#end
+
+
+/**
+ * ${functionName}视图对象 ${tableName}
+ *
+ * @author ${author}
+ * @date ${datetime}
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = ${ClassName}.class)
+public class ${ClassName}Vo extends BaseEntity implements Serializable
+{
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+#foreach ($column in $columns)
+#if(!$table.isSuperColumn($column.javaField))
+ /** $column.columnComment */
+#if($column.list)
+#set($parentheseIndex=$column.columnComment.indexOf("("))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+#if(${column.dictType} && ${column.dictType} != '')
+ @ExcelProperty(value = "${comment}", converter = ExcelDictConvert.class)
+ @ExcelDictFormat(dictType = "${column.dictType}")
+#elseif($parentheseIndex != -1)
+ @ExcelProperty(value = "${comment}", converter = ExcelDictConvert.class)
+ @ExcelDictFormat(readConverterExp = "$column.readConverterExp()")
+#else
+ @ExcelProperty(value = "${comment}")
+#end
+ private $column.javaType $column.javaField;
+
+#else
+ @ExcelProperty(value = "${column.columnComment}")
+ private $column.javaType $column.javaField;
+
+#end
+#end
+#end
+}
diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/sql/sql.vm b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/sql/sql.vm
index 0575583..4e4074c 100644
--- a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/sql/sql.vm
+++ b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/sql/sql.vm
@@ -1,22 +1,22 @@
-- 菜单 SQL
insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
-values('${functionName}', '${parentMenuId}', '1', '${businessName}', '${moduleName}/${businessName}/index', 1, 0, 'C', '0', '0', '${permissionPrefix}:list', '#', 'admin', sysdate(), '', null, '${functionName}菜单');
+values('${functionName}', '${parentMenuId}', '1', '${businessName}', '${moduleName}/${businessName}/index', 1, 0, 'C', '0', '0', '${permissionPrefix}:list', '#', 1, sysdate(), 1, null, '${functionName}菜单');
-- 按钮父菜单ID
SELECT @parentId := LAST_INSERT_ID();
-- 按钮 SQL
insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
-values('${functionName}查询', @parentId, '1', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:query', '#', 'admin', sysdate(), '', null, '');
+values('${functionName}查询', @parentId, '1', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:query', '#', 1, sysdate(), 1, null, '');
insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
-values('${functionName}新增', @parentId, '2', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:add', '#', 'admin', sysdate(), '', null, '');
+values('${functionName}新增', @parentId, '2', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:add', '#', 1, sysdate(), 1, null, '');
insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
-values('${functionName}修改', @parentId, '3', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:edit', '#', 'admin', sysdate(), '', null, '');
+values('${functionName}修改', @parentId, '3', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:edit', '#', 1, sysdate(), 1, null, '');
insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
-values('${functionName}删除', @parentId, '4', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:remove', '#', 'admin', sysdate(), '', null, '');
+values('${functionName}删除', @parentId, '4', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:remove', '#', 1, sysdate(), 1, null, '');
insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
-values('${functionName}导出', @parentId, '5', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:export', '#', 'admin', sysdate(), '', null, '');
\ No newline at end of file
+values('${functionName}导出', @parentId, '5', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:export', '#', 1, sysdate(), 1, null, '');
diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
index 1c44c24..b6449e6 100644
--- a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
+++ b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
@@ -163,7 +163,7 @@
/>
-
+
#foreach($column in $columns)
#set($field=$column.javaField)
diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm
index 0ceb3d8..9fb48d9 100644
--- a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm
+++ b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm
@@ -3,133 +3,5 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-
-
-#foreach ($column in $columns)
-
-#end
-
-#if($table.sub)
-
-
-
-
-
-#foreach ($column in $subTable.columns)
-
-#end
-
-#end
-
-
- select#foreach($column in $columns) $column.columnName#if($foreach.count != $columns.size()),#end#end from ${tableName}
-
-
-
-
-
-
-
- insert into ${tableName}
-
-#foreach($column in $columns)
-#if($column.columnName != $pkColumn.columnName || !$pkColumn.increment)
- $column.columnName,
-#end
-#end
-
-
-#foreach($column in $columns)
-#if($column.columnName != $pkColumn.columnName || !$pkColumn.increment)
- #{$column.javaField},
-#end
-#end
-
-
-
-
- update ${tableName}
-
-#foreach($column in $columns)
-#if($column.columnName != $pkColumn.columnName)
- $column.columnName = #{$column.javaField},
-#end
-#end
-
- where ${pkColumn.columnName} = #{${pkColumn.javaField}}
-
-
-
- delete from ${tableName} where ${pkColumn.columnName} = #{${pkColumn.javaField}}
-
-
-
- delete from ${tableName} where ${pkColumn.columnName} in
-
- #{${pkColumn.javaField}}
-
-
-#if($table.sub)
-
-
- delete from ${subTableName} where ${subTableFkName} in
-
- #{${subTableFkclassName}}
-
-
-
-
- delete from ${subTableName} where ${subTableFkName} = #{${subTableFkclassName}}
-
-
-
- insert into ${subTableName}(#foreach($column in $subTable.columns) $column.columnName#if($foreach.count != $subTable.columns.size()),#end#end) values
-
- (#foreach($column in $subTable.columns) #{item.$column.javaField}#if($foreach.count != $subTable.columns.size()),#end#end)
-
-
-#end
-
\ No newline at end of file
+