Prechádzať zdrojové kódy

Merge remote-tracking branch 'origin/develop' into develop

xujiaheng 3 rokov pred
rodič
commit
9a18ce5bc7

+ 2 - 2
src/main/java/com/persagy/proxy/adm/controller/AdmISpaceController.java

@@ -46,7 +46,7 @@ public class AdmISpaceController {
                              @RequestBody AdmQueryCriteria request) throws Exception {
         // 组装上下文条件
         InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
-        request.setName("space");
+        request.setName("ispace");
         request.setOnlyCount(true);
         return service.doQuery(context, request, AdmISpace.class);
     }
@@ -106,7 +106,7 @@ public class AdmISpaceController {
                              @RequestBody AdmQueryCriteria request) throws Exception {
         // 组装上下文条件
         InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
-        request.setName("space");
+        request.setName("ispace");
         return service.doQuery(context, request, AdmISpace.class);
     }
 

+ 39 - 14
src/main/java/com/persagy/proxy/adm/controller/AdmSpaceController.java

@@ -1,10 +1,9 @@
 package com.persagy.proxy.adm.controller;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
 import com.persagy.proxy.adm.constant.AdmCommonConstant;
-import com.persagy.proxy.adm.model.AdmBuilding;
-import com.persagy.proxy.adm.model.AdmFloor;
-import com.persagy.proxy.adm.model.AdmSpace;
+import com.persagy.proxy.adm.model.*;
 import com.persagy.proxy.adm.request.AdmCreateRequest;
 import com.persagy.proxy.adm.request.AdmQueryCriteria;
 import com.persagy.proxy.adm.request.AdmResponse;
@@ -65,8 +64,20 @@ public class AdmSpaceController {
         // 组装上下文条件
         InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
         List<AdmSpace> vos = CollUtil.newArrayList(createRequest.getContent());
-        vos = service.doInsert(context, AdmSpace.class, vos);
-        return AdmResponse.success(vos);
+        String msg = null;
+        for (AdmSpace admSpace : vos) {
+            if(StrUtil.isEmpty(admSpace.getClassCode())){
+                msg = "classCode不可以为空!";
+                break;
+            }
+        }
+        if(StrUtil.isNotEmpty(msg)){
+            vos = service.doInsertExt(context, AdmSpace.class, vos);
+            return AdmResponse.success(vos);
+        }else{
+            return AdmResponse.failure(msg);
+        }
+
     }
 
     /**
@@ -158,16 +169,18 @@ public class AdmSpaceController {
     /**
      * 修改业务空间对象和建筑楼层的关系
      * spaceId 业务空间id,id 楼层或建筑id,type 业务空间的类型
-     * @param createRequest
+     * @param upDataFloorAndBuildingRequestsList
      * @return
      * @throws Exception
      */
     @PostMapping("/update-fl-bd")
-    public AdmResponse updateFlBd(@RequestBody AdmCreateRequest<AdmSpace> createRequest, @QueryParam("projectId") String projectId) throws Exception {
+    public AdmResponse updateFlBd(@RequestBody List<AdmUpDataFloorAndBuildingRequests> upDataFloorAndBuildingRequestsList, @QueryParam("projectId") String projectId) throws Exception {
+        if(CollUtil.isEmpty(upDataFloorAndBuildingRequestsList)){
+            return AdmResponse.failure("不可以传入空数据");
+        }
         // 组装上下文条件
         InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
-        List<AdmSpace> vos = CollUtil.newArrayList(createRequest.getContent());
-        vos = service.doUpdate(context, AdmSpace.class, vos);
+        List<AdmSpace> vos = service.doUpdateFloorORBuilding(context, upDataFloorAndBuildingRequestsList);
         return AdmResponse.success(vos);
     }
 
@@ -199,7 +212,19 @@ public class AdmSpaceController {
         // 组装上下文条件
         InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
         request.setName("space");
-        return service.doQuery(context, request, AdmSpace.class);
+        request.setProjection(null);
+        List<String> list = new ArrayList<>();
+        list.add("id");
+        list.add("name");
+        list.add("localId");
+        list.add("localName");
+        list.add("outline");
+        list.add("floorSequenceId");
+        list.add("modelId");
+        list.add("infos");
+        list.add("properties");
+        request.setProjection(list);
+        return service.doQuerySpaces(context, request, AdmSpace.class);
     }
 
 
@@ -216,7 +241,7 @@ public class AdmSpaceController {
         // 组装上下文条件
         InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
         request.setName("space");
-        return service.doQuery(context, request, AdmSpace.class);
+        return service.doQuery(context,request,AdmSpace.class);
     }
 
     /**
@@ -228,11 +253,11 @@ public class AdmSpaceController {
      */
     @PostMapping("/type")
     public AdmResponse queryType(@QueryParam("projectId") String projectId,
-                             @RequestBody AdmQueryCriteria request) throws Exception {
+                             @RequestBody AdmDCSQueryRequest request) throws Exception {
         // 组装上下文条件
         InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, AdmCommonConstant.APP_ID);
-        request.setName("space");
-        return service.doQuery(context, request, AdmSpace.class);
+
+        return service.doQueryType(context, request);
     }
 
 

