Quellcode durchsuchen

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

zhangqiankun vor 3 Jahren
Ursprung
Commit
fc54cd7e03

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

@@ -76,6 +76,7 @@ public class AbstractAdmBaseServiceImpl<T> implements IAdmBaseService<T> {
         log.info("request:{},dmpRequest:{}, dmp-param: {}", request.toString(), dmpRequest.toString(), para.toString());
         // 调用中台查询
         DmpResult<JSONArray> dmpResult = rwdClient.queryObject(context, para);
+        processResultAfterQuery(dmpResult);
         List<T> admVOs = AdmEntityTransferUtil.toAdmMultiEntity(dmpResult.getData(), request.getProjection(), clazz);
         //List<T> admVOs = AdmEntityTransferUtil.toAdmMultiEntityExtra(dmpResult.getData(), request.getProjection(), clazz);
         // 级联查询
@@ -362,8 +363,20 @@ public class AbstractAdmBaseServiceImpl<T> implements IAdmBaseService<T> {
             throw new RuntimeException("调用中台查询接口出错:" + response.getMessage());
         }
         // 转换为结果
+        // 2021年11月3日17:45:46 by lijie 新增一个钩子方法,用于处理floor的properties字段,不然转换为对象时会报转换异常
+        processResultAfterQuery(response);
         return AdmEntityTransferUtil.toAdmMultiEntity(response.getData(), null, clazz);
     }
