Переглянути джерело

feat:添加物模型日志按设备集合查询接口

tangfudong 1 рік тому
батько
коміт
2824872421

+ 12 - 0
iot-dao/iot-temporal-service/src/main/java/cc/iotkit/temporal/IThingModelMessageData.java

@@ -38,6 +38,18 @@ public interface IThingModelMessageData {
      */
     List<TimeData> getDeviceMessageStatsWithUid(String uid, long start, long end);
 
+    /**
+     * 查询指定设备集类型并按时间倒序
+     *
+     * @param deviceIds   设备ids
+     * @param type       消息类型
+     * @param identifier 标识符
+     * @param page       页码
+     * @param size       页大小
+     */
+    Paging<ThingModelMessage> findByTypeAndDeviceIds(List<String> deviceIds, String type,
+                                                      String identifier, int page, int size);
+
     void add(ThingModelMessage msg);
 
     long count();

+ 21 - 0
iot-dao/iot-temporal-serviceImpl-es/src/main/java/cc/iotkit/temporal/es/service/ThingModelMessageDataImpl.java

@@ -67,6 +67,27 @@ public class ThingModelMessageDataImpl implements IThingModelMessageData {
                 .collect(Collectors.toList()));
     }
 
+    @Override
+    public Paging<ThingModelMessage> findByTypeAndDeviceIds(List<String> deviceIds, String type,
+                                                             String identifier,
+                                                             int page, int size) {
+        BoolQueryBuilder builder = QueryBuilders.boolQuery();
+        builder.must(QueryBuilders.termQuery("type", type));
+        if (deviceIds.size()>0) {
+            builder.must(QueryBuilders.termsQuery("deviceId", deviceIds));
+        }
+        if (StringUtils.isNotBlank(identifier)) {
+            builder.must(QueryBuilders.matchPhraseQuery("identifier", identifier));
+        }
+        NativeSearchQuery query = new NativeSearchQueryBuilder().withQuery(builder)
+                .withPageable(PageRequest.of(page - 1, size, Sort.by(Sort.Order.desc("time"))))
+                .build();
+        SearchHits<DocThingModelMessage> result = template.search(query, DocThingModelMessage.class);
+        return new Paging<>(result.getTotalHits(), result.getSearchHits().stream()
+                .map(m -> MapstructUtils.convert(m.getContent(), ThingModelMessage.class))
+                .collect(Collectors.toList()));
+    }
+
     @Override
     public List<TimeData> getDeviceMessageStatsWithUid(String uid, long start, long end) {
         BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery()

+ 5 - 0
iot-dao/iot-temporal-serviceImpl-iotdb/src/main/java/cc/iotkit/temporal/iotdb/service/ThingModelMessageDataImpl.java

@@ -33,6 +33,11 @@ public class ThingModelMessageDataImpl implements IThingModelMessageData {
         return new ArrayList<>();
     }
 
+    @Override
+    public Paging<ThingModelMessage> findByTypeAndDeviceIds(List<String> deviceIds, String type, String identifier, int page, int size) {
+        return new Paging<>();
+    }
+
     @Override
     public void add(ThingModelMessage msg) {
     }

+ 40 - 0
iot-dao/iot-temporal-serviceImpl-td/src/main/java/cc/iotkit/temporal/td/service/ThingModelMessageDataImpl.java

@@ -72,6 +72,46 @@ public class ThingModelMessageDataImpl implements IThingModelMessageData {
                 .collect(Collectors.toList()));
     }
 
