DataResourceFacade.java 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381
  1. package com.dragoninfo.dcuc.app.facade;
  2. import com.dragoninfo.dcuc.app.dto.dataresource.ChildResourceClassify;
  3. import com.dragoninfo.dcuc.app.dto.dataresource.ResourceClassify;
  4. import com.dragoninfo.dcuc.app.enumresources.DataResourceEnum;
  5. import com.dragoninfo.dcuc.app.service.IDataResourceService;
  6. import com.dragoninfo.dcuc.app.vo.*;
  7. import com.dragonsoft.duceap.commons.util.UUIDUtils;
  8. import com.dragonsoft.duceap.commons.util.enums.EnumUtils;
  9. import com.google.common.base.Joiner;
  10. import com.google.common.collect.Lists;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.web.bind.annotation.RequestMapping;
  13. import org.springframework.web.bind.annotation.RequestParam;
  14. import org.springframework.web.bind.annotation.RestController;
  15. import java.util.ArrayList;
  16. import java.util.List;
  17. import java.util.Optional;
  18. import java.util.stream.Collectors;
  19. /**
  20. * Created by lidr on 2021/4/14
  21. */
  22. @RestController
  23. @RequestMapping(value = "/dcuc/app/dataResourceFacade")
  24. public class DataResourceFacade implements IDataResourceFacade {
  25. public static final String ID_SEPARATOR = "|";
  26. /**
  27. * codeDataTypeStr分隔符
  28. */
  29. public static final String CODE_DATA_TYPE_SEPARATOR = "★";
  30. @Autowired
  31. private IDataResourceService dataResourceService;
  32. @Override
  33. public List<DataResourceClassifyVo> getAllDataResourceTree(@RequestParam("attrType") String attrType) {
  34. List<DataResourceClassifyVo> result = Lists.newArrayList();
  35. //列:数据安全级别 字段分类
  36. //表:数据分级 数据资源分类
  37. if ("TABLE".equals(attrType)) {
  38. result.add(getDataLevelTree());
  39. result.add(getDataClassifyTree());
  40. } else {
  41. result.add(getSecurityLevelTree());
  42. result.add(getFieldClassifyTree());
  43. }
  44. return result;
  45. }
  46. @Override
  47. public DataResourceClassifyVo getDataResourceTree(String typeCode) {
  48. DataResourceClassifyVo result = null;
  49. DataResourceEnum dataResourceEnum = Enum.valueOf(DataResourceEnum.class, typeCode);
  50. switch (dataResourceEnum){
  51. case DATA_CLASSIFY:
  52. result = getDataLevelTree();
  53. break;
  54. case COLUMN_CLASSIFY:
  55. result = getFieldClassifyTree();
  56. break;
  57. case DATA_SECURITY_LEVEL:
  58. result = getSecurityLevelTree();
  59. break;
  60. case DATA_RESOURCE_CLASSIFY:
  61. result = getDataClassifyTree();
  62. break;
  63. default:
  64. break;
  65. }
  66. return result;
  67. }
  68. /**
  69. * 数据分级树
  70. *
  71. * @return
  72. */
  73. private DataResourceClassifyVo getDataLevelTree() {
  74. DataResourceEnum dataResourceEnum = DataResourceEnum.DATA_CLASSIFY;
  75. DataResourceClassifyVo dataResourceClassifyVo = DataResourceClassifyVo.builder()
  76. .id(dataResourceEnum.getCode())
  77. .attrType(dataResourceEnum.getAttrType().getValue())
  78. .label(dataResourceEnum.getLabel())
  79. .build();
  80. DataResourceTreeVo dataLevelTreeVo = DataResourceTreeVo.builder()
  81. .id(dataResourceEnum.getCode())
  82. .label("全部")
  83. .code(dataResourceEnum.getCode())
  84. .treeNode(true)
  85. .build();
  86. dataLevelTreeVo.setChild(getFirstChildResourceClassifies(dataResourceService.getDataLevelList())
  87. .stream()
  88. .map(childResourceClassify -> DataResourceTreeVo.builder()
  89. .id(Joiner.on(ID_SEPARATOR).join(dataLevelTreeVo.getId(), childResourceClassify.getCodeValue()))
  90. .code(childResourceClassify.getCodeValue())
  91. .label(childResourceClassify.getCodeName())
  92. .dataType(childResourceClassify.getTypeCode())
  93. .codeDataTypeStr(UUIDUtils.getUUID() + CODE_DATA_TYPE_SEPARATOR + childResourceClassify.getCodeValue() + CODE_DATA_TYPE_SEPARATOR + childResourceClassify.getTypeCode())
  94. .treeNode(false)
  95. .pId(dataLevelTreeVo.getId()).build()
  96. ).collect(Collectors.toList())
  97. );
  98. dataResourceClassifyVo.setNodes(new ArrayList<DataResourceTreeVo>(){{add(dataLevelTreeVo);}});
  99. //设置总数量
  100. dataResourceClassifyVo.setTotal(dataLevelTreeVo.getChild().size());
  101. return dataResourceClassifyVo;
  102. }
  103. /**
  104. * 数据安全级别树
  105. *
  106. * @return
  107. */
  108. private DataResourceClassifyVo getSecurityLevelTree() {
  109. DataResourceEnum dataResourceEnum = DataResourceEnum.DATA_SECURITY_LEVEL;
  110. DataResourceClassifyVo dataResourceClassifyVo = DataResourceClassifyVo.builder()
  111. .id(dataResourceEnum.getCode())
  112. .attrType(dataResourceEnum.getAttrType().getValue())
  113. .label(dataResourceEnum.getLabel())
  114. .build();
  115. DataResourceTreeVo securityLevelTree = DataResourceTreeVo.builder()
  116. .id(dataResourceEnum.getCode())
  117. .label("全部")
  118. .code(dataResourceEnum.getCode())
  119. .treeNode(true)
  120. .build();
  121. securityLevelTree.setChild(getFirstChildResourceClassifies(dataResourceService.getSecurityLevelList())
  122. .stream()
  123. .map(childResourceClassify -> DataResourceTreeVo.builder()
  124. .id(Joiner.on(ID_SEPARATOR).join(securityLevelTree.getId(), childResourceClassify.getCodeValue()))
  125. .code(childResourceClassify.getCodeValue())
  126. .label(childResourceClassify.getCodeName())
  127. .dataType(childResourceClassify.getTypeCode())
  128. .codeDataTypeStr(UUIDUtils.getUUID() + CODE_DATA_TYPE_SEPARATOR + childResourceClassify.getCodeValue() + CODE_DATA_TYPE_SEPARATOR + childResourceClassify.getTypeCode())
  129. .treeNode(false)
  130. .pId(securityLevelTree.getId()).build()
  131. ).collect(Collectors.toList())
  132. );
  133. dataResourceClassifyVo.setNodes(new ArrayList<DataResourceTreeVo>(){{add(securityLevelTree);}} );
  134. //设置总数量
  135. dataResourceClassifyVo.setTotal(securityLevelTree.getChild().size());
  136. return dataResourceClassifyVo;
  137. }
  138. /**
  139. * 数据资源分类
  140. *
  141. * @return
  142. */
  143. private DataResourceClassifyVo getDataClassifyTree() {
  144. DataResourceEnum dataResourceEnum = DataResourceEnum.DATA_RESOURCE_CLASSIFY;
  145. DataResourceClassifyVo dataResourceClassifyVo = DataResourceClassifyVo.builder().id(dataResourceEnum.getCode())
  146. .attrType(dataResourceEnum.getAttrType().getValue()).label(dataResourceEnum.getLabel()).build();
  147. DataResourceTreeVo dataClassifyTree = DataResourceTreeVo.builder().id(dataResourceEnum.getCode()).label("全部")
  148. .code(dataResourceEnum.getCode()).treeNode(true).build();
  149. dataClassifyTree.setChild(getFirstChildResourceClassifies(dataResourceService.getDataClassifyList())
  150. .stream()
  151. .map(firstClassify -> {
  152. DataResourceTreeVo firstTreeVo = DataResourceTreeVo.builder()
  153. .id(Joiner.on(ID_SEPARATOR).join(dataClassifyTree.getId(), firstClassify.getCodeValue()))
  154. .code(firstClassify.getCodeValue())
  155. .label(firstClassify.getCodeName())
  156. .treeNode(true)
  157. .pId(dataClassifyTree.getId())
  158. .dataType(firstClassify.getTypeCode())
  159. .codeDataTypeStr(UUIDUtils.getUUID() + CODE_DATA_TYPE_SEPARATOR + firstClassify.getCodeValue() + CODE_DATA_TYPE_SEPARATOR + firstClassify.getTypeCode())
  160. .build();
  161. firstTreeVo.setChild(getFirstChildResourceClassifies(firstClassify.getChildrenType()).stream()
  162. .map(secondClassify -> {
  163. DataResourceTreeVo secondTreeVo = DataResourceTreeVo.builder()
  164. .id(Joiner.on(ID_SEPARATOR).join(firstTreeVo.getId(), secondClassify.getCodeValue()))
  165. .code(secondClassify.getCodeValue())
  166. .label(secondClassify.getCodeName())
  167. .treeNode(true)
  168. .pId(firstTreeVo.getId())
  169. .dataType(secondClassify.getTypeCode())
  170. .codeDataTypeStr(UUIDUtils.getUUID() + CODE_DATA_TYPE_SEPARATOR + secondClassify.getCodeValue() + CODE_DATA_TYPE_SEPARATOR + secondClassify.getTypeCode())
  171. .build();
  172. secondTreeVo.setChild(getChildrenTypeList(secondClassify.getChildrenType()).stream()
  173. .map(thirdClassify -> {
  174. DataResourceTreeVo thirdTreeVo = DataResourceTreeVo.builder()
  175. .id(Joiner.on(ID_SEPARATOR).join(secondTreeVo.getId(), thirdClassify.getTypeCode()))
  176. .code(thirdClassify.getTypeCode())
  177. .label(thirdClassify.getTypeName())
  178. .treeNode(true)
  179. .pId(secondTreeVo.getId())
  180. .dataType(thirdClassify.getTypeCode())
  181. .codeDataTypeStr(UUIDUtils.getUUID() + CODE_DATA_TYPE_SEPARATOR + thirdClassify.getTypeCode() + CODE_DATA_TYPE_SEPARATOR + thirdClassify.getTypeCode())
  182. .build();
  183. thirdTreeVo.setChild(thirdClassify.getDataList().stream()
  184. .map(fourClassify -> {
  185. DataResourceTreeVo fourTreeVo = DataResourceTreeVo.builder()
  186. .id(Joiner.on(ID_SEPARATOR).join(thirdTreeVo.getId(), fourClassify.getCodeValue()))
  187. .code(fourClassify.getCodeValue())
  188. .label(fourClassify.getCodeName())
  189. .treeNode(false).child(null)
  190. .pId(thirdTreeVo.getId())
  191. .dataType(thirdClassify.getTypeCode())
  192. .codeDataTypeStr(UUIDUtils.getUUID() + CODE_DATA_TYPE_SEPARATOR + fourClassify.getCodeValue() + CODE_DATA_TYPE_SEPARATOR + thirdClassify.getTypeCode())
  193. .build();
  194. return fourTreeVo;
  195. }).collect(Collectors.toList()));
  196. return thirdTreeVo;
  197. }).collect(Collectors.toList()));
  198. return secondTreeVo;
  199. }).collect(Collectors.toList()));
  200. return firstTreeVo;
  201. }).collect(Collectors.toList()));
  202. dataResourceClassifyVo.setNodes(new ArrayList<DataResourceTreeVo>(){{add(dataClassifyTree);}} );
  203. dataResourceClassifyVo.setTotal(getTotalCount(dataClassifyTree));
  204. return dataResourceClassifyVo;
  205. }
  206. /**
  207. * 字段分类
  208. *
  209. * @return
  210. */
  211. private DataResourceClassifyVo getFieldClassifyTree() {
  212. DataResourceEnum dataResourceEnum = DataResourceEnum.COLUMN_CLASSIFY;
  213. DataResourceClassifyVo dataResourceClassifyVo = DataResourceClassifyVo.builder()
  214. .id(dataResourceEnum.getCode())
  215. .attrType(dataResourceEnum.getAttrType().getValue())
  216. .label(dataResourceEnum.getLabel())
  217. .build();
  218. DataResourceTreeVo fieldClassifyTree = DataResourceTreeVo.builder()
  219. .id(dataResourceEnum.getCode())
  220. .label("全部")
  221. .code(dataResourceEnum.getCode())
  222. .treeNode(true)
  223. .build();
  224. fieldClassifyTree.setChild(getFirstChildResourceClassifies(dataResourceService.getFieldClassifyList())
  225. .stream()
  226. .map(firstClassify -> {
  227. DataResourceTreeVo firstTreeVo = DataResourceTreeVo.builder()
  228. .id(Joiner.on(ID_SEPARATOR).join(fieldClassifyTree.getId(), firstClassify.getCodeValue()))
  229. .code(firstClassify.getCodeValue())
  230. .label(firstClassify.getCodeName())
  231. .dataType(firstClassify.getTypeCode())
  232. .treeNode(true)
  233. .pId(fieldClassifyTree.getId())
  234. .codeDataTypeStr(UUIDUtils.getUUID() + CODE_DATA_TYPE_SEPARATOR + firstClassify.getCodeValue() + CODE_DATA_TYPE_SEPARATOR + firstClassify.getTypeCode())
  235. .build();
  236. firstTreeVo.setChild(getFirstChildResourceClassifies(firstClassify.getChildrenType())
  237. .stream()
  238. .map(secondClassify -> {
  239. DataResourceTreeVo secondTreeVo = DataResourceTreeVo.builder()
  240. .id(Joiner.on(ID_SEPARATOR).join(firstTreeVo.getId(), secondClassify.getCodeValue()))
  241. .code(secondClassify.getCodeValue())
  242. .label(secondClassify.getCodeName())
  243. .treeNode(false)
  244. .dataType(secondClassify.getTypeCode())
  245. .pId(firstTreeVo.getId())
  246. .codeDataTypeStr(UUIDUtils.getUUID() + CODE_DATA_TYPE_SEPARATOR + secondClassify.getCodeValue() + CODE_DATA_TYPE_SEPARATOR + secondClassify.getTypeCode())
  247. .build();
  248. return secondTreeVo;
  249. }
  250. ).collect(Collectors.toList()));
  251. return firstTreeVo;
  252. }).collect(Collectors.toList())
  253. );
  254. dataResourceClassifyVo.setNodes(new ArrayList<DataResourceTreeVo>(){{add(fieldClassifyTree);}} );
  255. //设置总数
  256. dataResourceClassifyVo.setTotal(getTotalCount(fieldClassifyTree));
  257. return dataResourceClassifyVo;
  258. }
  259. private int getTotalCount(DataResourceTreeVo treeVo) {
  260. int count = 0;
  261. List<DataResourceTreeVo> child = treeVo.getChild();
  262. for (DataResourceTreeVo childVo : child) {
  263. Boolean treeNode = childVo.getTreeNode();
  264. if(treeNode){
  265. count += getTotalCount(childVo);
  266. }else {
  267. count += 1;
  268. }
  269. }
  270. return count;
  271. }
  272. @Override
  273. public List<DataLevelVo> getDataLevelList() {
  274. return getFirstChildResourceClassifies(dataResourceService.getDataLevelList())
  275. .stream()
  276. .map(childResourceClassify -> new DataLevelVo(childResourceClassify.getCodeValue(), childResourceClassify.getCodeName()))
  277. .collect(Collectors.toList());
  278. }
  279. @Override
  280. public List<DataLevelVo> getSecurityLevelList() {
  281. return getFirstChildResourceClassifies(dataResourceService.getSecurityLevelList())
  282. .stream()
  283. .map(childResourceClassify -> new DataLevelVo(childResourceClassify.getCodeValue(), childResourceClassify.getCodeName()))
  284. .collect(Collectors.toList());
  285. }
  286. @Override
  287. public List<DataClassifyVo> getDataClassifyList() {
  288. return getFirstChildResourceClassifies(dataResourceService.getDataClassifyList())
  289. .stream()
  290. .flatMap(
  291. firstClassify -> getFirstChildResourceClassifies(firstClassify.getChildrenType()).stream()
  292. .flatMap(
  293. secondClassify -> getChildrenTypeList(secondClassify.getChildrenType()).stream()
  294. .flatMap(
  295. thirdClassify -> thirdClassify.getDataList().stream()
  296. .map(fourClassify -> new DataClassifyVo(firstClassify.getCodeValue(),
  297. firstClassify.getCodeName(),
  298. secondClassify.getCodeValue(),
  299. secondClassify.getCodeName(),
  300. thirdClassify.getTypeCode(),
  301. thirdClassify.getTypeName(),
  302. fourClassify.getCodeValue(),
  303. fourClassify.getCodeName())
  304. ).collect(Collectors.toList()).stream()
  305. )
  306. )
  307. ).collect(Collectors.toList());
  308. }
  309. @Override
  310. public List<DataFieldClassifyVo> getFieldClassifyList() {
  311. return getFirstChildResourceClassifies(dataResourceService.getFieldClassifyList())
  312. .stream()
  313. .flatMap(firstClassify ->
  314. getFirstChildResourceClassifies(firstClassify.getChildrenType())
  315. .stream()
  316. .map(secondClassify ->
  317. new DataFieldClassifyVo(firstClassify.getCodeValue(),
  318. firstClassify.getCodeName(),
  319. secondClassify.getCodeValue(),
  320. secondClassify.getCodeName())
  321. ).collect(Collectors.toList()).stream()
  322. ).collect(Collectors.toList());
  323. }
  324. private List<ChildResourceClassify> getFirstChildResourceClassifies(List<ResourceClassify> fieldClassifyList) {
  325. return Optional.ofNullable(fieldClassifyList)
  326. .map(resourceClassifies -> resourceClassifies.get(0))
  327. .map(resourceClassify -> {
  328. //设置节点的dataType,dataType为上级的typeCode字段
  329. List<ChildResourceClassify> dataList = Optional.ofNullable(resourceClassify.getDataList()).orElse(Lists.newArrayList());
  330. dataList.stream().forEach(item-> item.setTypeCode(resourceClassify.getTypeCode()));
  331. return dataList;
  332. })
  333. .orElse(Lists.newArrayList());
  334. }
  335. private List<ResourceClassify> getChildrenTypeList(List<ResourceClassify> fieldClassifyList) {
  336. return Optional.ofNullable(fieldClassifyList)
  337. .orElse(Lists.newArrayList());
  338. }
  339. }