GenTableColumnServiceImpl.java 12 KB

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