+    @Override
+    public Paging<ThingModelMessage> findByTypeAndDeviceIds(List<String> deviceIds, String type,
+                                                             String identifier,
+                                                             int page, int size) {
+        String sql = "select time,mid,product_key,device_name,type,identifier,code,data,report_time " +
+                "from thing_model_message where type=? %s order by time desc limit %d offset %d";
+
+        //构建动态条件
+        List<Object> args = new ArrayList<>();
+        args.add(type);
+        StringBuilder sbCond = new StringBuilder();
+        if (deviceIds.size()>0) {
+            sbCond.append(" and deviceIds in (?) ");
+            args.add(String.join(",",deviceIds));
+        }
+        if (StringUtils.isNotBlank(identifier)) {
+            sbCond.append("and identifier=? ");
+            args.add(identifier);
+        }
+
+        sql = String.format(sql, sbCond.toString(), size, (page - 1) * size);
+        List<TbThingModelMessage> ruleLogs = tdTemplate.query(sql,
+                new BeanPropertyRowMapper<>(TbThingModelMessage.class),
+                args.toArray()
+        );
+
+        sql = String.format("select count(*) from thing_model_message where type=? %s",
+                sbCond.toString());
+        List<Long> counts = tdTemplate.queryForList(sql, Long.class, args.toArray());
+        long count = !counts.isEmpty() ? counts.get(0) : 0;
+
+        return new Paging<>(count, ruleLogs.stream().map(r ->
+                new ThingModelMessage(r.getTime().toString(), r.getMid(),
+                        r.getDeviceId(), r.getProductKey(), r.getDeviceName(),
+                        r.getUid(), r.getType(), r.getIdentifier(), r.getCode(),
+                        JsonUtils.parseObject(r.getData(), Map.class),
+                        r.getTime(), r.getReportTime()))
+                .collect(Collectors.toList()));
+    }
+
     @Override
     public List<TimeData> getDeviceMessageStatsWithUid(String uid, long start, long end) {
         String sql = "select time,count(*) as data from(" +

+ 6 - 1
iot-module/iot-manager/src/main/java/cc/iotkit/manager/controller/SpaceDeviceController.java

@@ -98,7 +98,10 @@ public class SpaceDeviceController {
     @ApiOperation("设备日志")
     @PostMapping("/deviceLogs")
     public Paging<ThingModelMessage> logs(@Validated @RequestBody PageRequest<DeviceLogQueryBo> request) {
-        return deviceServiceImpl.logs(request);
+        Home home = homeService.findByUserIdAndCurrent(LoginHelper.getUserId(), true);
+        List<SpaceDevice> spaceDevices = spaceDeviceService.findByHomeId(home.getId());
+        List<String> devIds=spaceDevices.stream().map((spaceDevice->spaceDevice.getDeviceId())).collect(Collectors.toList());
+        return spaceDeviceService.findByTypeAndDeviceIds(devIds,request.getData().getType(),"",request.getPageNum(),request.getPageSize());
     }
 
     /**
@@ -111,6 +114,8 @@ public class SpaceDeviceController {
         return spaceDevices.stream().map((this::parseSpaceDevice)).collect(Collectors.toList());
     }
 
+
+
     /**
      * 收藏/取消收藏设备
      */

+ 6 - 0
iot-module/iot-manager/src/main/java/cc/iotkit/manager/service/ISpaceDeviceService.java

@@ -1,5 +1,7 @@
 package cc.iotkit.manager.service;
 
+import cc.iotkit.common.api.Paging;
+import cc.iotkit.common.thing.ThingModelMessage;
 import cc.iotkit.model.space.SpaceDevice;
 
 import java.util.List;
@@ -23,4 +25,8 @@ public interface ISpaceDeviceService {
     void deleteById (Long id);
 
     SpaceDevice findById (Long id);
+
+    Paging<ThingModelMessage> findByTypeAndDeviceIds(List<String> deviceIds, String type,
+                                                     String identifier,
+                                                     int page, int size);
 }

+ 17 - 0
iot-module/iot-manager/src/main/java/cc/iotkit/manager/service/impl/SpaceDeviceServiceImpl.java

@@ -1,8 +1,14 @@
 package cc.iotkit.manager.service.impl;
 
+import cc.iotkit.common.api.Paging;
+import cc.iotkit.common.enums.ErrCode;
+import cc.iotkit.common.exception.BizException;
+import cc.iotkit.common.thing.ThingModelMessage;
+import cc.iotkit.common.utils.StringUtils;
 import cc.iotkit.data.manager.ISpaceDeviceData;
 import cc.iotkit.manager.service.ISpaceDeviceService;
 import cc.iotkit.model.space.SpaceDevice;
+import cc.iotkit.temporal.IThingModelMessageData;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -18,6 +24,9 @@ public class SpaceDeviceServiceImpl implements ISpaceDeviceService {
     @Autowired
     private ISpaceDeviceData spaceDeviceData;
 
+    @Autowired
+    private IThingModelMessageData thingModelMessageData;
+
     @Override
     public List<SpaceDevice> findByHomeIdAndCollect(Long homeId, boolean collect) {
         return spaceDeviceData.findByHomeIdAndCollect(homeId,collect);
@@ -52,4 +61,12 @@ public class SpaceDeviceServiceImpl implements ISpaceDeviceService {
     public SpaceDevice findById(Long id) {
         return spaceDeviceData.findById(id);
     }
+
+    @Override
+    public Paging<ThingModelMessage> findByTypeAndDeviceIds(List<String> deviceIds, String type, String identifier, int page, int size) {
+        if(StringUtils.isEmpty(type)){
+            throw new BizException(ErrCode.PARAMS_EXCEPTION);
+        }
+        return thingModelMessageData.findByTypeAndDeviceIds(deviceIds,type,identifier,page,size);
+    }
 }