gaoyu 3 år sedan
förälder
incheckning
e1017236d6

+ 27 - 0
src/main/java/com/persagy/apm/dmpalarm/client/PhysicalWorldClient.java

@@ -0,0 +1,27 @@
+package com.persagy.apm.dmpalarm.client;
+
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.apm.dmpalarm.criteria.JsonCriteria;
+import com.persagy.apm.dmpalarm.web.PagedResponse;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * @description: 对接物理世界接口
+ * @author: lixing
+ * @company: Persagy Technology Co.,Ltd
+ * @since: 2020/10/20 5:04 下午
+ * @version: V1.0
+ **/
+@FeignClient(name = "dmp-rwd", fallbackFactory = PhysicalWorldFallBackFactory.class)
+public interface PhysicalWorldClient {
+
+    @PostMapping("rwd/instance/object/query")
+    public PagedResponse<ObjectNode> queryObj(
+            @RequestParam("projectId") String projectId,
+            @RequestParam("groupCode") String groupCode,
+            @RequestBody JsonCriteria criteria);
+}

+ 33 - 0
src/main/java/com/persagy/apm/dmpalarm/client/PhysicalWorldFallBackFactory.java

@@ -0,0 +1,33 @@
+package com.persagy.apm.dmpalarm.client;
+
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.apm.dmpalarm.criteria.JsonCriteria;
+import com.persagy.apm.dmpalarm.web.PagedResponse;
+import feign.hystrix.FallbackFactory;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+/**
+ * @description:
+ * @author: lixing
+ * @company: Persagy Technology Co.,Ltd
+ * @since: 2020/10/26 2:04 下午
+ * @version: V1.0
+ **/
+@Slf4j
+@Component
+public class PhysicalWorldFallBackFactory implements FallbackFactory<PhysicalWorldClient> {
+
+    @Override
+    public PhysicalWorldClient create(Throwable cause) {
+        return new PhysicalWorldClient() {
+            @Override
+            public PagedResponse<ObjectNode> queryObj(String projectId, String groupCode, JsonCriteria criteria) {
+                log.error("物理世界接口请求失败,url: {}, projectId: {}, requestBody: {}", "/instance/object/query", projectId, criteria);
+
+                return null;
+            }
+        };
+    }
+}

+ 11 - 0
src/main/java/com/persagy/apm/dmpalarm/service/IPhysicalWorldService.java

@@ -0,0 +1,11 @@
+package com.persagy.apm.dmpalarm.service;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+public interface IPhysicalWorldService {
+    public Set<String> queryObjectIdListByClassCode(String projectId, String groupCode, String classCode);
+
+    public Map<String, Set<String>> queryCodeIdListMapByClassCodes(String projectId, String groupCode, List<String> classCodes);
+}

+ 76 - 0
src/main/java/com/persagy/apm/dmpalarm/service/impl/PhysicalWorldServiceImpl.java

@@ -0,0 +1,76 @@
+package com.persagy.apm.dmpalarm.service.impl;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.collect.Sets;
+import com.persagy.apm.dmpalarm.client.PhysicalWorldClient;
+import com.persagy.apm.dmpalarm.criteria.JsonCriteria;
+import com.persagy.apm.dmpalarm.service.IPhysicalWorldService;
+import com.persagy.apm.dmpalarm.web.PagedResponse;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.validation.constraints.NotNull;
+import java.util.*;
+
+@Service
+@Slf4j
+public class PhysicalWorldServiceImpl implements IPhysicalWorldService {
+
+    @Resource
+    private PhysicalWorldClient physicalWorldClient;
+
+
+    public Set<String> queryObjectIdListByClassCode(
+            @NotNull String projectId,
+            @NotNull String groupCode,
+            @NotNull String classCode) {
+        JsonCriteria criteria=new JsonCriteria();
+        criteria.getCriteria().put("classCode", classCode);
+        criteria.getCriteria().put("valid", 1);
+        PagedResponse<ObjectNode> objectNodePagedResponse = physicalWorldClient.queryObj(projectId, groupCode, criteria);
+        log.info("物理世界查询对象返回值:", objectNodePagedResponse == null ? null : objectNodePagedResponse.toString());
+        List<ObjectNode> data = objectNodePagedResponse.getData();
+        Set<String> objIdList = new HashSet<>();
+        for (ObjectNode obj : data) {
+            String id = obj.get("id").asText();
+            objIdList.add(id);
+        }
+        return objIdList;
+    }
+
+    /**
+     * @description: 查询设备类型和设备id列表的映射关系
+     * @param: projectId
+     * @param: classCodes
+     * @return: java.util.Map
+     * @exception:
+     * @author: lixing
+     * @company: Persagy Technology Co.,Ltd
+     * @since: 2020/10/21 2:27 下午
+     * @version: V1.0
+     */
+    public Map<String, Set<String>> queryCodeIdListMapByClassCodes(
+            @NotNull String projectId,
+            @NotNull String groupCode,
+            @NotNull List<String> classCodes) {
+        JsonCriteria criteria=new JsonCriteria();
+        criteria.getCriteria().put("classCode", classCodes);
+        criteria.getCriteria().put("valid", 1);
+        PagedResponse<ObjectNode> objectNodePagedResponse = physicalWorldClient.queryObj(projectId, groupCode, criteria);
+        log.info("物理世界查询对象返回值:", objectNodePagedResponse == null ? null : objectNodePagedResponse.toString());
+        List<ObjectNode> data = objectNodePagedResponse.getData();
+        Map<String, Set<String>> resultMap = new HashMap<>();
+        for (ObjectNode obj : data) {
+            String id = obj.get("id").asText();
+            String classCode = obj.get("classCode").asText();
+            if (resultMap.get(classCode) == null) {
+                resultMap.put(classCode, Sets.newHashSet(id));
+            } else {
+                resultMap.get(classCode).add(id);
+            }
+        }
+        return resultMap;
+    }
+}