RelationShInBdController.java 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. package com.persagy.proxy.relation.controller;
  2. import cn.hutool.core.collection.CollUtil;
  3. import cn.hutool.core.map.MapUtil;
  4. import com.fasterxml.jackson.databind.ObjectMapper;
  5. import com.fasterxml.jackson.databind.node.ObjectNode;
  6. import com.persagy.dmp.basic.model.QueryCriteria;
  7. import com.persagy.dmp.basic.utils.QueryCriteriaHelper;
  8. import com.persagy.dmp.common.helper.SpringHelper;
  9. import com.persagy.dmp.digital.entity.ObjectRelation;
  10. import com.persagy.proxy.adm.constant.AdmRelationTypeEnum;
  11. import com.persagy.proxy.relation.model.ShInBdList;
  12. import com.persagy.proxy.adm.request.AdmResponse;
  13. import com.persagy.proxy.adm.service.IAdmRelationService;
  14. import com.persagy.proxy.adm.utils.AdmContextUtil;
  15. import com.persagy.proxy.common.entity.RelationDTO;
  16. import lombok.extern.slf4j.Slf4j;
  17. import org.apache.commons.lang.StringUtils;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.util.CollectionUtils;
  20. import org.springframework.web.bind.annotation.PostMapping;
  21. import org.springframework.web.bind.annotation.RequestBody;
  22. import org.springframework.web.bind.annotation.RequestMapping;
  23. import org.springframework.web.bind.annotation.RestController;
  24. import java.io.IOException;
  25. import java.util.*;
  26. import java.util.stream.Collectors;
  27. /**
  28. * 关系-竖井所在建筑
  29. * @author zhangwencheng
  30. */
  31. @Slf4j
  32. @RestController
  33. @RequestMapping("/rel/sh-in-bd")
  34. public class RelationShInBdController {
  35. @Autowired
  36. private IAdmRelationService service;
  37. /**
  38. * 创建竖井所在建筑关系
  39. * @param shInBdList
  40. * @return
  41. */
  42. @PostMapping("link-bd")
  43. public AdmResponse createBd(@RequestBody ShInBdList shInBdList) throws IOException {
  44. log.info("创建系统所在建筑关系link-bd");
  45. List<String> buildingIdList = shInBdList.getBuildingIdList();
  46. String shaftId = shInBdList.getShaftId();
  47. // 1.检验输入参数
  48. if(CollectionUtils.isEmpty(buildingIdList)|| StringUtils.isEmpty(shaftId)){
  49. return AdmResponse.failure("必填项:shaftId(竖井id)、BuildingIdList(建筑id列表)");
  50. }
  51. List<RelationDTO> voList = new ArrayList<>();
  52. String graphCode = AdmRelationTypeEnum.BD2SH_ARCHSUBSET.getGraphCode();
  53. String relCode = AdmRelationTypeEnum.BD2SH_ARCHSUBSET.getRelCode();
  54. // 2.根据图类型,边类型,建筑id数组,竖井id数组查询关系
  55. QueryCriteria criteria = new QueryCriteria();
  56. ObjectMapper objectMapper = SpringHelper.getBean(ObjectMapper.class);
  57. ObjectNode queryObj = objectMapper.createObjectNode();
  58. //queryObj.set("objFrom",objectMapper.readTree(objectMapper.writeValueAsString(buildingIdList)));
  59. queryObj.put("objTo",shaftId);
  60. queryObj.put("graphCode",graphCode);
  61. queryObj.put("relCode",relCode);
  62. queryObj.put("valid",Boolean.TRUE);
  63. criteria.setCriteria(queryObj);
  64. List<ObjectRelation> relations = service.queryByCondition(AdmContextUtil.toDmpContext(), criteria);
  65. Set<String> havedBuildIds = CollUtil.newHashSet(CollUtil.isNotEmpty(relations),
  66. relations.stream().map(ObjectRelation::getObjFrom).collect(Collectors.toSet()));
  67. // 3.新增新的关系
  68. for (String buildingId : buildingIdList) {
  69. if (havedBuildIds.contains(buildingId)){
  70. continue;
  71. }
  72. RelationDTO relation = RelationDTO.builder().graphCode(graphCode).relCode(relCode)
  73. .objFrom(buildingId).objTo(shaftId).build();
  74. voList.add(relation);
  75. }
  76. service.doSave(AdmContextUtil.toDmpContext(), voList);
  77. // 4.删除旧的关系
  78. Set<String> deleteRelationIds = new HashSet<>();
  79. if (CollUtil.isNotEmpty(relations)){
  80. Map<String, List<ObjectRelation>> buildMap = relations.stream()
  81. .collect(Collectors.groupingBy(ObjectRelation::getObjFrom));
  82. Set<Map.Entry<String, List<ObjectRelation>>> entries = buildMap.entrySet();
  83. for (Map.Entry<String, List<ObjectRelation>> entry : entries) {
  84. if (buildingIdList.contains(entry.getKey())
  85. || CollUtil.isEmpty(entry.getValue())){
  86. continue;
  87. }
  88. // 需删除的关系
  89. deleteRelationIds
  90. .addAll(entry.getValue().stream().map(ObjectRelation::getId).collect(Collectors.toSet()));
  91. }
  92. }
  93. if (CollUtil.isNotEmpty(deleteRelationIds)){
  94. QueryCriteria deleteParam = new QueryCriteria();
  95. ObjectNode deleteObj = objectMapper.createObjectNode();
  96. deleteObj.set("id",objectMapper.readTree(objectMapper.writeValueAsString(deleteRelationIds)));
  97. deleteParam.setCriteria(deleteObj);
  98. service.doDelete(AdmContextUtil.toDmpContext(),deleteParam);
  99. }
  100. return AdmResponse.success();
  101. }
  102. }