ComponentBuildingController.java 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. package com.persagy.proxy.adm.controller;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.List;
  5. import java.util.Map;
  6. import javax.servlet.http.HttpServletRequest;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.web.bind.annotation.RequestBody;
  9. import org.springframework.web.bind.annotation.RequestMapping;
  10. import org.springframework.web.bind.annotation.RestController;
  11. import com.alibaba.fastjson.JSONObject;
  12. import com.fasterxml.jackson.databind.ObjectMapper;
  13. import com.fasterxml.jackson.databind.node.ObjectNode;
  14. import com.persagy.dmp.basic.dto.RequestData;
  15. import com.persagy.dmp.basic.model.QueryCriteria;
  16. import com.persagy.dmp.common.helper.SpringHelper;
  17. import com.persagy.dmp.common.model.response.CommonResult;
  18. import com.persagy.dmp.digital.client.DigitalRelationFacade;
  19. import com.persagy.dmp.digital.entity.ObjectDigital;
  20. import com.persagy.dmp.digital.entity.ObjectRelation;
  21. import com.persagy.proxy.adm.constant.AdmCommonConstant;
  22. import com.persagy.proxy.adm.constant.AdmObjectType;
  23. import com.persagy.proxy.adm.constant.AdmRelationType;
  24. import com.persagy.proxy.adm.constant.GraphCodeEnum;
  25. import com.persagy.proxy.adm.constant.RelCodeEnum;
  26. import com.persagy.proxy.adm.request.AdmQueryCriteria;
  27. import com.persagy.proxy.adm.request.AdmResponse;
  28. import com.persagy.proxy.adm.strategy.RelationObjectContext;
  29. import cn.hutool.core.collection.CollectionUtil;
  30. import cn.hutool.core.util.StrUtil;
  31. /**
  32. *
  33. * @version 1.0.0
  34. * @company persagy
  35. * @author zhangqiankun
  36. * @date 2021年9月8日 下午7:28:00
  37. */
  38. @RestController
  39. public class ComponentBuildingController {
  40. @Autowired
  41. private RelationObjectContext relationObjectContext;
  42. /**
  43. * 建筑查询,这里查楼层都是从属关系,而非服务关系
  44. * @param queryCriteria
  45. * @param request
  46. * @return
  47. */
  48. @RequestMapping("/building/query")
  49. public AdmResponse queryBuilding(@RequestBody AdmQueryCriteria queryCriteria, HttpServletRequest request) {
  50. String groupCode = request.getHeader(AdmCommonConstant.GROUP_CODE_HEADER);
  51. String projectId = request.getHeader(AdmCommonConstant.PROJECT_ID_HEADER);
  52. // 查询出所有的建筑对象
  53. RequestData requestData = new RequestData();
  54. requestData.setGraphCode(GraphCodeEnum.ArchSubset.name());
  55. requestData.setRelCode(RelCodeEnum.Bd2Fl.name());
  56. requestData.setPage(1L);
  57. requestData.setSize(1000L);
  58. List<ObjectDigital> masterObjs = this.relationObjectContext.queryPageObjectInfo(requestData, groupCode, projectId, AdmRelationType.ARCHSUBSET_BD2FL);
  59. this.handleMasterObjs(masterObjs, groupCode, projectId);
  60. return AdmResponse.success(masterObjs);
  61. }
  62. /**
  63. * 处理响应结果集
  64. *
  65. * @param masterObjs
  66. * @param groupCode
  67. * @param projectId
  68. */
  69. private List<JSONObject> handleMasterObjs(List<ObjectDigital> masterObjs, String groupCode, String projectId) {
  70. Map<String, Long> modelIds = new HashMap<String, Long>();
  71. List<JSONObject> resultList = new ArrayList<JSONObject>();
  72. // 遍历所有主对象
  73. for (ObjectDigital master : masterObjs) {
  74. JSONObject result = new JSONObject();
  75. result.put("id", master.getId());
  76. result.put("localId", master.getLocalId());
  77. result.put("localName", master.getLocalName());
  78. result.put("name", master.getName());
  79. result.put("objectType", master.getObjType());
  80. result.put("projectId", master.getProjectId());
  81. result.put("infos", master.getInfos());
  82. result.put("createTime", master.getCreationTime() == null ? null : master.getCreationTime().toString("yyyy-DD-MM 24HH:mm:ss"));
  83. result.put("lastUpdate", master.getModifiedTime() == null ? null : master.getModifiedTime().toString("yyyy-DD-MM 24HH:mm:ss"));
  84. result.put("statistics", new JSONObject());
  85. List<ObjectDigital> slaveObjs = master.getRelObjs();
  86. if (CollectionUtil.isNotEmpty(slaveObjs)) {
  87. // 遍历所有的从对象
  88. for (ObjectDigital slave : slaveObjs) {
  89. ObjectNode infos = slave.getInfos();
  90. String outline = infos.get("outline") == null ? null : infos.get("outline").asText();
  91. String modelFile = infos.get("modelFile") == null ? null : infos.get("modelFile").asText();
  92. if (StrUtil.isEmpty(outline) && StrUtil.isNotBlank(modelFile)) {
  93. // 判断此模型是否被多处使用
  94. if (modelIds.containsKey(modelFile)) {
  95. result.put("count", modelIds.get(modelFile));
  96. } else {
  97. long count = this.getNumByModelId(groupCode, projectId, modelFile);
  98. result.put("count", count);
  99. modelIds.put(modelFile, count);
  100. }
  101. }
  102. }
  103. }
  104. resultList.add(result);
  105. }
  106. return resultList;
  107. }
  108. /**
  109. * 获取此项目使用此模型ID的所有楼层数量
  110. *
  111. * @param groupCode
  112. * @param projectId
  113. * @param modelId
  114. * @return
  115. */
  116. private long getNumByModelId(String groupCode, String projectId, String modelId) {
  117. QueryCriteria queryCriteria = new QueryCriteria();
  118. ObjectMapper objectMapper = SpringHelper.getBean(ObjectMapper.class);
  119. ObjectNode objectNode = objectMapper.createObjectNode();
  120. objectNode.put("classCode", AdmObjectType.FLOOR.getIndex());
  121. objectNode.put("modelFile", modelId);
  122. queryCriteria.setCriteria(objectNode);
  123. queryCriteria.setOnlyCount(true);
  124. CommonResult<List<ObjectRelation>> result = DigitalRelationFacade.queryPrototype(groupCode, projectId, AdmCommonConstant.APP_ID, AdmCommonConstant.USER_ID, queryCriteria);
  125. return result == null ? 0 : (result.getCount() == null ? 0 : result.getCount());
  126. }
  127. }