From 968e26c59395bfb03e252424ede776e485fe04a4 Mon Sep 17 00:00:00 2001 From: dataprince Date: Wed, 6 Dec 2023 11:16:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=B8=BB=E5=AD=90=E8=A1=A8?= =?UTF-8?q?=E2=80=9C=E4=BB=A3=E7=A0=81=E7=94=9F=E6=88=90=E2=80=9D=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E9=87=8D=E6=9E=84=EF=BC=8C=E6=94=AF=E6=8C=81mybatis-f?= =?UTF-8?q?lex?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 1 - .../ruoyi/generator/util/VelocityUtils.java | 70 +++++----------- .../src/main/resources/vm/java/domain.java.vm | 9 +- .../resources/vm/java/serviceImpl.java.vm | 52 ++++++++---- .../main/resources/vm/java/sub-domain.java.vm | 82 ++++++++----------- .../main/resources/vm/java/sub-mapper.java.vm | 21 +++++ .../src/main/resources/vm/java/vo.java.vm | 12 ++- .../main/resources/vm/xml/sub-mapper.xml.vm | 7 ++ .../service/impl/SysDataScopeServiceImpl.java | 1 - .../service/impl/SysNoticeServiceImpl.java | 2 +- .../service/impl/SysUserServiceImpl.java | 1 - 11 files changed, 138 insertions(+), 120 deletions(-) create mode 100644 ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/sub-mapper.java.vm create mode 100644 ruoyi-modules/ruoyi-generator/src/main/resources/vm/xml/sub-mapper.xml.vm diff --git a/pom.xml b/pom.xml index 89fa6e3..deec93e 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,6 @@ 5.3.3 2.0.41 6.4.6 - 3.2.2 5.2.3 3.3.2 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 2616ce6..bfddef5 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 @@ -116,8 +116,10 @@ public class VelocityUtils context.put("subTableName", subTableName); context.put("subTableFkName", subTableFkName); context.put("subTableFkClassName", subTableFkClassName); + context.put("CapitalUnderScoreSubTableFkClassName", StringUtils.upperCase(StringUtils.toUnderScoreCase(subTableFkClassName)));//带下划线的字段大写 context.put("subTableFkclassName", StringUtils.uncapitalize(subTableFkClassName)); context.put("subClassName", subClassName); + context.put("CapitalUnderScoreSubClassName", StringUtils.upperCase(StringUtils.toUnderScoreCase(subClassName)));//大写的子类类名下划线:SYS_USER context.put("subclassName", StringUtils.uncapitalize(subClassName)); context.put("subImportList", getImportList(genTable.getSubTable())); } @@ -152,6 +154,8 @@ public class VelocityUtils { templates.add("vm/vue/index.vue.vm"); templates.add("vm/java/sub-domain.java.vm"); + templates.add("vm/java/sub-mapper.java.vm"); + templates.add("vm/xml/sub-mapper.xml.vm"); } return templates; } @@ -176,56 +180,26 @@ public class VelocityUtils String mybatisPath = MYBATIS_PATH + "/" + moduleName; String vuePath = "vue"; - if (template.contains("domain.java.vm")) + switch (template) { - fileName = StringUtils.format("{}/domain/{}.java", javaPath, className); - } - 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); - } - else if (template.contains("service.java.vm")) - { - fileName = StringUtils.format("{}/service/I{}Service.java", javaPath, className); - } - else if (template.contains("serviceImpl.java.vm")) - { - fileName = StringUtils.format("{}/service/impl/{}ServiceImpl.java", javaPath, className); - } - else if (template.contains("controller.java.vm")) - { - fileName = StringUtils.format("{}/controller/{}Controller.java", javaPath, className); - } - else if (template.contains("mapper.xml.vm")) - { - fileName = StringUtils.format("{}/{}Mapper.xml", mybatisPath, className); - } - else if (template.contains("sql.vm")) - { - fileName = businessName + "Menu.sql"; - } - else if (template.contains("api.js.vm")) - { - fileName = StringUtils.format("{}/api/{}/{}.js", vuePath, moduleName, businessName); - } - else if (template.contains("index.vue.vm")) - { - fileName = StringUtils.format("{}/views/{}/{}/index.vue", vuePath, moduleName, businessName); - } - else if (template.contains("index-tree.vue.vm")) - { - fileName = StringUtils.format("{}/views/{}/{}/index.vue", vuePath, moduleName, businessName); + case "vm/java/domain.java.vm" -> fileName = StringUtils.format("{}/domain/{}.java", javaPath, className); + case "vm/java/sub-domain.java.vm" -> fileName = StringUtils.format("{}/domain/{}.java", javaPath, genTable.getSubTable().getClassName()); + case "vm/java/vo.java.vm" -> fileName = StringUtils.format("{}/domain/vo/{}Vo.java", javaPath, className); + case "vm/java/bo.java.vm" -> fileName = StringUtils.format("{}/domain/bo/{}Bo.java", javaPath, className); + case "vm/java/mapper.java.vm" -> fileName = StringUtils.format("{}/mapper/{}Mapper.java", javaPath, className); + case "vm/java/sub-mapper.java.vm" -> fileName = StringUtils.format("{}/mapper/{}Mapper.java", javaPath, genTable.getSubTable().getClassName()); + case "vm/java/service.java.vm" -> fileName = StringUtils.format("{}/service/I{}Service.java", javaPath, className); + case "vm/java/serviceImpl.java.vm" -> fileName = StringUtils.format("{}/service/impl/{}ServiceImpl.java", javaPath, className); + case "vm/java/controller.java.vm" -> fileName = StringUtils.format("{}/controller/{}Controller.java", javaPath, className); + case "vm/xml/mapper.xml.vm" -> fileName = StringUtils.format("{}/{}Mapper.xml", mybatisPath, className); + case "vm/xml/sub-mapper.xml.vm" -> fileName = StringUtils.format("{}/{}Mapper.xml", mybatisPath, genTable.getSubTable().getClassName()); + case "vm/sql/sql.vm" -> fileName = businessName + "Menu.sql"; + case "vm/js/api.js.vm" -> fileName = StringUtils.format("{}/api/{}/{}.js", vuePath, moduleName, businessName); + case "vm/vue/index.vue.vm" -> fileName = StringUtils.format("{}/views/{}/{}/index.vue", vuePath, moduleName, businessName); + case "vm/vue/index-tree.vue.vm" -> fileName = StringUtils.format("{}/views/{}/{}/index.vue", vuePath, moduleName, businessName); + default -> fileName = "default.xml"; } + return fileName; } 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 6ccb7eb..cdb3a2e 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,6 +3,9 @@ package ${packageName}.domain; #foreach ($import in $importList) import ${import}; #end +#if($table.sub) +import ${packageName}.domain.${subClassName}; +#end import com.mybatisflex.annotation.Id; import com.mybatisflex.annotation.Table; import lombok.Data; @@ -46,8 +49,8 @@ public class ${ClassName} extends ${Entity} #end #end #if($table.sub) -/** $table.subTable.functionName信息 */ -private List<${subClassName}> ${subclassName}List; - + /** $table.subTable.functionName信息 */ + private List<${subClassName}> ${subclassName}List; #end + } 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 7fe2d6e..73c8b3a 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 @@ -22,14 +22,16 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; #if($table.sub) import java.util.ArrayList; +import java.util.Arrays; import ${packageName}.domain.${subClassName}; +import ${packageName}.mapper.${subClassName}Mapper; +import static ${packageName}.domain.table.${subClassName}TableDef.${CapitalUnderScoreSubClassName}; #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.${CapitalUnderScoreClassName}; /** @@ -43,6 +45,10 @@ public class ${ClassName}ServiceImpl extends BaseServiceImpl<${ClassName}Mapper, { @Resource private ${ClassName}Mapper ${className}Mapper; + #if($table.sub) + @Resource + private ${subClassName}Mapper ${subclassName}Mapper; + #end @Override public QueryWrapper query() { @@ -92,7 +98,12 @@ public class ${ClassName}ServiceImpl extends BaseServiceImpl<${ClassName}Mapper, public ${ClassName}Vo selectById(${pkColumn.javaType} ${pkColumn.javaField}) { #set($CapitalPkColumn=${pkColumn.columnName.toUpperCase()}) + #if($table.sub) + return ${className}Mapper.selectOneWithRelationsByQueryAs(query().where(${CapitalUnderScoreClassName}.${CapitalPkColumn}.eq(${pkColumn.javaField})), ${ClassName}Vo.class); + #else return this.getOneAs(query().where(${CapitalUnderScoreClassName}.${CapitalPkColumn}.eq(${pkColumn.javaField})), ${ClassName}Vo.class); + #end + } /** @@ -105,7 +116,11 @@ public class ${ClassName}ServiceImpl extends BaseServiceImpl<${ClassName}Mapper, public List<${ClassName}Vo> selectList(${ClassName}Bo ${className}Bo) { QueryWrapper queryWrapper = buildQueryWrapper(${className}Bo); + #if($table.sub) + return ${className}Mapper.selectListWithRelationsByQueryAs(queryWrapper, ${ClassName}Vo.class); + #else return this.listAs(queryWrapper, ${ClassName}Vo.class); + #end } #if($table.crud || $table.sub) @@ -119,7 +134,11 @@ public class ${ClassName}ServiceImpl extends BaseServiceImpl<${ClassName}Mapper, public TableDataInfo<${ClassName}Vo> selectPage(${ClassName}Bo ${className}Bo) { QueryWrapper queryWrapper = buildQueryWrapper(${className}Bo); + #if($table.sub) + Page<${ClassName}Vo> page = ${className}Mapper.paginateWithRelationsAs(PageQuery.build(), queryWrapper, ${ClassName}Vo.class); + #else Page<${ClassName}Vo> page = this.pageAs(PageQuery.build(), queryWrapper, ${ClassName}Vo.class); + #end return TableDataInfo.build(page); } #end @@ -140,7 +159,7 @@ public class ${ClassName}ServiceImpl extends BaseServiceImpl<${ClassName}Mapper, #if($table.sub) boolean inserted = this.save(${className});//使用全局配置的雪花算法主键生成器生成ID值 - if (inserted) { + if (inserted && ObjectUtil.isNotNull(${className})) { return insert${subClassName}(${className}); } return false; @@ -162,15 +181,17 @@ public class ${ClassName}ServiceImpl extends BaseServiceImpl<${ClassName}Mapper, public boolean update(${ClassName}Bo ${className}Bo) { ${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}); + if(ObjectUtil.isNotNull(${className}) && ObjectUtil.isNotNull(${className}.get${pkColumn.capJavaField}())) { + boolean updated = this.updateById(${className}); + #if($table.sub) + if (updated) { + QueryWrapper queryWrapper = QueryWrapper.create().from(${CapitalUnderScoreSubClassName}).where(${CapitalUnderScoreSubClassName}.${CapitalUnderScoreSubTableFkClassName}.eq(${className}.get${pkColumn.capJavaField}())); + ${subclassName}Mapper.deleteByQuery(queryWrapper); + return insert${subClassName}(${className}); + } + #end } - #end - return updated; + return false; } /** @@ -183,9 +204,10 @@ public class ${ClassName}ServiceImpl extends BaseServiceImpl<${ClassName}Mapper, @Override public boolean deleteByIds(${pkColumn.javaType}[] ${pkColumn.javaField}s) { -#if($table.sub) - ${className}Mapper.delete${subClassName}By${subTableFkClassName}s(${pkColumn.javaField}s); -#end + #if($table.sub) + QueryWrapper queryWrapper = QueryWrapper.create().from(${CapitalUnderScoreSubClassName}).where(${CapitalUnderScoreSubClassName}.${CapitalUnderScoreSubTableFkClassName}.in(Arrays.asList(${pkColumn.javaField}s))); + ${subclassName}Mapper.deleteByQuery(queryWrapper); + #end return this.removeByIds(Arrays.asList(${pkColumn.javaField}s)); } @@ -195,7 +217,7 @@ public class ${ClassName}ServiceImpl extends BaseServiceImpl<${ClassName}Mapper, * * @param ${className} ${functionName}对象 */ - public boolean insert${subClassName}(${ClassName} ${className}) + private boolean insert${subClassName}(${ClassName} ${className}) { List<${subClassName}> ${subclassName}List = ${className}.get${subClassName}List(); ${pkColumn.javaType} ${pkColumn.javaField} = ${className}.get${pkColumn.capJavaField}(); @@ -209,7 +231,7 @@ public class ${ClassName}ServiceImpl extends BaseServiceImpl<${ClassName}Mapper, } if (list.size() > 0) { - ${className}Mapper.batch${subClassName}(list); + return ${subclassName}Mapper.insertBatch(list)>0; } } return true; diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/sub-domain.java.vm b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/sub-domain.java.vm index 8de9459..78034d5 100644 --- a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/sub-domain.java.vm +++ b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/sub-domain.java.vm @@ -3,7 +3,17 @@ package ${packageName}.domain; #foreach ($import in $subImportList) import ${import}; #end -import com.ruoyi.common.core.core.annotation.Excel; +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.Table; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.io.Serial; +import java.io.Serializable; +#if($table.crud || $table.sub) +import com.ruoyi.common.orm.core.domain.BaseEntity; +#elseif($table.tree) +import com.ruoyi.common.orm.core.domain.TreeEntity; +#end /** * ${subTable.functionName}对象 ${subTableName} @@ -11,63 +21,37 @@ import com.ruoyi.common.core.core.annotation.Excel; * @author ${author} * ${datetime} */ -public class ${subClassName} extends BaseEntity +#if($table.crud || $table.sub) + #set($Entity="BaseEntity") +#elseif($table.tree) + #set($Entity="TreeEntity") +#end +@Data +@EqualsAndHashCode(callSuper = true) +@Table(value = "${subTableName}") +public class ${subClassName} extends ${Entity} { + @Serial private static final long serialVersionUID = 1L; #foreach ($column in $subTable.columns) -#if(!$table.isSuperColumn($column.javaField)) +#if(!$subTable.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($parentheseIndex != -1) - @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") -#elseif($column.javaType == 'Date') + #if($column.javaField=='delFlag') + @Column(isLogicDelete = true) + #end + #if($column.javaField=='version') + @Column(version = true) + #end + #if($column.isPk==1) + @Id + #end + #if($column.javaType == 'Date') @JsonFormat(pattern = "yyyy-MM-dd") - @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd") -#else - @Excel(name = "${comment}") -#end -#end + #end private $column.javaType $column.javaField; #end #end -#foreach ($column in $subTable.columns) -#if(!$table.isSuperColumn($column.javaField)) -#if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]")) -#set($AttrName=$column.javaField) -#else -#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) -#end - public void set${AttrName}($column.javaType $column.javaField) - { - this.$column.javaField = $column.javaField; - } - public $column.javaType get${AttrName}() - { - return $column.javaField; - } -#end -#end - - @Override - public String toString() { - return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) -#foreach ($column in $subTable.columns) -#if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]")) -#set($AttrName=$column.javaField) -#else -#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) -#end - .append("${column.javaField}", get${AttrName}()) -#end - .toString(); - } } diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/sub-mapper.java.vm b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/sub-mapper.java.vm new file mode 100644 index 0000000..aaf3186 --- /dev/null +++ b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/sub-mapper.java.vm @@ -0,0 +1,21 @@ +package ${packageName}.mapper; + +import com.mybatisflex.core.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +#if($table.sub) +import ${packageName}.domain.${subClassName}; +#else +import ${packageName}.domain.${ClassName}; +#end + +/** + * ${subTable.functionName}Mapper接口 + * + * @author ${author} + * ${datetime} + */ +@Mapper +public interface ${subClassName}Mapper extends BaseMapper<${subClassName}> +{ + +} 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 index fa8d058..0d0871d 100644 --- 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 @@ -11,7 +11,10 @@ import com.ruoyi.common.excel.convert.ExcelDictConvert; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; import lombok.EqualsAndHashCode; - +#if($table.sub) +import com.mybatisflex.annotation.RelationOneToMany; +import ${packageName}.domain.${subClassName}; +#end import java.io.Serial; import java.io.Serializable; import java.util.Date; @@ -70,4 +73,11 @@ public class ${ClassName}Vo extends ${Entity} implements Serializable #end #end #end + +#if($table.sub) + /** $table.subTable.functionName信息 */ + @RelationOneToMany(selfField = "${pkColumn.javaField}", targetField = "${pkColumn.javaField}") + private List<${subClassName}> ${subclassName}List; +#end + } diff --git a/ruoyi-modules/ruoyi-generator/src/main/resources/vm/xml/sub-mapper.xml.vm b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/xml/sub-mapper.xml.vm new file mode 100644 index 0000000..fd00ff5 --- /dev/null +++ b/ruoyi-modules/ruoyi-generator/src/main/resources/vm/xml/sub-mapper.xml.vm @@ -0,0 +1,7 @@ + + + + + diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDataScopeServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDataScopeServiceImpl.java index 4b57516..fc32970 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDataScopeServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDataScopeServiceImpl.java @@ -130,7 +130,6 @@ public class SysDataScopeServiceImpl implements ISysDataScopeService { } queryWrapper.and(bracket(queryCondition));//所有新增的插叙条件外边用圆括号包括起来 - //System.out.println("*******************:SysDataScopeServiceImpl.filter:queryWrapper.tosql="+queryWrapper.toSQL()); return queryWrapper; } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java index 4a78484..0a655cc 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java @@ -45,7 +45,7 @@ public class SysNoticeServiceImpl extends BaseServiceImpl if (StringUtils.isNotEmpty(userBo.getPhonenumber())) { queryWrapper.and(SYS_USER.PHONENUMBER.like(userBo.getPhonenumber())); } - //TODO:数据范围过滤 Page page = this.pageAs(PageQuery.build(), queryWrapper, SysUserVo.class); return TableDataInfo.build(page);