多变关联查询

This commit is contained in:
20932067@zju.edu.cn 2021-02-26 17:21:05 +08:00
parent aaf933d5ca
commit 14453f2c10
22 changed files with 1125 additions and 231 deletions

View File

@ -210,7 +210,7 @@ export default {
const relTables = this.$refs.genInfo.relTables;
console.log(relTables)
for (let i=0;i<relTables.length;i++){
if (relTables[i].unionId===null){
if (relTables[i].tableName===null){
Message({
message: "关联父表不能为空!",
type: 'error'
@ -240,7 +240,7 @@ export default {
}
}
let assColumns = null;
if (assCloumnTable!=undefined){
if (assCloumnTable!==undefined){
assColumns = assCloumnTable.data
}
Promise.all([basicForm, genForm].map(this.getFormPromise)).then(res => {

View File

@ -396,13 +396,13 @@
<i class="el-icon-question"></i>
</el-tooltip>
</span>
<el-select v-model="table.tableIndex" @change="tableChange(table.tableIndex,index)"
<el-select v-model="table.tableName" @change="tableChange(table.tableName,index)"
placeholder="请选择关联主表">
<el-option
v-for="(item , num) in tableList"
:key="num"
v-for="(item , index) in tableList"
:key="index"
:label="item.tableName"
:value="num"
:value="item.tableName"
/>
</el-select>
</el-form-item>
@ -636,10 +636,43 @@ export default {
};
},
created() {
this.relTables = []
this.tableId = this.$route.params && this.$route.params.tableId;
getTableInfos().then(res => {
this.tableInfo = res.data
})
getRelColumnInfos(this.tableId).then(res => {
if (res.data.length === 0) {
getRelId().then(res => {
let relTable = {
id: res.data,
tableId: this.tableId,
tableName:null,
relName: null,
relComment: null,
relColumn: null,
tableColumn: null,
queryType: 'left',
sort: 1,
tableColumns: [],
relColumns: [],
}
this.relTables.push(relTable);
})
} else {
let data = res.data
for (let i=0;i<data.length;i++){
let table = {
tableName: data[i].relName,
}
getTableColumns(data[i].tableName).then(res => {
data[i].tableColumns = res.data
})
this.tableList.push(table)
}
this.relTables=data
}
})
},
watch: {
'info.subTableName': function (val) {
@ -651,60 +684,20 @@ export default {
this.assCloumns = res.data
})
} else if (val.tplCategory === 'rel') {
this.tableList = []
let table = {
tableName: val.tableName,
unionId: this.tableId,
isMain: 1,
tableName: val.tableName
}
this.tableList.push(table)
getRelColumnInfos(val.tableId).then(res => {
this.relTables = []
if (res.data.length === 0) {
getRelId().then(res => {
let relTable = {
id: res.data,
unionId: null,
tableId: this.tableId,
isMain: 2,
relName: null,
relComment: null,
relColumn: null,
tableColumn: null,
queryType: 'left',
sort: 1,
tableColumns: [],
relColumns: [],
}
this.relTables.push(relTable);
})
} else {
let data = res.data
for (let i=0;i<data.length;i++){
let table = {
tableName: data[i].relName,
unionId: data[i].id,
isMain: 1,
}
this.tableList.push(table)
}
this.relTables=res.data
}
})
this.tableList.unshift(table)
}
}
},
methods: {
/** 关联父表改变 */
tableChange(num, index) {
this.relTables[index].unionId = this.tableList[num].unionId
this.relTables[index].isMain = this.tableList[num].isMain
let tableName = this.tableList[num].tableName
tableChange(tableName, index) {
getTableColumns(tableName).then(res => {
this.relTables[index].tableColumns = res.data
})
console.log(this.relTables)
},
/** 删除关子联表 */
removeRelTable(index) {
@ -716,8 +709,6 @@ export default {
getRelColumns(relName, this.relTables[index].id).then(res => {
let table = {
tableName: relName,
unionId: this.relTables[index].id,
isMain: 2,
}
this.tableList.push(table)
for (let i = 0; i < this.tableInfo.length; i++) {
@ -734,10 +725,8 @@ export default {
getRelId().then(res => {
let relTable = {
id: res.data,
unionId: this.tableId,
tableId: this.tableId,
isMain: 1,
tableIndex: null,
tableName:null,
relName: null,
relComment: null,
relColumn: null,
@ -773,9 +762,34 @@ export default {
},
/** 选择生成模板触发 */
tplSelectChange(value) {
if (value !== 'sub') {
if (value === 'rel'){
this.tableList = []
let table = {
tableName: this.info.tableName,
}
this.tableList.push(table)
getRelId().then(res => {
let relTable = {
id: res.data,
tableId: this.tableId,
tableName:null,
relName: null,
relComment: null,
relColumn: null,
tableColumn: null,
queryType: 'left',
sort: 1,
tableColumns: [],
relColumns: [],
}
this.relTables.push(relTable);
})
}else if (value !== 'sub') {
this.info.subTableName = '';
this.info.subTableFkName = '';
this.relTables=[]
}else {
this.relTables=[]
}
},
/** 设置关联外键 */

View File

@ -165,8 +165,8 @@
<el-tabs v-model="preview.activeName">
<el-tab-pane
v-for="(value, key) in preview.data"
:label="key.substring(key.lastIndexOf('/')+1,key.indexOf('.vm'))"
:name="key.substring(key.lastIndexOf('/')+1,key.indexOf('.vm'))"
:label="key"
:name="key"
:key="key"
>
<pre><code class="hljs" v-html="highlightedCode(value, key)"></code></pre>
@ -304,7 +304,7 @@ export default {
},
/** 高亮显示 */
highlightedCode(code, key) {
const vmName = key.substring(key.lastIndexOf("/") + 1, key.indexOf(".vm"));
const vmName = key;
var language = vmName.substring(vmName.indexOf(".") + 1, vmName.length);
const result = hljs.highlight(language, code || "", true);
return result.value || '&nbsp;';

View File

@ -1,7 +1,5 @@
package com.hchyun.generator.entity;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import java.util.List;
public class RelTable {
@ -9,14 +7,16 @@ public class RelTable {
//表id
private long id;
//unionid
private long unionId;
//主表id
private long tableId;
//是否是一级关联查询
private Integer isMain;
//关联子表表名
private String relName;
//子表表名称简写
private String relAs;
//父表名称
private String tableName;
//父表名称简写
private String tableAs;
//关联子表描述
private String relComment;
//关联子表的字段
@ -25,6 +25,8 @@ public class RelTable {
private String tableColumn;
//实体类名称(子表)
private String relClass;
//实体小写类名称(子表)
private String relclass;
//查询方式
private String queryType;
//排序
@ -34,14 +36,6 @@ public class RelTable {
private List<RelColumn> relColumns;
public List<RelColumn> getRelColumns() {
return relColumns;
}
public void setRelColumns(List<RelColumn> relColumns) {
this.relColumns = relColumns;
}
public long getId() {
return id;
}
@ -50,14 +44,6 @@ public class RelTable {
this.id = id;
}
public long getUnionId() {
return unionId;
}
public void setUnionId(long unionId) {
this.unionId = unionId;
}
public long getTableId() {
return tableId;
}
@ -66,14 +52,6 @@ public class RelTable {
this.tableId = tableId;
}
public Integer getIsMain() {
return isMain;
}
public void setIsMain(Integer isMain) {
this.isMain = isMain;
}
public String getRelName() {
return relName;
}
@ -82,6 +60,30 @@ public class RelTable {
this.relName = relName;
}
public String getRelAs() {
return relAs;
}
public void setRelAs(String relAs) {
this.relAs = relAs;
}
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public String getTableAs() {
return tableAs;
}
public void setTableAs(String tableAs) {
this.tableAs = tableAs;
}
public String getRelComment() {
return relComment;
}
@ -114,6 +116,14 @@ public class RelTable {
this.relClass = relClass;
}
public String getRelclass() {
return relclass;
}
public void setRelclass(String relclass) {
this.relclass = relclass;
}
public String getQueryType() {
return queryType;
}
@ -137,4 +147,12 @@ public class RelTable {
public void setCreateBy(long createBy) {
this.createBy = createBy;
}
public List<RelColumn> getRelColumns() {
return relColumns;
}
public void setRelColumns(List<RelColumn> relColumns) {
this.relColumns = relColumns;
}
}

View File

@ -4,6 +4,7 @@ import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@ -13,8 +14,7 @@ import java.util.zip.ZipOutputStream;
import com.hchyun.generator.dao.AssociatedDao;
import com.hchyun.generator.dao.RelDao;
import com.hchyun.generator.entity.AssColumn;
import com.hchyun.generator.entity.RelTable;
import com.hchyun.generator.entity.*;
import com.hchyun.generator.service.GenTableService;
import com.hchyun.generator.utils.*;
import com.hchyun.generator.utils.constant.Constants;
@ -33,8 +33,6 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.hchyun.generator.entity.GenTable;
import com.hchyun.generator.entity.GenTableColumn;
import com.hchyun.generator.dao.GenTableColumnDao;
import com.hchyun.generator.dao.GenTableDao;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
@ -170,7 +168,11 @@ public class GenTableServiceImpl implements GenTableService {
relTables = genTable.getRelTables();
for (int i = 0; i < relTables.size(); i++) {
RelTable relTable = relTables.get(i);
relTable.setTableAs(GenStringUtils.sqlFormat(relTable.getTableName()));
relTable.setRelAs(GenStringUtils.sqlFormat(relTable.getRelName()));
relTable.setRelClass(GenUtils.convertClassName(relTable.getRelName()));
relTable.setCreateBy(GenSecurityUtils.getUserId());
relTable.setRelclass(GenStringUtils.uncapitalize(relTable.getRelClass()));
relTables.set(i,relTable);
}
if (relTables != null) {
@ -200,6 +202,15 @@ public class GenTableServiceImpl implements GenTableService {
try {
genTableDao.deleteGenTableByIds(tableIds);
genTableColumnDao.deleteGenTableColumnByIds(tableIds);
for (Long tableId : tableIds) {
List<RelTable> relTables = relDao.relTableByTableId(tableId);
if (relTables.size()>0){
relDao.deleteRelTableByTableId(tableId);
for (RelTable relTable : relTables) {
relDao.deleteRelColumnByRelId(relTable.getId());
}
}
}
return new GenServerResult<>(true);
} catch (RuntimeException e) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@ -252,8 +263,10 @@ public class GenTableServiceImpl implements GenTableService {
// 设置主子表信息
setSubTable(table);
}
if (table.getTplCategory().equals(GenConstants.TPL_ASS)) {
table.setAssColumns(associatedDao.selectTableColumnByTableId(tableId));
if (table.getTplCategory().equals(GenConstants.TPL_REL)) {
List<RelTable> relTables = relDao.relTableByTableId(tableId);
relTables = relTables.stream().sorted(Comparator.comparing(RelTable::getSort)).collect(Collectors.toList());
table.setRelTables(relTables);
}
// 设置主键列信息
setPkColumn(table);
@ -265,10 +278,24 @@ public class GenTableServiceImpl implements GenTableService {
List<String> templates = VelocityUtils.getTemplateList(table.getTplCategory());
for (String template : templates) {
// 渲染模板
if (template.equals("vm/java/rel-entity.java.vm")){
List<RelTable> relTables = table.getRelTables();
for (RelTable relTable : relTables) {
List<RelColumn> relColumns = relTable.getRelColumns();
relColumns = relColumns.stream().sorted(Comparator.comparing(RelColumn::getSort)).collect(Collectors.toList());
relTable.setRelColumns(relColumns);
context.put("relTable",relTable);
StringWriter stringWriter = new StringWriter();
Template temp = Velocity.getTemplate(template,Constants.UTF8);
temp.merge(context,stringWriter);
dataMap.put(VelocityUtils.getPreviewName(template,relTable.getRelClass()),stringWriter.toString());
}
continue;
}
StringWriter sw = new StringWriter();
Template tpl = Velocity.getTemplate(template, Constants.UTF8);
tpl.merge(context, sw);
dataMap.put(template, sw.toString());
dataMap.put(VelocityUtils.getPreviewName(template,table.getClassName()), sw.toString());
}
return dataMap;
} catch (RuntimeException e) {
@ -322,6 +349,26 @@ public class GenTableServiceImpl implements GenTableService {
for (String template : templates) {
if (!GenStringUtils.containsAny(template, "table.sql.vm", "api.js.vm", "index.vue.vm", "index-tree.vue.vm")) {
// 渲染模板
if (template.equals("vm/java/rel-entity.java.vm")){
List<RelTable> relTables = table.getRelTables();
for (RelTable relTable : relTables) {
List<RelColumn> relColumns = relTable.getRelColumns();
relColumns = relColumns.stream().sorted(Comparator.comparing(RelColumn::getSort)).collect(Collectors.toList());
relTable.setRelColumns(relColumns);
context.put("relTable",relTable);
StringWriter stringWriter = new StringWriter();
Template temp = Velocity.getTemplate(template,Constants.UTF8);
temp.merge(context,stringWriter);
try {
String path = getGenPath(table, template);
FileUtils.writeStringToFile(new File(path), stringWriter.toString(), CharsetKit.UTF_8);
} catch (IOException e) {
logger.error("渲染模板失败,表名:" + table.getTableName());
return false;
}
}
continue;
}
StringWriter sw = new StringWriter();
Template tpl = Velocity.getTemplate(template, Constants.UTF8);
tpl.merge(context, sw);
@ -431,22 +478,17 @@ public class GenTableServiceImpl implements GenTableService {
* todo 查询表信息并生成代码
*/
private ZipOutputStream generatorCode(String tableName, ZipOutputStream zip) {
try {
} catch (RuntimeException e) {
logger.error(e.getMessage());
throw new GenCustomException(GenReturnConstants.OP_ERROR);
}
// 查询表信息
GenTable table = genTableDao.selectGenTableByName(tableName);
// 设置主子表信息
setSubTable(table);
// 设置主键列信息
setPkColumn(table);
if (table.getTplCategory().equals(GenConstants.TPL_ASS)) {
table.setAssColumns(associatedDao.selectTableColumnByTableId(table.getTableId()));
if (table.getTplCategory().equals(GenConstants.TPL_REL)) {
List<RelTable> relTables = relDao.relTableByTableId(table.getTableId());
relTables = relTables.stream().sorted(Comparator.comparing(RelTable::getSort)).collect(Collectors.toList());
table.setRelTables(relTables);
}
VelocityInitializer.initVelocity();
VelocityContext context = VelocityUtils.prepareContext(table);
@ -454,7 +496,31 @@ public class GenTableServiceImpl implements GenTableService {
// 获取模板列表
List<String> templates = VelocityUtils.getTemplateList(table.getTplCategory());
for (String template : templates) {
// 渲染模板
if (template.equals("vm/java/rel-entity.java.vm")){
List<RelTable> relTables = table.getRelTables();
for (RelTable relTable : relTables) {
List<RelColumn> relColumns = relTable.getRelColumns();
relColumns = relColumns.stream().sorted(Comparator.comparing(RelColumn::getSort)).collect(Collectors.toList());
relTable.setRelColumns(relColumns);
context.put("relTable",relTable);
StringWriter stringWriter = new StringWriter();
Template temp = Velocity.getTemplate(template,Constants.UTF8);
temp.merge(context,stringWriter);
try {
// 添加到zip
zip.putNextEntry(new ZipEntry(VelocityUtils.getRelFileName(template, table,relTable)));
IOUtils.write(stringWriter.toString(), zip, Constants.UTF8);
IOUtils.closeQuietly(stringWriter);
zip.flush();
zip.closeEntry();
} catch (IOException e) {
logger.error("渲染模板失败,表名:" + table.getTableName(), e);
}
}
continue;
}
StringWriter sw = new StringWriter();
Template tpl = Velocity.getTemplate(template, Constants.UTF8);
tpl.merge(context, sw);

View File

@ -403,6 +403,10 @@ public class GenStringUtils extends org.apache.commons.lang3.StringUtils {
return sqlStr;
}
public static String toLoad(String str){
return str.substring(0,1).toLowerCase()+str.substring(1);
}
@SuppressWarnings("unchecked")
public static <T> T cast(Object obj) {
return (T) obj;

View File

@ -4,6 +4,7 @@ import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import com.hchyun.generator.entity.RelTable;
import com.hchyun.generator.utils.constant.GenConstants;
import org.apache.velocity.VelocityContext;
import com.alibaba.fastjson.JSONObject;
@ -69,18 +70,15 @@ public class VelocityUtils {
if (GenConstants.TPL_SUB.equals(tplCategory)) {
setSubVelocityContext(velocityContext, genTable);
}
if (GenConstants.TPL_ASS.equals(tplCategory)) {
setAssVelocityContext(velocityContext, genTable);
if (GenConstants.TPL_REL.equals(tplCategory)) {
setRelVelocityContext(velocityContext, genTable);
}
return velocityContext;
}
public static void setAssVelocityContext(VelocityContext context, GenTable genTable) {
String assClassName = GenUtils.convertClassName(genTable.getAssTableName());
context.put("assClassName", assClassName);
context.put("assclassName", GenStringUtils.uncapitalize(assClassName));
public static void setRelVelocityContext(VelocityContext context, GenTable genTable) {
context.put("relTables", genTable.getRelTables());
context.put("tableMapping", GenStringUtils.sqlFormat(genTable.getTableName()));
context.put("assMapping", GenStringUtils.sqlFormat(genTable.getAssTableName()));
}
public static void setMenuVelocityContext(VelocityContext context, GenTable genTable) {
@ -150,12 +148,56 @@ public class VelocityUtils {
} else if (GenConstants.TPL_SUB.equals(tplCategory)) {
templates.add("vm/vue/index.vue.vm");
templates.add("vm/java/sub-entity.java.vm");
} else if (GenConstants.TPL_ASS.equals(tplCategory)) {
} else if (GenConstants.TPL_REL.equals(tplCategory)) {
templates.add("vm/vue/index.vue.vm");
templates.add("vm/java/ass-entity.java.vm");
templates.add("vm/java/rel-entity.java.vm");
}
return templates;
}
public static String getRelFileName(String template, GenTable genTable, RelTable relTable){
// 文件名称
String fileName = "";
// 包路径
String packageName = genTable.getPackageName();
// 模块名
String moduleName = genTable.getModuleName();
String javaPath = PROJECT_PATH + "/" + GenStringUtils.replace(packageName, ".", "/");
fileName = GenStringUtils.format("{}/entity/{}.java", javaPath, relTable.getRelClass());
return fileName;
}
public static String getPreviewName(String template, String ClassName) {
String fileName = "";
if (template.contains("entity.java.vm")) {
fileName = GenStringUtils.format("{}.java", ClassName);
}
if (template.contains("sub-entity.java.vm") && GenStringUtils.equals(GenConstants.TPL_SUB, ClassName)) {
fileName = GenStringUtils.format("{}.java", ClassName);
} else if (template.contains("rel-entity.java.vm")) {
fileName = GenStringUtils.format("{}.java", ClassName);
} else if (template.contains("dao.java.vm")) {
fileName = GenStringUtils.format("{}Dao.java", ClassName);
} else if (template.contains("service.java.vm")) {
fileName = GenStringUtils.format("{}Service.java", ClassName);
} else if (template.contains("serviceImpl.java.vm")) {
fileName = GenStringUtils.format("{}ServiceImpl.java", ClassName);
} else if (template.contains("controller.java.vm")) {
fileName = GenStringUtils.format("{}Controller.java",ClassName);
} else if (template.contains("mapper.xml.vm")) {
fileName = GenStringUtils.format("{}Mapper.xml",ClassName);
} else if (template.contains("table.sql.vm")) {
fileName = ClassName + "menu.sql";
} else if (template.contains("api.js.vm")) {
fileName = GenStringUtils.format("{}.js", GenStringUtils.toLoad(ClassName));
} else if (template.contains("index.vue.vm")) {
fileName = "index.vue";
} else if (template.contains("index-tree.vue.vm")) {
fileName = "index.vue";
}
return fileName;
}
/**
* 获取文件名
@ -194,7 +236,7 @@ public class VelocityUtils {
} else if (template.contains("mapper.xml.vm")) {
fileName = GenStringUtils.format("{}/{}Mapper.xml", mybatisPath, className);
} else if (template.contains("table.sql.vm")) {
fileName = businessName + "GenMenu.sql";
fileName = businessName + "menu.sql";
} else if (template.contains("api.js.vm")) {
fileName = GenStringUtils.format("{}/api/{}/{}.js", vuePath, moduleName, businessName);
} else if (template.contains("index.vue.vm")) {

View File

@ -25,6 +25,10 @@ public class GenConstants {
* 关联查询增删改查
*/
public static final String TPL_ASS = "ass";
/**
* 多表关联查询增删改查
*/
public static final String TPL_REL = "rel";
/**
* 树编码字段

View File

@ -6,14 +6,16 @@
<resultMap id="RelTableResult" type="com.hchyun.generator.entity.RelTable">
<result property="id" column="id"/>
<result property="unionId" column="union_id"/>
<result property="tableId" column="table_id"/>
<result property="isMain" column=""/>
<result property="relName" column="rel_name"/>
<result property="relAs" column="rel_as"/>
<result property="tableName" column="table_name"/>
<result property="tableAs" column="table_as"/>
<result property="relComment" column="rel_comment"/>
<result property="relColumn" column="rel_column"/>
<result property="tableColumn" column="table_column"/>
<result property="relClass" column="rel_class"/>
<result property="relclass" column="relclass"/>
<result property="queryType" column="query_type"/>
<result property="sort" column="sort"/>
<result property="createBy" column="create_by"/>
@ -30,10 +32,10 @@
<result property="javaField" column="java_field"/>
<result property="isList" column="is_list"/>
<result property="isQuery" column="is_query"/>
<result property="queryType" column="query_type"/>
<result property="queryType" column="col_query_type"/>
<result property="htmlType" column="html_type"/>
<result property="dictType" column="dict_type"/>
<result property="sort" column="sort"/>
<result property="sort" column="sorts"/>
<result property="createBy" column="create_by"/>
</resultMap>
@ -55,17 +57,17 @@
from information_schema.columns
where table_schema = (select database())
and table_name = (#{tableName})
order by sort
order by sort desc
</select>
<insert id="insertRelTables" parameterType="java.util.List">
insert into gen_rel_table(id, union_id, table_id, is_main, rel_name, rel_comment,
rel_column, table_column, rel_class, query_type, sort, create_by)
insert into gen_rel_table(id, table_id, rel_name,rel_as,table_name,table_as, rel_comment,
rel_column, table_column, rel_class, relclass, query_type, sort, create_by)
values
<foreach collection="list" item="item" index="index" separator=",">
(#{item.id},#{item.unionId},#{item.tableId},#{item.isMain},
#{item.relName},#{item.relComment},#{item.relColumn},#{item.tableColumn},#{item.relClass},
#{item.queryType},#{item.sort},#{item.createBy})
(#{item.id},#{item.tableId},#{item.relName},#{item.relAs},#{item.tableName},
#{item.tableAs},#{item.relComment},#{item.relColumn},#{item.tableColumn},#{item.relClass},
#{item.relclass},#{item.queryType},#{item.sort},#{item.createBy})
</foreach>
</insert>
@ -89,11 +91,12 @@
</select>
<select id="relTableByTableId" resultMap="RelTableColumnResult" parameterType="Long">
select grt.id, grt.union_id, grt.table_id, grt.is_main, grt.rel_name, grt.rel_comment, grt.rel_column, grt.table_column, grt.rel_class, grt.query_type, grt.sort, grt.create_by,
grc.rel_id, grc.column_name, grc.column_comment, grc.column_type, grc.java_type, grc.java_field, grc.is_list, grc.is_query, grc.query_type, grc.html_type, grc.dict_type, grc.sort, grc.create_by
select grt.id, grt.table_id, grt.rel_name, grt.rel_as, grt.table_name, grt.table_as, grt.rel_comment, grt.rel_column, grt.table_column, grt.rel_class, grt.relclass, grt.query_type, grt.sort, grt.create_by,
grc.rel_id, grc.column_name, grc.column_comment, grc.column_type, grc.java_type, grc.java_field, grc.is_list, grc.is_query, grc.query_type as col_query_type, grc.html_type, grc.dict_type, grc.sort as sorts, grc.create_by
from gen_rel_table grt
left join gen_rel_column grc on grt.id = grc.rel_id
where grt.table_id = #{tableId}
order by grt.sort desc
</select>
<delete id="deleteRelColumnByRelId">

View File

@ -32,7 +32,7 @@ import com.hchyun.common.utils.poi.ExcelUtil;
#if($table.crud || $table.sub)
import com.hchyun.common.core.page.TableDataInfo;
#elseif($table.tree)
#elseif($table.tplCategory.equals("ass"))
#elseif($table.tplCategory.equals("rel"))
import org.springframework.validation.annotation.Validated;
#end
@ -63,7 +63,7 @@ public class ${ClassName}Controller extends HcyBaseController {
startPage(${className}.getParams());
ServerResult<List<${ClassName}>> genServerResult = ${className}Service.select${ClassName}List(${className});
if (genServerResult.isStart()) {
#if($table.crud || $table.sub || $table.tplCategory.equals("ass"))
#if($table.crud || $table.sub || $tplCategory.equals("rel"))
return getDataTable(genServerResult.getData());
#elseif($table.tree)
return AjaxResult.success(genServerResult.getData());

View File

@ -3,8 +3,7 @@ package ${packageName}.entity;
#foreach ($import in $importList)
import ${import};
#end
import com.hchyun.common.annotation.Excel;
#if($table.crud || $table.sub)
#if($table.crud || $table.sub || $tplCategory.equals("rel"))
#set($Entity="BaseEntity")
#elseif($table.tree)
#set($Entity="TreeEntity")
@ -17,10 +16,10 @@ import ${packageName}.entity.${assClassName};
import ${packageName}.entity.${subClassName};
#end
import com.hchyun.common.core.entity.${Entity};
import com.hchyun.common.annotation.Excel;
import com.hchyun.common.annotation.Excels;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* ${functionName}对象 ${tableName}
@ -34,12 +33,10 @@ import org.apache.commons.lang3.builder.ToStringStyle;
#set($Entity="TreeEntity")
#end
@ApiModel("${functionName}")
public class ${ClassName} extends ${Entity}
{
private static final long serialVersionUID = 1L;
public class ${ClassName} extends ${Entity}{
#foreach ($column in $columns)
#if(!$table.isSuperColumn($column.javaField))
/** $column.columnComment */
#if($column.list)
#set($parentheseIndex=$column.columnComment.indexOf(""))
@ -67,17 +64,17 @@ public class ${ClassName} extends ${Entity}
@ApiModelProperty("${table.subTable.functionName}信息")
private List<${subClassName}> ${subclassName}List;
#elseif($table.tplCategory.equals("ass"))
#set($count = 0)
#foreach($column in $table.assColumns)
#if($column.isList == "1")
#set($count = $count + 1)
#elseif($tplCategory.equals("rel"))
#foreach($table in $relTables)
#foreach($column in $table.relColumns)
#if($column.isList.equals("1"))
#set($count = $count + 1)
#end
#end
#set($targetName = "")
#set($indexs = 0)
#foreach($column in $table.assColumns)
#if($column.isList == "1")
#foreach($column in $table.relColumns)
#if($column.isList.equals("1"))
#set($parentheseIndex=$column.columnComment.indexOf(""))
#if($parentheseIndex != -1)
#set($comment=$column.columnComment.substring(0, $parentheseIndex))
@ -87,12 +84,16 @@ public class ${ClassName} extends ${Entity}
#set($indexs = $indexs + 1)
#set($targetName = $targetName + '@Excel(name = "'+$comment+'",targetAttr = "'+$column.javaField+'")')
#if($indexs != $count)
#set($targetName = $targetName + ",")
#set($targetName = $targetName + ",")
#end
#end
#end
@Excels({${targetName}}))
private ${assClassName} ${assclassName};
/** ${table.relComment}信息 */
@Excels({${targetName}})
private ${table.relClass} ${table.relclass};
#end
#end
#foreach ($column in $columns)
@ -120,16 +121,16 @@ public class ${ClassName} extends ${Entity}
public void set${subClassName}List(List<${subClassName}> ${subclassName}List){
this.${subclassName}List = ${subclassName}List;
}
#elseif($table.tplCategory.equals("rel"))
#foreach($table in $relTables)
public ${table.relClass} get${table.relClass}(){
return ${table.relclass};
}
public void set${table.relClass}(${table.relClass} ${table.relclass}){
this.${table.relclass} = ${table.relclass};
}
#end
#if($table.tplCategory.equals("ass"))
public ${assClassName} get${assClassName}(){
return ${assclassName};
}
public void set${assClassName}(${assClassName} ${assclassName}){
this.${assclassName} = ${assclassName};
}
#end
@Override
public String toString() {
@ -144,6 +145,10 @@ public class ${ClassName} extends ${Entity}
#end
#if($table.sub)
.append("${subclassName}List", get${subClassName}List())
#elseif($tplCategory.equals("rel"))
#foreach($table in $relTables)
.append("${table.relclass}",get${table.relClass}())
#end
#end
.toString();
}

View File

@ -1,10 +1,9 @@
package ${packageName}.entity;
#foreach ($import in $subImportList)
import ${import};
#end
import com.hchyun.common.annotation.Excel;
import com.hchyun.common.core.entity.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
*
@ -12,9 +11,9 @@ import com.hchyun.common.core.entity.BaseEntity;
* @date ${datetime}
*/
public class ${assClassName} extends BaseEntity{
public class ${relTable.relClass} extends BaseEntity{
#foreach($column in $table.assColumns)
#foreach($column in $relTable.relColumns)
#if(!$table.isSuperColumn($column.javaField))
/** $column.columnComment */
#set($parentheseIndex=$column.columnComment.indexOf(""))
@ -36,7 +35,7 @@ public class ${assClassName} extends BaseEntity{
#end
#end
#foreach ($column in $table.assColumns)
#foreach ($column in $relTable.relColumns)
#if(!$table.isSuperColumn($column.javaField))
#if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
#set($AttrName=$column.javaField)

View File

@ -63,7 +63,9 @@
#end
#end
#end
#foreach($column in $table.assColumns)
#if($tplCategory.equals("rel"))
#foreach($table in $relTables)
#foreach($column in $table.relColumns)
#if($column.isQuery == '1')
#set($dictType=$column.dictType)
#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
@ -76,7 +78,7 @@
#if($column.htmlType == "input")
<el-form-item label="${comment}" prop="${column.javaField}">
<el-input
v-model="queryParams.${assclassName}.${column.javaField}"
v-model="queryParams.${table.relclass}.${column.javaField}"
placeholder="请输入${comment}"
clearable
size="small"
@ -85,9 +87,9 @@
</el-form-item>
#elseif(($column.htmlType == "select" || $column.htmlType == "radio") && "" != $dictType)
<el-form-item label="${comment}" prop="${column.javaField}">
<el-select v-model="queryParams.${assclassName}.${column.javaField}" placeholder="请选择${comment}" clearable size="small">
<el-select v-model="queryParams.${table.relclass}.${column.javaField}" placeholder="请选择${comment}" clearable size="small">
<el-option
v-for="dict in ${column.javaField}Options"
v-for="dict in ${table.relclass}${column.javaField}Options"
:key="dict.dictValue"
:label="dict.dictLabel"
:value="dict.dictValue"
@ -96,14 +98,14 @@
</el-form-item>
#elseif(($column.htmlType == "select" || $column.htmlType == "radio") && $dictType)
<el-form-item label="${comment}" prop="${column.javaField}">
<el-select v-model="queryParams.${assclassName}.${column.javaField}" placeholder="请选择${comment}" clearable size="small">
<el-select v-model="queryParams.${table.relclass}.${column.javaField}" placeholder="请选择${comment}" clearable size="small">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
#elseif($column.htmlType == "datetime" && $column.queryType != "BETWEEN")
<el-form-item label="${comment}" prop="${column.javaField}">
<el-date-picker clearable size="small"
v-model="queryParams.${assclassName}.${column.javaField}"
v-model="queryParams.${table.relclass}.${column.javaField}"
type="date"
value-format="yyyy-MM-dd"
placeholder="选择${comment}">
@ -112,7 +114,7 @@
#elseif($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
<el-form-item label="${comment}">
<el-date-picker
v-model="ass${AttrName}"
v-model="${table.relclass}${AttrName}"
size="small"
style="width: 240px"
value-format="yyyy-MM-dd"
@ -124,6 +126,8 @@
</el-form-item>
#end
#end
#end
#end
#end
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
@ -188,22 +192,22 @@
#set($comment=$column.columnComment)
#end
#if($column.pk)
<el-table-column label="${comment}" align="center" prop="${javaField}" />
<el-table-column label="${comment}" align="center" prop="${javaField}" />
#elseif($column.list && $column.htmlType == "datetime")
<el-table-column label="${comment}" align="center" prop="${javaField}" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.${javaField}, '{y}-{m}-{d} {h}:{m}:{s}') }}</span>
</template>
</el-table-column>
<el-table-column label="${comment}" align="center" prop="${javaField}" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.${javaField}, '{y}-{m}-{d} {h}:{m}:{s}') }}</span>
</template>
</el-table-column>
#elseif($column.list && "" != $column.dictType)
<el-table-column label="${comment}" align="center" prop="${javaField}" :formatter="${javaField}Format" />
<el-table-column label="${comment}" align="center" prop="${javaField}" :formatter="${javaField}Format" />
#elseif($column.list && "" != $javaField)
<el-table-column label="${comment}" align="center" prop="${javaField}" />
<el-table-column label="${comment}" align="center" prop="${javaField}" />
#end
#end
#if($table.tplCategory.equals("ass"))
#foreach($column in $table.assColumns)
#if($tplCategory.equals("rel"))
#foreach($table in $relTables)
#foreach($column in $table.relColumns)
#set($javaField=$column.javaField)
#set($parentheseIndex=$column.columnComment.indexOf(""))
#if($parentheseIndex != -1)
@ -212,19 +216,19 @@
#set($comment=$column.columnComment)
#end
#if($column.isList == "1" && $column.htmlType == "datetime")
<el-table-column label="${comment}" align="center" prop="${assclassName}.${javaField}" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.${assClassName}.${javaField}, '{y}-{m}-{d} {h}:{m}:{s}') }}</span>
</template>
</el-table-column>
<el-table-column label="${comment}" align="center" prop="${table.relclass}.${javaField}" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.${table.relclass}.${javaField}, '{y}-{m}-{d} {h}:{m}:{s}') }}</span>
</template>
</el-table-column>
#elseif($column.isList == "1" && "" != $column.dictType)
<el-table-column label="${comment}" align="center" prop="${assclassName}.${javaField}" :formatter="${javaField}Format" />
<el-table-column label="${comment}" align="center" prop="${table.relclass}.${javaField}" :formatter="${javaField}Format" />
#elseif($column.isList == "1" && "" != $javaField)
<el-table-column label="${comment}" align="center" prop="${assclassName}.${javaField}" />
<el-table-column label="${comment}" align="center" prop="${table.relclass}.${javaField}" />
#end
#end
#end
#end
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
@ -480,20 +484,23 @@ export default {
daterange${AttrName}: [],
#end
#end
#foreach ($column in $table.assColumns)
#foreach($table in $relTables)
#foreach($column in $table.relColumns)
#set($parentheseIndex=$column.columnComment.indexOf(""))
#if($parentheseIndex != -1)
#set($comment=$column.columnComment.substring(0, $parentheseIndex))
#else
#set($comment=$column.columnComment)
#end
#if(${column.dictType} != '')
#if(!$column.dictType.equals(""))
// $comment字典
${column.javaField}Options: [],
${table.relclass}${column.javaField}Options: [],
#elseif($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
// $comment时间范围
ass${AttrName}: [],
${table.relclass}${AttrName}: [],
#end
#end
#end
// 查询参数
@ -508,15 +515,16 @@ export default {
#end
#end
#if($table.tplCategory.equals("ass"))
${assclassName}: {
#foreach ($column in $table.assColumns)
#if($table.tplCategory.equals("rel"))
#foreach($table in $relTables)
${table.relclass}: {
#foreach($column in $table.relColumns)
#if($column.isQuery == '1' && $column.htmlType != "datetime" && $column.queryType != "BETWEEN")
${column.javaField}: null#if($velocityCount != $columns.size()),#end
#end
#end
}
#end
#end
},
// 表单参数
@ -551,6 +559,17 @@ export default {
this.${column.javaField}Options = response.data;
});
#end
#end
#if($table.tplCategory.equals("rel"))
#foreach ($table in $relTables)
#foreach ($column in $table.relColumns)
#if(${column.dictType} != '')
this.getDicts("${column.dictType}").then(response => {
this.${table.relclass}${column.javaField}Options = response.data;
});
#end
#end
#end
#end
},
methods: {
@ -565,20 +584,23 @@ export default {
this.queryParams.params["end${AttrName}"] = this.daterange${AttrName}[1];
}
#end
#end
#foreach ($column in $table.assColumns)
#end#if($tplCategory.equals("rel"))
#foreach($table in $relTables)
#foreach($column in $table.relColumns)
#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
if (null != this.ass${AttrName} && '' != this.ass${AttrName}) {
this.queryParams.params["assbegin${AttrName}"] = this.ass${AttrName}[0];
this.queryParams.params["assend${AttrName}"] = this.ass${AttrName}[1];
this.queryParams.${table.relclass}.params["begin${AttrName}"] = this.ass${AttrName}[0];
this.queryParams.${table.relclass}.params["end${AttrName}"] = this.ass${AttrName}[1];
}
#end
#end
#end
#end
list${BusinessName}(this.queryParams).then(response => {
this.${businessName}List = response.rows;
this.total = response.total;
this.loading = false;
this.${businessName}List = response.rows;
this.total = response.total;
this.loading = false;
});
},
#foreach ($column in $columns)
@ -635,10 +657,15 @@ export default {
#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
this.daterange${AttrName} = [];
#end
#end#foreach ($column in $table.assColumns)
#end
#if($tplCategory.equals("rel"))
#foreach($table in $relTables)
#foreach($column in $table.relColumns)
#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
this.assdaterange${AttrName} = [];
this.${table.relass}${AttrName} = [];
#end
#end
#end
#end
this.resetForm("queryForm");

View File

@ -21,36 +21,45 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#end
</resultMap>
#end
#if($table.tplCategory.equals("ass"))
<resultMap id="${ClassName}${assClassName}Result" type="${packageName}.entity.${ClassName}" extends="${ClassName}Result">
<collection property="${assclassName}" notNullColumn="${table.assTableColumn}" javaType="${packageName}.entity.${assClassName}" resultMap="${assClassName}Result" />
#if($table.tplCategory.equals("rel"))
<resultMap id="${ClassName}AllResult" type="${packageName}.entity.${ClassName}" extends="${ClassName}Result">
#foreach($table in $relTables)
<collection property="${table.relClass}" notNullColumn="${table.relColumn}" javaType="${packageName}.entity.${table.relClass}" resultMap="${table.relClass}Result" />
#end
</resultMap>
<resultMap type="${packageName}.entity.${assClassName}" id="${assClassName}Result">
#foreach ($column in $table.assColumns)
#foreach($table in $relTables)
<resultMap id="${table.relClass}Result" type="${packageName}.entity.${table.relClass}">
#foreach($column in $table.relColumns)
<result property="${column.javaField}" column="${column.columnName}" />
#end
</resultMap>
#end
#end
<sql id="select${ClassName}Vo">
select#foreach($column in $columns) $column.columnName#if($velocityCount != $columns.size()),#end#end from ${tableName}
</sql>
#if($table.tplCategory.equals("ass"))
<select id="select${ClassName}List" parameterType="${ClassName}" resultMap="${ClassName}${assClassName}Result">
select#foreach($column in $columns) ${tableMapping}.$column.columnName#if($velocityCount != $columns.size()),#end#end,
#if($tplCategory.equals("rel"))
<select id="select${ClassName}List" parameterType="${ClassName}" resultMap="${ClassName}AllResult">
select #foreach($column in $columns) ${tableMapping}.$column.columnName#if($velocityCount != $columns.size()),#end#end,
#foreach($table in $relTables)
#set($count = 0)
#foreach($column in $table.assColumns)
#foreach($column in $table.relColumns)
#if($column.isList == "1")
#set($count = $count + 1)
#end
#end
#set($targetName = "")
#set($indexs = 0)
#foreach($column in $table.assColumns)#if($column.isList == "1")#set($indexs = $indexs + 1)${assMapping}.$column.columnName#if($indexs != $count), #end#end
#foreach($column in $table.relColumns) #if($column.isList == "1")#set($indexs = $indexs + 1)${table.relAs}.$column.columnName#if($indexs != $count),#end#end#end#if($velocityCount != $columns.size()),
#end
#end
from ${tableName} ${tableMapping}
${table.assQueryType} join ${table.assTableName} ${assMapping} on ${assMapping}.${table.assTableFkColumn} = ${tableMapping}.${table.assTableColumn}
#foreach($table in $relTables)
${table.queryType} join ${table.relName} on ${table.tableAs}.${table.tableColumn} = ${table.relAs}.${table.relColumn}
#end
<where>
#foreach($column in $columns)
#set($queryType=$column.queryType)
@ -78,11 +87,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#end
#end
#end
#foreach($column in $table.assColumns)
#foreach($table in $relTables)
#foreach($column in $table.relColumns)
#set($queryType=$column.queryType)
#set($javaField=$assclassName+'.'+$column.javaField)
#set($javaField=$table.relclass + "." + $column.javaField)
#set($javaType=$column.javaType)
#set($columnName=$assMapping+'.'+$column.columnName)
#set($columnName=$table.relclass+'.'+$column.columnName)
#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
#if($column.isQuery.equals("1"))
#if($column.queryType == "EQ")
@ -100,7 +110,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#elseif($queryType == "LIKE")
<if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName like concat('%', #{$javaField}, '%')</if>
#elseif($queryType == "BETWEEN")
<if test="params.assbegin$AttrName != null and params.assbegin$AttrName != '' and params.assend$AttrName != null and params.assend$AttrName != ''"> and $columnName between #{params.assbegin$AttrName} and #{params.assend$AttrName}</if>
<if test="${table.relclass}.params.begin$AttrName != null and ${table.relclass}.params.begin$AttrName != '' and ${table.relclass}.params.end$AttrName != null and ${table.relclass}.params.end$AttrName != ''"> and $columnName between #{${table.relclass}.params.begin$AttrName} and #{${table.relclass}.params.end$AttrName}</if>
#end
#end
#end
#end
@ -138,35 +149,41 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</where>
</select>
<select id="select${ClassName}ById" parameterType="${pkColumn.javaType}" resultMap="#if($table.sub)${ClassName}${subClassName}Result#else${ClassName}Result#end">
#if($table.crud || $table.tree)
<select id="select${ClassName}ById" parameterType="${pkColumn.javaType}" resultMap="#if($table.sub)${ClassName}${subClassName}Result#elseif($tplCategory.equals("ass"))${ClassName}AllResult#else${ClassName}Result#end">
#if($table.crud || $table.tree || $tplCategory.equals("rel"))
<include refid="select${ClassName}Vo"/>
where ${pkColumn.columnName} = #{${pkColumn.javaField}}
#elseif($table.sub)
select#foreach($column in $columns) ${tableMapping}.$column.columnName#if($velocityCount != $columns.size()),#end#end,
#foreach($column in $subTable.columns) ${subMapping}.$column.columnName#if($velocityCount != $subTable.columns.size()),#end#end
#foreach($column in $subTable.columns) ${subMapping}.$column.columnName#if($velocityCount != $subTable.columns.size()),#end#end
from ${tableName} ${tableMapping}
left join ${subTableName} ${subMapping} on ${subMapping}.${subTableFkName} = ${tableMapping}.${pkColumn.columnName}
left join ${subTableName} ${subMapping} on ${subMapping}.${subTableFkName} = ${tableMapping}.${pkColumn.columnName}
where ${tableMapping}.${pkColumn.columnName} = #{${pkColumn.javaField}}
#elseif($table.tplCategory.equals("ass"))
select#foreach($column in $columns) ${tableMapping}.$column.columnName#if($velocityCount != $columns.size()),#end#end,
#end
</select>
#if($tplCategory.equals("rel"))
<select id="select${ClassName}AllById" parameterType="${pkColumn.javaType}" resultMap="${ClassName}AllResult">
select #foreach($column in $columns) ${tableMapping}.$column.columnName#if($velocityCount != $columns.size()),#end#end,
#foreach($table in $relTables)
#set($count = 0)
#foreach($column in $table.assColumns)
#foreach($column in $table.relColumns)
#if($column.isList == "1")
#set($count = $count + 1)
#end
#end
#set($targetName = "")
#set($indexs = 0)
#foreach($column in $table.assColumns)#if($column.isList == "1")#set($indexs = $indexs + 1)${assMapping}.$column.columnName#if($indexs != $count), #end#end
#foreach($column in $table.relColumns) #if($column.isList == "1")#set($indexs = $indexs + 1)${table.relAs}.$column.columnName#if($indexs != $count),#end#end#end#if($velocityCount != $columns.size()),
#end
#end
from ${tableName} ${tableMapping}
${table.assQueryType} join ${table.assTableName} ${assMapping} on ${assMapping}.${table.assTableFkColumn} = ${tableMapping}.${table.assTableColumn}
where ${tableMapping}.${pkColumn.columnName} = #{${pkColumn.javaField}}
#foreach($table in $relTables)
${table.queryType} join ${table.relName} on ${table.tableAs}.${table.tableColumn} = ${table.relAs}.${table.relColumn}
#end
where ${tableMapping}.${pkColumn.columnName} = #{${pkColumn.javaField}}
</select>
#end
<insert id="insert${ClassName}" parameterType="${ClassName}"#if($pkColumn.increment) useGeneratedKeys="true" keyProperty="$pkColumn.javaField"#end>
insert into ${tableName}

View File

@ -0,0 +1,174 @@
package com.hchyun.test.controller;
import com.hchyun.common.annotation.Log;
import com.hchyun.common.constant.ReturnConstants;
import com.hchyun.common.core.controller.HcyBaseController;
import com.hchyun.common.core.entity.AjaxResult;
import com.hchyun.common.enums.BusinessType;
import com.hchyun.common.utils.ServerResult;
import com.hchyun.common.utils.poi.ExcelUtil;
import com.hchyun.test.entity.RelA;
import com.hchyun.test.service.RelAService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.io.Serializable;
import java.util.List;
/**
* 测试aController
*
* @author hchyun
* @date 2021-02-26
*/
@Api(value = "测试a管理",tags = "测试a管理")
@RestController
@RequestMapping("/test/a")
public class RelAController extends HcyBaseController {
protected final Logger logger = LoggerFactory.getLogger(RelAController.class);
@Autowired
private RelAService relAService;
/**
* 查询测试a列表
*/
@ApiOperation("查询测试a列表")
@PreAuthorize("@hchyun.hasPermi('test:a:list')")
@PutMapping("/list")
public Serializable list(@Validated @RequestBody RelA relA) {
try {
startPage(relA.getParams());
ServerResult<List<RelA>> genServerResult = relAService.selectRelAList(relA);
if (genServerResult.isStart()) {
return AjaxResult.success(genServerResult.getData());
} else {
return AjaxResult.info(genServerResult.getMsg());
}
} catch (RuntimeException e) {
logger.error(e.getMessage());
return AjaxResult.error(ReturnConstants.SYS_ERROR);
}
}
/**
* 导出测试a列表
*/
@ApiOperation("导出测试a列表")
@PreAuthorize("@hchyun.hasPermi('test:a:export')")
@Log(title = "测试a", businessType = BusinessType.EXPORT)
@PutMapping("/export")
public AjaxResult export(@Validated @RequestBody RelA relA) {
try {
ServerResult<List<RelA>> genServerResult = relAService.selectRelAList(relA);
ExcelUtil<RelA> util = new ExcelUtil<RelA>(RelA. class);
if (genServerResult.isStart()) {
return util.exportExcel(genServerResult.getData(), "a");
} else {
return AjaxResult.error(genServerResult.getMsg());
}
} catch (RuntimeException e) {
logger.error(e.getMessage());
return AjaxResult.error(ReturnConstants.SYS_ERROR);
}
}
/**
* 获取测试a详细信息
*/
@ApiOperation("获取测试a详细信息")
@ApiImplicitParam(name = "aid" , value = "测试aaid" , required = true, dataType = "Long" , paramType = "path")
@PreAuthorize("@hchyun.hasPermi('test:a:query')")
@GetMapping(value = "/{aid}")
public AjaxResult getInfo(@PathVariable("aid") Long aid) {
try {
ServerResult<RelA> genServerResult = relAService.selectRelAById(aid);
if (genServerResult.isStart()) {
return AjaxResult.success(genServerResult.getData());
} else {
return AjaxResult.info(genServerResult.getMsg());
}
} catch (RuntimeException e) {
logger.error(e.getMessage());
return AjaxResult.error(ReturnConstants.SYS_ERROR);
}
}
/**
* 新增测试a
*/
@ApiOperation("新增测试a")
@ApiImplicitParam(name = "relA" , value = "新增测试a信息" , dataType = "RelA")
@PreAuthorize("@hchyun.hasPermi('test:a:add')")
@Log(title = "测试a", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody RelA relA) {
try {
ServerResult<Integer> genServerResult = relAService.insertRelA(relA);
if (genServerResult.isStart()) {
return AjaxResult.success();
} else {
return AjaxResult.error(genServerResult.getMsg());
}
} catch (RuntimeException e) {
logger.error(e.getMessage());
return AjaxResult.error(ReturnConstants.SYS_ERROR);
}
}
/**
* 修改测试a
*/
@ApiOperation("修改测试a")
@ApiImplicitParam(name = "relA" , value = "修改测试a信息" , dataType = "RelA")
@PreAuthorize("@hchyun.hasPermi('test:a:edit')")
@Log(title = "测试a", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody RelA relA) {
try {
ServerResult<Integer> genServerResult = relAService.updateRelA(relA);
if (genServerResult.isStart()) {
return AjaxResult.success();
} else {
return AjaxResult.error(genServerResult.getMsg());
}
} catch (RuntimeException e) {
logger.error(e.getMessage());
return AjaxResult.error(ReturnConstants.SYS_ERROR);
}
}
/**
* 删除测试a
*/
@ApiOperation("删除测试a")
@ApiImplicitParam(name = "aids" , value = "测试aaids" , required = true, dataType = "Long" , paramType = "path")
@PreAuthorize("@hchyun.hasPermi('test:a:remove')")
@Log(title = "测试a", businessType = BusinessType.DELETE)
@DeleteMapping("/{aids}")
public AjaxResult remove(@PathVariable Long[] aids) {
try {
if (aids.length<0){
return AjaxResult.error("id不能为空!");
}
ServerResult<Integer> genServerResult = relAService.deleteRelAByIds(aids);
if (genServerResult.isStart()) {
return AjaxResult.success();
} else {
return AjaxResult.error(genServerResult.getMsg());
}
}catch (RuntimeException e){
logger.error(e.getMessage());
return AjaxResult.error(ReturnConstants.SYS_ERROR);
}
}
}

View File

@ -0,0 +1,61 @@
package com.hchyun.test.dao;
import com.hchyun.test.entity.RelA;
import java.util.List;
/**
* 测试aMapper接口
*
* @author hchyun
* @date 2021-02-26
*/
public interface RelADao {
/**
* 查询测试a
*
* @param aid 测试aID
* @return 测试a
*/
RelA selectRelAById(Long aid);
/**
* 查询测试a列表
*
* @param relA 测试a
* @return 测试a集合
*/
List<RelA> selectRelAList(RelA relA);
/**
* 新增测试a
*
* @param relA 测试a
* @return 结果
*/
int insertRelA(RelA relA);
/**
* 修改测试a
*
* @param relA 测试a
* @return 结果
*/
int updateRelA(RelA relA);
/**
* 删除测试a
*
* @param aid 测试aID
* @return 结果
*/
int deleteRelAById(Long aid);
/**
* 批量删除测试a
*
* @param aids 需要删除的数据ID
* @return 结果
*/
int deleteRelAByIds(Long[] aids);
}

View File

@ -0,0 +1,77 @@
package com.hchyun.test.entity;
import com.hchyun.common.annotation.Excel;
import com.hchyun.common.annotation.Excels;
import com.hchyun.common.core.entity.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* 测试a对象 test_rel_a
*
* @author hchyun
* @date 2021-02-26
*/
@ApiModel("测试a")
public class RelA extends BaseEntity{
/** id表a */
@ApiModelProperty("id表a")
private Long aid;
/** a表信息 */
@Excel(name = "a表信息")
@ApiModelProperty("a表信息")
private String infoa;
/** 测试c表信息 */
@Excels({@Excel(name = "关联ID",targetAttr = "uniconId"),@Excel(name = "c表id",targetAttr = "cid"),@Excel(name = "c表信息",targetAttr = "infoc"),})
private RelC relC;
/** 测试b表信息 */
@Excels({@Excel(name = "信息b",targetAttr = "infob"),@Excel(name = "关联id",targetAttr = "uniconId"),@Excel(name = "b表id",targetAttr = "bid"),})
private RelB relB;
public void setAid(Long aid){
this.aid = aid;
}
public Long getAid(){
return aid;
}
public void setInfoa(String infoa){
this.infoa = infoa;
}
public String getInfoa(){
return infoa;
}
public RelC getRelC(){
return relC;
}
public void setRelC(RelC relC){
this.relC = relC;
}
public RelB getRelB(){
return relB;
}
public void setRelB(RelB relB){
this.relB = relB;
}
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("aid", getAid())
.append("infoa", getInfoa())
.append("relC",getRelC())
.append("relB",getRelB())
.toString();
}
}

View File

@ -0,0 +1,48 @@
package com.hchyun.test.entity;
import com.hchyun.common.annotation.Excel;
import com.hchyun.common.core.entity.BaseEntity;
/**
*
* @author hchyun
* @date 2021-02-26
*/
public class RelB extends BaseEntity{
/** b表id */
@Excel(name = "b表id")
private Long bid;
/** 关联id */
@Excel(name = "关联id")
private Long uniconId;
/** 信息b */
@Excel(name = "信息b")
private String infob;
public void setBid(Long bid){
this.bid = bid;
}
public Long getBid(){
return bid;
}
public void setUniconId(Long uniconId){
this.uniconId = uniconId;
}
public Long getUniconId(){
return uniconId;
}
public void setInfob(String infob){
this.infob = infob;
}
public String getInfob(){
return infob;
}
}

View File

@ -0,0 +1,48 @@
package com.hchyun.test.entity;
import com.hchyun.common.annotation.Excel;
import com.hchyun.common.core.entity.BaseEntity;
/**
*
* @author hchyun
* @date 2021-02-26
*/
public class RelC extends BaseEntity{
/** c表id */
@Excel(name = "c表id")
private Long cid;
/** 关联ID */
@Excel(name = "关联ID")
private Long uniconId;
/** c表信息 */
@Excel(name = "c表信息")
private String infoc;
public void setCid(Long cid){
this.cid = cid;
}
public Long getCid(){
return cid;
}
public void setUniconId(Long uniconId){
this.uniconId = uniconId;
}
public Long getUniconId(){
return uniconId;
}
public void setInfoc(String infoc){
this.infoc = infoc;
}
public String getInfoc(){
return infoc;
}
}

View File

@ -0,0 +1,63 @@
package com.hchyun.test.service;
import com.hchyun.common.utils.ServerResult;
import com.hchyun.test.entity.RelA;
import java.util.List;
/**
* 测试aService接口
*
* @author hchyun
* @date 2021-02-26
*/
public interface RelAService
{
/**
* 查询测试a
*
* @param aid 测试aID
* @return 测试a
*/
ServerResult<RelA> selectRelAById(Long aid);
/**
* 查询测试a列表
*
* @param relA 测试a
* @return 测试a集合
*/
ServerResult<List<RelA>> selectRelAList(RelA relA);
/**
* 新增测试a
*
* @param relA 测试a
* @return 结果
*/
ServerResult<Integer> insertRelA(RelA relA);
/**
* 修改测试a
*
* @param relA 测试a
* @return 结果
*/
ServerResult<Integer> updateRelA(RelA relA);
/**
* 批量删除测试a
*
* @param aids 需要删除的测试aID
* @return 结果
*/
ServerResult<Integer> deleteRelAByIds(Long[] aids);
/**
* 删除测试a信息
*
* @param aid 测试aID
* @return 结果
*/
ServerResult<Integer> deleteRelAById(Long aid);
}

View File

@ -0,0 +1,153 @@
package com.hchyun.test.service.impl;
import com.hchyun.common.constant.ReturnConstants;
import com.hchyun.common.utils.ServerResult;
import com.hchyun.test.dao.RelADao;
import com.hchyun.test.entity.RelA;
import com.hchyun.test.service.RelAService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 测试aService业务层处理
*
* @author hchyun
* @date 2021-02-26
*/
@Service
public class RelAServiceImpl implements RelAService {
private Logger logger = LoggerFactory.getLogger(RelAServiceImpl.class);
@Autowired
private RelADao relADao;
/**
* 查询测试a
*
* @param aid 测试aID
* @return 测试a
*/
@Override
public ServerResult<RelA> selectRelAById(Long aid) {
try {
RelA relA = relADao.selectRelAById(aid);
if (relA != null){
return new ServerResult<RelA>(true,relA);
}else {
return new ServerResult<RelA>(false, ReturnConstants.RESULT_EMPTY);
}
}catch (RuntimeException e){
logger.error(e.getMessage());
return new ServerResult<RelA>(false,ReturnConstants.DB_EX);
}
}
/**
* 查询测试a列表
*
* @param relA 测试a
* @return 测试a
*/
@Override
public ServerResult<List<RelA>> selectRelAList(RelA relA) {
try {
List<RelA> relAList = relADao.selectRelAList(relA);
if (relAList.size()>0){
return new ServerResult<List<RelA>>(true,relAList);
}else {
return new ServerResult<List<RelA>>(false,ReturnConstants.RESULT_EMPTY);
}
}catch (RuntimeException e){
logger.error(e.getMessage());
return new ServerResult<List<RelA>>(false,ReturnConstants.DB_EX);
}
}
/**
* 新增测试a
*
* @param relA 测试a
* @return 结果
*/
@Override
public ServerResult<Integer> insertRelA(RelA relA) {
try {
Integer renewal = relADao.insertRelA(relA);
if (renewal >0){
return new ServerResult<>(true,renewal);
}else {
return new ServerResult<>(false,ReturnConstants.SYS_FAILL);
}
}catch (RuntimeException e){
logger.error(e.getMessage());
return new ServerResult<>(false,ReturnConstants.DB_EX);
}
}
/**
* 修改测试a
*
* @param relA 测试a
* @return 结果
*/
@Override
public ServerResult<Integer> updateRelA(RelA relA) {
try {
Integer renewal = relADao.updateRelA(relA);
if (renewal >0){
return new ServerResult<>(true,renewal);
}else {
return new ServerResult<>(false,ReturnConstants.SYS_FAILL);
}
}catch (RuntimeException e){
logger.error(e.getMessage());
return new ServerResult<>(false,ReturnConstants.DB_EX);
}
}
/**
* 批量删除测试a
*
* @param aids 需要删除的测试aID
* @return 结果
*/
@Override
public ServerResult<Integer> deleteRelAByIds(Long[] aids) {
try {
Integer renewal = relADao.deleteRelAByIds(aids);
if (renewal >0){
return new ServerResult<>(true,renewal);
}else {
return new ServerResult<>(false,ReturnConstants.SYS_FAILL);
}
}catch (RuntimeException e){
logger.error(e.getMessage());
return new ServerResult<>(false,ReturnConstants.DB_EX);
}
}
/**
* 删除测试a信息
*
* @param aid 测试aID
* @return 结果
*/
@Override
public ServerResult<Integer> deleteRelAById(Long aid) {
try {
Integer renewal = relADao.deleteRelAById(aid);
if (renewal >0){
return new ServerResult<>(true,renewal);
}else {
return new ServerResult<>(false,ReturnConstants.SYS_FAILL);
}
}catch (RuntimeException e){
logger.error(e.getMessage());
return new ServerResult<>(false,ReturnConstants.DB_EX);
}
}
}

View File

@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hchyun.test.dao.RelADao">
<resultMap type="com.hchyun.test.entity.RelA" id="RelAResult">
<result property="aid" column="aid" />
<result property="infoa" column="infoa" />
</resultMap>
<resultMap id="RelAAllResult" type="com.hchyun.test.entity.RelA" extends="RelAResult">
<collection property="RelC" notNullColumn="unicon_id" javaType="com.hchyun.test.entity.RelC" resultMap="RelCResult" />
<collection property="RelB" notNullColumn="unicon_id" javaType="com.hchyun.test.entity.RelB" resultMap="RelBResult" />
</resultMap>
<resultMap id="RelCResult" type="com.hchyun.test.entity.RelC">
<result property="uniconId" column="unicon_id" />
<result property="cid" column="cId" />
<result property="infoc" column="infoc" />
</resultMap>
<resultMap id="RelBResult" type="com.hchyun.test.entity.RelB">
<result property="infob" column="infob" />
<result property="uniconId" column="unicon_id" />
<result property="bid" column="bid" />
</resultMap>
<sql id="selectRelAVo">
select aid, infoa from test_rel_a
</sql>
<select id="selectRelAList" parameterType="RelA" resultMap="RelAAllResult">
</select>
<select id="selectRelAById" parameterType="Long" resultMap="RelAResult">
<include refid="selectRelAVo"/>
where aid = #{aid}
</select>
<select id="selectRelAAllById" parameterType="Long" resultMap="RelAAllResult">
</select>
<insert id="insertRelA" parameterType="RelA">
insert into test_rel_a
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="aid != null">aid,</if>
<if test="infoa != null">infoa,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="aid != null">#{aid},</if>
<if test="infoa != null">#{infoa},</if>
</trim>
</insert>
<update id="updateRelA" parameterType="RelA">
update test_rel_a
<trim prefix="SET" suffixOverrides=",">
<if test="infoa != null">infoa = #{infoa},</if>
</trim>
where aid = #{aid}
</update>
<delete id="deleteRelAById" parameterType="Long">
delete from test_rel_a where aid = #{aid}
</delete>
<delete id="deleteRelAByIds" parameterType="String">
delete from test_rel_a where aid in
<foreach item="aid" collection="array" open="(" separator="," close=")">
#{aid}
</foreach>
</delete>
</mapper>