VisualAliasServiceImpl.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. package jnpf.base.service.impl;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4. import com.google.common.base.CaseFormat;
  5. import jnpf.base.entity.VisualAliasEntity;
  6. import jnpf.base.entity.VisualdevEntity;
  7. import jnpf.base.entity.VisualdevReleaseEntity;
  8. import jnpf.base.mapper.VisualAliasMapper;
  9. import jnpf.base.model.VisualAliasForm;
  10. import jnpf.base.service.SuperServiceImpl;
  11. import jnpf.base.service.VisualAliasService;
  12. import jnpf.base.service.VisualdevReleaseService;
  13. import jnpf.base.service.VisualdevService;
  14. import jnpf.base.util.common.AliasModel;
  15. import jnpf.constant.GenerateConstant;
  16. import jnpf.constant.MsgCode;
  17. import jnpf.exception.DataException;
  18. import jnpf.model.visualJson.TableFields;
  19. import jnpf.model.visualJson.TableModel;
  20. import jnpf.util.JsonUtil;
  21. import jnpf.util.RandomUtil;
  22. import jnpf.util.StringUtil;
  23. import jnpf.util.UserProvider;
  24. import org.apache.commons.collections4.CollectionUtils;
  25. import org.springframework.beans.factory.annotation.Autowired;
  26. import org.springframework.stereotype.Service;
  27. import org.springframework.transaction.annotation.Transactional;
  28. import java.util.*;
  29. import java.util.stream.Collectors;
  30. /**
  31. * @author JNPF开发平台组
  32. * @version v5.0.0
  33. * @copyright 引迈信息技术有限公司
  34. * @date 2024/4/13 14:05:48
  35. */
  36. @Service
  37. public class VisualAliasServiceImpl extends SuperServiceImpl<VisualAliasMapper, VisualAliasEntity> implements VisualAliasService {
  38. @Autowired
  39. private VisualdevReleaseService visualdevReleaseService;
  40. @Autowired
  41. private VisualdevService visualdevService;
  42. @Override
  43. public List<VisualAliasEntity> getList(String visualId) {
  44. QueryWrapper<VisualAliasEntity> queryWrapper = new QueryWrapper<>();
  45. queryWrapper.lambda().eq(VisualAliasEntity::getVisualId, visualId);
  46. return this.list(queryWrapper);
  47. }
  48. @Override
  49. public List<TableModel> getAliasInfo(String id) {
  50. VisualdevReleaseEntity visualdevEntity = visualdevReleaseService.getById(id);
  51. List<TableModel> tableModels = JsonUtil.getJsonToList(visualdevEntity.getVisualTables(), TableModel.class);
  52. List<VisualAliasEntity> list = this.getList(id);
  53. for (TableModel tableModel : tableModels) {
  54. tableModel.setComment(tableModel.getTableName());
  55. VisualAliasEntity tableAlias = list.stream().filter(t -> tableModel.getTable().equals(t.getTableName()) && t.getFieldName() == null).findFirst().orElse(null);
  56. if (tableAlias != null) {
  57. tableModel.setAliasName(tableAlias.getAliasName());
  58. }
  59. List<TableFields> fields = tableModel.getFields();
  60. List<TableFields> newFields = fields.stream().filter(t -> !GenerateConstant.SYS_KEYWORD.contains(t.getField().toLowerCase())).collect(Collectors.toList());
  61. for (TableFields field : newFields) {
  62. VisualAliasEntity fieldAlias = list.stream().filter(t -> tableModel.getTable().equals(t.getTableName()) && t.getFieldName() != null
  63. && field.getField().equals(t.getFieldName())).findFirst().orElse(null);
  64. if (fieldAlias != null) {
  65. field.setAliasName(fieldAlias.getAliasName());
  66. }
  67. }
  68. tableModel.setFields(newFields);
  69. }
  70. return tableModels;
  71. }
  72. @Transactional
  73. @Override
  74. public void aliasSave(String id, VisualAliasForm form) {
  75. List<TableModel> tableList = form.getTableList();
  76. List<VisualAliasEntity> list = this.getList(id);
  77. List<String> tableNameList = new ArrayList<>();
  78. List<String> listKeyword = GenerateConstant.getAllKeyWord();
  79. String regex = "[a-zA-Z_][a-zA-Z0-9_]*";
  80. for (TableModel tableModel : tableList) {
  81. VisualAliasEntity tableAlias = list.stream().filter(t -> tableModel.getTable().equals(t.getTableName()) && t.getFieldName() == null).findFirst().orElse(null);
  82. if (StringUtil.isNotEmpty(tableModel.getAliasName())) {
  83. if (tableNameList.contains(tableModel.getAliasName())) {
  84. throw new DataException(tableModel.getAliasName() + MsgCode.VS018.get());
  85. } else {
  86. tableNameList.add(tableModel.getAliasName());
  87. }
  88. if (listKeyword.contains(tableModel.getAliasName().toLowerCase())) {
  89. throw new DataException(MsgCode.SYS128.get(tableModel.getTable() + "-" + tableModel.getAliasName()));
  90. }
  91. if (!tableModel.getAliasName().matches(regex)) {
  92. throw new DataException(MsgCode.VS021.get(tableModel.getTable()));
  93. }
  94. if (twoCharactesUpperCase(tableModel.getAliasName())) {
  95. throw new DataException(MsgCode.VS026.get());
  96. }
  97. if (tableAlias != null) {
  98. tableAlias.setAliasName(tableModel.getAliasName());
  99. } else {
  100. tableAlias = new VisualAliasEntity();
  101. tableAlias.setId(RandomUtil.uuId());
  102. tableAlias.setVisualId(id);
  103. tableAlias.setTableName(tableModel.getTable());
  104. tableAlias.setAliasName(tableModel.getAliasName());
  105. }
  106. this.saveOrUpdate(tableAlias);
  107. } else if (tableAlias != null) {
  108. this.removeById(tableAlias);
  109. }
  110. List<String> fieldNameList = new ArrayList<>();
  111. for (TableFields field : tableModel.getFields()) {
  112. VisualAliasEntity fieldAlias = list.stream().filter(t -> tableModel.getTable().equals(t.getTableName()) && t.getFieldName() != null
  113. && field.getField().equals(t.getFieldName())).findFirst().orElse(null);
  114. if (StringUtil.isNotEmpty(field.getAliasName())) {
  115. if (listKeyword.contains(field.getAliasName().toLowerCase())) {
  116. throw new DataException(MsgCode.SYS128.get(field.getField() + "-" + field.getAliasName()));
  117. }
  118. if (!field.getAliasName().matches(regex)) {
  119. throw new DataException(MsgCode.VS021.get(field.getField()));
  120. }
  121. if (twoCharactesUpperCase(field.getAliasName())) {
  122. throw new DataException(MsgCode.VS026.get());
  123. }
  124. if (fieldNameList.contains(field.getAliasName())) {
  125. throw new DataException(field.getAliasName() + MsgCode.VS020.get());
  126. } else {
  127. fieldNameList.add(field.getAliasName());
  128. }
  129. if (fieldAlias != null) {
  130. fieldAlias.setAliasName(field.getAliasName());
  131. } else {
  132. fieldAlias = new VisualAliasEntity();
  133. fieldAlias.setId(RandomUtil.uuId());
  134. fieldAlias.setVisualId(id);
  135. fieldAlias.setTableName(tableModel.getTable());
  136. fieldAlias.setFieldName(field.getField());
  137. fieldAlias.setAliasName(field.getAliasName());
  138. }
  139. this.saveOrUpdate(fieldAlias);
  140. } else if (fieldAlias != null) {
  141. this.removeById(fieldAlias);
  142. }
  143. }
  144. }
  145. }
  146. @Override
  147. public Map<String, AliasModel> getAllFiledsAlias(String id) {
  148. Map<String, AliasModel> tableMap = new HashMap<>();
  149. VisualdevReleaseEntity visualdevEntity = visualdevReleaseService.getById(id);
  150. List<TableModel> tableModels = JsonUtil.getJsonToList(visualdevEntity.getVisualTables(), TableModel.class);
  151. List<String> collect = tableModels.stream().map(TableModel::getTable).collect(Collectors.toList());
  152. //修改时有表不存在发布里补充
  153. VisualdevEntity ve = visualdevService.getById(id);
  154. List<TableModel> tableModels2 = StringUtil.isNotEmpty(ve.getVisualTables()) ? JsonUtil.getJsonToList(ve.getVisualTables(), TableModel.class) : Collections.EMPTY_LIST;
  155. tableModels.addAll(tableModels2.stream().filter(t -> !collect.contains(t.getTable())).collect(Collectors.toList()));
  156. List<VisualAliasEntity> list = this.getList(id);
  157. for (TableModel tableModel : tableModels) {
  158. AliasModel aliasModel = new AliasModel();
  159. aliasModel.setTableName(tableModel.getTable());
  160. VisualAliasEntity tableAlias = list.stream().filter(t -> tableModel.getTable().equals(t.getTableName()) && t.getFieldName() == null).findFirst().orElse(null);
  161. if (tableAlias != null) {
  162. aliasModel.setAliasName(tableAlias.getAliasName());
  163. } else {
  164. aliasModel.setAliasName(tableModel.getTable());
  165. }
  166. List<TableFields> fields = tableModel.getFields();
  167. Map<String, String> fieldMap = new HashMap<>();
  168. for (TableFields field : fields) {
  169. VisualAliasEntity fieldAlias = list.stream().filter(t -> tableModel.getTable().equals(t.getTableName()) && t.getFieldName() != null
  170. && field.getField().equals(t.getFieldName())).findFirst().orElse(null);
  171. if (fieldAlias != null) {
  172. fieldMap.put(field.getField(), fieldAlias.getAliasName());
  173. }
  174. //系统字段-以驼峰形式给别名
  175. else if (GenerateConstant.SYS_KEYWORD.contains(field.getField().toLowerCase())) {
  176. String name = field.getField().toLowerCase();
  177. name = name.startsWith("f_") ? name.substring(2) : name;
  178. String fieldAliasName = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, name);
  179. fieldMap.put(field.getField(), fieldAliasName);
  180. } else {
  181. String name = field.getField();
  182. String fieldAliasName = twoToLowerCase(name);
  183. fieldMap.put(field.getField(), fieldAliasName);
  184. }
  185. }
  186. aliasModel.setFieldsMap(fieldMap);
  187. tableMap.put(tableModel.getTable(), aliasModel);
  188. }
  189. return tableMap;
  190. }
  191. @Override
  192. public void copy(String visualId, String uuid) {
  193. List<VisualAliasEntity> list = this.getList(visualId);
  194. if (CollectionUtils.isNotEmpty(list)) {
  195. for (VisualAliasEntity entity : list) {
  196. VisualAliasEntity copy = BeanUtil.copyProperties(entity, VisualAliasEntity.class);
  197. copyEntity(copy, uuid);
  198. }
  199. }
  200. }
  201. @Override
  202. public void copyEntity(VisualAliasEntity copy, String visualId) {
  203. copy.setId(RandomUtil.uuId());
  204. copy.setVisualId(visualId);
  205. copy.setCreatorTime(new Date());
  206. copy.setCreatorUserId(UserProvider.getUser().getUserId());
  207. copy.setLastModifyUserId(null);
  208. copy.setLastModifyTime(null);
  209. this.save(copy);
  210. }
  211. @Override
  212. public void removeByVisualId(String visualId) {
  213. QueryWrapper<VisualAliasEntity> queryWrapper = new QueryWrapper<>();
  214. queryWrapper.lambda().eq(VisualAliasEntity::getVisualId, visualId);
  215. this.remove(queryWrapper);
  216. }
  217. /**
  218. * 判断前两字母是否大写
  219. *
  220. * @return
  221. */
  222. public boolean twoCharactesUpperCase(String name) {
  223. if (StringUtil.isEmpty(name)) {
  224. return false;
  225. }
  226. if (name.length() == 1) {
  227. return Character.isUpperCase(name.charAt(0));
  228. }
  229. if (name.length() >= 2) {
  230. return Character.isUpperCase(name.charAt(0)) || Character.isUpperCase(name.charAt(1));
  231. }
  232. return false;
  233. }
  234. /**
  235. * 两字母强制小写前
  236. *
  237. * @return
  238. */
  239. public String twoToLowerCase(String name) {
  240. if (StringUtil.isEmpty(name)) {
  241. return name;
  242. }
  243. name = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, name);
  244. if (name.length() <= 2) {
  245. return name.toLowerCase();
  246. }
  247. if (name.length() > 2) {
  248. return name.substring(0, 2).toLowerCase() + name.substring(2);
  249. }
  250. return name;
  251. }
  252. }