Browse Source

解决模型绑定后,设备楼层ID、建筑ID为空问题

yucheng 3 years ago
parent
commit
3ff6b13322

+ 14 - 13
src/main/java/com/persagy/proxy/adm/utils/AdmEntityTransferUtil.java

@@ -40,21 +40,22 @@ public class AdmEntityTransferUtil {
                 jsonNode.remove("outline");
                 jsonNode.put("outline", outLine.toString());
             }
-            ArrayNode nullList = (ArrayNode) jsonNode.get("nullList");
-
-            if(nullList != null && nullList.size() > 0) {
-                for(int k=0; k < nullList.size(); k++){
-                    String node = nullList.get(k).textValue();
-                    if(node.startsWith("infos.")){
-                        node = node.replace("infos.","");
-                        jsonNode.remove(node);
-                        nullList.remove(i);
-                        nullList.add(node);
-                    }
+            JsonNode nullNode = jsonNode.get("nullList");
+            if(nullNode == null || !nullNode.isArray()) {
+                continue;
+            }
+            ArrayNode nullList = (ArrayNode) nullNode;
+            for(int k=0; k < nullList.size(); k++){
+                String node = nullList.get(k).textValue();
+                if(node.startsWith("infos.")){
+                    node = node.replace("infos.","");
+                    jsonNode.remove(node);
+                    nullList.remove(i);
+                    nullList.add(node);
                 }
-                jsonNode.remove("nullList");
-                jsonNode.putPOJO("$remove", nullList);
             }
+            jsonNode.remove("nullList");
+            jsonNode.putPOJO("$remove", nullList);
         }
         return arrayNode;
     }

+ 4 - 6
src/main/java/com/persagy/proxy/calculation/controller/AdmModelRelController.java

@@ -1,10 +1,10 @@
 package com.persagy.proxy.calculation.controller;
 
 import com.persagy.dmp.common.exception.BusinessException;
-import com.persagy.proxy.dictionary.model.AdmModelRel;
 import com.persagy.proxy.adm.request.AdmResponse;
-import com.persagy.proxy.dictionary.service.IAdmModelRelService;
 import com.persagy.proxy.adm.utils.AdmContextUtil;
+import com.persagy.proxy.dictionary.model.AdmModelRel;
+import com.persagy.proxy.dictionary.service.IAdmModelRelService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -14,8 +14,6 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.List;
-
 /**
  * @ClassName AdmModelRelController
  * @Description: 模型修改设备元空间的建筑楼层信息
@@ -49,8 +47,8 @@ public class AdmModelRelController {
         if(StringUtils.isEmpty(admModelRel.getFloorId())){
             throw new BusinessException("楼层ID不能为空");
         }
-        List<AdmModelRel> vos = service.doUpdateModelInfo(AdmContextUtil.toDmpContext(), AdmModelRel.class,admModelRel);
-        return AdmResponse.success(vos);
+        service.doUpdateModelInfo(AdmContextUtil.toDmpContext(), AdmModelRel.class,admModelRel);
+        return AdmResponse.success();
     }
 
 }

+ 3 - 2
src/main/java/com/persagy/proxy/dictionary/model/AdmModelRel.java

@@ -1,8 +1,9 @@
 package com.persagy.proxy.dictionary.model;
 
-import com.fasterxml.jackson.databind.node.ObjectNode;
 import lombok.Data;
 
+import java.util.Map;
+
 /**
  * @ClassName AdmLocationPoint
  * @Description: ADM点位坐标实体类
@@ -29,5 +30,5 @@ public class AdmModelRel {
     private String modelId;
 
     /** 自定义属性 */
-    private ObjectNode attributeMap;
+    private Map<String, Object> attributeMap;
 }

+ 2 - 4
src/main/java/com/persagy/proxy/dictionary/service/IAdmModelRelService.java

@@ -1,10 +1,8 @@
 package com.persagy.proxy.dictionary.service;
 
 import com.persagy.proxy.adm.service.IAdmBaseService;