+ 2 - 0
src/main/java/com/persagy/proxy/adm/model/AdmISpace.java

@@ -77,5 +77,7 @@ public class AdmISpace {
 
     /** 对象类型code */
     private String classCode = "ispace";
+    /** 创建时间 */
+    private Date createTime;
 
 }

+ 7 - 7
src/main/java/com/persagy/proxy/adm/model/AdmSpace.java

@@ -105,26 +105,26 @@ public class AdmSpace {
     /** 级联-设备 */
     @CascadeColumn(graphCode = "MechInArch", relCode = "Eq2Sp", selectToObj = false)
     private List<AdmEquipment> equipment;
-    /** 级联-元空间 */
-    //@SCascade(table="relationship.r_sp2si", idColumn="sp_id", childIdColumn="si_id")
-    //private List<AdmSpace> zoneIspace;
+    /** 级联-元空间 使用中台的信息点,查询需要单独处理*/
+    @CascadeColumn(graphCode = "MechInArch", relCode = "Sp2Si")
+    private List<AdmISpace> zoneIspace;
     /** 级联-系统 */
-    @CascadeColumn(graphCode = "MechInArch", relCode = "Sy2Sp", selectToObj = false)
+    @CascadeColumn(graphCode = "MechForArch", relCode = "Sy2Sp", selectToObj = false)
     private List<AdmSystem> generalSystem;
     /** 级联-服务于空间的设备 */
     @CascadeColumn(graphCode = "MechForArch", relCode = "Eq2Sp", selectToObj = false)
     private List<AdmEquipment> equipmentFor;
     /** 建筑信息实体类 */
-    @CascadeColumn(graphCode = "ArchSubset", relCode = "Bd2Sp")
+    @CascadeColumn(graphCode = "ArchSubset", relCode = "Bd2Sp", selectToObj = false)
     private AdmBuilding building;
     /** 楼层信息实体类 */
     @CascadeColumn(graphCode = "ArchSubset", relCode = "Fl2Sp", selectToObj = false)
     private AdmFloor floor;
     /** 级联-建筑 */
-    @CascadeColumn(graphCode = "ArchForArch", relCode = "Sp2Bd")
+    @CascadeColumn(graphCode = "ArchSubset", relCode = "Bd2Sp", selectToObj = false)
     private List<AdmBuilding> buildingList;
     /** 级联-楼层 */
-    @CascadeColumn(graphCode = "ArchForArch", relCode = "Sp2Fl")
+    @CascadeColumn(graphCode = "ArchSubset", relCode = "Fl2Sp", selectToObj = false)
     private List<AdmFloor> floorList;
     /** 资产列表 */
     @CascadeColumn

+ 60 - 0
src/main/java/com/persagy/proxy/adm/service/IAdmSpaceService.java

@@ -1,16 +1,76 @@
 package com.persagy.proxy.adm.service;
 
 import com.persagy.proxy.adm.model.AdmBuilding;
+import com.persagy.proxy.adm.model.AdmDCSQueryRequest;
 import com.persagy.proxy.adm.model.AdmSpace;
+import com.persagy.proxy.adm.model.AdmUpDataFloorAndBuildingRequests;
 import com.persagy.proxy.adm.request.AdmQueryCriteria;
 import com.persagy.proxy.adm.request.AdmResponse;
 import com.persagy.proxy.common.entity.InstanceUrlParam;
 import org.apache.poi.ss.formula.functions.T;
 
+import java.util.List;
+
 /**
  * ADM 空间 接口
  * @author lvxy
  * @date 2021/8/18
  */
 public interface IAdmSpaceService extends IAdmBaseService<AdmSpace>{
+
+    /**
+     * 新增
+     * @param context
+     * @param clazz
+     * @param voList
+     * @return
+     */
+    List<AdmSpace> doInsertExt(InstanceUrlParam context, Class<AdmSpace> clazz, List<AdmSpace> voList);
+
+    /**
+     * 修改
+     * @param context
+     * @param clazz
+     * @param voList
+     * @return
+     */
+    List<AdmSpace> doUpdateExt(InstanceUrlParam context, Class<AdmSpace> clazz, List<AdmSpace> voList);
+
+    /**
+     * 修改空间对象的楼层建筑信息
+     * @param context
+     * @param voList
+     * @return
+     */
+    List<AdmSpace> doUpdateFloorORBuilding(InstanceUrlParam context, List<AdmUpDataFloorAndBuildingRequests> voList);
+
+    /**
+     * 修改空间轮廓线
+     * @param context
+     * @param clazz
+     * @param voList
+     * @return
+     */
+    List<AdmSpace> doUpdateOutline(InstanceUrlParam context, Class<AdmSpace> clazz, List<AdmSpace> voList);
+
+
+    /**
+     * 删除
+     *
+     * @param context
+     * @param voList
+     * @return
+     */
+    void doDeleteExt(InstanceUrlParam context, List<AdmSpace> voList);
+
+    /**
+     * 查询业务空间所有类型
+     */
+    AdmResponse doQueryType(InstanceUrlParam context, AdmDCSQueryRequest request);
+
+
+    /**
+     * 查询业务空间
+     */
+    AdmResponse doQuerySpaces(InstanceUrlParam context, AdmQueryCriteria request, Class<AdmSpace> clazz);
 }

+ 7 - 2
src/main/java/com/persagy/proxy/adm/service/impl/AbstractAdmBaseServiceImpl.java

@@ -144,10 +144,15 @@ public class AbstractAdmBaseServiceImpl<T> implements IAdmBaseService<T> {
         if(CollUtil.isEmpty(relations)) {
             array.add("0");
         } else {
-            List<String> relList = CollUtil.getFieldValues(relations, "objTo", String.class);
+            List<String> relList = CollUtil.getFieldValues(relations, annotationInfo.selectToObj()?"objTo":"objFrom", String.class);
             relList.forEach(id -> array.add(id));
         }
-        return groupMapList(relations, "objFrom", "objTo");
+        if(annotationInfo.selectToObj()){
+            return groupMapList(relations, "objFrom", "objTo");
+        }else{
+            return groupMapList(relations, "objTo", "objFrom");
+        }
+
     }
 
     /**

+ 2 - 2
src/main/java/com/persagy/proxy/adm/service/impl/AdmEquipmentServiceImpl.java

@@ -161,7 +161,7 @@ public class AdmEquipmentServiceImpl extends AbstractAdmBaseServiceImpl<AdmEquip
         return rwdClient.queryRelation(context, dmpRequest);
     }
 
-    private DmpResult<JSONArray> queryObject(InstanceUrlParam context, Map<String, AdmEquipment> peMap){
+    private DmpResult<JSONArray> queryObjectById(InstanceUrlParam context, Map<String, AdmEquipment> peMap){
         QueryCriteria criteriaObject = new QueryCriteria();
         ObjectNode criteriaPe = JsonNodeFactory.instance.objectNode();
         ArrayNode array = criteriaPe.putObject("id").putArray("$in");
@@ -258,7 +258,7 @@ public class AdmEquipmentServiceImpl extends AbstractAdmBaseServiceImpl<AdmEquip
         boolean isDealDataSucc = false;
         Map<String, AdmEquipment> peMap = CollUtil.fieldValueMap(voList, "propertyId");
         //查询资产
-        DmpResult<JSONArray> resultPe = queryObject(context, peMap);
+        DmpResult<JSONArray> resultPe = queryObjectById(context, peMap);
         if (CollUtil.isNotEmpty(resultPe.getData())) {
             //更新资产 创建资产设备关系
             List<AdmProperty> propertyList = AdmEntityTransferUtil.toAdmMultiEntity(resultPe.getData(), null, AdmProperty.class);

+ 314 - 2
src/main/java/com/persagy/proxy/adm/service/impl/AdmSpaceServiceImpl.java

@@ -1,24 +1,336 @@
 package com.persagy.proxy.adm.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.JsonNodeFactory;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.persagy.dmp.basic.model.QueryCriteria;
-import com.persagy.proxy.adm.model.AdmBuilding;
-import com.persagy.proxy.adm.model.AdmSpace;
+import com.persagy.dmp.common.model.entity.BaseEntity;
+import com.persagy.dmp.define.entity.ObjectTypeDefine;
+import com.persagy.proxy.adm.model.*;
 import com.persagy.proxy.adm.request.AdmQueryCriteria;
 import com.persagy.proxy.adm.request.AdmResponse;
 import com.persagy.proxy.adm.service.IAdmSpaceService;
+import com.persagy.proxy.common.client.DmpRwdClient;
+import com.persagy.proxy.common.entity.DmpResult;
 import com.persagy.proxy.common.entity.InstanceUrlParam;
+import com.persagy.proxy.common.entity.ObjRelationDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.*;
+import java.util.stream.Collectors;
+
 /**
  * ADM 空间 实现类
  * @author lvxy
  * @date 2021/8/18
  */
+@Slf4j
 @Service
 public class AdmSpaceServiceImpl extends AbstractAdmBaseServiceImpl<AdmSpace> implements IAdmSpaceService {
+    @Autowired
+    private DmpRwdClient rwdClient;
+    @Autowired
+    private ObjectMapper objectMapper;
+
+    @Override
+    public List<AdmSpace> doInsertExt(InstanceUrlParam context, Class<AdmSpace> clazz, List<AdmSpace> voList) {
+        Map<String, AdmSpace> spaceIdMap = CollUtil.fieldValueMap(voList, BaseEntity.PROP_ID);
+        //key spid, value floorId
+        Map<String, String> spId2FlId_map = voList.stream().filter(admSpace -> StrUtil.isNotEmpty(admSpace.getFloorId())).collect(Collectors.toMap(AdmSpace::getId,AdmSpace::getFloorId));
+        //查询空间中floorId 对应的flool
+        DmpResult<JSONArray> floors = queryFloors(context, spId2FlId_map);
+        ArrayList<AdmFloor> floorList = CollUtil.newArrayList(JSONUtil.toList(floors.getData().toString(),AdmFloor.class));
+        //space.height = floor.infos.height
+        List<AdmSpace> vos = processHeight(spaceIdMap, floorList, spId2FlId_map);
+        //插入空间
+        List<AdmSpace> vosR = doInsert(context, clazz, vos);
+        //添加绑定关系
+        DmpResult<List<ObjRelationDTO>> dmpResult = processRelations(context, vosR);
+        //处理关系标记
+        //TODO 处理关系标记
+        //processRelationType();
+        return doInsert(context, clazz, vosR);
+    }
+
+    @Override
+    public List<AdmSpace> doUpdateExt(InstanceUrlParam context, Class<AdmSpace> clazz, List<AdmSpace> voList) {
+        return null;
+    }
+
+
+
+    @Override
+    public List<AdmSpace> doUpdateFloorORBuilding(InstanceUrlParam context, List<AdmUpDataFloorAndBuildingRequests> voList) {
+
+            voList.stream().forEach(requestData -> {
+
+            });
+
+            //根据id查询对象集合
+            //处理关系
+
+
+
+
+
+        return null;
+    }
+
+    @Override
+    public List<AdmSpace> doUpdateOutline(InstanceUrlParam context, Class<AdmSpace> clazz, List<AdmSpace> voList) {
+        return null;
+    }
+
+    @Override
+    public void doDeleteExt(InstanceUrlParam context, List<AdmSpace> voList) {
+
+    }
+
+    @Override
+    public AdmResponse doQueryType(InstanceUrlParam context, AdmDCSQueryRequest request) {
+        //查询定义类型
+        DmpResult<JSONArray> resultDef = queryDefineType(context);
+        List<JSONObject> defineList = null;
+        if(resultDef.getResult().equals(DmpResult.SUCCESS)){
+            defineList = JSONUtil.toList(resultDef.getData().toString(), JSONObject.class);
+            //获取实际空间对象的数量
+            Map<String, JSONObject> classCodeMap = CollUtil.fieldValueMap(defineList, "code");
+            if(StrUtil.isNotEmpty(request.getFloorId())){
+                //根据classCode floorId 查询查询实际存在的空间
+                //根据floorId查询关系 Fl2Sp
+                DmpResult<List<ObjRelationDTO>> relationDmpResult = queryRelationByFloorId(context, "Fl2Sp",  request.getFloorId());
+                //根据关系查询结果中的spaceId查询存在的空间数量
+                Map<String, ObjRelationDTO> relationMap = new HashMap<>(16);
+                if(CollUtil.isEmpty(relationDmpResult.getData())){
+                    relationMap = CollUtil.fieldValueMap(relationDmpResult.getData(), "objTo");
+                }
+                transTo(context, defineList, relationMap.keySet());
+            }
+            // 设置返回值
+            AdmResponse response = AdmResponse.success(defineList);
+            Long total = resultDef.getCount() == null ? null : resultDef.getCount().longValue();
+            response.setTotal(total);
+            return response;
+        }else{
+            return null;
+        }
+    }
+
+    @Override
+    public AdmResponse doQuerySpaces(InstanceUrlParam context, AdmQueryCriteria request, Class<AdmSpace> clazz) {
+        return null;
+    }
+
+
+    /**
+     * 查询空间flooId对应的infos中height存在的 flool
+     * @param context
+     * @param spId2FlId_map
+     * @return
+     */
+    private DmpResult<JSONArray> queryFloors(InstanceUrlParam context, Map<String, String> spId2FlId_map){
+        QueryCriteria criteriaObject = new QueryCriteria();
+        ObjectNode criteriaPe = JsonNodeFactory.instance.objectNode();
+        ArrayNode array = criteriaPe.putObject("id").putArray("$in");
+        spId2FlId_map.values().forEach(floorId -> array.add(floorId));
+        criteriaPe.put("classCode", "floor");
+        criteriaPe.put("objType", "floor");
+
+        JSONObject height = new JSONObject();
+        height.put("$gt", 0f);
+        criteriaPe.putPOJO("height", height);
+
+        criteriaObject.setCriteria(criteriaPe);
+        criteriaObject.setSize(spId2FlId_map.size() * 1L);
+        criteriaObject.setPage(1L);
+        criteriaObject.setWithoutCount(true);
+        // 转换参数
+        JSONObject paraPe = null;
+        try {
+            String paraStr = objectMapper.writeValueAsString(criteriaObject);
+            paraPe = JSONObject.parseObject(paraStr);
+        } catch (JsonProcessingException e) {
+            log.error(e.getMessage(), e);
+            return null;
+        }
+        return rwdClient.queryObject(context, paraPe);
+    }
+
+    /**
+     * space.height = floor.infos.height
+     * @param spaceIdMap
+     * @param floorList
+     * @param spId2FlId_map
+     * @return
+     */
+    private List<AdmSpace> processHeight(Map<String, AdmSpace> spaceIdMap, List<AdmFloor> floorList,  Map<String, String> spId2FlId_map){
+        Map<String, String> newMap = spId2FlId_map.entrySet().stream().collect(Collectors.toMap(entry -> entry.getValue(), entry -> entry.getKey()));
+        floorList.forEach(admFloor -> {
+            if(CollUtil.isNotEmpty(admFloor.getInfos())){
+                Float height = (Float) admFloor.getInfos().get("height");
+                AdmSpace admSpace = spaceIdMap.get(newMap.get(admFloor.getId()));
+                admSpace.setHeight(height);
+            }
+        });
+        return (List<AdmSpace>) spaceIdMap.values();
+    }
+
+    /**
+     * 添加绑定关系
+     */
+    private DmpResult<List<ObjRelationDTO>> processRelations(InstanceUrlParam context, List<AdmSpace> vosR){
+        if(CollUtil.isNotEmpty(vosR)){
+            JSONArray jsonArray = new JSONArray();
+            vosR.forEach(admSpace -> {
+                JSONObject requestData = new JSONObject();
+                if (StrUtil.isNotEmpty(admSpace.getBuildingId())) {
+                    addXParam("Bd2Sp", admSpace.getBuildingId(), admSpace.getId(), requestData);
+                    addCommParam(context, requestData);
+                    jsonArray.add(requestData);
+                }
+                if (StrUtil.isNotEmpty(admSpace.getFloorId())) {
+                    addXParam("Fl2Sp", admSpace.getFloorId(), admSpace.getId(), requestData);
+                    addCommParam(context, requestData);
+                    jsonArray.add(requestData);
+                }
+            });
+            DmpResult<List<ObjRelationDTO>> dmpResult = rwdClient.createObjRelations(context,jsonArray);
+            return dmpResult;
+        }else{
+            return null;
+        }
+    }
+
+    private JSONObject addXParam(String relCode, String masterObjType, String slaveObjType, JSONObject requestData){
+        requestData.put("relCode", "Bd2Sp");
+        requestData.put("masterObjType", masterObjType);
+        requestData.put("slaveObjType", slaveObjType);
+        return requestData;
+    }
+
+    private JSONObject addCommParam(InstanceUrlParam context, JSONObject requestData){
+        requestData.put("sign", 1);
+        requestData.put("graphCode", context.getGroupCode());
+        requestData.put("projectId", context.getProjectId());
+        return requestData;
+    }
+
+    /**
+     * TODO 处理关系标记
+     */
+    private void processRelationType(InstanceUrlParam context, List<AdmSpace> vosR){
+        String[] relationTypes = {"sp2sp_SpaceNeighborhood_5", "sp2sp_TrafficNetwork_1", "sp2sp_ConvectionNetwork_1", "sp2sp_RadiationNetwork_1"};
+        List<String> listtype = Arrays.asList(relationTypes);
+        JSONArray jsonArray = new JSONArray();
+        listtype.forEach(type -> {
+            JSONObject relationProjectCal = new JSONObject();
+            addCommParam(context, relationProjectCal);
+            //relationProjectCal.put("");
+
+        });
+        String relationType = "eq2sp_in";
+        /**
+         * val relationType = relationTypeProjectservice.select(SFilter.eq("projectId", projectId!!), SFilter.eq("relationType", "eq2sp_in"),SFilter.eq("zoneType", zoneSpace.classCode!!)).entity()
+         *             if (relationType!=null){
+         *                     relationType.computationalState = 2
+         *                     relationTypeProjectservice.update(relationType)
+         *             }
+         */
+    }
+
+    /**
+     * 清楚和空间关联的数据
+     */
+    private void deleteRelation(InstanceUrlParam context, String relCode, String ObjType){
+    }
+
+    /** 根据floorId查询关系 Fl2Sp
+     * @return*/
+    private DmpResult<List<ObjRelationDTO>> queryRelationByFloorId(InstanceUrlParam context, String relCode, String objFrom){
+        QueryCriteria dmpRequest = new QueryCriteria();
+        ObjectNode criteria = JsonNodeFactory.instance.objectNode();
+        criteria.put("relCode", relCode);
+        if(StrUtil.isNotEmpty(objFrom)){
+            criteria.put("objFrom", objFrom);
+        }
+        dmpRequest.setCriteria(criteria);
+        dmpRequest.setPage(1L);
+        dmpRequest.setWithoutCount(true);
+        // 转换参数
+        JSONObject paraRel = null;
+        try {
+            String paraStr = objectMapper.writeValueAsString(dmpRequest);
+            paraRel = JSONObject.parseObject(paraStr);
+        } catch (JsonProcessingException e) {
+            log.error(e.getMessage(), e);
+        }
+        return rwdClient.queryRelation(context, dmpRequest);
+    }
+
+    /**
+     * 转换为目标实体,并增加属性
+     */
+    private void transTo(InstanceUrlParam context, List<JSONObject> defineList, Set<String> relations){
+        boolean needCount = true;
+        defineList.stream().forEach(defineType -> {
+            //查询空间数量
+            int count = needCount ? countSpace(context, defineType.getString("code"), relations) : 0;
+            defineType.put("count", count);
+            defineType.put("projectId", context.getProjectId());
+        });
+    }
+
+    /**
+     * 查询存在空间的数量
+     * @param context
+     * @param classCode
+     * @param spaceIds
+     * @return
+     */
+    private int countSpace(InstanceUrlParam context, String classCode, Set<String> spaceIds){
+        QueryCriteria rwdQueryCriteria = new QueryCriteria();
+        ObjectNode rwdCriteria = JsonNodeFactory.instance.objectNode();
+        ArrayNode arrayIds = rwdCriteria.putObject("id").putArray("$in");
+        spaceIds.forEach(spaceId -> arrayIds.add(spaceId));
+        rwdCriteria.put("objType", "space");
+        rwdCriteria.put("classCode", classCode);
+        rwdQueryCriteria.setCriteria(rwdCriteria);
+        rwdQueryCriteria.setOnlyCount(true);
+        // 转换参数
+        JSONObject paraRel = null;
+        try {
+            String paraStr = objectMapper.writeValueAsString(rwdQueryCriteria);
+            paraRel = JSONObject.parseObject(paraStr);
+        } catch (JsonProcessingException e) {
+            log.error(e.getMessage(), e);
+        }
+        return rwdClient.queryObject(context, paraRel).getCount();
+    }
+
+
+    private DmpResult<JSONArray> queryDefineType(InstanceUrlParam context){
+        QueryCriteria criteriaObject = new QueryCriteria();
+        ObjectNode criteriaEq = JsonNodeFactory.instance.objectNode();
+        criteriaEq.put("parentCode", "space");
+        JSONObject paraPe = null;
+        try {
+            String paraStr = objectMapper.writeValueAsString(criteriaObject);
+            paraPe = JSONObject.parseObject(paraStr);
+        } catch (JsonProcessingException e) {
+            throw new RuntimeException("查询公共定义的空间类型,转换查询条件出错:" + e.getMessage());
+        }
+        return rwdClient.queryDefClass(context, paraPe);
+    }
+
+
 }

+ 56 - 0
src/main/java/com/persagy/proxy/common/client/DmpRwdClient.java

@@ -129,4 +129,60 @@ public interface DmpRwdClient {
     @PostMapping(DmpUrlConstant.DEF_FUNCID_DEL_BATCH)
     DmpResult<JSONArray> batchDeleteObjectInfo(@SpringQueryMap InstanceUrlParam objectUrlParam, @RequestBody List<String> objectIdList);
 
+
+    /**
+     * @description: 创建关系 标记计算关系
+     * @param: objectUrlParam
+     * @param: objectArr
+     * @return: com.persagy.dmp.common.DmpResult
+     */
+    @PostMapping(DmpUrlConstant.OBJECT_COMPATIBLE_CREATE)
+    DmpResult<List<ObjRelationDTO>> createObjRelations(@SpringQueryMap InstanceUrlParam objectUrlParam, @RequestBody JSONArray objectArr);
+
+    /**
+     * @description: 删除关系 标记计算关系
+     * @param: objectUrlParam
+     * @param: objectArr
+     * @return: com.persagy.dmp.common.DmpResult
+     */
+    @PostMapping(DmpUrlConstant.OBJECT_COMPATIBLE_CREATE)
+    DmpResult<List<ObjRelationDTO>> deleteObjRelations(@SpringQueryMap InstanceUrlParam objectUrlParam, @RequestBody JSONArray objectArr);
+
+    /**
+     * @description: 创建关系 标记计算关系
+     * @param: objectUrlParam
+     * @param: objectArr
+     * @return: com.persagy.dmp.common.DmpResult
+     */
+    @PostMapping(DmpUrlConstant.RELATION_PROJECT_CAL_CREATE)
+    DmpResult<JSONArray> createRelationProjectCal(@SpringQueryMap InstanceUrlParam objectUrlParam, @RequestBody JSONArray objectArr);
+
+    /**
+     * @description: 删除关系 标记计算关系
+     * @param: objectUrlParam
+     * @param: objectArr
+     * @return: com.persagy.dmp.common.DmpResult
+     */
+    @PostMapping(DmpUrlConstant.RELATION_PROJECT_CAL_DELETE)
+    DmpResult<JSONArray> deleteRelationProjectCal(@SpringQueryMap InstanceUrlParam objectUrlParam, @RequestBody JSONArray objectArr);
+
+    /**
+     * @description: 更新关系 标记计算关系
+     * @param: objectUrlParam
+     * @param: objectArr
+     * @return: com.persagy.dmp.common.DmpResult
+     */
+    @PostMapping(DmpUrlConstant.RELATION_PROJECT_CAL_UPDATE)
+    DmpResult<JSONArray> updateRelationProjectCal(@SpringQueryMap InstanceUrlParam objectUrlParam, @RequestBody JSONArray objectArr);
+
+    /**
+     * @description: 删除关系 标记计算关系
+     * @param: objectUrlParam
+     * @param: objectArr
+     * @return: com.persagy.dmp.common.DmpResult
+     */
+    @PostMapping(DmpUrlConstant.RELATION_PROJECT_CAL_QUERY)
+    DmpResult<JSONArray> queryRelationProjectCal(@SpringQueryMap InstanceUrlParam objectUrlParam, @RequestBody JSONArray objectArr);
+
+
 }

+ 31 - 0
src/main/java/com/persagy/proxy/common/constant/DmpUrlConstant.java

@@ -118,4 +118,35 @@ public class DmpUrlConstant {
      */
     public static final String DIC_DATA_QUERY = "/dic/dt/data/query";
 
+    // ==================中台关系计算入口=========================================================================
+    /**
+     * 关系计算创建
+     */
+    public static final String OBJECT_COMPATIBLE_CREATE = "rwd/instance/object/compatible/createObjRelationsByKeywordAndObjType";
+
+    /**
+     * 关系计算删除
+     */
+    public static final String OBJECT_COMPATIBLE_DELETE = "rwd/instance/object/compatible/deleteObjRelationsByRelId";
+
+
+    /**
+     * 查询
+     */
+    public static final String RELATION_PROJECT_CAL_QUERY = "/rwd/instance/relation/project/cal/query";
+    /**
+     * 字典数据查询
+     */
+    public static final String RELATION_PROJECT_CAL_CREATE = "/rwd/instance/relation/project/cal/create";
+    /**
+     * 更新
+     */
+    public static final String RELATION_PROJECT_CAL_UPDATE = "/rwd/instance/relation/project/cal/update";
+
+    /**
+     * 删除
+     */
+    public static final String RELATION_PROJECT_CAL_DELETE = "/rwd/instance/relation/project/cal/delete";
+
+
 }