diff --git a/README.md b/README.md index c4b937f9..2e28de74 100644 --- a/README.md +++ b/README.md @@ -87,4 +87,4 @@ ## 若依交流群 -QQ群: [![加入QQ群](https://img.shields.io/badge/已满-1389287-blue.svg)](https://jq.qq.com/?_wv=1027&k=5HBAaYN) [![加入QQ群](https://img.shields.io/badge/已满-1679294-blue.svg)](https://jq.qq.com/?_wv=1027&k=5cHeRVW) [![加入QQ群](https://img.shields.io/badge/已满-1529866-blue.svg)](https://jq.qq.com/?_wv=1027&k=53R0L5Z) [![加入QQ群](https://img.shields.io/badge/已满-1772718-blue.svg)](https://jq.qq.com/?_wv=1027&k=5g75dCU) [![加入QQ群](https://img.shields.io/badge/已满-1366522-blue.svg)](https://jq.qq.com/?_wv=1027&k=58cPoHA) [![加入QQ群](https://img.shields.io/badge/1382251-blue.svg)](https://jq.qq.com/?_wv=1027&k=5Ofd4Pb) 点击按钮入群。 \ No newline at end of file +QQ群: [![加入QQ群](https://img.shields.io/badge/已满-1389287-blue.svg)](https://jq.qq.com/?_wv=1027&k=5HBAaYN) [![加入QQ群](https://img.shields.io/badge/已满-1679294-blue.svg)](https://jq.qq.com/?_wv=1027&k=5cHeRVW) [![加入QQ群](https://img.shields.io/badge/已满-1529866-blue.svg)](https://jq.qq.com/?_wv=1027&k=53R0L5Z) [![加入QQ群](https://img.shields.io/badge/已满-1772718-blue.svg)](https://jq.qq.com/?_wv=1027&k=5g75dCU) [![加入QQ群](https://img.shields.io/badge/已满-1366522-blue.svg)](https://jq.qq.com/?_wv=1027&k=58cPoHA) [![加入QQ群](https://img.shields.io/badge/已满-1382251-blue.svg)](https://jq.qq.com/?_wv=1027&k=5Ofd4Pb) [![加入QQ群](https://img.shields.io/badge/1145125-blue.svg)](https://jq.qq.com/?_wv=1027&k=5yugASz) 点击按钮入群。 \ No newline at end of file diff --git a/pom.xml b/pom.xml index 09cf4d02..b13b0069 100644 --- a/pom.xml +++ b/pom.xml @@ -6,14 +6,14 @@ com.ruoyi ruoyi - 3.4 + 4.0.0 ruoyi http://www.ruoyi.vip 若依管理系统 - 3.4 + 4.0.0 UTF-8 UTF-8 1.8 @@ -25,6 +25,7 @@ 2.3.2 2.9.2 1.2.5 + 1.2.47 3.9.1 2.5 1.3.3 @@ -167,6 +168,13 @@ velocity ${velocity.version} + + + + com.alibaba + fastjson + ${fastjson.version} + diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml index 35cd909d..87311e4f 100644 --- a/ruoyi-admin/pom.xml +++ b/ruoyi-admin/pom.xml @@ -5,7 +5,7 @@ ruoyi com.ruoyi - 3.4 + 4.0.0 4.0.0 jar diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java index 05ee08ca..bc8950d7 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java @@ -15,6 +15,7 @@ import com.ruoyi.common.annotation.Log; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.Ztree; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.poi.ExcelUtil; @@ -155,4 +156,27 @@ public class SysDictTypeController extends BaseController { return dictTypeService.checkDictTypeUnique(dictType); } + + /** + * 选择字典树 + */ + @GetMapping("/selectDictTree/{columnId}/{dictType}") + public String selectDeptTree(@PathVariable("columnId") Long columnId, @PathVariable("dictType") String dictType, + ModelMap mmap) + { + mmap.put("columnId", columnId); + mmap.put("dict", dictTypeService.selectDictTypeByType(dictType)); + return prefix + "/tree"; + } + + /** + * 加载字典列表树 + */ + @GetMapping("/treeData") + @ResponseBody + public List treeData() + { + List ztrees = dictTypeService.selectDictTree(new SysDictType()); + return ztrees; + } } diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 288e8fdf..15e79712 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -3,7 +3,7 @@ ruoyi: # 名称 name: RuoYi # 版本 - version: 3.4.0 + version: 4.0.0 # 版权年份 copyrightYear: 2019 # 实例演示开关 diff --git a/ruoyi-admin/src/main/resources/static/ruoyi/css/ry-ui.css b/ruoyi-admin/src/main/resources/static/ruoyi/css/ry-ui.css index 8db3ce3a..3b06e819 100644 --- a/ruoyi-admin/src/main/resources/static/ruoyi/css/ry-ui.css +++ b/ruoyi-admin/src/main/resources/static/ruoyi/css/ry-ui.css @@ -335,6 +335,11 @@ label.error { right: 42px } +.input-group.date label.error { + z-index:99; + right: 3px +} + .Validform_error,input.error,select.error { background-color: #fbe2e2; border-color: #c66161; diff --git a/ruoyi-admin/src/main/resources/templates/include.html b/ruoyi-admin/src/main/resources/templates/include.html index cbb6f6ca..c761349a 100644 --- a/ruoyi-admin/src/main/resources/templates/include.html +++ b/ruoyi-admin/src/main/resources/templates/include.html @@ -39,8 +39,8 @@ - - + + diff --git a/ruoyi-admin/src/main/resources/templates/index.html b/ruoyi-admin/src/main/resources/templates/index.html index e5334348..768bb573 100644 --- a/ruoyi-admin/src/main/resources/templates/index.html +++ b/ruoyi-admin/src/main/resources/templates/index.html @@ -15,7 +15,7 @@ - +
@@ -232,7 +232,7 @@ - + - + diff --git a/ruoyi-admin/src/main/resources/templates/main.html b/ruoyi-admin/src/main/resources/templates/main.html index 3e13919c..eb1bb3da 100644 --- a/ruoyi-admin/src/main/resources/templates/main.html +++ b/ruoyi-admin/src/main/resources/templates/main.html @@ -81,7 +81,7 @@

官网:http://www.ruoyi.vip

-

QQ群:满1389287 满1679294 满1529866 满1772718 满1366522 1382251 +

QQ群:满1389287 满1679294 满1529866 满1772718 满1366522 满1382251 1145125

微信:/ *若依

@@ -98,13 +98,75 @@
+
+
+
+ v4.0.02019.08.08 +
+
+
+
+
    +
  1. 代码生成支持预览、编辑,保存方案
  2. +
  3. 新增防止表单重复提交注解
  4. +
  5. 新增后端校验(和前端保持一致)
  6. +
  7. 新增同一个用户最大会话数控制
  8. +
  9. Excel导出子对象支持多个字段
  10. +
  11. 定时任务支持静态调用和多参数
  12. +
  13. 定时任务增加分组条件查询
  14. +
  15. 字典类型增加任务分组数据
  16. +
  17. 新增表格是否首次加载数据
  18. +
  19. 新增parentTab选项卡可在同一页签打开
  20. +
  21. 多数据源支持类注解(允许继承父类的注解)
  22. +
  23. 部门及以下数据权限(调整为以下及所有子节点)
  24. +
  25. 新增角色数据权限配(仅本人数据权限)
  26. +
  27. 修改菜单权限显示问题
  28. +
  29. 上传文件修改路径及返回名称
  30. +
  31. 添加报表插件及示例
  32. +
  33. 添加首页统计模板
  34. +
  35. 添加表格拖拽示例
  36. +
  37. 添加卡片列表示例
  38. +
  39. 添加富文本编辑器示例
  40. +
  41. 添加表格动态增删改查示例
  42. +
  43. 添加用户页面岗位选择框提示
  44. +
  45. 点击菜单操作添加背景高亮显示
  46. +
  47. 表格树新增showSearch是否显示检索信息
  48. +
  49. 解决表格列设置sortName无效问题
  50. +
  51. 表格图片预览支持自定义设置宽高
  52. +
  53. 添加表格列浮动提示(单击文本复制)
  54. +
  55. PC端收起菜单后支持浮动显示
  56. +
  57. 详细操作样式调整
  58. +
  59. 修改用户更新描述空串不更新问题
  60. +
  61. 导入修改为模板渲染
  62. +
  63. 修改菜单及部门排序规则
  64. +
  65. 角色导出数据范围表达式翻译
  66. +
  67. 添加summernote富文本字体大小
  68. +
  69. 优化表格底部下边框防重叠&汇总像素问题
  70. +
  71. 树表格支持属性多层级访问
  72. +
  73. 修复IE浏览器用户管理界面右侧留白问题
  74. +
  75. 重置按钮刷新表格
  76. +
  77. 重置密码更新用户缓存
  78. +
  79. 优化验证码属性参数
  80. +
  81. 支持数据监控配置用户名和密码
  82. +
  83. 文件上传修改按钮背景及加载动画
  84. +
  85. 支持配置一级菜单href跳转
  86. +
  87. 侧边栏添加一套浅色主题
  88. +
  89. 树表格添加回调函数(校验异常状态)
  90. +
  91. 用户个人中心适配手机端显示
  92. +
  93. Excel支持设置导出类型&更换样式
  94. +
  95. 检查属性改变修改为克隆方式(防止热部署强转异常)
  96. +
  97. 其他细节优化
  98. +