-import com.persagy.proxy.dictionary.model.AdmModelRel;
 import com.persagy.proxy.common.entity.InstanceUrlParam;
-
-import java.util.List;
+import com.persagy.proxy.dictionary.model.AdmModelRel;
 
 /**
  * @ClassName IAdmModelRelService
@@ -22,5 +20,5 @@ public interface IAdmModelRelService extends IAdmBaseService<AdmModelRel> {
      * @param vo
      * @return
      */
-    List<AdmModelRel> doUpdateModelInfo(InstanceUrlParam context, Class<AdmModelRel> clazz, AdmModelRel vo)  throws Exception;
+    void doUpdateModelInfo(InstanceUrlParam context, Class<AdmModelRel> clazz, AdmModelRel vo);
 }

+ 130 - 263
src/main/java/com/persagy/proxy/dictionary/service/impl/AdmModelRelServiceImpl.java

@@ -1,10 +1,11 @@
 package com.persagy.proxy.dictionary.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
+import cn.hutool.core.map.MapUtil;
+import cn.hutool.core.util.StrUtil;
 import com.fasterxml.jackson.databind.node.JsonNodeFactory;
 import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.dmp.common.exception.BusinessException;
 import com.persagy.dmp.digital.entity.ObjectRelationProjectCal;
 import com.persagy.proxy.adm.constant.AdmCommonConstant;
 import com.persagy.proxy.adm.constant.AdmRelationTypeEnum;
