diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTable.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTable.java index 31757fdc0..102a712d1 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTable.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTable.java @@ -215,6 +215,10 @@ public class GenTable implements Serializable { return isSub(this.tplCategory); } + public boolean isJoin() { + return StrUtil.equals(GenConstants.TPL_JOIN, tplCategory); + } + public static boolean isSub(String tplCategory) { return tplCategory != null && StrUtil.equals(GenConstants.TPL_SUB, tplCategory); } diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java index 81ce0556d..4c77d9a7c 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java @@ -159,7 +159,9 @@ public class VelocityUtils joinInfoMap.put("tableFkName", tableFkName); GenTableColumn genTableColumn = genTableColumnMap.get(tableFkName); // 主表关联的字段(tableFkName),如果本身就在列表中展示,就会在各个vm中生成拼接,如果不需要在列表中展示,关联查询却仍需要这个字段,为避免重复生成增加该flag进行判断 - joinInfoMap.put("tableFkGenerateFlag", !genTableColumn.isList()); + joinInfoMap.put("tableFkListFlag", !genTableColumn.isList()); + // 主表关联的字段(tableFkName),如果本身就支持查询,就会在各个vm中生成拼接,如果不支持查询,关联查询却仍需要这个字段,为避免重复生成增加该flag进行判断 + joinInfoMap.put("tableFkQueryFlag", !genTableColumn.isQuery()); joinInfoMap.put("tableFkColumn", genTableColumn); String joinField = joinInfo.getJoinField(); @@ -177,18 +179,18 @@ public class VelocityUtils for (String showField : showFields) { Map showFieldMap = new HashMap<>(); showFieldList.add(showFieldMap); - String showFiledName = StrUtil.toCamelCase(showField); - String showFiledUpperName = StrUtil.upperFirst(showFiledName); + String showFieldName = StrUtil.toCamelCase(showField); + String showFieldUpperName = StrUtil.upperFirst(showFieldName); showFieldMap.put("showField", showField); - showFieldMap.put("showFiledName", showFiledName); - showFieldMap.put("showFiledUpperName", showFiledUpperName); + showFieldMap.put("showFieldName", showFieldName); + showFieldMap.put("showFieldUpperName", showFieldUpperName); GenTableColumn column = columnMap.get(showField); showFieldMap.put("showFieldJavaType", column.getJavaType()); showFieldMap.put("showFieldDictType", column.getDictType()); if (StringUtils.isNotBlank(column.getColumnComment())) { showFieldMap.put("showFieldComment", column.getColumnComment()); } else { - showFieldMap.put("showFieldComment", joinTableLowerClassName + showFiledUpperName); + showFieldMap.put("showFieldComment", joinTableLowerClassName + showFieldUpperName); } } } @@ -205,10 +207,15 @@ public class VelocityUtils String queryFiledName = StrUtil.toCamelCase(queryField); String queryFiledUpperName = StrUtil.upperFirst(queryFiledName); queryFieldMap.put("queryField", queryField); - queryFieldMap.put("queryFiledName", queryFiledName); - queryFieldMap.put("queryFiledUpperName", queryFiledUpperName); + queryFieldMap.put("queryFieldName", queryFiledName); + queryFieldMap.put("queryFieldUpperName", queryFiledUpperName); GenTableColumn column = columnMap.get(queryField); + queryFieldMap.put("queryFieldHtmlType", column.getHtmlType()); + queryFieldMap.put("queryFieldDictType", column.getDictType()); + queryFieldMap.put("queryFieldJavaType", column.getJavaType()); + queryFieldMap.put("queryFieldQueryType", column.getQueryType()); + if (StringUtils.isNotBlank(column.getColumnComment())) { queryFieldMap.put("queryFieldComment", column.getColumnComment()); } else { diff --git a/ruoyi-generator/src/main/resources/vm/java/queryBo.java.vm b/ruoyi-generator/src/main/resources/vm/java/queryBo.java.vm index c7be08991..2842af81b 100644 --- a/ruoyi-generator/src/main/resources/vm/java/queryBo.java.vm +++ b/ruoyi-generator/src/main/resources/vm/java/queryBo.java.vm @@ -10,7 +10,7 @@ import java.util.Date; #foreach ($import in $importList) import ${import}; #end -#if($table.crud || $table.sub) +#if($table.crud || $table.sub || $table.join) import com.ruoyi.common.core.domain.BaseEntity; #elseif($table.tree) import com.ruoyi.common.core.domain.TreeEntity; @@ -22,7 +22,7 @@ import com.ruoyi.common.core.domain.TreeEntity; * @author ${author} * @date ${datetime} */ -#if($table.crud || $table.sub) +#if($table.crud || $table.sub || $table.join) #set($Entity="BaseEntity") #elseif($table.tree) #set($Entity="TreeEntity") @@ -58,4 +58,24 @@ public class ${ClassName}QueryBo extends ${Entity} { #end #end +#foreach ($joinInfo in $joinInfos) +#if(${joinInfo.tableFkQueryFlag}) + + // 补充主表字段 + private ${joinInfo.tableFkColumn.javaType} ${joinInfo.tableFkColumn.javaField}; +#end + +#if($foreach.hasNext) + // 关联表 ${joinInfo.joinTableLowerClassName} 相关字段 +#end +#foreach ($queryField in $joinInfo.queryFields) + /** $queryField.queryFieldComment */ +#if($queryField.queryFieldJavaType == 'Date') + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") +#end + @ApiModelProperty("$queryField.queryFieldComment") + private ${queryField.queryFieldJavaType} ${joinInfo.joinTableLowerClassName}${queryField.queryFieldUpperName}; +#end +#end + } diff --git a/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm b/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm index c727ce6ef..b08d2699e 100644 --- a/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm +++ b/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm @@ -2,15 +2,20 @@ package ${packageName}.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.StrUtil; -#if($table.crud || $table.sub) +#if($table.crud || $table.sub || $table.join) import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.core.page.PagePlus; import com.ruoyi.common.core.page.TableDataInfo; #end import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +#if($table.join) +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +#else import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +#end import ${packageName}.bo.${ClassName}AddBo; import ${packageName}.bo.${ClassName}QueryBo; import ${packageName}.bo.${ClassName}EditBo; @@ -37,7 +42,7 @@ public class ${ClassName}ServiceImpl extends ServiceImpl<${ClassName}Mapper, ${C return getVoById(${pkColumn.javaField}, ${ClassName}Vo.class); } -#if($table.crud || $table.sub) +#if($table.crud || $table.sub || $table.join) @Override public TableDataInfo<${ClassName}Vo> queryPageList(${ClassName}QueryBo bo) { PagePlus<${ClassName}, ${ClassName}Vo> result = pageVo(PageUtils.buildPagePlus(), buildQueryWrapper(bo), ${ClassName}Vo.class); @@ -50,6 +55,31 @@ public class ${ClassName}ServiceImpl extends ServiceImpl<${ClassName}Mapper, ${C return listVo(buildQueryWrapper(bo), ${ClassName}Vo.class); } +#if($table.join) + private Wrapper<${ClassName}> buildQueryWrapper(${ClassName}QueryBo bo) { + Map params = bo.getParams(); + QueryWrapper<${ClassName}> qw = new QueryWrapper(); +#foreach ($joinInfo in $joinInfos) +#if($foreach.hasNext) + // 关联表 ${joinInfo.joinTableLowerClassName} 相关字段 +#end +#foreach ($queryField in $joinInfo.queryFields) +#if(${queryField.queryFieldQueryType} != 'BETWEEN') +#if(${queryField.queryFieldJavaType} == 'String') +#set($condition='StrUtil.isNotBlank(bo.get'+${joinInfo.joinTableUpperClassName}+${queryField.queryFieldUpperName}+'())') +#else +#set($condition='bo.get'+${joinInfo.joinTableUpperClassName}+${queryField.queryFieldUpperName}+'() != null') +#end + qw.${queryField.queryFieldQueryType.toLowerCase()}($condition, "${joinInfo.joinTable}.${queryField.queryField}", bo.get${joinInfo.joinTableUpperClassName}${queryField.queryFieldUpperName}()); +#else + qw.between(params.get("begin${queryField.queryFieldUpperName}") != null && params.get("end${queryField.queryFieldUpperName}") != null, + "${joinInfo.joinTable}.${joinInfo.joinField}" ,params.get("begin${queryField.queryFieldUpperName}"), params.get("end${queryField.queryFieldUpperName}")); +#end +#end +#end + return qw; + } +#else private LambdaQueryWrapper<${ClassName}> buildQueryWrapper(${ClassName}QueryBo bo) { Map params = bo.getParams(); LambdaQueryWrapper<${ClassName}> lqw = Wrappers.lambdaQuery(); @@ -76,6 +106,7 @@ public class ${ClassName}ServiceImpl extends ServiceImpl<${ClassName}Mapper, ${C #end return lqw; } +#end @Override public Boolean insertByAddBo(${ClassName}AddBo bo) { diff --git a/ruoyi-generator/src/main/resources/vm/java/vo.java.vm b/ruoyi-generator/src/main/resources/vm/java/vo.java.vm index f14b50eed..e774349ca 100644 --- a/ruoyi-generator/src/main/resources/vm/java/vo.java.vm +++ b/ruoyi-generator/src/main/resources/vm/java/vo.java.vm @@ -50,12 +50,13 @@ public class ${ClassName}Vo { #end #foreach ($joinInfo in $joinInfos) -#if(${joinInfo.tableFkGenerateFlag}) +#if(${joinInfo.tableFkListFlag}) // 补充主表字段 private ${joinInfo.tableFkColumn.javaType} ${joinInfo.tableFkColumn.javaField}; #end // 关联表 ${joinInfo.joinTableLowerClassName} 字段 #foreach ($showField in $joinInfo.showFields) + /** $showField.showFieldComment */ #if($showField.showFieldJavaType == 'Date') @Excel(name = "${showField.showFieldComment}" , width = 30, dateFormat = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") diff --git a/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm b/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm index 8ae24f9a2..58679c186 100644 --- a/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm +++ b/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm @@ -62,6 +62,61 @@ #end #end +#end + +#foreach($joinInfo in $joinInfos) +#foreach($queryField in $joinInfo.queryFields) +#if($queryField.queryFieldHtmlType == "input") + + + +#elseif(($queryField.queryFieldHtmlType == "select" || $queryField.queryFieldHtmlType == "radio") && "" != $queryField.queryFieldDictType) + + + + + +#elseif(($queryField.queryFieldHtmlType == "select" || $queryField.queryFieldHtmlType == "radio") && $queryField.queryFieldDictType) + + + + + +#elseif($queryField.queryFieldHtmlType == "datetime" && $queryField.queryFieldQueryType != "BETWEEN") + + + + +#elseif($queryField.queryFieldHtmlType == "datetime" && $queryField.queryFieldQueryType == "BETWEEN") + + + +#end +#end #end 搜索 @@ -143,9 +198,9 @@ #foreach ($showField in $joinInfo.showFields) #if($showField.showFieldDictType && "" != $showField.showFieldDictType) - + #else - + #end #end #end @@ -195,7 +250,7 @@ @@ -437,8 +492,8 @@ export default { #foreach($joinInfo in $joinInfos) #foreach ($showField in $joinInfo.showFields) #if($showField.showFieldDictType && "" != $showField.showFieldDictType) - // $comment字典 - ${joinInfo.joinTableLowerClassName}${showField.showFiledUpperName}Options: [], + // ${showField.showFieldComment}字典 + ${joinInfo.joinTableLowerClassName}${showField.showFieldUpperName}Options: [], #end #end #end @@ -488,7 +543,7 @@ export default { #foreach ($showField in $joinInfo.showFields) #if($showField.showFieldDictType && "" != $showField.showFieldDictType) this.getDicts("${showField.showFieldDictType}").then(response => { - this.${joinInfo.joinTableLowerClassName}${showField.showFiledUpperName}Options = response.data; + this.${joinInfo.joinTableLowerClassName}${showField.showFieldUpperName}Options = response.data; }); #end #end @@ -525,7 +580,7 @@ export default { list${joinInfo.joinGenTableBusinessName}({ pageNum: 1, pageSize: 10, - ${joinInfo.showFields.get(0).showFiledName}: keyword + ${joinInfo.showFields.get(0).showFieldName}: keyword }).then(response => { that.${joinInfo.joinGenTable.moduleName}${joinInfo.joinGenTableBusinessName}Options = response.rows }); @@ -549,8 +604,8 @@ export default { #foreach ($showField in $joinInfo.showFields) #if($showField.showFieldDictType && "" != $showField.showFieldDictType) // $comment字典翻译 - ${joinInfo.joinTableLowerClassName}${showField.showFiledUpperName}Format(row, column) { - return this.selectDictLabel#if($column.htmlType == "checkbox")s#end(this.${joinInfo.joinTableLowerClassName}${showField.showFiledUpperName}Options, row.${joinInfo.joinTableLowerClassName}${showField.showFiledUpperName}); + ${joinInfo.joinTableLowerClassName}${showField.showFieldUpperName}Format(row, column) { + return this.selectDictLabel#if($column.htmlType == "checkbox")s#end(this.${joinInfo.joinTableLowerClassName}${showField.showFieldUpperName}Options, row.${joinInfo.joinTableLowerClassName}${showField.showFieldUpperName}); }, #end #end diff --git a/ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm b/ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm index 56dd3cc27..3c1b6ae13 100644 --- a/ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm +++ b/ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm @@ -15,7 +15,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #foreach ($joinInfo in $joinInfos) #foreach ($showField in $joinInfo.showFields) - + #end #end diff --git a/ruoyi-ui/src/views/tool/gen/genInfoForm.vue b/ruoyi-ui/src/views/tool/gen/genInfoForm.vue index 7ab9410a0..b2d96021f 100644 --- a/ruoyi-ui/src/views/tool/gen/genInfoForm.vue +++ b/ruoyi-ui/src/views/tool/gen/genInfoForm.vue @@ -263,9 +263,14 @@ +