xucaiqin 2 лет назад
Родитель
Сommit
d19a130498
13 измененных файлов с 108 добавлено и 46 удалено
  1. 2 2
      iot-gateway/src/main/java/com/middle/platform/gateway/filter/log/AccessLogFilter.java
  2. 1 1
      iot-module/iot-module-data/iot-module-data-biz/src/main/java/com/middle/platform/data/biz/event/DataEvent.java
  3. 2 1
      iot-module/iot-module-data/iot-module-data-biz/src/main/java/com/middle/platform/data/biz/service/DataService.java
  4. 0 10
      iot-module/iot-module-manage/iot-module-manage-biz/src/main/java/com/middle/platform/manage/biz/constant/UrlType.java
  5. 18 0
      iot-module/iot-module-manage/iot-module-manage-biz/src/main/java/com/middle/platform/manage/biz/constant/UrlTypeEnum.java
  6. 3 3
      iot-module/iot-module-manage/iot-module-manage-biz/src/main/java/com/middle/platform/manage/biz/controller/IotProductController.java
  7. 21 0
      iot-module/iot-module-manage/iot-module-manage-biz/src/main/java/com/middle/platform/manage/biz/domain/dto/CloudDto.java
  8. 2 11
      iot-module/iot-module-manage/iot-module-manage-biz/src/main/java/com/middle/platform/manage/biz/domain/req/IotCloudTest.java
  9. 3 0
      iot-module/iot-module-manage/iot-module-manage-biz/src/main/java/com/middle/platform/manage/biz/domain/req/IotUrlPage.java
  10. 33 2
      iot-module/iot-module-manage/iot-module-manage-biz/src/main/java/com/middle/platform/manage/biz/service/IotCloudService.java
  11. 2 2
      iot-module/iot-module-manage/iot-module-manage-biz/src/main/java/com/middle/platform/manage/biz/service/IotProductService.java
  12. 19 12
      iot-module/iot-module-manage/iot-module-manage-biz/src/main/java/com/middle/platform/manage/biz/service/IotUrlService.java
  13. 2 2
      iot-module/iot-module-system/iot-module-system-api/src/main/java/com/middle/platform/system/api/enums/DictType.java

+ 2 - 2
iot-gateway/src/main/java/com/middle/platform/gateway/filter/log/AccessLogFilter.java

@@ -72,8 +72,8 @@ public class AccessLogFilter implements GlobalFilter, Ordered {
                 JSONUtil.parse(gatewayLog.getRequestBody()) : gatewayLog.getRequestBody());
         values.put("requestHeaders", JsonUtils.toJsonString(gatewayLog.getRequestHeaders().toSingleValueMap()));
         values.put("userIp", gatewayLog.getUserIp());
-        values.put("responseBody", JsonUtils.isJson(gatewayLog.getResponseBody()) ? // 保证 body 的展示好看
-                JSONUtil.parse(gatewayLog.getResponseBody()) : gatewayLog.getResponseBody());
+//        values.put("responseBody", JsonUtils.isJson(gatewayLog.getResponseBody()) ? // 保证 body 的展示好看
+//                JSONUtil.parse(gatewayLog.getResponseBody()) : gatewayLog.getResponseBody());
         values.put("responseHeaders", gatewayLog.getResponseHeaders() != null ?
                 JsonUtils.toJsonString(gatewayLog.getResponseHeaders().toSingleValueMap()) : null);
         values.put("httpStatus", gatewayLog.getHttpStatus());

+ 1 - 1
iot-module/iot-module-data/iot-module-data-biz/src/main/java/com/middle/platform/data/biz/event/DataEvent.java

@@ -14,6 +14,6 @@ import org.springframework.stereotype.Component;
 public class DataEvent implements ApplicationListener<ApplicationEvent> {
     @Override
     public void onApplicationEvent(ApplicationEvent event) {
-        log.info("事件:{}", event.getClass().getName());
+//        log.info("事件:{}", event.getClass().getName());
     }
 }

+ 2 - 1
iot-module/iot-module-data/iot-module-data-biz/src/main/java/com/middle/platform/data/biz/service/DataService.java

