TableSqlServiceImpl.java 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. package com.boman.gen.service;
  2. import com.boman.common.core.constant.UserConstants;
  3. import com.boman.common.core.utils.DateUtils;
  4. import com.boman.common.core.utils.SecurityUtils;
  5. import com.boman.common.core.utils.StringUtils;
  6. import com.boman.common.core.utils.obj.ObjectUtils;
  7. import com.boman.common.core.web.domain.AjaxResult;
  8. import com.boman.gen.domain.GenTable;
  9. import com.boman.gen.domain.GenTableColumn;
  10. import com.boman.gen.domain.TableSql;
  11. import com.boman.gen.mapper.GenTableColumnMapper;
  12. import com.boman.gen.mapper.GenTableMapper;
  13. import com.boman.gen.mapper.TableSqlMapper;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.dao.DataAccessException;
  16. import org.springframework.jdbc.core.JdbcTemplate;
  17. import org.springframework.stereotype.Service;
  18. import java.util.List;
  19. /**
  20. * @author tjf
  21. * @Date: 2021/04/14/10:43
  22. */
  23. @Service
  24. public class TableSqlServiceImpl implements ITableSqlService {
  25. @Autowired
  26. private TableSqlMapper tableSqlMapper;
  27. @Autowired
  28. private GenTableColumnMapper genTableColumnMapper;
  29. @Autowired
  30. private GenTableMapper genTableMapper;
  31. @Autowired
  32. private JdbcTemplate jdbcTemplate;
  33. /**
  34. * 创建sql语句
  35. *
  36. * @param tableSql
  37. * @return
  38. */
  39. @Override
  40. public AjaxResult insertTableSql(TableSql tableSql) {
  41. Long tableId = tableSql.getTableId();
  42. if (tableId == null) {
  43. return AjaxResult.error("缺少表id");
  44. }
  45. GenTable genTable = genTableMapper.selectGenTableById(tableSql.getTableId());
  46. String tableName = genTable.getTableName();
  47. tableSql.setCreateSql(createSql(tableSql, tableName));
  48. tableSql.setCreateBy(SecurityUtils.getUsername());
  49. tableSql.setCreateLog(DateUtils.getTime() + " " + SecurityUtils.getUsername() + " 创建表 " + tableName);
  50. tableSqlMapper.insertTableSql(tableSql);
  51. return AjaxResult.success();
  52. }
  53. /**
  54. * 刷新建表语句
  55. *
  56. * @param tableSql
  57. * @return
  58. */
  59. @Override
  60. public AjaxResult reloadTableSql(TableSql tableSql) {
  61. GenTable genTable = genTableMapper.selectGenTableById(tableSql.getTableId());
  62. String tableName = genTable.getTableName();
  63. tableSql.setCreateSql(createSql(tableSql, tableName));
  64. String createLog = tableSql.getCreateLog();
  65. StringBuffer sb = new StringBuffer(createLog);
  66. sb.append("\r\n").append(DateUtils.getTime()).append(" ").append(SecurityUtils.getUsername()).append("刷新创建语句");
  67. tableSql.setCreateLog(sb.toString());
  68. tableSql.setUpdateBy(SecurityUtils.getUsername());
  69. tableSqlMapper.updateTableSql(tableSql);
  70. return AjaxResult.success();
  71. }
  72. /**
  73. * 执行建表语句
  74. *
  75. * @param tableSql
  76. * @return
  77. */
  78. @Override
  79. public AjaxResult implementSql(TableSql tableSql) {
  80. String createSql = tableSql.getCreateSql();
  81. GenTable genTable = genTableMapper.selectGenTableById(tableSql.getTableId());
  82. try {
  83. int i = tableSqlMapper.testExists(genTable.getTableName());
  84. if (i >= 0){
  85. return AjaxResult.error("当前表已存在");
  86. }
  87. } catch (DataAccessException e) {
  88. try {
  89. jdbcTemplate.execute(createSql);
  90. String createLog = tableSql.getCreateLog();
  91. StringBuffer sb = new StringBuffer(createLog);
  92. sb.append("\r\n").append(DateUtils.getTime()).append(" ").append(SecurityUtils.getUsername()).append(" 执行建表语句");
  93. tableSql.setCreateLog(sb.toString());
  94. tableSqlMapper.updateTableSql(tableSql);
  95. } catch (DataAccessException ex) {
  96. ex.printStackTrace();
  97. return AjaxResult.error("语句有误");
  98. }
  99. }
  100. return AjaxResult.success();
  101. }
  102. /**
  103. * 查询建表SQL
  104. *
  105. * @param id
  106. * @return
  107. */
  108. @Override
  109. public AjaxResult selectTableSqlByTableId(Long id) {
  110. TableSql tableSql = tableSqlMapper.selectTableSqlByTableId(id);
  111. return AjaxResult.success(tableSql);
  112. }
  113. /**
  114. * 删除建表语句
  115. * @param ids
  116. * @return
  117. */
  118. @Override
  119. public int deleteTableSqlByTableIds(Long[] ids) {
  120. return tableSqlMapper.deleteTableSqlByTableIds(ids);
  121. }
  122. /**
  123. * 生成建表语句
  124. *
  125. * @param tableSql
  126. * @param tableName
  127. * @return
  128. */
  129. private String createSql(TableSql tableSql, String tableName) {
  130. //根据表id查询所有字段
  131. List<GenTableColumn> genTableColumns = genTableColumnMapper.selectGenTableColumnListByTableId(tableSql.getTableId());
  132. //定义主键id
  133. String primaryKey = null;
  134. //拼接建表语句
  135. StringBuffer sb = new StringBuffer("create table if not exists ");
  136. sb.append(tableName).append(" (\r\n");
  137. for (GenTableColumn genTableColumn : genTableColumns) {
  138. if (!"HR".equals(genTableColumn.getHtmlType())){
  139. sb.append(genTableColumn.getColumnName()).append(" ").append(genTableColumn.getColumnType());
  140. sb = genTableColumn.getDefaultValue() == null ? sb.append(" DEFAULT NULL COMMENT '") : sb.append(" DEFAULT '").append(genTableColumn.getDefaultValue()).append("' COMMENT '");
  141. sb.append(genTableColumn.getColumnComment()).append("'").append(",").append("\r\n");
  142. if (genTableColumn.getIsPk().equals(UserConstants.INCREMENT)) {
  143. primaryKey = genTableColumn.getColumnName();
  144. }
  145. }
  146. }
  147. if (StringUtils.isNotBlank(primaryKey)) {
  148. sb.append(" PRIMARY KEY (").append(primaryKey).append(" ) USING BTREE\r\n");
  149. }else {
  150. sb.replace(sb.lastIndexOf(","),sb.length(),"\r\n");
  151. }
  152. sb.append(") ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='").append(tableName).append("';");
  153. return sb.toString();
  154. }
  155. }