Explorar o código

查询已交付的信息点(基于datacenter-dev20210417)

linhuili %!s(int64=3) %!d(string=hai) anos
pai
achega
5d05c4bbec

+ 18 - 4
src/main/java/com/persagy/proxy/dictionary/controller/AdmDictController.java

@@ -9,13 +9,10 @@ import com.persagy.proxy.adm.request.AdmCreateRequest;
 import com.persagy.proxy.adm.request.AdmDictQueryCriteria;
 import com.persagy.proxy.adm.request.AdmQueryCriteria;
 import com.persagy.proxy.adm.request.AdmResponse;
+import com.persagy.proxy.dictionary.model.*;
 import com.persagy.proxy.dictionary.service.IAdmDictService;
 import com.persagy.proxy.adm.utils.AdmContextUtil;
 import com.persagy.proxy.common.entity.InstanceUrlParam;
-import com.persagy.proxy.dictionary.model.AdmDefFuncIdGather;
-import com.persagy.proxy.dictionary.model.AdmDict;
-import com.persagy.proxy.dictionary.model.AdmDictBatch;
-import com.persagy.proxy.dictionary.model.AdmObjectType;
 import com.persagy.proxy.object.model.AdmObjectInfo;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
@@ -206,4 +203,21 @@ public class AdmDictController {
         return AdmResponse.success(new ArrayList<>());
     }
 
+    /**
+     * 需采集信息同步到所有项目
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/delivered/infos")
+    @Deprecated
+    public AdmResponse queryDictDeliveredInfos(@RequestBody AdmDictDeliverieInfosRequest request) throws Exception {
+        if(StringUtils.isEmpty(request.getObjType())){
+            return AdmResponse.success("对象类型不可以为空");
+        }
+        if(StringUtils.isEmpty(request.getClassCode())){
+            return AdmResponse.success("类型不可以为空");
+        }
+        return service.queryDictDeliveredInfos(AdmContextUtil.toDmpContext(),request,AdmObjectInfo.class);
+    }
+
 }

+ 28 - 0
src/main/java/com/persagy/proxy/dictionary/model/AdmDictDeliverieInfosRequest.java

@@ -0,0 +1,28 @@
+package com.persagy.proxy.dictionary.model;
+
+import lombok.Data;
+
+/**
+ * Description
+ * 统计设备已交付设备信息点请求
+ * @author:linhuili
+ * @date:2021/11/15
+ */
+@Data
+public class AdmDictDeliverieInfosRequest {
+
+    /** 模式: all(全部),gather(只看采集) */
+    private String model;
+
+    /** 类型编码 */
+    private String classCode;
+
+    /** 全部: 不用传值,未明确建筑传建筑(isNull)  */
+    private String buildingId;
+
+    /** 全部: 不用传值,未明确楼层(isNull) */
+    private String floorId;
+
+    /** 对象类型:设备(equipment),系统(system),空间(space),竖井(shaft) */
+    private String objType;
+}

+ 9 - 0
src/main/java/com/persagy/proxy/dictionary/service/IAdmDictService.java

@@ -6,6 +6,8 @@ import com.persagy.proxy.adm.request.AdmDictQueryCriteria;
 import com.persagy.proxy.adm.request.AdmCreateRequest;
 import com.persagy.proxy.adm.request.AdmResponse;
 import com.persagy.proxy.common.entity.InstanceUrlParam;
+import com.persagy.proxy.dictionary.model.AdmDictDeliverieInfosRequest;
+import org.springframework.web.bind.annotation.RequestBody;
 
 import java.util.List;
 
@@ -67,4 +69,11 @@ public interface IAdmDictService<T> extends IAdmDictBaseService<T>{
      */
     AdmResponse query(InstanceUrlParam context, AdmDictQueryCriteria request,String fieldName, Class<T> clazz);
 
+    /**
+     * 查询已交付信息点
+     * @param request
+     * @return
+     */
+    AdmResponse queryDictDeliveredInfos(InstanceUrlParam context,AdmDictDeliverieInfosRequest request, Class<T> clazz);
+
 }

+ 269 - 1
src/main/java/com/persagy/proxy/dictionary/service/impl/AdmDictServiceImpl.java

@@ -14,18 +14,25 @@ import com.persagy.proxy.adm.request.AdmCreateRequest;
 import com.persagy.proxy.adm.request.AdmDictQueryCriteria;
 import com.persagy.proxy.adm.request.AdmQueryCriteria;
 import com.persagy.proxy.adm.request.AdmResponse;
