Selaa lähdekoodia

类型名称重复的数据合并处理

linhuili 3 vuotta sitten
vanhempi
commit
f6cfb987cd

+ 15 - 0
src/main/java/com/persagy/dmp/middleware/controller/EquipController.java

@@ -12,6 +12,7 @@ import com.persagy.dmp.middleware.entity.response.CommonResult;
 import com.persagy.dmp.middleware.entity.vo.WdConstructDescription;
 import com.persagy.dmp.middleware.service.IConstructDescriptionService;
 import com.persagy.dmp.middleware.service.IEquipService;
+import com.persagy.dmp.middleware.utils.EntityTransferUtil;
 import com.persagy.dmp.middleware.utils.SortUtil;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -59,6 +60,8 @@ public class EquipController {
         }
         //查询设备空间信息
         List<JSONObject> content = equipService.query(context, request);
+        //对相同系统编码,相同类型名称 bimTypeId不一样的对象数据,类型合并
+        content = EntityTransferUtil.combineData(content);
         //按首字母,对象数量为0放后的规则进行排序
         content = SortUtil.sortByCharacter(content,CommonConsant.OBJ_TYPE, CommonConsant.CLASS_NAME);
         //设置返回值
@@ -79,8 +82,14 @@ public class EquipController {
                               @RequestBody CommonRequestDTO request) throws Exception {
         // 组装上下文条件
         InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, null);
+        if(StringUtils.isEmpty(request.getSystemCode())){
+            throw new Exception("系统编码不能为空");
+        }
         //查询冷却塔设备类下的设备,制冷机房空间下的设备/阀门信息
         List<JSONObject> content = equipService.queryHavcSystem(context,request);
+
+        //类型名称相同的合并处理
+        content = EntityTransferUtil.combineData(content);
         //按首字母,对象数量为0放后的规则进行排序
         content = SortUtil.sortByCharacter(content,CommonConsant.OBJ_TYPE, CommonConsant.CLASS_NAME);
         //设置返回值