@@ -23,7 +24,6 @@ import com.persagy.proxy.object.service.IAdmEquipmentService;
 import com.persagy.proxy.object.service.IAdmFloorService;
 import com.persagy.proxy.object.service.IAdmISpaceService;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -40,18 +40,14 @@ import java.util.*;
 @Slf4j
 public class AdmModelRelServiceImpl extends AbstractAdmBaseServiceImpl<AdmModelRel> implements IAdmModelRelService {
 
-
     @Autowired
     private IAdmFloorService floorService;
-
     @Autowired
     private IAdmEquipmentService equipmentService;
-
     @Autowired
     private IAdmISpaceService iSpaceService;
-
     @Autowired
-    private IAdmObjectRelationCalService iAdmObjectRelationCalService;
+    private IAdmObjectRelationCalService relationCalService;
 
     /**
      * 模型修改设备元空间的建筑楼层信息
@@ -61,319 +57,190 @@ public class AdmModelRelServiceImpl extends AbstractAdmBaseServiceImpl<AdmModelR
      * @return
      */
     @Override
-    public List<AdmModelRel> doUpdateModelInfo(InstanceUrlParam context, Class<AdmModelRel> clazz, AdmModelRel vo) throws Exception{
-        log.info("模型修改设备元空间参数{},{}"+context,vo);
-        //1.查询模型文件是否有楼层在使用
-        AdmModelRel floorCriteria = new AdmModelRel();
-        floorCriteria.setModelId(vo.getModelId());
-        List<AdmFloor> floorList = queryFloorEntity(context,floorCriteria);
-        if(CollUtil.isNotEmpty(floorList)){
-            Set<String> floorQueryTypes = getFloorQueryTypes(floorList);
-            List<ObjectRelationProjectCal> relationProjectCals = iAdmObjectRelationCalService.queryCalRelByRelationType(context, floorQueryTypes);
-            if(CollUtil.isNotEmpty(relationProjectCals)){
-                //更新边类型计算状态:computationalState为2
-                relationProjectCals.forEach(item->{
-                    item.setComputationalState(2);
-                });
-                log.info("修改设备计算状态{},{}"+context,relationProjectCals);
-                iAdmObjectRelationCalService.updateObjectCalRel(context,relationProjectCals);
-            }
-        }
-        //2.修改设备和元空间的建筑楼层信息
-        String oldBimId = vo.getOldBimId();
-        String bimId = vo.getBimId();
-
-        if(StringUtils.isNotEmpty(oldBimId)  && !oldBimId.equals(bimId)){
-            //根据模型id重置设备元空间的建筑楼层信息
-            resetEquipIspaceInfo(context,vo);
-        }
-
-        //查询楼层实体
-        floorCriteria = new AdmModelRel();
-        floorCriteria.setFloorId(vo.getFloorId());
-        List<AdmFloor> admFloors = queryFloorEntity(context, floorCriteria);
+    public void doUpdateModelInfo(InstanceUrlParam context, Class<AdmModelRel> clazz, AdmModelRel vo){
+        // 查询楼层实体
+        List<AdmFloor> admFloors = queryFloorEntity(context, null, vo.getFloorId());
         if(CollUtil.isEmpty(admFloors)){
-            throw new Exception("楼层不存在");
+            throw new BusinessException("楼层不存在");
         }
+        log.info("模型修改设备元空间参数{},{}"+context,vo);
+        // 在用模型的楼层计算状态改为2
+        processFloorCalState(context, vo.getModelId());
         AdmFloor floorEntity = admFloors.get(0);
-        //2.1 模型修改设备的建筑楼层信息
-        if(CollUtil.isEmpty(floorEntity.getOutline())){
-            //如果楼层的轮廓线为空的话,直接修改
-            updateEquipModelInfo(context, vo,floorEntity);
-        }else{
-            //判断该设备的坐标是否在层楼的轮廓中,若在,修改;不在,不修改
-            List<AdmEquipment> admEquipments = queryModelEquip(context, vo);
-            Boolean pointInPolygon = isPointInPolygon(admEquipments, floorEntity);
-            if(pointInPolygon){
-                updateEquipModelInfo(context, vo,floorEntity);
-            }
+        processRelObjects(context, vo.getOldBimId(), vo.getBimId(), floorEntity);
+        // 补充楼层属性
+        Map<String, Object> infos = floorEntity.getInfos();
+        if(CollUtil.isEmpty(infos)){
+            infos = new HashMap<>(16);
+            floorEntity.setInfos(infos);
         }
-        //2.2 模型修改元空间的建筑楼层信息
-        updateIspaceModelInfo(context, vo,floorEntity);
-
-        //3. 修改楼层平面图地址
-        if(StringUtils.isNotEmpty(vo.getFloorMap())){
-            if(CollUtil.isEmpty(floorEntity.getInfos())){
-                Map<String, Object> infos = new HashMap<>(16);
-                infos.put("floorMap",vo.getFloorMap());
-            }else{
-                floorEntity.getInfos().put("floorMap",vo.getFloorMap());
-            }
+        infos.put("floorMap",vo.getFloorMap());
+        Double floorElevation = MapUtil.getDouble(vo.getAttributeMap(), AdmCommonConstant.FLOOR_ELEVATION);
+        if(floorElevation != null){
+            infos.put(AdmCommonConstant.FLOOR_ELEVATION, floorElevation/1000);
         }
         floorEntity.setModelId(vo.getModelId());
         floorEntity.setBimIdPre(vo.getBimId());
-
-        //4.处理楼层自定义属性:楼层标高
-        ObjectNode attributeMap = vo.getAttributeMap();
-        if(attributeMap!=null){
-            updateFloorElevation(vo.getAttributeMap().toString(),floorEntity);
-        }
-
         //5.修改楼层信息
-        ArrayList<AdmFloor> floors = new ArrayList<>();
-        floors.add(floorEntity);
-        List<AdmFloor> floorUpresult = floorService.doUpdate(context, AdmFloor.class, floors);
-        if(CollUtil.isEmpty(floorUpresult)) {
-            //6.发送消息,BDTP已发送,不再重复发送修改对象消息
-        }
-        return null;
+        floorService.doUpdate(context, AdmFloor.class, CollUtil.newArrayList(floorEntity));
     }
 
     /**
-     * 模型修改设备的建筑楼层信息
+     * 处理在用模型文件的楼层计算状态
+     * @param context
+     * @param modelId
      */
-    private void updateEquipModelInfo(InstanceUrlParam context, AdmModelRel modelRel,AdmFloor floorEntity){
-
-        //查询模型下的设备信息
-        AdmQueryCriteria criteria = new AdmQueryCriteria();
-        StringBuilder filters = new StringBuilder();
-        if(StringUtils.isNotEmpty(modelRel.getBimId())){
-            filters.append("bimId contain '"+modelRel.getBimId()+"%'");
-        }
-        /*if(StringUtils.isNotEmpty(modelRel.getFloorId())){
-            if(filters != null && filters.length()>0){
-                filters.append(" ; ");
-            }
-            filters.append("floorId = '"+modelRel.getFloorId()+"'");
-        }*/
-        criteria.setFilters(filters.toString());
-        criteria.setName("equipment");
-        AdmResponse admResponse = equipmentService.query(criteria);
-        List<AdmEquipment> content = (List<AdmEquipment>) admResponse.getContent();
-        if(CollUtil.isEmpty(content)){
+    private void processFloorCalState(InstanceUrlParam context, String modelId) {
+        List<AdmFloor> floorList = queryFloorEntity(context, modelId, null);
+        if(CollUtil.isEmpty(floorList)) {
             return;
         }
-        for (AdmEquipment admEquipment : content) {
-            //修改设备的建筑楼层信息
-            admEquipment.setBuildingId(floorEntity.getBuildingId());
-            admEquipment.setFloorId(floorEntity.getId());
-        }
-        List<AdmEquipment> admEquipments = equipmentService.doUpdate(context, AdmEquipment.class, content);
-        log.info("模型修改设备建筑楼层信息结果"+admEquipments);
-    }
-
-
-    /**
-     * 模型修改元空间的建筑楼层信息
-     */
-    private void updateIspaceModelInfo(InstanceUrlParam context, AdmModelRel modelRel,AdmFloor floorEntity){
-
-        //查询模型下的元空间信息
-        AdmQueryCriteria criteria = new AdmQueryCriteria();
-        StringBuilder filters = new StringBuilder();
-        if(StringUtils.isNotEmpty(modelRel.getBimId())){
-            filters.append("bimId contain '"+modelRel.getBimId()+"%'");
-        }
-        /*if(StringUtils.isNotEmpty(modelRel.getFloorId())){
-            if(filters != null && filters.length()>0){
-                filters.append(" ; ");
-            }
-            filters.append("floorId = '"+modelRel.getFloorId()+"'");
-        }*/
-        criteria.setName("ispace");
-        criteria.setFilters(filters.toString());
-        AdmResponse admResponse = iSpaceService.doQuery(context, criteria, AdmISpace.class);
-        List<AdmISpace> content = (List<AdmISpace>) admResponse.getContent();
-        if(CollUtil.isEmpty(content)){
+        Set<String> floorQueryTypes = getFloorQueryTypes(floorList);
+        List<ObjectRelationProjectCal> needCals = relationCalService.queryCalRelByRelationType(context, floorQueryTypes);
+        if(CollUtil.isEmpty(needCals)) {
             return;
         }
-        for (AdmISpace admIspace : content) {
-            //修改设备的建筑楼层信息
-            admIspace.setBuildingId(floorEntity.getBuildingId());
-            admIspace.setFloorId(floorEntity.getId());
-        }
-        List<AdmISpace> admEquipments = iSpaceService.doUpdate(context, AdmISpace.class, content);
-        log.info("模型修改元空间的建筑楼层信息结果"+admEquipments);
+        //更新边类型计算状态:computationalState为2
+        needCals.forEach(item->{
+            item.setComputationalState(2);
+        });
+        relationCalService.updateObjectCalRel(context, needCals);
     }
 
-
     /**
-     * 判断点是否在面中
-     * @return
+     * 处理关联的元空间和设备
+     * @param context
+     * @param oldBimId
+     * @param bimId
+     * @param floor
      */
-    private Boolean isPointInPolygon(List<AdmEquipment> equipments,AdmFloor floor){
-        if(CollUtil.isEmpty(equipments)){
-            return false;
+    private void processRelObjects(InstanceUrlParam context, String oldBimId, String bimId, AdmFloor floor) {
+        // 如果bimId不一致,则清空原来的楼层信息
+        if(StrUtil.isNotBlank(oldBimId) && !StrUtil.equals(oldBimId, bimId)) {
+            updateRelEquipments(context, oldBimId, null);
+            updateRelISpace(context, oldBimId, null);
         }
-        Boolean flag = true;
-        //楼层轮廓线
-//        List<ObjectNode> outline = floor.getOutline();
-//        for (AdmEquipment equipment : equipments) {
-//            //设备BIM坐标
-//            String bimLocation = equipment.getBimLocation();
-//            //判断点是否在面中:即设备位置是否在该楼层轮廓线中
-//            if(StringUtils.isEmpty(bimLocation)){
-//                continue;
-//            }
-//            String[] split = bimLocation.split(",");
-//            ObjectNode node = JsonNodeFactory.instance.objectNode();
-//            node.put("x",Double.valueOf(split[0]));
-//            node.put("y",Double.valueOf(split[1]));
-//            node.put("z",Double.valueOf(split[2]));
-//            flag = GeoToolsUtil.isPointInPoly(node,outline);
-//            if(!flag){
-//                return flag;
-//            }
-//        }
-        return flag;
+        // 更新新关联的
+        updateRelEquipments(context, bimId, floor);
+        updateRelISpace(context, bimId, floor);
     }
 
-
     /**
-     * 楼层属性修改
-     * @param floorMapStr
-     * @param floorEntity
+     * 更新设备
+     * @param context
+     * @param bimId
+     * @param floor
      */
-    private void updateFloorMap(String floorMapStr,AdmFloor floorEntity){
-        if(StringUtils.isEmpty(floorMapStr)){
+    private void updateRelEquipments(InstanceUrlParam context, String bimId, AdmFloor floor) {
+        if(StrUtil.isBlank(bimId)) {
             return;
         }
-        Map<String, Object> floorMap = JSONObject.toJavaObject(JSON.parseObject(floorMapStr), Map.class);
-        Map<String, Object> infos = floorEntity.getInfos();
-        for(Map.Entry<String,Object> map : floorMap.entrySet()){
-            infos.put(map.getKey(),map.getValue());
-        }
-        floorEntity.setInfos(infos);
-    }
-
-    /**
-     * 处理楼层标高
-     * @param floorMapStr
-     * @param floorEntity
-     */
-    private void updateFloorElevation(String floorMapStr,AdmFloor floorEntity){
-        if(StringUtils.isEmpty(floorMapStr)){
+        //查询模型下的设备信息
+        AdmQueryCriteria criteria = new AdmQueryCriteria();
+        criteria.addFilters("bimId startwith '" + bimId + ":'");
+        criteria.setName(AdmEquipment.OBJ_TYPE);
+        AdmResponse admResponse = equipmentService.doQuery(context, criteria, AdmEquipment.class);
+        List<AdmEquipment> content = (List<AdmEquipment>) admResponse.getContent();
+        if(CollUtil.isEmpty(content)) {
             return;
         }
-        Map<String, Object> floorMap = JSONObject.toJavaObject(JSON.parseObject(floorMapStr), Map.class);
-
-        Map<String, Object> infos = floorEntity.getInfos();
-        if(floorMap.containsKey(AdmCommonConstant.FLOOR_ELEVATION)){
-            Object object = floorMap.get(AdmCommonConstant.FLOOR_ELEVATION);
-            if(object != null){
-                double floorElevation = Double.valueOf(object.toString()) / 1000;
-                infos.put(AdmCommonConstant.FLOOR_ELEVATION,floorElevation);
+        List<String> nullList = CollUtil.newArrayList("buildingId", "floorId");
+        List<AdmEquipment> rsList = new ArrayList<>();
+        for (AdmEquipment admEquipment : content) {
+            if(floor == null) {
+                admEquipment.setNullList(nullList);
+                rsList.add(admEquipment);
+                continue;
             }
+            if(!isPointInPolygon(admEquipment, floor.getOutline())) {
+                continue;
+            }
+            //修改设备的建筑楼层信息
+            admEquipment.setBuildingId(floor.getBuildingId());
+            admEquipment.setFloorId(floor.getId());
+            rsList.add(admEquipment);
         }
-    }
-
-
-    /**
-     * 根据模型id重置设备元空间的建筑楼层信息
-     * @param context
-     * @param vo
-     */
-    private void resetEquipIspaceInfo(InstanceUrlParam context, AdmModelRel vo){
-        //重置历史设备的建筑楼层信息
-        List<AdmEquipment> admEquipments = queryEquipmentByBimId(context, vo);
-        if(CollUtil.isNotEmpty(admEquipments)){
-            admEquipments.forEach(item->{
-                item.setFloorId(null);
-                item.setBuildingId(null);
-            });
-        }
-        equipmentService.doUpdate(context,AdmEquipment.class,admEquipments);
-
-        //重置历史元空间的建筑楼层信息
-        List<AdmISpace> admISpaces = queryIspaceByBimId(context, vo);
-        if(CollUtil.isNotEmpty(admISpaces)){
-            admISpaces.forEach(item->{
-                item.setFloorId(null);
-                item.setBuildingId(null);
-            });
+        if(CollUtil.isEmpty(rsList)) {
+            return;
         }
-       iSpaceService.doUpdate(context,AdmISpace.class,admISpaces);
+        equipmentService.doUpdate(context, AdmEquipment.class, rsList);
     }
 
-
     /**
-     * 查询设备信息
+     * 更新元空间
      * @param context
-     * @param modelRel
+     * @param bimId
+     * @param floor
      */
-    private List<AdmEquipment> queryModelEquip(InstanceUrlParam context, AdmModelRel modelRel){
+    private void updateRelISpace(InstanceUrlParam context, String bimId, AdmFloor floor) {
+        if(StrUtil.isBlank(bimId)) {
+            return;
+        }
         //查询模型下的设备信息
         AdmQueryCriteria criteria = new AdmQueryCriteria();
-        criteria.setFilters("bimId = '"+modelRel.getBimId()+"' and floorId = '"+modelRel.getFloorId()+"'");
-       // criteria.setFilters("floorId = '"+modelRel.getFloorId()+"'");
-        AdmResponse admResponse = equipmentService.query(criteria);
-        if(CollUtil.isEmpty(admResponse.getContent())){
-            return new ArrayList<>();
+        criteria.addFilters("bimId startwith '" + bimId + ":'");
+        criteria.setName(AdmISpace.OBJ_TYPE);
+        AdmResponse admResponse = iSpaceService.doQuery(context, criteria, AdmISpace.class);
+        List<AdmISpace> content = (List<AdmISpace>) admResponse.getContent();
+        if(CollUtil.isEmpty(content)) {
+            return;
         }
-        return (List<AdmEquipment>) admResponse.getContent();
-    }
-
-    /**
-     * 根据BIMID查询历史设备信息
-     */
-    private List<AdmEquipment> queryEquipmentByBimId(InstanceUrlParam context, AdmModelRel vo){
-        AdmQueryCriteria criteria = new AdmQueryCriteria();
-        criteria.setFilters("bimId = '"+vo.getOldBimId()+"'");
-        criteria.setName("equipment");
-        AdmResponse admResponse = equipmentService.query(criteria);
-        return (List<AdmEquipment>)admResponse.getContent();
+        List<String> nullList = CollUtil.newArrayList("buildingId", "floorId");
+        for (AdmISpace iSpace : content) {
+            if(floor == null) {
+                iSpace.setNullList(nullList);
+                continue;
+            }
+            //修改设备的建筑楼层信息
+            iSpace.setBuildingId(floor.getBuildingId());
+            iSpace.setFloorId(floor.getId());
+        }
+        iSpaceService.doUpdate(context, AdmISpace.class, content);
     }
 
-
     /**
-     * 根据BIMID查询历史元空间信息
+     * 判断点是否在面中
+     * @return
      */
-    private List<AdmISpace> queryIspaceByBimId(InstanceUrlParam context, AdmModelRel vo){
-        AdmQueryCriteria criteria = new AdmQueryCriteria();
-        criteria.setFilters("bimId = '"+vo.getOldBimId()+"'");
-        criteria.setName("ispace");
-        AdmResponse admResponse = iSpaceService.doQuery(context, criteria, AdmISpace.class);
-        return (List<AdmISpace>)admResponse.getContent();
+    private boolean isPointInPolygon(AdmEquipment equipment, List<ObjectNode> outline){
+        // 如果为空,表示无限边界
+        if(CollUtil.isEmpty(outline)) {
+            return true;
+        }
+        Boolean flag = true;
+        //设备BIM坐标
+        String bimLocation = equipment.getBimLocation();
+        //判断点是否在面中:即设备位置是否在该楼层轮廓线中
+        if(StrUtil.isBlank(bimLocation)){
+            return false;
+        }
+        String[] split = bimLocation.split(",");
+        ObjectNode node = JsonNodeFactory.instance.objectNode();
+        node.put("x",Double.valueOf(split[0]));
+        node.put("y",Double.valueOf(split[1]));
+        node.put("z",Double.valueOf(split[2]));
+        return GeoToolsUtil.isPointInPoly(node,outline);
     }
 
-
     /**
      * 查询模型文件是否有楼层在使用
      */
-    private List<AdmFloor> queryFloorEntity(InstanceUrlParam context, AdmModelRel vo){
-        if(StringUtils.isEmpty(vo.getModelId()) && StringUtils.isEmpty(vo.getFloorId())){
+    private List<AdmFloor> queryFloorEntity(InstanceUrlParam context, String modelId, String floorId){
+        if(StrUtil.isBlank(modelId) && StrUtil.isBlank(floorId)){
             return new ArrayList<>();
         }
         AdmQueryCriteria criteria = new AdmQueryCriteria();
-
-        StringBuilder filters = new StringBuilder();
-        if(StringUtils.isNotEmpty(vo.getModelId())){
-            filters.append("modelId = '"+vo.getModelId()+"'");
+        if(StrUtil.isNotBlank(modelId)) {
+            criteria.addFilters(" modelId = '" + modelId + "' ");
         }
-        if(StringUtils.isNotEmpty(vo.getFloorId())){
-            if(filters != null && filters.length()>0){
-                filters.append(" ; ");
-            }
-            filters.append("id = '"+vo.getFloorId()+"'");
+        if(StrUtil.isNotBlank(floorId)) {
+            criteria.addFilters(" id = '"+floorId+"' ");
         }
-        criteria.setFilters(filters.toString());
-        criteria.setName("floor");
-        log.info("查询模型文件是否有楼层在使用入参:{},{}"+context,criteria);
+        criteria.setName(AdmFloor.OBJ_TYPE);
         AdmResponse admResponse = floorService.doQuery(context, criteria, AdmFloor.class);
         return (List<AdmFloor>)admResponse.getContent();
     }
 
-
     /**
      * 获取楼层查询类型
      * @param floorList

+ 3 - 1
src/main/java/com/persagy/proxy/object/model/AdmISpace.java

@@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.node.ArrayNode;
 import lombok.Data;
 
 import java.util.Date;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -78,5 +79,6 @@ public class AdmISpace {
     private String classCode;
     /** 创建时间 */
     private Date createTime;
-
+    /** 需要删除的对象 */
+    private List<String> nullList;
 }