Forráskód Böngészése

feat:新增青萍获取accessToken方法
feat:新增青萍获取设备列表方法
feat:新增青萍获取历史数据接口

黄渊昊 5 hónapja
szülő
commit
f21ec31d90
17 módosított fájl, 399 hozzáadás és 1 törlés
  1. 29 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/qp/config/QPConfigure.java
  2. 12 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/qp/entity/Battery.java
  3. 12 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/qp/entity/Co2.java
  4. 35 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/qp/entity/Data.java
  5. 15 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/qp/entity/Device.java
  6. 12 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/qp/entity/Humidity.java
  7. 58 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/qp/entity/Info.java
  8. 31 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/qp/entity/Product.java
  9. 16 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/qp/entity/Root.java
  10. 20 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/qp/entity/Setting.java
  11. 12 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/qp/entity/Signal.java
  12. 16 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/qp/entity/Status.java
  13. 12 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/qp/entity/Temperature.java
  14. 12 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/qp/entity/Timestamp.java
  15. 29 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/qp/param/DataParam.java
  16. 74 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/qp/util/QPUtil.java
  17. 4 1
      snowy-web-app/src/main/resources/application.properties

+ 29 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/qp/config/QPConfigure.java

@@ -0,0 +1,29 @@
+package vip.xiaonuo.coldchain.modular.qp.config;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+import vip.xiaonuo.coldchain.modular.push.config.PushConfigure;
+
+@Component
+@ConfigurationProperties("qp")
+public class QPConfigure {
+    private static String appKey;
+
+    private static String appSecret;
+
+    public static String getAppKey() {
+        return appKey;
+    }
+
+    public void setAppKey(String appKey) {
+        QPConfigure.appKey = appKey;
+    }
+
+    public static String getAppSecret() {
+        return appSecret;
+    }
+
+    public void setAppSecret(String appSecret) {
+        QPConfigure.appSecret = appSecret;
+    }
+}

+ 12 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/qp/entity/Battery.java

@@ -0,0 +1,12 @@
+package vip.xiaonuo.coldchain.modular.qp.entity;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class Battery {
+    private Float value;
+}

+ 12 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/qp/entity/Co2.java

@@ -0,0 +1,12 @@
+package vip.xiaonuo.coldchain.modular.qp.entity;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class Co2 {
+    private Float value;
+}

+ 35 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/qp/entity/Data.java

@@ -0,0 +1,35 @@
+package vip.xiaonuo.coldchain.modular.qp.entity;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class Data {
+    /** 时间*/
+    @Schema(description = "时间")
+    private Timestamp timestamp;
+
+    /** 电量*/
+    @Schema(description = "电量")
+    private Battery battery;
+
+    /** 信号*/
+    @Schema(description = "信号")
+    private Signal signal;
+
+    /** 温度*/
+    @Schema(description = "温度")
+    private Temperature temperature;
+
+    /** 湿度*/
+    @Schema(description = "湿度")
+    private Humidity humidity;
+
+    /** 二氧化碳*/
+    @Schema(description = "二氧化碳")
+    private Co2 co2;
+}

+ 15 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/qp/entity/Device.java

@@ -0,0 +1,15 @@
+package vip.xiaonuo.coldchain.modular.qp.entity;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+@Getter
+@Setter
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class Device {
+    private Info info;
+    private Data data;
+}

+ 12 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/qp/entity/Humidity.java

@@ -0,0 +1,12 @@
+package vip.xiaonuo.coldchain.modular.qp.entity;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class Humidity {
+    private Float value;
+}

+ 58 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/qp/entity/Info.java

@@ -0,0 +1,58 @@
+package vip.xiaonuo.coldchain.modular.qp.entity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+import vip.xiaonuo.common.pojo.OrgEntity;
+
+@Getter
+@Setter
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class Info {
+    /** 设备名称 */
+    @Schema(description = "设备名称")
+    private String name;
+
+    /** 设备MAC地址 */
+    @Schema(description = "设备MAC地址")
+    private String mac;
+
+    /** 分组id */
+    @Schema(description = "分组id")
+    private String group_id;
+
+    /** 分组名称 */
+    @Schema(description = "分组名称")
+    private String group_name;
+
+    /** 状态 */
+    @Schema(description = "状态")
+    private Status status;
+
+    /** 设备版本 */
+    @Schema(description = "设备版本")
+    private String version;
+
+    /** 设备注册时间 */
+    @Schema(description = "设备注册时间")
+    private Long create_at;
+
+    /** 产品信息 */
+    @Schema(description = "产品信息")
+    private Product product;
+
+    /** 设备上报配置*/
+    @Schema(description = "设备上报配置")
+    private Setting setting;
+
+    /** 数据传输方式*/
+    @Schema(description = "数据传输方式")
+    private String connection_type;
+
+
+
+
+}

+ 31 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/qp/entity/Product.java

@@ -0,0 +1,31 @@
+package vip.xiaonuo.coldchain.modular.qp.entity;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class Product {
+    /** 产品id*/
+    @Schema(description = "产品id")
+    private Long id;
+
+    /** 产品编号*/
+    @Schema(description = "产品编号")
+    private String code;
+
+    /** 产品名称*/
+    @Schema(description = "产品名称")
+    private String name;
+
+    /** 产品英文名称*/
+    @Schema(description = "产品英文名称")
+    private String en_name;
+
+    @Schema(description = "")
+    private Boolean noBleSetting;
+}

+ 16 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/qp/entity/Root.java

