Browse Source

bug修改

Lifan 9 months ago
parent
commit
6defb9d67f

+ 22 - 19
application/src/main/java/org/thingsboard/server/config/ReceiveHandler.java

@@ -22,6 +22,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.cache.CacheManager;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.ObjectUtils;
 import org.springframework.util.StringUtils;
@@ -98,32 +99,34 @@ public class ReceiveHandler {
 
     //监听scada队列
     @RabbitListener(queues = {RabbitmqConfig.QUEUE_INFORM_SCADA},concurrency = "10")
-    @Transactional(rollbackFor = Exception.class)
+//    @Transactional(rollbackFor = Exception.class)
     public void receive_scada(Object msg, Message message, Channel channel) throws Exception {
-
-        byte[] body = message.getBody();
-        String encode = Base64.getEncoder().encodeToString(body);
-        byte[] decode = Base64.getDecoder().decode(encode);
-        String s = new String(decode,"utf-8");
+        try {
+            byte[] body = message.getBody();
+            String encode = Base64.getEncoder().encodeToString(body);
+            byte[] decode = Base64.getDecoder().decode(encode);
+            String s = new String(decode,"utf-8");
 //        log.info("获取到物联网设备发送的监听数据:{}", s);
 
-        String s1 = StrUtils.underlineToHump(s);
-        ScadaDeviceData scadaDeviceData = JSON.parseObject(s1, ScadaDeviceData.class);
-        if (!ObjectUtils.isEmpty(scadaDeviceData)) {
-            scadaDeviceData.setJsonData(s);
-            boolean b = deviceDataService.save(scadaDeviceData);
-            if (b) {
-                //保存数据到历史表
-                try{
-                    saveScadaHistoryData(s);
-                }catch (Exception e){}
-            }
+            String s1 = StrUtils.underlineToHump(s);
+            ScadaDeviceData scadaDeviceData = JSON.parseObject(s1, ScadaDeviceData.class);
+            if (!ObjectUtils.isEmpty(scadaDeviceData)) {
+                scadaDeviceData.setJsonData(s);
+                boolean b = deviceDataService.save(scadaDeviceData);
+                if (b) {
+                    //保存数据到历史表
+                    try{
+                        saveScadaHistoryData(s);
+                    }catch (Exception e){}
+                }
 
+            }
+        }catch (Exception e){
         }
     }
 
 
-    @Transactional(rollbackFor = Exception.class)
+//    @Transactional(rollbackFor = Exception.class)
     void saveScadaHistoryData(String dataJson) {
         JSONObject jsonObject = JSON.parseObject(dataJson);
         if(jsonObject!=null){
@@ -240,7 +243,7 @@ public class ReceiveHandler {
         scadaHistories.add(history);
     }
 
-    @Transactional(rollbackFor = Exception.class)
+//    @Transactional(rollbackFor = Exception.class)
     void createWarnDatas(List<ScadaHistory> scadaHistoryList, JSONObject jsonObject) {
         List<NxMonitorSiteConfig> list = nxMonitorSiteConfigService.list(Wrappers.<NxMonitorSiteConfig>query().lambda()
                 .eq(NxMonitorSiteConfig::getIsDeleted, "0")

+ 3 - 1
application/src/main/java/org/thingsboard/server/domain/vo/SeriesData.java

@@ -5,7 +5,9 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author hs
@@ -25,6 +27,6 @@ public class SeriesData implements Serializable {
 
 
     @ApiModelProperty(value = "数组值")
-    private List<String> values;
+    private List<Map<String, Object>> values = new ArrayList<>();
 
 }

+ 19 - 57
application/src/main/java/org/thingsboard/server/listener/ExcelListener.java

@@ -12,75 +12,37 @@ import java.util.Map;
 @Data
 @NoArgsConstructor
 public class ExcelListener<T> extends AnalysisEventListener<T> {
-    // 加入一个判断标签,判断数据是否已经读取完
-    private volatile boolean retryLock = false;
 
-    // 解析完成后的数据集合, 监听对象初始化之后,立即初始化集合对象
-    private final List<T> dataList = new ArrayList<>();
-
-    // 每次最多导入条数
-    private final int batchSize = 2000;
-
-
-    /**
-     * 获取解析后的数据集合, 如果数据还没有被解析完成,会对读取该集合的线程进行阻塞,直到数据读取完成之后,进行解锁。
-     * 如果一次导入数据超过batchSize条,则以抛异常的形式阻止导入数据
-     * @return  解析后的数据集合
-     */
-    public List<T> getDataList() {
-        while (true){
-            if (retryLock){
-                if (dataList.size() > batchSize){
-                    // 手动清空数据内存数据,减少内存消耗
-                    dataList.clear();
-                    throw new RuntimeException("一次最多导入"+ batchSize +"条数据");
-                } else {
-                    return dataList;
-                }
-            }
-        }
-    }
-
-    /**
-     * Excel每解析一行数据,就会调用一次该方法
-     * @param data
-     *            one row value. Is is same as {@link AnalysisContext#readRowHolder()}
-     * @param context
-     *            analysis context
-     */
-    @Override
-    public void invoke(T data, AnalysisContext context) {
-        dataList.add(data);
-    }
+    // 可以通过实例获取该值
+    private List<T> dataList = new ArrayList<>();
 
     /**
-     * 读取表头内容
-     * @param headMap   表头部数据
-     * @param context   数据解析上下文
+     * 读取excel内容
+     * 从excel中的第二行开始读取,把每行数据数据都读出来然后封装到T对象中
+     * 每解析一行数据就会调用一次该方法
+     *
+     * @param t
+     * @param analysisContext
      */
     @Override
-    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
-        //System.out.println("表头:" + headMap);
+    public void invoke(T t, AnalysisContext analysisContext) {
+        // 数据存储到list,供批量处理,或后续自己业务逻辑处理。
+        dataList.add(t);
     }
 
     /**
-     * 流中的数据解析完成之后,就会调用此方法
-     * @param context
+     * 所有操作都完成之后才会执行本方法
+     *
+     * @param analysisContext
      */
     @Override
-    public void doAfterAllAnalysed(AnalysisContext context) {
-        // 数据解析完成,解锁
-        retryLock = true;
+    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+        // excel解析完毕以后需要执行的代码
+//            log.info("This is doAfterAllAnalysed!!!!");
     }
 
-    /**
-     * 解析过程如果发生异常,会调用此方法
-     * @param exception
-     * @param context
-     */
-    @Override
-    public void onException(Exception exception, AnalysisContext context){
-        throw new RuntimeException("Excel数据异常,请检查或联系管理员!");
+    public List<T> getData() {
+        return dataList;
     }
 
 }

+ 28 - 13
application/src/main/java/org/thingsboard/server/service/nanxi/impl/ScadaHistoryServiceImpl.java

@@ -61,26 +61,41 @@ public class ScadaHistoryServiceImpl extends ServiceImpl<ScadaHistoryMapper, Sca
         //同比时间生成相应echarts数据
         if (CollUtil.isNotEmpty(compareTime)) {
             long cz = query.getEndTime().getTime() - query.getStartTime().getTime();
-            for (Date d : compareTime) {
+            for (int i = 0; i < compareTime.size(); i++) {
+                Date d = compareTime.get(i);
                 query.setStartTime(DateUtil.date(d));
                 long l = d.getTime() + cz;
                 DateTime date = DateUtil.date(l);
                 query.setEndTime(date);
                 createEcharts(query, map);
+                int finalI = i;
+                map.forEach((k, v) -> {
+                    List<EchartsLine> echartsLineLists = v.getEchartsLine();
+                    EchartsLine originLine = echartsLineLists.get(0);
+                    EchartsLine dealLine = echartsLineLists.get(finalI + 1);
+                    List<SeriesData> dealLineSeriesDataList = dealLine.getSeriesData();
+                    List<SeriesData> originSeriesDataList = originLine.getSeriesData();
+                    for (int j = 0; j < originSeriesDataList.size(); j++) {
+                        Map<String, Object> tempMap = new HashMap<>();
+                        SeriesData originSeriesData = originSeriesDataList.get(j);
+                        List<Map<String, Object>> values = originSeriesData.getValues();
+                        if(j < dealLineSeriesDataList.size()){
+                            tempMap.put(dealLineSeriesDataList.get(j).getName(), dealLineSeriesDataList.get(j).getValue());
+                        }
+                        values.add(tempMap);
+                    }
+                });
             }
-            /*compareTime.forEach(d -> {
-                query.setStartTime(DateUtil.date(d));
-                long l = d.getTime() + cz;
-                DateTime date = DateUtil.date(l);
-                query.setEndTime(date);
-                createEcharts(query, map);
-            });*/
         }
         if (CollUtil.isNotEmpty(map)) {
             map.forEach((k, v) -> {
                 List<String> xAxis = v.getXAxis();
                 List<String> collect = xAxis.stream().distinct().sorted().collect(Collectors.toList());
                 v.setXAxis(collect);
+                List<EchartsLine> temp = new ArrayList<>();
+                EchartsLine echartsLine = v.getEchartsLine().get(0);
+                temp.add(echartsLine);
+                v.setEchartsLine(temp);
                 echartsLinesList.add(v);
             });
         }
@@ -297,7 +312,7 @@ public class ScadaHistoryServiceImpl extends ServiceImpl<ScadaHistoryMapper, Sca
             }
             values.add(MonitorDataVo.getScadaTime());
             values.add(seriesData.getValue());
-            seriesData.setValues(values);
+//            seriesData.setValues(values);
             seriesDataList.add(seriesData);
         }
         echartsLine.setSeriesData(seriesDataList);
@@ -361,7 +376,7 @@ public class ScadaHistoryServiceImpl extends ServiceImpl<ScadaHistoryMapper, Sca
                         seriesData.setValue(monitorDataVo.getValue());
                         values.add(monitorDataVo.getScadaTime());
                         values.add(monitorDataVo.getValue());
-                        seriesData.setValues(values);
+//                        seriesData.setValues(values);
                         seriesDataList.add(seriesData);
                     }
                     echartsLine.setSeriesData(seriesDataList);
@@ -398,7 +413,7 @@ public class ScadaHistoryServiceImpl extends ServiceImpl<ScadaHistoryMapper, Sca
                             seriesData.setValue(monitorDataVo.getValue());
                             values.add(monitorDataVo.getScadaTime());
                             values.add(monitorDataVo.getValue());
-                            seriesData.setValues(values);
+//                            seriesData.setValues(values);
                             seriesDataList.add(seriesData);
                         }
                         echartsLine.setName(k1);
@@ -445,7 +460,7 @@ public class ScadaHistoryServiceImpl extends ServiceImpl<ScadaHistoryMapper, Sca
                             }
                             values.add(monitorDataVo.getScadaTime());
                             values.add(seriesData.getValue());
-                            seriesData.setValues(values);
+//                            seriesData.setValues(values);
                             seriesDataList.add(seriesData);
                         }
                         echartsLine.setName(k1);
@@ -502,7 +517,7 @@ public class ScadaHistoryServiceImpl extends ServiceImpl<ScadaHistoryMapper, Sca
                         }
                         values.add(monitorDataVo.getScadaTime());
                         values.add(seriesData.getValue());
-                        seriesData.setValues(values);
+//                        seriesData.setValues(values);
                         seriesDataList.add(seriesData);
                     }
                     echartsLine.setSeriesData(seriesDataList);