GenTableServiceImpl.java 24 KB

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