Explorar el Código

Merge branch 'develop' of http://39.106.8.246:3003/BDTP/adm-middleware.git into develop

zhangqiankun hace 3 años
padre
commit
30cb2e0a12
Se han modificado 25 ficheros con 573 adiciones y 256 borrados
  1. 4 3
      src/main/java/com/persagy/proxy/adm/constant/AdmRelationTypeEnum.java
  2. 4 3
      src/main/java/com/persagy/proxy/adm/controller/AdmDictController.java
  3. 3 1
      src/main/java/com/persagy/proxy/adm/controller/AdmEquipShaftController.java
  4. 1 18
      src/main/java/com/persagy/proxy/adm/controller/AdmShaftController.java
  5. 3 3
      src/main/java/com/persagy/proxy/adm/controller/AdmSpaceController.java
  6. 37 11
      src/main/java/com/persagy/proxy/adm/controller/AdmSystemController.java
  7. 2 2
      src/main/java/com/persagy/proxy/adm/controller/RelationReportController.java
  8. 11 14
      src/main/java/com/persagy/proxy/adm/controller/RelationShInBdController.java
  9. 26 0
      src/main/java/com/persagy/proxy/adm/model/AdmDefFuncIdGather.java
  10. 4 1
      src/main/java/com/persagy/proxy/adm/model/AdmDictQueryCriteria.java
  11. 3 64
      src/main/java/com/persagy/proxy/adm/model/AdmSBaseEntity.java
  12. 1 1
      src/main/java/com/persagy/proxy/adm/model/AdmShaft.java
  13. 2 2
      src/main/java/com/persagy/proxy/adm/model/AdmSpace.java
  14. 20 0
      src/main/java/com/persagy/proxy/adm/service/IAdmDictBaseService.java
  15. 15 5
      src/main/java/com/persagy/proxy/adm/service/IAdmDictService.java
  16. 2 2
      src/main/java/com/persagy/proxy/adm/service/IRelationReportService.java
  17. 4 1
      src/main/java/com/persagy/proxy/adm/service/impl/AbstractAdmBaseServiceImpl.java
  18. 58 11
      src/main/java/com/persagy/proxy/adm/service/impl/AbstractAdmDictBaseServiceImpl.java
  19. 146 10
      src/main/java/com/persagy/proxy/adm/service/impl/AdmDictServiceImpl.java
  20. 1 0
      src/main/java/com/persagy/proxy/adm/service/impl/AdmFloorServiceImpl.java
  21. 2 2
      src/main/java/com/persagy/proxy/adm/service/impl/AdmSpaceServiceImpl.java
  22. 193 102
      src/main/java/com/persagy/proxy/adm/service/impl/RelationReportService.java
  23. 2 0
      src/main/java/com/persagy/proxy/adm/utils/AdmQueryCriteriaHelper.java
  24. 19 0
      src/main/java/com/persagy/proxy/common/client/DmpRwdClient.java
  25. 10 0
      src/main/java/com/persagy/proxy/common/constant/DmpUrlConstant.java

+ 4 - 3
src/main/java/com/persagy/proxy/adm/constant/AdmRelationTypeEnum.java

@@ -382,7 +382,8 @@ public enum AdmRelationTypeEnum {
      */
     public static Map<String,AdmRelationTypeEnum> getRelationTypeMap(){
         List<AdmRelationTypeEnum> enumList = EnumUtils.getEnumList(AdmRelationTypeEnum.class);
-        return enumList.stream().collect(Collectors.toMap(AdmRelationTypeEnum::getRelationType,admRelationTypeEnum -> admRelationTypeEnum));
+        return enumList.stream().collect(Collectors.toMap(AdmRelationTypeEnum::getRelationType,
+                admRelationTypeEnum -> admRelationTypeEnum,(k1,k2)->k1));
     }
     
     /***
@@ -395,8 +396,8 @@ public enum AdmRelationTypeEnum {
      */
     public static Map<String,AdmRelationTypeEnum> getGraphRelTypeMap(){
         List<AdmRelationTypeEnum> enumList = EnumUtils.getEnumList(AdmRelationTypeEnum.class);
-        return enumList.stream().collect(Collectors.toMap(k -> k.getGraphCode() + AdmCommonConstant.UNDERLINE + k.getRelCode(),
-        		admRelationTypeEnum -> admRelationTypeEnum));
+        return enumList.stream().collect(Collectors.toMap(k -> (k.getGraphCode() + AdmCommonConstant.UNDERLINE + k.getRelCode()),
+        		admRelationTypeEnum -> admRelationTypeEnum,(k1,k2)->k1));
     }
 
 }

+ 4 - 3
src/main/java/com/persagy/proxy/adm/controller/AdmDictController.java

@@ -1,6 +1,7 @@
 package com.persagy.proxy.adm.controller;
 
 import cn.hutool.core.collection.CollUtil;
+import com.persagy.dmp.define.entity.ObjectInfoCollect;
 import com.persagy.proxy.adm.constant.AdmCommonConstant;
 import com.persagy.proxy.adm.constant.AdmDictConstant;
 import com.persagy.proxy.adm.constant.enums.AdmDictCategoryEnum;
@@ -88,7 +89,7 @@ public class AdmDictController {
         // 组装上下文条件
         InstanceUrlParam context = AdmContextUtil.toDmpContext();
         request.setName(request.getType());
-        return service.doQueryObjectInfo(context, request, AdmDictConstant.CLASS_CODE, AdmObjectInfo.class);
+        return service.query(context, request, AdmDictConstant.CLASS_CODE, AdmObjectInfo.class);
     }
 
     /**
@@ -151,10 +152,10 @@ public class AdmDictController {
      */
     @PostMapping("/setting-dic-project")
     public AdmResponse settingDicProject(@QueryParam("projectId") String projectId,
-                                 @RequestBody AdmCreateRequest<AdmObjectInfo> request) throws Exception {
+                                 @RequestBody AdmCreateRequest<AdmDefFuncIdGather> request) throws Exception {
         // 组装上下文条件
         InstanceUrlParam context = AdmContextUtil.toDmpContext();
-        return service.settingDicProject(context,request,AdmObjectInfo.class);
+        return service.settingDicProject(context,request, ObjectInfoCollect.class);
     }
 
     /**

+ 3 - 1
src/main/java/com/persagy/proxy/adm/controller/AdmEquipShaftController.java

@@ -67,6 +67,8 @@ public class AdmEquipShaftController {
         request.setName(AdmEquipment.OBJ_TYPE);
         // 设置关系条件
         request.resetRelationCond(true, "MechInArch", "Eq2Sh", shaftId, false);
+        // TODO 级别获取设备类别对象未处理,再单独查一次即可
+
         return equipmentService.doQuery(AdmContextUtil.toDmpContext(), request, AdmEquipment.class);
     }
 
@@ -241,7 +243,7 @@ public class AdmEquipShaftController {
         ObjectNode criteriaRel = JsonNodeFactory.instance.objectNode();
         criteriaRel.put("graphCode", "ArchSubset");
         criteriaRel.put("relCode", "Sh2Sp");
-        criteriaRel.put("refValue", objectType);
+        criteriaRel.put("relValue", objectType);
         criteriaRel.put("objFrom", shaftId);
         queryRequest.setCriteria(criteriaRel);
         List<ObjectRelation> relations = relationService.queryByCondition(context, queryRequest);

+ 1 - 18
src/main/java/com/persagy/proxy/adm/controller/AdmShaftController.java

@@ -152,24 +152,7 @@ public class AdmShaftController {
     @PostMapping("/query")
     public AdmResponse query(@RequestBody AdmQueryCriteria request) throws Exception {      
         request.setName(AdmShaft.OBJ_TYPE);
-        QueryCriteria queryCriteria = AdmQueryCriteriaHelper.toDmpCriteria(request);
-        ObjectNode criteria = queryCriteria.getCriteria();
-        //查询参数特殊处理 处理成中台可以识别的条件
-        if(!JSONUtil.isNull(criteria)){
-           Map<String, Object> criteriaMap = objectMapper.convertValue(criteria, Map.class);
-           if(CollUtil.isNotEmpty(criteriaMap)){
-               ObjectNode criteriaNew = JsonNodeFactory.instance.objectNode();
-               criteriaMap.keySet().stream().forEach(key -> {
-                   if(key.startsWith("infos.")){
-                        criteriaNew.put(key.substring(6), criteriaMap.get(key).toString());
-                   }else{
-                       criteriaNew.put(key, criteriaMap.get(key).toString());
-                   }
-               });
-               queryCriteria.setCriteria(criteriaNew);
-           }
-        }
-        return service.doQuery(AdmContextUtil.toDmpContext(), queryCriteria, AdmShaft.class);
+        return service.doQuery(AdmContextUtil.toDmpContext(), request, AdmShaft.class);
     }
 
     /**

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

@@ -65,7 +65,7 @@ public class AdmSpaceController {
      * @throws Exception
      */
     @PostMapping("/create")
