From 3c7399c25c0f35c8aa7cb6af1935e31d1a3f0102 Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期二, 02 六月 2026 17:43:50 +0800
Subject: [PATCH] 新增智能电表、空调管理

---
 server/visits/dmvisit_service/src/main/java/com/doumee/core/device/ElectronicToolUtil.java |  162 +++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 135 insertions(+), 27 deletions(-)

diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/device/ElectronicToolUtil.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/device/ElectronicToolUtil.java
index 9e14c73..4b86b6b 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/core/device/ElectronicToolUtil.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/device/ElectronicToolUtil.java
@@ -155,8 +155,8 @@
     }
     public static void main(String[] args) {
         QueryDataRequest param = new QueryDataRequest();
-        param.setStart_time("2026-05-19 10:00::00");
-        param.setEnd_time("2026-05-19 12:24:25");
+        param.setStart_time("2026-05-25 10:00::00");
+        param.setEnd_time("2026-05-25 14:24:25");
         param.setLimit(1);
         param.setFunctionids("253");
         param.setOffset(0);
@@ -178,10 +178,7 @@
         try {
             String request_content = JSON.toJSONString(param);
             String r = requestAsync(url, request_content);
-            TypeReference typeReference =
-                    new TypeReference< ElectronicBaseResponse<List<MeterDealResponse>> >(){};
-            ElectronicBaseResponse  result = JSONObject.parseObject(r, typeReference.getType());
-            return  result;
+            return parseAsyncMeterResponse(r);
         }catch (Exception e){
             log.error("鐢佃〃==============寮�鎴�",e);
         }
@@ -199,17 +196,14 @@
         try {
             String request_content = JSON.toJSONString(param);
             String r = requestAsync(url, request_content);
-            TypeReference typeReference =
-                    new TypeReference< ElectronicBaseResponse<List<MeterDealResponse>> >(){};
-            ElectronicBaseResponse  result = JSONObject.parseObject(r, typeReference.getType());
-            return  result;
+            return parseAsyncMeterResponse(r);
         }catch (Exception e){
             log.error("鐢佃〃==============寮�鎴�",e);
         }
         return null;
     }
     /**
-     * 鐢佃〃寮�鎴穇鐢佃〃鍏呭��
+     * 鐢佃〃_鐢佃〃鍏呭��
      */
     public static ElectronicBaseResponse   recharger(List<OpenAccountRequest> param) {
         if(param ==null || param.size()==0){
@@ -220,12 +214,9 @@
         try {
             String request_content = JSON.toJSONString(param);
             String r = requestAsync(url, request_content);
-            TypeReference typeReference =
-                    new TypeReference< ElectronicBaseResponse<List<MeterDealResponse>> >(){};
-            ElectronicBaseResponse  result = JSONObject.parseObject(r, typeReference.getType());
-            return  result;
+            return parseAsyncMeterResponse(r);
         }catch (Exception e){
-            log.error("鐢佃〃==============寮�鎴�",e);
+            log.error("鐢佃〃==============鍏呭��",e);
         }
         return null;
     }
@@ -236,22 +227,82 @@
         if(param ==null || param.size()==0){
             return null;
         }
-        String url = ElectronicConstant.api2_url+"/Api_v2/ele_security/ele_control";
+        String url = ElectronicConstant.api2_url+"/Api_v2/ele_control";
 
         try {
             String request_content = JSON.toJSONString(param);
             String r = requestAsync(url, request_content);
-            TypeReference typeReference =
-                    new TypeReference< ElectronicBaseResponse<List<MeterDealResponse>> >(){};
-            ElectronicBaseResponse  result = JSONObject.parseObject(r, typeReference.getType());
-            return  result;
+            return parseAsyncMeterResponse(r);
         }catch (Exception e){
             log.error("鐢佃〃==============鎷夊悎闂�",e);
         }
         return null;
     }
     /**
-     * 鐢佃〃_鎷夊悎闂�
+     * 鏌ヨ寮傛鎿嶄綔浠诲姟鐘舵�侊紙/Api_v2/request/status锛夈��
+     * request_content 涓� JSON 鏁扮粍锛屽彲鍚堝苟浼犲叆澶氫釜 opr_id 涓�娆℃煡璇€��
+     * 璋冪敤鎴愬姛鍚庡缓璁� 30s 棣栨鏌ヨ锛屽悗缁棿闅旈�掑锛�1h銆�2h銆�4h鈥︼級锛岀姝㈤绻佽皟鐢ㄣ��
+     * 鍝嶅簲 SUCCESS銆丗AIL銆乀IMEOUT銆丆ANCELED銆丷ESPONSE_FAIL 鍚庢棤闇�鍐嶆煡璇€��
+     */
+    public static ElectronicBaseResponse requestStatus(List<RequestStatusRequest> param) {
+        if (param == null || param.isEmpty()) {
+            return null;
+        }
+        String url = ElectronicConstant.api2_url + "/Api_v2/request/status";
+        try {
+            String request_content = JSON.toJSONString(param);
+            String r = request(url, request_content);
+            return parseAsyncMeterResponse(r);
+        } catch (Exception e) {
+            log.error("鐢佃〃==============鏌ヨ寮傛浠诲姟鐘舵��", e);
+        }
+        return null;
+    }
+
+    /**
+     * 鎸� opr_id 鍒楄〃鍚堝苟鏌ヨ寮傛浠诲姟鐘舵�併��
+     */
+    public static ElectronicBaseResponse requestStatusByOprIds(List<String> oprIds) {
+        if (oprIds == null || oprIds.isEmpty()) {
+            return null;
+        }
+        List<RequestStatusRequest> param = new ArrayList<>();
+        for (String oprId : oprIds) {
+            if (StringUtils.isNotBlank(oprId)) {
+                RequestStatusRequest req = new RequestStatusRequest();
+                req.setOpr_id(oprId.trim());
+                param.add(req);
+            }
+        }
+        return param.isEmpty() ? null : requestStatus(param);
+    }
+
+    /**
+     * 鏌ヨ鍗曚釜寮傛鎿嶄綔浠诲姟鐘舵�併��
+     */
+    public static ElectronicBaseResponse requestStatus(String oprId) {
+        if (StringUtils.isBlank(oprId)) {
+            return null;
+        }
+        RequestStatusRequest req = new RequestStatusRequest();
+        req.setOpr_id(oprId.trim());
+        return requestStatus(Collections.singletonList(req));
+    }
+
+    /**
+     * 寮傛浠诲姟鏄惁宸插埌杈剧粓鎬侊紝骞冲彴鍚庣画涓嶅啀澶勭悊锛屾棤闇�鍐嶈疆璇€��
+     */
+    public static boolean isAsyncStatusFinal(String status) {
+        if (StringUtils.isBlank(status)) {
+            return false;
+        }
+        String s = status.trim().toUpperCase(Locale.ROOT);
+        return "SUCCESS".equals(s) || "FAIL".equals(s) || "TIMEOUT".equals(s)
+                || "CANCELED".equals(s) || "RESPONSE_FAIL".equals(s);
+    }
+
+    /**
+     * 鐢佃〃_绔嬪嵆鎶勮〃
      */
     public static ElectronicBaseResponse   eleRead(List<EleReadRequest> param) {
         if(param ==null || param.size()==0){
@@ -262,12 +313,9 @@
         try {
             String request_content = JSON.toJSONString(param);
             String r = requestAsync(url, request_content);
-            TypeReference typeReference =
-                    new TypeReference< ElectronicBaseResponse<List<MeterDealResponse>> >(){};
-            ElectronicBaseResponse  result = JSONObject.parseObject(r, typeReference.getType());
-            return  result;
+            return parseAsyncMeterResponse(r);
         }catch (Exception e){
-            log.error("鐢佃〃==============鎷夊悎闂�",e);
+            log.error("鐢佃〃==============绔嬪嵆鎶勮〃",e);
         }
         return null;
     }
@@ -363,6 +411,14 @@
         }
         return null;
     }