+
+
+
v3.4.02019.06.03
-
+
  1. 新增实例演示菜单及demo
  2. diff --git a/ruoyi-admin/src/main/resources/templates/system/dict/type/tree.html b/ruoyi-admin/src/main/resources/templates/system/dict/type/tree.html new file mode 100644 index 00000000..aae7d18e --- /dev/null +++ b/ruoyi-admin/src/main/resources/templates/system/dict/type/tree.html @@ -0,0 +1,42 @@ + + + + + + + + + + + +
    + + +
    + +
    +
    + + + + + diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml index 64b65161..fe5fc81c 100644 --- a/ruoyi-common/pom.xml +++ b/ruoyi-common/pom.xml @@ -5,7 +5,7 @@ ruoyi com.ruoyi - 3.4 + 4.0.0 4.0.0 @@ -59,6 +59,12 @@ jackson-databind + + + com.alibaba + fastjson + + commons-io diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/config/Global.java b/ruoyi-common/src/main/java/com/ruoyi/common/config/Global.java index cd1c1d54..7509d3ae 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/config/Global.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/config/Global.java @@ -81,7 +81,7 @@ public class Global */ public static String getVersion() { - return StringUtils.nvl(getConfig("ruoyi.version"), "3.4.0"); + return StringUtils.nvl(getConfig("ruoyi.version"), "4.0.0"); } /** diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java new file mode 100644 index 00000000..5a55c29d --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java @@ -0,0 +1,88 @@ +package com.ruoyi.common.constant; + +/** + * 代码生成通用常量 + * + * @author ruoyi + */ +public class GenConstants +{ + /** 单表(增删改查) */ + public static final String TPL_CRUD = "crud"; + + /** 树表(增删改查) */ + public static final String TPL_TREE = "tree"; + + /** 树编码字段 */ + public static final String TREE_CODE = "treeCode"; + + /** 树父编码字段 */ + public static final String TREE_PARENT_CODE = "treeParentCode"; + + /** 树名称字段 */ + public static final String TREE_NAME = "treeName"; + + /** 数据库字符串类型 */ + public static final String[] COLUMNTYPE_STR = { "char", "varchar", "narchar", "varchar2", "tinytext", "text", + "mediumtext", "longtext" }; + + /** 数据库时间类型 */ + public static final String[] COLUMNTYPE_TIME = { "datetime", "time", "date", "timestamp" }; + + /** 数据库数字类型 */ + public static final String[] COLUMNTYPE_NUMBER = { "tinyint", "smallint", "mediumint", "int", "number", "integer", + "bigint", "float", "float", "double", "decimal" }; + + /** 页面不需要编辑字段 */ + public static final String[] COLUMNNAME_NOT_EDIT = { "id", "create_by", "create_time", "del_flag" }; + + /** 页面不需要显示的列表字段 */ + public static final String[] COLUMNNAME_NOT_LIST = { "id", "create_by", "create_time", "del_flag", "update_by", + "update_time" }; + + /** 页面不需要查询字段 */ + public static final String[] COLUMNNAME_NOT_QUERY = { "id", "create_by", "create_time", "del_flag", "update_by", + "update_time", "remark" }; + + /** 文本框 */ + public static final String HTML_INPUT = "input"; + + /** 文本域 */ + public static final String HTML_TEXTAREA = "textarea"; + + /** 下拉框 */ + public static final String HTML_SELECT = "select"; + + /** 单选框 */ + public static final String HTML_RADIO = "radio"; + + /** 复选框 */ + public static final String HTML_CHECKBOX = "checkbox"; + + /** 日期控件 */ + public static final String HTML_DATETIME = "datetime"; + + /** 字符串类型 */ + public static final String TYPE_STRING = "String"; + + /** 整型 */ + public static final String TYPE_INTEGER = "Integer"; + + /** 长整型 */ + public static final String TYPE_LONG = "Long"; + + /** 浮点型 */ + public static final String TYPE_DOUBLE = "Double"; + + /** 高精度计算类型 */ + public static final String TYPE_BIGDECIMAL = "BigDecimal"; + + /** 时间类型 */ + public static final String TYPE_DATE = "Date"; + + /** 模糊查询 */ + public static final String QUERY_LIKE = "Like"; + + /** 需要 */ + public static final String REQUIRE = "1"; +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeEntity.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeEntity.java new file mode 100644 index 00000000..d580f027 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeEntity.java @@ -0,0 +1,50 @@ +package com.ruoyi.common.core.domain; + +/** + * Tree基类 + * + * @author ruoyi + */ +public class TreeEntity extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 父菜单名称 */ + private String parentName; + + /** 父菜单ID */ + private Long parentId; + + /** 显示顺序 */ + private Integer orderNum; + + public String getParentName() + { + return parentName; + } + + public void setParentName(String parentName) + { + this.parentName = parentName; + } + + public Long getParentId() + { + return parentId; + } + + public void setParentId(Long parentId) + { + this.parentId = parentId; + } + + public Integer getOrderNum() + { + return orderNum; + } + + public void setOrderNum(Integer orderNum) + { + this.orderNum = orderNum; + } +} \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java index 10f3b4d4..82dca371 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java @@ -11,13 +11,19 @@ import java.util.List; public class TableDataInfo implements Serializable { private static final long serialVersionUID = 1L; + /** 总记录数 */ private long total; + /** 列表数据 */ private List rows; + /** 消息状态码 */ private int code; + /** 消息内容 */ + private int msg; + /** * 表格数据对象 */ @@ -66,4 +72,14 @@ public class TableDataInfo implements Serializable { this.code = code; } -} + + public int getMsg() + { + return msg; + } + + public void setMsg(int msg) + { + this.msg = msg; + } +} \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java index f7e667c9..86dee8a8 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java @@ -362,4 +362,37 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils } return result.toString(); } + + /** + * 驼峰式命名法 例如:user_name->userName + */ + public static String toCamelCase(String s) + { + if (s == null) + { + return null; + } + s = s.toLowerCase(); + StringBuilder sb = new StringBuilder(s.length()); + boolean upperCase = false; + for (int i = 0; i < s.length(); i++) + { + char c = s.charAt(i); + + if (c == SEPARATOR) + { + upperCase = true; + } + else if (upperCase) + { + sb.append(Character.toUpperCase(c)); + upperCase = false; + } + else + { + sb.append(c); + } + } + return sb.toString(); + } } \ No newline at end of file diff --git a/ruoyi-framework/pom.xml b/ruoyi-framework/pom.xml index 63ef0e07..f894e8e5 100644 --- a/ruoyi-framework/pom.xml +++ b/ruoyi-framework/pom.xml @@ -5,7 +5,7 @@ ruoyi com.ruoyi - 3.4 + 4.0.0 4.0.0 diff --git a/ruoyi-generator/pom.xml b/ruoyi-generator/pom.xml index 3a26d099..d13df57f 100644 --- a/ruoyi-generator/pom.xml +++ b/ruoyi-generator/pom.xml @@ -5,7 +5,7 @@ ruoyi com.ruoyi - 3.4 + 4.0.0 4.0.0 diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java index dffbd50d..6e4f710d 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java @@ -2,11 +2,14 @@ package com.ruoyi.generator.controller; import java.io.IOException; import java.util.List; +import java.util.Map; import javax.servlet.http.HttpServletResponse; import org.apache.commons.io.IOUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; @@ -14,11 +17,15 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.text.Convert; import com.ruoyi.common.enums.BusinessType; -import com.ruoyi.generator.domain.TableInfo; -import com.ruoyi.generator.service.IGenService; +import com.ruoyi.common.utils.security.PermissionUtils; +import com.ruoyi.generator.domain.GenTable; +import com.ruoyi.generator.domain.GenTableColumn; +import com.ruoyi.generator.service.IGenTableColumnService; +import com.ruoyi.generator.service.IGenTableService; /** * 代码生成 操作处理 @@ -32,7 +39,10 @@ public class GenController extends BaseController private String prefix = "tool/gen"; @Autowired - private IGenService genService; + private IGenTableService genTableService; + + @Autowired + private IGenTableColumnService genTableColumnService; @RequiresPermissions("tool:gen:view") @GetMapping() @@ -41,16 +51,121 @@ public class GenController extends BaseController return prefix + "/gen"; } + /** + * 查询代码生成列表 + */ @RequiresPermissions("tool:gen:list") @PostMapping("/list") @ResponseBody - public TableDataInfo list(TableInfo tableInfo) + public TableDataInfo genList(GenTable genTable) { startPage(); - List list = genService.selectTableList(tableInfo); + List list = genTableService.selectGenTableList(genTable); return getDataTable(list); } + /** + * 查询数据库列表 + */ + @RequiresPermissions("tool:gen:list") + @PostMapping("/db/list") + @ResponseBody + public TableDataInfo dataList(GenTable genTable) + { + startPage(); + List list = genTableService.selectDbTableList(genTable); + return getDataTable(list); + } + + /** + * 查询数据表字段列表 + */ + @RequiresPermissions("tool:gen:list") + @PostMapping("/column/list") + @ResponseBody + public TableDataInfo columnList(GenTableColumn genTableColumn) + { + TableDataInfo dataInfo = new TableDataInfo(); + List list = genTableColumnService.selectGenTableColumnListByTableId(genTableColumn); + dataInfo.setRows(list); + dataInfo.setTotal(list.size()); + return dataInfo; + } + + /** + * 导入表结构 + */ + @RequiresPermissions("tool:gen:list") + @GetMapping("/importTable") + public String importTable() + { + return prefix + "/importTable"; + } + + /** + * 导入表结构(保存) + */ + @RequiresPermissions("tool:gen:list") + @Log(title = "代码生成", businessType = BusinessType.IMPORT) + @PostMapping("/importTable") + @ResponseBody + public AjaxResult importTableSave(String tables) + { + String[] tableNames = Convert.toStrArray(tables); + // 查询表信息 + List tableList = genTableService.selectDbTableListByNames(tableNames); + String operName = (String) PermissionUtils.getPrincipalProperty("loginName"); + genTableService.importGenTable(tableList, operName); + return AjaxResult.success(); + } + + /** + * 修改代码生成业务 + */ + @GetMapping("/edit/{tableId}") + public String edit(@PathVariable("tableId") Long tableId, ModelMap mmap) + { + GenTable table = genTableService.selectGenTableById(tableId); + mmap.put("table", table); + return prefix + "/edit"; + } + + /** + * 修改保存代码生成业务 + */ + @RequiresPermissions("tool:gen:edit") + @Log(title = "代码生成", businessType = BusinessType.UPDATE) + @PostMapping("/edit") + @ResponseBody + public AjaxResult editSave(@Validated GenTable genTable) + { + genTableService.validateEdit(genTable); + genTableService.updateGenTable(genTable); + return AjaxResult.success(); + } + + @RequiresPermissions("tool:gen:remove") + @Log(title = "代码生成", businessType = BusinessType.DELETE) + @PostMapping("/remove") + @ResponseBody + public AjaxResult remove(String ids) + { + genTableService.deleteGenTableByIds(ids); + return AjaxResult.success(); + } + + /** + * 预览代码 + */ + @RequiresPermissions("tool:gen:preview") + @GetMapping("/preview/{tableId}") + @ResponseBody + public AjaxResult preview(@PathVariable("tableId") Long tableId) throws IOException + { + Map dataMap = genTableService.previewCode(tableId); + return AjaxResult.success(dataMap); + } + /** * 生成代码 */ @@ -59,7 +174,7 @@ public class GenController extends BaseController @GetMapping("/genCode/{tableName}") public void genCode(HttpServletResponse response, @PathVariable("tableName") String tableName) throws IOException { - byte[] data = genService.generatorCode(tableName); + byte[] data = genTableService.generatorCode(tableName); genCode(response, data); } @@ -73,16 +188,12 @@ public class GenController extends BaseController public void batchGenCode(HttpServletResponse response, String tables) throws IOException { String[] tableNames = Convert.toStrArray(tables); - byte[] data = genService.generatorCode(tableNames); + byte[] data = genTableService.generatorCode(tableNames); genCode(response, data); } /** * 生成zip文件 - * - * @param response - * @param data - * @throws IOException */ private void genCode(HttpServletResponse response, byte[] data) throws IOException { @@ -92,4 +203,4 @@ public class GenController extends BaseController response.setContentType("application/octet-stream; charset=UTF-8"); IOUtils.write(data, response.getOutputStream()); } -} +} \ No newline at end of file diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/ColumnConfigInfo.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/ColumnConfigInfo.java deleted file mode 100644 index 7deb42d3..00000000 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/ColumnConfigInfo.java +++ /dev/null @@ -1,72 +0,0 @@ -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; - } -} diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/ColumnInfo.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/ColumnInfo.java deleted file mode 100644 index c4032a53..00000000 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/ColumnInfo.java +++ /dev/null @@ -1,125 +0,0 @@ -package com.ruoyi.generator.domain; - -import com.ruoyi.common.json.JSON; -import com.ruoyi.common.utils.StringUtils; - -/** - * ry数据库表列信息 - * - * @author ruoyi - */ -public class ColumnInfo -{ - /** 字段名称 */ - private String columnName; - - /** 字段类型 */ - private String dataType; - - /** 列描述 */ - private String columnComment; - - /** 列配置 */ - private ColumnConfigInfo configInfo; - - /** Java属性类型 */ - private String attrType; - - /** Java属性名称(第一个字母大写),如:user_name => UserName */ - private String attrName; - - /** Java属性名称(第一个字母小写),如:user_name => userName */ - private String attrname; - - /** 执行计划(包含了与索引相关的一些细节信息) */ - private String extra; - - public String getColumnName() - { - return columnName; - } - - public void setColumnName(String columnName) - { - this.columnName = columnName; - } - - public String getDataType() - { - return dataType; - } - - public void setDataType(String dataType) - { - this.dataType = dataType; - } - - public String getColumnComment() - { - return columnComment; - } - - public void setColumnComment(String columnComment) throws Exception - { - // 根据列描述解析列的配置信息 - if (StringUtils.isNotEmpty(columnComment) && columnComment.startsWith("{")) - { - this.configInfo = JSON.unmarshal(columnComment, ColumnConfigInfo.class); - this.columnComment = configInfo.getTitle(); - } - else - { - this.columnComment = columnComment; - } - } - - public String getAttrName() - { - return attrName; - } - - public void setAttrName(String attrName) - { - this.attrName = attrName; - } - - public String getAttrname() - { - return attrname; - } - - public void setAttrname(String attrname) - { - this.attrname = attrname; - } - - public String getAttrType() - { - return attrType; - } - - public void setAttrType(String attrType) - { - this.attrType = attrType; - } - - public String getExtra() - { - return extra; - } - - public void setExtra(String extra) - { - this.extra = extra; - } - - public ColumnConfigInfo getConfigInfo() - { - return configInfo; - } - - public void setConfigInfo(ColumnConfigInfo configInfo) - { - this.configInfo = configInfo; - } -} 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 new file mode 100644 index 00000000..22c31b86 --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTable.java @@ -0,0 +1,255 @@ +package com.ruoyi.generator.domain; + +import java.util.List; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import com.ruoyi.common.constant.GenConstants; +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.utils.StringUtils; + +/** + * 业务表 gen_table + * + * @author ruoyi + */ +public class GenTable extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 编号 */ + private Long tableId; + + /** 表名称 */ + @NotBlank(message = "表名称不能为空") + private String tableName; + + /** 表描述 */ + @NotBlank(message = "表描述不能为空") + private String tableComment; + + /** 实体类名称(首字母大写) */ + @NotBlank(message = "实体类名称不能为空") + private String className; + + /** 使用的模板(crud单表操作 tree树表操作) */ + private String tplCategory; + + /** 生成包路径 */ + @NotBlank(message = "生成包路径不能为空") + private String packageName; + + /** 生成模块名 */ + @NotBlank(message = "生成模块名不能为空") + private String moduleName; + + /** 生成业务名 */ + @NotBlank(message = "生成业务名不能为空") + private String businessName; + + /** 生成功能名 */ + @NotBlank(message = "生成功能名不能为空") + private String functionName; + + /** 生成作者 */ + @NotBlank(message = "作者不能为空") + private String functionAuthor; + + /** 主键信息 */ + private GenTableColumn pkColumn; + + /** 表列信息 */ + @Valid + private List columns; + + /** 其它生成选项 */ + private String options; + + /** 树编码字段 */ + private String treeCode; + + /** 树父编码字段 */ + private String treeParentCode; + + /** 树名称字段 */ + private String treeName; + + public Long getTableId() + { + return tableId; + } + + public void setTableId(Long tableId) + { + this.tableId = tableId; + } + + public String getTableName() + { + return tableName; + } + + public void setTableName(String tableName) + { + this.tableName = tableName; + } + + public String getTableComment() + { + return tableComment; + } + + public void setTableComment(String tableComment) + { + this.tableComment = tableComment; + } + + public String getClassName() + { + return className; + } + + public void setClassName(String className) + { + this.className = className; + } + + public String getTplCategory() + { + return tplCategory; + } + + public void setTplCategory(String tplCategory) + { + this.tplCategory = tplCategory; + } + + public String getPackageName() + { + return packageName; + } + + public void setPackageName(String packageName) + { + this.packageName = packageName; + } + + public String getModuleName() + { + return moduleName; + } + + public void setModuleName(String moduleName) + { + this.moduleName = moduleName; + } + + public String getBusinessName() + { + return businessName; + } + + public void setBusinessName(String businessName) + { + this.businessName = businessName; + } + + public String getFunctionName() + { + return functionName; + } + + public void setFunctionName(String functionName) + { + this.functionName = functionName; + } + + public String getFunctionAuthor() + { + return functionAuthor; + } + + public void setFunctionAuthor(String functionAuthor) + { + this.functionAuthor = functionAuthor; + } + + public GenTableColumn getPkColumn() + { + return pkColumn; + } + + public void setPkColumn(GenTableColumn pkColumn) + { + this.pkColumn = pkColumn; + } + + public List getColumns() + { + return columns; + } + + public void setColumns(List columns) + { + this.columns = columns; + } + + public String getOptions() + { + return options; + } + + public void setOptions(String options) + { + this.options = options; + } + + public String getTreeCode() + { + return treeCode; + } + + public void setTreeCode(String treeCode) + { + this.treeCode = treeCode; + } + + public String getTreeParentCode() + { + return treeParentCode; + } + + public void setTreeParentCode(String treeParentCode) + { + this.treeParentCode = treeParentCode; + } + + public String getTreeName() + { + return treeName; + } + + public void setTreeName(String treeName) + { + this.treeName = treeName; + } + + public boolean isTree() + { + return isTree(this.tplCategory); + } + + public static boolean isTree(String tplCategory) + { + return tplCategory != null && StringUtils.equals(GenConstants.TPL_TREE, tplCategory); + } + + public boolean isCrud() + { + return isCrud(this.tplCategory); + } + + public static boolean isCrud(String tplCategory) + { + return tplCategory != null && StringUtils.equals(GenConstants.TPL_CRUD, tplCategory); + } +} \ No newline at end of file diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTableColumn.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTableColumn.java new file mode 100644 index 00000000..bb912ed4 --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTableColumn.java @@ -0,0 +1,353 @@ +package com.ruoyi.generator.domain; + +import javax.validation.constraints.NotBlank; +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.utils.StringUtils; + +/** + * 代码生成业务字段表 gen_table_column + * + * @author ruoyi + */ +public class GenTableColumn extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 编号 */ + private Long columnId; + + /** 归属表编号 */ + private Long tableId; + + /** 列名称 */ + private String columnName; + + /** 列描述 */ + private String columnComment; + + /** 列类型 */ + private String columnType; + + /** JAVA类型 */ + private String javaType; + + /** JAVA字段名 */ + @NotBlank(message = "Java属性不能为空") + private String javaField; + + /** 是否主键(1是) */ + private String isPk; + + /** 是否自增(1是) */ + private String isIncrement; + + /** 是否必填(1是) */ + private String isRequired; + + /** 是否为插入字段(1是) */ + private String isInsert; + + /** 是否编辑字段(1是) */ + private String isEdit; + + /** 是否列表字段(1是) */ + private String isList; + + /** 是否查询字段(1是) */ + private String isQuery; + + /** 查询方式(EQ等于、NE不等于、GT大于、LT小于、LIKE模糊、BETWEEN范围) */ + private String queryType; + + /** 显示类型(input文本框、textarea文本域、select下拉框、checkbox复选框、radio单选框、datetime日期控件) */ + private String htmlType; + + /** 字典类型 */ + private String dictType; + + /** 排序 */ + private Integer sort; + + public void setColumnId(Long columnId) + { + this.columnId = columnId; + } + + public Long getColumnId() + { + return columnId; + } + + public void setTableId(Long tableId) + { + this.tableId = tableId; + } + + public Long getTableId() + { + return tableId; + } + + public void setColumnName(String columnName) + { + this.columnName = columnName; + } + + public String getColumnName() + { + return columnName; + } + + public void setColumnComment(String columnComment) + { + this.columnComment = columnComment; + } + + public String getColumnComment() + { + return columnComment; + } + + public void setColumnType(String columnType) + { + this.columnType = columnType; + } + + public String getColumnType() + { + return columnType; + } + + public void setJavaType(String javaType) + { + this.javaType = javaType; + } + + public String getJavaType() + { + return javaType; + } + + public void setJavaField(String javaField) + { + this.javaField = javaField; + } + + public String getJavaField() + { + return javaField; + } + + public void setIsPk(String isPk) + { + this.isPk = isPk; + } + + public String getIsPk() + { + return isPk; + } + + public boolean isPk() + { + return isPk(this.isPk); + } + + public boolean isPk(String isPk) + { + return isPk != null && StringUtils.equals("1", isPk); + } + + public String getIsIncrement() + { + return isIncrement; + } + + public void setIsIncrement(String isIncrement) + { + this.isIncrement = isIncrement; + } + + public boolean isIncrement() + { + return isIncrement(this.isIncrement); + } + + public boolean isIncrement(String isIncrement) + { + return isIncrement != null && StringUtils.equals("1", isIncrement); + } + + public void setIsRequired(String isRequired) + { + this.isRequired = isRequired; + } + + public String getIsRequired() + { + return isRequired; + } + + public boolean isRequired() + { + return isRequired(this.isRequired); + } + + public boolean isRequired(String isRequired) + { + return isRequired != null && StringUtils.equals("1", isRequired); + } + + public void setIsInsert(String isInsert) + { + this.isInsert = isInsert; + } + + public String getIsInsert() + { + return isInsert; + } + + public boolean isInsert() + { + return isInsert(this.isInsert); + } + + public boolean isInsert(String isInsert) + { + return isInsert != null && StringUtils.equals("1", isInsert); + } + + public void setIsEdit(String isEdit) + { + this.isEdit = isEdit; + } + + public String getIsEdit() + { + return isEdit; + } + + public boolean isEdit() + { + return isInsert(this.isEdit); + } + + public boolean isEdit(String isEdit) + { + return isEdit != null && StringUtils.equals("1", isEdit); + } + + public void setIsList(String isList) + { + this.isList = isList; + } + + public String getIsList() + { + return isList; + } + + public boolean isList() + { + return isList(this.isList); + } + + public boolean isList(String isList) + { + return isList != null && StringUtils.equals("1", isList); + } + + public void setIsQuery(String isQuery) + { + this.isQuery = isQuery; + } + + public String getIsQuery() + { + return isQuery; + } + + public boolean isQuery() + { + return isQuery(this.isQuery); + } + + public boolean isQuery(String isQuery) + { + return isQuery != null && StringUtils.equals("1", isQuery); + } + + public void setQueryType(String queryType) + { + this.queryType = queryType; + } + + public String getQueryType() + { + return queryType; + } + + public String getHtmlType() + { + return htmlType; + } + + public void setHtmlType(String htmlType) + { + this.htmlType = htmlType; + } + + public void setDictType(String dictType) + { + this.dictType = dictType; + } + + public String getDictType() + { + return dictType; + } + + public void setSort(Integer sort) + { + this.sort = sort; + } + + public Integer getSort() + { + return sort; + } + + public boolean isSuperColumn() + { + return isSuperColumn(this.javaField); + } + + public static boolean isSuperColumn(String javaField) + { + return StringUtils.equalsAnyIgnoreCase(javaField, "createBy", "createTime", "updateBy", "updateTime", "remark"); + } + + public String readConverterExp() + { + String remarks = StringUtils.substringBetween(this.columnComment, "(", ")"); + StringBuffer sb = new StringBuffer(); + if (StringUtils.isNotEmpty(remarks)) + { + for (String value : remarks.split(" ")) + { + if (StringUtils.isNotEmpty(value)) + { + Object startStr = value.subSequence(0, 1); + String endStr = value.substring(1); + sb.append("").append(startStr).append("=").append(endStr).append(","); + } + } + return sb.deleteCharAt(sb.length() - 1).toString(); + } + else + { + return this.columnComment; + } + } +} \ No newline at end of file diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/TableInfo.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/TableInfo.java deleted file mode 100644 index d6219249..00000000 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/TableInfo.java +++ /dev/null @@ -1,103 +0,0 @@ -package com.ruoyi.generator.domain; - -import java.util.List; -import com.ruoyi.common.core.domain.BaseEntity; -import com.ruoyi.common.utils.StringUtils; - -/** - * ry 数据库表 - * - * @author ruoyi - */ -public class TableInfo extends BaseEntity -{ - private static final long serialVersionUID = 1L; - - /** 表名称 */ - private String tableName; - - /** 表描述 */ - private String tableComment; - - /** 表的主键列信息 */ - private ColumnInfo primaryKey; - - /** 表的列名(不包含主键) */ - private List columns; - - /** 类名(第一个字母大写) */ - private String className; - - /** 类名(第一个字母小写) */ - private String classname; - - public String getTableName() - { - return tableName; - } - - public void setTableName(String tableName) - { - this.tableName = tableName; - } - - public String getTableComment() - { - return tableComment; - } - - public void setTableComment(String tableComment) - { - this.tableComment = tableComment; - } - - public List getColumns() - { - return columns; - } - - public ColumnInfo getColumnsLast() - { - ColumnInfo columnInfo = null; - if (StringUtils.isNotNull(columns) && columns.size() > 0) - { - columnInfo = columns.get(0); - } - return columnInfo; - } - - public void setColumns(List columns) - { - this.columns = columns; - } - - public String getClassName() - { - return className; - } - - public void setClassName(String className) - { - this.className = className; - } - - public String getClassname() - { - return classname; - } - - public void setClassname(String classname) - { - this.classname = classname; - } - - public ColumnInfo getPrimaryKey() - { - return primaryKey; - } - - public void setPrimaryKey(ColumnInfo primaryKey) - { - this.primaryKey = primaryKey; - } -} diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenMapper.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenMapper.java deleted file mode 100644 index a516128a..00000000 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenMapper.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.ruoyi.generator.mapper; - -import java.util.List; -import com.ruoyi.generator.domain.ColumnInfo; -import com.ruoyi.generator.domain.TableInfo; - -/** - * 代码生成 数据层 - * - * @author ruoyi - */ -public interface GenMapper -{ - /** - * 查询ry数据库表信息 - * - * @param tableInfo 表信息 - * @return 数据库表列表 - */ - public List selectTableList(TableInfo tableInfo); - - /** - * 根据表名称查询信息 - * - * @param tableName 表名称 - * @return 表信息 - */ - public TableInfo selectTableByName(String tableName); - - /** - * 根据表名称查询列信息 - * - * @param tableName 表名称 - * @return 列信息 - */ - public List selectTableColumnsByName(String tableName); -} diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableColumnMapper.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableColumnMapper.java new file mode 100644 index 00000000..6ebe2306 --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableColumnMapper.java @@ -0,0 +1,52 @@ +package com.ruoyi.generator.mapper; + +import java.util.List; +import com.ruoyi.generator.domain.GenTableColumn; + +/** + * 业务字段 数据层 + * + * @author ruoyi + */ +public interface GenTableColumnMapper +{ + /** + * 根据表名称查询列信息 + * + * @param tableName 表名称 + * @return 列信息 + */ + public List selectDbTableColumnsByName(String tableName); + + /** + * 查询业务字段列表 + * + * @param genTableColumn 业务字段信息 + * @return 业务字段集合 + */ + public List selectGenTableColumnListByTableId(GenTableColumn genTableColumn); + + /** + * 新增业务字段 + * + * @param genTableColumn 业务字段信息 + * @return 结果 + */ + public int insertGenTableColumn(GenTableColumn genTableColumn); + + /** + * 修改业务字段 + * + * @param genTableColumn 业务字段信息 + * @return 结果 + */ + public int updateGenTableColumn(GenTableColumn genTableColumn); + + /** + * 批量删除业务字段 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteGenTableColumnByIds(Long[] ids); +} \ No newline at end of file diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableMapper.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableMapper.java new file mode 100644 index 00000000..85143e65 --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableMapper.java @@ -0,0 +1,76 @@ +package com.ruoyi.generator.mapper; + +import java.util.List; +import com.ruoyi.generator.domain.GenTable; + +/** + * 业务 数据层 + * + * @author ruoyi + */ +public interface GenTableMapper +{ + /** + * 查询业务列表 + * + * @param genTable 业务信息 + * @return 业务集合 + */ + public List selectGenTableList(GenTable genTable); + + /** + * 查询据库列表 + * + * @param genTable 业务信息 + * @return 数据库表集合 + */ + public List selectDbTableList(GenTable genTable); + + /** + * 查询据库列表 + * + * @param tableNames 表名称组 + * @return 数据库表集合 + */ + public List selectDbTableListByNames(String[] tableNames); + + /** + * 查询表ID业务信息 + * + * @param id 业务ID + * @return 业务信息 + */ + public GenTable selectGenTableById(Long id); + + /** + * 查询表名称业务信息 + * + * @param tableName 表名称 + * @return 业务信息 + */ + public GenTable selectGenTableByName(String tableName); + + /** + * 新增业务 + * + * @param genTable 业务信息 + * @return 结果 + */ + public int insertGenTable(GenTable genTable); + + /** + * 修改业务 + * + * @param genTable 业务信息 + * @return 结果 + */ + public int updateGenTable(GenTable genTable); + + /** + * 批量删除业务 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteGenTableByIds(Long[] ids); +} \ No newline at end of file diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenService.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenService.java deleted file mode 100644 index 1dbf12af..00000000 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenService.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.ruoyi.generator.service; - -import java.util.List; -import com.ruoyi.generator.domain.TableInfo; - -/** - * 代码生成 服务层 - * - * @author ruoyi - */ -public interface IGenService -{ - /** - * 查询ry数据库表信息 - * - * @param tableInfo 表信息 - * @return 数据库表列表 - */ - public List selectTableList(TableInfo tableInfo); - - /** - * 生成代码 - * - * @param tableName 表名称 - * @return 数据 - */ - public byte[] generatorCode(String tableName); - - /** - * 批量生成代码 - * - * @param tableNames 表数组 - * @return 数据 - */ - public byte[] generatorCode(String[] tableNames); -} diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableColumnService.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableColumnService.java new file mode 100644 index 00000000..2ff5f566 --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableColumnService.java @@ -0,0 +1,44 @@ +package com.ruoyi.generator.service; + +import java.util.List; +import com.ruoyi.generator.domain.GenTableColumn; + +/** + * 业务字段 服务层 + * + * @author ruoyi + */ +public interface IGenTableColumnService +{ + /** + * 查询业务字段列表 + * + * @param genTableColumn 业务字段信息 + * @return 业务字段集合 + */ + public List selectGenTableColumnListByTableId(GenTableColumn genTableColumn); + + /** + * 新增业务字段 + * + * @param genTableColumn 业务字段信息 + * @return 结果 + */ + public int insertGenTableColumn(GenTableColumn genTableColumn); + + /** + * 修改业务字段 + * + * @param genTableColumn 业务字段信息 + * @return 结果 + */ + public int updateGenTableColumn(GenTableColumn genTableColumn); + + /** + * 删除业务字段信息 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteGenTableColumnByIds(String ids); +} diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableService.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableService.java new file mode 100644 index 00000000..50e51bcd --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableService.java @@ -0,0 +1,100 @@ +package com.ruoyi.generator.service; + +import java.util.List; +import java.util.Map; +import com.ruoyi.generator.domain.GenTable; + +/** + * 业务 服务层 + * + * @author ruoyi + */ +public interface IGenTableService +{ + /** + * 查询业务列表 + * + * @param genTable 业务信息 + * @return 业务集合 + */ + public List selectGenTableList(GenTable genTable); + + /** + * 查询据库列表 + * + * @param genTable 业务信息 + * @return 数据库表集合 + */ + public List selectDbTableList(GenTable genTable); + + /** + * 查询据库列表 + * + * @param tableNames 表名称组 + * @return 数据库表集合 + */ + public List selectDbTableListByNames(String[] tableNames); + + /** + * 查询业务信息 + * + * @param id 业务ID + * @return 业务信息 + */ + public GenTable selectGenTableById(Long id); + + /** + * 修改业务 + * + * @param genTable 业务信息 + * @return 结果 + */ + public void updateGenTable(GenTable genTable); + + /** + * 删除业务信息 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public void deleteGenTableByIds(String ids); + + /** + * 导入表结构 + * + * @param tableList 导入表列表 + * @param operName 操作人员 + */ + public void importGenTable(List tableList, String operName); + + /** + * 预览代码 + * + * @param tableId 表编号 + * @return 预览数据列表 + */ + public Map previewCode(Long tableId); + + /** + * 生成代码 + * + * @param tableName 表名称 + * @return 数据 + */ + public byte[] generatorCode(String tableName); + + /** + * 批量生成代码 + * + * @param tableNames 表数组 + * @return 数据 + */ + public byte[] generatorCode(String[] tableNames); + + /** + * 修改保存参数校验 + * + * @param genTable 业务信息 + */ + public void validateEdit(GenTable genTable); +} diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/impl/GenServiceImpl.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/impl/GenServiceImpl.java deleted file mode 100644 index f960ea38..00000000 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/impl/GenServiceImpl.java +++ /dev/null @@ -1,135 +0,0 @@ -package com.ruoyi.generator.service.impl; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.StringWriter; -import java.util.List; -import java.util.zip.ZipEntry; -import java.util.zip.ZipOutputStream; -import org.apache.commons.io.IOUtils; -import org.apache.velocity.Template; -import org.apache.velocity.VelocityContext; -import org.apache.velocity.app.Velocity; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import com.ruoyi.common.constant.Constants; -import com.ruoyi.common.utils.StringUtils; -import com.ruoyi.generator.config.GenConfig; -import com.ruoyi.generator.domain.ColumnInfo; -import com.ruoyi.generator.domain.TableInfo; -import com.ruoyi.generator.mapper.GenMapper; -import com.ruoyi.generator.service.IGenService; -import com.ruoyi.generator.util.GenUtils; -import com.ruoyi.generator.util.VelocityInitializer; - -/** - * 代码生成 服务层处理 - * - * @author ruoyi - */ -@Service -public class GenServiceImpl implements IGenService -{ - private static final Logger log = LoggerFactory.getLogger(GenServiceImpl.class); - - @Autowired - private GenMapper genMapper; - - /** - * 查询ry数据库表信息 - * - * @param tableInfo 表信息 - * @return 数据库表列表 - */ - @Override - public List selectTableList(TableInfo tableInfo) - { - return genMapper.selectTableList(tableInfo); - } - - /** - * 生成代码 - * - * @param tableName 表名称 - * @return 数据 - */ - @Override - public byte[] generatorCode(String tableName) - { - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - ZipOutputStream zip = new ZipOutputStream(outputStream); - generatorCode(tableName, zip); - IOUtils.closeQuietly(zip); - return outputStream.toByteArray(); - } - - /** - * 批量生成代码 - * - * @param tableNames 表数组 - * @return 数据 - */ - @Override - public byte[] generatorCode(String[] tableNames) - { - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - ZipOutputStream zip = new ZipOutputStream(outputStream); - for (String tableName : tableNames) - { - generatorCode(tableName, zip); - } - IOUtils.closeQuietly(zip); - return outputStream.toByteArray(); - } - - /** - * 查询表信息并生成代码 - */ - private void generatorCode(String tableName, ZipOutputStream zip) - { - // 查询表信息 - TableInfo table = genMapper.selectTableByName(tableName); - // 查询列信息 - List columns = genMapper.selectTableColumnsByName(tableName); - - // 表名转换成Java属性名 - String className = GenUtils.tableToJava(table.getTableName()); - table.setClassName(className); - table.setClassname(StringUtils.uncapitalize(className)); - // 列信息 - table.setColumns(GenUtils.transColums(columns)); - // 设置主键 - table.setPrimaryKey(table.getColumnsLast()); - - VelocityInitializer.initVelocity(); - - String packageName = GenConfig.getPackageName(); - String moduleName = GenUtils.getModuleName(packageName); - - VelocityContext context = GenUtils.getVelocityContext(table); - - // 获取模板列表 - List templates = GenUtils.getTemplates(); - for (String template : templates) - { - // 渲染模板 - StringWriter sw = new StringWriter(); - Template tpl = Velocity.getTemplate(template, Constants.UTF8); - tpl.merge(context, sw); - try - { - // 添加到zip - zip.putNextEntry(new ZipEntry(GenUtils.getFileName(template, table, moduleName))); - IOUtils.write(sw.toString(), zip, Constants.UTF8); - IOUtils.closeQuietly(sw); - zip.closeEntry(); - } - catch (IOException e) - { - log.error("渲染模板失败,表名:" + table.getTableName(), e); - } - } - } -} diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/impl/GenTableColumnServiceImpl.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/impl/GenTableColumnServiceImpl.java new file mode 100644 index 00000000..45d015af --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/impl/GenTableColumnServiceImpl.java @@ -0,0 +1,69 @@ +package com.ruoyi.generator.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.generator.domain.GenTableColumn; +import com.ruoyi.generator.mapper.GenTableColumnMapper; +import com.ruoyi.generator.service.IGenTableColumnService; + +/** + * 业务字段 服务层实现 + * + * @author ruoyi + */ +@Service +public class GenTableColumnServiceImpl implements IGenTableColumnService +{ + @Autowired + private GenTableColumnMapper genTableColumnMapper; + + /** + * 查询业务字段列表 + * + * @param genTableColumn 业务字段信息 + * @return 业务字段集合 + */ + @Override + public List selectGenTableColumnListByTableId(GenTableColumn genTableColumn) + { + return genTableColumnMapper.selectGenTableColumnListByTableId(genTableColumn); + } + + /** + * 新增业务字段 + * + * @param genTableColumn 业务字段信息 + * @return 结果 + */ + @Override + public int insertGenTableColumn(GenTableColumn genTableColumn) + { + return genTableColumnMapper.insertGenTableColumn(genTableColumn); + } + + /** + * 修改业务字段 + * + * @param genTableColumn 业务字段信息 + * @return 结果 + */ + @Override + public int updateGenTableColumn(GenTableColumn genTableColumn) + { + return genTableColumnMapper.updateGenTableColumn(genTableColumn); + } + + /** + * 删除业务字段对象 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + @Override + public int deleteGenTableColumnByIds(String ids) + { + return genTableColumnMapper.deleteGenTableColumnByIds(Convert.toLongArray(ids)); + } +} \ No newline at end of file diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/impl/GenTableServiceImpl.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/impl/GenTableServiceImpl.java new file mode 100644 index 00000000..6bfbc124 --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/impl/GenTableServiceImpl.java @@ -0,0 +1,337 @@ +package com.ruoyi.generator.service.impl; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.StringWriter; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; +import org.apache.commons.io.IOUtils; +import org.apache.velocity.Template; +import org.apache.velocity.VelocityContext; +import org.apache.velocity.app.Velocity; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.constant.GenConstants; +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.common.exception.BusinessException; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.generator.domain.GenTable; +import com.ruoyi.generator.domain.GenTableColumn; +import com.ruoyi.generator.mapper.GenTableColumnMapper; +import com.ruoyi.generator.mapper.GenTableMapper; +import com.ruoyi.generator.service.IGenTableService; +import com.ruoyi.generator.util.GenUtils; +import com.ruoyi.generator.util.VelocityInitializer; +import com.ruoyi.generator.util.VelocityUtils; + +/** + * 业务 服务层实现 + * + * @author ruoyi + */ +@Service +public class GenTableServiceImpl implements IGenTableService +{ + private static final Logger log = LoggerFactory.getLogger(GenTableServiceImpl.class); + + @Autowired + private GenTableMapper genTableMapper; + + @Autowired + private GenTableColumnMapper genTableColumnMapper; + + /** + * 查询业务信息 + * + * @param id 业务ID + * @return 业务信息 + */ + @Override + public GenTable selectGenTableById(Long id) + { + GenTable genTable = genTableMapper.selectGenTableById(id); + setTableFromOptions(genTable); + return genTable; + } + + /** + * 查询业务列表 + * + * @param genTable 业务信息 + * @return 业务集合 + */ + @Override + public List selectGenTableList(GenTable genTable) + { + return genTableMapper.selectGenTableList(genTable); + } + + /** + * 查询据库列表 + * + * @param genTable 业务信息 + * @return 数据库表集合 + */ + public List selectDbTableList(GenTable genTable) + { + return genTableMapper.selectDbTableList(genTable); + } + + /** + * 查询据库列表 + * + * @param tableNames 表名称组 + * @return 数据库表集合 + */ + public List selectDbTableListByNames(String[] tableNames) + { + return genTableMapper.selectDbTableListByNames(tableNames); + } + + /** + * 修改业务 + * + * @param genTable 业务信息 + * @return 结果 + */ + @Override + @Transactional + public void updateGenTable(GenTable genTable) + { + String options = JSON.toJSONString(genTable.getParams()); + genTable.setOptions(options); + int row = genTableMapper.updateGenTable(genTable); + if (row > 0) + { + for (GenTableColumn cenTableColumn : genTable.getColumns()) + { + genTableColumnMapper.updateGenTableColumn(cenTableColumn); + } + } + } + + /** + * 删除业务对象 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + @Override + @Transactional + public void deleteGenTableByIds(String ids) + { + genTableMapper.deleteGenTableByIds(Convert.toLongArray(ids)); + genTableColumnMapper.deleteGenTableColumnByIds(Convert.toLongArray(ids)); + } + + /** + * 导入表结构 + * + * @param tableList 导入表列表 + * @param operName 操作人员 + */ + @Override + @Transactional + public void importGenTable(List tableList, String operName) + { + for (GenTable table : tableList) + { + try + { + String tableName = table.getTableName(); + GenUtils.initTable(table, operName); + int row = genTableMapper.insertGenTable(table); + if (row > 0) + { + // 保存列信息 + List genTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName); + for (GenTableColumn column : genTableColumns) + { + GenUtils.initColumnField(column, table); + genTableColumnMapper.insertGenTableColumn(column); + } + } + } + catch (Exception e) + { + log.error("表名 " + table.getTableName() + " 导入失败:", e); + } + } + } + + /** + * 预览代码 + * + * @param tableId 表编号 + * @return 预览数据列表 + */ + public Map previewCode(Long tableId) + { + Map dataMap = new LinkedHashMap<>(); + // 查询表信息 + GenTable table = genTableMapper.selectGenTableById(tableId); + // 查询列信息 + List columns = table.getColumns(); + setPkColumn(table, columns); + VelocityInitializer.initVelocity(); + + VelocityContext context = VelocityUtils.prepareContext(table); + + // 获取模板列表 + List templates = VelocityUtils.getTemplateList(table.getTplCategory()); + for (String template : templates) + { + // 渲染模板 + StringWriter sw = new StringWriter(); + Template tpl = Velocity.getTemplate(template, Constants.UTF8); + tpl.merge(context, sw); + dataMap.put(template, sw.toString()); + } + return dataMap; + } + + /** + * 生成代码 + * + * @param tableName 表名称 + * @return 数据 + */ + @Override + public byte[] generatorCode(String tableName) + { + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + ZipOutputStream zip = new ZipOutputStream(outputStream); + generatorCode(tableName, zip); + IOUtils.closeQuietly(zip); + return outputStream.toByteArray(); + } + + /** + * 批量生成代码 + * + * @param tableNames 表数组 + * @return 数据 + */ + @Override + public byte[] generatorCode(String[] tableNames) + { + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + ZipOutputStream zip = new ZipOutputStream(outputStream); + for (String tableName : tableNames) + { + generatorCode(tableName, zip); + } + IOUtils.closeQuietly(zip); + return outputStream.toByteArray(); + } + + /** + * 查询表信息并生成代码 + */ + private void generatorCode(String tableName, ZipOutputStream zip) + { + // 查询表信息 + GenTable table = genTableMapper.selectGenTableByName(tableName); + // 查询列信息 + List columns = table.getColumns(); + setPkColumn(table, columns); + + VelocityInitializer.initVelocity(); + + VelocityContext context = VelocityUtils.prepareContext(table); + + // 获取模板列表 + List templates = VelocityUtils.getTemplateList(table.getTplCategory()); + for (String template : templates) + { + // 渲染模板 + StringWriter sw = new StringWriter(); + Template tpl = Velocity.getTemplate(template, Constants.UTF8); + tpl.merge(context, sw); + try + { + // 添加到zip + zip.putNextEntry(new ZipEntry(VelocityUtils.getFileName(template, table))); + IOUtils.write(sw.toString(), zip, Constants.UTF8); + IOUtils.closeQuietly(sw); + zip.closeEntry(); + } + catch (IOException e) + { + log.error("渲染模板失败,表名:" + table.getTableName(), e); + } + } + } + + /** + * 修改保存参数校验 + * + * @param genTable 业务信息 + */ + public void validateEdit(GenTable genTable) + { + if (GenConstants.TPL_TREE.equals(genTable.getTplCategory())) + { + String options = JSON.toJSONString(genTable.getParams()); + JSONObject paramsObj = JSONObject.parseObject(options); + if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_CODE))) + { + throw new BusinessException("树编码字段不能为空"); + } + else if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_PARENT_CODE))) + { + throw new BusinessException("树父编码字段不能为空"); + } + else if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_NAME))) + { + throw new BusinessException("树名称字段不能为空"); + } + } + } + + /** + * 设置主键列信息 + * + * @param genTable 业务表信息 + * @param columns 业务字段列表 + */ + public void setPkColumn(GenTable table, List columns) + { + for (GenTableColumn column : columns) + { + if (column.isPk()) + { + table.setPkColumn(column); + break; + } + } + } + + /** + * 设置代码生成其他选项值 + * + * @param genTable 设置后的生成对象 + */ + public void setTableFromOptions(GenTable genTable) + { + JSONObject paramsObj = JSONObject.parseObject(genTable.getOptions()); + if (StringUtils.isNotNull(paramsObj)) + { + String treeCode = paramsObj.getString(GenConstants.TREE_CODE); + String treeParentCode = paramsObj.getString(GenConstants.TREE_PARENT_CODE); + String treeName = paramsObj.getString(GenConstants.TREE_NAME); + genTable.setTreeCode(treeCode); + genTable.setTreeParentCode(treeParentCode); + genTable.setTreeName(treeName); + } + } +} \ No newline at end of file diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java index 46d0a9dc..bfbe238d 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java @@ -1,16 +1,11 @@ package com.ruoyi.generator.util; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import org.apache.velocity.VelocityContext; -import com.ruoyi.common.constant.Constants; -import com.ruoyi.common.utils.DateUtils; +import java.util.Arrays; +import com.ruoyi.common.constant.GenConstants; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.generator.config.GenConfig; -import com.ruoyi.generator.domain.ColumnInfo; -import com.ruoyi.generator.domain.TableInfo; +import com.ruoyi.generator.domain.GenTable; +import com.ruoyi.generator.domain.GenTableColumn; /** * 代码生成器 工具类 @@ -19,161 +14,114 @@ import com.ruoyi.generator.domain.TableInfo; */ public class GenUtils { - /** 项目空间路径 */ - private static final String PROJECT_PATH = getProjectPath(); - - /** mybatis空间路径 */ - private static final String MYBATIS_PATH = "main/resources/mapper"; - - /** html空间路径 */ - private static final String TEMPLATES_PATH = "main/resources/templates"; - - /** 类型转换 */ - public static Map javaTypeMap = new HashMap(); - /** - * 设置列信息 + * 初始化表信息 */ - public static List transColums(List columns) + public static void initTable(GenTable genTable, String operName) { - // 列信息 - List columsList = new ArrayList<>(); - for (ColumnInfo column : columns) - { - // 列名转换成Java属性名 - String attrName = StringUtils.convertToCamelCase(column.getColumnName()); - column.setAttrName(attrName); - column.setAttrname(StringUtils.uncapitalize(attrName)); - column.setExtra(column.getExtra()); - - // 列的数据类型,转换成Java类型 - String attrType = javaTypeMap.get(column.getDataType()); - column.setAttrType(attrType); - - columsList.add(column); - } - return columsList; + genTable.setClassName(StringUtils.convertToCamelCase(genTable.getTableName())); + genTable.setPackageName(GenConfig.getPackageName()); + genTable.setModuleName(getModuleName(GenConfig.getPackageName())); + genTable.setBusinessName(getBusinessName(genTable.getTableName())); + genTable.setFunctionName(replaceText(genTable.getTableComment())); + genTable.setFunctionAuthor(GenConfig.getAuthor()); + genTable.setCreateBy(operName); } /** - * 获取模板信息 + * 初始化列属性字段 + */ + public static void initColumnField(GenTableColumn column, GenTable table) + { + String dataType = getDbType(column.getColumnType()); + String columnName = column.getColumnName(); + column.setTableId(table.getTableId()); + column.setCreateBy(table.getCreateBy()); + // 设置java字段名 + column.setJavaField(StringUtils.toCamelCase(columnName)); + + if (arraysContains(GenConstants.COLUMNTYPE_STR, dataType)) + { + column.setJavaType(GenConstants.TYPE_STRING); + // 字符串长度超过500设置为文本域 + Integer columnLength = getColumnLength(column.getColumnType()); + String htmlType = columnLength >= 500 ? GenConstants.HTML_TEXTAREA : GenConstants.HTML_INPUT; + column.setHtmlType(htmlType); + } + else if (arraysContains(GenConstants.COLUMNTYPE_TIME, dataType)) + { + column.setJavaType(GenConstants.TYPE_DATE); + column.setHtmlType(GenConstants.HTML_DATETIME); + } + else if (arraysContains(GenConstants.COLUMNTYPE_NUMBER, dataType)) + { + column.setHtmlType(GenConstants.HTML_INPUT); + + // 如果是浮点型 + String[] str = StringUtils.split(StringUtils.substringBetween(column.getColumnType(), "(", ")"), ","); + if (str != null && str.length == 2 && Integer.parseInt(str[1]) > 0) + { + column.setJavaType(GenConstants.TYPE_DOUBLE); + } + // 如果是整形 + else if (str != null && str.length == 1 && Integer.parseInt(str[0]) <= 10) + { + column.setJavaType(GenConstants.TYPE_INTEGER); + } + // 长整形 + else + { + column.setJavaType(GenConstants.TYPE_LONG); + } + } + + // 插入字段(默认所有字段都需要插入) + column.setIsInsert(GenConstants.REQUIRE); + + // 编辑字段 + if (!arraysContains(GenConstants.COLUMNNAME_NOT_EDIT, columnName) && !column.isPk()) + { + column.setIsEdit(GenConstants.REQUIRE); + } + // 列表字段 + if (!arraysContains(GenConstants.COLUMNNAME_NOT_LIST, columnName) && !column.isPk()) + { + column.setIsList(GenConstants.REQUIRE); + } + // 查询字段 + if (!arraysContains(GenConstants.COLUMNNAME_NOT_QUERY, columnName) && !column.isPk()) + { + column.setIsQuery(GenConstants.REQUIRE); + } + + // 查询字段类型 + if (StringUtils.endsWithIgnoreCase(columnName, "name")) + { + column.setQueryType(GenConstants.QUERY_LIKE); + } + // 状态字段设置单选框 + if (StringUtils.endsWithIgnoreCase(columnName, "status")) + { + column.setHtmlType(GenConstants.HTML_RADIO); + } + // 类型&性别字段设置下拉框 + else if (StringUtils.endsWithIgnoreCase(columnName, "type") + || StringUtils.endsWithIgnoreCase(columnName, "sex")) + { + column.setHtmlType(GenConstants.HTML_SELECT); + } + } + + /** + * 校验数组是否包含指定值 * - * @return 模板列表 + * @param arr 数组 + * @param targetValue 值 + * @return 是否包含 */ - public static VelocityContext getVelocityContext(TableInfo table) + public static boolean arraysContains(String[] arr, String targetValue) { - // java对象数据传递到模板文件vm - VelocityContext velocityContext = new VelocityContext(); - String packageName = GenConfig.getPackageName(); - velocityContext.put("tableName", table.getTableName()); - velocityContext.put("tableComment", replaceKeyword(table.getTableComment())); - velocityContext.put("primaryKey", table.getPrimaryKey()); - velocityContext.put("className", table.getClassName()); - velocityContext.put("classname", table.getClassname()); - velocityContext.put("moduleName", getModuleName(packageName)); - velocityContext.put("columns", table.getColumns()); - velocityContext.put("basePackage", getBasePackage(packageName)); - velocityContext.put("package", packageName); - velocityContext.put("author", GenConfig.getAuthor()); - velocityContext.put("datetime", DateUtils.getDate()); - return velocityContext; - } - - /** - * 获取模板信息 - * - * @return 模板列表 - */ - public static List getTemplates() - { - List templates = new ArrayList(); - templates.add("vm/java/domain.java.vm"); - templates.add("vm/java/Mapper.java.vm"); - templates.add("vm/java/Service.java.vm"); - templates.add("vm/java/ServiceImpl.java.vm"); - templates.add("vm/java/Controller.java.vm"); - templates.add("vm/xml/Mapper.xml.vm"); - templates.add("vm/html/list.html.vm"); - templates.add("vm/html/add.html.vm"); - templates.add("vm/html/edit.html.vm"); - templates.add("vm/sql/sql.vm"); - return templates; - } - - /** - * 表名转换成Java类名 - */ - public static String tableToJava(String tableName) - { - String autoRemovePre = GenConfig.getAutoRemovePre(); - String tablePrefix = GenConfig.getTablePrefix(); - if (Constants.AUTO_REOMVE_PRE.equals(autoRemovePre) && StringUtils.isNotEmpty(tablePrefix)) - { - tableName = tableName.replaceFirst(tablePrefix, ""); - } - return StringUtils.convertToCamelCase(tableName); - } - - /** - * 获取文件名 - */ - public static String getFileName(String template, TableInfo table, String moduleName) - { - // 小写类名 - String classname = table.getClassname(); - // 大写类名 - String className = table.getClassName(); - String javaPath = PROJECT_PATH; - String mybatisPath = MYBATIS_PATH + "/" + moduleName + "/" + className; - String htmlPath = TEMPLATES_PATH + "/" + moduleName + "/" + classname; - - if (template.contains("domain.java.vm")) - { - return javaPath + "domain" + "/" + className + ".java"; - } - - if (template.contains("Mapper.java.vm")) - { - return javaPath + "mapper" + "/" + className + "Mapper.java"; - } - - if (template.contains("Service.java.vm")) - { - return javaPath + "service" + "/" + "I" + className + "Service.java"; - } - - if (template.contains("ServiceImpl.java.vm")) - { - return javaPath + "service" + "/impl/" + className + "ServiceImpl.java"; - } - - if (template.contains("Controller.java.vm")) - { - return javaPath + "controller" + "/" + className + "Controller.java"; - } - - if (template.contains("Mapper.xml.vm")) - { - return mybatisPath + "Mapper.xml"; - } - - if (template.contains("list.html.vm")) - { - return htmlPath + "/" + classname + ".html"; - } - if (template.contains("add.html.vm")) - { - return htmlPath + "/" + "add.html"; - } - if (template.contains("edit.html.vm")) - { - return htmlPath + "/" + "edit.html"; - } - if (template.contains("sql.vm")) - { - return classname + "Menu.sql"; - } - return null; + return Arrays.asList(arr).contains(targetValue); } /** @@ -190,52 +138,65 @@ public class GenUtils return moduleName; } - public static String getBasePackage(String packageName) + /** + * 获取业务名 + * + * @param tableName 表名 + * @return 业务名 + */ + public static String getBusinessName(String tableName) { - int lastIndex = packageName.lastIndexOf("."); - String basePackage = StringUtils.substring(packageName, 0, lastIndex); - return basePackage; + int lastIndex = tableName.lastIndexOf("_"); + int nameLength = tableName.length(); + String businessName = StringUtils.substring(tableName, lastIndex + 1, nameLength); + return businessName; } - public static String getProjectPath() + /** + * 关键字替换 + * + * @param name 需要被替换的名字 + * @return 替换后的名字 + */ + public static String replaceText(String text) { - String packageName = GenConfig.getPackageName(); - StringBuffer projectPath = new StringBuffer(); - projectPath.append("main/java/"); - projectPath.append(packageName.replace(".", "/")); - projectPath.append("/"); - return projectPath.toString(); + return text.replaceAll("(?:表|若依)", ""); } - public static String replaceKeyword(String keyword) + /** + * 获取数据库类型字段 + * + * @param columnType 列类型 + * @return 截取后的列类型 + */ + public static String getDbType(String columnType) { - String keyName = keyword.replaceAll("(?:表|信息|管理)", ""); - return keyName; + if (StringUtils.indexOf(columnType, "(") > 0) + { + return StringUtils.substringBefore(columnType, "("); + } + else + { + return columnType; + } } - static + /** + * 获取字段长度 + * + * @param columnType 列类型 + * @return 截取后的列类型 + */ + public static Integer getColumnLength(String columnType) { - javaTypeMap.put("tinyint", "Integer"); - javaTypeMap.put("smallint", "Integer"); - javaTypeMap.put("mediumint", "Integer"); - javaTypeMap.put("int", "Integer"); - javaTypeMap.put("number", "Integer"); - javaTypeMap.put("integer", "integer"); - javaTypeMap.put("bigint", "Long"); - javaTypeMap.put("float", "Float"); - javaTypeMap.put("double", "Double"); - javaTypeMap.put("decimal", "BigDecimal"); - javaTypeMap.put("bit", "Boolean"); - javaTypeMap.put("char", "String"); - javaTypeMap.put("varchar", "String"); - javaTypeMap.put("varchar2", "String"); - javaTypeMap.put("tinytext", "String"); - javaTypeMap.put("text", "String"); - javaTypeMap.put("mediumtext", "String"); - javaTypeMap.put("longtext", "String"); - javaTypeMap.put("time", "Date"); - javaTypeMap.put("date", "Date"); - javaTypeMap.put("datetime", "Date"); - javaTypeMap.put("timestamp", "Date"); + if (StringUtils.indexOf(columnType, "(") > 0) + { + String length = StringUtils.substringBetween(columnType, "(", ")"); + return Integer.valueOf(length); + } + else + { + return 0; + } } -} +} \ No newline at end of file diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityInitializer.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityInitializer.java index 6d7e5f70..8f9ee07b 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityInitializer.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityInitializer.java @@ -20,8 +20,7 @@ public class VelocityInitializer try { // 加载classpath目录下的vm文件 - p.setProperty("file.resource.loader.class", - "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); + p.setProperty("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); // 定义字符集 p.setProperty(Velocity.ENCODING_DEFAULT, Constants.UTF8); p.setProperty(Velocity.OUTPUT_ENCODING, Constants.UTF8); 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 new file mode 100644 index 00000000..b831ab23 --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java @@ -0,0 +1,315 @@ +package com.ruoyi.generator.util; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import org.apache.velocity.VelocityContext; +import com.alibaba.fastjson.JSONObject; +import com.ruoyi.common.constant.GenConstants; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.generator.config.GenConfig; +import com.ruoyi.generator.domain.GenTable; +import com.ruoyi.generator.domain.GenTableColumn; + +public class VelocityUtils +{ + /** 项目空间路径 */ + private static final String PROJECT_PATH = "main/java"; + + /** mybatis空间路径 */ + private static final String MYBATIS_PATH = "main/resources/mapper"; + + /** html空间路径 */ + private static final String TEMPLATES_PATH = "main/resources/templates"; + + /** + * 设置模板变量信息 + * + * @return 模板列表 + */ + public static VelocityContext prepareContext(GenTable genTable) + { + String moduleName = genTable.getModuleName(); + String businessName = genTable.getBusinessName(); + String packageName = genTable.getPackageName(); + String tplCategory = genTable.getTplCategory(); + + VelocityContext velocityContext = new VelocityContext(); + velocityContext.put("tplCategory", genTable.getTplCategory()); + velocityContext.put("tableName", genTable.getTableName()); + velocityContext.put("functionName", genTable.getFunctionName()); + velocityContext.put("ClassName", genTable.getClassName()); + velocityContext.put("className", StringUtils.uncapitalize(genTable.getClassName())); + velocityContext.put("moduleName", genTable.getModuleName()); + velocityContext.put("businessName", genTable.getBusinessName()); + velocityContext.put("basePackage", getPackagePrefix(packageName)); + velocityContext.put("packageName", packageName); + velocityContext.put("author", genTable.getFunctionAuthor()); + velocityContext.put("datetime", DateUtils.getDate()); + velocityContext.put("pkColumn", genTable.getPkColumn()); + velocityContext.put("importList", getImportList(genTable.getColumns())); + velocityContext.put("permissionPrefix", getPermissionPrefix(moduleName, businessName)); + velocityContext.put("columns", genTable.getColumns()); + velocityContext.put("table", genTable); + if (GenConstants.TPL_TREE.equals(tplCategory)) + { + setTreeVelocityContext(velocityContext, genTable); + } + return velocityContext; + } + + public static void setTreeVelocityContext(VelocityContext context, GenTable genTable) + { + String options = genTable.getOptions(); + JSONObject paramsObj = JSONObject.parseObject(options); + String treeCode = getTreecode(paramsObj); + String treeParentCode = getTreeParentCode(paramsObj); + String treeName = getTreeName(paramsObj); + + context.put("treeCode", treeCode); + context.put("treeParentCode", treeParentCode); + context.put("treeName", treeName); + context.put("expandColumn", getExpandColumn(genTable)); + if (paramsObj.containsKey(GenConstants.TREE_PARENT_CODE)) + { + context.put("tree_parent_code", paramsObj.getString(GenConstants.TREE_PARENT_CODE)); + } + } + + /** + * 获取模板信息 + * + * @return 模板列表 + */ + public static List getTemplateList(String tplCategory) + { + List templates = new ArrayList(); + templates.add("vm/java/domain.java.vm"); + templates.add("vm/java/mapper.java.vm"); + templates.add("vm/java/service.java.vm"); + templates.add("vm/java/serviceImpl.java.vm"); + templates.add("vm/java/controller.java.vm"); + templates.add("vm/xml/mapper.xml.vm"); + if (GenConstants.TPL_CRUD.equals(tplCategory)) + { + templates.add("vm/html/list.html.vm"); + } + else if (GenConstants.TPL_TREE.equals(tplCategory)) + { + templates.add("vm/html/tree.html.vm"); + templates.add("vm/html/list-tree.html.vm"); + } + templates.add("vm/html/add.html.vm"); + templates.add("vm/html/edit.html.vm"); + templates.add("vm/sql/sql.vm"); + return templates; + } + + /** + * 获取文件名 + */ + public static String getFileName(String template, GenTable genTable) + { + // 文件名称 + String fileName = ""; + // 包路径 + String packageName = genTable.getPackageName(); + // 模块名 + String moduleName = genTable.getModuleName(); + // 大写类名 + String className = genTable.getClassName(); + // 业务名称 + String businessName = genTable.getBusinessName(); + + String javaPath = PROJECT_PATH + "/" + StringUtils.replace(packageName, ".", "/"); + String mybatisPath = MYBATIS_PATH + "/" + moduleName; + String htmlPath = TEMPLATES_PATH + "/" + moduleName + "/" + businessName; + + if (template.contains("domain.java.vm")) + { + fileName = StringUtils.format("{}/domain/{}.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("list.html.vm")) + { + fileName = StringUtils.format("{}/{}.html", htmlPath, businessName); + } + else if (template.contains("list-tree.html.vm")) + { + fileName = StringUtils.format("{}/{}.html", htmlPath, businessName); + } + else if (template.contains("tree.html.vm")) + { + fileName = StringUtils.format("{}/tree.html", htmlPath); + } + else if (template.contains("add.html.vm")) + { + fileName = StringUtils.format("{}/add.html", htmlPath); + } + else if (template.contains("edit.html.vm")) + { + fileName = StringUtils.format("{}/edit.html", htmlPath); + } + else if (template.contains("sql.vm")) + { + fileName = businessName + "Menu.sql"; + } + return fileName; + } + + /** + * 获取项目文件路径 + * + * @return 路径 + */ + public static String getProjectPath() + { + String packageName = GenConfig.getPackageName(); + StringBuffer projectPath = new StringBuffer(); + projectPath.append("main/java/"); + projectPath.append(packageName.replace(".", "/")); + projectPath.append("/"); + return projectPath.toString(); + } + + /** + * 获取包前缀 + * + * @param packageName 包名称 + * @return 包前缀名称 + */ + public static String getPackagePrefix(String packageName) + { + int lastIndex = packageName.lastIndexOf("."); + String basePackage = StringUtils.substring(packageName, 0, lastIndex); + return basePackage; + } + + /** + * 根据列类型获取导入包 + * + * @param column 列集合 + * @return 返回需要导入的包列表 + */ + public static HashSet getImportList(List columns) + { + HashSet importList = new HashSet(); + for (GenTableColumn column : columns) + { + if (!column.isSuperColumn() && GenConstants.TYPE_DATE.equals(column.getJavaType())) + { + importList.add("java.util.Date"); + } + else if (!column.isSuperColumn() && GenConstants.TYPE_BIGDECIMAL.equals(column.getJavaType())) + { + importList.add("java.math.BigDecimal"); + } + } + return importList; + } + + /** + * 获取权限前缀 + * + * @param moduleName 模块名称 + * @param businessName 业务名称 + * @return 返回权限前缀 + */ + public static String getPermissionPrefix(String moduleName, String businessName) + { + return StringUtils.format("{}:{}", moduleName, businessName); + + } + + /** + * 获取树编码 + * + * @param options 生成其他选项 + * @return 树编码 + */ + public static String getTreecode(JSONObject paramsObj) + { + if (paramsObj.containsKey(GenConstants.TREE_CODE)) + { + return StringUtils.toCamelCase(paramsObj.getString(GenConstants.TREE_CODE)); + } + return ""; + } + + /** + * 获取树父编码 + * + * @param options 生成其他选项 + * @return 树父编码 + */ + public static String getTreeParentCode(JSONObject paramsObj) + { + if (paramsObj.containsKey(GenConstants.TREE_PARENT_CODE)) + { + return StringUtils.toCamelCase(paramsObj.getString(GenConstants.TREE_PARENT_CODE)); + } + return ""; + } + + /** + * 获取树名称 + * + * @param options 生成其他选项 + * @return 树名称 + */ + public static String getTreeName(JSONObject paramsObj) + { + if (paramsObj.containsKey(GenConstants.TREE_NAME)) + { + return StringUtils.toCamelCase(paramsObj.getString(GenConstants.TREE_NAME)); + } + return ""; + } + + /** + * 获取需要在哪一列上面显示展开按钮 + * + * @param genTable 业务表对象 + * @return 展开按钮列序号 + */ + public static int getExpandColumn(GenTable genTable) + { + String options = genTable.getOptions(); + JSONObject paramsObj = JSONObject.parseObject(options); + String treeName = paramsObj.getString(GenConstants.TREE_NAME); + int num = 0; + for (GenTableColumn column : genTable.getColumns()) + { + if (column.isList()) + { + num++; + String columnName = column.getColumnName(); + if (columnName.equals(treeName)) + { + break; + } + } + } + return num; + } +} \ No newline at end of file diff --git a/ruoyi-generator/src/main/resources/mapper/generator/GenMapper.xml b/ruoyi-generator/src/main/resources/mapper/generator/GenMapper.xml deleted file mode 100644 index 45bf4bd8..00000000 --- a/ruoyi-generator/src/main/resources/mapper/generator/GenMapper.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - - - - select table_name, table_comment, create_time, update_time from information_schema.tables - - - - - - - - - \ No newline at end of file diff --git a/ruoyi-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml b/ruoyi-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml new file mode 100644 index 00000000..11e742c7 --- /dev/null +++ b/ruoyi-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select column_id, table_id, column_name, column_comment, column_type, java_type, java_field, is_pk, is_increment, is_required, is_insert, is_edit, is_list, is_query, query_type, html_type, dict_type, sort, create_by, create_time, update_by, update_time from gen_table_column + + + + + + + + insert into gen_table_column ( + table_id, + column_name, + column_comment, + column_type, + java_type, + java_field, + is_pk, + is_increment, + is_required, + is_insert, + is_edit, + is_list, + is_query, + query_type, + html_type, + dict_type, + sort, + create_by, + create_time + )values( + #{tableId}, + #{columnName}, + #{columnComment}, + #{columnType}, + #{javaType}, + #{javaField}, + #{isPk}, + #{isIncrement}, + #{isRequired}, + #{isInsert}, + #{isEdit}, + #{isList}, + #{isQuery}, + #{queryType}, + #{htmlType}, + #{dictType}, + #{sort}, + #{createBy}, + sysdate() + ) + + + + update gen_table_column + + column_comment = #{columnComment}, + java_type = #{javaType}, + java_field = #{javaField}, + is_insert = #{isInsert}, + is_edit = #{isEdit}, + is_list = #{isList}, + is_query = #{isQuery}, + is_required = #{isRequired}, + query_type = #{queryType}, + html_type = #{htmlType}, + dict_type = #{dictType}, + sort = #{sort}, + update_by = #{updateBy}, + update_time = sysdate() + + where column_id = #{columnId} + + + + delete from gen_table_column where table_id in + + #{tableId} + + + + \ No newline at end of file diff --git a/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml b/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml new file mode 100644 index 00000000..7efbd0bc --- /dev/null +++ b/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml @@ -0,0 +1,167 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select table_id, table_name, table_comment, class_name, tpl_category, package_name, module_name, business_name, function_name, function_author, options, create_by, create_time, update_by, update_time, remark from gen_table + + + + + + + + + + + + + + + + insert into gen_table ( + table_name, + table_comment, + class_name, + tpl_category, + package_name, + module_name, + business_name, + function_name, + function_author, + remark, + create_by, + create_time + )values( + #{tableName}, + #{tableComment}, + #{className}, + #{tplCategory}, + #{packageName}, + #{moduleName}, + #{businessName}, + #{functionName}, + #{functionAuthor}, + #{remark}, + #{createBy}, + sysdate() + ) + + + + update gen_table + + table_name = #{tableName}, + table_comment = #{tableComment}, + class_name = #{className}, + function_author = #{functionAuthor}, + tpl_category = #{tplCategory}, + package_name = #{packageName}, + module_name = #{moduleName}, + business_name = #{businessName}, + function_name = #{functionName}, + options = #{options}, + update_by = #{updateBy}, + remark = #{remark}, + update_time = sysdate() + + where table_id = #{tableId} + + + + delete from gen_table where table_id in + + #{tableId} + + + + \ No newline at end of file diff --git a/ruoyi-generator/src/main/resources/templates/tool/gen/edit.html b/ruoyi-generator/src/main/resources/templates/tool/gen/edit.html new file mode 100644 index 00000000..cde416e9 --- /dev/null +++ b/ruoyi-generator/src/main/resources/templates/tool/gen/edit.html @@ -0,0 +1,483 @@ + + + + + + + + +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + diff --git a/ruoyi-generator/src/main/resources/templates/tool/gen/gen.html b/ruoyi-generator/src/main/resources/templates/tool/gen/gen.html index 3de386a4..0b8dd875 100644 --- a/ruoyi-generator/src/main/resources/templates/tool/gen/gen.html +++ b/ruoyi-generator/src/main/resources/templates/tool/gen/gen.html @@ -32,9 +32,18 @@
@@ -43,18 +52,30 @@
- \ No newline at end of file diff --git a/ruoyi-generator/src/main/resources/templates/tool/gen/importTable.html b/ruoyi-generator/src/main/resources/templates/tool/gen/importTable.html new file mode 100644 index 00000000..f4d388ca --- /dev/null +++ b/ruoyi-generator/src/main/resources/templates/tool/gen/importTable.html @@ -0,0 +1,96 @@ + + + + + + +
+
+
+
+
+ +
+
+
+ +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/ruoyi-generator/src/main/resources/vm/html/add.html.vm b/ruoyi-generator/src/main/resources/vm/html/add.html.vm index 3b9206b7..750b254b 100644 --- a/ruoyi-generator/src/main/resources/vm/html/add.html.vm +++ b/ruoyi-generator/src/main/resources/vm/html/add.html.vm @@ -1,61 +1,159 @@ - + +#foreach($column in $columns) +#if($column.insert && !$column.superColumn && !$column.pk && $column.htmlType == "datetime") + +#break +#end +#end
-
+ #foreach($column in $columns) -#if($column.columnName != $primaryKey.columnName) -#if(!${column.configInfo}) -
- -
- -
-
+#set($field=$column.javaField) +#if($column.insert && !$column.superColumn && !$column.pk) +#set($parentheseIndex=$column.columnComment.indexOf("(")) +#if($parentheseIndex != -1) +#set($comment=$column.columnComment.substring(0, $parentheseIndex)) #else -#if(${column.configInfo.type} == "dict") -
- -
- -
-
-#elseif(${column.configInfo.type} == "date") -
- -
- -
-
-#elseif(${column.configInfo.type} == "fk") +#set($comment=$column.columnComment) +#end +#set($dictType=$column.dictType) +#if("" != $treeParentCode && $column.javaField == $treeParentCode) +
+ +
+
+#set($BusinessName=$businessName.substring(0,1).toUpperCase() + ${businessName.substring(1)}) +#set($deptId = "${className}?.deptId") +#set($deptName = "${className}?.deptName") + + + +
+
+
+#elseif($column.htmlType == "input") +
+ +
+ +
+
+#elseif($column.htmlType == "select" && "" != $dictType) +
+ +
+ +
+
+#elseif($column.htmlType == "select" && $dictType) +
+ +
+ + 代码生成请选择字典属性 +
+
+#elseif($column.htmlType == "radio" && "" != $dictType) +
+ +
+
+ + +
+
+
+#elseif($column.htmlType == "radio" && $dictType) +
+ +
+
+ + +
+ 代码生成请选择字典属性 +
+
+#elseif($column.htmlType == "datetime") +
+ +
+
+ + +
+
+
+#elseif($column.htmlType == "textarea") +
+ +
+ +
+
#end #end +#end +
+
+ +#foreach($column in $columns) +#if($column.insert && !$column.superColumn && !$column.pk && $column.htmlType == "datetime") + +#break #end #end - -
-
+ var prefix = ctx + "${moduleName}/${businessName}" + $("#form-${businessName}-add").validate({ + focusCleanup: true + }); + + function submitHandler() { + if ($.validate.form()) { + $.operate.save(prefix + "/add", $('#form-${businessName}-add').serialize()); + } + } +#foreach($column in $columns) +#if($column.insert && !$column.superColumn && !$column.pk && $column.htmlType == "datetime") + + $("input[name='$column.javaField']").datetimepicker({ + format: "yyyy-mm-dd", + minView: "month", + autoclose: true + }); +#break +#end +#end +#if($table.tree) + + /*${functionName}-新增-选择父部门树*/ + function select${BusinessName}Tree() { + var options = { + title: '${functionName}选择', + width: "380", + url: prefix + "/select${BusinessName}Tree/" + $("#treeId").val(), + callBack: doSubmit + }; + $.modal.openOptions(options); + } + + function doSubmit(index, layero){ + var body = layer.getChildFrame('body', index); + $("#treeId").val(body.find('#treeId').val()); + $("#treeName").val(body.find('#treeName').val()); + layer.close(index); + } +#end + - + \ No newline at end of file diff --git a/ruoyi-generator/src/main/resources/vm/html/edit.html.vm b/ruoyi-generator/src/main/resources/vm/html/edit.html.vm index 16cdbeff..ebd155e7 100644 --- a/ruoyi-generator/src/main/resources/vm/html/edit.html.vm +++ b/ruoyi-generator/src/main/resources/vm/html/edit.html.vm @@ -1,62 +1,160 @@ - + +#foreach($column in $columns) +#if($column.edit && !$column.superColumn && !$column.pk && $column.htmlType == "datetime") + +#break +#end +#end
-
- + + #foreach($column in $columns) -#if($column.columnName != $primaryKey.columnName) -#if(!${column.configInfo}) -
- -
- -
-
+#if($column.edit && !$column.superColumn && !$column.pk) +#set($parentheseIndex=$column.columnComment.indexOf("(")) +#if($parentheseIndex != -1) +#set($comment=$column.columnComment.substring(0, $parentheseIndex)) #else -#if(${column.configInfo.type} == "dict") -
- -
- -
-
-#elseif(${column.configInfo.type} == "date") -
- -
- -
-
-#elseif(${column.configInfo.type} == "fk") +#set($comment=$column.columnComment) +#end +#set($field=$column.javaField) +#set($dictType=$column.dictType) +#if("" != $treeParentCode && $column.javaField == $treeParentCode) +
+ +
+
+#set($BusinessName=$businessName.substring(0,1).toUpperCase() + ${businessName.substring(1)}) +#set($deptId = "${className}?.deptId") +#set($deptName = "${className}?.deptName") + + + +
+
+
+#elseif($column.htmlType == "input") +
+ +
+ +
+
+#elseif($column.htmlType == "select" && "" != $dictType) +
+ +
+ +
+
+#elseif($column.htmlType == "select" && $dictType) +
+ +
+ + 代码生成请选择字典属性 +
+
+#elseif($column.htmlType == "radio" && "" != $dictType) +
+ +
+
+ + +
+
+
+#elseif($column.htmlType == "radio" && $dictType) +
+ +
+
+ + +
+ 代码生成请选择字典属性 +
+
+#elseif($column.htmlType == "datetime") +
+ +
+
+ + +
+
+
+#elseif($column.htmlType == "textarea") +
+ +
+ +
+
#end #end #end -#end -
+
-
+ +#foreach($column in $columns) +#if($column.edit && !$column.superColumn && !$column.pk && $column.htmlType == "datetime") + +#break +#end +#end + var prefix = ctx + "${moduleName}/${businessName}"; + $("#form-${businessName}-edit").validate({ + focusCleanup: true + }); + + function submitHandler() { + if ($.validate.form()) { + $.operate.save(prefix + "/edit", $('#form-${businessName}-edit').serialize()); + } + } +#foreach($column in $columns) +#if($column.edit && !$column.superColumn && !$column.pk && $column.htmlType == "datetime") + + $("input[name='$column.javaField']").datetimepicker({ + format: "yyyy-mm-dd", + minView: "month", + autoclose: true + }); +#break +#end +#end +#if($table.tree) + + /*${functionName}-新增-选择父部门树*/ + function select${BusinessName}Tree() { + var options = { + title: '${functionName}选择', + width: "380", + url: prefix + "/select${BusinessName}Tree/" + $("#treeId").val(), + callBack: doSubmit + }; + $.modal.openOptions(options); + } + + function doSubmit(index, layero){ + var body = layer.getChildFrame('body', index); + $("#treeId").val(body.find('#treeId').val()); + $("#treeName").val(body.find('#treeName').val()); + layer.close(index); + } +#end + - + \ No newline at end of file diff --git a/ruoyi-generator/src/main/resources/vm/html/list-tree.html.vm b/ruoyi-generator/src/main/resources/vm/html/list-tree.html.vm new file mode 100644 index 00000000..2e05fe61 --- /dev/null +++ b/ruoyi-generator/src/main/resources/vm/html/list-tree.html.vm @@ -0,0 +1,150 @@ + + + + + + +
+
+
+
+
+
    +#foreach($column in $columns) +#if($column.query) +#set($dictType=$column.dictType) +#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) +#set($parentheseIndex=$column.columnComment.indexOf("(")) +#if($parentheseIndex != -1) +#set($comment=$column.columnComment.substring(0, $parentheseIndex)) +#else +#set($comment=$column.columnComment) +#end +#if($column.htmlType == "input") +
  • +

    ${comment}:

    + +
  • +#elseif($column.htmlType == "select" || $column.htmlType == "radio" && "" != $dictType) +
  • +

    ${comment}:

    + +
  • +#elseif($column.htmlType == "select" || $column.htmlType == "radio" && $dictType) +
  • +

    ${comment}:

    + +
  • +#elseif($column.htmlType == "datetime") +
  • +

    ${comment}:

    + + - + +
  • +#end +#end +#end +
  • +  搜索 +  重置 +
  • +
+
+
+
+ + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/ruoyi-generator/src/main/resources/vm/html/list.html.vm b/ruoyi-generator/src/main/resources/vm/html/list.html.vm index 81386358..b124d961 100644 --- a/ruoyi-generator/src/main/resources/vm/html/list.html.vm +++ b/ruoyi-generator/src/main/resources/vm/html/list.html.vm @@ -1,80 +1,93 @@ - +
-
-
-
-
-
    +
    +
    + +
    +
      #foreach($column in $columns) -#if($column.columnName != $primaryKey.columnName) -#if(!${column.configInfo}) -
    • - ${column.columnComment}: -
    • +#if($column.query) +#set($dictType=$column.dictType) +#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) +#set($parentheseIndex=$column.columnComment.indexOf("(")) +#if($parentheseIndex != -1) +#set($comment=$column.columnComment.substring(0, $parentheseIndex)) +#else +#set($comment=$column.columnComment) +#end +#if($column.htmlType == "input") +
    • +

      ${comment}:

      + +
    • +#elseif($column.htmlType == "select" || $column.htmlType == "radio" && "" != $dictType) +
    • +

      ${comment}:

      + +
    • +#elseif($column.htmlType == "select" || $column.htmlType == "radio" && $dictType) +
    • +

      ${comment}:

      + +
    • +#elseif($column.htmlType == "datetime") +
    • +

      ${comment}:

      + + - + +
    • +#end +#end +#end +
    • +  搜索 +  重置 +
    • +
    +
    + +
    -#else -#if(${column.configInfo.type} == "dict") -
  • - ${column.columnComment}: -
  • -#elseif(${column.configInfo.type} == "date") -
  • - - - - - -
  • -#elseif(${column.configInfo.type} == "fk") -#end -#end -#end -#end -
  • -  搜索 -  重置 -
  • -
-
- -
- - -
-
-
-
-
-
+ +
+
+
+
+
+ + + \ No newline at end of file diff --git a/ruoyi-generator/src/main/resources/vm/java/Controller.java.vm b/ruoyi-generator/src/main/resources/vm/java/Controller.java.vm index a52c1b9a..ccb95db8 100644 --- a/ruoyi-generator/src/main/resources/vm/java/Controller.java.vm +++ b/ruoyi-generator/src/main/resources/vm/java/Controller.java.vm @@ -12,116 +12,189 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.enums.BusinessType; -import ${package}.domain.${className}; -import ${package}.service.I${className}Service; +import ${packageName}.domain.${ClassName}; +import ${packageName}.service.I${ClassName}Service; import com.ruoyi.common.core.controller.BaseController; -import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.poi.ExcelUtil; +#if($table.crud) +import com.ruoyi.common.core.page.TableDataInfo; +#elseif($table.tree) +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.core.domain.Ztree; +#end /** - * ${tableComment} 信息操作处理 + * ${functionName}Controller * * @author ${author} * @date ${datetime} */ @Controller -@RequestMapping("/${moduleName}/${classname}") -public class ${className}Controller extends BaseController +@RequestMapping("/${moduleName}/${businessName}") +public class ${ClassName}Controller extends BaseController { - private String prefix = "${moduleName}/${classname}"; - - @Autowired - private I${className}Service ${classname}Service; - - @RequiresPermissions("${moduleName}:${classname}:view") - @GetMapping() - public String ${classname}() - { - return prefix + "/${classname}"; - } - - /** - * 查询${tableComment}列表 - */ - @RequiresPermissions("${moduleName}:${classname}:list") - @PostMapping("/list") - @ResponseBody - public TableDataInfo list(${className} ${classname}) - { - startPage(); - List<${className}> list = ${classname}Service.select${className}List(${classname}); - return getDataTable(list); - } - - - /** - * 导出${tableComment}列表 - */ - @RequiresPermissions("${moduleName}:${classname}:export") + private String prefix = "${moduleName}/${businessName}"; + + @Autowired + private I${ClassName}Service ${className}Service; + + @RequiresPermissions("${permissionPrefix}:view") + @GetMapping() + public String ${businessName}() + { + return prefix + "/${businessName}"; + } + +#if($table.tree) + /** + * 查询${functionName}树列表 + */ + @RequiresPermissions("${permissionPrefix}:list") + @PostMapping("/list") + @ResponseBody + public List<${ClassName}> list(${ClassName} ${className}) + { + List<${ClassName}> list = ${className}Service.select${ClassName}List(${className}); + return list; + } +#elseif($table.crud) + /** + * 查询${functionName}列表 + */ + @RequiresPermissions("${permissionPrefix}:list") + @PostMapping("/list") + @ResponseBody + public TableDataInfo list(${ClassName} ${className}) + { + startPage(); + List<${ClassName}> list = ${className}Service.select${ClassName}List(${className}); + return getDataTable(list); + } +#end + + /** + * 导出${functionName}列表 + */ + @RequiresPermissions("${permissionPrefix}:export") @PostMapping("/export") @ResponseBody - public AjaxResult export(${className} ${classname}) + 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}"); + List<${ClassName}> list = ${className}Service.select${ClassName}List(${className}); + ExcelUtil<${ClassName}> util = new ExcelUtil<${ClassName}>(${ClassName}.class); + return util.exportExcel(list, "${businessName}"); } - - /** - * 新增${tableComment} - */ - @GetMapping("/add") - public String add() - { - return prefix + "/add"; - } - - /** - * 新增保存${tableComment} - */ - @RequiresPermissions("${moduleName}:${classname}:add") - @Log(title = "${tableComment}", businessType = BusinessType.INSERT) - @PostMapping("/add") - @ResponseBody - public AjaxResult addSave(${className} ${classname}) - { - return toAjax(${classname}Service.insert${className}(${classname})); - } - /** - * 修改${tableComment} - */ - @GetMapping("/edit/{${primaryKey.attrname}}") - public String edit(@PathVariable("${primaryKey.attrname}") ${primaryKey.attrType} ${primaryKey.attrname}, ModelMap mmap) - { - ${className} ${classname} = ${classname}Service.select${className}ById(${primaryKey.attrname}); - mmap.put("${classname}", ${classname}); - return prefix + "/edit"; - } - - /** - * 修改保存${tableComment} - */ - @RequiresPermissions("${moduleName}:${classname}:edit") - @Log(title = "${tableComment}", businessType = BusinessType.UPDATE) - @PostMapping("/edit") - @ResponseBody - public AjaxResult editSave(${className} ${classname}) - { - return toAjax(${classname}Service.update${className}(${classname})); - } - - /** - * 删除${tableComment} - */ - @RequiresPermissions("${moduleName}:${classname}:remove") - @Log(title = "${tableComment}", businessType = BusinessType.DELETE) - @PostMapping( "/remove") - @ResponseBody - public AjaxResult remove(String ids) - { - return toAjax(${classname}Service.delete${className}ByIds(ids)); - } - +#if($table.crud) + /** + * 新增${functionName} + */ + @GetMapping("/add") + public String add() + { + return prefix + "/add"; + } +#elseif($table.tree) + /** + * 新增${functionName} + */ + @GetMapping(value = { "/add/{${pkColumn.javaField}}", "/add/" }) + public String add(@PathVariable(value = "${pkColumn.javaField}", required = false) Long ${pkColumn.javaField}, ModelMap mmap) + { + if (StringUtils.isNotNull(${pkColumn.javaField})) + { + mmap.put("${className}", ${className}Service.select${ClassName}ById(${pkColumn.javaField})); + } + return prefix + "/add"; + } +#end + + /** + * 新增保存${functionName} + */ + @RequiresPermissions("${permissionPrefix}:add") + @Log(title = "${functionName}", businessType = BusinessType.INSERT) + @PostMapping("/add") + @ResponseBody + public AjaxResult addSave(${ClassName} ${className}) + { + return toAjax(${className}Service.insert${ClassName}(${className})); + } + + /** + * 修改${functionName} + */ + @GetMapping("/edit/{${pkColumn.javaField}}") + public String edit(@PathVariable("${pkColumn.javaField}") ${pkColumn.javaType} ${pkColumn.javaField}, ModelMap mmap) + { + ${ClassName} ${className} = ${className}Service.select${ClassName}ById(${pkColumn.javaField}); + mmap.put("${className}", ${className}); + return prefix + "/edit"; + } + + /** + * 修改保存${functionName} + */ + @RequiresPermissions("${permissionPrefix}:edit") + @Log(title = "${functionName}", businessType = BusinessType.UPDATE) + @PostMapping("/edit") + @ResponseBody + public AjaxResult editSave(${ClassName} ${className}) + { + return toAjax(${className}Service.update${ClassName}(${className})); + } + +#if($table.crud) + /** + * 删除${functionName} + */ + @RequiresPermissions("${permissionPrefix}:remove") + @Log(title = "${functionName}", businessType = BusinessType.DELETE) + @PostMapping( "/remove") + @ResponseBody + public AjaxResult remove(String ids) + { + return toAjax(${className}Service.delete${ClassName}ByIds(ids)); + } +#elseif($table.tree) + /** + * 删除 + */ + @RequiresPermissions("${permissionPrefix}:remove") + @Log(title = "${functionName}", businessType = BusinessType.DELETE) + @GetMapping("/remove/{${pkColumn.javaField}}") + @ResponseBody + public AjaxResult remove(@PathVariable("${pkColumn.javaField}") ${pkColumn.javaType} ${pkColumn.javaField}) + { + return toAjax(${className}Service.delete${ClassName}ById(${pkColumn.javaField})); + } +#end +#if($table.tree) + + /** + * 选择${functionName}树 + */ +#set($BusinessName=$businessName.substring(0,1).toUpperCase() + ${businessName.substring(1)}) + @GetMapping(value = { "/select${BusinessName}Tree/{${pkColumn.javaField}}", "/select${BusinessName}Tree/" }) + public String select${BusinessName}Tree(@PathVariable(value = "${pkColumn.javaField}", required = false) Long ${pkColumn.javaField}, ModelMap mmap) + { + if (StringUtils.isNotNull(${pkColumn.javaField})) + { + mmap.put("${className}", ${className}Service.select${ClassName}ById(${pkColumn.javaField})); + } + return prefix + "/tree"; + } + + /** + * 加载${functionName}树列表 + */ + @GetMapping("/treeData") + @ResponseBody + public List treeData() + { + List ztrees = ${className}Service.select${ClassName}Tree(); + return ztrees; + } +#end } diff --git a/ruoyi-generator/src/main/resources/vm/java/Mapper.java.vm b/ruoyi-generator/src/main/resources/vm/java/Mapper.java.vm index 076e413d..a92a8f6d 100644 --- a/ruoyi-generator/src/main/resources/vm/java/Mapper.java.vm +++ b/ruoyi-generator/src/main/resources/vm/java/Mapper.java.vm @@ -1,62 +1,61 @@ -package ${package}.mapper; +package ${packageName}.mapper; -import ${package}.domain.${className}; -import java.util.List; +import ${packageName}.domain.${ClassName}; +import java.util.List; /** - * ${tableComment} 数据层 + * ${functionName}Mapper接口 * * @author ${author} * @date ${datetime} */ -public interface ${className}Mapper +public interface ${ClassName}Mapper { - /** - * 查询${tableComment}信息 + /** + * 查询${functionName} * - * @param ${primaryKey.attrname} ${tableComment}ID - * @return ${tableComment}信息 + * @param ${pkColumn.javaField} ${functionName}ID + * @return ${functionName} */ - public ${className} select${className}ById(${primaryKey.attrType} ${primaryKey.attrname}); - - /** - * 查询${tableComment}列表 + public ${ClassName} select${ClassName}ById(${pkColumn.javaType} ${pkColumn.javaField}); + + /** + * 查询${functionName}列表 * - * @param ${classname} ${tableComment}信息 - * @return ${tableComment}集合 + * @param ${className} ${functionName} + * @return ${functionName}集合 */ - public List<${className}> select${className}List(${className} ${classname}); - - /** - * 新增${tableComment} + public List<${ClassName}> select${ClassName}List(${ClassName} ${className}); + + /** + * 新增${functionName} * - * @param ${classname} ${tableComment}信息 + * @param ${className} ${functionName} * @return 结果 */ - public int insert${className}(${className} ${classname}); - - /** - * 修改${tableComment} + public int insert${ClassName}(${ClassName} ${className}); + + /** + * 修改${functionName} * - * @param ${classname} ${tableComment}信息 + * @param ${className} ${functionName} * @return 结果 */ - public int update${className}(${className} ${classname}); - - /** - * 删除${tableComment} + public int update${ClassName}(${ClassName} ${className}); + + /** + * 删除${functionName} * - * @param ${primaryKey.attrname} ${tableComment}ID + * @param ${pkColumn.javaField} ${functionName}ID * @return 结果 */ - public int delete${className}ById(${primaryKey.attrType} ${primaryKey.attrname}); - - /** - * 批量删除${tableComment} + public int delete${ClassName}ById(${pkColumn.javaType} ${pkColumn.javaField}); + + /** + * 批量删除${functionName} * - * @param ${primaryKey.attrname}s 需要删除的数据ID + * @param ${pkColumn.javaField}s 需要删除的数据ID * @return 结果 */ - public int delete${className}ByIds(String[] ${primaryKey.attrname}s); - -} \ No newline at end of file + public int delete${ClassName}ByIds(String[] ${pkColumn.javaField}s); +} diff --git a/ruoyi-generator/src/main/resources/vm/java/Service.java.vm b/ruoyi-generator/src/main/resources/vm/java/Service.java.vm index 7276e6b9..1668c246 100644 --- a/ruoyi-generator/src/main/resources/vm/java/Service.java.vm +++ b/ruoyi-generator/src/main/resources/vm/java/Service.java.vm @@ -1,54 +1,73 @@ -package ${package}.service; +package ${packageName}.service; -import ${package}.domain.${className}; +import ${packageName}.domain.${ClassName}; import java.util.List; +#if($table.tree) +import com.ruoyi.common.core.domain.Ztree; +#end /** - * ${tableComment} 服务层 + * ${functionName}Service接口 * * @author ${author} * @date ${datetime} */ -public interface I${className}Service +public interface I${ClassName}Service { - /** - * 查询${tableComment}信息 + /** + * 查询${functionName} * - * @param ${primaryKey.attrname} ${tableComment}ID - * @return ${tableComment}信息 + * @param ${pkColumn.javaField} ${functionName}ID + * @return ${functionName} */ - public ${className} select${className}ById(${primaryKey.attrType} ${primaryKey.attrname}); - - /** - * 查询${tableComment}列表 + public ${ClassName} select${ClassName}ById(${pkColumn.javaType} ${pkColumn.javaField}); + + /** + * 查询${functionName}列表 * - * @param ${classname} ${tableComment}信息 - * @return ${tableComment}集合 + * @param ${className} ${functionName} + * @return ${functionName}集合 */ - public List<${className}> select${className}List(${className} ${classname}); - - /** - * 新增${tableComment} + public List<${ClassName}> select${ClassName}List(${ClassName} ${className}); + + /** + * 新增${functionName} * - * @param ${classname} ${tableComment}信息 + * @param ${className} ${functionName} * @return 结果 */ - public int insert${className}(${className} ${classname}); - - /** - * 修改${tableComment} + public int insert${ClassName}(${ClassName} ${className}); + + /** + * 修改${functionName} * - * @param ${classname} ${tableComment}信息 + * @param ${className} ${functionName} * @return 结果 */ - public int update${className}(${className} ${classname}); - - /** - * 删除${tableComment}信息 + public int update${ClassName}(${ClassName} ${className}); + + /** + * 批量删除${functionName} * * @param ids 需要删除的数据ID * @return 结果 */ - public int delete${className}ByIds(String ids); - + public int delete${ClassName}ByIds(String ids); + + /** + * 删除${functionName}信息 + * + * @param ${pkColumn.javaField} ${functionName}ID + * @return 结果 + */ + public int delete${ClassName}ById(${pkColumn.javaType} ${pkColumn.javaField}); +#if($table.tree) + + /** + * 查询${functionName}树列表 + * + * @return 所有${functionName}信息 + */ + public List select${ClassName}Tree(); +#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 c0df374b..810d3562 100644 --- a/ruoyi-generator/src/main/resources/vm/java/ServiceImpl.java.vm +++ b/ruoyi-generator/src/main/resources/vm/java/ServiceImpl.java.vm @@ -1,83 +1,140 @@ -package ${package}.service.impl; +package ${packageName}.service.impl; import java.util.List; +#if($table.tree) +import java.util.ArrayList; +import com.ruoyi.common.core.domain.Ztree; +#end +#foreach ($column in $columns) +#if($column.javaField == 'createTime' || $column.javaField == 'updateTime') +import com.ruoyi.common.utils.DateUtils; +#break +#end +#end import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import ${package}.mapper.${className}Mapper; -import ${package}.domain.${className}; -import ${package}.service.I${className}Service; +import ${packageName}.mapper.${ClassName}Mapper; +import ${packageName}.domain.${ClassName}; +import ${packageName}.service.I${ClassName}Service; import com.ruoyi.common.core.text.Convert; /** - * ${tableComment} 服务层实现 + * ${functionName}Service业务层处理 * * @author ${author} * @date ${datetime} */ @Service -public class ${className}ServiceImpl implements I${className}Service +public class ${ClassName}ServiceImpl implements I${ClassName}Service { - @Autowired - private ${className}Mapper ${classname}Mapper; + @Autowired + private ${ClassName}Mapper ${className}Mapper; - /** - * 查询${tableComment}信息 + /** + * 查询${functionName} * - * @param ${primaryKey.attrname} ${tableComment}ID - * @return ${tableComment}信息 + * @param ${pkColumn.javaField} ${functionName}ID + * @return ${functionName} */ @Override - public ${className} select${className}ById(${primaryKey.attrType} ${primaryKey.attrname}) - { - return ${classname}Mapper.select${className}ById(${primaryKey.attrname}); - } - - /** - * 查询${tableComment}列表 - * - * @param ${classname} ${tableComment}信息 - * @return ${tableComment}集合 - */ - @Override - public List<${className}> select${className}List(${className} ${classname}) - { - return ${classname}Mapper.select${className}List(${classname}); - } - - /** - * 新增${tableComment} - * - * @param ${classname} ${tableComment}信息 - * @return 结果 - */ - @Override - public int insert${className}(${className} ${classname}) - { - return ${classname}Mapper.insert${className}(${classname}); - } - - /** - * 修改${tableComment} - * - * @param ${classname} ${tableComment}信息 - * @return 结果 - */ - @Override - public int update${className}(${className} ${classname}) - { - return ${classname}Mapper.update${className}(${classname}); - } + public ${ClassName} select${ClassName}ById(${pkColumn.javaType} ${pkColumn.javaField}) + { + return ${className}Mapper.select${ClassName}ById(${pkColumn.javaField}); + } - /** - * 删除${tableComment}对象 + /** + * 查询${functionName}列表 + * + * @param ${className} ${functionName} + * @return ${functionName} + */ + @Override + public List<${ClassName}> select${ClassName}List(${ClassName} ${className}) + { + return ${className}Mapper.select${ClassName}List(${className}); + } + + /** + * 新增${functionName} + * + * @param ${className} ${functionName} + * @return 结果 + */ + @Override + public int insert${ClassName}(${ClassName} ${className}) + { +#foreach ($column in $columns) +#if($column.javaField == 'createTime') + ${className}.setCreateTime(DateUtils.getNowDate()); +#end +#end + return ${className}Mapper.insert${ClassName}(${className}); + } + + /** + * 修改${functionName} + * + * @param ${className} ${functionName} + * @return 结果 + */ + @Override + public int update${ClassName}(${ClassName} ${className}) + { +#foreach ($column in $columns) +#if($column.javaField == 'createTime') + ${className}.setUpdateTime(DateUtils.getNowDate()); +#end +#end + return ${className}Mapper.update${ClassName}(${className}); + } + + /** + * 删除${functionName}对象 * * @param ids 需要删除的数据ID * @return 结果 */ - @Override - public int delete${className}ByIds(String ids) - { - return ${classname}Mapper.delete${className}ByIds(Convert.toStrArray(ids)); - } - + @Override + public int delete${ClassName}ByIds(String ids) + { + return ${className}Mapper.delete${ClassName}ByIds(Convert.toStrArray(ids)); + } + + /** + * 删除${functionName}信息 + * + * @param ${pkColumn.javaField} ${functionName}ID + * @return 结果 + */ + public int delete${ClassName}ById(${pkColumn.javaType} ${pkColumn.javaField}) + { + return ${className}Mapper.delete${ClassName}ById(${pkColumn.javaField}); + } +#if($table.tree) + + /** + * 查询${functionName}树列表 + * + * @return 所有${functionName}信息 + */ + @Override + public List select${ClassName}Tree() + { + List<${ClassName}> ${className}List = ${className}Mapper.select${ClassName}List(new ${ClassName}()); + List ztrees = new ArrayList(); + for (${ClassName} ${className} : ${className}List) + { + Ztree ztree = new Ztree(); +#set($TreeCode=$treeCode.substring(0,1).toUpperCase() + ${treeCode.substring(1)}) +#set($TreeParentCode=$treeParentCode.substring(0,1).toUpperCase() + ${treeParentCode.substring(1)}) +#set($TreeName=$treeName.substring(0,1).toUpperCase() + ${treeName.substring(1)}) + ztree.setId(${className}.get${TreeCode}()); + ztree.setpId(${className}.get${TreeParentCode}()); + ztree.setName(${className}.get${TreeName}()); + ztree.setTitle(${className}.get${TreeName}()); + ztrees.add(ztree); + } + return ztrees; + } +#end } diff --git a/ruoyi-generator/src/main/resources/vm/java/domain.java.vm b/ruoyi-generator/src/main/resources/vm/java/domain.java.vm index 467a2e26..0edd3e38 100644 --- a/ruoyi-generator/src/main/resources/vm/java/domain.java.vm +++ b/ruoyi-generator/src/main/resources/vm/java/domain.java.vm @@ -1,56 +1,75 @@ -package ${package}.domain; +package ${packageName}.domain; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +#if($table.crud) import com.ruoyi.common.core.domain.BaseEntity; -#foreach ($column in $columns) -#if($column.attrType == 'Date' && ($column.attrname != 'createBy' && $column.attrname != 'createTime' && $column.attrname != 'updateBy' && $column.attrname != 'updateTime' && $column.attrname != 'remark')) -import java.util.Date; -#break -#end -#end -#foreach ($column in $columns) -#if($column.attrType == 'BigDecimal') -import java.math.BigDecimal; -#break +#elseif($table.tree) +import com.ruoyi.common.core.domain.TreeEntity; #end +#foreach ($import in $importList) +import ${import}; #end /** - * ${tableComment}表 ${tableName} + * ${functionName}对象 ${tableName} * * @author ${author} * @date ${datetime} */ -public class ${className} extends BaseEntity +#if($table.crud) +#set($Entity="BaseEntity") +#elseif($table.tree) +#set($Entity="TreeEntity") +#end +public class ${ClassName} extends ${Entity} { - private static final long serialVersionUID = 1L; - -#foreach ($column in $columns) -#if($column.attrname != 'createBy' && $column.attrname != 'createTime' && $column.attrname != 'updateBy' && $column.attrname != 'updateTime' && $column.attrname != 'remark') - /** $column.columnComment */ - private $column.attrType $column.attrname; -#end -#end + private static final long serialVersionUID = 1L; #foreach ($column in $columns) -#if($column.attrname != 'createBy' && $column.attrname != 'createTime' && $column.attrname != 'updateBy' && $column.attrname != 'updateTime' && $column.attrname != 'remark') - public void set${column.attrName}($column.attrType $column.attrname) - { - this.$column.attrname = $column.attrname; - } +#if(!$column.superColumn) + /** $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') + @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd") +#else + @Excel(name = "${comment}") +#end +#end + private $column.javaType $column.javaField; - public $column.attrType get${column.attrName}() - { - return $column.attrname; - } +#end +#end +#foreach ($column in $columns) +#if(!$column.superColumn) +#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) + 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 $columns) - .append("${column.attrname}", get${column.attrName}()) +#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) + .append("${column.javaField}", get${AttrName}()) #end .toString(); } diff --git a/ruoyi-generator/src/main/resources/vm/sql/sql.vm b/ruoyi-generator/src/main/resources/vm/sql/sql.vm index baf93dcb..4b85bdbb 100644 --- a/ruoyi-generator/src/main/resources/vm/sql/sql.vm +++ b/ruoyi-generator/src/main/resources/vm/sql/sql.vm @@ -1,19 +1,19 @@ -- 菜单 SQL insert into sys_menu (menu_name, parent_id, order_num, url,menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark) -values('${tableComment}', '3', '1', '/${moduleName}/${classname}', 'C', '0', '${moduleName}:${classname}:view', '#', 'admin', '2018-03-01', 'ry', '2018-03-01', '${tableComment}菜单'); +values('${functionName}', '3', '1', '/${moduleName}/${businessName}', 'C', '0', '${permissionPrefix}:view', '#', 'admin', '2018-03-01', 'ry', '2018-03-01', '${functionName}菜单'); -- 按钮父菜单ID SELECT @parentId := LAST_INSERT_ID(); -- 按钮 SQL insert into sys_menu (menu_name, parent_id, order_num, url,menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark) -values('${tableComment}查询', @parentId, '1', '#', 'F', '0', '${moduleName}:${classname}:list', '#', 'admin', '2018-03-01', 'ry', '2018-03-01', ''); +values('${functionName}查询', @parentId, '1', '#', 'F', '0', '${permissionPrefix}:list', '#', 'admin', '2018-03-01', 'ry', '2018-03-01', ''); insert into sys_menu (menu_name, parent_id, order_num, url,menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark) -values('${tableComment}新增', @parentId, '2', '#', 'F', '0', '${moduleName}:${classname}:add', '#', 'admin', '2018-03-01', 'ry', '2018-03-01', ''); +values('${functionName}新增', @parentId, '2', '#', 'F', '0', '${permissionPrefix}:add', '#', 'admin', '2018-03-01', 'ry', '2018-03-01', ''); insert into sys_menu (menu_name, parent_id, order_num, url,menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark) -values('${tableComment}修改', @parentId, '3', '#', 'F', '0', '${moduleName}:${classname}:edit', '#', 'admin', '2018-03-01', 'ry', '2018-03-01', ''); +values('${functionName}修改', @parentId, '3', '#', 'F', '0', '${permissionPrefix}:edit', '#', 'admin', '2018-03-01', 'ry', '2018-03-01', ''); insert into sys_menu (menu_name, parent_id, order_num, url,menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark) -values('${tableComment}删除', @parentId, '4', '#', 'F', '0', '${moduleName}:${classname}:remove', '#', 'admin', '2018-03-01', 'ry', '2018-03-01', ''); +values('${functionName}删除', @parentId, '4', '#', 'F', '0', '${permissionPrefix}:remove', '#', 'admin', '2018-03-01', 'ry', '2018-03-01', ''); 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 c87911e4..264baf74 100644 --- a/ruoyi-generator/src/main/resources/vm/xml/Mapper.xml.vm +++ b/ruoyi-generator/src/main/resources/vm/xml/Mapper.xml.vm @@ -2,70 +2,106 @@ - + - + #foreach ($column in $columns) - + +#end +#if($table.tree) + #end - - + + select#foreach($column in $columns) $column.columnName#if($velocityCount != $columns.size()),#end#end from ${tableName} - - + #foreach($column in $columns) - and $column.columnName = #{$column.attrname} - #end +#set($queryType=$column.queryType) +#set($javaField=$column.javaField) +#set($javaType=$column.javaType) +#set($columnName=$column.columnName) +#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) +#if($column.query) +#if($column.queryType == "EQ") + and $columnName = #{$javaField} +#elseif($queryType == "NE") + and $columnName != #{$javaField} +#elseif(\$queryType == "GT") + and $columnName > #{$javaField} +#elseif(\$queryType == "GTE") + and $columnName >= #{$javaField} +#elseif(\$queryType == "LT") + and $columnName < #{$javaField} +#elseif(\$queryType == "LTE") + and $columnName <= #{$javaField} +#elseif($queryType == "LIKE") + and $columnName like concat('%', #{$javaField}, '%') +#elseif($queryType == "BETWEEN") + and $columnName between #{params.begin$AttrName} and #{params.end$AttrName} +#end +#end +#end +#if($table.tree) + order by ${tree_parent_code} +#end - +#if($table.crud) + + where ${pkColumn.columnName} = #{${pkColumn.javaField}} +#elseif($table.tree) + select#foreach($column in $columns) t.$column.columnName,#end p.dept_name as parent_name + from ${tableName} t + left join ${tableName} p on p.${pkColumn.columnName} = t.${tree_parent_code} + where t.${pkColumn.columnName} = #{${pkColumn.javaField}} +#end - + insert into ${tableName} - + #foreach($column in $columns) -#if($column.columnName != $primaryKey.columnName || $primaryKey.extra != 'auto_increment') - $column.columnName, +#if($column.columnName != $pkColumn.columnName || !$pkColumn.increment) + $column.columnName, #end #end #foreach($column in $columns) -#if($column.columnName != $primaryKey.columnName || $primaryKey.extra != 'auto_increment') - #{$column.attrname}, -#end +#if($column.columnName != $pkColumn.columnName || !$pkColumn.increment) + #{$column.javaField}, +#end #end - - + + update ${tableName} #foreach($column in $columns) -#if($column.columnName != $primaryKey.columnName) - $column.columnName = #{$column.attrname}, +#if($column.columnName != $pkColumn.columnName) + $column.columnName = #{$column.javaField}, #end #end - where ${primaryKey.columnName} = #{${primaryKey.attrname}} + where ${pkColumn.columnName} = #{${pkColumn.javaField}} - - delete from ${tableName} where ${primaryKey.columnName} = #{${primaryKey.attrname}} + + delete from ${tableName} where ${pkColumn.columnName} = #{${pkColumn.javaField}} - - - delete from ${tableName} where ${primaryKey.columnName} in - - #{${primaryKey.attrname}} + + + delete from ${tableName} where ${pkColumn.columnName} in + + #{${pkColumn.javaField}} diff --git a/ruoyi-quartz/pom.xml b/ruoyi-quartz/pom.xml index 4ec46b9a..c2aefe81 100644 --- a/ruoyi-quartz/pom.xml +++ b/ruoyi-quartz/pom.xml @@ -5,7 +5,7 @@ ruoyi com.ruoyi - 3.4 + 4.0.0 4.0.0 diff --git a/ruoyi-system/pom.xml b/ruoyi-system/pom.xml index a44fa2fd..883623de 100644 --- a/ruoyi-system/pom.xml +++ b/ruoyi-system/pom.xml @@ -5,7 +5,7 @@ ruoyi com.ruoyi - 3.4 + 4.0.0 4.0.0 diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictTypeMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictTypeMapper.java index b2beb212..9986d1e0 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictTypeMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictTypeMapper.java @@ -35,6 +35,14 @@ public interface SysDictTypeMapper */ public SysDictType selectDictTypeById(Long dictId); + /** + * 根据字典类型查询信息 + * + * @param dictType 字典类型 + * @return 字典类型 + */ + public SysDictType selectDictTypeByType(String dictType); + /** * 通过字典ID删除字典信息 * diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java index 0039de63..dc22381d 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java @@ -1,6 +1,7 @@ package com.ruoyi.system.service; import java.util.List; +import com.ruoyi.common.core.domain.Ztree; import com.ruoyi.system.domain.SysDictType; /** @@ -33,6 +34,14 @@ public interface ISysDictTypeService */ public SysDictType selectDictTypeById(Long dictId); + /** + * 根据字典类型查询信息 + * + * @param dictType 字典类型 + * @return 字典类型 + */ + public SysDictType selectDictTypeByType(String dictType); + /** * 通过字典ID删除字典信息 * @@ -73,4 +82,12 @@ public interface ISysDictTypeService * @return 结果 */ public String checkDictTypeUnique(SysDictType dictType); + + /** + * 查询字典类型树 + * + * @param dictType 字典类型 + * @return 所有字典类型 + */ + public List selectDictTree(SysDictType dictType); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java index 7d205fc1..34ca02ba 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java @@ -1,10 +1,12 @@ package com.ruoyi.system.service.impl; +import java.util.ArrayList; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.core.domain.Ztree; import com.ruoyi.common.core.text.Convert; import com.ruoyi.common.exception.BusinessException; import com.ruoyi.common.utils.StringUtils; @@ -62,6 +64,17 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService return dictTypeMapper.selectDictTypeById(dictId); } + /** + * 根据字典类型查询信息 + * + * @param dictType 字典类型 + * @return 字典类型 + */ + public SysDictType selectDictTypeByType(String dictType) + { + return dictTypeMapper.selectDictTypeByType(dictType); + } + /** * 通过字典ID删除字典信息 * @@ -140,4 +153,36 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService } return UserConstants.DICT_TYPE_UNIQUE; } + + /** + * 查询字典类型树 + * + * @param dictType 字典类型 + * @return 所有字典类型 + */ + public List selectDictTree(SysDictType dictType) + { + List ztrees = new ArrayList(); + List dictList = dictTypeMapper.selectDictTypeList(dictType); + for (SysDictType dict : dictList) + { + if (UserConstants.DICT_NORMAL.equals(dict.getStatus())) + { + Ztree ztree = new Ztree(); + ztree.setId(dict.getDictId()); + ztree.setName(transDictName(dict)); + ztree.setTitle(dict.getDictType()); + ztrees.add(ztree); + } + } + return ztrees; + } + + public String transDictName(SysDictType dictType) + { + StringBuffer sb = new StringBuffer(); + sb.append("(" + dictType.getDictName() + ")"); + sb.append("   " + dictType.getDictType()); + return sb.toString(); + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java index 5dee886b..ce6a65e7 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java @@ -206,7 +206,7 @@ public class SysMenuServiceImpl implements ISysMenuService Ztree ztree = new Ztree(); ztree.setId(menu.getMenuId()); ztree.setpId(menu.getParentId()); - ztree.setName(transMenuName(menu, roleMenuList, permsFlag)); + ztree.setName(transMenuName(menu, permsFlag)); ztree.setTitle(menu.getMenuName()); if (isCheck) { @@ -217,7 +217,7 @@ public class SysMenuServiceImpl implements ISysMenuService return ztrees; } - public String transMenuName(SysMenu menu, List roleMenuList, boolean permsFlag) + public String transMenuName(SysMenu menu, boolean permsFlag) { StringBuffer sb = new StringBuffer(); sb.append(menu.getMenuName()); diff --git a/ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml index e2f69f92..1ddabe6e 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml @@ -50,6 +50,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where dict_id = #{dictId} + +