GenTableColumnServiceImpl.java 12 KB

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