Explorar el Código

'优化调试部署在燕山服务器上的能耗接口采集程序,修改请求方式(post改为get),并放开燕山服务器对应端口'

james hace 1 año
padre
commit
d6b6901358

+ 141 - 0
agbox-energy/agbox-energy-biz/src/main/java/com/usky/demo/controller/web/DataEnergyController.java

@@ -0,0 +1,141 @@
+package com.usky.demo.controller.web;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.usky.demo.Globals;
+import com.usky.demo.service.vo.EnergyRequestVO;
+import com.usky.demo.service.vo.MqttDataInfoVO;
+import com.usky.demo.util.CodeUtil;
+import com.usky.demo.util.HttpClientHelper;
+import com.usky.demo.util.JsonUtil;
+import com.usky.demo.util.StringUtil;
+import org.springframework.web.bind.annotation.*;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/dataEnergy")
+public class DataEnergyController {
+
+    static String token = "c19ac221e0504552b6c2ebed4b2b069b";
+
+
+
+    // 查询用能电表统计数据信息
+    @GetMapping("/queryEnergyUnitUsed")
+    public String QueryEnergyElectricUsed(@RequestParam(value = "energyUnitId") String energyUnitId,
+                                          @RequestParam(value = "energyUnitType") String energyUnitType,
+                                          @RequestParam(value = "energyType") String energyType,
+                                          @RequestParam(value = "circleType") String circleType,
+                                          @RequestParam(value = "dataTime") String dataTime) {
+        String result = "";
+
+        getToken();
+
+        HashMap<String, String> map = new HashMap<>();
+        map.put("energyUnitId", energyUnitId);//用能单位编码
+        map.put("energyUnitType",energyUnitType);//用能单位类型(11:企业,12:单位)
+        map.put("energyType",energyType);//能源类型(1:电,2:水)
+        map.put("circleType",circleType);//统计周期(1:小时,2:日,3:月)
+        map.put("dataTime",dataTime);//查询时间(格式 yyyyMMddHH/yyyyMMdd/yyyyMM)
+        try {
+            JSONObject electricObject = queryData("queryEnergyUnitUsed", map, token);
+            String electricData = electricObject.getString("data");
+            JSONArray array = JSON.parseArray(electricData);
+            JSONObject dataObj = JSONObject.parseObject(array.get(0).toString());
+            result = dataObj.toString();
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return result;
+    }
+
+    // 查询用能电表统计数据信息
+    @GetMapping("/helloWorld")
+    public String helloWorld() {
+        return "hello world";
+    }
+
+    /* 除获取token外的所有请求都需要带有token数据,demo中简单起见未做token的保存处理,实际使用中请自行实现 */
+    public static void getToken() {
+        HashMap<String, String> map = new HashMap<>();
+        map.put("operatorSecret", Globals.OPERATOR_SECRET);
+        try {
+            JSONObject jsonObject = queryData("queryToken", map, null);
+            String data = jsonObject.getString("data");
+            JSONObject dataObject = JSONObject.parseObject(data);
+            token = dataObject.getString("accessToken");
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 请求数据
+     *
+     * @param path    请求接口
+     * @param dataMap 所需的数据Map
+     */
+    public static JSONObject queryData(String path, Map<String, String> dataMap, String token) throws Exception {
+        // 加密data部分
+        String encode = CodeUtil.dataEncode(JSON.toJSONString(dataMap), Globals.DATA_SECRET, Globals.DATA_SECRET_IV);
+        /*组装必要参数 start */
+        String seq = "0001";
+        String timeStamp = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
+        Map<String, String> map = new HashMap<>();
+        map.put("operatorId", Globals.OPERATOR_ID);
+        map.put("data", encode);
+        map.put("timeStamp", timeStamp);
+        map.put("seq", seq);
+        /*组装必要参数 end */
+        if (encode == null) return null;
+
+        /*生成签名 start*/
+        // 为防止+在收发过程中被变成空格,将加密后的密文中的所有空格替换一下
+        // 需要签名的参数: operatorId + 加密后的data + 时间戳 + 自增序列
+        String signSrc = Globals.OPERATOR_ID + encode.replaceAll(" ", "+") + timeStamp + seq;
+        String sig = CodeUtil.getSign(signSrc, Globals.SIGN_KEY);
+        //将签名放入参数Map
+        map.put("sig", sig);
+        /*生成签名 start*/
+        /*执行请求,使用可以附加token的doPost方*/
+        HttpClientHelper instance = HttpClientHelper.getInstance();
+        //token也可以放进参数列表
+        String result = instance.doPost(Globals.URL_PREFIX + (path.startsWith("/") ? path : ("/" + path)), map, token);
+        if (StringUtil.isEmpty(result)) return null;
+
+        /*解析数据 start*/
+        JSONObject jsonObject = JSON.parseObject(result);
+        // 失败
+        if (!"0".equals(jsonObject.getString("ret"))) {
+            printJsonMessage("send Error:", jsonObject);
+            return null;
+        }
+        // 验签,注意生成签名的参数顺序应和发送时一样
+        // 为防止'+'在收发过程中被变成' ',将加密后的密文中的所有空格替换一下
+        String resultSigStr = jsonObject.getString("operatorId") + jsonObject.getString("data").replaceAll(" ", "+")
+                + jsonObject.getString("msg") + jsonObject.getString("ret");
+        String resultSig = CodeUtil.getSign(resultSigStr, Globals.SIGN_KEY);
+        if (StringUtil.isNotEmpty(jsonObject.getString("sig")) && jsonObject.getString("sig").equals(resultSig)) {
+            // 解密数据,需要数据秘钥和秘钥初始化向量
+            String data = CodeUtil.dataDecode(jsonObject.getString("data"), Globals.DATA_SECRET, Globals.DATA_SECRET_IV);
+            jsonObject.put("data", data);
+        }
+        /*解析数据 end*/
+        // 打印 or 其他操作
+        printJsonMessage("Send Message:", map);
+        printJsonMessage("Receive Message:", result);
+        printJsonMessage("Decode Message:", jsonObject);
+        return jsonObject;
+    }
+
+    public static void printJsonMessage(String prefix, Object obj) {
+        System.out.println(prefix + JsonUtil.JsonFormart(JSON.toJSONString(obj)));
+    }
+}

+ 1 - 2
agbox-energy/agbox-energy-biz/src/main/java/com/usky/demo/controller/web/TaskController.java

@@ -13,8 +13,7 @@ public class TaskController {
     @Autowired
     @Autowired
     private QueryEnergyUnitUsed queryEnergyUnitUsed;
     private QueryEnergyUnitUsed queryEnergyUnitUsed;
 
 
-    //@Scheduled(cron = "0 10 */1 * * ?") //每小时的第10分钟执行一次
-    @Scheduled(cron = "0 */3 * * * ?")
+    @Scheduled(cron = "0 10 */1 * * ?") //每小时的第10分钟执行一次
     public void task(){
     public void task(){
         System.out.println(Thread.currentThread().getName() + "定时任务执行中");
         System.out.println(Thread.currentThread().getName() + "定时任务执行中");
         queryEnergyUnitUsed.QueryEnergyElectricUsed();
         queryEnergyUnitUsed.QueryEnergyElectricUsed();

+ 11 - 11
agbox-energy/agbox-energy-biz/src/main/java/com/usky/demo/service/job/QueryEnergyUnitUsed.java

@@ -49,14 +49,12 @@ public class QueryEnergyUnitUsed {
         }catch (ParseException e){
         }catch (ParseException e){
             e.printStackTrace();
             e.printStackTrace();
         }
         }
-        return date.getTime();
+        return date.getTime()/1000;
     }
     }
 
 
     // 查询用能电表统计数据信息
     // 查询用能电表统计数据信息
     public void QueryEnergyElectricUsed() {
     public void QueryEnergyElectricUsed() {
-        printJsonMessage("enter token","QueryEnergyElectricUsed");
         getToken();
         getToken();
-        printJsonMessage("end token ","QueryEnergyElectricUsed");
 
 
 //        String ownerId = "";
 //        String ownerId = "";
 //
 //
@@ -77,14 +75,15 @@ public class QueryEnergyUnitUsed {
 
 
         HashMap<String, String> map = new HashMap<>();
         HashMap<String, String> map = new HashMap<>();
         map.put("energyUnitId", "1");//用能单位编码
         map.put("energyUnitId", "1");//用能单位编码
-        map.put("energyUnitType","12");//用能单位类型(11:企业,12:单位)
+        map.put("energyUnitType","11");//用能单位类型(11:企业,12:单位)
         map.put("energyType","1");//能源类型(1:电,2:水)
         map.put("energyType","1");//能源类型(1:电,2:水)
         map.put("circleType","1");//统计周期(1:小时,2:日,3:月)
         map.put("circleType","1");//统计周期(1:小时,2:日,3:月)
         map.put("dataTime",time);//查询时间(格式 yyyyMMddHH/yyyyMMdd/yyyyMM)
         map.put("dataTime",time);//查询时间(格式 yyyyMMddHH/yyyyMMdd/yyyyMM)
         try {
         try {
             JSONObject electricObject = queryData("queryEnergyUnitUsed", map, token);
             JSONObject electricObject = queryData("queryEnergyUnitUsed", map, token);
             String electricData = electricObject.getString("data");
             String electricData = electricObject.getString("data");
-            JSONObject dataObj = JSONObject.parseObject(electricData);
+            JSONArray array = JSON.parseArray(electricData);
+            JSONObject dataObj = JSONObject.parseObject(array.get(0).toString());
             String dataTime = dataObj.getString("dataTime");
             String dataTime = dataObj.getString("dataTime");
             String energyValue = dataObj.getString("used");
             String energyValue = dataObj.getString("used");
 
 
@@ -95,7 +94,7 @@ public class QueryEnergyUnitUsed {
             mqttDataInfoVO.setDevice_id("ysdb0001");
             mqttDataInfoVO.setDevice_id("ysdb0001");
             mqttDataInfoVO.setProduct_id("512_YSNH");
             mqttDataInfoVO.setProduct_id("512_YSNH");
             mqttDataInfoVO.setTimestamp(getStringToDate(dataTime));
             mqttDataInfoVO.setTimestamp(getStringToDate(dataTime));
-            mqttDataInfoVO.setDevice_type("512");
+            mqttDataInfoVO.setDevice_type("512-nh");
 
 
             if(mqttDataInfoVO != null){
             if(mqttDataInfoVO != null){
                 mqttGateway.sendToMqtt("data-collector", JSONArray.toJSON(mqttDataInfoVO).toString());
                 mqttGateway.sendToMqtt("data-collector", JSONArray.toJSON(mqttDataInfoVO).toString());
@@ -128,14 +127,15 @@ public class QueryEnergyUnitUsed {
 
 
         HashMap<String, String> map = new HashMap<>();
         HashMap<String, String> map = new HashMap<>();
         map.put("energyUnitId", "1");//用能单位编码
         map.put("energyUnitId", "1");//用能单位编码
-        map.put("energyUnitType","12");//用能单位类型(11:企业,12:单位)
+        map.put("energyUnitType","11");//用能单位类型(11:企业,12:单位)
         map.put("energyType","2");//能源类型(1:电,2:水)
         map.put("energyType","2");//能源类型(1:电,2:水)
         map.put("circleType","1");//统计周期(1:小时,2:日,3:月)
         map.put("circleType","1");//统计周期(1:小时,2:日,3:月)
         map.put("dataTime",time);//查询时间(格式 yyyyMMddHH/yyyyMMdd/yyyyMM)
         map.put("dataTime",time);//查询时间(格式 yyyyMMddHH/yyyyMMdd/yyyyMM)
         try {
         try {
-            JSONObject electricObject = queryData("queryEnergyUnitUsed", map, token);
-            String electricData = electricObject.getString("data");
-            JSONObject dataObj = JSONObject.parseObject(electricData);
+            JSONObject waterObject = queryData("queryEnergyUnitUsed", map, token);
+            String waterData = waterObject.getString("data");
+            JSONArray array = JSON.parseArray(waterData);
+            JSONObject dataObj = JSONObject.parseObject(array.get(0).toString());
             String dataTime = dataObj.getString("dataTime");
             String dataTime = dataObj.getString("dataTime");
             String energyValue = dataObj.getString("used");
             String energyValue = dataObj.getString("used");
 
 
@@ -146,7 +146,7 @@ public class QueryEnergyUnitUsed {
             mqttDataInfoVO.setDevice_id("yssb0001");
             mqttDataInfoVO.setDevice_id("yssb0001");
             mqttDataInfoVO.setProduct_id("512_YSNH");
             mqttDataInfoVO.setProduct_id("512_YSNH");
             mqttDataInfoVO.setTimestamp(getStringToDate(dataTime));
             mqttDataInfoVO.setTimestamp(getStringToDate(dataTime));
-            mqttDataInfoVO.setDevice_type("512");
+            mqttDataInfoVO.setDevice_type("512-nh");
 
 
             if(mqttDataInfoVO != null){
             if(mqttDataInfoVO != null){
                 mqttGateway.sendToMqtt("data-collector", JSONArray.toJSON(mqttDataInfoVO).toString());
                 mqttGateway.sendToMqtt("data-collector", JSONArray.toJSON(mqttDataInfoVO).toString());

+ 34 - 0
agbox-energy/agbox-energy-biz/src/main/java/com/usky/demo/service/vo/EnergyRequestVO.java

@@ -0,0 +1,34 @@
+package com.usky.demo.service.vo;
+
+import lombok.Data;
+
+
+@Data
+public class EnergyRequestVO {
+
+    /**
+     * 用能单位编码
+     */
+    private String energyUnitId;
+
+    /**
+     * 用能单位类型(11:企业,12:单位)
+     */
+    private String energyUnitType;
+
+    /**
+     * 能源类型(1:电,2:水)
+     */
+    private String energyType;
+
+    /**
+     * 统计周期(1:小时,2:日,3:月)
+     */
+    private String circleType;
+
+    /**
+     * 查询时间(格 式 yyyyMMddHH /yyyyMMdd / yyyyMM)
+     */
+    private String dataTime;
+
+}

+ 4 - 3
agbox-energy/agbox-energy-biz/src/main/resources/application.yml

@@ -1,7 +1,8 @@
 # Tomcat
 # Tomcat
 server:
 server:
   port: 9891
   port: 9891
-
+  servlet:
+    context-path: /agbox-energy
 mybatis:
 mybatis:
   refresh:
   refresh:
     delay-seconds: 10
     delay-seconds: 10
@@ -86,7 +87,7 @@ mqtt:
   completionTimeout: 5000
   completionTimeout: 5000
   enabled: true
   enabled: true
   keep-alive-interval: 60
   keep-alive-interval: 60
-  username: admin
-  password: public
+  username: usky
+  password: usky
   sub-topics: data-collector,511-XFFJ/+/+/control
   sub-topics: data-collector,511-XFFJ/+/+/control
   url: tcp://47.98.201.73:1883
   url: tcp://47.98.201.73:1883