GenTableColumnServiceImpl.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325
  1. package com.boman.gen.service;
  2. import com.boman.common.core.constant.UserConstants;
  3. import com.boman.common.core.text.Convert;
  4. import com.boman.common.core.utils.DateUtils;
  5. import com.boman.common.core.utils.SecurityUtils;
  6. import com.boman.common.core.utils.StringUtils;
  7. import com.boman.common.core.utils.obj.ObjectUtils;
  8. import com.boman.common.log.enums.BusinessType;
  9. import com.boman.domain.constant.FormDataConstant;
  10. import com.boman.domain.GenTable;
  11. import com.boman.domain.GenTableColumn;
  12. import com.boman.domain.TableSql;
  13. import com.boman.gen.mapper.GenTableColumnMapper;
  14. import com.boman.gen.mapper.GenTableMapper;
  15. import com.boman.gen.mapper.TableSqlMapper;
  16. import com.google.common.collect.Maps;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.scheduling.annotation.Async;
  19. import org.springframework.stereotype.Service;
  20. import org.springframework.web.client.RestTemplate;
  21. import javax.annotation.Resource;
  22. import java.util.ArrayList;
  23. import java.util.Collections;
  24. import java.util.List;
  25. import java.util.Map;
  26. import java.util.stream.Collectors;
  27. /**
  28. * 业务字段 服务层实现
  29. *
  30. * @author ruoyi
  31. */
  32. @Service
  33. public class GenTableColumnServiceImpl implements IGenTableColumnService {
  34. @Autowired
  35. private GenTableColumnMapper genTableColumnMapper;
  36. @Autowired
  37. private GenTableMapper genTableMapper;
  38. @Autowired
  39. private TableSqlMapper tableSqlMapper;
  40. /**
  41. * 查询业务字段列表
  42. *
  43. * @param tableId 业务字段编号
  44. * @return 业务字段集合
  45. */
  46. @Override
  47. public List<GenTableColumn> selectGenTableColumnListByTableId(Long tableId) {
  48. List<GenTableColumn> genTableColumns = genTableColumnMapper.selectGenTableColumnListByTableId(tableId);
  49. for (GenTableColumn genTableColumn : genTableColumns) {
  50. if (genTableColumn.getHrParentId() != null) {
  51. for (GenTableColumn tableColumn : genTableColumns) {
  52. if (genTableColumn.getHrParentId().equals(tableColumn.getId())) {
  53. genTableColumn.setHrParentName(tableColumn.getColumnName());
  54. break;
  55. }
  56. }
  57. }
  58. if (genTableColumn.getForeignKey() != null) {
  59. GenTableColumn genTableColumn1 = selectGenTableColumnListByColumnId(genTableColumn.getForeignKey());
  60. genTableColumn.setForeignKeyName(genTableColumn1.getColumnName());
  61. }
  62. }
  63. return genTableColumns;
  64. }
  65. @Override
  66. public List<GenTableColumn> selectGenTableColumnList(GenTableColumn genTableColumn) {
  67. return genTableColumnMapper.selectGenTableColumnList(genTableColumn);
  68. }
  69. /**
  70. * 根据gen_table_column的id查询字段对象
  71. *
  72. * @param columnId
  73. * @return
  74. */
  75. @Override
  76. public GenTableColumn selectGenTableColumnListByColumnId(Long columnId) {
  77. return genTableColumnMapper.selectGenTableColumnByColumnId(columnId);
  78. }
  79. /**
  80. * /**
  81. * 根据字段编号获取字段详细信息, 把此外键对应的名称返回给前台
  82. *
  83. * @param columnId pk
  84. */
  85. @Override
  86. public GenTableColumn getByIdWithForeignKey(Long columnId) {
  87. GenTableColumn tableColumn = selectGenTableColumnListByColumnId(columnId);
  88. Long foreignKey = tableColumn.getForeignKey();
  89. if (ObjectUtils.isNotEmpty(foreignKey)) {
  90. GenTableColumn fkTableColumn = selectGenTableColumnListByColumnId(foreignKey);
  91. String columnName = fkTableColumn.getColumnName();
  92. Map<String, Object> map = Maps.newHashMap();
  93. map.put(FormDataConstant.SINGLE_OBJ_NAME, foreignKey);
  94. map.put(FormDataConstant.SINGLE_OBJ_VALUE, columnName);
  95. tableColumn.setFkInfo(map);
  96. }
  97. return tableColumn;
  98. }
  99. /**
  100. * 查询业务字段列表
  101. *
  102. * @param tableIdList 业务字段编号List
  103. * @return 业务字段集合
  104. */
  105. @Override
  106. public List<GenTableColumn> listByTableIdList(List<Long> tableIdList) {
  107. if (null == tableIdList || tableIdList.isEmpty()) {
  108. return Collections.emptyList();
  109. }
  110. return genTableColumnMapper.listByTableIdList(tableIdList);
  111. }
  112. /**
  113. * 新增业务字段
  114. *
  115. * @param genTableColumn 业务字段信息
  116. * @return 结果
  117. */
  118. @Override
  119. public int insertGenTableColumn(GenTableColumn genTableColumn) {
  120. Long tableId = genTableColumn.getTableId();
  121. GenTable genTable = genTableMapper.selectGenTableById(tableId);
  122. genTableColumn.setTableColumnName(genTable.getTableName()+"."+genTableColumn.getColumnName());
  123. int i = genTableColumnMapper.insertGenTableColumn(genTableColumn);
  124. List<GenTableColumn> list = new ArrayList<>();
  125. list.add(genTableColumn);
  126. isAk(list);
  127. insertCreateLog(list, BusinessType.INSERT);
  128. //处理字段翻译器
  129. fieldTranslator(list);
  130. return i;
  131. }
  132. /**
  133. * 修改业务字段
  134. *
  135. * @param genTableColumn 业务字段信息
  136. * @return 结果
  137. */
  138. @Override
  139. public int updateGenTableColumn(GenTableColumn genTableColumn) {
  140. List<GenTableColumn> list = new ArrayList<>();
  141. list.add(genTableColumn);
  142. isAk(list);
  143. insertCreateLog(list, BusinessType.UPDATE);
  144. fieldTranslator(list);
  145. return genTableColumnMapper.updateGenTableColumn(genTableColumn);
  146. }
  147. /**
  148. * 批量修改genTableColumn
  149. *
  150. * @param genTableColumn
  151. * @return
  152. */
  153. @Override
  154. public void updateGenTableColumnList(List<GenTableColumn> genTableColumn) {
  155. isAk(genTableColumn);
  156. insertCreateLog(genTableColumn, BusinessType.UPDATE);
  157. for (GenTableColumn tableColumn : genTableColumn) {
  158. genTableColumnMapper.updateGenTableColumn(tableColumn);
  159. }
  160. }
  161. /**
  162. * 插入表sql日志
  163. */
  164. @Async
  165. public void insertCreateLog(List<GenTableColumn> genTableColumnList, BusinessType type) {
  166. GenTable genTable = genTableMapper.selectGenTableById(genTableColumnList.get(0).getTableId());
  167. TableSql tableSql = tableSqlMapper.selectTableSqlByTableId(genTableColumnList.get(0).getTableId());
  168. //新增业务字段的同时新增一条建表sql修改日志
  169. String createLog = "";
  170. if (tableSql != null) {
  171. createLog = tableSql.getCreateLog();
  172. }
  173. StringBuffer sb = new StringBuffer(createLog);
  174. for (GenTableColumn genTableColumn : genTableColumnList) {
  175. //ALTER TABLE table_name ADD COLUMN column_name VARCHAR(100) DEFAULT NULL COMMENT '新加字段';
  176. sb.append("\r\n").append(DateUtils.getTime()).append(" ").append(SecurityUtils.getUsername()).append(" ALTER TABLE ").append(genTable.getTableName());
  177. if (BusinessType.INSERT.equals(type)) {
  178. sb.append(" ADD COLUMN ").append(genTableColumn.getColumnName()).append(" ").append(genTableColumn.getColumnType());
  179. sb = genTableColumn.getDefaultValue() == null ? sb.append(" DEFAULT NULL COMMENT ") : sb.append(" DEFAULT '").append(genTableColumn.getDefaultValue()).append("' COMMENT '");
  180. sb.append(genTableColumn.getColumnComment()).append("';");
  181. } else if (BusinessType.UPDATE.equals(type)) {
  182. sb.append(" MODIFY ").append(genTableColumn.getColumnName()).append(" ").append(genTableColumn.getColumnType()).append(";");
  183. } else if (BusinessType.DELETE.equals(type)) {
  184. sb.append(" DROP ").append(genTableColumn.getColumnName()).append(";");
  185. }
  186. }
  187. if (tableSql != null) {
  188. tableSql.setCreateLog(sb.toString());
  189. tableSqlMapper.updateTableSql(tableSql);
  190. }
  191. }
  192. /**
  193. * 判断对象是否设置显示和输入字段
  194. *
  195. * @param genTableColumnList
  196. */
  197. @Async
  198. public void isAk(List<GenTableColumn> genTableColumnList) {
  199. GenTable genTable = new GenTable();
  200. for (GenTableColumn genTableColumn : genTableColumnList) {
  201. //是否是输入
  202. String isIn = genTableColumn.getIsIn();
  203. //是否是显示
  204. String isOut = genTableColumn.getIsOut();
  205. //查询出该表所有是输入或者是显示的字段
  206. List<GenTableColumn> genTableColumns = genTableColumnMapper.selectGenTableColumnIsListByTableId(genTableColumn.getTableId());
  207. if (UserConstants.YES.equals(isIn)) {
  208. //判断是否已经存在输入字段且不是同一个字段
  209. if (genTableColumns.size() > 0) {
  210. for (GenTableColumn tableColumn : genTableColumns) {
  211. if (UserConstants.YES.equals(tableColumn.getIsIn()) && !tableColumn.getId().equals(genTableColumn.getId())) {
  212. tableColumn.setIsIn("N");
  213. genTableColumnMapper.updateGenTableColumn(tableColumn);
  214. break;
  215. }
  216. }
  217. }
  218. genTable.setId(genTableColumn.getTableId());
  219. genTable.setAkColumn(genTableColumn.getId());
  220. }
  221. if (UserConstants.YES.equals(isOut)) {
  222. //判断是否已经存在显示字段且不是同一个字段
  223. if (genTableColumns.size() > 0) {
  224. for (GenTableColumn tableColumn : genTableColumns) {
  225. if (UserConstants.YES.equals(tableColumn.getIsOut()) && !tableColumn.getId().equals(genTableColumn.getId())) {
  226. tableColumn.setIsOut("N");
  227. genTableColumnMapper.updateGenTableColumn(tableColumn);
  228. break;
  229. }
  230. }
  231. genTable.setId(genTableColumn.getTableId());
  232. genTable.setDkColumn(genTableColumn.getId());
  233. }
  234. }
  235. }
  236. if (genTable.getId() != null) {
  237. genTableMapper.updateGenTable(genTable);
  238. } else {
  239. //表明没有显示和输入字段更新到gen表上
  240. genTableMapper.updateGenTableColumnNull(genTableColumnList.get(0).getTableId());
  241. }
  242. }
  243. /**
  244. * 处理字段翻译器
  245. * @param genTableColumnList
  246. */
  247. @Async
  248. public void fieldTranslator (List<GenTableColumn> genTableColumnList) {
  249. for (GenTableColumn genTableColumn : genTableColumnList) {
  250. String fieldTranslator = genTableColumn.getFieldTranslator();
  251. if (StringUtils.isNotBlank(fieldTranslator)){
  252. RestTemplate restTemplate = new RestTemplate();
  253. restTemplate.postForObject("http://" + fieldTranslator, genTableColumn, GenTableColumn.class);
  254. }
  255. }
  256. }
  257. /**
  258. * 删除业务字段对象
  259. *
  260. * @param ids 表id
  261. * @return 结果
  262. */
  263. @Override
  264. public int deleteGenTableColumnByIds(String ids) {
  265. return genTableColumnMapper.deleteGenTableColumnByIds(Convert.toLongArray(ids));
  266. }
  267. /**
  268. * 删除业务字段对象
  269. *
  270. * @param ids 字段id
  271. * @return
  272. */
  273. @Override
  274. public int deleteGenTableColumnByColumnIds(String ids) {
  275. Long[] longs = Convert.toLongArray(ids);
  276. List<GenTableColumn> list = new ArrayList<>();
  277. for (Long aLong : longs) {
  278. GenTableColumn genTableColumn = genTableColumnMapper.selectGenTableColumnByColumnId(aLong);
  279. list.add(genTableColumn);
  280. }
  281. insertCreateLog(list, BusinessType.DELETE);
  282. return genTableColumnMapper.deleteGenTableColumnByColumnIds(Convert.toLongArray(ids));
  283. }
  284. /**
  285. * 校验column_name是否重复
  286. *
  287. * @param genTableColumn
  288. * @return
  289. */
  290. @Override
  291. public String checkColumnNameUnique(GenTableColumn genTableColumn) {
  292. Long columnId = StringUtils.isNull(genTableColumn.getId()) ? -1L : genTableColumn.getId();
  293. GenTableColumn column = genTableColumnMapper.checkColumnNameUnique(genTableColumn);
  294. if (StringUtils.isNotNull(column) && !column.getId().equals(columnId)) {
  295. return UserConstants.NOT_UNIQUE;
  296. }
  297. return UserConstants.UNIQUE;
  298. }
  299. }