@@ -0,0 +1,16 @@
+package vip.xiaonuo.coldchain.modular.qp.entity;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+@Getter
+@Setter
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class Root {
+    private Integer total;
+    private List<Device> devices;
+    private List<Data> data;
+}

+ 20 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/qp/entity/Setting.java

@@ -0,0 +1,20 @@
+package vip.xiaonuo.coldchain.modular.qp.entity;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class Setting {
+    /** 设备数据上报间隔(秒)*/
+    @Schema(description = "设备数据上报间隔(秒)")
+    private Integer report_interval;
+
+    /** 设备数据采集间隔(秒)*/
+    @Schema(description = "设备数据采集间隔(秒)")
+    private Integer collect_interval;
+}

+ 12 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/qp/entity/Signal.java

@@ -0,0 +1,12 @@
+package vip.xiaonuo.coldchain.modular.qp.entity;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class Signal {
+    private Float value;
+}

+ 16 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/qp/entity/Status.java

@@ -0,0 +1,16 @@
+package vip.xiaonuo.coldchain.modular.qp.entity;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class Status {
+    /** 状态 */
+    @Schema(description = "状态(True表示离线False表示在线")
+    private Boolean offline;
+}

+ 12 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/qp/entity/Temperature.java

@@ -0,0 +1,12 @@
+package vip.xiaonuo.coldchain.modular.qp.entity;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class Temperature {
+    private Float value;
+}

+ 12 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/qp/entity/Timestamp.java

@@ -0,0 +1,12 @@
+package vip.xiaonuo.coldchain.modular.qp.entity;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class Timestamp {
+    private Float value;
+}

+ 29 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/qp/param/DataParam.java

@@ -0,0 +1,29 @@
+package vip.xiaonuo.coldchain.modular.qp.param;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.Max;
+
+@Getter
+@Setter
+public class DataParam {
+    /** 设备mac*/
+    private String mac;
+
+    /** 13位毫秒级时间戳-开始时间*/
+    private Integer start_time;
+
+    /** 13位毫秒级时间戳-结束时间*/
+    private Integer end_time;
+
+    /** 13位毫秒级时间戳*/
+    private Integer timestamp;
+
+    /** 偏移量*/
+    private Integer offset;
+
+    /** 最大返回数*/
+    @Max(value = 200,message = "最大返回值不得超过200")
+    private Integer limit;
+}

+ 74 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/qp/util/QPUtil.java

@@ -0,0 +1,74 @@
+package vip.xiaonuo.coldchain.modular.qp.util;
+
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import vip.xiaonuo.coldchain.modular.qp.config.QPConfigure;
+import vip.xiaonuo.coldchain.modular.qp.entity.Root;
+import vip.xiaonuo.coldchain.modular.qp.param.DataParam;
+
+import java.util.Base64;
+
+public class QPUtil {
+
+    private static final String appKey = QPConfigure.getAppKey();
+
+    private static final String appSecret = QPConfigure.getAppSecret();
+
+    /**
+     * 获取accessToken
+     *
+     * @return
+     */
+    public static String getAccessToken() {
+        String authorization = appKey + ":" + appSecret;
+        String authorizationBase64 = Base64.getEncoder().encodeToString(authorization.getBytes());
+        String body = HttpUtil
+                .createPost("https://oauth.cleargrass.com/oauth2/token")
+                .header("Content-Type", "application/x-www-form-urlencoded")
+                .header("Authorization", "Basic " + authorizationBase64)
+                .form("grant_type", "client_credentials")
+                .form("scope", "device_full_access")
+                .execute().body();
+        JSONObject jsonObject = JSON.parseObject(body);
+        return jsonObject.get("access_token").toString();
+    }
+
+    /**
+     * 获取设备列表
+     */
+    public static Root getDeviceList() {
+        String accessToken = getAccessToken();
+        String body = HttpUtil.createGet("https://apis.cleargrass.com/v1/apis/devices")
+                .header("Authorization", "Bearer " + accessToken)
+                .execute().body();
+        ObjectMapper objectMapper = new ObjectMapper();
+        Root root = null;
+        try {
+            root = objectMapper.readValue(body, Root.class);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return root;
+    }
+
+    /**
+     * 获取设备历史数据
+     */
+    public static Root getHistoryData(DataParam dataParam) {
+        String accessToken = getAccessToken();
+        String body = HttpUtil.createGet("https://apis.cleargrass.com/v1/apis/devices/data?timestamp="
+                        + dataParam.getTimestamp() + "&mac=" + dataParam.getMac() + "&end_time="
+                        + dataParam.getEnd_time() +"&start_time=" + dataParam.getStart_time())
+                .header("Authorization", "Bearer " + accessToken).execute().body();
+        ObjectMapper objectMapper = new ObjectMapper();
+        Root root = null;
+        try {
+            root = objectMapper.readValue(body, Root.class);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return root;
+    }
+}

+ 4 - 1
snowy-web-app/src/main/resources/application.properties

@@ -250,4 +250,7 @@ wechat.accessTokenUrl=https://api.weixin.qq.com/sns/oauth2/access_token
 wechat.userInfoUrl=https://api.weixin.qq.com/sns/userinfo
 
 file.path=/software/coldchain/ui/dist
-#file.path=C:/Users/xiaozun/Desktop
+#file.path=C:/Users/xiaozun/Desktop
+
+qp.appKey=CdiC6zSNR
+qp.appSecret=a098d282b91211efbca452540055385a