RelationFlAndBuController.java 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. package com.persagy.proxy.relation.controller;
  2. import cn.hutool.core.util.StrUtil;
  3. import com.fasterxml.jackson.databind.node.JsonNodeFactory;
  4. import com.fasterxml.jackson.databind.node.ObjectNode;
  5. import com.persagy.dmp.basic.model.QueryCriteria;
  6. import com.persagy.dmp.common.context.AppContext;
  7. import com.persagy.proxy.adm.constant.AdmRelationTypeEnum;
  8. import com.persagy.proxy.object.model.AdmSpace;
  9. import com.persagy.proxy.relation.model.UpDataFloorAndBuilding;
  10. import com.persagy.proxy.adm.request.AdmQueryCriteria;
  11. import com.persagy.proxy.adm.request.AdmResponse;
  12. import com.persagy.proxy.adm.service.IAdmRelationService;
  13. import com.persagy.proxy.object.service.IAdmSpaceService;
  14. import com.persagy.proxy.adm.utils.AdmContextUtil;
  15. import com.persagy.proxy.common.entity.InstanceUrlParam;
  16. import com.persagy.proxy.common.entity.RelationDTO;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.beans.factory.annotation.Value;
  19. import org.springframework.util.CollectionUtils;
  20. import org.springframework.web.bind.annotation.*;
  21. import java.util.ArrayList;
  22. import java.util.List;
  23. import java.util.Map;
  24. import java.util.Objects;
  25. import java.util.function.Function;
  26. import java.util.stream.Collectors;
  27. /**
  28. * 关系-修改对象的建筑楼层信息
  29. *
  30. * @author zhangwencheng
  31. */
  32. @RestController
  33. @RequestMapping("/update-relationship")
  34. public class RelationFlAndBuController {
  35. @Autowired
  36. private IAdmRelationService service;
  37. @Value("${middleware.group.code}")
  38. private String groupCode;
  39. @Autowired
  40. private IAdmSpaceService spaceService;
  41. /**
  42. * 修改空间和楼层建筑的关系
  43. * spaceId 业务空间id,id 楼层或建筑id,type 业务空间的类型
  44. *
  45. * @param upDataFloorAndBuildings
  46. * @return
  47. */
  48. @PostMapping("/update-sp")
  49. public AdmResponse spFloorAndBuilding(@RequestBody List<UpDataFloorAndBuilding> upDataFloorAndBuildings) {
  50. if (CollectionUtils.isEmpty(upDataFloorAndBuildings)) {
  51. return AdmResponse.failure("不可以传入空数据");
  52. }
  53. AdmRelationTypeEnum bd2sp = AdmRelationTypeEnum.BD2SP;
  54. AdmRelationTypeEnum fl2sp = AdmRelationTypeEnum.FL2SP;
  55. List<RelationDTO> voList = new ArrayList<>();
  56. List<String> idList = new ArrayList<>();
  57. InstanceUrlParam context = AdmContextUtil.toDmpContext();
  58. for (UpDataFloorAndBuilding upDataFloorAndBuilding : upDataFloorAndBuildings) {
  59. String id = upDataFloorAndBuilding.getId();
  60. String spaceId = upDataFloorAndBuilding.getSpaceId();
  61. idList.add(spaceId);
  62. if (StrUtil.isBlank(id)) {
  63. deleteByObjId(null, spaceId, null, bd2sp, context);
  64. deleteByObjId(null, spaceId, null, fl2sp, context);
  65. } else {
  66. if (id.startsWith("Bd")) {
  67. deleteByObjId(null, spaceId, null, bd2sp, context);
  68. RelationDTO relation = new RelationDTO(null, bd2sp.getGraphCode(), bd2sp.getRelCode(), null, id, spaceId);
  69. voList.add(relation);
  70. } else if (id.startsWith("Fl")) {
  71. deleteByObjId(null, spaceId, null, fl2sp, context);
  72. RelationDTO relation = new RelationDTO(null, fl2sp.getGraphCode(), fl2sp.getRelCode(), null, id, spaceId);
  73. voList.add(relation);
  74. }
  75. }
  76. }
  77. if (!CollectionUtils.isEmpty(voList)) {
  78. service.doSave(context, voList);
  79. }
  80. String filter = " id in ('" + StrUtil.join("','", idList) + "') ";
  81. AdmQueryCriteria criteria = new AdmQueryCriteria();
  82. criteria.setFilters(filter);
  83. AdmResponse rs = spaceService.query(criteria);
  84. List<AdmSpace> spaces = (List<AdmSpace>) rs.getContent();
  85. Map<String, AdmSpace> admSpaceMap = spaces.stream().collect(Collectors.toMap(AdmSpace::getId, Function.identity()));
  86. List<AdmSpace> updateSpace = new ArrayList<>();
  87. for (UpDataFloorAndBuilding upDataFloorAndBuilding : upDataFloorAndBuildings) {
  88. String spaceId = upDataFloorAndBuilding.getSpaceId();
  89. AdmSpace admSpace = admSpaceMap.get(spaceId);
  90. if (Objects.isNull(admSpace)) {
  91. continue;
  92. }
  93. String id = upDataFloorAndBuilding.getId();
  94. if (StrUtil.isNotBlank(id)) {
  95. if (id.startsWith("Bd")) {
  96. admSpace.setBuildingId(id);
  97. updateSpace.add(admSpace);
  98. } else if (id.startsWith("Fl")) {
  99. admSpace.setFloorId(id);
  100. updateSpace.add(admSpace);
  101. }
  102. }
  103. }
  104. //更新空间
  105. if (!CollectionUtils.isEmpty(updateSpace)) {
  106. spaceService.doUpdate(context, AdmSpace.class, updateSpace);
  107. }
  108. return AdmResponse.success();
  109. }
  110. /**
  111. * 删除对象关系
  112. *
  113. * @param objFrom
  114. * @param objTo
  115. * @param type
  116. * @param typeEnum
  117. * @param context
  118. */
  119. private void deleteByObjId(String objFrom, String objTo, String type, AdmRelationTypeEnum typeEnum, InstanceUrlParam context) {
  120. QueryCriteria criteria = new QueryCriteria();
  121. ObjectNode node = JsonNodeFactory.instance.objectNode();
  122. node.put("graphCode", typeEnum.getGraphCode());
  123. node.put("relCode", typeEnum.getRelCode());
  124. if (StrUtil.isNotBlank(type)) {
  125. node.put("relValue", type);
  126. }
  127. if (StrUtil.isNotBlank(objFrom)) {
  128. node.put("objFrom", objFrom);
  129. }
  130. if (StrUtil.isNotBlank(objTo)) {
  131. node.put("objTo", objTo);
  132. }
  133. criteria.setCriteria(node);
  134. service.doDelete(context, criteria);
  135. }
  136. }