+    /***
+     * Description: 一个钩子方法,特殊处理一下楼层对象返回的properties信息点,不然转换为对象时会报转换异常
+     * @param response : 查询结果
+     * @return : void
+     * @author : lijie
+     * @date :2021/11/3 17:47
+     * Update By lijie 2021/11/3 17:47
+     */
+    protected void processResultAfterQuery(DmpResult<JSONArray> response) {
+    }
 
     /**
      * 修改
@@ -379,11 +392,12 @@ public class AbstractAdmBaseServiceImpl<T> implements IAdmBaseService<T> {
         }
         ArrayNode vos = AdmEntityTransferUtil.toDmpMultiEntity(voList);
         // 调用中台修改
-        DmpResult<cn.hutool.json.JSONArray> response = rwdClient.updateObject(context, JSONArray.parseArray(vos.toString()));
+        DmpResult<JSONArray> response = rwdClient.updateObject(context, JSONArray.parseArray(vos.toString()));
         if(!DmpResult.SUCCESS.equals(response.getResult())) {
             throw new RuntimeException("调用中台查询接口出错:" + response.getMessage());
         }
         // 转换为结果
+        processResultAfterQuery(response);
         return AdmEntityTransferUtil.toAdmMultiEntity(response.getData(), null, clazz);
     }
 
@@ -425,6 +439,7 @@ public class AbstractAdmBaseServiceImpl<T> implements IAdmBaseService<T> {
         }
         // 调用中台查询
         DmpResult<JSONArray> dmpResult = rwdClient.queryObject(context, para);
+        processResultAfterQuery(dmpResult);
         List<T> admVOs = AdmEntityTransferUtil.toAdmMultiEntity(dmpResult.getData(), null, clazz);
 //        JSONArray data = dmpResult.getData();
 //        List<T> admVOs = new ArrayList<>();

+ 46 - 18
src/main/java/com/persagy/proxy/dictionary/service/impl/AbstractAdmDictBaseServiceImpl.java

@@ -44,9 +44,15 @@ import java.util.Set;
 @Slf4j
 public class AbstractAdmDictBaseServiceImpl<T> implements IAdmDictBaseService<T> {
 
-    private static final Set<String> TABLE_INFOS=CollUtil.newHashSet("id","code","localId",
-            "localName","groupCode","projectId","objType","classCode","grouping","virtualCodes","createApp","updateApp",
-            "creator","creationTime","modifier","modifiedTime","valid","floorSequenceID");
+    private static final Set<String> TABLE_INFOS=CollUtil.newHashSet("id","name","localId","localName",
+            "qRCodePic","defaultQRCode","rFID","cADID","bimId","bimTypeId","bimLocation","bimFamilyName",
+            "bimFamilySymbol","equipSerial","modelId","note","introduction","businessFloorNum","officeFloorNum",
+            "shaftSequenceId","outline","buildQRCode","bimIdPre","floorSequenceId","floorSequenceID",
+            "permanentPeopleNum","floorIdentity","depth","width","buildArea","netArea","height","intro",
+            "ratedCoolingP","ratedHeatingP","acType","zoneOrientation","roomFuncType","roomSerial",
+            "projRoomFuncType","ratedLightP","zoneType","tenantType","tenant","elecCap","pollutionDegree",
+            "groupCode","projectId","objType","classCode","grouping","virtualCodes","createApp","updateApp",
+            "creator","creationTime","modifier","modifiedTime","valid");
 
     @Autowired
     private DmpRwdClient rwdClient;
@@ -198,6 +204,13 @@ public class AbstractAdmDictBaseServiceImpl<T> implements IAdmDictBaseService<T>
         if(CollUtil.isEmpty(admVOs)){
             return;
         }
+        // 删除楼层的properties的信息点
+        for (int i = admVOs.size() - 1; i >= 0; i--) {
+            AdmObjectInfo admVo = admVOs.get(i);
+            if ("floor".equals(admVo.getClassCode()) && "properties".equals(admVo.getCode())){
+                admVo.setEditable(false);
+            }
+        }
         for (AdmObjectInfo admVO : admVOs) {
             admVO.setFirstName(admVO.getFirstTag());
             admVO.setSecondName(admVO.getSecondTag());
@@ -207,27 +220,42 @@ public class AbstractAdmDictBaseServiceImpl<T> implements IAdmDictBaseService<T>
             admVO.setSort(admVO.getShowOrder());
 
             //path路径处理
-//            if(StringUtils.isEmpty(admVO.getFirstName())
-//                    || AdmDictConstant.FIRST_BASE_TAG.equals(admVO.getFirstName())
-//                    || AdmDictConstant.HIS_FIRST_BASE_TAG.equals(admVO.getFirstName())
-//                    || AdmDictConstant.HIS_FIRST_BASE_TAG_TWO.equals(admVO.getFirstName())){
-//                admVO.setPath(admVO.getCode());
-//            }else{
-//                admVO.setPath(AdmDictConstant.INFOS_EX+admVO.getCode());
-//            }
-            if (TABLE_INFOS.contains(admVO.getCode())){
-                admVO.setPath(admVO.getCode());
-            }else {
-                admVO.setPath(AdmDictConstant.INFOS_EX+admVO.getCode());
-            }
-
+            handleObjectInfoPath(admVO);
             //信息点是否可见设置默认值
             if(admVO.getVisible() == null){
                 admVO.setVisible(false);
             }
         }
     }
-
+    /***
+     * Description: 处理信息点的path
+     * @param admVO : 信息点对象
+     * @return : void
+     * @author : lijie
+     * @date :2021/11/3 13:29
+     * Update By lijie 2021/11/3 13:29
+     */
+    private void handleObjectInfoPath(AdmObjectInfo admVO) {
+        if(StrUtil.isNotBlank(admVO.getClassCode())
+                && StrUtil.isNotBlank(admVO.getCode())
+                && "height".equals(admVO.getCode())){
+            // 特殊处理height信息点
+            admVO.setPath(AdmDictConstant.INFOS_EX+admVO.getCode());
+            return;
+        }
+        if (TABLE_INFOS.contains(admVO.getCode())
+                || ((AdmDictConstant.FIRST_BASE_TAG.equals(admVO.getFirstName())
+                || AdmDictConstant.HIS_FIRST_BASE_TAG.equals(admVO.getFirstName())
+                || AdmDictConstant.HIS_FIRST_BASE_TAG_TWO.equals(admVO.getFirstName()))
+                && "pic".equals(admVO.getCode()))){
+            // 1)表字段信息中包含的
+            // 2)第一个名称为基本参数并且信息点为pic的
+            admVO.setPath(admVO.getCode());
+            return;
+        }
+        // 其余信息点带info.
+        admVO.setPath(AdmDictConstant.INFOS_EX+admVO.getCode());
+    }
 
 
     /**

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

@@ -196,24 +196,24 @@ public class AdmModelRelServiceImpl extends AbstractAdmBaseServiceImpl<AdmModelR
         }
         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;
-            }
-        }
+//        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;
     }
 

+ 4 - 0
src/main/java/com/persagy/proxy/object/model/AdmBuilding.java

@@ -28,6 +28,10 @@ public class AdmBuilding extends AdmBaseEntity<AdmBuilding> {
     private String defaultQRCode;
     /** 建筑二维码图片 */
     private String buildQRCode;
