代码生成优化
This commit is contained in:
@ -0,0 +1,72 @@
|
||||
package com.ruoyi.generator.domain;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
|
||||
/**
|
||||
* 字段类型配置 由数据库字段的注释解析而来
|
||||
* 注释结构示例:{"title": "状态", "type": "dict", "value": "sys_common_status"} {"title": "登录时间", "type": "date"}
|
||||
*
|
||||
* @author ruoyi
|
||||
*
|
||||
*/
|
||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
public class ColumnConfigInfo
|
||||
{
|
||||
/**
|
||||
* 属性标题
|
||||
*/
|
||||
private String title;
|
||||
|
||||
/**
|
||||
* 属性类型 dict(字典,value对应字典管理的字典类型), date(包括date)
|
||||
*/
|
||||
private String type;
|
||||
|
||||
/**
|
||||
* 属性值,参考数据类型,可为空
|
||||
*/
|
||||
private String value;
|
||||
|
||||
public ColumnConfigInfo()
|
||||
{
|
||||
super();
|
||||
}
|
||||
|
||||
public ColumnConfigInfo(String title, String type, String value)
|
||||
{
|
||||
super();
|
||||
this.title = title;
|
||||
this.type = type;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public String getTitle()
|
||||
{
|
||||
return title;
|
||||
}
|
||||
|
||||
public void setTitle(String title)
|
||||
{
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
public String getType()
|
||||
{
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(String type)
|
||||
{
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public String getValue()
|
||||
{
|
||||
return value;
|
||||
}
|
||||
|
||||
public void setValue(String value)
|
||||
{
|
||||
this.value = value;
|
||||
}
|
||||
}
|
@ -1,5 +1,8 @@
|
||||
package com.ruoyi.generator.domain;
|
||||
|
||||
import com.ruoyi.common.json.JSON;
|
||||
import com.ruoyi.common.utils.StringUtils;
|
||||
|
||||
/**
|
||||
* ry数据库表列信息
|
||||
*
|
||||
@ -15,6 +18,9 @@ public class ColumnInfo
|
||||
|
||||
/** 列描述 */
|
||||
private String columnComment;
|
||||
|
||||
/** 列配置 */
|
||||
private ColumnConfigInfo configInfo;
|
||||
|
||||
/** Java属性类型 */
|
||||
private String attrType;
|
||||
@ -50,9 +56,18 @@ public class ColumnInfo
|
||||
return columnComment;
|
||||
}
|
||||
|
||||
public void setColumnComment(String columnComment)
|
||||
public void setColumnComment(String columnComment) throws Exception
|
||||
{
|
||||
this.columnComment = columnComment;
|
||||
// 根据列描述解析列的配置信息
|
||||
if (StringUtils.isNotEmpty(columnComment) && columnComment.startsWith("{"))
|
||||
{
|
||||
this.configInfo = JSON.unmarshal(columnComment, ColumnConfigInfo.class);
|
||||
this.columnComment = configInfo.getTitle();
|
||||
}
|
||||
else
|
||||
{
|
||||
this.columnComment = columnComment;
|
||||
}
|
||||
}
|
||||
|
||||
public String getAttrName()
|
||||
@ -84,4 +99,14 @@ public class ColumnInfo
|
||||
{
|
||||
this.attrType = attrType;
|
||||
}
|
||||
|
||||
public ColumnConfigInfo getConfigInfo()
|
||||
{
|
||||
return configInfo;
|
||||
}
|
||||
|
||||
public void setConfigInfo(ColumnConfigInfo configInfo)
|
||||
{
|
||||
this.configInfo = configInfo;
|
||||
}
|
||||
}
|
||||
|
@ -23,7 +23,7 @@ public class GenUtils
|
||||
private static final String PROJECT_PATH = "main/java/com/ruoyi";
|
||||
|
||||
/** mybatis空间路径 */
|
||||
private static final String MYBATIS_PATH = "main/resources/mybatis";
|
||||
private static final String MYBATIS_PATH = "main/resources/mapper";
|
||||
|
||||
/** html空间路径 */
|
||||
private static final String TEMPLATES_PATH = "main/resources/templates";
|
||||
@ -69,8 +69,9 @@ public class GenUtils
|
||||
velocityContext.put("primaryKey", table.getPrimaryKey());
|
||||
velocityContext.put("className", table.getClassName());
|
||||
velocityContext.put("classname", table.getClassname());
|
||||
velocityContext.put("moduleName", GenUtils.getModuleName(packageName));
|
||||
velocityContext.put("moduleName", getModuleName(packageName));
|
||||
velocityContext.put("columns", table.getColumns());
|
||||
velocityContext.put("basePackage", getBasePackage(packageName));
|
||||
velocityContext.put("package", packageName);
|
||||
velocityContext.put("author", Global.getAuthor());
|
||||
velocityContext.put("datetime", DateUtils.getDate());
|
||||
@ -144,7 +145,7 @@ public class GenUtils
|
||||
|
||||
if (template.contains("ServiceImpl.java.vm"))
|
||||
{
|
||||
return javaPath + "service" + "/" + className + "ServiceImpl.java";
|
||||
return javaPath + "service" + "/" + "/impl/" + className + "ServiceImpl.java";
|
||||
}
|
||||
|
||||
if (template.contains("Controller.java.vm"))
|
||||
@ -190,6 +191,13 @@ public class GenUtils
|
||||
return moduleName;
|
||||
}
|
||||
|
||||
public static String getBasePackage(String packageName)
|
||||
{
|
||||
int lastIndex = packageName.lastIndexOf(".");
|
||||
String basePackage = StringUtils.substring(packageName, 0, lastIndex);
|
||||
return basePackage;
|
||||
}
|
||||
|
||||
public static String replaceKeyword(String keyword)
|
||||
{
|
||||
String keyName = keyword.replaceAll("(?:表|信息)", "");
|
||||
@ -224,6 +232,6 @@ public class GenUtils
|
||||
{
|
||||
System.out.println(StringUtils.convertToCamelCase("user_name"));
|
||||
System.out.println(replaceKeyword("岗位信息表"));
|
||||
System.out.println(getModuleName("com.ruoyi.system"));
|
||||
System.out.println(getBasePackage("com.ruoyi.system"));
|
||||
}
|
||||
}
|
||||
|
@ -7,12 +7,33 @@
|
||||
<form class="form-horizontal m" id="form-${classname}-add">
|
||||
#foreach($column in $columns)
|
||||
#if($column.columnName != $primaryKey.columnName)
|
||||
#if(!${column.configInfo})
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">${column.columnComment}:</label>
|
||||
<div class="col-sm-8">
|
||||
<input id="${column.attrname}" name="${column.attrname}" class="form-control" type="text">
|
||||
</div>
|
||||
</div>
|
||||
#else
|
||||
#if(${column.configInfo.type} == "dict")
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">${column.columnComment}:</label>
|
||||
<div class="col-sm-8">
|
||||
<select name="${column.attrname}" class="form-control m-b" th:with="type=${@dict.getType('${column.configInfo.value}')}">
|
||||
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
#elseif(${column.configInfo.type} == "date")
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">${column.columnComment}:</label>
|
||||
<div class="col-sm-8">
|
||||
<input id="${column.attrname}" name="${column.attrname}" class="form-control time-input" type="text">
|
||||
</div>
|
||||
</div>
|
||||
#elseif(${column.configInfo.type} == "fk")
|
||||
#end
|
||||
#end
|
||||
#end
|
||||
#end
|
||||
</form>
|
||||
|
@ -8,12 +8,33 @@
|
||||
<input id="${primaryKey.attrname}" name="${primaryKey.attrname}" th:field="*{${primaryKey.attrname}}" type="hidden">
|
||||
#foreach($column in $columns)
|
||||
#if($column.columnName != $primaryKey.columnName)
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">${column.columnComment}:</label>
|
||||
<div class="col-sm-8">
|
||||
<input id="${column.attrname}" name="${column.attrname}" th:field="*{${column.attrname}}" class="form-control" type="text">
|
||||
</div>
|
||||
</div>
|
||||
#if(!${column.configInfo})
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">${column.columnComment}:</label>
|
||||
<div class="col-sm-8">
|
||||
<input id="${column.attrname}" name="${column.attrname}" th:field="*{${column.attrname}}" class="form-control" type="text">
|
||||
</div>
|
||||
</div>
|
||||
#else
|
||||
#if(${column.configInfo.type} == "dict")
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">${column.columnComment}:</label>
|
||||
<div class="col-sm-8">
|
||||
<select name="${column.attrname}" class="form-control m-b" th:with="type=${@dict.getType('${column.configInfo.value}')}">
|
||||
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}" th:field="*{${column.attrname}}"></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
#elseif(${column.configInfo.type} == "date")
|
||||
<div class="form-group">
|
||||
<label class="col-sm-3 control-label">${column.columnComment}:</label>
|
||||
<div class="col-sm-8">
|
||||
<input id="${column.attrname}" name="${column.attrname}" th:field="*{${column.attrname}}" class="form-control time-input" type="text">
|
||||
</div>
|
||||
</div>
|
||||
#elseif(${column.configInfo.type} == "fk")
|
||||
#end
|
||||
#end
|
||||
#end
|
||||
#end
|
||||
</form>
|
||||
|
@ -3,23 +3,68 @@
|
||||
<meta charset="utf-8">
|
||||
<head th:include="include :: header"></head>
|
||||
<body class="gray-bg">
|
||||
<div class="container-div">
|
||||
<div class="btn-group-sm hidden-xs" id="toolbar" role="group">
|
||||
<a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="${moduleName}:${classname}:add">
|
||||
<i class="fa fa-plus"></i> 添加
|
||||
</a>
|
||||
<a class="btn btn-primary btn-edit disabled" onclick="$.operate.edit()" shiro:hasPermission="${moduleName}:${classname}:edit">
|
||||
<i class="fa fa-edit"></i> 修改
|
||||
</a>
|
||||
<a class="btn btn-danger btn-del btn-del disabled" onclick="$.operate.removeAll()" shiro:hasPermission="${moduleName}:${classname}:remove">
|
||||
<i class="fa fa-remove"></i> 删除
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="container-div">
|
||||
<div class="row">
|
||||
<div class="col-sm-12 search-collapse">
|
||||
<form id="formId">
|
||||
<div class="select-list">
|
||||
<ul>
|
||||
#foreach($column in $columns)
|
||||
#if($column.columnName != $primaryKey.columnName)
|
||||
#if(!${column.configInfo})
|
||||
<li>
|
||||
${column.columnComment}:<input type="text" name="${column.attrname}"/>
|
||||
</li>
|
||||
|
||||
#else
|
||||
#if(${column.configInfo.type} == "dict")
|
||||
<li>
|
||||
${column.columnComment}:<select name="${column.attrname}" th:with="type=${@dict.getType('${column.configInfo.value}')}">
|
||||
<option value="">所有</option>
|
||||
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
|
||||
</select>
|
||||
</li>
|
||||
#elseif(${column.configInfo.type} == "date")
|
||||
<li class="select-time">
|
||||
<label>${column.columnComment}: </label>
|
||||
<input type="text" class="time-input" id="start${column.attrName}" placeholder="开始" name="params[begin${column.attrName}]"/>
|
||||
<span>-</span>
|
||||
<input type="text" class="time-input" id="end${column.attrName}" placeholder="结束" name="params[end${column.attrName}]"/>
|
||||
</li>
|
||||
#elseif(${column.configInfo.type} == "fk")
|
||||
#end
|
||||
#end
|
||||
#end
|
||||
#end
|
||||
<li>
|
||||
<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i> 搜索</a>
|
||||
<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i> 重置</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 select-table table-striped">
|
||||
<table id="bootstrap-table" data-mobile-responsive="true"></table>
|
||||
<div class="btn-group-sm hidden-xs" id="toolbar" role="group">
|
||||
<a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="${moduleName}:${classname}:add">
|
||||
<i class="fa fa-plus"></i> 添加
|
||||
</a>
|
||||
<a class="btn btn-primary btn-edit disabled" onclick="$.operate.edit()" shiro:hasPermission="${moduleName}:${classname}:edit">
|
||||
<i class="fa fa-edit"></i> 修改
|
||||
</a>
|
||||
<a class="btn btn-danger btn-del btn-del disabled" onclick="$.operate.removeAll()" shiro:hasPermission="${moduleName}:${classname}:remove">
|
||||
<i class="fa fa-remove"></i> 删除
|
||||
</a>
|
||||
<a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="${moduleName}:${classname}:export">
|
||||
<i class="fa fa-download"></i> 导出
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-sm-12 select-table table-striped">
|
||||
<table id="bootstrap-table" data-mobile-responsive="true"></table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div th:include="include :: footer"></div>
|
||||
<script th:inline="javascript">
|
||||
var editFlag = [[${@permission.hasPermi('${moduleName}:${classname}:edit')}]];
|
||||
@ -32,15 +77,39 @@
|
||||
createUrl: prefix + "/add",
|
||||
updateUrl: prefix + "/edit/{id}",
|
||||
removeUrl: prefix + "/remove",
|
||||
exportUrl: prefix + "/export",
|
||||
modalName: "${tableComment}",
|
||||
search: false,
|
||||
showExport: true,
|
||||
columns: [{
|
||||
checkbox: true
|
||||
},
|
||||
#foreach($column in $columns)
|
||||
#if($column.columnName == $primaryKey.columnName)
|
||||
{
|
||||
field : '${column.attrname}',
|
||||
title : '${column.columnComment}'
|
||||
title : '${column.columnComment}',
|
||||
visible: false
|
||||
},
|
||||
#elseif($column.columnName != $primaryKey.columnName)
|
||||
#if(${column.configInfo} && ${column.configInfo.type} == 'dict')
|
||||
{
|
||||
field : '${column.attrname}',
|
||||
title : '${column.columnComment}',
|
||||
sortable: true,
|
||||
formatter: function(value, row, index) {
|
||||
var datas = [[${@dict.getType('${column.configInfo.value}')}]];
|
||||
return $.table.selectDictLabel(datas, value);
|
||||
}
|
||||
},
|
||||
#else
|
||||
{
|
||||
field : '${column.attrname}',
|
||||
title : '${column.columnComment}',
|
||||
sortable: true
|
||||
},
|
||||
#end
|
||||
#end
|
||||
#end
|
||||
{
|
||||
title: '操作',
|
||||
|
@ -1,4 +1,4 @@
|
||||
package ${package}.web.controller;
|
||||
package ${basePackage}.web.controller.${moduleName};
|
||||
|
||||
import java.util.List;
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
@ -17,6 +17,7 @@ import ${package}.service.I${className}Service;
|
||||
import com.ruoyi.framework.web.base.BaseController;
|
||||
import com.ruoyi.framework.web.page.TableDataInfo;
|
||||
import com.ruoyi.common.base.AjaxResult;
|
||||
import com.ruoyi.common.utils.ExcelUtil;
|
||||
|
||||
/**
|
||||
* ${tableComment} 信息操作处理
|
||||
@ -53,6 +54,20 @@ public class ${className}Controller extends BaseController
|
||||
return getDataTable(list);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 导出${tableComment}列表
|
||||
*/
|
||||
@RequiresPermissions("${moduleName}:${classname}:export")
|
||||
@PostMapping("/export")
|
||||
@ResponseBody
|
||||
public AjaxResult export(${className} ${classname})
|
||||
{
|
||||
List<${className}> list = ${classname}Service.select${className}List(${classname});
|
||||
ExcelUtil<${className}> util = new ExcelUtil<${className}>(${className}.class);
|
||||
return util.exportExcel(list, "${classname}");
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增${tableComment}
|
||||
*/
|
||||
|
@ -1,4 +1,4 @@
|
||||
package ${package}.service;
|
||||
package ${package}.service.impl;
|
||||
|
||||
import java.util.List;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
Reference in New Issue
Block a user