Commit 9d78750583843d36596f38b0a9b0452de107774f

Authored by xp.Huang
1 parent a6e8144f

fix: 修改报表配置异步执行,并判断设备不存在的时候不执行操作

1 1 package org.thingsboard.server.dao.util.yunteng.task;
2 2
  3 +import com.google.common.util.concurrent.FutureCallback;
  4 +import com.google.common.util.concurrent.Futures;
  5 +import com.google.common.util.concurrent.ListenableFuture;
  6 +import com.google.common.util.concurrent.MoreExecutors;
3 7 import lombok.RequiredArgsConstructor;
4 8 import lombok.extern.slf4j.Slf4j;
  9 +import org.checkerframework.checker.nullness.qual.Nullable;
5 10 import org.springframework.stereotype.Component;
6 11 import org.thingsboard.server.common.data.yunteng.constant.FastIotConstants;
  12 +import org.thingsboard.server.common.data.yunteng.dto.DeviceDTO;
7 13 import org.thingsboard.server.common.data.yunteng.dto.ReportFormConfigDTO;
8 14 import org.thingsboard.server.common.data.yunteng.dto.request.ExecuteAttributesDTO;
  15 +import org.thingsboard.server.dao.yunteng.service.TkDeviceService;
9 16 import org.thingsboard.server.dao.yunteng.service.TkReportFormConfigService;
10 17 import org.thingsboard.server.dao.yunteng.service.TkReportGenerateRecordService;
11 18 import java.util.*;
... ... @@ -18,6 +25,8 @@ public class ReportTask {
18 25
19 26 private final TkReportGenerateRecordService tkReportGenerateRecordService;
20 27
  28 + private final TkDeviceService tkDeviceService;
  29 +
21 30 public void multipleParams(String s, Boolean b, Long l, Double d, Integer i) {
22 31 System.out.println("执行多参方法: s=" + s + "b=" + b + "l=" + l + "d" + d + "i=" + i);
23 32 }
... ... @@ -32,28 +41,40 @@ public class ReportTask {
32 41 }
33 42
34 43 public void generateReport(String reportId, String reportGenerateRecordId) {
35   - ReportFormConfigDTO formConfigDTO =
  44 + ListenableFuture<ReportFormConfigDTO> future =
36 45 tkReportFormConfigService.findReportFormConfigById(reportId);
37   - // 关联设备
38   - List<ExecuteAttributesDTO> dtoList = formConfigDTO.getExecuteAttributes();
39   - if (!dtoList.isEmpty()) {
40   - if (dtoList.size() == FastIotConstants.MagicNumber.ONE) {
41   - try {
42   - ExecuteAttributesDTO attributesDTO = dtoList.get(0);
43   - getTsKvForGenerateExcel(
44   - formConfigDTO, attributesDTO, reportGenerateRecordId, dtoList.size());
  46 + Futures.addCallback(
  47 + future,
  48 + new FutureCallback<>() {
  49 + @Override
  50 + public void onSuccess(@Nullable ReportFormConfigDTO reportFormConfigDTO) {
  51 + // 关联设备
  52 + List<ExecuteAttributesDTO> dtoList = reportFormConfigDTO.getExecuteAttributes();
  53 + if (!dtoList.isEmpty()) {
  54 + if (dtoList.size() == FastIotConstants.MagicNumber.ONE) {
  55 + try {
  56 + ExecuteAttributesDTO attributesDTO = dtoList.get(0);
  57 + getTsKvForGenerateExcel(
  58 + reportFormConfigDTO, attributesDTO, reportGenerateRecordId, dtoList.size());
45 59
46   - } catch (Exception e) {
47   - log.error(e.getMessage());
48   - }
49   - } else {
50   - int surplus = dtoList.size();
51   - for (ExecuteAttributesDTO dto : dtoList) {
52   - getTsKvForGenerateExcel(formConfigDTO, dto, reportGenerateRecordId, surplus);
53   - surplus--;
54   - }
55   - }
56   - }
  60 + } catch (Exception e) {
  61 + log.error(e.getMessage());
  62 + }
  63 + } else {
  64 + int surplus = dtoList.size();
  65 + for (ExecuteAttributesDTO dto : dtoList) {
  66 + getTsKvForGenerateExcel(
  67 + reportFormConfigDTO, dto, reportGenerateRecordId, surplus);
  68 + surplus--;
  69 + }
  70 + }
  71 + }
  72 + }
  73 +
  74 + @Override
  75 + public void onFailure(Throwable throwable) {}
  76 + },
  77 + MoreExecutors.directExecutor());
57 78 }
58 79
59 80 private void getTsKvForGenerateExcel(
... ... @@ -61,7 +82,11 @@ public class ReportTask {
61 82 ExecuteAttributesDTO dto,
62 83 String reportGenerateRecordId,
63 84 int surplus) {
64   - tkReportGenerateRecordService.generateExcelUpdateReportRecord(
65   - formConfigDTO, dto, reportGenerateRecordId, surplus);
  85 + //检查设备是否存在
  86 + DeviceDTO deviceDTO = tkDeviceService.findDeviceInfoByTbDeviceId(formConfigDTO.getTenantId(),dto.getDevice());
  87 + if(null != deviceDTO){
  88 + tkReportGenerateRecordService.generateExcelUpdateReportRecord(
  89 + formConfigDTO, dto, reportGenerateRecordId, surplus);
  90 + }
66 91 }
67 92 }
... ...
... ... @@ -3,6 +3,8 @@ package org.thingsboard.server.dao.yunteng.impl;
3 3 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
4 4 import com.baomidou.mybatisplus.core.metadata.IPage;
5 5 import com.fasterxml.jackson.databind.JsonNode;
  6 +import com.google.common.util.concurrent.Futures;
  7 +import com.google.common.util.concurrent.ListenableFuture;
6 8 import lombok.RequiredArgsConstructor;
7 9 import lombok.extern.slf4j.Slf4j;
8 10 import org.apache.commons.lang3.StringUtils;
... ... @@ -167,10 +169,12 @@ public class TkReportFromConfigServiceImpl
167 169 }
168 170
169 171 @Override
170   - public ReportFormConfigDTO findReportFormConfigById(String id) {
171   - return Optional.ofNullable(baseMapper.selectById(id))
172   - .map(this::getReportFormConfigDTOByEntity)
173   - .orElseThrow(() -> new TkDataValidationException(ErrorMessage.INTERNAL_ERROR.getMessage()));
  172 + public ListenableFuture<ReportFormConfigDTO> findReportFormConfigById(String id) {
  173 + ReportFormConfigDTO dto =
  174 + Optional.ofNullable(baseMapper.selectById(id))
  175 + .map(this::getReportFormConfigDTOByEntity)
  176 + .orElse(null);
  177 + return Futures.immediateFuture(dto);
174 178 }
175 179
176 180 private void addCheckSysJob(TkReportFormConfigEntity reportFormConfig) throws SchedulerException {
... ... @@ -187,7 +191,8 @@ public class TkReportFromConfigServiceImpl
187 191 }
188 192 }
189 193
190   - private void updateCheckSysJob(TkReportFormConfigEntity reportFormConfig) throws SchedulerException {
  194 + private void updateCheckSysJob(TkReportFormConfigEntity reportFormConfig)
  195 + throws SchedulerException {
191 196 boolean isNowExecute =
192 197 Objects.equals(reportFormConfig.getExecuteWay(), FastIotConstants.MagicNumber.ZERO);
193 198 String cronExpression = reportFormConfig.getExecuteContent();
... ...
1 1 package org.thingsboard.server.dao.yunteng.service;
2 2
3 3 import com.fasterxml.jackson.databind.JsonNode;
  4 +import com.google.common.util.concurrent.ListenableFuture;
4 5 import org.quartz.SchedulerException;
5 6 import org.thingsboard.server.common.data.yunteng.dto.DeleteDTO;
6 7 import org.thingsboard.server.common.data.yunteng.dto.ReportFormConfigDTO;
... ... @@ -21,7 +22,7 @@ public interface TkReportFormConfigService {
21 22
22 23 ReportFormConfigDTO findReportFormConfigById(String id,String tenantId);
23 24
24   - ReportFormConfigDTO findReportFormConfigById(String id);
  25 + ListenableFuture<ReportFormConfigDTO> findReportFormConfigById(String id);
25 26
26 27 void getExecuteConditionAndAttribute(JsonNode attributeJsonNode, List<ExecuteAttributesDTO> list);
27 28 }
... ...