+    /** 文字简介 */
+    private String intro;
+    /** 建筑常驻人数 */
+    private String permanentPeopleNum;
     /** 对象类型 */
     private String objectType = OBJ_TYPE;
     /** 建筑下楼层模型被使用的数量 */

+ 3 - 2
src/main/java/com/persagy/proxy/object/model/AdmFloor.java

@@ -1,6 +1,7 @@
 package com.persagy.proxy.object.model;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.persagy.proxy.adm.annotations.CascadeColumn;
 import com.persagy.proxy.adm.model.AdmBaseEntity;
@@ -8,7 +9,6 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 import java.util.List;
-import java.util.Map;
 
 /**
  * ADM 楼层 实体
@@ -58,6 +58,7 @@ public class AdmFloor extends AdmBaseEntity<AdmFloor> {
     private String modelId;
 
     /** 楼层选定区域轮廓线 */
+    //private List<ObjectNode> outline;
     private List<ObjectNode> outline;
 
     /** 数量 */
@@ -71,7 +72,7 @@ public class AdmFloor extends AdmBaseEntity<AdmFloor> {
     private String propertiesInfo;
 
     /** 二维码图片 */
-    private String qrcodePic;
+    private ArrayNode qrcodePic;
 
 
     /** 对象类型 */

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

@@ -93,7 +93,7 @@ public class AdmSpace extends AdmBaseEntity<AdmSpace> {
     private String classCode;
 
     /** 二维码图片 */
-    private String qrcodePic;
+    private ArrayNode qrcodePic;
     /** BIM模型中坐标 */
     private String bimLocation;
     /** 二维码图片 */

+ 32 - 0
src/main/java/com/persagy/proxy/object/service/impl/AdmFloorServiceImpl.java

@@ -4,6 +4,8 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.persagy.dmp.basic.model.QueryCriteria;
@@ -12,6 +14,7 @@ import com.persagy.proxy.adm.constant.GraphCodeEnum;
 import com.persagy.proxy.adm.constant.RelCodeEnum;
 import com.persagy.proxy.adm.service.impl.AbstractAdmBaseServiceImpl;
 import com.persagy.proxy.adm.utils.AdmContextUtil;
+import com.persagy.proxy.common.entity.DmpResult;
 import com.persagy.proxy.object.model.AdmFloor;
 import com.persagy.proxy.adm.request.AdmQueryCriteria;
 import com.persagy.proxy.adm.request.AdmResponse;
@@ -164,6 +167,7 @@ public class AdmFloorServiceImpl extends AbstractAdmBaseServiceImpl<AdmFloor> im
             }else{//新增或者更新
                 vos.stream().forEach(admFloor -> {
                     if(!JSONUtil.isNull(admFloor.getProperties())){
+                        //admFloor.setPropertiesInfo(admFloor.getProperties().toString());
                         admFloor.setPropertiesInfo(admFloor.getProperties().toString());
                         admFloor.setProperties(null);
                     }
@@ -171,4 +175,32 @@ public class AdmFloorServiceImpl extends AbstractAdmBaseServiceImpl<AdmFloor> im
             }
         }
     }
+
+
+    @Override
+    protected void processResultAfterQuery(DmpResult<JSONArray> response) {
+        // 2021年11月3日17:39:28 by lijie.特殊处理一下返回的properties信息点,不然转换为对象时会报转换异常
+        JSONArray data = new JSONArray();
+        List array = response.getData();
+        if (null!=array && array.size()>0){
+            data.addAll(array);
+            int size = data.size();
+            for (int i = 0; i < size; i++) {
+                JSONObject temp = data.getJSONObject(i);
+                if (temp.containsKey("infos") && temp.getJSONObject("infos").containsKey("properties")
+                        && StrUtil.isNotBlank(temp.getJSONObject("infos").getString("properties"))
+                        && temp.getJSONObject("infos").getString("properties").startsWith("{")){
+                    temp.getJSONObject("infos")
+                            .put("properties",JSONObject.parseObject(temp.getJSONObject("infos").getString("properties")));
+                }
+                if (temp.containsKey("properties")
+                        && StrUtil.isNotBlank(temp.getString("properties"))
+                        && temp.getString("properties").startsWith("{")){
+                    temp.put("properties",JSONObject.parseObject(temp.getString("properties")));
+                }
+                data.set(i,temp);
+            }
+        }
+        response.setData(data);
+    }
 }