@@ -57,7 +57,7 @@ public class DataService {
         if (Objects.isNull(deviceVo)) {
             return new ArrayList<>();
         }
-        if (Objects.equals(historyPara.getType(), 1)) {
+        if (Objects.equals(historyPara.getType(), 1)) {//图表-解析后的数据
             List<PropertyVo> query = taosMapper.query(deviceVo.getCode(), historyPara.getGuid(), historyPara.getLine(), historyPara.getStartTime(), historyPara.getEndTime());
             if (CollUtil.isNotEmpty(query)) {
                 Map<String, String> map = Optional.ofNullable(modApi.queryMod(deviceVo.getProductId())).map(mod -> {
@@ -70,6 +70,7 @@ public class DataService {
             }
             return query;
         }
+        //表格-查询历史数据
         return taosMapper.queryRaw(deviceVo.getCode(), historyPara.getGuid(), historyPara.getStartTime(), historyPara.getEndTime());
     }
 }

+ 0 - 10
iot-module/iot-module-manage/iot-module-manage-biz/src/main/java/com/middle/platform/manage/biz/constant/UrlType.java

@@ -1,10 +0,0 @@
-package com.middle.platform.manage.biz.constant;
-
-/**
- * @author xucaiqin
- * @date 2023-12-21 09:23:36
- */
-public interface UrlType {
-    Integer MQTT = 1;
-    Integer HTTP = 2;
-}

+ 18 - 0
iot-module/iot-module-manage/iot-module-manage-biz/src/main/java/com/middle/platform/manage/biz/constant/UrlTypeEnum.java

@@ -0,0 +1,18 @@
+package com.middle.platform.manage.biz.constant;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author xucaiqin
+ * @date 2023-12-21 09:23:36
+ */
+@Getter
+@AllArgsConstructor
+public enum UrlTypeEnum {
+    MQTT("MQTT", 1),
+    HTTP("HTTP", 2),
+    ;
+    private final String label;
+    private final Integer val;
+}

+ 3 - 3
iot-module/iot-module-manage/iot-module-manage-biz/src/main/java/com/middle/platform/manage/biz/controller/IotProductController.java

@@ -128,7 +128,7 @@ public class IotProductController {
      */
     @PostMapping("/testCloud")
     public Result<Object> testCloud(@RequestBody @Valid IotCloudTest iotCloudTest) {
-        return Result.ok(iotCloudService.test(iotCloudTest), "测试");
+        return Result.ok(iotCloudService.cloudTest(iotCloudTest), "测试");
     }
 
     //通信地址
@@ -140,12 +140,12 @@ public class IotProductController {
      * @return
      */
     @GetMapping("/getUrl")
-    public Result<Object> getUrl(IotUrlPage iotUrlPage) {
+    public Result<Object> getUrl(@Valid IotUrlPage iotUrlPage) {
         return Result.ok(iotUrlService.getUrl(iotUrlPage), "查询成功");
     }
 
     /**
-     * 产品对应的通信地址配置
+     * 保存产品对应的通信地址配置
      *
      * @param iotUrlPara
      * @return

+ 21 - 0
iot-module/iot-module-manage/iot-module-manage-biz/src/main/java/com/middle/platform/manage/biz/domain/dto/CloudDto.java

@@ -0,0 +1,21 @@
+package com.middle.platform.manage.biz.domain.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author xucaiqin
+ * @date 2023-12-27 16:37:25
+ */
+@Getter
+@Setter
+public class CloudDto implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 860093836385340533L;
+    private Boolean status;
+    private String msg;
+    private String data;
+}

+ 2 - 11
iot-module/iot-module-manage/iot-module-manage-biz/src/main/java/com/middle/platform/manage/biz/domain/req/IotCloudTest.java

@@ -20,16 +20,7 @@ public class IotCloudTest {
      */
     @NotNull(message = "产品id不能为空")
     private Long productId;
+    @NotBlank(message = "模拟内容不能为空")
+    private String data;
 
-    /**
-     * 脚本语言 1-js 2-php
-     */
-    @NotNull(message = "脚本语言不能为空")
-    private Integer lang;
-
-    /**
-     * 云函数
-     */
-    @NotBlank(message = "云函数不能为空")
-    private String cloudText;
 }

+ 3 - 0
iot-module/iot-module-manage/iot-module-manage-biz/src/main/java/com/middle/platform/manage/biz/domain/req/IotUrlPage.java

@@ -1,6 +1,7 @@
 package com.middle.platform.manage.biz.domain.req;
 
 import com.middle.platform.common.modle.BasePara;
+import jakarta.validation.constraints.NotNull;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -11,6 +12,8 @@ import lombok.Setter;
 @Getter
 @Setter
 public class IotUrlPage extends BasePara {
+    @NotNull(message = "产品id不能为空")
     private Long productId;
+    @NotNull(message = "地址类型不能为空")
     private Integer type;
 }

+ 33 - 2
iot-module/iot-module-manage/iot-module-manage-biz/src/main/java/com/middle/platform/manage/biz/service/IotCloudService.java

@@ -1,9 +1,13 @@
 package com.middle.platform.manage.biz.service;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.middle.platform.common.constant.Global;
 import com.middle.platform.common.exception.BusinessException;
+import com.middle.platform.common.utils.OkHttpUtils;
 import com.middle.platform.manage.api.pojo.IotCloudVo;
+import com.middle.platform.manage.biz.domain.dto.CloudDto;
 import com.middle.platform.manage.biz.domain.req.IotCloudPara;
 import com.middle.platform.manage.biz.domain.req.IotCloudTest;
 import com.middle.platform.manage.biz.entity.IotCloud;
@@ -11,7 +15,10 @@ import com.middle.platform.manage.biz.mapper.IotCloudMapper;
 import com.middle.platform.redis.constant.CacheConstant;
 import com.middle.platform.redis.service.CacheService;
 import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;
@@ -24,9 +31,12 @@ import java.util.Optional;
  */
 @Service
 @RequiredArgsConstructor
+@Slf4j
 public class IotCloudService {
     private final IotCloudMapper iotCloudMapper;
     private final CacheService cacheService;
+    @Value("${cloud.url:http://10.10.10.224:3000/api/eval}")
+    private String cloud;
 
     /**
      * 新增或修改云函数
@@ -69,7 +79,7 @@ public class IotCloudService {
      * @param iotCloudTest
      * @return
      */
-    public Object test(IotCloudTest iotCloudTest) {
+    public Object cloudTest(IotCloudTest iotCloudTest) {
         IotCloud iotCloud = iotCloudMapper.selectOne(new LambdaQueryWrapper<IotCloud>()
                 .eq(IotCloud::getProductId, iotCloudTest.getProductId()).last("limit 1"));
         if (Objects.isNull(iotCloud)) {
@@ -79,6 +89,21 @@ public class IotCloudService {
             throw new BusinessException("云函数为空");
         }
         //todo 云函数测试
+            JSONObject jsonObject = new JSONObject();
+            jsonObject.put("func", iotCloud.getCloudText());
+            JSONArray objects = new JSONArray();
+            objects.add(iotCloudTest.getData());
+            jsonObject.put("para", objects);
+            jsonObject.put("apply", "transformPayload");
+            try {
+                String sync = OkHttpUtils.builder().url(cloud).addBodyJsonStr(jsonObject.toString()).post(true).sync();
+                CloudDto cloudDto = JSONObject.parseObject(sync, CloudDto.class);
+                if (Objects.nonNull(cloudDto) && cloudDto.getStatus()) {
+                    return JSONObject.parseObject(cloudDto.getData());
+                }
+            } catch (Exception e) {
+                log.error("云函数请求异常:{}", e.getMessage(), e);
+            }
         return null;
     }
 
@@ -89,7 +114,13 @@ public class IotCloudService {
      * @return
      */
     public Object getCloud(Long productId) {
-        return query(productId);
+        IotCloud query = query(productId);
+        if (Objects.nonNull(query)) {
+            IotCloudVo iotCloudVo = new IotCloudVo();
+            BeanUtils.copyProperties(query, iotCloudVo);
+            return iotCloudVo;
+        }
+        return null;
     }
 
     /**

+ 2 - 2
iot-module/iot-module-manage/iot-module-manage-biz/src/main/java/com/middle/platform/manage/biz/service/IotProductService.java

@@ -12,7 +12,7 @@ import com.middle.platform.manage.api.pojo.DeviceVo;
 import com.middle.platform.manage.api.pojo.ProductVo;
 import com.middle.platform.manage.api.pojo.TopicVo;
 import com.middle.platform.manage.biz.constant.Constant;
-import com.middle.platform.manage.biz.constant.UrlType;
+import com.middle.platform.manage.biz.constant.UrlTypeEnum;
 import com.middle.platform.manage.biz.domain.req.IotProductPara;
 import com.middle.platform.manage.biz.domain.req.ProductPage;
 import com.middle.platform.manage.biz.domain.vo.IotProductDetailVo;
@@ -198,7 +198,7 @@ public class IotProductService {
      * @return
      */
     public List<TopicVo> queryList() {
-        return iotProductMapper.queryProductTopic(UrlType.MQTT);
+        return iotProductMapper.queryProductTopic(UrlTypeEnum.MQTT.getVal());
     }
 
     /**

+ 19 - 12
iot-module/iot-module-manage/iot-module-manage-biz/src/main/java/com/middle/platform/manage/biz/service/IotUrlService.java

@@ -9,10 +9,7 @@ import com.middle.platform.common.exception.BusinessException;
 import com.middle.platform.data.api.constant.TopicType;
 import com.middle.platform.data.api.feign.DynamicTopicApi;
 import com.middle.platform.data.api.pojo.TopicDto;
-import com.middle.platform.manage.biz.constant.UrlCategory;
-import com.middle.platform.manage.biz.constant.UrlInit;
-import com.middle.platform.manage.biz.constant.UrlProtocol;
-import com.middle.platform.manage.biz.constant.UrlType;
+import com.middle.platform.manage.biz.constant.*;
 import com.middle.platform.manage.biz.domain.req.IotUrlPage;
 import com.middle.platform.manage.biz.domain.req.IotUrlPara;
 import com.middle.platform.manage.biz.domain.vo.IotUrlVo;
@@ -109,6 +106,7 @@ public class IotUrlService {
     public Object saveUrl(IotUrlPara iotUrlPara) {
         //topi规则校验
         checkTopic(iotUrlPara);
+        checkType(iotUrlPara.getType());
         IotUrl iotUrl = new IotUrl();
         iotUrl.setProductId(iotUrlPara.getProductId());
         iotUrl.setCategory(iotUrlPara.getCategory());
@@ -119,13 +117,22 @@ public class IotUrlService {
         iotUrl.setRemark(iotUrlPara.getRemark());
         iotUrlMapper.insert(iotUrl);
         //新增订阅的topic
-        if (Objects.equals(iotUrlPara.getType(), UrlType.MQTT)
+        if (Objects.equals(iotUrlPara.getType(), UrlTypeEnum.MQTT.getVal())
                 && (Objects.equals(iotUrlPara.getPermission(), TopicType.PUB) || Objects.equals(iotUrlPara.getPermission(), TopicType.BOTH))) {
             subUrl(iotUrl.getUrl(), iotUrl.getFunc() + String.valueOf(iotUrl.getPermission()));
         }
         return true;
     }
 
+    private void checkType(Integer type) {
+        for (UrlTypeEnum value : UrlTypeEnum.values()) {
+            if (Objects.equals(value.getVal(), type)) {
+                return;
+            }
+        }
+        throw new BusinessException("地址类型异常");
+    }
+
 
     /**
      * 修改topic
@@ -154,7 +161,7 @@ public class IotUrlService {
         iotUrl.setRemark(iotUrlPara.getRemark());
         iotUrlMapper.updateById(iotUrl);
         //取消订阅原topic 订阅topic
-        if (Objects.equals(iotUrlPara.getType(), UrlType.MQTT) && (Objects.equals(iotUrlPara.getPermission(), TopicType.PUB) || Objects.equals(iotUrlPara.getPermission(), TopicType.BOTH))) {
+        if (Objects.equals(iotUrlPara.getType(), UrlTypeEnum.MQTT.getVal()) && (Objects.equals(iotUrlPara.getPermission(), TopicType.PUB) || Objects.equals(iotUrlPara.getPermission(), TopicType.BOTH))) {
             removeUrl(iotUrlCheck.getUrl());
             subUrl(iotUrl.getUrl(), iotUrl.getFunc() + String.valueOf(iotUrl.getPermission()));
         }
@@ -177,7 +184,7 @@ public class IotUrlService {
         iotUrl.setDelFlag(Global.DEL);
         iotUrlMapper.update(iotUrl, new LambdaQueryWrapper<IotUrl>().eq(IotUrl::getId, id).eq(IotUrl::getDelFlag, Global.UN_DEL));
         //取消订阅
-        if (Objects.equals(iotUrlCheck.getType(), UrlType.MQTT) && (Objects.equals(iotUrlCheck.getPermission(), TopicType.PUB) || Objects.equals(iotUrlCheck.getPermission(), TopicType.BOTH))) {
+        if (Objects.equals(iotUrlCheck.getType(), UrlTypeEnum.MQTT.getVal()) && (Objects.equals(iotUrlCheck.getPermission(), TopicType.PUB) || Objects.equals(iotUrlCheck.getPermission(), TopicType.BOTH))) {
             removeUrl(iotUrlCheck.getUrl());
         }
         return true;
@@ -197,11 +204,11 @@ public class IotUrlService {
         }
         PageInfo<IotUrlVo> pageInfo = new PageInfo<>(iotUrls);
         iotUrls.forEach(a -> {
-                    Optional.ofNullable(dictApi.query(DictType.URL_TYPE, String.valueOf(a.getType()))).ifPresent(cache -> a.setTypeLabel(cache.getLabel()));
-                    Optional.ofNullable(dictApi.query(DictType.CATEGORY_TYPE, String.valueOf(a.getCategory()))).ifPresent(cache -> a.setCategoryLabel(cache.getLabel()));
-                    Optional.ofNullable(dictApi.query(DictType.FUNC_TYPE, String.valueOf(a.getFunc()))).ifPresent(cache -> a.setFuncLabel(cache.getLabel()));
-                    Optional.ofNullable(dictApi.query(DictType.PERMISSION_TYPE, String.valueOf(a.getPermission()))).ifPresent(cache -> a.setPermissionLabel(cache.getLabel()));
-                    });
+            Optional.ofNullable(dictApi.query(DictType.URL_TYPE, String.valueOf(a.getType()))).ifPresent(cache -> a.setTypeLabel(cache.getLabel()));
+            Optional.ofNullable(dictApi.query(DictType.CATEGORY_TYPE, String.valueOf(a.getCategory()))).ifPresent(cache -> a.setCategoryLabel(cache.getLabel()));
+            Optional.ofNullable(dictApi.query(DictType.FUNC_TYPE, String.valueOf(a.getFunc()))).ifPresent(cache -> a.setFuncLabel(cache.getLabel()));
+            Optional.ofNullable(dictApi.query(DictType.PERMISSION_TYPE, String.valueOf(a.getPermission()))).ifPresent(cache -> a.setPermissionLabel(cache.getLabel()));
+        });
         return new PageRes<>(pageInfo, iotUrls);
     }
 

+ 2 - 2
iot-module/iot-module-system/iot-module-system-api/src/main/java/com/middle/platform/system/api/enums/DictType.java

@@ -18,8 +18,8 @@ public interface DictType {
     /*iotUrl表*/
     String URL_TYPE = "url_type";//地址类型
     String CATEGORY_TYPE = "category_type";//分类类型
-    String FUNC_TYPE = "func_type";//地址类型
-    String PERMISSION_TYPE = "permission_type";//地址类型
+    String FUNC_TYPE = "func_type";//功能类型
+    String PERMISSION_TYPE = "permission_type";//权限类型
 
 
 }