package com.persagy.proxy.adm.controller; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import com.persagy.dmp.basic.dto.RequestData; import com.persagy.dmp.basic.model.QueryCriteria; import com.persagy.dmp.common.helper.SpringHelper; import com.persagy.dmp.common.model.response.CommonResult; import com.persagy.dmp.digital.client.DigitalRelationFacade; import com.persagy.dmp.digital.entity.ObjectDigital; import com.persagy.dmp.digital.entity.ObjectRelation; import com.persagy.proxy.adm.constant.AdmCommonConstant; import com.persagy.proxy.adm.constant.AdmObjectType; import com.persagy.proxy.adm.constant.AdmRelationType; import com.persagy.proxy.adm.constant.GraphCodeEnum; import com.persagy.proxy.adm.constant.RelCodeEnum; import com.persagy.proxy.adm.request.AdmQueryCriteria; import com.persagy.proxy.adm.request.AdmResponse; import com.persagy.proxy.adm.strategy.RelationObjectContext; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.StrUtil; /** * * @version 1.0.0 * @company persagy * @author zhangqiankun * @date 2021年9月8日 下午7:28:00 */ @RestController public class ComponentBuildingController { @Autowired private RelationObjectContext relationObjectContext; /** * 建筑查询,这里查楼层都是从属关系,而非服务关系 * @param queryCriteria * @param request * @return */ @RequestMapping("/building/query") public AdmResponse queryBuilding(@RequestBody AdmQueryCriteria queryCriteria, HttpServletRequest request) { String groupCode = request.getHeader(AdmCommonConstant.GROUP_CODE_HEADER); String projectId = request.getHeader(AdmCommonConstant.PROJECT_ID_HEADER); // 查询出所有的建筑对象 RequestData requestData = new RequestData(); requestData.setGraphCode(GraphCodeEnum.ArchSubset.name()); requestData.setRelCode(RelCodeEnum.Bd2Fl.name()); requestData.setPage(1L); requestData.setSize(1000L); List masterObjs = this.relationObjectContext.queryPageObjectInfo(requestData, groupCode, projectId, AdmRelationType.ARCHSUBSET_BD2FL); this.handleMasterObjs(masterObjs, groupCode, projectId); return AdmResponse.success(masterObjs); } /** * 处理响应结果集 * * @param masterObjs * @param groupCode * @param projectId */ private List handleMasterObjs(List masterObjs, String groupCode, String projectId) { Map modelIds = new HashMap(); List resultList = new ArrayList(); // 遍历所有主对象 for (ObjectDigital master : masterObjs) { JSONObject result = new JSONObject(); result.put("id", master.getId()); result.put("localId", master.getLocalId()); result.put("localName", master.getLocalName()); result.put("name", master.getName()); result.put("objectType", master.getObjType()); result.put("projectId", master.getProjectId()); result.put("infos", master.getInfos()); result.put("createTime", master.getCreationTime() == null ? null : master.getCreationTime().toString("yyyy-DD-MM 24HH:mm:ss")); result.put("lastUpdate", master.getModifiedTime() == null ? null : master.getModifiedTime().toString("yyyy-DD-MM 24HH:mm:ss")); result.put("statistics", new JSONObject()); List slaveObjs = master.getRelObjs(); if (CollectionUtil.isNotEmpty(slaveObjs)) { // 遍历所有的从对象 for (ObjectDigital slave : slaveObjs) { ObjectNode infos = slave.getInfos(); String outline = infos.get("outline") == null ? null : infos.get("outline").asText(); String modelFile = infos.get("modelFile") == null ? null : infos.get("modelFile").asText(); if (StrUtil.isEmpty(outline) && StrUtil.isNotBlank(modelFile)) { // 判断此模型是否被多处使用 if (modelIds.containsKey(modelFile)) { result.put("count", modelIds.get(modelFile)); } else { long count = this.getNumByModelId(groupCode, projectId, modelFile); result.put("count", count); modelIds.put(modelFile, count); } } } } resultList.add(result); } return resultList; } /** * 获取此项目使用此模型ID的所有楼层数量 * * @param groupCode * @param projectId * @param modelId * @return */ private long getNumByModelId(String groupCode, String projectId, String modelId) { QueryCriteria queryCriteria = new QueryCriteria(); ObjectMapper objectMapper = SpringHelper.getBean(ObjectMapper.class); ObjectNode objectNode = objectMapper.createObjectNode(); objectNode.put("classCode", AdmObjectType.FLOOR.getIndex()); objectNode.put("modelFile", modelId); queryCriteria.setCriteria(objectNode); queryCriteria.setOnlyCount(true); CommonResult> result = DigitalRelationFacade.queryPrototype(groupCode, projectId, AdmCommonConstant.APP_ID, AdmCommonConstant.USER_ID, queryCriteria); return result == null ? 0 : (result.getCount() == null ? 0 : result.getCount()); } }