+ 9 - 6
src/main/java/com/persagy/proxy/object/service/impl/AdmSpaceServiceImpl.java

@@ -11,6 +11,7 @@ import java.util.stream.Collectors;
 
 import javax.servlet.http.HttpServletRequest;
 
+import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -91,13 +92,15 @@ public class AdmSpaceServiceImpl extends AbstractAdmBaseServiceImpl<AdmSpace> im
 
     @Override
     public List<AdmSpace> doInsertExt(InstanceUrlParam context, Class<AdmSpace> clazz, List<AdmSpace> voList) {
-        Map<String, List<AdmSpace>> spaceMapByFlId = voList.stream().collect(Collectors.groupingBy(AdmSpace::getFloorId));
+        Map<String, List<AdmSpace>> spaceMapByFlId = voList.stream().filter(admSpace -> StringUtils.isNotEmpty(admSpace.getFloorId())).collect(Collectors.groupingBy(AdmSpace::getFloorId));
         //查询空间中floorId 对应的floor
-        List<ObjectNode> floors = queryFloorsByFloorIds(context, spaceMapByFlId.keySet());
-        if(CollUtil.isNotEmpty(floors)){
-            //ArrayList<AdmFloor> floorList = CollUtil.newArrayList(JSONUtil.toList(floors.getData().toString(),AdmFloor.class));
-            //space.height = floor.infos.height
-            voList = processHeight(spaceMapByFlId, floors);
+        if(CollUtil.isNotEmpty(spaceMapByFlId)){
+            List<ObjectNode> floors = queryFloorsByFloorIds(context, spaceMapByFlId.keySet());
+            if(CollUtil.isNotEmpty(floors)){
+                //ArrayList<AdmFloor> floorList = CollUtil.newArrayList(JSONUtil.toList(floors.getData().toString(),AdmFloor.class));
+                //space.height = floor.infos.height
+                voList = processHeight(spaceMapByFlId, floors);
+            }
         }
         //插入空间
         List<AdmSpace> vosR = doInsert(context, clazz, voList);

Datei-Diff unterdrückt, da er zu groß ist
+ 105 - 0
src/main/java/com/persagy/proxy/object/service/impl/TestServiceImpl.java


+ 4 - 8
src/main/java/com/persagy/proxy/report/controller/AdmSpaceInfoController.java

@@ -151,11 +151,7 @@ public class AdmSpaceInfoController {
 		}
 		// 补充楼层条件
 		if(StrUtil.isNotBlank(request.getFloorId())) {
-			sb.append("floorId = '").append(request.getFloorId()).append("'; ");
-		}
-		// 补充模型条件
-		if(StrUtil.isNotBlank(floor.getModelId())) {
-			sb.append("modelId = '").append(floor.getModelId()).append("'; ");
+			sb.append("bimId startwith '").append(floor.getBimIdPre()).append("'; ");
 		}
 		if(sb.length() > 0) {
 			request.setFilters(sb.substring(0, sb.length() - 1));
@@ -171,9 +167,9 @@ public class AdmSpaceInfoController {
 					continue;
 				}
 				List<ObjectNode> ispaceOutLine = JSONArray.parseArray(iSpace.getOutline().toString(), ObjectNode.class);
-				if(GeoToolsUtil.isPolyInPoly(ispaceOutLine, floor.getOutline())){
-					iSpaceList.add(iSpace);
-				}
+//				if(GeoToolsUtil.isPolyInPoly(ispaceOutLine, floor.getOutline())){
+//					iSpaceList.add(iSpace);
+//				}
 			}
 			AdmResponse admResponse = AdmResponse.success(iSpaceList);
 			admResponse.setFloorId(request.getFloorId());