+import com.persagy.proxy.dictionary.model.AdmDictDeliverieInfosRequest;
 import com.persagy.proxy.dictionary.service.IAdmDictService;
 import com.persagy.proxy.common.entity.InstanceUrlParam;
 import com.persagy.proxy.dictionary.model.AdmDefFuncIdGather;
 import com.persagy.proxy.dictionary.model.AdmDict;
 import com.persagy.proxy.dictionary.model.AdmObjectType;
-import com.persagy.proxy.object.model.AdmObjectInfo;
+import com.persagy.proxy.object.model.*;
+import com.persagy.proxy.object.service.IAdmEquipmentService;
+import com.persagy.proxy.object.service.IAdmShaftService;
+import com.persagy.proxy.object.service.IAdmSpaceService;
+import com.persagy.proxy.object.service.IAdmSystemService;
 import lombok.EqualsAndHashCode;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -40,6 +47,18 @@ import java.util.stream.Collectors;
 @EqualsAndHashCode(callSuper=true)
 public class AdmDictServiceImpl<T> extends AbstractAdmDictBaseServiceImpl<T> implements IAdmDictService<T> {
 
+    @Autowired
+    private IAdmEquipmentService equipmentService;
+
+    @Autowired
+    private IAdmSpaceService spaceService;
+
+    @Autowired
+    private IAdmSystemService systemService;
+
+    @Autowired
+    private IAdmShaftService shaftService;
+
     /**
      * 字典类型查询:所有设备类型、部件类型、系统类型、专业类型
      * 查询类型:输入设备类型:equipment,输入部件类型:component,输入系统类型:system,输入专业类型:major,业务空间类型 space ,资产 property,
@@ -429,6 +448,8 @@ public class AdmDictServiceImpl<T> extends AbstractAdmDictBaseServiceImpl<T> imp
         return admResponse;
     }
 
+
+
     /**
      * 转换排序字段
      * @param request
@@ -688,4 +709,251 @@ public class AdmDictServiceImpl<T> extends AbstractAdmDictBaseServiceImpl<T> imp
             }
         }
     }
+
+    /**
+     * 查询已交付信息点
+     * @param request
+     * @return
+     */
+    @Override
+    public AdmResponse queryDictDeliveredInfos(InstanceUrlParam context,AdmDictDeliverieInfosRequest request, Class<T> clazz) {
+        String classCode = request.getClassCode();
+        String objType = request.getObjType();
+        //根据类型查询信息点
+        List<AdmObjectInfo> admObjectInfos = queryObjectInfoByType(context, objType, classCode, clazz);
+        if(CollUtil.isEmpty(admObjectInfos)){
+            log.info("此类型下无信息点:{}{}"+objType +","+classCode);
+            return AdmResponse.success(new ArrayList<>());
+        }
+        Map<String, AdmObjectInfo> admObjectInfoMap = admObjectInfos.stream().collect(Collectors.toMap(AdmObjectInfo::getCode, Function.identity()));
+
+        //初始化待交付的信息点,id,name,localId,localName 无论是否有值默认展示,兼容历史逻辑
+        List<AdmObjectInfo> deliveredInfos = new ArrayList<>();
+        List<String> deliveredCodes = new ArrayList<>();
+        initDeliveredInfos( admObjectInfoMap, deliveredInfos, deliveredCodes);
+
+        if("equipment".equals(objType)){
+            //查询已交付的设备信息点
+            return getAdmEquipDeliveredInfo(context,request, admObjectInfoMap,deliveredInfos,deliveredCodes);
+        }
+        if("space".equals(objType)){
+            //查询已交付的空间信息点
+            return getAdmSpaceDeliveredInfo(context,request, admObjectInfoMap,deliveredInfos,deliveredCodes);
+        }
+        if("system".equals(objType)){
+            //查询已交付的系统信息点
+            return getAdmSystemDeliveredInfo(context,request, admObjectInfoMap,deliveredInfos,deliveredCodes);
+        }
+        if("shaft".equals(objType)){
+            //查询已交付的竖井信息点
+            return getAdmShaftDeliveredInfo(context,request, admObjectInfoMap,deliveredInfos,deliveredCodes);
+        }
+        return AdmResponse.success(deliveredInfos);
+    }
+
+
+    /**
+     * 组装通用对象查询条件
+     * @param request
+     * @return
+     */
+    private AdmQueryCriteria commbineObjectQueryCriteria(AdmDictDeliverieInfosRequest request){
+        //增加过滤条件
+        StringBuilder filters = new StringBuilder();
+        if(StringUtils.isNotEmpty(request.getBuildingId())){
+            filters.append("buildingId = '"+ request.getBuildingId() +"';");
+        }
+        if(StringUtils.isNotEmpty(request.getFloorId())){
+            filters.append("floorId = '"+ request.getFloorId() +"';");
+        }
+        if(StringUtils.isNotEmpty(request.getClassCode())){
+            filters.append("classCode = '"+ request.getClassCode() +"';");
+        }
+        if(StringUtils.isNotEmpty(request.getObjType())){
+            filters.append("objType = '"+ request.getObjType() +"';");
+        }
+        AdmQueryCriteria equipQueryCriteria = new AdmQueryCriteria();
+        equipQueryCriteria.setFilters(filters.toString());
+        return equipQueryCriteria;
+    }
+
+
+    /**
+     * 查询已交付的设备信息点
+     * @param context
+     * @param request
+     */
+    private AdmResponse getAdmEquipDeliveredInfo(InstanceUrlParam context,AdmDictDeliverieInfosRequest request, Map<String, AdmObjectInfo> admObjectInfoMap,List<AdmObjectInfo> deliveredInfos,List<String> deliveredCodes){
+        AdmQueryCriteria admQueryCriteria = commbineObjectQueryCriteria(request);
+        AdmResponse response = equipmentService.query(admQueryCriteria);
+        List<AdmEquipment> content = (List<AdmEquipment>)response.getContent();
+        if(CollUtil.isEmpty(content)){
+            return AdmResponse.success(new ArrayList<>());
+        }
+        //统计有值的信息点
+        for (AdmEquipment admEquipment : content) {
+            Map<String, Object> infos = admEquipment.getInfos();
+            if(CollUtil.isEmpty(infos)){
+                continue;
+            }
+            for (Map.Entry<String, Object> info : infos.entrySet()) {
+                Object value = info.getValue();
+                if(deliveredCodes.contains(info.getKey()) || value == null){
+                    continue;
+                }
+                AdmObjectInfo admObjectInfo = admObjectInfoMap.get(info.getKey());
+                if(admObjectInfo == null){
+                    continue;
+                }
+                deliveredCodes.add(info.getKey());
+                deliveredInfos.add(admObjectInfo);
+            }
+
+        }
+        return AdmResponse.success(deliveredInfos);
+    }
+
+
+    /**
+     * 查询已交付的空间信息点
+     * @param context
+     * @param request
+     */
+    private AdmResponse getAdmSpaceDeliveredInfo(InstanceUrlParam context,AdmDictDeliverieInfosRequest request, Map<String, AdmObjectInfo> admObjectInfoMap,List<AdmObjectInfo> deliveredInfos,List<String> deliveredCodes){
+        AdmQueryCriteria admQueryCriteria = commbineObjectQueryCriteria(request);
+        AdmResponse response = spaceService.query(admQueryCriteria);
+        List<AdmSpace> content = (List<AdmSpace>)response.getContent();
+        if(CollUtil.isEmpty(content)){
+            return AdmResponse.success(new ArrayList<>());
+        }
+        //统计有值的信息点
+        for (AdmSpace admSpace : content) {
+            Map<String, Object> infos = admSpace.getInfos();
+            if(CollUtil.isEmpty(infos)){
+                continue;
+            }
+            for (Map.Entry<String, Object> info : infos.entrySet()) {
+                Object value = info.getValue();
+                if(deliveredCodes.contains(info.getKey()) || value == null){
+                    continue;
+                }
+                AdmObjectInfo admObjectInfo = admObjectInfoMap.get(info.getKey());
+                if(admObjectInfo == null){
+                    continue;
+                }
+                deliveredCodes.add(info.getKey());
+                deliveredInfos.add(admObjectInfo);
+            }
+
+        }
+        return AdmResponse.success(deliveredInfos);
+    }
+
+
+    /**
+     * 查询已交付的竖井信息点
+     * @param context
+     * @param request
+     */
+    private AdmResponse getAdmShaftDeliveredInfo(InstanceUrlParam context,AdmDictDeliverieInfosRequest request, Map<String, AdmObjectInfo> admObjectInfoMap,List<AdmObjectInfo> deliveredInfos,List<String> deliveredCodes){
+        AdmQueryCriteria admQueryCriteria = commbineObjectQueryCriteria(request);
+        AdmResponse response = shaftService.doQuery(context,admQueryCriteria, AdmShaft.class);
+        List<AdmShaft> content = (List<AdmShaft>)response.getContent();
+        if(CollUtil.isEmpty(content)){
+            return AdmResponse.success(new ArrayList<>());
+        }
+        //统计有值的信息点
+        for (AdmShaft admShaft : content) {
+            Map<String, Object> infos = admShaft.getInfos();
+            if(CollUtil.isEmpty(infos)){
+                continue;
+            }
+            for (Map.Entry<String, Object> info : infos.entrySet()) {
+                Object value = info.getValue();
+                if(deliveredCodes.contains(info.getKey()) || value == null){
+                    continue;
+                }
+                AdmObjectInfo admObjectInfo = admObjectInfoMap.get(info.getKey());
+                if(admObjectInfo == null){
+                    continue;
+                }
+                deliveredCodes.add(info.getKey());
+                deliveredInfos.add(admObjectInfo);
+            }
+
+        }
+        return AdmResponse.success(deliveredInfos);
+    }
+
+    /**
+     * 查询已交付的系统信息点
+     * @param context
+     * @param request
+     */
+    private AdmResponse getAdmSystemDeliveredInfo(InstanceUrlParam context,AdmDictDeliverieInfosRequest request, Map<String, AdmObjectInfo> admObjectInfoMap,List<AdmObjectInfo> deliveredInfos,List<String> deliveredCodes){
+        AdmQueryCriteria admQueryCriteria = commbineObjectQueryCriteria(request);
+        AdmResponse response = systemService.query(admQueryCriteria);
+        List<AdmSystem> content = (List<AdmSystem>)response.getContent();
+        if(CollUtil.isEmpty(content)){
+            return AdmResponse.success(new ArrayList<>());
+        }
+        //统计有值的信息点
+        for (AdmSystem admSystem : content) {
+            Map<String, Object> infos = admSystem.getInfos();
+            if(CollUtil.isEmpty(infos)){
+                continue;
+            }
+            for (Map.Entry<String, Object> info : infos.entrySet()) {
+                Object value = info.getValue();
+                if(deliveredCodes.contains(info.getKey()) || value == null){
+                    continue;
+                }
+                AdmObjectInfo admObjectInfo = admObjectInfoMap.get(info.getKey());
+                if(admObjectInfo == null){
+                    continue;
+                }
+                deliveredCodes.add(info.getKey());
+                deliveredInfos.add(admObjectInfo);
+            }
+
+        }
+        return AdmResponse.success(deliveredInfos);
+    }
+
+    /**
+     * 初始化待交付的信息点
+     * @param admObjectInfoMap
+     * @param deliveredInfos
+     * @param deliveredCodes
+     */
+    private void initDeliveredInfos(Map<String, AdmObjectInfo> admObjectInfoMap,List<AdmObjectInfo> deliveredInfos,List<String> deliveredCodes){
+        deliveredCodes.add("id");
+        deliveredCodes.add("name");
+        deliveredCodes.add("localId");
+        deliveredCodes.add("localName");
+        //初始化待交付的信息点,id,name,localId,localName 默认展示
+        for (String code : deliveredCodes) {
+            AdmObjectInfo admObjectInfo = admObjectInfoMap.get(code);
+            if(admObjectInfo != null){
+                deliveredInfos.add(admObjectInfo);
+            }
+        }
+    }
+
+    /**
+     * 根据类型查询信息点
+     * @param context
+     * @param objType
+     * @param classCode
+     * @param clazz
+     * @return
+     */
+    private List<AdmObjectInfo> queryObjectInfoByType(InstanceUrlParam context,String objType,String classCode,Class<T> clazz){
+        AdmQueryCriteria queryCriteria = new AdmQueryCriteria();
+        String filters ="classCode = '"+classCode+"'";
+        queryCriteria.setFilters(filters);
+        AdmResponse admResponse = doQueryObjectInfo(context, queryCriteria, AdmDictConstant.CLASS_CODE, clazz);
+        return (List<AdmObjectInfo>) admResponse.getContent();
+    }
+
 }