DataResourceFacade.java 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625
  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.dto.sub.DataClaAcceptDTO;
  7. import com.dragoninfo.dcuc.app.dto.sub.FieldClaAcceptDTO;
  8. import com.dragoninfo.dcuc.app.entity.sub.DataCla;
  9. import com.dragoninfo.dcuc.app.entity.sub.DataLevel;
  10. import com.dragoninfo.dcuc.app.entity.sub.DataSec;
  11. import com.dragoninfo.dcuc.app.entity.sub.FieldCla;
  12. import com.dragoninfo.dcuc.app.enumresources.sub.DataClaTypeEnum;
  13. import com.dragoninfo.dcuc.app.enumresources.sub.FieldClaTypeEnum;
  14. import com.dragoninfo.dcuc.app.service.sub.IDataClaService;
  15. import com.dragoninfo.dcuc.app.service.sub.IDataLevelService;
  16. import com.dragoninfo.dcuc.app.service.sub.IDataSecService;
  17. import com.dragoninfo.dcuc.app.service.sub.IFieldClaService;
  18. import com.dragoninfo.dcuc.app.vo.*;
  19. import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
  20. import com.dragonsoft.duceap.commons.util.UUIDUtils;
  21. import com.dragonsoft.duceap.commons.util.collections.CollectionUtils;
  22. import com.google.common.base.Joiner;
  23. import com.google.common.collect.Lists;
  24. import lombok.extern.slf4j.Slf4j;
  25. import org.apache.commons.lang3.StringUtils;
  26. import org.springframework.beans.factory.annotation.Autowired;
  27. import org.springframework.web.bind.annotation.RequestMapping;
  28. import org.springframework.web.bind.annotation.RequestParam;
  29. import org.springframework.web.bind.annotation.RestController;
  30. import java.util.*;
  31. import java.util.concurrent.CompletableFuture;
  32. import java.util.stream.Collectors;
  33. /**
  34. * Created by lidr on 2021/4/14
  35. */
  36. @Slf4j
  37. @RestController
  38. @RequestMapping(value = "/dcuc/app/dataResourceFacade")
  39. public class DataResourceFacade implements IDataResourceFacade
  40. {
  41. public static final String ID_SEPARATOR = "|";
  42. @Autowired
  43. private IDataResourceService dataResourceService;
  44. @Autowired
  45. private IDataClaService dataClaService;
  46. @Autowired
  47. private IDataLevelService dataLevelService;
  48. @Autowired
  49. private IDataSecService dataSecService;
  50. @Autowired
  51. private IFieldClaService fieldClaService;
  52. @Override
  53. public List<DataResourceClassifyVo> getAllDataResourceTree(@RequestParam("attrType") String attrType) {
  54. List<DataResourceClassifyVo> result = Lists.newArrayList();
  55. //列:数据安全级别 字段分类
  56. //表:数据分级 数据资源分类
  57. if ("TABLE".equals(attrType)) {
  58. result.add(getDataLevelTree());
  59. result.add(getDataClassifyTree());
  60. } else {
  61. result.add(getSecurityLevelTree());
  62. result.add(getFieldClassifyTree());
  63. }
  64. return result;
  65. }
  66. @Override
  67. public DataResourceClassifyVo getDataResourceTree(String typeCode) {
  68. DataResourceClassifyVo result = null;
  69. DataResourceEnum dataResourceEnum = Enum.valueOf(DataResourceEnum.class, typeCode);
  70. switch (dataResourceEnum){
  71. case DATA_CLASSIFY:
  72. result = getDataLevelTree();
  73. break;
  74. case COLUMN_CLASSIFY:
  75. result = getFieldClassifyTree();
  76. break;
  77. case DATA_SECURITY_LEVEL:
  78. result = getSecurityLevelTree();
  79. break;
  80. case DATA_RESOURCE_CLASSIFY:
  81. result = getDataClassifyTree();
  82. break;
  83. default:
  84. break;
  85. }
  86. return result;
  87. }
  88. private DataResourceClassifyVo getDataLevelTree() {
  89. DataResourceEnum dataResourceEnum = DataResourceEnum.DATA_CLASSIFY;
  90. DataResourceClassifyVo dataResourceClassifyVo = DataResourceClassifyVo.builder()
  91. .id(dataResourceEnum.getCode())
  92. .attrType(dataResourceEnum.getAttrType().getValue())
  93. .label(dataResourceEnum.getLabel())
  94. .build();
  95. DataResourceTreeVo dataLevelTreeVo = DataResourceTreeVo.builder()
  96. .id(dataResourceEnum.getCode())
  97. .label("全部")
  98. .code(dataResourceEnum.getCode())
  99. .treeNode(true)
  100. .build();
  101. List<DataLevelVo> dataLevelList = getDataLevelList();
  102. List<DataResourceTreeVo> child = dataLevelList.stream().map(item -> DataResourceTreeVo.builder()
  103. .id(Joiner.on(ID_SEPARATOR).join(dataLevelTreeVo.getId(), item.getLevelCode()))
  104. .code(item.getLevelCode())
  105. .label(item.getLevelName())
  106. .dataType(item.getTypeCode())
  107. .codeDataTypeStr(UUIDUtils.getUUID() + ID_SEPARATOR + item.getLevelCode() + ID_SEPARATOR + item.getTypeCode())
  108. .treeNode(false)
  109. .pId(dataLevelTreeVo.getId())
  110. .innerId(item.getInnerId()).build()).collect(Collectors.toList());
  111. dataLevelTreeVo.setChild(child);
  112. dataResourceClassifyVo.setNodes(new ArrayList<DataResourceTreeVo>(){{add(dataLevelTreeVo);}});
  113. //设置总数量
  114. dataResourceClassifyVo.setTotal(child.size());
  115. return dataResourceClassifyVo;
  116. }
  117. private DataResourceClassifyVo getSecurityLevelTree() {
  118. DataResourceEnum dataResourceEnum = DataResourceEnum.DATA_SECURITY_LEVEL;
  119. DataResourceClassifyVo dataResourceClassifyVo = DataResourceClassifyVo.builder()
  120. .id(dataResourceEnum.getCode())
  121. .attrType(dataResourceEnum.getAttrType().getValue())
  122. .label(dataResourceEnum.getLabel())
  123. .build();
  124. DataResourceTreeVo securityLevelTree = DataResourceTreeVo.builder()
  125. .id(dataResourceEnum.getCode())
  126. .label("全部")
  127. .code(dataResourceEnum.getCode())
  128. .treeNode(true)
  129. .build();
  130. List<DataLevelVo> securityLevelList = getSecurityLevelList();
  131. List<DataResourceTreeVo> child = securityLevelList.stream().map(item -> DataResourceTreeVo.builder()
  132. .id(Joiner.on(ID_SEPARATOR).join(securityLevelTree.getId(), item.getLevelCode()))
  133. .code(item.getLevelCode())
  134. .label(item.getLevelName())
  135. .dataType(item.getTypeCode())
  136. .codeDataTypeStr(UUIDUtils.getUUID() + ID_SEPARATOR + item.getLevelCode() + ID_SEPARATOR + item.getTypeCode())
  137. .treeNode(false)
  138. .pId(securityLevelTree.getId())
  139. .innerId(item.getInnerId()).build()).collect(Collectors.toList());
  140. securityLevelTree.setChild(child);
  141. dataResourceClassifyVo.setNodes(new ArrayList<DataResourceTreeVo>(){{add(securityLevelTree);}} );
  142. //设置总数量
  143. dataResourceClassifyVo.setTotal(child.size());
  144. return dataResourceClassifyVo;
  145. }
  146. private DataResourceClassifyVo getDataClassifyTree() {
  147. DataResourceEnum dataResourceEnum = DataResourceEnum.DATA_RESOURCE_CLASSIFY;
  148. DataResourceClassifyVo resourceVo = DataResourceClassifyVo.builder().id(dataResourceEnum.getCode())
  149. .attrType(dataResourceEnum.getAttrType().getValue()).label(dataResourceEnum.getLabel()).build();
  150. DataResourceTreeVo topTreeVo = DataResourceTreeVo.builder().id(dataResourceEnum.getCode()).label("全部")
  151. .code(dataResourceEnum.getCode()).treeNode(true).build();
  152. List<DataCla> dataClaList = dataClaService.getAllDataCla();
  153. Map<String, List<DataCla>> levelMap = dataClaList.stream().collect(Collectors.groupingBy(DataCla::getLevel));
  154. //一级节点
  155. List<DataResourceTreeVo> firNodes = Optional.ofNullable(levelMap.get(DataClaTypeEnum.FIR.getLevel())).orElse(new ArrayList<>())
  156. .stream().map(item -> convertDataClaToNode(item, null)).collect(Collectors.toList());
  157. //二级节点
  158. List<DataResourceTreeVo> secNodes = Optional.ofNullable(levelMap.get(DataClaTypeEnum.SEC.getLevel())).orElse(new ArrayList<>())
  159. .stream().map(item -> convertDataClaToNode(item, item.getFirId())).collect(Collectors.toList());
  160. //三级节点
  161. List<DataResourceTreeVo> thirdNodes = Optional.ofNullable(levelMap.get(DataClaTypeEnum.LAB_CLA.getLevel())).orElse(new ArrayList<>())
  162. .stream().map(item -> convertDataClaToNode(item, item.getSecId())).collect(Collectors.toList());
  163. //四级节点
  164. List<DataResourceTreeVo> fourNodes = Optional.ofNullable(levelMap.get(DataClaTypeEnum.LAB.getLevel())).orElse(new ArrayList<>())
  165. .stream().map(item -> convertDataClaToNode(item, item.getLabClaId())).collect(Collectors.toList());
  166. //拼接成树节点
  167. combineTreeNode(firNodes, secNodes);
  168. combineTreeNode(secNodes, thirdNodes);
  169. combineTreeNode(thirdNodes, fourNodes);
  170. topTreeVo.setChild(firNodes);
  171. //计算总数量
  172. resourceVo.setTotal(getTotalCount(topTreeVo));
  173. resourceVo.setNodes(new ArrayList<DataResourceTreeVo>(){{add(topTreeVo);}});
  174. return resourceVo;
  175. }
  176. private DataResourceTreeVo convertDataClaToNode(DataCla item, String pid) {
  177. return DataResourceTreeVo.builder()
  178. .id(item.getId())
  179. .pId(pid)
  180. .dataType(item.getDataType())
  181. .label(item.getName())
  182. .code(item.getCode())
  183. .innerId(item.getId())
  184. .build();
  185. }
  186. private DataResourceClassifyVo getFieldClassifyTree() {
  187. DataResourceEnum dataResourceEnum = DataResourceEnum.COLUMN_CLASSIFY;
  188. DataResourceClassifyVo resourceVo = DataResourceClassifyVo.builder().id(dataResourceEnum.getCode())
  189. .attrType(dataResourceEnum.getAttrType().getValue()).label(dataResourceEnum.getLabel()).build();
  190. DataResourceTreeVo topTreeVo = DataResourceTreeVo.builder().id(dataResourceEnum.getCode()).label("全部")
  191. .code(dataResourceEnum.getCode()).treeNode(true).build();
  192. List<FieldCla> fieldClaList = fieldClaService.getAllFieldCla();
  193. Map<String, List<FieldCla>> levelMap = fieldClaList.stream().collect(Collectors.groupingBy(FieldCla::getLevel));
  194. List<DataResourceTreeVo> firNodes = Optional.ofNullable(levelMap.get(FieldClaTypeEnum.FIR.getLevel())).orElse(new ArrayList<>())
  195. .stream().map(item -> convertFieldClaToNode(item, null)).collect(Collectors.toList());
  196. List<DataResourceTreeVo> secNodes = Optional.ofNullable(levelMap.get(FieldClaTypeEnum.SEC.getLevel())).orElse(new ArrayList<>())
  197. .stream().map(item -> convertFieldClaToNode(item, item.getFirId())).collect(Collectors.toList());
  198. combineTreeNode(firNodes, secNodes);
  199. topTreeVo.setChild(firNodes);
  200. resourceVo.setTotal(getTotalCount(topTreeVo));
  201. resourceVo.setNodes(new ArrayList<DataResourceTreeVo>(){{add(topTreeVo);}});
  202. return resourceVo;
  203. }
  204. private DataResourceTreeVo convertFieldClaToNode(FieldCla item, String pid) {
  205. return DataResourceTreeVo.builder()
  206. .id(item.getId())
  207. .pId(pid)
  208. .dataType(item.getDataType())
  209. .label(item.getName())
  210. .code(item.getCode())
  211. .innerId(item.getId())
  212. .build();
  213. }
  214. private void combineTreeNode(List<DataResourceTreeVo> firNodes, List<DataResourceTreeVo> secNodes) {
  215. Map<String, List<DataResourceTreeVo>> secMap = secNodes.stream().collect(Collectors.groupingBy(DataResourceTreeVo::getPId));
  216. firNodes.forEach(item->{
  217. List<DataResourceTreeVo> childes = secMap.get(item.getId());
  218. item.setChild(childes);
  219. });
  220. }
  221. @Override
  222. public List<DataLevelVo> getDataLevelList() {
  223. List<DataLevel> all = dataLevelService.getAll();
  224. return all.stream()
  225. .map(item -> new DataLevelVo(item.getId(), item.getLevelCode(), item.getLevelName(), item.getDataType()))
  226. .collect(Collectors.toList());
  227. }
  228. @Override
  229. public List<DataLevelVo> getSecurityLevelList() {
  230. List<DataSec> all = dataSecService.getAll();
  231. return all.stream()
  232. .map(item -> new DataLevelVo(item.getId(), item.getSecCode(), item.getSecName(), item.getDataType()))
  233. .collect(Collectors.toList());
  234. }
  235. @Override
  236. public List<DataClassifyVo> getDataClassifyList() {
  237. List<DataClaAcceptDTO> list = dataClaService.getAll();
  238. return list.stream().map(item -> {
  239. DataClassifyVo vo = new DataClassifyVo();
  240. vo.setFirstLevelCode(item.getFirCode());
  241. vo.setFirstLevelName(item.getFirName());
  242. vo.setSecondLevelCode(item.getSecCode());
  243. vo.setSecondLevelName(item.getSecName());
  244. vo.setLabelClassifyCode(item.getLabClaCode());
  245. vo.setLabelClassifyName(item.getLabClaName());
  246. vo.setLabelCode(item.getLabCode());
  247. vo.setLabelName(item.getLabName());
  248. return vo;
  249. }).collect(Collectors.toList());
  250. }
  251. @Override
  252. public List<DataFieldClassifyVo> getFieldClassifyList() {
  253. List<FieldClaAcceptDTO> list = fieldClaService.getAll();
  254. return list.stream().map(item-> {
  255. DataFieldClassifyVo vo = new DataFieldClassifyVo();
  256. vo.setFirstLevelCode(item.getFirCode());
  257. vo.setFirstLevelName(item.getFirName());
  258. vo.setSecondLevelCode(item.getSecCode());
  259. vo.setSecondLevelName(item.getSecName());
  260. return vo;
  261. }).collect(Collectors.toList());
  262. }
  263. @Override
  264. public ResponseStatus dataLevelSync() {
  265. CompletableFuture
  266. .supplyAsync(this::getDataLevelListFromRemote)
  267. .exceptionally(e->{
  268. log.error("getDataLevelListFromRemote error.",e);
  269. return new ArrayList<>();
  270. })
  271. .thenAccept((list)->dataLevelService.sync(list))
  272. .exceptionally(e->{
  273. log.error("sync error.",e);
  274. return null;
  275. });
  276. return ResponseStatus.success();
  277. }
  278. @Override
  279. public ResponseStatus dataSecSync() {
  280. CompletableFuture
  281. .supplyAsync(this::getSecurityLevelListFromRemote)
  282. .exceptionally(e->{
  283. log.error("getSecurityLevelListFromRemote error.",e);
  284. return new ArrayList<>(); })
  285. .thenAccept((list)->dataSecService.sync(list))
  286. .exceptionally(e->{
  287. log.error("sync error.",e);
  288. return null;
  289. });
  290. return ResponseStatus.success();
  291. }
  292. @Override
  293. public ResponseStatus dataClaSync() {
  294. CompletableFuture.supplyAsync(this::getDataClassifyTreeFromRemote)
  295. .exceptionally(e->{
  296. log.error("getDataClassifyTreeFromRemote error.",e);
  297. return new ArrayList<>(); })
  298. .thenAccept((nodes)-> dataClaService.sync(nodes, null))
  299. .exceptionally(e->{
  300. log.error("sync error.",e);
  301. return null;
  302. });
  303. return ResponseStatus.success();
  304. }
  305. @Override
  306. public ResponseStatus fieldClaSync() {
  307. CompletableFuture.supplyAsync(this::getFieldClassifyTreeFromRemote)
  308. .exceptionally(e->{
  309. log.error("getFieldClassifyTreeFromRemote error.",e);
  310. return new ArrayList<>(); })
  311. .thenAccept((nodes)-> fieldClaService.sync(nodes, null))
  312. .exceptionally(e->{
  313. log.error("sync error.",e);
  314. return null;
  315. });
  316. return ResponseStatus.success();
  317. }
  318. @Override
  319. public List<DataLevelVo> getDetailByIdsAndClaType(List<String> ids, String classifyType) {
  320. List<DataLevelVo> vos= new ArrayList<>();
  321. if(CollectionUtils.isEmpty(ids)) {
  322. return vos;
  323. }
  324. if(StringUtils.isBlank(classifyType)) {
  325. return vos;
  326. }
  327. DataResourceEnum anEnum = DataResourceEnum.getByCode(classifyType);
  328. if(null == anEnum) {
  329. return vos;
  330. } else if(DataResourceEnum.COLUMN_CLASSIFY.equals(anEnum)) {
  331. List<FieldCla> list = fieldClaService.getByIds(ids);
  332. list.stream().map(item->{
  333. DataLevelVo vo = new DataLevelVo();
  334. vo.setTypeCode(item.getDataType());
  335. vo.setLevelName(item.getName());
  336. vo.setLevelCode(item.getCode());
  337. vo.setInnerId(item.getId());
  338. return vo;
  339. }).collect(Collectors.toList());
  340. } else if(DataResourceEnum.DATA_CLASSIFY.equals(anEnum)) {
  341. List<DataLevel> list = dataLevelService.getByIds(ids);
  342. list.stream().map(item->{
  343. DataLevelVo vo = new DataLevelVo();
  344. vo.setTypeCode(item.getDataType());
  345. vo.setLevelName(item.getLevelName());
  346. vo.setLevelCode(item.getLevelCode());
  347. vo.setInnerId(item.getId());
  348. return vo;
  349. }).collect(Collectors.toList());
  350. } else if(DataResourceEnum.DATA_RESOURCE_CLASSIFY.equals(anEnum)) {
  351. List<DataCla> list = dataClaService.getByIds(ids);
  352. list.stream().map(item->{
  353. DataLevelVo vo = new DataLevelVo();
  354. vo.setTypeCode(item.getDataType());
  355. vo.setLevelName(item.getName());
  356. vo.setLevelCode(item.getCode());
  357. vo.setInnerId(item.getId());
  358. return vo;
  359. }).collect(Collectors.toList());
  360. } else if(DataResourceEnum.DATA_SECURITY_LEVEL.equals(anEnum)) {
  361. List<DataSec> list = dataSecService.getByIds(ids);
  362. list.stream().map(item->{
  363. DataLevelVo vo = new DataLevelVo();
  364. vo.setTypeCode(item.getDataType());
  365. vo.setLevelName(item.getSecName());
  366. vo.setLevelCode(item.getSecCode());
  367. vo.setInnerId(item.getId());
  368. return vo;
  369. }).collect(Collectors.toList());
  370. }
  371. return vos;
  372. }
  373. @Override
  374. public DataLevelVo getDetailByIdAndClaType(String id, String classifyType) {
  375. if(StringUtils.isAnyBlank(id, classifyType)) {
  376. return null;
  377. }
  378. DataLevelVo vo = new DataLevelVo();
  379. DataResourceEnum anEnum = DataResourceEnum.getByCode(classifyType);
  380. if(null == anEnum) {
  381. return null;
  382. } else if(DataResourceEnum.COLUMN_CLASSIFY.equals(anEnum)) {
  383. FieldCla fieldCla = fieldClaService.getById(id);
  384. vo.setInnerId(fieldCla.getId());
  385. vo.setLevelCode(fieldCla.getCode());
  386. vo.setLevelName(fieldCla.getName());
  387. vo.setTypeCode(fieldCla.getDataType());
  388. } else if(DataResourceEnum.DATA_CLASSIFY.equals(anEnum)) {
  389. DataLevel dataLevel = dataLevelService.getById(id);
  390. vo.setInnerId(dataLevel.getId());
  391. vo.setLevelCode(dataLevel.getLevelCode());
  392. vo.setLevelName(dataLevel.getLevelName());
  393. vo.setTypeCode(dataLevel.getDataType());
  394. } else if(DataResourceEnum.DATA_RESOURCE_CLASSIFY.equals(anEnum)) {
  395. DataCla dataCla = dataClaService.getById(id);
  396. vo.setInnerId(dataCla.getId());
  397. vo.setLevelCode(dataCla.getId());
  398. vo.setLevelName(dataCla.getName());
  399. vo.setTypeCode(dataCla.getCode());
  400. } else if(DataResourceEnum.DATA_SECURITY_LEVEL.equals(anEnum)) {
  401. DataSec dataSec = dataSecService.getById(id);
  402. vo.setInnerId(dataSec.getId());
  403. vo.setLevelCode(dataSec.getSecCode());
  404. vo.setLevelName(dataSec.getSecName());
  405. vo.setTypeCode(dataSec.getDataType());
  406. }
  407. return vo;
  408. }
  409. /**
  410. * 数据资源分类
  411. *
  412. * @return
  413. */
  414. private List<DataResourceTreeVo> getDataClassifyTreeFromRemote() {
  415. String id = DataResourceEnum.DATA_RESOURCE_CLASSIFY.getCode();
  416. List<DataResourceTreeVo> collect = getFirstChildResourceClassifies(dataResourceService.getDataClassifyList())
  417. .stream()
  418. .map(firstClassify -> {
  419. DataResourceTreeVo firstTreeVo = DataResourceTreeVo.builder()
  420. .id(Joiner.on(ID_SEPARATOR).join(id, firstClassify.getCodeValue()))
  421. .code(firstClassify.getCodeValue())
  422. .label(firstClassify.getCodeName())
  423. .treeNode(true)
  424. .pId(id)
  425. .dataType(firstClassify.getTypeCode())
  426. .codeDataTypeStr(UUIDUtils.getUUID() + ID_SEPARATOR + firstClassify.getCodeValue() + ID_SEPARATOR + firstClassify.getTypeCode())
  427. .build();
  428. firstTreeVo.setChild(getFirstChildResourceClassifies(firstClassify.getChildrenType()).stream()
  429. .map(secondClassify -> {
  430. DataResourceTreeVo secondTreeVo = DataResourceTreeVo.builder()
  431. .id(Joiner.on(ID_SEPARATOR).join(firstTreeVo.getId(), secondClassify.getCodeValue()))
  432. .code(secondClassify.getCodeValue())
  433. .label(secondClassify.getCodeName())
  434. .treeNode(true)
  435. .pId(firstTreeVo.getId())
  436. .dataType(secondClassify.getTypeCode())
  437. .codeDataTypeStr(UUIDUtils.getUUID() + ID_SEPARATOR + secondClassify.getCodeValue() + ID_SEPARATOR + secondClassify.getTypeCode())
  438. .build();
  439. secondTreeVo.setChild(getChildrenTypeList(secondClassify.getChildrenType()).stream()
  440. .map(thirdClassify -> {
  441. DataResourceTreeVo thirdTreeVo = DataResourceTreeVo.builder()
  442. .id(Joiner.on(ID_SEPARATOR).join(secondTreeVo.getId(), thirdClassify.getTypeCode()))
  443. .code(thirdClassify.getTypeCode())
  444. .label(thirdClassify.getTypeName())
  445. .treeNode(true)
  446. .pId(secondTreeVo.getId())
  447. .dataType(thirdClassify.getTypeCode())
  448. .codeDataTypeStr(UUIDUtils.getUUID() + ID_SEPARATOR + thirdClassify.getTypeCode() + ID_SEPARATOR + thirdClassify.getTypeCode())
  449. .build();
  450. thirdTreeVo.setChild(thirdClassify.getDataList().stream()
  451. .map(fourClassify -> {
  452. DataResourceTreeVo fourTreeVo = DataResourceTreeVo.builder()
  453. .id(Joiner.on(ID_SEPARATOR).join(thirdTreeVo.getId(), fourClassify.getCodeValue()))
  454. .code(fourClassify.getCodeValue())
  455. .label(fourClassify.getCodeName())
  456. .treeNode(false).child(null)
  457. .pId(thirdTreeVo.getId())
  458. .dataType(thirdClassify.getTypeCode())
  459. .codeDataTypeStr(UUIDUtils.getUUID() + ID_SEPARATOR + fourClassify.getCodeValue() + ID_SEPARATOR + thirdClassify.getTypeCode())
  460. .build();
  461. return fourTreeVo;
  462. }).collect(Collectors.toList()));
  463. return thirdTreeVo;
  464. }).collect(Collectors.toList()));
  465. return secondTreeVo;
  466. }).collect(Collectors.toList()));
  467. return firstTreeVo;
  468. }).collect(Collectors.toList());
  469. return collect;
  470. }
  471. /**
  472. * 字段分类
  473. *
  474. * @return
  475. */
  476. private List<DataResourceTreeVo> getFieldClassifyTreeFromRemote() {
  477. String id = DataResourceEnum.COLUMN_CLASSIFY.getCode();
  478. List<DataResourceTreeVo> collect = getFirstChildResourceClassifies(dataResourceService.getFieldClassifyList())
  479. .stream()
  480. .map(firstClassify -> {
  481. DataResourceTreeVo firstTreeVo = DataResourceTreeVo.builder()
  482. .id(Joiner.on(ID_SEPARATOR).join(id, firstClassify.getCodeValue()))
  483. .code(firstClassify.getCodeValue())
  484. .label(firstClassify.getCodeName())
  485. .dataType(firstClassify.getTypeCode())
  486. .treeNode(true)
  487. .pId(id)
  488. .codeDataTypeStr(UUIDUtils.getUUID() + ID_SEPARATOR + firstClassify.getCodeValue() + ID_SEPARATOR + firstClassify.getTypeCode())
  489. .build();
  490. firstTreeVo.setChild(getFirstChildResourceClassifies(firstClassify.getChildrenType())
  491. .stream()
  492. .map(secondClassify -> {
  493. DataResourceTreeVo secondTreeVo = DataResourceTreeVo.builder()
  494. .id(Joiner.on(ID_SEPARATOR).join(firstTreeVo.getId(), secondClassify.getCodeValue()))
  495. .code(secondClassify.getCodeValue())
  496. .label(secondClassify.getCodeName())
  497. .treeNode(false)
  498. .dataType(secondClassify.getTypeCode())
  499. .pId(firstTreeVo.getId())
  500. .codeDataTypeStr(UUIDUtils.getUUID() + ID_SEPARATOR + secondClassify.getCodeValue() + ID_SEPARATOR + secondClassify.getTypeCode())
  501. .build();
  502. return secondTreeVo;
  503. }
  504. ).collect(Collectors.toList()));
  505. return firstTreeVo;
  506. }).collect(Collectors.toList());
  507. return collect;
  508. }
  509. /**
  510. * 计算treeVo所有最底层子节点数量,不包含叶节点
  511. * @param treeVo
  512. * @return
  513. */
  514. private int getTotalCount(DataResourceTreeVo treeVo) {
  515. int count = 0;
  516. List<DataResourceTreeVo> child = treeVo.getChild();
  517. for (DataResourceTreeVo childVo : child) {
  518. childVo.setPId(treeVo.getId());
  519. childVo.setId(Joiner.on(ID_SEPARATOR).join(treeVo.getId(), childVo.getCode()));
  520. List<DataResourceTreeVo> cc = childVo.getChild();
  521. if(CollectionUtils.isNotEmpty(cc)){
  522. childVo.setTreeNode(true);
  523. count += getTotalCount(childVo);
  524. }else {
  525. childVo.setTreeNode(false);
  526. count += 1;
  527. }
  528. }
  529. return count;
  530. }
  531. /**
  532. * 从数据资源目录获取数据-数据分级
  533. * @return
  534. */
  535. private List<DataLevelVo> getDataLevelListFromRemote() {
  536. return getFirstChildResourceClassifies(dataResourceService.getDataLevelList())
  537. .stream()
  538. .map(childResourceClassify -> new DataLevelVo(null, childResourceClassify.getCodeValue(), childResourceClassify.getCodeName(),childResourceClassify.getTypeCode()))
  539. .collect(Collectors.toList());
  540. }
  541. /**
  542. * 从数据资源目录获取数据-安全级别数据
  543. * @return
  544. */
  545. private List<DataLevelVo> getSecurityLevelListFromRemote() {
  546. return getFirstChildResourceClassifies(dataResourceService.getSecurityLevelList())
  547. .stream()
  548. .map(childResourceClassify -> new DataLevelVo(null, childResourceClassify.getCodeValue(), childResourceClassify.getCodeName(), childResourceClassify.getTypeCode()))
  549. .collect(Collectors.toList());
  550. }
  551. private List<ChildResourceClassify> getFirstChildResourceClassifies(List<ResourceClassify> fieldClassifyList) {
  552. return Optional.ofNullable(fieldClassifyList)
  553. .map(resourceClassifies -> resourceClassifies.get(0))
  554. .map(resourceClassify -> {
  555. //设置节点的dataType,dataType为上级的typeCode字段
  556. List<ChildResourceClassify> dataList = Optional.ofNullable(resourceClassify.getDataList()).orElse(Lists.newArrayList());
  557. dataList.stream().forEach(item-> item.setTypeCode(resourceClassify.getTypeCode()));
  558. return dataList;
  559. })
  560. .orElse(Lists.newArrayList());
  561. }
  562. private List<ResourceClassify> getChildrenTypeList(List<ResourceClassify> fieldClassifyList) {
  563. return Optional.ofNullable(fieldClassifyList)
  564. .orElse(Lists.newArrayList());
  565. }
  566. }