-    public AdmResponse create(@RequestBody AdmCreateRequest<AdmSpace> createRequest, @QueryParam("projectId") String projectId) throws Exception {
+    public AdmResponse create(@RequestBody AdmCreateRequest<AdmSpace> createRequest) throws Exception {
         List<AdmSpace> vos = CollUtil.newArrayList(createRequest.getContent());
         String msg = null;
         for (AdmSpace admSpace : vos) {
@@ -255,7 +255,7 @@ public class AdmSpaceController {
      * @throws Exception
      */
     @PostMapping("/update-outline")
-    public AdmResponse updateOutLine(@RequestBody AdmCreateRequest<AdmSpace> createRequest, @QueryParam("projectId") String projectId) throws Exception {
+    public AdmResponse updateOutLine(@RequestBody AdmCreateRequest<AdmSpace> createRequest) throws Exception {
         List<AdmSpace> vos = CollUtil.newArrayList(createRequest.getContent());
         vos = service.doUpdate( AdmContextUtil.toDmpContext(), AdmSpace.class, vos);
         //TODO 更新计算关系ZoneSpaceBaseService.upDateOutline
@@ -295,7 +295,7 @@ public class AdmSpaceController {
      * @throws Exception
      */
     @PostMapping("/space-type")
-    public List<JSONObject> querySpaceType(@QueryParam("projectId") String projectId) throws Exception {
+    public List<JSONObject> querySpaceType() throws Exception {
         return service.doQuerySpaceTypes( AdmContextUtil.toDmpContext());
     }
 

+ 37 - 11
src/main/java/com/persagy/proxy/adm/controller/AdmSystemController.java

@@ -20,24 +20,19 @@ 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;
-import com.persagy.proxy.adm.service.IAdmBuildingService;
-import com.persagy.proxy.adm.service.IAdmDictService;
-import com.persagy.proxy.adm.service.IAdmFloorService;
-import com.persagy.proxy.adm.service.IAdmSystemService;
+import com.persagy.proxy.adm.service.*;
 import com.persagy.proxy.adm.utils.AdmContextUtil;
 import com.persagy.proxy.adm.utils.AdmQueryCriteriaHelper;
 import com.persagy.proxy.adm.utils.ObjectNameUtil;
 import com.persagy.proxy.common.entity.DmpResult;
+import com.persagy.proxy.common.entity.RelationDTO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.json.JsonObject;
 import javax.validation.constraints.NotNull;
 import javax.ws.rs.QueryParam;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * Adm 系统 API
@@ -56,6 +51,8 @@ public class AdmSystemController {
     private IAdmFloorService floorService;
     @Autowired
     private IAdmDictService dictService;
+    @Autowired
+    private IAdmRelationService relationService;
 
     /**
      * 统计
@@ -91,7 +88,7 @@ public class AdmSystemController {
      * @throws Exception
      */
     @PostMapping("/create-bd-fl")
-    public AdmResponse createBdFl(@RequestBody AdmCreateRequest<AdmSystem> createRequest, @QueryParam("projectId") String projectId) throws Exception {
+    public AdmResponse createBdFl(@RequestBody AdmCreateRequest<AdmSystem> createRequest) throws Exception {
         List<AdmSystem> vos = CollUtil.newArrayList(createRequest.getContent());
 
         Map<String, AdmSystem> admSystemMap = CollUtil.fieldValueMap(vos, "classCode");
@@ -112,8 +109,37 @@ public class AdmSystemController {
                 }
             }
         });
-        vos = service.doInsert(AdmContextUtil.toDmpContext(), AdmSystem.class, vos);
-        return AdmResponse.success(vos);
+        List<AdmSystem> unRelationSys = new ArrayList<>();
+        List<AdmSystem> admSystemList = new ArrayList<>(vos.size());
+        vos.stream().forEach(admSystem -> {
+            if(CollUtil.isNotEmpty(admSystem.getBuildingFloorInfoList())){
+                List<AdmSystem> admSystems = service.doInsert(AdmContextUtil.toDmpContext(), AdmSystem.class, CollUtil.newArrayList(admSystem));
+                //添加关系
+                String systemId = admSystems.get(0).getId();
+                List<RelationDTO> relationDTOS = new ArrayList<>(admSystem.getBuildingFloorInfoList().size());
+                admSystem.getBuildingFloorInfoList().forEach(info -> {
+                    String floorId = info.get("FloorID") == null ? null : info.get("FloorID").textValue();
+                    String buildID = info.get("BuildID") == null ? null : info.get("BuildID").textValue();
+                    if(StrUtil.isNotEmpty(floorId)){
+                        relationDTOS.add(new RelationDTO(null, "MechInArch", "Bd2Fl", null, systemId , floorId));
+                    }
+                    if(StrUtil.isNotEmpty(buildID)){
+                        relationDTOS.add(new RelationDTO(null, "MechForArch", "Sy2Bd", null, systemId , buildID));
+                    }
+                });
+                if(CollUtil.isNotEmpty(relationDTOS)){
+                    relationService.doSave(AdmContextUtil.toDmpContext(), relationDTOS);
+                }
+                admSystemList.addAll(admSystems);
+            }else{
+                unRelationSys.add(admSystem);
+            }
+        });
+        if(CollUtil.isNotEmpty(unRelationSys)){
+            List<AdmSystem> systemList = service.doInsert(AdmContextUtil.toDmpContext(), AdmSystem.class, unRelationSys);
+            admSystemList.addAll(systemList);
+        }
+        return AdmResponse.success(admSystemList);
     }
 
     /**

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

@@ -93,7 +93,7 @@ public class RelationReportController {
 	public AdmResponse countRelationObjects(@RequestParam String type, HttpServletRequest request) {
 		String groupCode = request.getHeader(AdmCommonConstant.GROUP_CODE_HEADER);
 		String projectId = request.getHeader(AdmCommonConstant.PROJECT_ID_HEADER);
-		ObjectNode objectNode = this.relationReportService.getRelationProjectCal(groupCode, projectId, type);
+		JSONObject objectNode = this.relationReportService.getRelationProjectCal(groupCode, projectId, type);
  		return AdmResponse.success(Lists.newArrayList(objectNode));
 	}
 	
@@ -120,7 +120,7 @@ public class RelationReportController {
 	public AdmResponse queryRelationObjects(@RequestBody AdmQueryCriteria queryCriteria, HttpServletRequest request) {
 		String groupCode = request.getHeader(AdmCommonConstant.GROUP_CODE_HEADER);
 		String projectId = request.getHeader(AdmCommonConstant.PROJECT_ID_HEADER);
-		List<ObjectNode> relationProjectCal = this.relationReportService.getAllRelationProjectCal(groupCode, projectId);
+		List<JSONObject> relationProjectCal = this.relationReportService.getAllRelationProjectCal(groupCode, projectId);
 		return AdmResponse.success(relationProjectCal);
 	}
 	

+ 11 - 14
src/main/java/com/persagy/proxy/adm/controller/RelationShInBdController.java

@@ -5,21 +5,22 @@ import com.persagy.proxy.adm.model.relation.ShInBdList;
 import com.persagy.proxy.adm.request.AdmResponse;
 import com.persagy.proxy.adm.service.IAdmRelationService;
 import com.persagy.proxy.adm.utils.AdmContextUtil;
-import com.persagy.proxy.common.entity.InstanceUrlParam;
 import com.persagy.proxy.common.entity.RelationDTO;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.util.CollectionUtils;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 import java.util.ArrayList;
 import java.util.List;
 
 /**
+ * 关系-竖井所在建筑
  * @author zhangwencheng
- *关系-竖井所在建筑
  */
 @Slf4j
 @RestController
@@ -29,14 +30,11 @@ public class RelationShInBdController {
     @Autowired
     private IAdmRelationService service;
 
-    @Value("${middleware.group.code}")
-    private String groupCode;
     /**
      * 创建竖井所在建筑关系
      * @param shInBdList
      * @return
      */
-
     @PostMapping("link-bd")
     public AdmResponse createBd(@RequestBody ShInBdList shInBdList){
         log.info("创建系统所在建筑关系link-bd");
@@ -47,16 +45,15 @@ public class RelationShInBdController {
             return AdmResponse.failure("必填项:shaftId(竖井id)、BuildingIdList(建筑id列表)");
         }
         List<RelationDTO> voList = new ArrayList<>();
-        AdmRelationTypeEnum typeEnum = AdmRelationTypeEnum.BD2SH_ARCHFORARCH;
-        String graphCode = typeEnum.getGraphCode();
-        String relCode = typeEnum.getRelCode();
+        String graphCode = AdmRelationTypeEnum.BD2SH_ARCHFORARCH.getGraphCode();
+        String relCode = AdmRelationTypeEnum.BD2SH_ARCHFORARCH.getRelCode();
+        // 组装关系
         for (String buildingId : buildingIdList) {
-                                                                 //ArchForArch
-            RelationDTO relation = new RelationDTO(null, graphCode, relCode, "", shaftId,buildingId);
+            RelationDTO relation = RelationDTO.builder().graphCode(graphCode).relCode(relCode)
+                    .objFrom(buildingId).objTo(shaftId).build();
             voList.add(relation);
         }
-        InstanceUrlParam context = AdmContextUtil.toDmpContext();
-        service.doSave(context, voList);
+        service.doSave(AdmContextUtil.toDmpContext(), voList);
         return AdmResponse.success();
     }
 

+ 26 - 0
src/main/java/com/persagy/proxy/adm/model/AdmDefFuncIdGather.java

@@ -0,0 +1,26 @@
+package com.persagy.proxy.adm.model;
+
+import lombok.Data;
+
+/**
+ * 信息点采集DTO
+ * @author:linhuili
+ * @date:2021/10/14
+ */
+@Data
+public class AdmDefFuncIdGather {
+    /** id */
+    private String id;
+    /** 项目id */
+    private String projectId;
+    /** 集团编码 */
+    private String groupCode;
+    /** 类型编码 */
+    private String classCode;
+    /** 信息点编码 */
+    private String code;
+    /** 是否可见 */
+    private Boolean visible;
+    /** 采集类型 type-common 通用 type-project 项目级 */
+    private String type;
+}

+ 4 - 1
src/main/java/com/persagy/proxy/adm/model/AdmDictQueryCriteria.java

@@ -15,6 +15,9 @@ import lombok.EqualsAndHashCode;
 @EqualsAndHashCode(callSuper=true)
 public class AdmDictQueryCriteria extends AdmQueryCriteria {
 
-    /** 查询类型 */
+    /** 查询类型 common-平台级,project-项目级 */
+    private String dictType;
+
+    /** 信息点类型 */
     private String type;
 }

+ 3 - 64
src/main/java/com/persagy/proxy/adm/model/AdmSBaseEntity.java

@@ -1,8 +1,7 @@
 package com.persagy.proxy.adm.model;
-import lombok.*;
+import com.persagy.dmp.common.model.entity.BaseEntity;
+import lombok.Data;
 
-import java.io.Serializable;
-import java.util.Date;
 import java.util.Map;
 
 /**
@@ -10,71 +9,11 @@ import java.util.Map;
  * @date 2021/9/13
  */
 @Data
-public abstract class AdmSBaseEntity<T> implements Serializable, Cloneable, Comparable {
-    /** 序列id */
-    private static final long serialVersionUID = -323111418861154334L;
-    /** hash码 */
-    @Getter(AccessLevel.NONE)
-    @Setter(AccessLevel.NONE)
-    private transient int hashCode = Integer.MIN_VALUE;
-
-    private String id;
+public abstract class AdmSBaseEntity<T> extends BaseEntity {
     /** 统计信息 */
     private Map<String, Object> statistics;
-    /** 创建时间 */
-    private Date createTime;
-    /** 最后更新日期 */
-    private Date lastUpdate;
     /** 信息点 */
     private Map<String, Object> infos;
     /** 集团编码 */
     private String groupCode;
-
-
-    @Override
-    public boolean equals (Object obj) {
-        if (null == obj) {
-            return false;
-        }
-        if (!(obj instanceof AdmSBaseEntity)) {
-            return false;
-        } else {
-            AdmSBaseEntity entity = (AdmSBaseEntity) obj;
-            if (null == this.getId() || null == entity.getId()) {
-                return false;
-            } else {
-                return (this.getId().equals(entity.getId()));
-            }
-        }
-    }
-
-    @Override
-    public int hashCode () {
-        if (Integer.MIN_VALUE != this.hashCode) {
-            return this.hashCode;
-        }
-        if (null == this.getId()) {
-            return super.hashCode();
-        }
-        String hashStr = this.getClass().getName() + ":" + this.getId().hashCode();
-        this.hashCode = hashStr.hashCode();
-        return this.hashCode;
-    }
-
-    @Override
-    public int compareTo (Object obj) {
-        if (obj.hashCode() > hashCode()) {
-            return 1;
-        } else if (obj.hashCode() < hashCode()) {
-            return -1;
-        } else {
-            return 0;
-        }
-    }
-
-    @Override
-    public Object clone() throws CloneNotSupportedException {
-        return super.clone();
-    }
-
 }

+ 1 - 1
src/main/java/com/persagy/proxy/adm/model/AdmShaft.java

@@ -49,7 +49,7 @@ public class AdmShaft extends AdmSBaseEntity<AdmShaft>{
     @CascadeColumn(graphCode = "MechInArch", relCode = "Eq2Sh", selectToObj = false)
     private List<AdmEquipment> equipmentList;
     /** 级联-竖井内的建筑 */
-    @CascadeColumn(graphCode = "ArchForArch", relCode = "Sh2Bd")
+    @CascadeColumn(graphCode = "ArchSubset", relCode = "Bd2Sh", selectToObj = false)
     private List<AdmBuilding> buildingList;
     /** 级联-竖井内的系统 */
     @CascadeColumn(graphCode = "MechInArch", relCode = "Sy2Sh", selectToObj = false)

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

@@ -40,8 +40,8 @@ public class AdmSpace extends AdmSBaseEntity<AdmSpace>{
     private ArrayList<ArrayList<ArrayList<AdmPointPosition>>> outline;
     /** 轮廓线2 未使用*/
     private ArrayList<ArrayList<ArrayList<AdmPointPosition>>> outline2;
-    /** 图片 */
-    private ArrayList<AdmTaskPic> pic;
+    /** 图片 - 信息点里已存在的信息点不应在实体中重复定义为其他格式 */
+//    private ArrayList<AdmTaskPic> pic;
     /** 空间是否受影响 */
     private String state;
     /** 空间常驻人数 */

+ 20 - 0
src/main/java/com/persagy/proxy/adm/service/IAdmDictBaseService.java

@@ -62,4 +62,24 @@ public interface IAdmDictBaseService<T>{
     void doDeleteObjectInfo(InstanceUrlParam context, List<T> voList);
 
 
+    /**
+     * 查询采集信息点
+     * @param context
+     * @param request
+     * @param fieldName
+     * @param clazz
+     * @return
+     */
+    AdmResponse doQueryObjectInfoCollect(InstanceUrlParam context, AdmQueryCriteria request, String fieldName, Class<T> clazz);
+
+    /**
+     * 设置采集信息点
+     * @param context
+     * @param clazz
+     * @param voList
+     * @return
+     */
+    List<T> doSetObjectInfoCollect(InstanceUrlParam context, Class<T> clazz, List<T> voList);
+
+
 }

+ 15 - 5
src/main/java/com/persagy/proxy/adm/service/IAdmDictService.java

@@ -1,10 +1,8 @@
 package com.persagy.proxy.adm.service;
 
-import com.persagy.proxy.adm.model.AdmDict;
-import com.persagy.proxy.adm.model.AdmDictQueryCriteria;
-import com.persagy.proxy.adm.model.AdmLocationPoint;
-import com.persagy.proxy.adm.model.AdmObjectInfo;
+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;
 import com.persagy.proxy.common.entity.InstanceUrlParam;
 
@@ -46,7 +44,7 @@ public interface IAdmDictService<T> extends IAdmDictBaseService<T>{
      * @return
      * @throws Exception
      */
-    AdmResponse settingDicProject(InstanceUrlParam context , AdmCreateRequest<AdmObjectInfo> request, Class<T> clazz) throws Exception;
+    AdmResponse settingDicProject(InstanceUrlParam context , AdmCreateRequest<AdmDefFuncIdGather> request, Class<T> clazz) throws Exception;
 
 
     /**
@@ -56,4 +54,16 @@ public interface IAdmDictService<T> extends IAdmDictBaseService<T>{
      * @return
      */
     AdmResponse queryMorlDict(InstanceUrlParam context,List<String> dictTypeList);
+
+
+    /**
+     * 查询信息点
+     * @param context
+     * @param request
+     * @param fieldName
+     * @param clazz
+     * @return
+     */
+    AdmResponse query(InstanceUrlParam context, AdmDictQueryCriteria request,String fieldName, Class<T> clazz);
+
 }

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

@@ -68,7 +68,7 @@ public interface IRelationReportService {
 	 * @param projectId
 	 * @return
 	 */
-	List<ObjectNode> getAllRelationProjectCal(String groupCode, String projectId);
+	List<JSONObject> getAllRelationProjectCal(String groupCode, String projectId);
 	
 	/**
 	 * 获取项目计算关系
@@ -78,7 +78,7 @@ public interface IRelationReportService {
 	 * @param relType	ADM-类型
 	 * @return
 	 */
-	ObjectNode getRelationProjectCal(String groupCode, String projectId, String relType);
+	JSONObject getRelationProjectCal(String groupCode, String projectId, String relType);
 	
 	/**
 	 * 获取项目计算关系

+ 4 - 1
src/main/java/com/persagy/proxy/adm/service/impl/AbstractAdmBaseServiceImpl.java

@@ -103,8 +103,11 @@ public class AbstractAdmBaseServiceImpl<T> implements IAdmBaseService<T> {
             }
             // 获取关联对象的Class
             Field casField = ReflectUtil.getField(simpleVO.getClass(), cascade.getName());
+            if(casField == null) {
+                continue;
+            }
+            // 获取级联信息
             CascadeColumn annotationInfo = casField.getAnnotation(CascadeColumn.class);
-            // 没有扩展信息不处理
             if(annotationInfo == null) {
                 continue;
             }

+ 58 - 11
src/main/java/com/persagy/proxy/adm/service/impl/AbstractAdmDictBaseServiceImpl.java

@@ -9,6 +9,7 @@ import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.persagy.dmp.basic.model.QueryCriteria;
 import com.persagy.dmp.basic.utils.JsonNodeUtils;
 import com.persagy.dmp.common.utils.JsonHelper;
+import com.persagy.dmp.define.entity.ObjectInfoCollect;
 import com.persagy.proxy.adm.constant.AdmCommonConstant;
 import com.persagy.proxy.adm.constant.AdmDictConstant;
 import com.persagy.proxy.adm.constant.enums.ValidEnum;
@@ -207,16 +208,11 @@ public class AbstractAdmDictBaseServiceImpl<T> implements IAdmDictBaseService<T>
                 admVO.setPath(AdmDictConstant.INFOS_EX+admVO.getCode());
             }
 
-            //信息点是否可见
+            //信息点是否可见设置默认值
             if(admVO.getVisible() == null){
-                /*if("localName".equals(admVO.getCode()) || "localId".equals(admVO.getCode())){
-                    admVO.setVisible(true);
-                }else{
-                    admVO.setVisible(false);
-                }*/
-                admVO.setVisible(true);
+                admVO.setVisible(false);
             }
-            //信息点是否可编辑
+            //信息点是否可编辑设置默认值
             if(admVO.getEditable() == null){
                 List<String> unEditableList = checkoutDefInfoUnEditable();
                 if(unEditableList.contains(admVO.getCode())){
@@ -225,7 +221,7 @@ public class AbstractAdmDictBaseServiceImpl<T> implements IAdmDictBaseService<T>
                     admVO.setEditable(true);
                 }
             }
-            //是否禁止操作
+            //是否禁止操作设置默认值
             if(admVO.getUnDisabled() == null){
                 List<String> unDisableList = checkoutDefInfoUnDisable();
                 if(unDisableList.contains(admVO.getCode())){
@@ -234,7 +230,6 @@ public class AbstractAdmDictBaseServiceImpl<T> implements IAdmDictBaseService<T>
                     admVO.setUnDisabled(true);
                 }
             }
-
         }
     }
 
@@ -347,7 +342,59 @@ public class AbstractAdmDictBaseServiceImpl<T> implements IAdmDictBaseService<T>
                 datum.setType("common");
             }
         }
-
         return data;
     }
+
+    /**
+     * 查询对象信息点
+     * @param request
+     * @return
+     */
+    @Override
+    public AdmResponse doQueryObjectInfoCollect(InstanceUrlParam context, AdmQueryCriteria request,String fieldName, Class<T> clazz) {
+        // 转换为数据中台查询条件
+        QueryCriteria dmpRequest = toDmpCriteria(request,fieldName);
+        // 转换参数
+        JSONObject para = null;
+        try {
+            para = JsonHelper.toJsonObject(dmpRequest);
+        } catch (IOException e) {
+            log.error(e.getMessage(), e);
+            return null;
+        }
+        // 调用中台查询
+        log.info(para.toString());
+        DmpResult<JSONArray> dmpResult = rwdClient.queryObjectInfoCollect(context, para);
+        List<ObjectInfoCollect> admVOs = AdmEntityTransferUtil.toAdmMultiEntity(dmpResult.getData(), request.getProjection(), ObjectInfoCollect.class);
+        // 设置返回值
+        AdmResponse response = AdmResponse.success(admVOs);
+        Long total = dmpResult.getCount() == null ? null : dmpResult.getCount().longValue();
+        response.setTotal(total);
+        response.setPageNumber(request.getPageNumber());
+        response.setPageSize(request.getPageSize());
+        return response;
+    }
+
+    /**
+     * 设置采集信息
+     * @param context
+     * @param clazz
+     * @param voList
+     * @return
+     */
+    @Override
+    public List<T> doSetObjectInfoCollect(InstanceUrlParam context, Class<T> clazz, List<T> voList) {
+        if(CollUtil.isEmpty(voList)) {
+            return null;
+        }
+        ArrayNode vos = JsonNodeUtils.toArrayNode(voList, null, null);
+        // 调用中台修改
+        DmpResult<cn.hutool.json.JSONArray> response = rwdClient.batchUpdateObjectInfoCollect(context, JSONArray.parseArray(vos.toString()));
+        if(!DmpResult.SUCCESS.equals(response.getResult())) {
+            throw new RuntimeException("调用中台查询接口出错:" + response.getMessage());
+        }
+        // 转换为结果
+        return AdmEntityTransferUtil.toAdmMultiEntity(response.getData(), null, clazz);
+    }
+
 }

+ 146 - 10
src/main/java/com/persagy/proxy/adm/service/impl/AdmDictServiceImpl.java

@@ -3,11 +3,14 @@ package com.persagy.proxy.adm.service.impl;
 import cn.hutool.core.collection.CollUtil;
 
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fasterxml.jackson.databind.JsonNode;
 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.dmp.define.entity.ObjectInfoCollect;
+import com.persagy.dmp.define.entity.ObjectInfoDefine;
 import com.persagy.proxy.adm.constant.AdmDictConstant;
 import com.persagy.proxy.adm.constant.enums.AdmDictCategoryEnum;
 import com.persagy.proxy.adm.model.*;
@@ -261,16 +264,27 @@ public class AdmDictServiceImpl<T> extends AbstractAdmDictBaseServiceImpl<T> imp
      * @throws Exception
      */
     @Override
-    public AdmResponse settingDicProject(InstanceUrlParam context, AdmCreateRequest<AdmObjectInfo> request, Class<T> clazz) throws Exception {
-        List<AdmObjectInfo> content = request.getContent();
-        //信息点转换为中台格式
-        List<AdmObjectInfo> dmpObjectInfo = new ArrayList<>();
-        objectInfosTransforDmp(content, dmpObjectInfo ,context.getProjectId());
-        request.setContent(dmpObjectInfo);
-
-        //修改项目级信息点
-        List<T> vos = doUpdateObjectInfo(context, clazz, (List<T>) dmpObjectInfo);
-        return AdmResponse.success(vos);
+    public AdmResponse settingDicProject(InstanceUrlParam context, AdmCreateRequest<AdmDefFuncIdGather> request, Class<T> clazz) throws Exception {
+        List<AdmDefFuncIdGather> content = request.getContent();
+        if(CollUtil.isEmpty(content)){
+            return AdmResponse.success(content);
+        }
+        //参数转换为中台参数
+        List<T> list = new ArrayList<>();
+        for (AdmDefFuncIdGather funcIdGather : content) {
+            ObjectInfoCollect infoCollect = new ObjectInfoCollect();
+
+            infoCollect.setGroupCode(funcIdGather.getGroupCode());
+            infoCollect.setProjectId(funcIdGather.getProjectId());
+            infoCollect.setDefineInfoId(funcIdGather.getId());
+            infoCollect.setClassCode(funcIdGather.getClassCode());
+            infoCollect.setCode(funcIdGather.getCode());
+            infoCollect.setVisiable(funcIdGather.getVisible());
+            list.add((T) infoCollect);
+        }
+        //设置采集信息点
+        doSetObjectInfoCollect(context, clazz, list);
+        return AdmResponse.success(content);
     }
 
     /**
@@ -331,6 +345,128 @@ public class AdmDictServiceImpl<T> extends AbstractAdmDictBaseServiceImpl<T> imp
 
 
     /**
+     * 查询信息点
+     * @param context
+     * @param request
+     * @param fieldName
+     * @param clazz
+     * @return
+     */
+    @Override
+    public AdmResponse query(InstanceUrlParam context, AdmDictQueryCriteria request, String fieldName, Class<T> clazz) {
+        //查询类型下的所有信息点信息
+        AdmResponse admResponse = doQueryObjectInfo(context, request, AdmDictConstant.CLASS_CODE, clazz);
+        List<AdmObjectInfo> admObjectInfos = (List<AdmObjectInfo>) admResponse.getContent();
+        //查询平台级信息点采集信息
+        List<ObjectInfoCollect> commonObjectInfoCollect = queryObjectInfoCollect(context, "common", request.getType(), clazz);
+        Map<String, Boolean> commonObjectInfoCollectMap = commonObjectInfoCollect.stream().filter(item -> StrUtil.isNotEmpty(item.getDefineInfoId())).collect(Collectors.toMap(ObjectInfoCollect::getDefineInfoId,ObjectInfoCollect::getVisiable));
+
+        //查询项目级信息点采集信息
+        List<ObjectInfoCollect> projectObjectInfoCollect = queryObjectInfoCollect(context, "project", request.getType(), clazz);
+        Map<String, Boolean> projectObjectInfoCollectMap = projectObjectInfoCollect.stream().filter(item -> StrUtil.isNotEmpty(item.getDefineInfoId())).collect(Collectors.toMap(ObjectInfoCollect::getDefineInfoId,ObjectInfoCollect::getVisiable));
+
+        String dictType = request.getDictType();
+
+        //采集值配置查询
+        if(StringUtils.isNotEmpty(dictType)){
+            //查询平台级、项目级信息点采集信息
+            if("common".equals(dictType)){
+                setObjectInfoVisiable(admObjectInfos,commonObjectInfoCollectMap,dictType);
+            }
+            if("project".equals(dictType)){
+                setObjectInfoVisiable(admObjectInfos,projectObjectInfoCollectMap,dictType);
+            }
+            admResponse.setContent(admObjectInfos);
+            return admResponse;
+        }
+
+        //只查看采集值 todo
+        if(CollUtil.isNotEmpty(projectObjectInfoCollectMap)){
+            setOnlyQueryObjectInfoVisiable(admObjectInfos,projectObjectInfoCollectMap,dictType);
+        }else{
+            setOnlyQueryObjectInfoVisiable(admObjectInfos,commonObjectInfoCollectMap,dictType);
+        }
+        admResponse.setContent(admObjectInfos);
+        return admResponse;
+    }
+
+    /**
+     * 设置信息点是否可见
+     * @param admObjectInfos
+     * @param objectInfoCollectMap
+     */
+    private void setObjectInfoVisiable(List<AdmObjectInfo> admObjectInfos,Map<String, Boolean> objectInfoCollectMap,String dictType){
+        if(CollUtil.isEmpty(admObjectInfos)){
+            return;
+        }
+        for (AdmObjectInfo admObjectInfo : admObjectInfos) {
+            Boolean visiable = null;
+            String id = admObjectInfo.getId();
+            if(CollUtil.isNotEmpty(objectInfoCollectMap)){
+                visiable = objectInfoCollectMap.get(id);
+            }
+            if(visiable == null){
+                if("common".equals(dictType)){
+                    if("localId".equals(admObjectInfo.getCode()) || "localName".equals(admObjectInfo.getCode())){
+                        visiable = true;
+                    }
+                }
+                if(visiable == null){
+                    visiable =false;
+                }
+            }
+            admObjectInfo.setVisible(visiable);
+        }
+    }
+
+
+    /**
+     * 设置台账管理中只查看采集值的信息点是否可见
+     * @param admObjectInfos
+     * @param objectInfoCollectMap
+     */
+    private void setOnlyQueryObjectInfoVisiable(List<AdmObjectInfo> admObjectInfos,Map<String, Boolean> objectInfoCollectMap,String dictType){
+        if(CollUtil.isEmpty(admObjectInfos)){
+            return;
+        }
+        for (AdmObjectInfo admObjectInfo : admObjectInfos) {
+            Boolean visiable = null;
+            String id = admObjectInfo.getId();
+            if(CollUtil.isNotEmpty(objectInfoCollectMap)){
+                visiable = objectInfoCollectMap.get(id);
+            }else {
+                if(visiable == null && ("localId".equals(admObjectInfo.getCode()) || "localName".equals(admObjectInfo.getCode()))){
+                    visiable = true;
+                }
+            }
+            if(visiable == null){
+                visiable = false;
+            }
+            admObjectInfo.setVisible(visiable);
+        }
+    }
+
+    /**
+     * 查询信息点采集信息
+     * @param context
+     * @param dictType
+     * @param classCode
+     * @param clazz
+     * @return
+     */
+    private List<ObjectInfoCollect> queryObjectInfoCollect(InstanceUrlParam context, String dictType,String classCode, Class<T> clazz){
+        AdmQueryCriteria criteria = new AdmQueryCriteria();
+        if("common".equals(dictType)){
+            criteria.setFilters("groupCode = '0' and projectId = '0'");
+        }else{
+            criteria.setFilters("groupCode = '"+context.getGroupCode()+"' and projectId = '"+context.getProjectId()+"'");
+        }
+        criteria.setName(classCode);
+        AdmResponse admResponse = doQueryObjectInfoCollect(context, criteria, "classCode", clazz);
+        return (List<ObjectInfoCollect>) admResponse.getContent();
+    }
+
+    /**
      * 统计类型下的非静态信息点
      * @param context
      * @param code

+ 1 - 0
src/main/java/com/persagy/proxy/adm/service/impl/AdmFloorServiceImpl.java

@@ -40,6 +40,7 @@ public class AdmFloorServiceImpl extends AbstractAdmBaseServiceImpl<AdmFloor> im
         AdmQueryCriteria request = new AdmQueryCriteria();
         request.setName(AdmFloor.OBJ_TYPE);
         request.resetRelationCond(false, "ArchSubset", "Bd2Fl", buildingId);
+        request.setOrders("floorSequenceId desc");
         AdmResponse rs = doQuery(context, request, AdmFloor.class);
         return (List<AdmFloor>) rs.getContent();
     }

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

@@ -210,7 +210,7 @@ public class AdmSpaceServiceImpl extends AbstractAdmBaseServiceImpl<AdmSpace> im
         ObjectNode criteriaRel = JsonNodeFactory.instance.objectNode();
         criteriaRel.put("graphCode", "ArchSubset");
         criteriaRel.put("relCode", "Fl2Sp");
-        criteriaRel.put("refValue", spaceType);
+        criteriaRel.put("relValue", spaceType);
         ArrayNode objNode = criteriaRel.putArray("objFrom");
         floorIds.forEach(floorId -> objNode.add(floorId));
         queryRequest.setCriteria(criteriaRel);
@@ -243,7 +243,7 @@ public class AdmSpaceServiceImpl extends AbstractAdmBaseServiceImpl<AdmSpace> im
         QueryCriteria queryRequest = new QueryCriteria();
         ObjectNode criteriaRel = JsonNodeFactory.instance.objectNode();
         criteriaRel.put("graphCode", "TrafficNetwork");
-        criteriaRel.put("refValue", spaceType);
+        criteriaRel.put("relValue", spaceType);
         ArrayNode objNode = criteriaRel.putArray(isFrom?"objFrom":"objTo");
         spaceIds.forEach(spaceId -> objNode.add(spaceId));
         queryRequest.setCriteria(criteriaRel);

+ 193 - 102
src/main/java/com/persagy/proxy/adm/service/impl/RelationReportService.java

@@ -1,6 +1,9 @@
 package com.persagy.proxy.adm.service.impl;
 
 import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.stream.Collectors;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -9,6 +12,13 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.persagy.dmp.basic.dto.GraphParentMes;
+import com.persagy.dmp.common.context.AppContext;
+import com.persagy.dmp.common.utils.JsonHelper;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -111,11 +121,11 @@ public class RelationReportService implements IRelationReportService {
 		List<RelationDefine> relationDefines = DigitalRelationDefineFacade.query(groupCode, projectId, AdmCommonConstant.APP_ID, AdmCommonConstant.USER_ID, queryCriteria);
 		return relationDefines;
 	}
-	
+
 	@Override
-	public List<ObjectNode> getAllRelationProjectCal(String groupCode, String projectId) {
+	public List<JSONObject> getAllRelationProjectCal(String groupCode, String projectId) {
 		groupCode = StrUtil.isBlank(groupCode) ? defaultCode : groupCode;
-		
+
 		// 查询出对应项目关系计算数据
 		QueryCriteria projectCriteria = new QueryCriteria();
 		ObjectMapper objectMapper = SpringHelper.getBean(ObjectMapper.class);
@@ -126,20 +136,22 @@ public class RelationReportService implements IRelationReportService {
 		if (CollectionUtil.isEmpty(projectList)) {
 			return Lists.newArrayList();
 		}
+		List<JSONObject> result = Lists.newArrayList();
+		Map<String, AdmRelationTypeEnum> graphRelTypeMap = AdmRelationTypeEnum.getGraphRelTypeMap();
+		Map<String, RelationDefine> relationDefineMap = queryAllRelationDefineMap(groupCode, projectId);
 		for (ObjectNode objectNode : projectList) {
 			String graphCode = objectNode.get("graphCode") == null ? null : objectNode.get("graphCode").asText();
 			String relCode = objectNode.get("relCode") == null ? null : objectNode.get("relCode").asText();
 			AdmRelationTypeEnum relationTypeEnum = AdmCommonConstant.GRAPH_RELATION_TYPE_MAP.get(graphCode + AdmCommonConstant.UNDERLINE + relCode);
-			this.fillRelationProjectCal(objectNode, relationTypeEnum, groupCode, projectId);
+			result.add(this.fillRelationProjectCal(objectNode, graphCode,relCode,graphRelTypeMap, relationDefineMap));
 		}
-		
-		return projectList;
+		return result;
 	}
-	
+
 	@Override
 	public List<JSONObject> getAllRelationProjectCalTree(String groupCode, String projectId) {
 		groupCode = StrUtil.isBlank(groupCode) ? defaultCode : groupCode;
-		
+
 		// 获取所有的二级标签
 		QueryCriteria secondCriteria = new QueryCriteria();
 		List<GraphDefine> secondList = DigitalGraphDefineFacade.query(groupCode, projectId, AdmCommonConstant.APP_ID, AdmCommonConstant.USER_ID, secondCriteria);
@@ -147,11 +159,13 @@ public class RelationReportService implements IRelationReportService {
 			return Lists.newArrayList();
 		}
 		// 获取此图类型对应项目计算数据
-		List<JSONObject> resultList = new ArrayList<JSONObject>();
+		List<JSONObject> resultList = new ArrayList<>();
+		Map<String, AdmRelationTypeEnum> graphRelTypeMap = AdmRelationTypeEnum.getGraphRelTypeMap();
+		Map<String, RelationDefine> relationDefineMap = queryAllRelationDefineMap(groupCode, projectId);
 		for (GraphDefine graphDefine : secondList) {
 			String graphCode = graphDefine.getCode();
 			JSONObject graphObject = this.transfer(graphDefine);
-			
+
 			// 查询出对应项目关系计算数据
 			QueryCriteria projectCriteria = new QueryCriteria();
 			ObjectMapper objectMapper = SpringHelper.getBean(ObjectMapper.class);
@@ -165,20 +179,20 @@ public class RelationReportService implements IRelationReportService {
 				continue;
 			}
 			// 再根据图类型、边类型,统计此类型下的数量
+			List<JSONObject> tempList = new ArrayList<>();
 			for (ObjectNode objectNode : projectList) {
 				String relCode = objectNode.get("relCode") == null ? null : objectNode.get("relCode").asText();
-				AdmRelationTypeEnum relationTypeEnum = AdmCommonConstant.GRAPH_RELATION_TYPE_MAP.get(graphCode + AdmCommonConstant.UNDERLINE + relCode);
-				this.fillRelationProjectCal(objectNode, relationTypeEnum, groupCode, projectId);
+				tempList.add(this.fillRelationProjectCal(objectNode,graphDefine.getCode(),relCode,graphRelTypeMap,relationDefineMap));
 			}
 			graphObject.put("relationTypeProjectList", projectList);
 			resultList.add(graphObject);
 		}
-		
+
 		return resultList;
 	}
-	
+
 	@Override
-	public ObjectNode getRelationProjectCal(String groupCode, String projectId, String relType) {
+	public JSONObject getRelationProjectCal(String groupCode, String projectId, String relType) {
 		groupCode = StrUtil.isBlank(groupCode) ? defaultCode : groupCode;
 		
 		AdmRelationTypeEnum relationTypeEnum = AdmCommonConstant.RELATION_TYPE_MAP.get(relType);
@@ -186,12 +200,15 @@ public class RelationReportService implements IRelationReportService {
 			return null;
 		}
 		
-		ObjectNode objectNode = this.getRelationProjectCal(groupCode, projectId, relationTypeEnum.getGraphCode(), relationTypeEnum.getRelCode(), null);
+		ObjectNode objectNode = this.getRelationProjectCal(groupCode, projectId, relationTypeEnum.getGraphCode(),
+				relationTypeEnum.getRelCode(), null);
+		Map<String, AdmRelationTypeEnum> graphRelTypeMap = AdmRelationTypeEnum.getGraphRelTypeMap();
+		Map<String, RelationDefine> relationDefineMap = queryAllRelationDefineMap(groupCode, projectId);
 		if (objectNode != null) {
-			this.fillRelationProjectCal(objectNode, relationTypeEnum, groupCode, projectId);
+			return this.fillRelationProjectCal(objectNode,groupCode,relationTypeEnum.getRelCode(),graphRelTypeMap,relationDefineMap);
 		}
 		
-		return objectNode;
+		return new JSONObject();
 	}
 	
 	@Override
@@ -423,7 +440,6 @@ public class RelationReportService implements IRelationReportService {
 												  		String projectId, RelationDefine relationDefine,
 														String zoneType) throws JsonProcessingException {
 		ObjectNode objectNode = objectMapper.createObjectNode();
-		// 缺少业务分区类型
 		objectNode.put("groupCode", groupCode);
 		objectNode.put("projectId", projectId);
 		objectNode.put("id", IdWorker.getIdStr());
@@ -438,7 +454,7 @@ public class RelationReportService implements IRelationReportService {
 		objectNode.put("systemType", relationDefine.getSystemType());	// 风系统1,水系统0
 		objectNode.put("computeVersion", 0);	// 计算版本
 		objectNode.put("mepSystemType", CollUtil.isNotEmpty(relationDefine.getMepSystemType())
-						?objectMapper.writeValueAsString(relationDefine.getMepSystemType()):null);	// 机电系统类型
+						? objectMapper.valueToTree(relationDefine.getMepSystemType()) :objectMapper.createArrayNode());	// 机电系统类型
 		objectNode.put("creator", AdmCommonConstant.USER_ID);	// 创建人
 		objectNode.put("modifier", AdmCommonConstant.USER_ID);	// 最后修改人
 		return objectNode;
@@ -454,7 +470,7 @@ public class RelationReportService implements IRelationReportService {
 		if (StrUtil.isBlank(content)) {
 			this.createRelationProjectCal(AppContext.getContext().getGroupCode(), AppContext.getContext().getProjectId());
 		}
-		List<JSONObject> parentList = new ArrayList<JSONObject>();
+		List<JSONObject> parentList = new ArrayList<>();
 		// 获取树结构
 		this.getGraphRelationProjectTree(parentList, AppContext.getContext().getGroupCode(),
 				AppContext.getContext().getProjectId(), content);
@@ -477,63 +493,132 @@ public class RelationReportService implements IRelationReportService {
 	 */
 	private void getGraphRelationProjectTree(List<JSONObject> parentList, String groupCode, String projectId, String content) {
 		boolean isQuery = StringUtils.isNotBlank(content);
-		// 获取所有的一级图类型定义
+		// 1.获取所有的一级,二级图类型定义
 		QueryCriteria parentCriteria = new QueryCriteria();
-		List<GraphDefine> topList = DigitalGraphDefineFacade.query(groupCode, projectId, AdmCommonConstant.APP_ID, AdmCommonConstant.USER_ID, parentCriteria);
-		for (int i = topList.size() - 1; i >= 0; i--) {
-			// 获取所有的二级图类型定义
-			QueryCriteria childCriteria = new QueryCriteria();
-			List<GraphDefine> childList = DigitalGraphDefineFacade.query(groupCode, projectId, AdmCommonConstant.APP_ID, AdmCommonConstant.USER_ID, childCriteria);
-			if (CollectionUtil.isEmpty(childList)) {
-				if (isQuery) {
-					topList.remove(i);		//移除
-				}
+		List<GraphDefine> graphDefines = DigitalGraphDefineFacade.query(groupCode, projectId,
+				AdmCommonConstant.APP_ID, AdmCommonConstant.USER_ID, parentCriteria);
+		if (CollUtil.isEmpty(graphDefines)){
+			return;
+		}
+		// 2.查询所有的边类型定义
+		Map<String, RelationDefine> relationDefineMap = queryAllRelationDefineMap(groupCode,projectId);
+		// 3.查询出对应项目关系计算数据
+		List<ObjectNode> projectRelList = queryRelationProjectCalsByProjectId(groupCode,projectId,content);
+		if (CollUtil.isEmpty(projectRelList)){
+			return;
+		}
+		Map<String,List<JSONObject>> levelMap = new HashMap<>();
+		Map<String, AdmRelationTypeEnum> graphRelTypeMap = AdmRelationTypeEnum.getGraphRelTypeMap();
+		for (ObjectNode projectRel : projectRelList) {
+			if (!projectRel.has("relCode")
+					|| StrUtil.isBlank(projectRel.get("relCode").asText())){
 				continue;
 			}
-			
-			GraphDefine topGraph = topList.get(i);
-			JSONObject parent = this.transfer(topGraph);
-			// 二级数据封装
-			for (int j = childList.size() - 1; j >= 0; j--) {
-				GraphDefine childGraph = topList.get(i);
-				JSONObject child = this.transfer(childGraph);
-				// 查询出对应项目关系计算数据
-				QueryCriteria projectCriteria = new QueryCriteria();
-				ObjectMapper objectMapper = SpringHelper.getBean(ObjectMapper.class);
-				ObjectNode criteria = objectMapper.createObjectNode();
-				criteria.put("projectId", projectId);
-				if (isQuery) {
-					ObjectNode condition = objectMapper.createObjectNode();
-					condition.put("$like", content);
-					criteria.putPOJO("name", condition); // 模糊查询
-				}
-				projectCriteria.setCriteria(criteria);
-				projectCriteria.setOrders(Collections.singletonList(OrderItem.asc("relCode")));
-				List<ObjectNode> projectList = DigitalRelationProjectCalFacade.query(groupCode, projectId, AdmCommonConstant.APP_ID, AdmCommonConstant.USER_ID, projectCriteria);
-				if (CollectionUtil.isEmpty(projectList)) {
-					if (isQuery) {
-						childList.remove(i);		//移除
-					}
-					continue;
-				}
-				// 三级数据封装
-				for (ObjectNode objectNode : projectList) {
-					String relCode = objectNode.get("relCode") == null ? null : objectNode.get("relCode").asText();
-					AdmRelationTypeEnum relationTypeEnum = AdmCommonConstant.GRAPH_RELATION_TYPE_MAP.get(childGraph.getCode() + AdmCommonConstant.UNDERLINE + relCode);
-					this.fillRelationProjectCal(objectNode, relationTypeEnum, null, null);
-				}
-				child.put("relationTypeProjectList", projectList);
+			String relCode = projectRel.get("relCode").asText();
+			String graphCode = projectRel.get("graphCode").asText();
+			if (!graphRelTypeMap.containsKey(graphCode+StrUtil.UNDERLINE+relCode)){
+				continue;
 			}
-			// 再判断一次,防止当二级有数据但被清除了的情况下,一级还会存在
-			if (isQuery && CollectionUtil.isEmpty(childList)) {
-				childList.remove(i);		//移除
+			List<JSONObject> sonList = levelMap.getOrDefault(graphCode, new ArrayList<>());
+			JSONObject son = this.fillRelationProjectCal(projectRel, graphCode,relCode,graphRelTypeMap,relationDefineMap);
+			sonList.add(son);
+			sonList.sort(Comparator.comparing(b -> b.getString("relationTypeCode")));
+			levelMap.put(graphCode,sonList);
+		}
+		// 3.使用图类型定义的二级标签作为第一级
+		List<JSONObject> topList = new ArrayList<>();
+		for (GraphDefine graphDefine : graphDefines) {
+			GraphParentMes secondCategoryMes = graphDefine.getSecondCategoryMes();
+			if (null==secondCategoryMes){
 				continue;
 			}
-			parent.put("childGraphicTypeList", childList);
-			parentList.add(parent);
+			if (!levelMap.containsKey(secondCategoryMes.getId())){
+				topList.add(this.transfer(secondCategoryMes));
+			}
+			List<JSONObject> sonList = levelMap.getOrDefault(secondCategoryMes.getId(), new ArrayList<>());
+			JSONObject secondLevel = this.transfer(graphDefine);
+			secondLevel.put("relationTypeProjectList",levelMap.getOrDefault(graphDefine.getCode(),new ArrayList<>()));
+			sonList.add(secondLevel);
+			sonList.sort(Comparator.comparing(b -> b.getString("graphTypeCode")));
+			levelMap.put(secondCategoryMes.getId(),sonList);
+		}
+		if (CollUtil.isEmpty(topList)){
+			return;
+		}
+		for (JSONObject top : topList) {
+			top.put("childGraphicTypeList",levelMap.getOrDefault(top.getString("graphTypeId"),new ArrayList<>()));
+		}
+		// 顶级按sort排序
+		topList.sort(Comparator.comparing(b -> b.getIntValue("sort")));
+		parentList.addAll(topList);
+	}
+	/***
+	 * Description: 根据项目id查询项目计算关系
+	 * @param groupCode : 集团编码
+	 * @param projectId : 项目id
+	 * @param content : 查询关键字
+	 * @return : java.util.List<com.fasterxml.jackson.databind.node.ObjectNode>
+	 * @author : lijie
+	 * @date :2021/10/15 11:26
+	 * Update By lijie 2021/10/15 11:26
+	 */
+	private List<ObjectNode> queryRelationProjectCalsByProjectId(String groupCode, String projectId,String content) {
+		QueryCriteria projectCriteria = new QueryCriteria();
+		ObjectMapper objectMapper = SpringHelper.getBean(ObjectMapper.class);
+		ObjectNode criteria = objectMapper.createObjectNode();
+		criteria.put("projectId", projectId);
+		if (StrUtil.isNotBlank(content)) {
+			ObjectNode condition = objectMapper.createObjectNode();
+			condition.put("$like", content);
+			criteria.putPOJO("name", condition); // 模糊查询
 		}
+		projectCriteria.setCriteria(criteria);
+		projectCriteria.setOrders(Collections.singletonList(OrderItem.asc("relCode")));
+		return DigitalRelationProjectCalFacade.query(groupCode, projectId, AdmCommonConstant.APP_ID, AdmCommonConstant.USER_ID, projectCriteria);
 	}
+
+	/***
+	 * Description: 查询所有关系类型
 	
+	 * @return : java.util.Map<java.lang.String,com.persagy.dmp.define.entity.RelationDefine>  
+	 * @author : lijie
+	 * @date :2021/10/15 11:22
+	 * Update By lijie 2021/10/15 11:22
+	 */
+	private Map<String, RelationDefine> queryAllRelationDefineMap(String groupCode,String projectId) {
+		List<RelationDefine> relationDefines = DigitalRelationDefineFacade.query(groupCode, projectId,
+				AdmCommonConstant.APP_ID, AdmCommonConstant.USER_ID, new QueryCriteria());
+		if (CollUtil.isEmpty(relationDefines)){
+			return new HashMap<>();
+		}
+		return relationDefines.stream()
+				.collect(Collectors.toMap(relationDefine ->
+								relationDefine.getGraphCode() + StrUtil.UNDERLINE + relationDefine.getCode(),
+						relationDefine -> relationDefine, (k1, k2) -> k1));
+	}
+
+	/***
+	 * Description: 创建一级返回数据
+	 * @param graphParentMes : 一级信息对象
+	 * @return : com.alibaba.fastjson.JSONObject
+	 * @author : lijie
+	 * @date :2021/10/14 20:56
+	 * Update By lijie 2021/10/14 20:56
+	 */
+	private JSONObject transfer(GraphParentMes graphParentMes) {
+		JSONObject top = new JSONObject();
+		top.put("sort", graphParentMes.getSort());
+		top.put("note", "");
+		top.put("statistics", new JSONObject());
+		top.put("graphTypeName", graphParentMes.getName());
+		top.put("graphTypeId", graphParentMes.getId());
+		top.put("graphTypeCode", graphParentMes.getCode());
+		top.put("code", graphParentMes.getCode());
+		top.put("lastUpdate", DateUtil.format(new Date(),"yyyy-MM-dd HH:mm:ss"));
+		top.put("createTime", DateUtil.format(new Date(),"yyyy-MM-dd HH:mm:ss"));
+		return top;
+	}
+
 	/**
 	 * 获取转换后的数据,图类型数据转换
 	 * 
@@ -542,51 +627,57 @@ public class RelationReportService implements IRelationReportService {
 	 */
 	private JSONObject transfer(GraphDefine graphDefine) {
 		JSONObject top = new JSONObject();
-		top.put("sort", 1);
+		top.put("sort", 10);
 		top.put("note", "");
-		top.put("statistics", Lists.newArrayList());
+		top.put("statistics", new JSONObject());
 		top.put("graphTypeName", graphDefine.getName());
 		top.put("graphTypeId", graphDefine.getId());
 		top.put("graphTypeCode", graphDefine.getCode());
+		top.put("code", graphDefine.getCode());
 		top.put("lastUpdate", graphDefine.getModifiedTime() == null ? null : graphDefine.getModifiedTime().toString(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
 		top.put("createTime", graphDefine.getCreationTime() == null ? null : graphDefine.getCreationTime().toString(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
 		return top;
 	}
 	
 	/**
-	 * 填充项目关系计算ADM所需的数据
-	 * @param objectNode 项目关系计算的数据记录
-	 * @param relationTypeEnum 枚举类
-	 * @param groupCode 集团编码
-	 * @param projectId 项目ID
+	 * 获取转换后的数据,项目计算数据转换
+	 * 
+	 * @param relationProject :项目对象
+	 * @param relCode :边类型编码
+	 * @param graphRelTypeMap :与旧数据中心的code的映射关系
+	 * @param relationDefineMap
+	 * @return
 	 */
-	private void fillRelationProjectCal(ObjectNode objectNode, AdmRelationTypeEnum relationTypeEnum, String groupCode, String projectId) {
-		if (StrUtil.isAllNotBlank(groupCode, projectId)) {
-			String zoneType = objectNode.get("zoneType") == null ? null : objectNode.get("zoneType").asText();
-			long count = this.countRelationObject(groupCode, projectId, relationTypeEnum.getGraphCode(), relationTypeEnum.getRelCode(), zoneType);
-			objectNode.put("count", count);
-		}
-		
-		objectNode.put("relationTypeCode", relationTypeEnum.getRelCode());
-		objectNode.put("relationType", relationTypeEnum.getRelationType());
-		objectNode.put("relationTypeName", objectNode.get("relCodeName") == null ? null : objectNode.get("relCodeName").asText());
-	
-		objectNode.put("graphicId", objectNode.get("graphCode") == null ? null : objectNode.get("graphCode").asText());
-		objectNode.put("automatic", "1".equals(objectNode.get("automaticFlag") == null ? null : objectNode.get("automaticFlag").asText()));
-		objectNode.put("source", "1".equals(objectNode.get("sourceFlag") == null ? null : objectNode.get("sourceFlag").asText()));
-		objectNode.put("conneObject", ObjTypeMapping.getConneObject(relationTypeEnum.getRelCode()));
-		
-		Long modifiedTime = objectNode.get("modifiedTime") == null ? null : objectNode.get("modifiedTime").asLong();
-		Long creationTime = objectNode.get("creationTime") == null ? null : objectNode.get("creationTime").asLong();
-		objectNode.put("lastUpdate", modifiedTime == null ? null : new DateTime(modifiedTime).toString());
-		objectNode.put("createTime", creationTime == null ? null : new DateTime(creationTime).toString());
-	
+	private JSONObject fillRelationProjectCal(ObjectNode relationProject, String graphicId, String relCode,
+								Map<String, AdmRelationTypeEnum> graphRelTypeMap,
+								Map<String, RelationDefine> relationDefineMap) {
+		String key = graphicId + StrUtil.UNDERLINE + relCode;
+		AdmRelationTypeEnum typeEnum = graphRelTypeMap.get(key);
+		RelationDefine relationDefine = relationDefineMap.getOrDefault(key,new RelationDefine());
+		JSONObject result = new JSONObject();
+		result.put("graphicId", graphicId);
+		result.put("computationalState",relationProject.has("computationalState")?relationProject.get("computationalState").asText():null);
+		result.put("id",relationProject.has("id")?relationProject.get("id").asText():null);
+		result.put("manual",relationProject.has("manual")?relationProject.get("manual").asText():null);
+		result.put("projectId",relationProject.has("projectId")?relationProject.get("projectId").asText():null);
+		result.put("relationType",typeEnum.getRelationType());
+		result.put("relManualType",typeEnum.getRelationType());
+		result.put("relationTypeCode",relationProject.has("relCode")?relationProject.get("relCode").asText():null);
+		result.put("code", relationProject.has("relCode")?relationProject.get("relCode").asText():null);
+		result.put("relationTypeName",relationProject.has("relCodeName")?relationProject.get("relCodeName").asText():null);
+		result.put("statistics", new JSONObject());
+		result.put("automatic", relationProject.has("automaticFlag") && relationProject.get("automaticFlag").asBoolean());
+		result.put("source", relationProject.has("sourceFlag") && relationProject.get("sourceFlag").asBoolean());
+		result.put("conneObject", relationDefine.getTargetObjs());
 		
-		String prefix = ObjTypeMapping.getRelCodePrefix(relationTypeEnum.getRelCode());
-		String suffix = ObjTypeMapping.getRelCodeSuffix(relationTypeEnum.getRelCode());
-		objectNode.put("mainObject", ObjTypeMapping.PREFIX_NAME.get(prefix));
-		objectNode.put("fromObject", ObjTypeMapping.PREFIX_NAME.get(suffix));
-		objectNode.putPOJO("statistics", new JSONObject());
+		Long modifiedTime = relationProject.get("modifiedTime") == null ? null : relationProject.get("modifiedTime").asLong();
+		Long creationTime = relationProject.get("creationTime") == null ? null : relationProject.get("creationTime").asLong();
+
+		result.put("lastUpdate", modifiedTime == null ? null : new DateTime(modifiedTime).toString());
+		result.put("createTime", creationTime == null ? null : new DateTime(creationTime).toString());
+		result.put("mainObject", relationDefine.getFromObjType());
+		result.put("fromObject", relationDefine.getToObjType());
+		return result;
 	}
 
 	/**

+ 2 - 0
src/main/java/com/persagy/proxy/adm/utils/AdmQueryCriteriaHelper.java

@@ -221,6 +221,8 @@ public class AdmQueryCriteriaHelper {
      * @param value
      */
     private static void addCondition(String name, ObjectNode criteria, String column, String operator, String value) {
+        // 20211015 移除列名中的infos.
+        column = StrUtil.replaceIgnoreCase(column, "infos.", "");
         // 替换列名
         column = replaceColumns(name, column);
         if("=".equals(operator)) {

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

@@ -185,4 +185,23 @@ public interface DmpRwdClient {
     DmpResult<JSONArray> queryRelationProjectCal(@SpringQueryMap InstanceUrlParam objectUrlParam, @RequestBody JSONArray objectArr);
 
 
+    /**
+     * @description: 查询采集信息点
+     * @param: objectUrlParam 对象请求url通用参数
+     * @param: criteria post请求参数
+     * @return: com.persagy.dmp.common.DmpResult
+     */
+    @PostMapping(DmpUrlConstant.DEF_FUNCID_COLLECT)
+    DmpResult<JSONArray> queryObjectInfoCollect(@SpringQueryMap InstanceUrlParam objectUrlParam, @RequestBody JSONObject criteria);
+
+
+    /**
+     * @description: 批量修改信息点
+     * @param: objectUrlParam 对象请求url通用参数
+     * @param: criteria post请求参数
+     * @return: com.persagy.dmp.common.DmpResult
+     */
+    @PostMapping(DmpUrlConstant.DEF_FUNCID_COLLECT_SET)
+    DmpResult batchUpdateObjectInfoCollect(@SpringQueryMap InstanceUrlParam objectUrlParam, @RequestBody JSONArray objectArr);
+
 }

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

@@ -148,5 +148,15 @@ public class DmpUrlConstant {
      */
     public static final String RELATION_PROJECT_CAL_DELETE = "/rwd/instance/relation/project/cal/delete";
 
+    /**
+     * 查询采集信息点
+     */
+    public final static String DEF_FUNCID_COLLECT = "/rwd/def/funcid/collect/query";
+
+    /**
+     * 批量设置采集信息点
+     */
+    public final static String DEF_FUNCID_COLLECT_SET = "/rwd/def/funcid/collect/updateBatch";
+
 
 }