gongchunyi
9 小时以前 0adbf58fd15052d8a044cf66eaa8afaa8591ba74
Merge remote-tracking branch 'origin/dev_New' into dev_New
已添加2个文件
已修改1个文件
227 ■■■■■ 文件已修改
src/main/java/com/ruoyi/common/utils/http/HttpUtils.java 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/http/service/RealTimeEnergyConsumptionService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/http/service/impl/RealTimeEnergyConsumptionServiceImpl.java 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/common/utils/http/HttpUtils.java
@@ -290,4 +290,93 @@
            return true;
        }
    }
    /**
     * å‘指定URL发送JSON格式的POST请求(推荐通用方法,默认UTF-8编码)
     * @param url å‘送请求的URL
     * @param jsonParam JSON格式的请求参数(直接传入JSON字符串)
     * @return è¿œç¨‹èµ„源的响应结果
     */
    public static String sendPostJson(String url, String jsonParam) {
        // é‡è½½è°ƒç”¨ï¼Œé»˜è®¤ä½¿ç”¨UTF-8编码,Content-Type固定为application/json
        return sendPostJson(url, jsonParam, StandardCharsets.UTF_8.name(),null);
    }
    /**
     * å‘指定URL发送JSON格式的POST请求(自定义编码,灵活适配特殊场景)
     * @param url å‘送请求的URL
     * @param jsonParam JSON格式的请求参数(直接传入JSON字符串)
     * @param headerValue è¯·æ±‚头的值
     * @return è¿œç¨‹èµ„源的响应结果
     */
    public static String sendPostJson(String url, String jsonParam, String headerValue) {
        // é‡è½½è°ƒç”¨ï¼Œé»˜è®¤ä½¿ç”¨UTF-8编码,Content-Type固定为application/json
        return sendPostJson(url, jsonParam, StandardCharsets.UTF_8.name(),headerValue);
    }
    /**
     * å‘指定URL发送JSON格式的POST请求(自定义编码,灵活适配特殊场景)
     * @param url å‘送请求的URL
     * @param jsonParam JSON格式的请求参数(直接传入JSON字符串)
     * @param charset ç¼–码类型(如UTF-8、GBK等,建议使用StandardCharsets常量)
     * @return è¿œç¨‹èµ„源的响应结果
     */
    public static String sendPostJson(String url, String jsonParam, String charset,String headerValue) {
        PrintWriter out = null;
        BufferedReader in = null;
        StringBuilder result = new StringBuilder();
        try {
            log.info("sendPostJson - {}", url);
            URL realUrl = new URL(url);
            URLConnection conn = realUrl.openConnection();
            // 1. è®¾ç½®è¯·æ±‚头:固定Content-Type为application/json,适配JSON传参规范
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)");
            conn.setRequestProperty("Content-Type", MediaType.APPLICATION_JSON_VALUE); // æ ¸å¿ƒï¼šJSON专属Content-Type
            conn.setRequestProperty("Accept-Charset", charset);
            // 1.1 è®¾ç½®è¯·æ±‚头:可选,根据实际需要设置
            if(StringUtils.isNotEmpty(headerValue)){
                conn.setRequestProperty("Authorization", headerValue);
            }
            // 2. å¼€å¯è¾“入输出流(POST请求必须)
            conn.setDoOutput(true);
            conn.setDoInput(true);
            // 3. å†™å…¥JSON参数(使用指定编码,避免中文乱码)
            out = new PrintWriter(conn.getOutputStream(), true);
            out.print(jsonParam);
            out.flush();
            // 4. è¯»å–响应结果(与请求编码一致,保证解析正确)
            in = new BufferedReader(new InputStreamReader(conn.getInputStream(), charset));
            String line;
            while ((line = in.readLine()) != null) {
                result.append(line);
            }
            log.info("recv - {}", result);
        } catch (ConnectException e) {
            log.error("调用HttpUtils.sendPostJson ConnectException, url=" + url + ",jsonParam=" + jsonParam, e);
        } catch (SocketTimeoutException e) {
            log.error("调用HttpUtils.sendPostJson SocketTimeoutException, url=" + url + ",jsonParam=" + jsonParam, e);
        } catch (IOException e) {
            log.error("调用HttpUtils.sendPostJson IOException, url=" + url + ",jsonParam=" + jsonParam, e);
        } catch (Exception e) {
            log.error("调用HttpUtils.sendPostJson Exception, url=" + url + ",jsonParam=" + jsonParam, e);
        } finally {
            // 5. å…³é—­æµèµ„源(避免内存泄漏,与原代码finally逻辑保持一致)
            try {
                if (out != null) {
                    out.close();
                }
                if (in != null) {
                    in.close();
                }
            } catch (IOException ex) {
                log.error("调用流关闭异常 sendPostJson, url=" + url + ",jsonParam=" + jsonParam, ex);
            }
        }
        return result.toString();
    }
}
src/main/java/com/ruoyi/http/service/RealTimeEnergyConsumptionService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
package com.ruoyi.http.service;
/**
 * @author :yys
 * @date : 2026/1/27 16:02
 */
public interface RealTimeEnergyConsumptionService {
}
src/main/java/com/ruoyi/http/service/impl/RealTimeEnergyConsumptionServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,130 @@
package com.ruoyi.http.service.impl;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.common.utils.http.HttpUtils;
import com.ruoyi.http.service.RealTimeEnergyConsumptionService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * @author :yys
 * @date : 2026/1/27 16:02
 */
