Commit 0d55ca747c9c7ebc1180c847883486a6f1ec1262

Authored by YunaiV
1 parent 63962d55

1. 同步数据表和字段定义

2. 删除数据库表
ruoyi-generator/src/main/java/com/ruoyi/generator/config/GenConfig.java
... ... @@ -14,6 +14,7 @@ import org.springframework.stereotype.Component;
14 14 @ConfigurationProperties(prefix = "gen")
15 15 @PropertySource(value = { "classpath:generator.yml" })
16 16 public class GenConfig {
  17 +
17 18 /** 作者 */
18 19 public static String author;
19 20  
... ... @@ -26,47 +27,4 @@ public class GenConfig {
26 27 /** 表前缀(类名不会包含表前缀) */
27 28 public static String tablePrefix;
28 29  
29   - public static String getAuthor()
30   - {
31   - return author;
32   - }
33   -
34   - @Value("${author}")
35   - public void setAuthor(String author)
36   - {
37   - GenConfig.author = author;
38   - }
39   -
40   - public static String getPackageName()
41   - {
42   - return packageName;
43   - }
44   -
45   - @Value("${packageName}")
46   - public void setPackageName(String packageName)
47   - {
48   - GenConfig.packageName = packageName;
49   - }
50   -
51   - public static boolean getAutoRemovePre()
52   - {
53   - return autoRemovePre;
54   - }
55   -
56   - @Value("${autoRemovePre}")
57   - public void setAutoRemovePre(boolean autoRemovePre)
58   - {
59   - GenConfig.autoRemovePre = autoRemovePre;
60   - }
61   -
62   - public static String getTablePrefix()
63   - {
64   - return tablePrefix;
65   - }
66   -
67   - @Value("${tablePrefix}")
68   - public void setTablePrefix(String tablePrefix)
69   - {
70   - GenConfig.tablePrefix = tablePrefix;
71   - }
72 30 }
... ...
ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java deleted
1   -package com.ruoyi.generator.controller;
2   -
3   -import java.io.IOException;
4   -import java.util.HashMap;
5   -import java.util.List;
6   -import java.util.Map;
7   -import javax.servlet.http.HttpServletResponse;
8   -
9   -import org.apache.commons.io.IOUtils;
10   -import org.springframework.beans.factory.annotation.Autowired;
11   -import org.springframework.security.access.prepost.PreAuthorize;
12   -import org.springframework.validation.annotation.Validated;
13   -import org.springframework.web.bind.annotation.DeleteMapping;
14   -import org.springframework.web.bind.annotation.GetMapping;
15   -import org.springframework.web.bind.annotation.PathVariable;
16   -import org.springframework.web.bind.annotation.PostMapping;
17   -import org.springframework.web.bind.annotation.PutMapping;
18   -import org.springframework.web.bind.annotation.RequestBody;
19   -import org.springframework.web.bind.annotation.RequestMapping;
20   -import org.springframework.web.bind.annotation.RestController;
21   -import com.ruoyi.common.annotation.Log;
22   -import com.ruoyi.common.core.controller.BaseController;
23   -import com.ruoyi.common.core.domain.AjaxResult;
24   -import com.ruoyi.common.core.page.TableDataInfo;
25   -import com.ruoyi.common.core.text.Convert;
26   -import com.ruoyi.common.enums.BusinessType;
27   -import com.ruoyi.generator.domain.GenTable;
28   -import com.ruoyi.generator.domain.GenTableColumn;
29   -import com.ruoyi.generator.service.IGenTableColumnService;
30   -import com.ruoyi.generator.service.IGenTableService;
31   -
32   -/**
33   - * 代码生成 操作处理
34   - *
35   - * @author ruoyi
36   - */
37   -@RestController
38   -@RequestMapping("/tool/gen")
39   -public class GenController extends BaseController {
40   -
41   - /**
42   - * 查询数据表字段列表
43   - */
44   - @PreAuthorize("@ss.hasPermi('tool:gen:list')")
45   - @GetMapping(value = "/column/{talbleId}")
46   - public TableDataInfo columnList(Long tableId) {
47   - TableDataInfo dataInfo = new TableDataInfo();
48   - List<GenTableColumn> list = genTableColumnService.selectGenTableColumnListByTableId(tableId);
49   - dataInfo.setRows(list);
50   - dataInfo.setTotal(list.size());
51   - return dataInfo;
52   - }
53   -
54   - /**
55   - * 导入表结构(保存)
56   - */
57   - @PreAuthorize("@ss.hasPermi('tool:gen:list')")
58   - @Log(title = "代码生成", businessType = BusinessType.IMPORT)
59   - @PostMapping("/importTable")
60   - public AjaxResult importTableSave(String tables) {
61   - String[] tableNames = Convert.toStrArray(tables);
62   - // 查询表信息
63   - List<GenTable> tableList = genTableService.selectDbTableListByNames(tableNames);
64   - genTableService.importGenTable(tableList);
65   - return AjaxResult.success();
66   - }
67   -
68   - /**
69   - * 删除代码生成
70   - */
71   - @PreAuthorize("@ss.hasPermi('tool:gen:remove')")
72   - @Log(title = "代码生成", businessType = BusinessType.DELETE)
73   - @DeleteMapping("/{tableIds}")
74   - public AjaxResult remove(@PathVariable Long[] tableIds) {
75   - genTableService.deleteGenTableByIds(tableIds);
76   - return AjaxResult.success();
77   - }
78   -
79   - /**
80   - * 生成代码(自定义路径)
81   - */
82   - @PreAuthorize("@ss.hasPermi('tool:gen:code')")
83   - @Log(title = "代码生成", businessType = BusinessType.GENCODE)
84   - @GetMapping("/genCode/{tableName}")
85   - public AjaxResult genCode(@PathVariable("tableName") String tableName) {
86   - genTableService.generatorCode(tableName);
87   - return AjaxResult.success();
88   - }
89   -
90   - /**
91   - * 同步数据库
92   - */
93   - @PreAuthorize("@ss.hasPermi('tool:gen:edit')")
94   - @Log(title = "代码生成", businessType = BusinessType.UPDATE)
95   - @GetMapping("/synchDb/{tableName}")
96   - public AjaxResult synchDb(@PathVariable("tableName") String tableName) {
97   - genTableService.synchDb(tableName);
98   - return AjaxResult.success();
99   - }
100   -
101   - /**
102   - * 生成zip文件
103   - */
104   - private void genCode(HttpServletResponse response, byte[] data) throws IOException {
105   - response.reset();
106   - response.addHeader("Access-Control-Allow-Origin", "*");
107   - response.addHeader("Access-Control-Expose-Headers", "Content-Disposition");
108   - response.setHeader("Content-Disposition", "attachment; filename=\"ruoyi.zip\"");
109   - response.addHeader("Content-Length", "" + data.length);
110   - response.setContentType("application/octet-stream; charset=UTF-8");
111   - IOUtils.write(data, response.getOutputStream());
112   - }
113   -
114   -}
ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableMapper.java deleted
1   -package com.ruoyi.generator.mapper;
2   -
3   -import java.util.List;
4   -
5   -import com.ruoyi.generator.domain.GenTable;
6   -
7   -/**
8   - * 业务 数据层
9   - *
10   - * @author ruoyi
11   - */
12   -public interface GenTableMapper {
13   - /**
14   - * 查询业务列表
15   - *
16   - * @param genTable 业务信息
17   - * @return 业务集合
18   - */
19   - public List<GenTable> selectGenTableList(GenTable genTable);
20   -
21   - /**
22   - * 查询据库列表
23   - *
24   - * @param genTable 业务信息
25   - * @return 数据库表集合
26   - */
27   - public List<GenTable> selectDbTableList(GenTable genTable);
28   -
29   - /**
30   - * 查询据库列表
31   - *
32   - * @param tableNames 表名称组
33   - * @return 数据库表集合
34   - */
35   - public List<GenTable> selectDbTableListByNames(String[] tableNames);
36   -
37   - /**
38   - * 查询表ID业务信息
39   - *
40   - * @param id 业务ID
41   - * @return 业务信息
42   - */
43   - public GenTable selectGenTableById(Long id);
44   -
45   - /**
46   - * 查询表名称业务信息
47   - *
48   - * @param tableName 表名称
49   - * @return 业务信息
50   - */
51   - public GenTable selectGenTableByName(String tableName);
52   -
53   -}
ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java deleted
1   -package com.ruoyi.generator.service;
2   -
3   -import java.io.ByteArrayOutputStream;
4   -import java.io.File;
5   -import java.io.IOException;
6   -import java.io.StringWriter;
7   -import java.util.LinkedHashMap;
8   -import java.util.List;
9   -import java.util.Map;
10   -import java.util.stream.Collectors;
11   -import java.util.zip.ZipEntry;
12   -import java.util.zip.ZipOutputStream;
13   -
14   -import org.apache.commons.io.IOUtils;
15   -import org.apache.velocity.Template;
16   -import org.apache.velocity.VelocityContext;
17   -import org.apache.velocity.app.Velocity;
18   -import org.slf4j.Logger;
19   -import org.slf4j.LoggerFactory;
20   -import org.springframework.beans.factory.annotation.Autowired;
21   -import org.springframework.stereotype.Service;
22   -import org.springframework.transaction.annotation.Transactional;
23   -import com.alibaba.fastjson.JSON;
24   -import com.alibaba.fastjson.JSONObject;
25   -import com.ruoyi.common.constant.Constants;
26   -import com.ruoyi.common.constant.GenConstants;
27   -import com.ruoyi.common.core.text.CharsetKit;
28   -import com.ruoyi.common.exception.CustomException;
29   -import com.ruoyi.common.utils.SecurityUtils;
30   -import com.ruoyi.common.utils.StringUtils;
31   -import com.ruoyi.common.utils.file.FileUtils;
32   -import com.ruoyi.generator.domain.GenTable;
33   -import com.ruoyi.generator.domain.GenTableColumn;
34   -import com.ruoyi.generator.mapper.GenTableColumnMapper;
35   -import com.ruoyi.generator.mapper.GenTableMapper;
36   -import com.ruoyi.generator.util.GenUtils;
37   -import com.ruoyi.generator.util.VelocityInitializer;
38   -import com.ruoyi.generator.util.VelocityUtils;
39   -
40   -/**
41   - * 业务 服务层实现
42   - *
43   - * @author ruoyi
44   - */
45   -@Service
46   -public class GenTableServiceImpl implements IGenTableService {
47   -
48   - @Autowired
49   - private GenTableMapper genTableMapper;
50   -
51   - @Autowired
52   - private GenTableColumnMapper genTableColumnMapper;
53   -
54   - /**
55   - * 查询业务信息
56   - *
57   - * @param id 业务ID
58   - * @return 业务信息
59   - */
60   - @Override
61   - public GenTable selectGenTableById(Long id) {
62   - GenTable genTable = genTableMapper.selectGenTableById(id);
63   - setTableFromOptions(genTable);
64   - return genTable;
65   - }
66   -
67   - /**
68   - * 查询据库列表
69   - *
70   - * @param genTable 业务信息
71   - * @return 数据库表集合
72   - */
73   - @Override
74   - public List<GenTable> selectDbTableList(GenTable genTable) {
75   - return genTableMapper.selectDbTableList(genTable);
76   - }
77   -
78   - /**
79   - * 查询据库列表
80   - *
81   - * @param tableNames 表名称组
82   - * @return 数据库表集合
83   - */
84   - @Override
85   - public List<GenTable> selectDbTableListByNames(String[] tableNames) {
86   - return genTableMapper.selectDbTableListByNames(tableNames);
87   - }
88   -
89   - /**
90   - * 删除业务对象
91   - *
92   - * @param tableIds 需要删除的数据ID
93   - * @return 结果
94   - */
95   - @Override
96   - @Transactional
97   - public void deleteGenTableByIds(Long[] tableIds) {
98   - genTableMapper.deleteGenTableByIds(tableIds);
99   - genTableColumnMapper.deleteGenTableColumnByIds(tableIds);
100   - }
101   -
102   - /**
103   - * 导入表结构
104   - *
105   - * @param tableList 导入表列表
106   - */
107   - @Override
108   - @Transactional
109   - public void importGenTable(List<GenTable> tableList) {
110   - String operName = SecurityUtils.getUsername();
111   - try {
112   - for (GenTable table : tableList) {
113   - String tableName = table.getTableName();
114   - GenUtils.initTable(table, operName);
115   - int row = genTableMapper.insertGenTable(table);
116   - if (row > 0) {
117   - // 保存列信息
118   - List<GenTableColumn> genTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName);
119   - for (GenTableColumn column : genTableColumns) {
120   - GenUtils.initColumnField(column, table);
121   - genTableColumnMapper.insertGenTableColumn(column);
122   - }
123   - }
124   - }
125   - } catch (Exception e) {
126   - throw new CustomException("导入失败:" + e.getMessage());
127   - }
128   - }
129   -
130   -
131   - /**
132   - * 同步数据库
133   - *
134   - * @param tableName 表名称
135   - */
136   - @Override
137   - @Transactional
138   - public void synchDb(String tableName) {
139   - GenTable table = genTableMapper.selectGenTableByName(tableName);
140   - List<GenTableColumn> tableColumns = table.getColumns();
141   - List<String> tableColumnNames = tableColumns.stream().map(GenTableColumn::getColumnName).collect(Collectors.toList());
142   -
143   - List<GenTableColumn> dbTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName);
144   - List<String> dbTableColumnNames = dbTableColumns.stream().map(GenTableColumn::getColumnName).collect(Collectors.toList());
145   -
146   - dbTableColumns.forEach(column -> {
147   - if (!tableColumnNames.contains(column.getColumnName())) {
148   - GenUtils.initColumnField(column, table);
149   - genTableColumnMapper.insertGenTableColumn(column);
150   - }
151   - });
152   -
153   - List<GenTableColumn> delColumns = tableColumns.stream().filter(column -> !dbTableColumnNames.contains(column.getColumnName())).collect(Collectors.toList());
154   - if (StringUtils.isNotEmpty(delColumns)) {
155   - genTableColumnMapper.deleteGenTableColumns(delColumns);
156   - }
157   - }
158   -
159   - /**
160   - * 修改保存参数校验
161   - *
162   - * @param genTable 业务信息
163   - */
164   - @Override
165   - public void validateEdit(GenTable genTable) {
166   - if (GenConstants.TPL_TREE.equals(genTable.getTplCategory())) {
167   - String options = JSON.toJSONString(genTable.getParams());
168   - JSONObject paramsObj = JSONObject.parseObject(options);
169   - if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_CODE))) {
170   - throw new CustomException("树编码字段不能为空");
171   - } else if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_PARENT_CODE))) {
172   - throw new CustomException("树父编码字段不能为空");
173   - } else if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_NAME))) {
174   - throw new CustomException("树名称字段不能为空");
175   - }
176   - }
177   - }
178   -
179   -}
ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml deleted
1   -<?xml version="1.0" encoding="UTF-8" ?>
2   -<!DOCTYPE mapper
3   -PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
4   -"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
5   -<mapper namespace="com.ruoyi.generator.mapper.GenTableMapper">
6   -
7   - <select id="selectDbTableList" parameterType="GenTable" resultMap="GenTableResult">
8   - select table_name, table_comment, create_time, update_time from information_schema.tables
9   - where table_schema = (select database())
10   - AND table_name NOT LIKE 'qrtz_%' AND table_name NOT LIKE 'gen_%'
11   - AND table_name NOT IN (select table_name from gen_table)
12   - <if test="tableName != null and tableName != ''">
13   - AND lower(table_name) like lower(concat('%', #{tableName}, '%'))
14   - </if>
15   - <if test="tableComment != null and tableComment != ''">
16   - AND lower(table_comment) like lower(concat('%', #{tableComment}, '%'))
17   - </if>
18   - <if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
19   - AND date_format(create_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
20   - </if>
21   - <if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
22   - AND date_format(create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
23   - </if>
24   - </select>
25   -
26   - <select id="selectDbTableListByNames" resultMap="GenTableResult">
27   - select table_name, table_comment, create_time, update_time from information_schema.tables
28   - where table_name NOT LIKE 'qrtz_%' and table_name NOT LIKE 'gen_%' and table_schema = (select database())
29   - and table_name in
30   - <foreach collection="array" item="name" open="(" separator="," close=")">
31   - #{name}
32   - </foreach>
33   - </select>
34   -
35   - <select id="selectTableByName" parameterType="String" resultMap="GenTableResult">
36   - select table_name, table_comment, create_time, update_time from information_schema.tables
37   - where table_comment <![CDATA[ <> ]]> '' and table_schema = (select database())
38   - and table_name = #{tableName}
39   - </select>
40   -
41   - <select id="selectGenTableById" parameterType="Long" resultMap="GenTableResult">
42   - SELECT t.table_id, t.table_name, t.table_comment, t.class_name, t.tpl_category, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.gen_type, t.gen_path, t.options, t.remark,
43   - c.column_id, c.column_name, c.column_comment, c.column_type, c.java_type, c.java_field, c.is_pk, c.is_increment, c.is_required, c.is_insert, c.is_edit, c.is_list, c.is_query, c.query_type, c.html_type, c.dict_type, c.sort
44   - FROM gen_table t
45   - LEFT JOIN gen_table_column c ON t.table_id = c.table_id
46   - where t.table_id = #{tableId} order by c.sort
47   - </select>
48   -
49   - <select id="selectGenTableByName" parameterType="String" resultMap="GenTableResult">
50   - SELECT t.table_id, t.table_name, t.table_comment, t.class_name, t.tpl_category, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.gen_type, t.gen_path, t.options, t.remark,
51   - c.column_id, c.column_name, c.column_comment, c.column_type, c.java_type, c.java_field, c.is_pk, c.is_increment, c.is_required, c.is_insert, c.is_edit, c.is_list, c.is_query, c.query_type, c.html_type, c.dict_type, c.sort
52   - FROM gen_table t
53   - LEFT JOIN gen_table_column c ON t.table_id = c.table_id
54   - where t.table_name = #{tableName} order by c.sort
55   - </select>
56   -
57   -</mapper>
ruoyi-ui/src/api/tool/codegen.js
1 1 import request from '@/utils/request'
2 2  
3 3 // 获得表定义分页
4   -export function getCodeGenTablePage(query) {
  4 +export function getCodegenTablePage(query) {
5 5 return request({
6 6 url: '/tool/codegen/table/page',
7 7 method: 'get',
... ... @@ -10,7 +10,7 @@ export function getCodeGenTablePage(query) {
10 10 }
11 11  
12 12 // 获得表和字段的明细
13   -export function getCodeGenDetail(tableId) {
  13 +export function getCodegenDetail(tableId) {
14 14 return request({
15 15 url: '/tool/codegen/detail?tableId=' + tableId,
16 16 method: 'get',
... ... @@ -26,6 +26,14 @@ export function updateCodegen(data) {
26 26 })
27 27 }
28 28  
  29 +// 基于数据库的表结构,同步数据库的表和字段定义
  30 +export function syncCodegen(tableId) {
  31 + return request({
  32 + url: '/tool/codegen/sync?tableId=' + tableId,
  33 + method: 'put'
  34 + })
  35 +}
  36 +
29 37 // 预览生成代码
30 38 export function previewCodegen(tableId) {
31 39 return request({
... ... @@ -42,3 +50,32 @@ export function downloadCodegen(tableId) {
42 50 responseType: 'blob'
43 51 })
44 52 }
  53 +
  54 +// 获得表定义分页
  55 +export function getSchemaTableList(query) {
  56 + return request({
  57 + url: '/tool/codegen/db/table/list',
  58 + method: 'get',
  59 + params: query
  60 + })
  61 +}
  62 +
  63 +// 基于数据库的表结构,创建代码生成器的表定义
  64 +export function createCodegenList(tableNames) {
  65 + return request({
  66 + url: '/tool/codegen/create-list',
  67 + method: 'post',
  68 + headers:{
  69 + 'Content-type': 'application/x-www-form-urlencoded'
  70 + },
  71 + data: 'tableNames=' + tableNames
  72 + })
  73 +}
  74 +
  75 +// 删除数据库的表和字段定义
  76 +export function deleteCodegen(tableId) {
  77 + return request({
  78 + url: '/tool/codegen/delete?tableId=' + tableId,
  79 + method: 'delete'
  80 + })
  81 +}
... ...
ruoyi-ui/src/api/tool/gen.js deleted
1   -import request from '@/utils/request'
2   -
3   -// 查询db数据库列表
4   -export function listDbTable(query) {
5   - return request({
6   - url: '/tool/gen/db/list',
7   - method: 'get',
8   - params: query
9   - })
10   -}
11   -
12   -// 导入表
13   -export function importTable(data) {
14   - return request({
15   - url: '/tool/gen/importTable',
16   - method: 'post',
17   - params: data
18   - })
19   -}
20   -
21   -// 删除表数据
22   -export function delTable(tableId) {
23   - return request({
24   - url: '/tool/gen/' + tableId,
25   - method: 'delete'
26   - })
27   -}
28   -
29   -// 生成代码(自定义路径)
30   -export function genCode(tableName) {
31   - return request({
32   - url: '/tool/gen/genCode/' + tableName,
33   - method: 'get'
34   - })
35   -}
36   -
37   -// 同步数据库
38   -export function synchDb(tableName) {
39   - return request({
40   - url: '/tool/gen/synchDb/' + tableName,
41   - method: 'get'
42   - })
43   -}
ruoyi-ui/src/views/tool/gen/editTable.vue
... ... @@ -126,7 +126,7 @@
126 126 </el-card>
127 127 </template>
128 128 <script>
129   -import { getCodeGenDetail, updateCodegen } from "@/api/tool/codegen";
  129 +import { getCodegenDetail, updateCodegen } from "@/api/tool/codegen";
130 130 import { listAllSimple as listAllSimpleDictType } from "@/api/system/dict/type";
131 131 import { listMenu as getMenuTreeselect } from "@/api/system/menu";
132 132 import basicInfoForm from "./basicInfoForm";
... ... @@ -161,7 +161,7 @@ export default {
161 161 const tableId = this.$route.params && this.$route.params.tableId;
162 162 if (tableId) {
163 163 // 获取表详细信息
164   - getCodeGenDetail(tableId).then(res => {
  164 + getCodegenDetail(tableId).then(res => {
165 165 this.table = res.data.table;
166 166 this.columns = res.data.columns;
167 167 });
... ...
ruoyi-ui/src/views/tool/gen/importTable.vue
... ... @@ -28,18 +28,15 @@
28 28 <el-row>
29 29 <el-table @row-click="clickRow" ref="table" :data="dbTableList" @selection-change="handleSelectionChange" height="260px">
30 30 <el-table-column type="selection" width="55"></el-table-column>
  31 + <el-table-column prop="tableSchema" label="数据库" :show-overflow-tooltip="true"></el-table-column>
31 32 <el-table-column prop="tableName" label="表名称" :show-overflow-tooltip="true"></el-table-column>
32 33 <el-table-column prop="tableComment" label="表描述" :show-overflow-tooltip="true"></el-table-column>
33   - <el-table-column prop="createTime" label="创建时间"></el-table-column>
34   - <el-table-column prop="updateTime" label="更新时间"></el-table-column>
  34 + <el-table-column prop="createTime" label="创建时间">
  35 + <template slot-scope="scope">
  36 + <span>{{ parseTime(scope.row.createTime) }}</span>
  37 + </template>
  38 + </el-table-column>
35 39 </el-table>
36   - <pagination
37   - v-show="total>0"
38   - :total="total"
39   - :page.sync="queryParams.pageNum"
40   - :limit.sync="queryParams.pageSize"
41   - @pagination="getList"
42   - />
43 40 </el-row>
44 41 <div slot="footer" class="dialog-footer">
45 42 <el-button type="primary" @click="handleImportTable">确 定</el-button>
... ... @@ -49,7 +46,7 @@
49 46 </template>
50 47  
51 48 <script>
52   -import { listDbTable, importTable } from "@/api/tool/gen";
  49 +import { getSchemaTableList, createCodegenList } from "@/api/tool/codegen";
53 50 export default {
54 51 data() {
55 52 return {
... ... @@ -63,8 +60,6 @@ export default {
63 60 dbTableList: [],
64 61 // 查询参数
65 62 queryParams: {
66   - pageNum: 1,
67   - pageSize: 10,
68 63 tableName: undefined,
69 64 tableComment: undefined
70 65 }
... ... @@ -85,16 +80,12 @@ export default {
85 80 },
86 81 // 查询表数据
87 82 getList() {
88   - listDbTable(this.queryParams).then(res => {
89   - if (res.code === 200) {
90   - this.dbTableList = res.rows;
91   - this.total = res.total;
92   - }
  83 + getSchemaTableList(this.queryParams).then(res => {
  84 + this.dbTableList = res.data;
93 85 });
94 86 },
95 87 /** 搜索按钮操作 */
96 88 handleQuery() {
97   - this.queryParams.pageNum = 1;
98 89 this.getList();
99 90 },
100 91 /** 重置按钮操作 */
... ... @@ -104,12 +95,10 @@ export default {
104 95 },
105 96 /** 导入按钮操作 */
106 97 handleImportTable() {
107   - importTable({ tables: this.tables.join(",") }).then(res => {
108   - this.msgSuccess(res.msg);
109   - if (res.code === 200) {
110   - this.visible = false;
111   - this.$emit("ok");
112   - }
  98 + createCodegenList(this.tables.join(",")).then(res => {
  99 + this.msgSuccess("导入成功");
  100 + this.visible = false;
  101 + this.$emit("ok");
113 102 });
114 103 }
115 104 }
... ...
ruoyi-ui/src/views/tool/gen/index.vue
... ... @@ -39,9 +39,6 @@
39 39  
40 40 <el-row :gutter="10" class="mb8">
41 41 <el-col :span="1.5">
42   - <el-button type="primary" plain icon="el-icon-download" size="mini" @click="handleGenTable" v-hasPermi="['tool:gen:code']">生成</el-button>
43   - </el-col>
44   - <el-col :span="1.5">
45 42 <el-button type="info" plain icon="el-icon-upload" size="mini" @click="openImportTable" v-hasPermi="['tool:gen:import']">导入</el-button>
46 43 </el-col>
47 44 <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
... ... @@ -85,15 +82,12 @@
85 82 </template>
86 83  
87 84 <script>
88   -import { delTable, synchDb } from "@/api/tool/gen";
89   -import { getCodeGenTablePage, previewCodegen, downloadCodegen } from "@/api/tool/codegen";
  85 +import { getCodegenTablePage, previewCodegen, downloadCodegen, deleteCodegen, syncCodegen } from "@/api/tool/codegen";
90 86  
91 87 import importTable from "./importTable";
92 88 // 代码高亮插件
93 89 import hljs from "highlight.js/lib/highlight";
94 90 import "highlight.js/styles/github-gist.css";
95   -import {list} from "@/api/system/loginlog";
96   -import {exportOperateLog} from "@/api/system/operatelog";
97 91 hljs.registerLanguage("java", require("highlight.js/lib/languages/java"));
98 92 hljs.registerLanguage("xml", require("highlight.js/lib/languages/xml"));
99 93 hljs.registerLanguage("html", require("highlight.js/lib/languages/xml"));
... ... @@ -150,7 +144,7 @@ export default {
150 144 /** 查询表集合 */
151 145 getList() {
152 146 this.loading = true;
153   - getCodeGenTablePage(this.addDateRange(this.queryParams, [
  147 + getCodegenTablePage(this.addDateRange(this.queryParams, [
154 148 this.dateRange[0] ? this.dateRange[0] + ' 00:00:00' : undefined,
155 149 this.dateRange[1] ? this.dateRange[1] + ' 23:59:59' : undefined,
156 150 ], 'CreateTime')).then(response => {
... ... @@ -179,7 +173,7 @@ export default {
179 173 cancelButtonText: "取消",
180 174 type: "warning"
181 175 }).then(function() {
182   - return synchDb(tableName);
  176 + return syncCodegen(row.id);
183 177 }).then(() => {
184 178 this.msgSuccess("同步成功");
185 179 })
... ... @@ -217,13 +211,13 @@ export default {
217 211 },
218 212 /** 删除按钮操作 */
219 213 handleDelete(row) {
220   - const tableIds = row.tableId || this.ids;
221   - this.$confirm('是否确认删除表编号为"' + tableIds + '"的数据项?', "警告", {
  214 + const tableIds = row.id;
  215 + this.$confirm('是否确认删除表名称为"' + row.tableName + '"的数据项?', "警告", {
222 216 confirmButtonText: "确定",
223 217 cancelButtonText: "取消",
224 218 type: "warning"
225 219 }).then(function() {
226   - return delTable(tableIds);
  220 + return deleteCodegen(tableIds);
227 221 }).then(() => {
228 222 this.getList();
229 223 this.msgSuccess("删除成功");
... ...
src/main/java/cn/iocoder/dashboard/modules/tool/controller/codegen/ToolCodegenController.java
... ... @@ -15,6 +15,7 @@ import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolCodegenColum
15 15 import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolCodegenTableDO;
16 16 import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolSchemaTableDO;
17 17 import cn.iocoder.dashboard.modules.tool.service.codegen.ToolCodegenService;
  18 +import cn.iocoder.dashboard.util.collection.CollectionUtils;
18 19 import cn.iocoder.dashboard.util.servlet.ServletUtils;
19 20 import io.swagger.annotations.Api;
20 21 import io.swagger.annotations.ApiImplicitParam;
... ... @@ -31,6 +32,7 @@ import java.io.ByteArrayOutputStream;
31 32 import java.io.IOException;
32 33 import java.util.List;
33 34 import java.util.Map;
  35 +import java.util.Set;
34 36  
35 37 import static cn.iocoder.dashboard.common.pojo.CommonResult.success;
36 38  
... ... @@ -47,7 +49,7 @@ public class ToolCodegenController {
47 49 @GetMapping("/db/table/list")
48 50 @ApiImplicitParams({
49 51 @ApiImplicitParam(name = "tableName", required = true, example = "yudao", dataTypeClass = String.class),
50   - @ApiImplicitParam(name = "tableComment", required = true, example = "芋道", dataTypeClass = Long.class)
  52 + @ApiImplicitParam(name = "tableComment", required = true, example = "芋道", dataTypeClass = String.class)
51 53 })
52 54 // @PreAuthorize("@ss.hasPermi('tool:gen:list')") TODO 权限
53 55 public CommonResult<List<ToolSchemaTableRespVO>> getSchemaTableList(
... ... @@ -56,33 +58,35 @@ public class ToolCodegenController {
56 58 // 获得数据库自带的表定义列表
57 59 List<ToolSchemaTableDO> schemaTables = codegenService.getSchemaTableList(tableName, tableComment);
58 60 // 移除在 Codegen 中,已经存在的
59   -
60   - return null;
  61 + Set<String> existsTables = CollectionUtils.convertSet(codegenService.getCodeGenTableList(), ToolCodegenTableDO::getTableName);
  62 + schemaTables.removeIf(table -> existsTables.contains(table.getTableName()));
  63 + return success(ToolCodegenConvert.INSTANCE.convertList04(schemaTables));
61 64 }
62 65  
63 66 @ApiOperation("获得表定义分页")
64 67 @GetMapping("/table/page")
65 68 // TODO 权限 @PreAuthorize("@ss.hasPermi('tool:gen:list')")
66 69 public CommonResult<PageResult<ToolCodegenTableRespVO>> getCodeGenTablePage(@Valid ToolCodegenTablePageReqVO pageReqVO) {
67   - PageResult<ToolCodegenTableDO> pageResult = codegenService.getCodeGenTablePage(pageReqVO);
  70 + PageResult<ToolCodegenTableDO> pageResult = codegenService.getCodegenTablePage(pageReqVO);
68 71 return success(ToolCodegenConvert.INSTANCE.convertPage(pageResult));
69 72 }
70 73  
71 74 @ApiOperation("获得表和字段的明细")
72 75 @GetMapping("/detail")
  76 + @ApiImplicitParam(name = "tableId", required = true, example = "表编号", dataTypeClass = Long.class)
73 77 // todo @PreAuthorize("@ss.hasPermi('tool:gen:query')")
74   - public CommonResult<ToolCodegenDetailRespVO> getCodeGenDetail(@RequestParam("tableId") Long tableId) {
75   - ToolCodegenTableDO table = codegenService.getCodeGenTablePage(tableId);
  78 + public CommonResult<ToolCodegenDetailRespVO> getCodegenDetail(@RequestParam("tableId") Long tableId) {
  79 + ToolCodegenTableDO table = codegenService.getCodegenTablePage(tableId);
76 80 List<ToolCodegenColumnDO> columns = codegenService.getCodegenColumnListByTableId(tableId);
77 81 // 拼装返回
78 82 return success(ToolCodegenConvert.INSTANCE.convert(table, columns));
79 83 }
80 84  
81   - @ApiOperation("基于数据库的表结构,创建代码生成器的表定义")
82   - @PostMapping("/create")
  85 + @ApiOperation("基于数据库的表结构,创建代码生成器的表和字段定义")
  86 + @PostMapping("/create-list")
83 87 // TODO 权限
84   - public CommonResult<Long> createCodeGen(@RequestParam("tableName") String tableName) {
85   - return success(codegenService.createCodegen(tableName));
  88 + public CommonResult<List<Long>> createCodegenList(@RequestParam("tableNames") List<String> tableNames) {
  89 + return success(codegenService.createCodeGenList(tableNames));
86 90 }
87 91  
88 92 @ApiOperation("更新数据库的表和字段定义")
... ... @@ -93,6 +97,24 @@ public class ToolCodegenController {
93 97 return success(true);
94 98 }
95 99  
  100 + @ApiOperation("基于数据库的表结构,同步数据库的表和字段定义")
  101 + @PutMapping("/sync")
  102 + @ApiImplicitParam(name = "tableId", required = true, example = "表编号", dataTypeClass = Long.class)
  103 +// @PreAuthorize("@ss.hasPermi('tool:gen:edit')") TODO 权限
  104 + public CommonResult<Boolean> syncCodegen(@RequestParam("tableId") Long tableId) {
  105 + codegenService.syncCodegen(tableId);
  106 + return success(true);
  107 + }
  108 +
  109 + @ApiOperation("删除数据库的表和字段定义")
  110 + @DeleteMapping("/delete")
  111 + @ApiImplicitParam(name = "tableId", required = true, example = "表编号", dataTypeClass = Long.class)
  112 +// @PreAuthorize("@ss.hasPermi('tool:gen:remove')") TODO 权限
  113 + public CommonResult<Boolean> deleteCodegen(@RequestParam("tableId") Long tableId) {
  114 + codegenService.deleteCodegen(tableId);
  115 + return success(true);
  116 + }
  117 +
96 118 @ApiOperation("预览生成代码")
97 119 @GetMapping("/preview")
98 120 @ApiImplicitParam(name = "tableId", required = true, example = "表编号", dataTypeClass = Long.class)
... ... @@ -119,4 +141,18 @@ public class ToolCodegenController {
119 141 ServletUtils.writeAttachment(response, "codegen.zip", outputStream.toByteArray());
120 142 }
121 143  
  144 +// /**
  145 +// * 查询数据表字段列表
  146 +// */
  147 +// @PreAuthorize("@ss.hasPermi('tool:gen:list')")
  148 +// @GetMapping(value = "/column/{talbleId}")
  149 +// public TableDataInfo columnList(Long tableId) {
  150 +// TableDataInfo dataInfo = new TableDataInfo();
  151 +// List<GenTableColumn> list = genTableColumnService.selectGenTableColumnListByTableId(tableId);
  152 +// dataInfo.setRows(list);
  153 +// dataInfo.setTotal(list.size());
  154 +// return dataInfo;
  155 +// }
  156 +//
  157 +
122 158 }
... ...
src/main/java/cn/iocoder/dashboard/modules/tool/convert/codegen/ToolCodegenConvert.java
... ... @@ -6,6 +6,7 @@ import cn.iocoder.dashboard.modules.tool.controller.codegen.vo.ToolCodegenPrevie
6 6 import cn.iocoder.dashboard.modules.tool.controller.codegen.vo.ToolCodegenUpdateReqVO;
7 7 import cn.iocoder.dashboard.modules.tool.controller.codegen.vo.column.ToolCodegenColumnRespVO;
8 8 import cn.iocoder.dashboard.modules.tool.controller.codegen.vo.table.ToolCodegenTableRespVO;
  9 +import cn.iocoder.dashboard.modules.tool.controller.codegen.vo.table.ToolSchemaTableRespVO;
9 10 import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolCodegenColumnDO;
10 11 import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolCodegenTableDO;
11 12 import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolSchemaColumnDO;
... ... @@ -46,6 +47,8 @@ public interface ToolCodegenConvert {
46 47  
47 48 List<ToolCodegenColumnDO> convertList03(List<ToolCodegenUpdateReqVO.Column> columns);
48 49  
  50 + List<ToolSchemaTableRespVO> convertList04(List<ToolSchemaTableDO> list);
  51 +
49 52 // ========== 其它 ==========
50 53  
51 54 default ToolCodegenDetailRespVO convert(ToolCodegenTableDO table, List<ToolCodegenColumnDO> columns) {
... ...
src/main/java/cn/iocoder/dashboard/modules/tool/dal/mysql/coegen/ToolCodegenColumnMapper.java
... ... @@ -11,9 +11,12 @@ import java.util.List;
11 11 public interface ToolCodegenColumnMapper extends BaseMapperX<ToolCodegenColumnDO> {
12 12  
13 13 default List<ToolCodegenColumnDO> selectListByTableId(Long tableId) {
14   - return selectList(new QueryWrapper<ToolCodegenColumnDO>()
15   - .eq("table_id", tableId)
  14 + return selectList(new QueryWrapper<ToolCodegenColumnDO>().eq("table_id", tableId)
16 15 .orderByAsc("ordinal_position"));
17 16 }
18 17  
  18 + default void deleteListByTableId(Long tableId) {
  19 + delete(new QueryWrapper<ToolCodegenColumnDO>().eq("table_id", tableId));
  20 + }
  21 +
19 22 }
... ...
src/main/java/cn/iocoder/dashboard/modules/tool/dal/mysql/coegen/ToolSchemaTableMapper.java
... ... @@ -14,8 +14,8 @@ public interface ToolSchemaTableMapper extends BaseMapperX&lt;ToolSchemaTableDO&gt; {
14 14  
15 15 default List<ToolSchemaTableDO> selectList(Collection<String> tableSchemas, String tableName, String tableComment) {
16 16 return selectList(new QueryWrapperX<ToolSchemaTableDO>().in("table_schema", tableSchemas)
17   - .eqIfPresent("table_name", tableName)
18   - .eqIfPresent("table_comment", tableComment));
  17 + .likeIfPresent("table_name", tableName)
  18 + .likeIfPresent("table_comment", tableComment));
19 19 }
20 20  
21 21 default List<ToolSchemaTableDO> selectListByTableSchema(String tableSchema) {
... ...
src/main/java/cn/iocoder/dashboard/modules/tool/service/codegen/ToolCodegenService.java
... ... @@ -21,11 +21,19 @@ public interface ToolCodegenService {
21 21 * 基于数据库的表结构,创建代码生成器的表定义
22 22 *
23 23 * @param tableName 表名称
24   - * @return 表定义的编号
  24 + * @return 创建的表定义的编号
25 25 */
26 26 Long createCodegen(String tableName);
27 27  
28 28 /**
  29 + * 基于 {@link #createCodegen(String)} 的批量创建
  30 + *
  31 + * @param tableNames 表名称数组
  32 + * @return 创建的表定义的编号数组
  33 + */
  34 + List<Long> createCodeGenList(List<String> tableNames);
  35 +
  36 + /**
29 37 * 更新数据库的表和字段定义
30 38 *
31 39 * @param updateReqVO 更新信息
... ... @@ -33,12 +41,26 @@ public interface ToolCodegenService {
33 41 void updateCodegen(ToolCodegenUpdateReqVO updateReqVO);
34 42  
35 43 /**
  44 + * 基于数据库的表结构,同步数据库的表和字段定义
  45 + *
  46 + * @param tableId 表编号
  47 + */
  48 + void syncCodegen(Long tableId);
  49 +
  50 + /**
  51 + * 删除数据库的表和字段定义
  52 + *
  53 + * @param tableId 数据编号
  54 + */
  55 + void deleteCodegen(Long tableId);
  56 +
  57 + /**
36 58 * 获得表定义分页
37 59 *
38 60 * @param pageReqVO 分页条件
39 61 * @return 表定义分页
40 62 */
41   - PageResult<ToolCodegenTableDO> getCodeGenTablePage(ToolCodegenTablePageReqVO pageReqVO);
  63 + PageResult<ToolCodegenTableDO> getCodegenTablePage(ToolCodegenTablePageReqVO pageReqVO);
42 64  
43 65 /**
44 66 * 获得表定义
... ... @@ -46,7 +68,14 @@ public interface ToolCodegenService {
46 68 * @param id 表编号
47 69 * @return 表定义
48 70 */
49   - ToolCodegenTableDO getCodeGenTablePage(Long id);
  71 + ToolCodegenTableDO getCodegenTablePage(Long id);
  72 +
  73 + /**
  74 + * 获得全部表定义
  75 + *
  76 + * @return 表定义数组
  77 + */
  78 + List<ToolCodegenTableDO> getCodeGenTableList();
50 79  
51 80 /**
52 81 * 获得指定表的字段定义数组
... ...
src/main/java/cn/iocoder/dashboard/modules/tool/service/codegen/impl/ToolCodegenServiceImpl.java
... ... @@ -15,12 +15,16 @@ import cn.iocoder.dashboard.modules.tool.dal.mysql.coegen.ToolCodegenTableMapper
15 15 import cn.iocoder.dashboard.modules.tool.dal.mysql.coegen.ToolSchemaColumnMapper;
16 16 import cn.iocoder.dashboard.modules.tool.dal.mysql.coegen.ToolSchemaTableMapper;
17 17 import cn.iocoder.dashboard.modules.tool.service.codegen.ToolCodegenService;
  18 +import cn.iocoder.dashboard.util.collection.CollectionUtils;
18 19 import org.springframework.stereotype.Service;
19 20 import org.springframework.transaction.annotation.Transactional;
20 21  
21 22 import javax.annotation.Resource;
  23 +import java.util.ArrayList;
22 24 import java.util.List;
23 25 import java.util.Map;
  26 +import java.util.Set;
  27 +import java.util.stream.Collectors;
24 28  
25 29 /**
26 30 * 代码生成 Service 实现类
... ... @@ -78,6 +82,15 @@ public class ToolCodegenServiceImpl implements ToolCodegenService {
78 82  
79 83 @Override
80 84 @Transactional
  85 + public List<Long> createCodeGenList(List<String> tableNames) {
  86 + List<Long> ids = new ArrayList<>(tableNames.size());
  87 + // 遍历添加。虽然效率会低一点,但是没必要做成完全批量,因为不会这么大量
  88 + tableNames.forEach(tableName -> ids.add(createCodegen(tableName)));
  89 + return ids;
  90 + }
  91 +
  92 + @Override
  93 + @Transactional
81 94 public void updateCodegen(ToolCodegenUpdateReqVO updateReqVO) {
82 95 // 校验是否已经存在
83 96 if (codegenTableMapper.selectById(updateReqVO.getTable().getId()) == null) {
... ... @@ -93,16 +106,71 @@ public class ToolCodegenServiceImpl implements ToolCodegenService {
93 106 }
94 107  
95 108 @Override
96   - public PageResult<ToolCodegenTableDO> getCodeGenTablePage(ToolCodegenTablePageReqVO pageReqVO) {
  109 + public void syncCodegen(Long tableId) {
  110 + // 校验是否已经存在
  111 + ToolCodegenTableDO table = codegenTableMapper.selectById(tableId);
  112 + if (table == null) {
  113 + throw new RuntimeException(""); // TODO
  114 + }
  115 + // 从数据库中,获得数据库表结构
  116 + List<ToolSchemaColumnDO> schemaColumns = schemaColumnMapper.selectListByTableName(table.getTableName());
  117 + if (CollUtil.isEmpty(schemaColumns)) {
  118 + throw new RuntimeException(""); // TODO
  119 + }
  120 + Set<String> schemaColumnNames = CollectionUtils.convertSet(schemaColumns, ToolSchemaColumnDO::getColumnName);
  121 +
  122 + // 构建 ToolCodegenColumnDO 数组,只同步新增的字段
  123 + List<ToolCodegenColumnDO> codegenColumns = codegenColumnMapper.selectListByTableId(tableId);
  124 + Set<String> codegenColumnNames = CollectionUtils.convertSet(codegenColumns, ToolCodegenColumnDO::getColumnName);
  125 + // 移除已经存在的字段
  126 + schemaColumns.removeIf(column -> codegenColumnNames.contains(column.getColumnName()));
  127 + // 计算需要删除的字段
  128 + Set<Long> deleteColumnIds = codegenColumns.stream().filter(column -> !schemaColumnNames.contains(column.getColumnName()))
  129 + .map(ToolCodegenColumnDO::getId).collect(Collectors.toSet());
  130 + if (CollUtil.isEmpty(schemaColumns) && CollUtil.isEmpty(deleteColumnIds)) {
  131 + throw new RuntimeException(""); // TODO
  132 + }
  133 +
  134 + // 插入新增的字段
  135 + List<ToolCodegenColumnDO> columns = codegenBuilder.buildColumns(schemaColumns);
  136 + columns.forEach(column -> {
  137 + column.setTableId(table.getId());
  138 + codegenColumnMapper.insert(column); // TODO 批量插入
  139 + });
  140 + // 删除不存在的字段
  141 + codegenColumnMapper.deleteBatchIds(deleteColumnIds);
  142 + }
  143 +
  144 + @Override
  145 + @Transactional
  146 + public void deleteCodegen(Long tableId) {
  147 + // 校验是否已经存在
  148 + if (codegenTableMapper.selectById(tableId) == null) {
  149 + throw new RuntimeException(""); // TODO
  150 + }
  151 +
  152 + // 删除 table 表定义
  153 + codegenTableMapper.deleteById(tableId);
  154 + // 删除 column 字段定义
  155 + codegenColumnMapper.deleteListByTableId(tableId);
  156 + }
  157 +
  158 + @Override
  159 + public PageResult<ToolCodegenTableDO> getCodegenTablePage(ToolCodegenTablePageReqVO pageReqVO) {
97 160 return codegenTableMapper.selectPage(pageReqVO);
98 161 }
99 162  
100 163 @Override
101   - public ToolCodegenTableDO getCodeGenTablePage(Long id) {
  164 + public ToolCodegenTableDO getCodegenTablePage(Long id) {
102 165 return codegenTableMapper.selectById(id);
103 166 }
104 167  
105 168 @Override
  169 + public List<ToolCodegenTableDO> getCodeGenTableList() {
  170 + return codegenTableMapper.selectList();
  171 + }
  172 +
  173 + @Override
106 174 public List<ToolCodegenColumnDO> getCodegenColumnListByTableId(Long tableId) {
107 175 return codegenColumnMapper.selectListByTableId(tableId);
108 176 }
... ... @@ -128,4 +196,24 @@ public class ToolCodegenServiceImpl implements ToolCodegenService {
128 196 return schemaTableMapper.selectList(codegenProperties.getDbSchemas(), tableName, tableComment);
129 197 }
130 198  
  199 +// /**
  200 +// * 修改保存参数校验
  201 +// *
  202 +// * @param genTable 业务信息
  203 +// */
  204 +// @Override
  205 +// public void validateEdit(GenTable genTable) {
  206 +// if (GenConstants.TPL_TREE.equals(genTable.getTplCategory())) {
  207 +// String options = JSON.toJSONString(genTable.getParams());
  208 +// JSONObject paramsObj = JSONObject.parseObject(options);
  209 +// if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_CODE))) {
  210 +// throw new CustomException("树编码字段不能为空");
  211 +// } else if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_PARENT_CODE))) {
  212 +// throw new CustomException("树父编码字段不能为空");
  213 +// } else if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_NAME))) {
  214 +// throw new CustomException("树名称字段不能为空");
  215 +// }
  216 +// }
  217 +// }
  218 +
131 219 }
... ...