GenTableServiceImpl.java 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777
  1. package com.boman.gen.service;
  2. import java.awt.*;
  3. import java.io.ByteArrayOutputStream;
  4. import java.io.File;
  5. import java.io.IOException;
  6. import java.io.StringWriter;
  7. import java.lang.reflect.Array;
  8. import java.util.*;
  9. import java.util.List;
  10. import java.util.stream.Collectors;
  11. import java.util.zip.ZipEntry;
  12. import java.util.zip.ZipOutputStream;
  13. import com.boman.common.core.constant.UserConstants;
  14. import com.boman.common.core.text.Convert;
  15. import com.boman.common.core.utils.DateUtils;
  16. import com.boman.common.core.web.domain.AjaxResult;
  17. import com.boman.common.log.enums.BusinessType;
  18. import com.boman.domain.RoleEnum;
  19. import com.boman.domain.TableSql;
  20. import com.boman.gen.mapper.GenTableRelationMapper;
  21. import com.boman.system.api.RemoteSysMenuService;
  22. import com.boman.system.api.domain.SysMenu;
  23. import org.apache.commons.io.IOUtils;
  24. import org.apache.velocity.Template;
  25. import org.apache.velocity.VelocityContext;
  26. import org.apache.velocity.app.Velocity;
  27. import org.slf4j.Logger;
  28. import org.slf4j.LoggerFactory;
  29. import org.springframework.beans.factory.annotation.Autowired;
  30. import org.springframework.stereotype.Service;
  31. import org.springframework.transaction.annotation.Transactional;
  32. import com.alibaba.fastjson.JSON;
  33. import com.alibaba.fastjson.JSONObject;
  34. import com.boman.common.core.constant.Constants;
  35. import com.boman.common.core.constant.GenConstants;
  36. import com.boman.common.core.exception.CustomException;
  37. import com.boman.common.core.text.CharsetKit;
  38. import com.boman.common.core.utils.SecurityUtils;
  39. import com.boman.common.core.utils.StringUtils;
  40. import com.boman.common.core.utils.file.FileUtils;
  41. import com.boman.domain.GenTable;
  42. import com.boman.domain.GenTableColumn;
  43. import com.boman.gen.mapper.GenTableColumnMapper;
  44. import com.boman.gen.mapper.GenTableMapper;
  45. import com.boman.gen.util.GenUtils;
  46. import com.boman.gen.util.VelocityInitializer;
  47. import com.boman.gen.util.VelocityUtils;
  48. import javax.validation.constraints.NotBlank;
  49. import javax.validation.constraints.Size;
  50. /**
  51. * 业务 服务层实现
  52. *
  53. * @author ruoyi
  54. */
  55. @Service
  56. public class GenTableServiceImpl implements IGenTableService {
  57. private static final Logger log = LoggerFactory.getLogger(GenTableServiceImpl.class);
  58. @Autowired
  59. private GenTableMapper genTableMapper;
  60. @Autowired
  61. private GenTableColumnMapper genTableColumnMapper;
  62. @Autowired
  63. private RemoteSysMenuService remoteSysMenuService;
  64. @Autowired
  65. private ITableSqlService tableSqlService;
  66. @Autowired
  67. private IGenTableColumnService tableColumnService;
  68. @Autowired
  69. private GenTableRelationMapper genTableRelationMapper;
  70. /**
  71. * 查询业务信息
  72. *
  73. * @param id 业务ID
  74. * @return 业务信息
  75. */
  76. @Override
  77. public GenTable selectGenTableById(Long id) {
  78. GenTable genTable = genTableMapper.selectGenTableById(id);
  79. Long tablePrimaryKey = genTable.getTablePrimaryKey();
  80. Long akColumn = genTable.getAkColumn();
  81. Long dkColumn = genTable.getDkColumn();
  82. List<GenTableColumn> columns = genTable.getColumns();
  83. int index = 0;
  84. for (GenTableColumn column : columns) {
  85. Long columnId = column.getId();
  86. if (tablePrimaryKey != null && tablePrimaryKey.equals(columnId)) {
  87. genTable.setTablePrimaryKeyName(column.getColumnName());
  88. index++;
  89. }
  90. if (akColumn != null && akColumn.equals(columnId)) {
  91. genTable.setAkColumnName(column.getColumnName());
  92. index++;
  93. }
  94. if (dkColumn != null && dkColumn.equals(columnId)) {
  95. genTable.setDkColumnName(column.getColumnName());
  96. index++;
  97. }
  98. if (index == 3) {
  99. break;
  100. }
  101. }
  102. setTableFromOptions(genTable);
  103. return genTable;
  104. }
  105. @Override
  106. public GenTable getByTableId(Long id) {
  107. return genTableMapper.selectGenTableById(id);
  108. }
  109. /**
  110. * 查询业务列表
  111. *
  112. * @param genTable 业务信息
  113. * @return 业务集合
  114. */
  115. @Override
  116. public List<GenTable> selectGenTableList(GenTable genTable) {
  117. List<GenTable> genTables = genTableMapper.selectGenTableList(genTable);
  118. return genTables;
  119. }
  120. /**
  121. * 查询据库列表
  122. *
  123. * @param genTable 业务信息
  124. * @return 数据库表集合
  125. */
  126. @Override
  127. public List<GenTable> selectDbTableList(GenTable genTable) {
  128. return genTableMapper.selectDbTableList(genTable);
  129. }
  130. /**
  131. * 查询据库列表
  132. *
  133. * @param tableNames 表名称组
  134. * @return 数据库表集合
  135. */
  136. @Override
  137. public List<GenTable> selectDbTableListByNames(String[] tableNames) {
  138. return genTableMapper.selectDbTableListByNames(tableNames);
  139. }
  140. /**
  141. * 查询表名称业务信息
  142. *
  143. * @param tableName 表名称
  144. * @return 业务信息
  145. */
  146. @Override
  147. public GenTable selectGenTableByName(String tableName) {
  148. return genTableMapper.selectGenTableByName(tableName);
  149. }
  150. /**
  151. * 查询所有表信息
  152. *
  153. * @return 表信息集合
  154. */
  155. @Override
  156. public List<GenTable> selectGenTableAll() {
  157. return genTableMapper.selectGenTableAll();
  158. }
  159. /**
  160. * 修改业务
  161. *
  162. * @param genTable 业务信息
  163. * @return 结果
  164. */
  165. @Override
  166. @Transactional
  167. public void updateGenTable(GenTable genTable) {
  168. String updateType = genTable.getUpdateType();
  169. if (UserConstants.UPLOAD_TYPE.equals(updateType)) {
  170. String options = JSON.toJSONString(genTable.getParams());
  171. genTable.setOptions(options);
  172. isMenu(genTable, BusinessType.UPDATE);
  173. genTableMapper.updateGenTable(genTable);
  174. }
  175. if (UserConstants.UPLOAD_TYPE_TWO.equals(updateType)) {
  176. List<GenTableColumn> columns = genTable.getColumns();
  177. if (columns.size() > 0){
  178. tableColumnService.updateGenTableColumnList(columns);
  179. }
  180. }
  181. }
  182. /**
  183. * 删除业务对象
  184. *
  185. * @param tableIds 需要删除的数据ID
  186. * @return 结果
  187. */
  188. @Override
  189. @Transactional(rollbackFor = Exception.class)
  190. public void deleteGenTableByIds(Long[] tableIds) {
  191. genTableMapper.deleteGenTableByIds(tableIds);
  192. genTableColumnMapper.deleteGenTableColumnByIds(tableIds);
  193. tableSqlService.deleteTableSqlByTableIds(tableIds);
  194. //删除关联关系
  195. genTableRelationMapper.deleteGenTableRelationByParentId(tableIds);
  196. }
  197. /**
  198. * 导入表结构
  199. *
  200. * @param tableList 导入表列表
  201. */
  202. @Override
  203. @Transactional
  204. public void importGenTable(List<GenTable> tableList) {
  205. String operName = SecurityUtils.getUsername();
  206. try {
  207. for (GenTable table : tableList) {
  208. String tableName = table.getTableName();
  209. GenUtils.initTable(table, operName);
  210. int row = genTableMapper.insertGenTable(table);
  211. if (row > 0) {
  212. // 保存列信息
  213. List<GenTableColumn> genTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName);
  214. for (GenTableColumn column : genTableColumns) {
  215. GenUtils.initColumnField(column, table);
  216. genTableColumnMapper.insertGenTableColumn(column);
  217. }
  218. //插入一条数据库建表语句数据
  219. TableSql tableSql = new TableSql();
  220. tableSql.setTableId(table.getId());
  221. tableSqlService.insertTableSql(tableSql);
  222. }
  223. }
  224. } catch (Exception e) {
  225. throw new CustomException("导入失败:" + e.getMessage());
  226. }
  227. }
  228. /**
  229. * 预览代码
  230. *
  231. * @param tableId 表编号
  232. * @return 预览数据列表
  233. */
  234. @Override
  235. public Map<String, String> previewCode(Long tableId) {
  236. Map<String, String> dataMap = new LinkedHashMap<>();
  237. // 查询表信息
  238. GenTable table = genTableMapper.selectGenTableById(tableId);
  239. // 设置主子表信息
  240. setSubTable(table);
  241. // 设置主键列信息
  242. setPkColumn(table);
  243. VelocityInitializer.initVelocity();
  244. VelocityContext context = VelocityUtils.prepareContext(table);
  245. // 获取模板列表
  246. List<String> templates = VelocityUtils.getTemplateList(table.getTplCategory());
  247. for (String template : templates) {
  248. // 渲染模板
  249. StringWriter sw = new StringWriter();
  250. Template tpl = Velocity.getTemplate(template, Constants.UTF8);
  251. tpl.merge(context, sw);
  252. dataMap.put(template, sw.toString());
  253. }
  254. return dataMap;
  255. }
  256. /**
  257. * 生成代码(下载方式)
  258. *
  259. * @param tableName 表名称
  260. * @return 数据
  261. */
  262. @Override
  263. public byte[] downloadCode(String tableName) {
  264. ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
  265. ZipOutputStream zip = new ZipOutputStream(outputStream);
  266. generatorCode(tableName, zip);
  267. IOUtils.closeQuietly(zip);
  268. return outputStream.toByteArray();
  269. }
  270. /**
  271. * 生成代码(自定义路径)
  272. *
  273. * @param tableName 表名称
  274. */
  275. @Override
  276. public void generatorCode(String tableName) {
  277. // 查询表信息
  278. GenTable table = genTableMapper.selectGenTableByName(tableName);
  279. // 设置主子表信息
  280. setSubTable(table);
  281. // 设置主键列信息
  282. setPkColumn(table);
  283. VelocityInitializer.initVelocity();
  284. VelocityContext context = VelocityUtils.prepareContext(table);
  285. // 获取模板列表
  286. List<String> templates = VelocityUtils.getTemplateList(table.getTplCategory());
  287. for (String template : templates) {
  288. if (!StringUtils.containsAny(template, "sql.vm", "api.js.vm", "index.vue.vm", "index-tree.vue.vm")) {
  289. // 渲染模板
  290. StringWriter sw = new StringWriter();
  291. Template tpl = Velocity.getTemplate(template, Constants.UTF8);
  292. tpl.merge(context, sw);
  293. try {
  294. String path = getGenPath(table, template);
  295. FileUtils.writeStringToFile(new File(path), sw.toString(), CharsetKit.UTF_8);
  296. } catch (IOException e) {
  297. throw new CustomException("渲染模板失败,表名:" + table.getTableName());
  298. }
  299. }
  300. }
  301. }
  302. /**
  303. * 同步数据库
  304. *
  305. * @param tableName 表名称
  306. */
  307. @Override
  308. @Transactional(rollbackFor = Exception.class)
  309. public void synchDb(String tableName) {
  310. GenTable table = genTableMapper.selectGenTableByName(tableName);
  311. //获取表字段集合
  312. List<GenTableColumn> tableColumns = table.getColumns();
  313. //获取列名称集合
  314. List<String> tableColumnNames = tableColumns.stream().map(GenTableColumn::getColumnName).collect(Collectors.toList());
  315. //根据表名称查询原列信息
  316. List<GenTableColumn> dbTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName);
  317. if (StringUtils.isEmpty(dbTableColumns)) {
  318. throw new CustomException("同步数据失败,原表结构不存在");
  319. }
  320. //获取原表列名称集合
  321. List<String> dbTableColumnNames = dbTableColumns.stream().map(GenTableColumn::getColumnName).collect(Collectors.toList());
  322. dbTableColumns.forEach(column -> {
  323. if (!tableColumnNames.contains(column.getColumnName())) {
  324. GenUtils.initColumnField(column, table);
  325. genTableColumnMapper.insertGenTableColumn(column);
  326. }
  327. });
  328. List<GenTableColumn> delColumns = tableColumns.stream().filter(column -> !dbTableColumnNames.contains(column.getColumnName())).collect(Collectors.toList());
  329. if (StringUtils.isNotEmpty(delColumns)) {
  330. genTableColumnMapper.deleteGenTableColumns(delColumns);
  331. }
  332. }
  333. /**
  334. * 批量生成代码(下载方式)
  335. *
  336. * @param tableNames 表数组
  337. * @return 数据
  338. */
  339. @Override
  340. public byte[] downloadCode(String[] tableNames) {
  341. ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
  342. ZipOutputStream zip = new ZipOutputStream(outputStream);
  343. for (String tableName : tableNames) {
  344. generatorCode(tableName, zip);
  345. }
  346. IOUtils.closeQuietly(zip);
  347. return outputStream.toByteArray();
  348. }
  349. /**
  350. * 查询表信息并生成代码
  351. */
  352. private void generatorCode(String tableName, ZipOutputStream zip) {
  353. // 查询表信息
  354. GenTable table = genTableMapper.selectGenTableByName(tableName);
  355. // 设置主子表信息
  356. setSubTable(table);
  357. // 设置主键列信息
  358. setPkColumn(table);
  359. VelocityInitializer.initVelocity();
  360. VelocityContext context = VelocityUtils.prepareContext(table);
  361. // 获取模板列表
  362. List<String> templates = VelocityUtils.getTemplateList(table.getTplCategory());
  363. for (String template : templates) {
  364. // 渲染模板
  365. StringWriter sw = new StringWriter();
  366. Template tpl = Velocity.getTemplate(template, Constants.UTF8);
  367. tpl.merge(context, sw);
  368. try {
  369. // 添加到zip
  370. zip.putNextEntry(new ZipEntry(VelocityUtils.getFileName(template, table)));
  371. IOUtils.write(sw.toString(), zip, Constants.UTF8);
  372. IOUtils.closeQuietly(sw);
  373. zip.flush();
  374. zip.closeEntry();
  375. } catch (IOException e) {
  376. log.error("渲染模板失败,表名:" + table.getTableName(), e);
  377. }
  378. }
  379. }
  380. /**
  381. * 修改保存参数校验
  382. *
  383. * @param genTable 业务信息
  384. */
  385. @Override
  386. public void validateEdit(GenTable genTable) {
  387. if (GenConstants.TPL_TREE.equals(genTable.getTplCategory())) {
  388. String options = JSON.toJSONString(genTable.getParams());
  389. JSONObject paramsObj = JSONObject.parseObject(options);
  390. if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_CODE))) {
  391. throw new CustomException("树编码字段不能为空");
  392. } else if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_PARENT_CODE))) {
  393. throw new CustomException("树父编码字段不能为空");
  394. } else if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_NAME))) {
  395. throw new CustomException("树名称字段不能为空");
  396. } else if (GenConstants.TPL_SUB.equals(genTable.getTplCategory())) {
  397. if (StringUtils.isEmpty(genTable.getSubTableName())) {
  398. throw new CustomException("关联子表的表名不能为空");
  399. } else if (StringUtils.isEmpty(genTable.getSubTableFkName())) {
  400. throw new CustomException("子表关联的外键名不能为空");
  401. }
  402. }
  403. }
  404. }
  405. /**
  406. * 代码生成业务表新增
  407. * 注意解决事务问题
  408. *
  409. * @param genTable
  410. * @return
  411. */
  412. @Override
  413. public AjaxResult insertGenTable(GenTable genTable) {
  414. String menuRole = genTable.getMenuRole();
  415. genTable.setMenuRole(menuRole.toUpperCase());
  416. //新增表成功的时候,新增字段公共字段
  417. int i = genTableMapper.insertGenTable(genTable);
  418. if (i > 0) {
  419. Long id = insertCommonColumn(genTable);
  420. if (id != -1) {
  421. genTable.setTablePrimaryKey(id);
  422. genTableMapper.updateGenTable(genTable);
  423. }
  424. //判断是否是菜单
  425. isMenu(genTable, BusinessType.INSERT);
  426. //新建表时新增建表语句
  427. TableSql tableSql = new TableSql();
  428. tableSql.setTableId(genTable.getId());
  429. tableSqlService.insertTableSql(tableSql);
  430. return AjaxResult.success();
  431. }
  432. return AjaxResult.error();
  433. }
  434. /**
  435. * 新建表时新增对应公共字段
  436. *
  437. * @param genTable
  438. */
  439. public Long insertCommonColumn(GenTable genTable) {
  440. int num = 1000;
  441. GenTableColumn genTableColumnLog = new GenTableColumn();
  442. GenTableColumn genTableColumnBaseInfo = new GenTableColumn();
  443. genTableColumnLog.setTableId(genTable.getId());
  444. genTableColumnLog.setColumnName("log_info");
  445. genTableColumnLog.setColumnComment("日志信息");
  446. genTableColumnLog.setColumnType("varchar(255)");
  447. genTableColumnLog.setIsPk("0");
  448. genTableColumnLog.setIsIncrement("0");
  449. genTableColumnLog.setIsInsert("1");
  450. genTableColumnLog.setQueryType("LIKE");
  451. genTableColumnLog.setHtmlType("input");
  452. genTableColumnLog.setSort(num);
  453. genTableColumnLog.setCreateBy("admin");
  454. genTableColumnLog.setHtmlType("HR");
  455. genTableColumnLog.setMask("000000");
  456. genTableColumnLog.setTableColumnName(genTable.getTableName()+".log_info");
  457. genTableColumnLog.setCreateTime(DateUtils.getNowDate());
  458. genTableColumnMapper.insertGenTableColumn(genTableColumnLog);
  459. genTableColumnBaseInfo.setTableId(genTable.getId());
  460. genTableColumnBaseInfo.setColumnName("base_info");
  461. genTableColumnBaseInfo.setColumnComment("基本信息");
  462. genTableColumnBaseInfo.setColumnType("varchar(255)");
  463. genTableColumnBaseInfo.setIsPk("0");
  464. genTableColumnBaseInfo.setIsIncrement("0");
  465. genTableColumnBaseInfo.setIsInsert("1");
  466. genTableColumnBaseInfo.setQueryType("LIKE");
  467. genTableColumnBaseInfo.setHtmlType("input");
  468. genTableColumnBaseInfo.setSort(20);
  469. genTableColumnBaseInfo.setCreateBy("admin");
  470. genTableColumnBaseInfo.setHtmlType("HR");
  471. genTableColumnBaseInfo.setMask("000000");
  472. genTableColumnBaseInfo.setTableColumnName(genTable.getTableName()+".base_info");
  473. genTableColumnBaseInfo.setCreateTime(DateUtils.getNowDate());
  474. genTableColumnMapper.insertGenTableColumn(genTableColumnBaseInfo);
  475. Long columnId = -1L;
  476. String[] columnName = new String[]{"id", "create_by", "create_time", "update_by", "update_time", "is_del"};
  477. String[] columnComment = new String[]{"编号", "创建者", "创建时间", "更新者", "更新时间", "是否删除"};
  478. String[] columnType = new String[]{"bigint(20)", "varchar(64)", "datetime", "varchar(64)", "datetime", "char(1)"};
  479. String[] htmlType = new String[]{"input", "input", "datetime", "input", "datetime", "select"};
  480. for (int i = 0; i < columnName.length; i++) {
  481. GenTableColumn genTableColumn = new GenTableColumn();
  482. genTableColumn.setTableId(genTable.getId());
  483. genTableColumn.setColumnName(columnName[i]);
  484. genTableColumn.setColumnComment(columnComment[i]);
  485. genTableColumn.setColumnType(columnType[i]);
  486. genTableColumn.setIsPk("0");
  487. genTableColumn.setIsInsert("1");
  488. genTableColumn.setQueryType("IN");
  489. genTableColumn.setHtmlType(htmlType[i]);
  490. genTableColumn.setSort(num + i);
  491. genTableColumn.setCreateBy("admin");
  492. genTableColumn.setCreateTime(DateUtils.getNowDate());
  493. genTableColumn.setHrParentId(genTableColumnLog.getId());
  494. genTableColumn.setMask("000000");
  495. genTableColumn.setTableColumnName(genTable.getTableName()+"."+columnName[i]);
  496. if (i == 0) {
  497. genTableColumn.setSort(1);
  498. genTableColumn.setIsPk("1");
  499. genTableColumn.setHrParentId(genTableColumnBaseInfo.getId());
  500. }
  501. if ("is_del".equals(columnName[i])) {
  502. genTableColumn.setDefaultValue("N");
  503. }
  504. genTableColumnMapper.insertGenTableColumn(genTableColumn);
  505. //获得id字段的id
  506. if (i == 0) {
  507. columnId = genTableColumn.getId();
  508. }
  509. }
  510. return columnId;
  511. }
  512. /**
  513. * 判断是否是菜单
  514. *
  515. * @param genTable
  516. */
  517. public void isMenu(GenTable genTable, BusinessType type) {
  518. String tableName = StringUtils.trim(genTable.getTableName());
  519. if (type.equals(BusinessType.UPDATE)) {
  520. //先查询之前是否是菜单
  521. GenTable genTableOld = genTableMapper.selectGenTableById(genTable.getId());
  522. if (UserConstants.ISMENU.equals(genTableOld.getIsMenu())) {
  523. //在判断是否新增/减少了菜单权限
  524. String menuRoleOld = genTableOld.getMenuRole();
  525. String menuRole = genTable.getMenuRole();
  526. String[] strings = Convert.toStrArray("", menuRole.toUpperCase());
  527. Set<String> set = new HashSet(Arrays.asList(strings));
  528. Set<String> setTwo = new HashSet(Arrays.asList(strings));
  529. String[] strArray = Convert.toStrArray("", menuRoleOld);
  530. List<String> stringsOld = new ArrayList<>(Arrays.asList(strArray));
  531. List<String> stringsOldTwo = new ArrayList<>(Arrays.asList(strArray));
  532. SysMenu sysMenu = new SysMenu();
  533. sysMenu.setSysTableName(tableName);
  534. List<SysMenu> sysMenus = remoteSysMenuService.listAll(sysMenu);
  535. //原先有,现在没有就删除
  536. stringsOld.removeAll(set);
  537. if (stringsOld.size() > 0) {
  538. for (String name : stringsOldTwo) {
  539. //获取到菜单名称
  540. String value = RoleEnum.getValue(name);
  541. for (SysMenu menu : sysMenus) {
  542. if (menu.getMenuName().equals(value)) {
  543. //删除
  544. remoteSysMenuService.remove(menu.getId());
  545. }
  546. }
  547. }
  548. }
  549. setTwo.removeAll(stringsOldTwo);
  550. if (setTwo.size() > 0) {
  551. //获取parentId
  552. Long parentId = 0L;
  553. for (SysMenu menu : sysMenus) {
  554. if ("C".equals(menu.getMenuType())) {
  555. parentId = menu.getId();
  556. break;
  557. }
  558. }
  559. //现在有,原先没有,就判断是否有被隐藏停用的/否则新增
  560. for (int i = 0; i < setTwo.size(); i++) {
  561. SysMenu menu = new SysMenu();
  562. menu.setParentId(parentId);
  563. String value = RoleEnum.getValue(strings[i]);
  564. if (StringUtils.isNotBlank(value)) {
  565. for (SysMenu sysMenu1 : sysMenus) {
  566. if (value.equals(sysMenu1.getMenuName())) {
  567. sysMenu1.setStatus("0");
  568. sysMenu1.setVisible("0");
  569. remoteSysMenuService.edit(sysMenu1);
  570. break;
  571. }
  572. }
  573. menu.setMenuName(value);
  574. menu.setOrderNum(String.valueOf(i + 1));
  575. menu.setMenuType("F");
  576. menu.setIcon("#");
  577. //路由
  578. menu.setPath("#");
  579. menu.setCreateBy(SecurityUtils.getUsername());
  580. menu.setSysTableName(tableName);
  581. remoteSysMenuService.add(menu);
  582. }
  583. }
  584. }
  585. }
  586. }
  587. String isMenu = genTable.getIsMenu();
  588. //是新增
  589. if (StringUtils.isNotBlank(isMenu) && isMenu.equals(UserConstants.ISMENU)) {
  590. SysMenu sysMenu = new SysMenu();
  591. sysMenu.setSysTableName(tableName);
  592. List<SysMenu> sysMenus = remoteSysMenuService.listAll(sysMenu);
  593. //判断当前表名是否生成过菜单
  594. if (sysMenus.size() == 0) {
  595. //生成主菜单
  596. //表描述当菜单名称
  597. sysMenu.setMenuName(genTable.getTableComment());
  598. sysMenu.setParentId(2007L);
  599. //路由地址(使用表名称)
  600. sysMenu.setPath(genTable.getTableName());
  601. //组件
  602. sysMenu.setComponent("system/surface/index");
  603. sysMenu.setMenuType("C");
  604. sysMenu.setOrderNum("0");
  605. sysMenu.setIcon("system");
  606. sysMenu.setCreateBy(SecurityUtils.getUsername());
  607. sysMenu.setStatus("1");
  608. AjaxResult add = remoteSysMenuService.add(sysMenu);
  609. Long parentId = 0L;
  610. if (add.size() > 2) {
  611. String id = String.valueOf(add.get("data"));
  612. parentId = Long.valueOf(id);
  613. }
  614. //获取菜单id
  615. String menuRole = genTable.getMenuRole();
  616. String[] strings = Convert.toStrArray("", menuRole);
  617. Set set = new HashSet(Arrays.asList(strings));
  618. strings = (String[]) set.toArray(new String[0]);
  619. if (strings.length > 0) {
  620. for (int i = 0; i < strings.length; i++) {
  621. SysMenu menu = new SysMenu();
  622. menu.setParentId(parentId);
  623. String value = RoleEnum.getValue(strings[i]);
  624. if (StringUtils.isNotBlank(value)) {
  625. menu.setMenuName(value);
  626. menu.setOrderNum(String.valueOf(i + 1));
  627. menu.setMenuType("F");
  628. menu.setIcon("#");
  629. //路由
  630. menu.setPath("#");
  631. menu.setCreateBy(SecurityUtils.getUsername());
  632. menu.setSysTableName(tableName);
  633. remoteSysMenuService.add(menu);
  634. }
  635. }
  636. }
  637. }
  638. }
  639. }
  640. /**
  641. * 设置主键列信息
  642. *
  643. * @param table 业务表信息
  644. */
  645. public void setPkColumn(GenTable table) {
  646. for (GenTableColumn column : table.getColumns()) {
  647. if (column.getIsPk().equals(UserConstants.INCREMENT)) {
  648. table.setPkColumn(column);
  649. break;
  650. }
  651. }
  652. if (StringUtils.isNull(table.getPkColumn())) {
  653. table.setPkColumn(table.getColumns().get(0));
  654. }
  655. if (GenConstants.TPL_SUB.equals(table.getTplCategory())) {
  656. for (GenTableColumn column : table.getSubTable().getColumns()) {
  657. if (column.getIsPk().equals(UserConstants.INCREMENT)) {
  658. table.getSubTable().setPkColumn(column);
  659. break;
  660. }
  661. }
  662. if (StringUtils.isNull(table.getSubTable().getPkColumn())) {
  663. table.getSubTable().setPkColumn(table.getSubTable().getColumns().get(0));
  664. }
  665. }
  666. }
  667. /**
  668. * 设置主子表信息
  669. *
  670. * @param table 业务表信息
  671. */
  672. public void setSubTable(GenTable table) {
  673. String subTableName = table.getSubTableName();
  674. if (StringUtils.isNotEmpty(subTableName)) {
  675. table.setSubTable(genTableMapper.selectGenTableByName(subTableName));
  676. }
  677. }
  678. /**
  679. * 设置代码生成其他选项值
  680. *
  681. * @param genTable 设置后的生成对象
  682. */
  683. public void setTableFromOptions(GenTable genTable) {
  684. JSONObject paramsObj = JSONObject.parseObject(genTable.getOptions());
  685. if (StringUtils.isNotNull(paramsObj)) {
  686. String treeCode = paramsObj.getString(GenConstants.TREE_CODE);
  687. String treeParentCode = paramsObj.getString(GenConstants.TREE_PARENT_CODE);
  688. String treeName = paramsObj.getString(GenConstants.TREE_NAME);
  689. String parentMenuId = paramsObj.getString(GenConstants.PARENT_MENU_ID);
  690. String parentMenuName = paramsObj.getString(GenConstants.PARENT_MENU_NAME);
  691. genTable.setTreeCode(treeCode);
  692. genTable.setTreeParentCode(treeParentCode);
  693. genTable.setTreeName(treeName);
  694. genTable.setParentMenuId(parentMenuId);
  695. genTable.setParentMenuName(parentMenuName);
  696. }
  697. }
  698. /**
  699. * 获取代码生成地址
  700. *
  701. * @param table 业务表信息
  702. * @param template 模板文件路径
  703. * @return 生成地址
  704. */
  705. public static String getGenPath(GenTable table, String template) {
  706. String genPath = table.getGenPath();
  707. if (StringUtils.equals(genPath, "/")) {
  708. return System.getProperty("user.dir") + File.separator + "src" + File.separator + VelocityUtils.getFileName(template, table);
  709. }
  710. return genPath + File.separator + VelocityUtils.getFileName(template, table);
  711. }
  712. /**
  713. * 校验表名称是否存在
  714. *
  715. * @param genTable
  716. * @return
  717. */
  718. @Override
  719. public String checkTableNameUnique(GenTable genTable) {
  720. List<GenTable> genTables = genTableMapper.selectGenTableList(genTable);
  721. if (genTables.size() > 0) {
  722. return UserConstants.NOT_UNIQUE;
  723. }
  724. return UserConstants.UNIQUE;
  725. }
  726. }