@@ -103,6 +112,9 @@ public class EquipController {
         InstanceUrlParam context = new InstanceUrlParam(groupCode, null, projectId, null);
         //查询分水器、集水器类型下的对象信息
         List<JSONObject> content =  equipService.querysubCatchment(context,request);
+
+        //类型名称相同的合并处理
+        content = EntityTransferUtil.combineData(content);
         //按首字母,对象数量为0放后的规则进行排序
         content = SortUtil.sortByCharacter(content,CommonConsant.OBJ_TYPE, CommonConsant.CLASS_NAME);
         //设置返回值
@@ -218,6 +230,9 @@ public class EquipController {
         }
         //查询楼层地板
         List<JSONObject> content = equipService.queryFloorBoard(context,request);
+
+        //类型名称相同的合并处理
+        content = EntityTransferUtil.combineData(content);
         //按首字母,对象数量为0放后的规则进行排序
         content = SortUtil.sortByCharacter(content,CommonConsant.OBJ_TYPE, CommonConsant.CLASS_NAME);
         //设置返回值

+ 3 - 0
src/main/java/com/persagy/dmp/middleware/controller/FloorController.java

@@ -109,6 +109,9 @@ public class FloorController {
         }
         //查询/统计楼层下的设备空间
         List<JSONObject> content = floorService.query(context,request);
+
+        //类型名称相同的合并处理
+        content = EntityTransferUtil.combineData(content);
         //按首字母,对象数量为0放后的规则进行排序
         content = SortUtil.sortByCharacter(content, CommonConsant.OBJ_TYPE, CommonConsant.CLASS_NAME);
         //设置返回值

+ 14 - 2
src/main/java/com/persagy/dmp/middleware/controller/SpaceController.java

@@ -5,11 +5,14 @@ import com.alibaba.fastjson.JSONObject;
 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.middleware.constant.CommonConsant;
 import com.persagy.dmp.middleware.entity.dto.CommonRequestDTO;
 import com.persagy.dmp.middleware.entity.dto.InstanceUrlParam;
 import com.persagy.dmp.middleware.entity.response.CommonResult;
 import com.persagy.dmp.middleware.service.IBaseService;
 import com.persagy.dmp.middleware.service.ISpaceService;
+import com.persagy.dmp.middleware.utils.EntityTransferUtil;
+import com.persagy.dmp.middleware.utils.SortUtil;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -18,6 +21,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.ws.rs.QueryParam;
+import java.util.List;
 
 /**
  * @ClassName ObjectInstanceController
@@ -60,7 +64,7 @@ public class SpaceController {
     }
 
     /**
-     * 查询空间内的设备/阀门 todo
+     * 查询空间内的设备/阀门
      * @param projectId
      * @param request
      * @return
@@ -79,7 +83,15 @@ public class SpaceController {
             throw new Exception("系统编码不能为空");
         }
         //查询空间内的设备/阀门
-        CommonResult response = spaceService.relQuery(context,request);
+        List<JSONObject> content = spaceService.relQuery(context,request);
+
+        //类型名称相同的合并处理
+        content = EntityTransferUtil.combineData(content);
+        //按首字母,对象数量为0放后的规则进行排序
+        content = SortUtil.sortByCharacter(content, CommonConsant.OBJ_TYPE, CommonConsant.CLASS_NAME);
+        //设置返回值
+        CommonResult<List<JSONObject>> response = CommonResult.success(content);
+        response.setCount(content == null ? 0 : Long.valueOf(content.size()));
         return  response;
     }
 

+ 1 - 1
src/main/java/com/persagy/dmp/middleware/service/ISpaceService.java

@@ -34,7 +34,7 @@ public interface ISpaceService {
      * @param request
      * @return
      */
-    CommonResult relQuery(InstanceUrlParam context, CommonRequestDTO request) throws Exception;
+    List<JSONObject> relQuery(InstanceUrlParam context, CommonRequestDTO request) throws Exception;
 
 
     /**

+ 7 - 13
src/main/java/com/persagy/dmp/middleware/service/impl/EquipServiceImpl.java

@@ -99,13 +99,12 @@ public class EquipServiceImpl implements IEquipService {
         CommonResult commonResult = baseService.doQuery(context, queryCriteria, JSONObject.class);
         List<JSONObject> spaceList = (List<JSONObject>) commonResult.getContent();
 
-        if(CollUtil.isEmpty(spaceList)){
-            return result;
+        if(CollUtil.isNotEmpty(spaceList)){
+            Set<String> spaceIds = spaceList.stream().map(k->k.getString("id")).collect(Collectors.toSet());
+            request.setSpaceIds(spaceIds);
         }
 
         //3.查询空间下的设备/阀门
-        Set<String> spaceIds = spaceList.stream().map(k->k.getString("id")).collect(Collectors.toSet());
-        request.setSpaceIds(spaceIds);
         List<JSONObject> content = spaceService.queryEquipInSpace(context, request, CommonConsant.ACCCOT_SPACE_BIMTYPEID);
         if(CollUtil.isNotEmpty(content)){
             result.addAll(content);
@@ -191,13 +190,10 @@ public class EquipServiceImpl implements IEquipService {
         //查询广联达设备类型
         WdDefineTypeRel defineTypeRel = new WdDefineTypeRel();
         defineTypeRel.setObjType(WdDefTypeEnum.EQUIPMENT.getValue());
-        List<WdDefineTypeRel> defineTypeRels = iWdDefineTypeRelService.query(context,defineTypeRel);
-
-        //根据系统过滤
         if(StringUtils.isNotEmpty(request.getSystemCode())){
-            String systemCode = request.getSystemCode();
-            defineTypeRels = defineTypeRels.stream().filter(k->systemCode.equals(k.getWdSystemCode())).collect(Collectors.toList());
+            defineTypeRel.setWdSystemCode(request.getSystemCode());
         }
+        List<WdDefineTypeRel> defineTypeRels = iWdDefineTypeRelService.query(context,defineTypeRel);
         //根据广联达设备类型查询设备信息
         List<JSONObject> equipList = queryEquipByGldTypeRel(context, defineTypeRels, request);
         return equipList;
@@ -213,12 +209,10 @@ public class EquipServiceImpl implements IEquipService {
         //查询广联达设备类型
         WdDefineTypeRel defineTypeRel = new WdDefineTypeRel();
         defineTypeRel.setObjType("material");
-        List<WdDefineTypeRel> defineTypeRels = iWdDefineTypeRelService.query(context,defineTypeRel);
-        //根据系统过滤
         if(StringUtils.isNotEmpty(request.getSystemCode())){
-            String systemCode = request.getSystemCode();
-            defineTypeRels = defineTypeRels.stream().filter(k->systemCode.equals(k.getWdSystemCode())).collect(Collectors.toList());
+            defineTypeRel.setWdSystemCode(request.getSystemCode());
         }
+        List<WdDefineTypeRel> defineTypeRels = iWdDefineTypeRelService.query(context,defineTypeRel);
         //根据广联达设备类型查询设备信息
         List<JSONObject> equipList = queryMateriaByGldTypeRel(context, defineTypeRels, request);
         return equipList;

+ 2 - 20
src/main/java/com/persagy/dmp/middleware/service/impl/SpaceServiceImpl.java

@@ -93,7 +93,7 @@ public class SpaceServiceImpl implements ISpaceService {
      * @return
      */
     @Override
-    public CommonResult relQuery(InstanceUrlParam context, CommonRequestDTO request) throws Exception{
+    public List<JSONObject> relQuery(InstanceUrlParam context, CommonRequestDTO request) throws Exception{
         //查询空间信息
         List<JSONObject> spaceList = querySpaceInfo(context, request);
         if(CollUtil.isEmpty(spaceList)){
@@ -106,7 +106,7 @@ public class SpaceServiceImpl implements ISpaceService {
 
         //查询指定空间类型下的设备
         List<JSONObject> content = queryEquipInSpace(context, request, bimTypeId);
-        return CommonResult.success(content);
+        return content;
     }
 
 
@@ -120,24 +120,6 @@ public class SpaceServiceImpl implements ISpaceService {
      */
     @Override
     public List<JSONObject> queryEquipInSpace(InstanceUrlParam context, CommonRequestDTO request,String bimTypeId) throws Exception{
-
-        //查询空间映射表
-        WdDefineTypeRel defineTypeRel = new WdDefineTypeRel();
-        defineTypeRel.setObjType(WdDefTypeEnum.SPACE.getValue());
-        defineTypeRel.setWdModelCode(WdModeCodeEnum.EQ.getValue());
-        defineTypeRel.setWdSystemCode(request.getSystemCode());
-        List<WdDefineTypeRel> spaceTypeRelList = iWdDefineTypeRelService.query(context,defineTypeRel);
-
-        //根据空间的BimTypeId构建编码获取所在系统
-/*
-        Map<String, List<WdDefineTypeRel>> spaceTypeRelMap = spaceTypeRelList.stream().collect(Collectors.groupingBy(WdDefineTypeRel::getBimTypeId));
-        List<WdDefineTypeRel> defineTypeRels = spaceTypeRelMap.get(bimTypeId);
-        if(CollUtil.isEmpty(defineTypeRels)){
-            throw new Exception("空间所属系统不存在");
-        }
-        Set<String> wdSystemCodes = defineTypeRels.stream().filter(k-> StringUtils.isNotEmpty(k.getWdSystemCode())).map(k->k.getWdSystemCode()).collect(Collectors.toSet());
-*/
-
         //获取万达系统类下的设备类/阀门
         Set<String> wdSystemCodes = new HashSet<>();
         wdSystemCodes.add(request.getSystemCode());

+ 32 - 7
src/main/java/com/persagy/dmp/middleware/service/impl/WdDefineTypeRelServiceImpl.java

@@ -1,5 +1,6 @@
 package com.persagy.dmp.middleware.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.persagy.dmp.middleware.dao.WdDefineTypeRelMapper;
 import com.persagy.dmp.middleware.entity.dto.InstanceUrlParam;
@@ -9,8 +10,7 @@ import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 
 /**
  * @ClassName ObjectInstanceServiceImpl
@@ -40,19 +40,21 @@ public class WdDefineTypeRelServiceImpl implements IWdDefineTypeRelService {
         if(StringUtils.isNotEmpty(wdDefineTypeRel.getBimTypeId())){
             wrapper.eq("bim_type_id",wdDefineTypeRel.getBimTypeId());
         }
-
         if(StringUtils.isNotEmpty(wdDefineTypeRel.getWdSystemCode())){
             wrapper.eq("wd_system_code",wdDefineTypeRel.getWdSystemCode());
         }
-
         if(StringUtils.isNotEmpty(wdDefineTypeRel.getWdModelCode())){
             wrapper.eq("wd_model_code",wdDefineTypeRel.getWdModelCode());
         }
-
+        wrapper.isNotNull("wd_class_name");
+        //查询广联达映射表
         List<WdDefineTypeRel> defineTypeRels = wdDefineTypeRelMapper.selectList(wrapper);
+        //去除重复数据,相同类型名称,相同bimTypeID
+        removeDuplicateData(defineTypeRels);
         return defineTypeRels;
     }
 
+
     /**
      * 批量查询映射表
      * @param wdSystemCodes
@@ -62,10 +64,33 @@ public class WdDefineTypeRelServiceImpl implements IWdDefineTypeRelService {
     @Override
     public List<WdDefineTypeRel> batchQuery(Set<String> wdSystemCodes, Set<String> objTypes) {
         QueryWrapper<WdDefineTypeRel> wrapper = new QueryWrapper<>();
-
         wrapper.in("obj_type",objTypes);
         wrapper.in("wd_system_code",wdSystemCodes);
-        return  wdDefineTypeRelMapper.selectList(wrapper);
+        List<WdDefineTypeRel> defineTypeRels = wdDefineTypeRelMapper.selectList(wrapper);
+        //去除重复数据
+        removeDuplicateData(defineTypeRels);
+        return defineTypeRels;
+    }
+
+    /**
+     * 去除重复数据
+     * @param lists
+     */
+    public static void removeDuplicateData(List<WdDefineTypeRel> lists){
+        Set<String> keys = new HashSet<>();
+        Iterator<WdDefineTypeRel> iterator = lists.iterator();
+        while (iterator.hasNext()){
+            WdDefineTypeRel wdDefineTypeRel = iterator.next();
+            if(StringUtils.isEmpty(wdDefineTypeRel.getWdClassName())){
+                iterator.remove();
+                continue;
+            }
+            if(CollUtil.isNotEmpty(keys) && keys.contains(wdDefineTypeRel.getWdClassName()+"-"+wdDefineTypeRel.getBimTypeId())){
+                iterator.remove();
+                continue;
+            }
+            keys.add(wdDefineTypeRel.getWdClassName()+"-"+wdDefineTypeRel.getBimTypeId());
+        }
     }
 
 }

+ 36 - 4
src/main/java/com/persagy/dmp/middleware/utils/EntityTransferUtil.java

@@ -12,11 +12,11 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.persagy.dmp.basic.model.QueryCriteria;
 import com.persagy.dmp.basic.utils.JsonNodeUtils;
 import com.persagy.dmp.middleware.entity.dto.CommonRequestDTO;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.BeanUtils;
 
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * ADM通用查询条件
@@ -189,4 +189,36 @@ public class EntityTransferUtil {
         return queryCriteria;
     }
 
+    /**
+     * 数据合并
+     * @param lists
+     * @return
+     */
+    public static List<JSONObject> combineData(List<JSONObject> lists){
+        if(CollUtil.isEmpty(lists)){
+            return new ArrayList<>();
+        }
+        Map<String, List<JSONObject>> map =lists.stream().collect(Collectors.groupingBy(k->k.getString("className"),LinkedHashMap::new,Collectors.toList()));
+        //需合并的数据
+        List<JSONObject> result = new ArrayList<>();
+        for (Map.Entry<String, List<JSONObject>> entry : map.entrySet()) {
+            List<JSONObject> value = entry.getValue();
+
+            JSONObject wdDefineTypeRel = new JSONObject();
+            JSONArray allObjects = new JSONArray();
+            for (JSONObject object : value) {
+                wdDefineTypeRel = object;
+                JSONArray objects = object.getJSONArray("objects");
+                if(objects != null && objects.size()>0){
+                    allObjects.addAll(objects);
+                }
+            }
+            wdDefineTypeRel.put("objects",allObjects);
+            wdDefineTypeRel.put("count",allObjects == null ? 0 : allObjects.size());
+
+            result.add(wdDefineTypeRel);
+        }
+        return result;
+    }
+
 }

+ 1 - 1
src/main/java/com/persagy/dmp/middleware/utils/SortUtil.java

@@ -24,7 +24,7 @@ public class SortUtil {
         }
 
         //按对象类型分组处理
-        Map<String, List<JSONObject>> groupMap = list.stream().collect(Collectors.groupingBy(k-> k.getString(groupType)));
+        Map<String, List<JSONObject>> groupMap = list.stream().collect(Collectors.groupingBy(k-> k.getString(groupType),LinkedHashMap::new,Collectors.toList()));
 
         //按首字母,按objType,按为0的
         List<JSONObject> result = new ArrayList<>();

+ 2 - 3
src/main/resources/md/管理说明书接口缺失整理-后台.md

@@ -264,8 +264,7 @@
 {
     “buildId”:"****",    //建筑id(非必传,楼层ID为空时,必传)
     "floorId":"****",    //楼层id (非必传,不传查全楼)
-    //“systemCode”:"****", //系统编码(非必传,可根据系统筛选,不传时查所有)
-    //”bimTypeId“:"****"   //空间的BIM构建编码(必传)
+    “systemCode”:"****", //系统编码(必传)
 }
 ```
 
@@ -341,7 +340,7 @@
 }
 ```
 
-## 12. 防火分区数量统计(信息点未交付,接口待定)
+## 12. 防火分区数量统计
 
 接口名称:http://<ip>:<port>/space/fireZone/query?groupCode=集团编码&projectId=项目id