+
+    /**
+     * 鏌ヨ鍘嗗彶鏁版嵁鎺ュ彛
+     */
+    public static ElectronicDataResponse queryDataRequest() {
+        return queryDataRequest(null);
+    }
+
     /**
      * 鏌ヨ鍘嗗彶鏁版嵁鎺ュ彛
      */
@@ -474,6 +530,58 @@
     }
 
     // 鎵撳嵃鍝嶅簲鍐呭
+    /**
+     * 瑙f瀽 Api_v2 寮傛鐢佃〃鎿嶄綔鍝嶅簲銆�
+     * 骞冲彴 response_content 鍙兘鏄� JSON 鏁扮粍锛屼篃鍙兘鏄瓧绗︿覆褰㈠紡鐨� JSON 鏁扮粍銆�
+     */
+    public static ElectronicBaseResponse parseAsyncMeterResponse(String r) {
+        if (StringUtils.isBlank(r)) {
+            return null;
+        }
+        try {
+            JSONObject jsonObject = JSON.parseObject(r);
+            if (jsonObject == null) {
+                return null;
+            }
+            ElectronicBaseResponse<List<MeterDealResponse>> result = new ElectronicBaseResponse<>();
+            result.setStatus(jsonObject.getString("status"));
+            result.setTimestamp(jsonObject.getString("timestamp"));
+            result.setError_msg(jsonObject.getString("error_msg"));
+            result.setSign(jsonObject.getString("sign"));
+            result.setResponse_content(parseResponseContentList(jsonObject.get("response_content"), MeterDealResponse.class));
+            return result;
+        } catch (Exception e) {
+            log.error("parse async meter response failed, raw={}", r, e);
+            return null;
+        }
+    }
+
+    private static <T> List<T> parseResponseContentList(Object content, Class<T> clazz) {
+        if (content == null) {
+            return null;
+        }
+        if (content instanceof JSONArray) {
+            return ((JSONArray) content).toJavaList(clazz);
+        }
+        if (content instanceof JSONObject) {
+            T one = ((JSONObject) content).toJavaObject(clazz);
+            return one != null ? Collections.singletonList(one) : null;
+        }
+        String text = String.valueOf(content);
+        if (StringUtils.isBlank(text) || "null".equalsIgnoreCase(text.trim())) {
+            return null;
+        }
+        text = text.trim();
+        if (text.startsWith("[")) {
+            return JSON.parseArray(text, clazz);
+        }
+        if (text.startsWith("{")) {
+            T one = JSON.parseObject(text, clazz);
+            return one != null ? Collections.singletonList(one) : null;
+        }
+        return null;
+    }
+
     public static void printResponse(String response) {
         JSONObject jsonObject = JSON.parseObject(response);
 

--
Gitblit v1.9.3