@Service
@Slf4j
public class RealTimeEnergyConsumptionServiceImpl implements RealTimeEnergyConsumptionService {
    private static final String URL = "https://new.e-elitech.cn/api/data-api";
    private static final String TOKEN_URL = "/elitechAccess/getToken";
    private static final String REAL_TIME_URL = "/elitechAccess/v2/getRealTimeData"; //获取设备实时数据
    private static final String KET_ID = "75804708";
    private static final String KEY_SECRET = "xTUGToozKpYgUPqTsZzB";
    private static final String USER_NAME = "用户30773662";
    private static final String PASS_WORD = "y17775163675";
    private static final String DEVICE_GUID = "90444196515214284663";
    /**
     * æ ¹æ®paramCode提取探头参数
     * @param paramList è®¾å¤‡å‚数数组
     * @param targetCode ç›®æ ‡æŽ¢å¤´ç¼–码
     * @return æŽ¢å¤´å‚数对象(包含name/value/unit)
     */
    private static JSONObject getProbeParam(JSONArray paramList, String targetCode) {
        for (int i = 0; i < paramList.size(); i++) {
            JSONObject paramObj = paramList.getJSONObject(i);
            if (targetCode.equals(paramObj.getString("paramCode"))) {
                return paramObj;
            }
        }
        return new JSONObject(); // æœªåŒ¹é…åˆ°è¿”回空对象,避免空指针
    }
    /**
     * å®žæ—¶èŽ·å–æ¸©æ¹¿åº¦ï¼ŒäºŒæ°§åŒ–ç¢³æ•°æ®
     */
    public static void main(String[] args) {
        String realTimeData = getRealTimeData(getToken());
        Map<String, Object> map = JSON.parseObject(realTimeData, Map.class);
        if(map.get("code").equals(0)){
            // 1. è§£æžå¤–层data为JSON数组(接口返回的设备列表)
            JSONArray deviceList = JSON.parseArray(map.get("data").toString());
            // 2. éåŽ†è®¾å¤‡åˆ—è¡¨ï¼ˆæ­¤å¤„ä»…å–ç¬¬ä¸€ä¸ªè®¾å¤‡ï¼Œè‹¥æœ‰å¤šä¸ªè®¾å¤‡å¯å¾ªçŽ¯å¤„ç†ï¼‰
            if (!deviceList.isEmpty()) {
                JSONObject deviceObj = deviceList.getJSONObject(0);
                // 3. è§£æžè®¾å¤‡å†…的参数数组(所有paramCode对应的参数)
                JSONArray paramList = deviceObj.getJSONArray("data");
                // 4. å®šä¹‰ç›®æ ‡æŽ¢å¤´çš„paramCode,按需扩展
                String[] targetCodes = {"0100", "0110", "0120", "0130"};
                for (String code : targetCodes) {
                    // 5. éåŽ†å‚æ•°æ•°ç»„ï¼ŒåŒ¹é…ç›®æ ‡paramCode
                    for (int i = 0; i < paramList.size(); i++) {
                        JSONObject paramObj = paramList.getJSONObject(i);
                        String currentCode = paramObj.getString("paramCode");
                        if (code.equals(currentCode)) {
                            // 6. æå–核心字段(值、单位、探头名称)
                            String paramName = paramObj.getString("paramName"); // æŽ¢å¤´1/探头2...
                            String value = paramObj.getString("value");       // æ•°å€¼ï¼ˆ345.80/24.90...)
                            String unitCode = paramObj.getString("unitCode"); // å•位(Lux/℃/%RH/ppm)
                            // 7. ä¸šåŠ¡å¤„ç†ï¼šæ‰“å°/赋值/存储等(按需修改)
                            System.out.println(paramName + ":" + value + " " + unitCode);
                            // åŒ¹é…åˆ°åŽç›´æŽ¥è·³å‡ºå†…层循环,提升效率
                            break;
                        }
                    }
                }
            }
        }
        System.out.println();
    }
    public static String getToken(){
        Map<String, String> param = new HashMap<>();
        param.put("keyId", KET_ID);
        param.put("keySecret", KEY_SECRET);
        param.put("userName", USER_NAME);
        param.put("password", PASS_WORD);
        log.info("请求参数:{}", JSON.toJSONString( param));
        String result = HttpUtils.sendPostJson(URL + TOKEN_URL, JSON.toJSONString(param));
        log.info("返回结果:{}", result);
        Map<String, Object> map = JSON.parseObject(result, Map.class);
        if (map.get("code").equals(0)) {
            Object token = map.get("data");
            log.info("token:{}", token);
            return token.toString();
        }
        return result;
    }
    public static String getRealTimeData(String  token){
        Map<String, Object> param = new HashMap<>();
        param.put("keyId", KET_ID);
        param.put("keySecret", KEY_SECRET);
        param.put("deviceGuids", Collections.singletonList(DEVICE_GUID));
        log.info("请求参数:{}", JSON.toJSONString( param));
        String result = HttpUtils.sendPostJson(URL + REAL_TIME_URL, JSON.toJSONString(param),token);
        log.info("返回结果:{}", result);
        return result;
    }
}