浏览代码

完成opcua事件驱动报表

zhoupeng 2 年之前
父节点
当前提交
6edb40a1a8

+ 2 - 0
chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/dao/RawDataDao.java

@@ -20,4 +20,6 @@ public interface RawDataDao {
     List<RawData> getTempRawDataList(Item item, Integer dataSourceId, String valueBelongTime);
 
     Integer delRawDataList(List<RawData> rawDataList, String valueBelongTime);
+
+    Integer addEventRawData(RawData rawData);
 }

+ 5 - 32
chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/task/OpcAsyncTask.java

@@ -41,36 +41,9 @@ public class OpcAsyncTask {
     @Autowired
     private ReportTableDao reportTableDao;
 
-    /**
-     * 新增一条原始数据
-     *
-     * @param rawData
-     */
-    public void addRawData(Integer id, RawData rawData) {
-        if (Blank.isNotEmpty(id) && Blank.isNotEmpty(rawData)) {
-            if (Blank.isNotEmpty(rawData.getValueBelongTime())) {
-                Integer remainder = id % ConstantStr.SUB_TABLE_NUM;
-                rawDataDao.addRawData( remainder, rawData);
-            }
-        }
-    }
-
-    /**
-     * 新增原始数据集合
-     *
-     * @param rawDataList
-     */
-    public void addRawDataList(Integer id, List<RawData> rawDataList) {
-        if (Blank.isNotEmpty(id) && Blank.isNotEmpty(rawDataList)) {
-            Integer remainder = id % ConstantStr.SUB_TABLE_NUM;
-            rawDataDao.addRawDataList(id, remainder, rawDataList);
-        }
-    }
-
-    public void addEventRawData(Integer id, RawData rawData) {
-        if (Blank.isNotEmpty(id) && Blank.isNotEmpty(rawData)) {
-            Integer remainder = id % ConstantStr.SUB_TABLE_NUM;
-//            rawDataDao.addRawData(id, remainder, rawData);
+    public void addEventRawData(RawData rawData) {
+        if (Blank.isNotEmpty(rawData)) {
+            rawDataDao.addEventRawData(rawData);
         }
     }
 
@@ -222,12 +195,12 @@ public class OpcAsyncTask {
     /**
      * 事件驱动报表异步添加数据
      */
-    public void addEventTable(Integer tableReportId,List<BigDecimal> eventDataValueList, List<String> eventDataValueTimeList){
+    public void addEventTable(Integer tableReportId, List<BigDecimal> eventDataValueList, List<String> eventDataValueTimeList) {
         ReportTable reportTable = reportTableDao.getReportTableById(tableReportId);
         String reportTableData = reportTable.getReportTableData();
         JSONObject jsonObject = JSONObject.parseObject(reportTableData);
         JSONArray objects = jsonObject.getJSONArray("tables");
-        if (Blank.isEmpty(objects)){
+        if (Blank.isEmpty(objects)) {
             ReportTable reportTable1 = new ReportTable();
             reportTable1.setTableTemplateId(reportTable.getTableTemplateId());
             reportTable1.setUserId(reportTable.getUserId());

+ 6 - 9
chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/task/OpcUaChangeTask.java

@@ -85,11 +85,9 @@ public class OpcUaChangeTask extends TimerTask {
                 }
                 Object value = dataValue.getValue().getValue();
                 String javaType = OpcUaUtil.getValType(dataValue);
-                redisUtil.set(ConstantStr.JAVA_TYPE + id + itemId, javaType, ConstantStr.TWO_HOUR);
                 Date time = dataValue.getServerTime().getJavaDate();
 
                 //归属时间
-                String storageYmdh = String.valueOf(redisUtil.get(ConstantStr.VALUE_BELONG_TIME + id + itemId));
                 String currentYmdh = DateUtil.dateChangeStr(time, timeFormat);
                 if (Blank.isEmpty(sqlCurrentYmdh)) {
                     sqlCurrentYmdh = currentYmdh;
@@ -114,14 +112,14 @@ public class OpcUaChangeTask extends TimerTask {
                             if (eventMode.equals(ConstantStr.EVENT_MODEL_BOOLEAN)) {
                                 if ((dmData ? ConstantStr.BOOLEAN_TRUE : ConstantStr.BOOLEAN_FALSE).equals(eventValue.intValue())) {
                                     eventFlage = true;
-                                    opcAsyncTask.addEventRawData(id, rawData);
+                                    opcAsyncTask.addEventRawData(rawData);
                                 } else {
                                     eventFlage = false;
                                 }
                             }
                         } else {
                             if (eventFlage) {
-                                opcAsyncTask.addEventRawData(id, rawData);
+                                opcAsyncTask.addEventRawData(rawData);
                             }
                         }
                     }
@@ -141,21 +139,21 @@ public class OpcUaChangeTask extends TimerTask {
                                 if (eventMode.equals(ConstantStr.EVENT_MODEL_EXCEED)) {
                                     if (dmData.compareTo(bigEventValue) == 1) {
                                         eventFlage = true;
-                                        opcAsyncTask.addEventRawData(id, rawData);
+                                        opcAsyncTask.addEventRawData(rawData);
                                     } else {
                                         eventFlage = false;
                                     }
                                 } else if (eventMode.equals(ConstantStr.EVENT_MODEL_LOWER)) {
                                     if (dmData.compareTo(bigEventValue) == -1) {
                                         eventFlage = true;
-                                        opcAsyncTask.addEventRawData(id, rawData);
+                                        opcAsyncTask.addEventRawData(rawData);
                                     } else {
                                         eventFlage = false;
                                     }
                                 }
                             } else {
                                 if (eventFlage) {
-                                    opcAsyncTask.addEventRawData(id, rawData);
+                                    opcAsyncTask.addEventRawData(rawData);
                                 }
                             }
                         }
@@ -166,12 +164,11 @@ public class OpcUaChangeTask extends TimerTask {
 
                         if (Blank.isEmpty(eventMode, eventValue, tableReportId)) {
                             if (eventFlage) {
-                                opcAsyncTask.addEventRawData(id, rawData);
+                                opcAsyncTask.addEventRawData(rawData);
                             }
                         }
                     }
                 }
-
             } catch (Exception e) {
                 //执行组装数据库的数据,以及生成驱动报表
                 opcAsyncTask.packageRawDataList(itemList, dataSourceId, sqlCurrentYmdh);

+ 53 - 213
chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/task/OpcUaExceedTask.java

@@ -39,6 +39,8 @@ public class OpcUaExceedTask extends TimerTask {
 
     private final String timeFormat;
 
+    private Boolean eventFlage = false;
+
     public OpcUaExceedTask(RedisUtil redisUtil,
                            OpcAsyncTask opcAsyncTask,
                            ItemGroupDao itemGroupDao,
@@ -75,6 +77,7 @@ public class OpcUaExceedTask extends TimerTask {
             NodeId n = new NodeId(item.getNodeIndex(), itemId);
             DataModel dm = map.get(itemId);
             BigDecimal bigModeValue = new BigDecimal(itemGroup.getModeValue());
+            String sqlCurrentYmdh = String.valueOf(redisUtil.get(ConstantStr.VALUE_BELONG_TIME + id + itemId));
             try {
                 DataValue dataValue = opcUaClient.readValue(0.0, TimestampsToReturn.Both, n).get();
                 if (!dataValue.getStatusCode().isGood()) {
@@ -82,12 +85,19 @@ public class OpcUaExceedTask extends TimerTask {
                 }
                 Object value = dataValue.getValue().getValue();
                 String javaType = OpcUaUtil.getValType(dataValue);
-                redisUtil.set(ConstantStr.JAVA_TYPE + id + itemId, javaType, ConstantStr.TWO_HOUR);
                 Date time = dataValue.getServerTime().getJavaDate();
 
-                //归属时间
-                String storageYmdh = String.valueOf(redisUtil.get(ConstantStr.VALUE_BELONG_TIME + id + itemId));
                 String currentYmdh = DateUtil.dateChangeStr(time, timeFormat);
+                if (Blank.isEmpty(sqlCurrentYmdh)) {
+                    sqlCurrentYmdh = currentYmdh;
+                    redisUtil.set(ConstantStr.VALUE_BELONG_TIME + id, currentYmdh, ConstantStr.TWO_HOUR);
+                } else {
+                    if (!sqlCurrentYmdh.equals(currentYmdh)) {
+                        //组装相应的数据
+                        opcAsyncTask.packageRawData(item, dataSourceId, sqlCurrentYmdh);
+                        redisUtil.set(ConstantStr.VALUE_BELONG_TIME + id, currentYmdh, ConstantStr.TWO_HOUR);
+                    }
+                }
                 String currentYmdhmss = DateUtil.dateChangeStrYmdhmss(time);
                 if (!javaType.toLowerCase().equals("boolean")) {
                     try {
@@ -95,196 +105,63 @@ public class OpcUaExceedTask extends TimerTask {
                         BigDecimal dmData = Blank.isNotEmpty(dm) ?
                                 MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) :
                                 bigDecimal;
-                        if (Blank.isEmpty(storageYmdh)) {
-                            if (dmData.compareTo(bigModeValue) == 1) {
-                                redisUtil.set(ConstantStr.VALUE_BELONG_TIME + id + itemId, currentYmdh, ConstantStr.TWO_HOUR);
-
-                                List<BigDecimal> dataValueList = new ArrayList<>();
-                                dataValueList.add(dmData);
-                                redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, ConstantStr.TWO_HOUR);
+                        if (dmData.compareTo(bigModeValue) == 1) {
+                            RawData rawData = new RawData(id, dataSourceId, itemId, javaType, JSON.toJSONString(dmData),
+                                    currentYmdhmss, currentYmdh, new Date());
+                            opcAsyncTask.addTempRawData(rawData);
 
-                                List<String> dataValueTimeList = new ArrayList<>();
-                                dataValueTimeList.add(currentYmdhmss);
-                                redisUtil.set(ConstantStr.DATA_VALUE_TIME + id + itemId, dataValueTimeList, ConstantStr.TWO_HOUR);
-                            }
                             if (Blank.isNotEmpty(eventMode) && Blank.isNotEmpty(eventValue) && Blank.isNotEmpty(tableReportId)) {
                                 BigDecimal bigEventValue = new BigDecimal(eventValue);
                                 if (eventMode.equals(ConstantStr.EVENT_MODEL_EXCEED)) {
                                     if (dmData.compareTo(bigEventValue) == 1) {
-                                        List<BigDecimal> eventDataValueList = new ArrayList<>();
-                                        eventDataValueList.add(dmData);
-                                        redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemId, eventDataValueList, ConstantStr.TWO_HOUR);
-
-                                        List<String> eventDataValueTimeList = new ArrayList<>();
-                                        eventDataValueTimeList.add(currentYmdhmss);
-                                        redisUtil.set(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId, eventDataValueTimeList, ConstantStr.TWO_HOUR);
+                                        eventFlage = true;
+                                        opcAsyncTask.addEventRawData(rawData);
+                                    } else {
+                                        eventFlage = false;
                                     }
                                 } else if (eventMode.equals(ConstantStr.EVENT_MODEL_LOWER)) {
                                     if (dmData.compareTo(bigEventValue) == -1) {
-                                        List<BigDecimal> eventDataValueList = new ArrayList<>();
-                                        eventDataValueList.add(dmData);
-                                        redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemId, eventDataValueList, ConstantStr.TWO_HOUR);
-
-                                        List<String> eventDataValueTimeList = new ArrayList<>();
-                                        eventDataValueTimeList.add(currentYmdhmss);
-                                        redisUtil.set(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId, eventDataValueTimeList, ConstantStr.TWO_HOUR);
-                                    }
-                                }
-                            }
-                        } else {
-                            if (DateUtil.strChangeDate(storageYmdh, timeFormat).getTime() == DateUtil.strChangeDate(currentYmdh, timeFormat).getTime()) {
-                                if (dmData.compareTo(bigModeValue) == 1) {
-                                    Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                                    List<BigDecimal> dataValueList = JavaTypeUtil.objChangeListBig(dataValueObject);
-                                    dataValueList.add(dmData);
-                                    redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, ConstantStr.TWO_HOUR);
-
-                                    Object dataValueTimeObject = redisUtil.get(ConstantStr.DATA_VALUE_TIME + id + itemId);
-                                    List<String> dataValueTimeList = JavaTypeUtil.objChangeListStr(dataValueTimeObject);
-                                    dataValueTimeList.add(currentYmdhmss);
-                                    redisUtil.set(ConstantStr.DATA_VALUE_TIME + id + itemId, dataValueTimeList, ConstantStr.TWO_HOUR);
-                                }
-
-                                if (Blank.isNotEmpty(eventMode) && Blank.isNotEmpty(eventValue) && Blank.isNotEmpty(tableReportId)) {
-                                    BigDecimal bigEventValue = new BigDecimal(eventValue);
-                                    if (eventMode.equals(ConstantStr.EVENT_MODEL_EXCEED)) {
-                                        if (dmData.compareTo(bigEventValue) == 1) {
-                                            Object eventDataValueObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE + id + itemId);
-                                            List<BigDecimal> eventDataValueList = JavaTypeUtil.objChangeListBig(eventDataValueObject);
-                                            eventDataValueList.add(dmData);
-                                            redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemId, eventDataValueList, ConstantStr.TWO_HOUR);
-
-                                            Object eventDataValueTimeObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId);
-                                            List<String> eventDataValueTimeList = JavaTypeUtil.objChangeListStr(eventDataValueTimeObject);
-                                            eventDataValueTimeList.add(currentYmdhmss);
-                                            redisUtil.set(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId, eventDataValueTimeList, ConstantStr.TWO_HOUR);
-                                        }
-                                    } else if (eventMode.equals(ConstantStr.EVENT_MODEL_LOWER)) {
-                                        if (dmData.compareTo(bigEventValue) == -1) {
-                                            Object eventDataValueObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE + id + itemId);
-                                            List<BigDecimal> eventDataValueList = JavaTypeUtil.objChangeListBig(eventDataValueObject);
-                                            eventDataValueList.add(dmData);
-                                            redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemId, eventDataValueList, ConstantStr.TWO_HOUR);
-
-                                            Object eventDataValueTimeObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId);
-                                            List<String> eventDataValueTimeList = JavaTypeUtil.objChangeListStr(eventDataValueTimeObject);
-                                            eventDataValueTimeList.add(currentYmdhmss);
-                                            redisUtil.set(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId, eventDataValueTimeList, ConstantStr.TWO_HOUR);
-                                        }
+                                        eventFlage = true;
+                                        opcAsyncTask.addEventRawData(rawData);
+                                    } else {
+                                        eventFlage = false;
                                     }
                                 }
                             } else {
-                                String valueBelongTime = String.valueOf(redisUtil.get(ConstantStr.VALUE_BELONG_TIME + id + itemId));
-
-                                Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                                List<BigDecimal> dataValueList = JavaTypeUtil.objChangeListBig(dataValueObject);
-
-                                Object dataValueTimeObject = redisUtil.get(ConstantStr.DATA_VALUE_TIME + id + itemId);
-                                List<String> dataValueTimeList = JavaTypeUtil.objChangeListStr(dataValueTimeObject);
-
-                                //存数据
-                                RawData rawData = new RawData(id, dataSourceId, itemId, javaType, JSON.toJSONString(dataValueList), String.valueOf(dataValueTimeList), String.valueOf(valueBelongTime), new Date());
-                                opcAsyncTask.addRawData(id, rawData);
-
-                                if (Blank.isNotEmpty(eventMode) && Blank.isNotEmpty(eventValue) && Blank.isNotEmpty(tableReportId)) {
-                                    BigDecimal bigEventValue = new BigDecimal(eventValue);
-                                    if (eventMode.equals(ConstantStr.EVENT_MODEL_EXCEED)) {
-                                        Object eventDataValueObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE + id + itemId);
-                                        List<BigDecimal> eventDataValueList = JavaTypeUtil.objChangeListBig(eventDataValueObject);
-
-                                        Object eventDataValueTimeObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId);
-                                        List<String> eventDataValueTimeList = JavaTypeUtil.objChangeListStr(eventDataValueTimeObject);
-                                        opcAsyncTask.addEventTable(tableReportId, eventDataValueList, eventDataValueTimeList);
-                                        eventDataValueList = new ArrayList<>();
-                                        eventDataValueTimeList = new ArrayList<>();
-                                        if (dmData.compareTo(bigEventValue) == 1) {
-                                            eventDataValueList.add(dmData);
-                                            eventDataValueTimeList.add(currentYmdhmss);
-                                        }
-                                        redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemId, eventDataValueList, ConstantStr.TWO_HOUR);
-                                        redisUtil.set(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId, eventDataValueTimeList, ConstantStr.TWO_HOUR);
-                                    } else if (eventMode.equals(ConstantStr.EVENT_MODEL_LOWER)) {
-                                        Object eventDataValueObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE + id + itemId);
-                                        List<BigDecimal> eventDataValueList = JavaTypeUtil.objChangeListBig(eventDataValueObject);
-
-                                        Object eventDataValueTimeObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId);
-                                        List<String> eventDataValueTimeList = JavaTypeUtil.objChangeListStr(eventDataValueTimeObject);
-                                        opcAsyncTask.addEventTable(tableReportId, eventDataValueList, eventDataValueTimeList);
-                                        eventDataValueList = new ArrayList<>();
-                                        eventDataValueTimeList = new ArrayList<>();
-                                        if (dmData.compareTo(bigEventValue) == -1) {
-                                            eventDataValueList.add(dmData);
-                                            eventDataValueTimeList.add(currentYmdhmss);
-                                        }
-                                        redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemId, eventDataValueList, ConstantStr.TWO_HOUR);
-                                        redisUtil.set(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId, eventDataValueTimeList, ConstantStr.TWO_HOUR);
-                                    }
-                                }
-
-                                dataValueList = new ArrayList<>();
-                                dataValueTimeList = new ArrayList<>();
-                                if (dmData.compareTo(bigModeValue) == 1) {
-                                    dataValueList.add(dmData);
-                                    dataValueTimeList.add(currentYmdhmss);
+                                if (eventFlage) {
+                                    opcAsyncTask.addEventRawData(rawData);
                                 }
-                                redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, ConstantStr.TWO_HOUR);
-                                redisUtil.set(ConstantStr.VALUE_BELONG_TIME + id + itemId, currentYmdh, ConstantStr.TWO_HOUR);
-                                redisUtil.set(ConstantStr.DATA_VALUE_TIME + id + itemId, dataValueTimeList, ConstantStr.TWO_HOUR);
                             }
                         }
                     } catch (Exception e) {
+                        RawData rawData = new RawData(id, dataSourceId, itemId, javaType, JSON.toJSONString(value.toString()),
+                                currentYmdhmss, currentYmdh, new Date());
+                        opcAsyncTask.addTempRawData(rawData);
 
-                    }
-                }
-            } catch (Exception e) {
-                //存入已有的数据
-                String valueBelongTime = String.valueOf(redisUtil.get(ConstantStr.VALUE_BELONG_TIME + id + itemId));
-
-                Object dataValueTimeObject = redisUtil.get(ConstantStr.DATA_VALUE_TIME + id + itemId);
-                List<String> dataValueTimeList = JavaTypeUtil.objChangeListStr(dataValueTimeObject);
-
-                String javaType = String.valueOf(redisUtil.get(ConstantStr.JAVA_TYPE + id + itemId));
-                if (!javaType.toLowerCase().equals("boolean")) {
-                    try {
-                        Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                        List<BigDecimal> dataValueList = JavaTypeUtil.objChangeListBig(dataValueObject);
-                        //存数据
-                        RawData rawData = new RawData(id, dataSourceId,
-                                itemId,
-                                javaType,
-                                JSON.toJSONString(dataValueList),
-                                String.valueOf(dataValueTimeList),
-                                String.valueOf(valueBelongTime),
-                                new Date());
-                        opcAsyncTask.addRawData(id, rawData);
-
-                        if (Blank.isNotEmpty(eventMode) && Blank.isNotEmpty(eventValue) && Blank.isNotEmpty(tableReportId)) {
-                            if (eventMode.equals(ConstantStr.EVENT_MODEL_EXCEED) ||
-                                    eventMode.equals(ConstantStr.EVENT_MODEL_LOWER)) {
-                                Object eventDataValueObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE + id + itemId);
-                                List<BigDecimal> eventDataValueList = JavaTypeUtil.objChangeListBig(eventDataValueObject);
-
-                                Object eventDataValueTimeObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId);
-                                List<String> eventDataValueTimeList = JavaTypeUtil.objChangeListStr(eventDataValueTimeObject);
-                                opcAsyncTask.addEventTable(tableReportId, eventDataValueList, eventDataValueTimeList);
+                        if (Blank.isEmpty(eventMode, eventValue, tableReportId)) {
+                            if (eventFlage) {
+                                opcAsyncTask.addEventRawData(rawData);
                             }
                         }
-                    } catch (Exception e1) {
-
                     }
                 }
-                redisUtil.del(ConstantStr.DATA_VALUE + id + itemId);
-                redisUtil.del(ConstantStr.DATA_VALUE_TIME + id + itemId);
-                redisUtil.del(ConstantStr.VALUE_BELONG_TIME + id + itemId);
-
-                redisUtil.del(ConstantStr.ITEM_GROUP + id + itemId);
+            } catch (Exception e) {
+                //执行组装数据库的数据,以及生成驱动报表
+                opcAsyncTask.packageRawDataList(itemList, dataSourceId, sqlCurrentYmdh);
+                redisUtil.del(ConstantStr.VALUE_BELONG_TIME + id);
 
                 messageNoticeDao.addMessageNotice(new MessageNotice(itemGroup.getUserId(),
                         itemGroup.getGroupName() + "-" + itemId + DateUtil.dateChangeStrYmdhms(new Date()) + "运行失败",
                         e.getMessage(),
                         ConstantStr.NO_READ));
 
-                redisUtil.set(ConstantStr.ITEM_GROUP + id, false);
+                if (Blank.isNotEmpty(opcUaClient)) {
+                    opcUaClient.disconnect();
+                }
+
+                redisUtil.del(ConstantStr.ITEM_GROUP + id);
+                itemGroupDao.runItemGroupById(id, ConstantStr.STOP_IT);
+                timer.cancel();
             }
         }
         Boolean flage = (Boolean) redisUtil.get(ConstantStr.ITEM_GROUP + id);
@@ -292,52 +169,15 @@ public class OpcUaExceedTask extends TimerTask {
             flage = false;
         }
         if (!flage) {
-            for (Item item : itemList) {
-                String itemId = item.getItemReadName();
-                Integer eventMode = item.getEventMode();
-                Double eventValue = item.getEventValue();
-                Integer tableReportId = item.getTableReportId();
-                String valueBelongTime = String.valueOf(redisUtil.get(ConstantStr.VALUE_BELONG_TIME + id + itemId));
-
-                Object dataValueTimeObject = redisUtil.get(ConstantStr.DATA_VALUE_TIME + id + itemId);
-                List<String> dataValueTimeList = JavaTypeUtil.objChangeListStr(dataValueTimeObject);
-
-                String javaType = String.valueOf(redisUtil.get(ConstantStr.JAVA_TYPE + id + itemId));
-                if (!javaType.toLowerCase().equals("boolean")) {
-                    try {
-                        Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                        List<BigDecimal> dataValueList = JavaTypeUtil.objChangeListBig(dataValueObject);
-                        //存数据
-                        RawData rawData = new RawData(id, dataSourceId,
-                                itemId,
-                                javaType,
-                                JSON.toJSONString(dataValueList),
-                                String.valueOf(dataValueTimeList),
-                                String.valueOf(valueBelongTime),
-                                new Date());
-                        opcAsyncTask.addRawData(id, rawData);
-
-                        if (Blank.isNotEmpty(eventMode) && Blank.isNotEmpty(eventValue) && Blank.isNotEmpty(tableReportId)) {
-                            if (eventMode.equals(ConstantStr.EVENT_MODEL_EXCEED) ||
-                                    eventMode.equals(ConstantStr.EVENT_MODEL_LOWER)) {
-                                Object eventDataValueObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE + id + itemId);
-                                List<BigDecimal> eventDataValueList = JavaTypeUtil.objChangeListBig(eventDataValueObject);
-
-                                Object eventDataValueTimeObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId);
-                                List<String> eventDataValueTimeList = JavaTypeUtil.objChangeListStr(eventDataValueTimeObject);
-                                opcAsyncTask.addEventTable(tableReportId, eventDataValueList, eventDataValueTimeList);
-                            }
-                        }
-                    } catch (Exception e1) {
-
-                    }
-                }
-                redisUtil.del(ConstantStr.DATA_VALUE + id + itemId);
-                redisUtil.del(ConstantStr.DATA_VALUE_TIME + id + itemId);
-                redisUtil.del(ConstantStr.VALUE_BELONG_TIME + id + itemId);
-
-                redisUtil.del(ConstantStr.ITEM_GROUP + id + itemId);
-            }
+            //执行组装数据库的数据,以及生成驱动报表
+            String sqlCurrentYmdh = String.valueOf(redisUtil.get(ConstantStr.VALUE_BELONG_TIME + id));
+            opcAsyncTask.packageRawDataList(itemList, dataSourceId, sqlCurrentYmdh);
+            redisUtil.del(ConstantStr.VALUE_BELONG_TIME + id);
+
+            messageNoticeDao.addMessageNotice(new MessageNotice(itemGroup.getUserId(),
+                    itemGroup.getGroupName() + DateUtil.dateChangeStrYmdhms(new Date()) + "运行停止",
+                    "请刷新检查组的运行状态",
+                    ConstantStr.NO_READ));
 
             if (Blank.isNotEmpty(opcUaClient)) {
                 opcUaClient.disconnect();

+ 8 - 10
chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/task/OpcUaFrequencyTask.java

@@ -86,10 +86,8 @@ public class OpcUaFrequencyTask extends TimerTask {
                 }
                 Object value = dataValue.getValue().getValue();
                 String javaType = OpcUaUtil.getValType(dataValue);
-                redisUtil.set(ConstantStr.JAVA_TYPE + id + itemId, javaType, ConstantStr.TWO_HOUR);
                 Date time = dataValue.getServerTime().getJavaDate();
 
-                //归属时间
                 String currentYmdh = DateUtil.dateChangeStr(time, timeFormat);
                 if (Blank.isEmpty(sqlCurrentYmdh)) {
                     sqlCurrentYmdh = currentYmdh;
@@ -113,17 +111,17 @@ public class OpcUaFrequencyTask extends TimerTask {
                         if (eventMode.equals(ConstantStr.EVENT_MODEL_BOOLEAN)) {
                             if ((dmData ? ConstantStr.BOOLEAN_TRUE : ConstantStr.BOOLEAN_FALSE).equals(eventValue.intValue())) {
                                 eventFlage = true;
-                                opcAsyncTask.addEventRawData(id, rawData);
+                                opcAsyncTask.addEventRawData(rawData);
                             } else {
                                 eventFlage = false;
                             }
                         }
                     } else {
                         if (eventFlage) {
-                            opcAsyncTask.addEventRawData(id, rawData);
+                            opcAsyncTask.addEventRawData(rawData);
                         }
                     }
-                }else{
+                } else {
                     try {
                         BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
                         BigDecimal dmData = Blank.isNotEmpty(dm) ?
@@ -138,31 +136,31 @@ public class OpcUaFrequencyTask extends TimerTask {
                             if (eventMode.equals(ConstantStr.EVENT_MODEL_EXCEED)) {
                                 if (dmData.compareTo(bigEventValue) == 1) {
                                     eventFlage = true;
-                                    opcAsyncTask.addEventRawData(id, rawData);
+                                    opcAsyncTask.addEventRawData(rawData);
                                 } else {
                                     eventFlage = false;
                                 }
                             } else if (eventMode.equals(ConstantStr.EVENT_MODEL_LOWER)) {
                                 if (dmData.compareTo(bigEventValue) == -1) {
                                     eventFlage = true;
-                                    opcAsyncTask.addEventRawData(id, rawData);
+                                    opcAsyncTask.addEventRawData(rawData);
                                 } else {
                                     eventFlage = false;
                                 }
                             }
                         } else {
                             if (eventFlage) {
-                                opcAsyncTask.addEventRawData(id, rawData);
+                                opcAsyncTask.addEventRawData(rawData);
                             }
                         }
-                    }catch (Exception e){
+                    } catch (Exception e) {
                         RawData rawData = new RawData(id, dataSourceId, itemId, javaType, JSON.toJSONString(value.toString()),
                                 currentYmdhmss, currentYmdh, new Date());
                         opcAsyncTask.addTempRawData(rawData);
 
                         if (Blank.isEmpty(eventMode, eventValue, tableReportId)) {
                             if (eventFlage) {
-                                opcAsyncTask.addEventRawData(id, rawData);
+                                opcAsyncTask.addEventRawData(rawData);
                             }
                         }
                     }

+ 53 - 221
chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/task/OpcUaLowerTask.java

@@ -38,6 +38,8 @@ public class OpcUaLowerTask extends TimerTask {
 
     private final String timeFormat;
 
+    private Boolean eventFlage = false;
+
     public OpcUaLowerTask(RedisUtil redisUtil,
                           OpcAsyncTask opcAsyncTask,
                           ItemGroupDao itemGroupDao,
@@ -74,6 +76,7 @@ public class OpcUaLowerTask extends TimerTask {
             NodeId n = new NodeId(item.getNodeIndex(), itemId);
             DataModel dm = map.get(itemId);
             BigDecimal bigModeValue = new BigDecimal(itemGroup.getModeValue());
+            String sqlCurrentYmdh = String.valueOf(redisUtil.get(ConstantStr.VALUE_BELONG_TIME + id + itemId));
             try {
                 DataValue dataValue = opcUaClient.readValue(0.0, TimestampsToReturn.Both, n).get();
                 if (!dataValue.getStatusCode().isGood()) {
@@ -81,12 +84,19 @@ public class OpcUaLowerTask extends TimerTask {
                 }
                 Object value = dataValue.getValue().getValue();
                 String javaType = OpcUaUtil.getValType(dataValue);
-                redisUtil.set(ConstantStr.JAVA_TYPE + id + itemId, javaType, ConstantStr.TWO_HOUR);
                 Date time = dataValue.getServerTime().getJavaDate();
 
-                //归属时间
-                String storageYmdh = String.valueOf(redisUtil.get(ConstantStr.VALUE_BELONG_TIME + id + itemId));
                 String currentYmdh = DateUtil.dateChangeStr(time, timeFormat);
+                if (Blank.isEmpty(sqlCurrentYmdh)) {
+                    sqlCurrentYmdh = currentYmdh;
+                    redisUtil.set(ConstantStr.VALUE_BELONG_TIME + id, currentYmdh, ConstantStr.TWO_HOUR);
+                } else {
+                    if (!sqlCurrentYmdh.equals(currentYmdh)) {
+                        //组装相应的数据
+                        opcAsyncTask.packageRawData(item, dataSourceId, sqlCurrentYmdh);
+                        redisUtil.set(ConstantStr.VALUE_BELONG_TIME + id, currentYmdh, ConstantStr.TWO_HOUR);
+                    }
+                }
                 String currentYmdhmss = DateUtil.dateChangeStrYmdhmss(time);
                 if (!javaType.toLowerCase().equals("boolean")) {
                     try {
@@ -94,203 +104,63 @@ public class OpcUaLowerTask extends TimerTask {
                         BigDecimal dmData = Blank.isNotEmpty(dm) ?
                                 MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) :
                                 bigDecimal;
-                        if (Blank.isEmpty(storageYmdh)) {
-                            if (dmData.compareTo(bigModeValue) == -1) {
-                                redisUtil.set(ConstantStr.VALUE_BELONG_TIME + id + itemId, currentYmdh, ConstantStr.TWO_HOUR);
-
-                                List<BigDecimal> dataValueList = new ArrayList<>();
-                                dataValueList.add(dmData);
-                                redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, ConstantStr.TWO_HOUR);
+                        if (dmData.compareTo(bigModeValue) == -1) {
+                            RawData rawData = new RawData(id, dataSourceId, itemId, javaType, JSON.toJSONString(dmData),
+                                    currentYmdhmss, currentYmdh, new Date());
+                            opcAsyncTask.addTempRawData(rawData);
 
-                                List<String> dataValueTimeList = new ArrayList<>();
-                                dataValueTimeList.add(currentYmdhmss);
-                                redisUtil.set(ConstantStr.DATA_VALUE_TIME + id + itemId, dataValueTimeList, ConstantStr.TWO_HOUR);
-                            }
                             if (Blank.isNotEmpty(eventMode) && Blank.isNotEmpty(eventValue) && Blank.isNotEmpty(tableReportId)) {
                                 BigDecimal bigEventValue = new BigDecimal(eventValue);
                                 if (eventMode.equals(ConstantStr.EVENT_MODEL_EXCEED)) {
                                     if (dmData.compareTo(bigEventValue) == 1) {
-                                        List<BigDecimal> eventDataValueList = new ArrayList<>();
-                                        eventDataValueList.add(dmData);
-                                        redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemId, eventDataValueList, ConstantStr.TWO_HOUR);
-
-                                        List<String> eventDataValueTimeList = new ArrayList<>();
-                                        eventDataValueTimeList.add(currentYmdhmss);
-                                        redisUtil.set(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId, eventDataValueTimeList, ConstantStr.TWO_HOUR);
+                                        eventFlage = true;
+                                        opcAsyncTask.addEventRawData(rawData);
+                                    } else {
+                                        eventFlage = false;
                                     }
                                 } else if (eventMode.equals(ConstantStr.EVENT_MODEL_LOWER)) {
                                     if (dmData.compareTo(bigEventValue) == -1) {
-                                        List<BigDecimal> eventDataValueList = new ArrayList<>();
-                                        eventDataValueList.add(dmData);
-                                        redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemId, eventDataValueList, ConstantStr.TWO_HOUR);
-
-                                        List<String> eventDataValueTimeList = new ArrayList<>();
-                                        eventDataValueTimeList.add(currentYmdhmss);
-                                        redisUtil.set(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId, eventDataValueTimeList, ConstantStr.TWO_HOUR);
-                                    }
-                                }
-                            }
-                        } else {
-                            if (DateUtil.strChangeDate(storageYmdh, timeFormat).getTime() == DateUtil.strChangeDate(currentYmdh, timeFormat).getTime()) {
-                                if (dmData.compareTo(bigModeValue) == -1) {
-                                    Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                                    List<BigDecimal> dataValueList = JavaTypeUtil.objChangeListBig(dataValueObject);
-                                    dataValueList.add(dmData);
-                                    redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, ConstantStr.TWO_HOUR);
-
-                                    Object dataValueTimeObject = redisUtil.get(ConstantStr.DATA_VALUE_TIME + id + itemId);
-                                    List<String> dataValueTimeList = JavaTypeUtil.objChangeListStr(dataValueTimeObject);
-                                    dataValueTimeList.add(currentYmdhmss);
-                                    redisUtil.set(ConstantStr.DATA_VALUE_TIME + id + itemId, dataValueTimeList, ConstantStr.TWO_HOUR);
-                                }
-
-                                if (Blank.isNotEmpty(eventMode) && Blank.isNotEmpty(eventValue) && Blank.isNotEmpty(tableReportId)) {
-                                    BigDecimal bigEventValue = new BigDecimal(eventValue);
-                                    if (eventMode.equals(ConstantStr.EVENT_MODEL_EXCEED)) {
-                                        if (dmData.compareTo(bigEventValue) == 1) {
-                                            Object eventDataValueObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE + id + itemId);
-                                            List<BigDecimal> eventDataValueList = JavaTypeUtil.objChangeListBig(eventDataValueObject);
-                                            eventDataValueList.add(dmData);
-                                            redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemId, eventDataValueList, ConstantStr.TWO_HOUR);
-
-                                            Object eventDataValueTimeObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId);
-                                            List<String> eventDataValueTimeList = JavaTypeUtil.objChangeListStr(eventDataValueTimeObject);
-                                            eventDataValueTimeList.add(currentYmdhmss);
-                                            redisUtil.set(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId, eventDataValueTimeList, ConstantStr.TWO_HOUR);
-                                        }
-                                    } else if (eventMode.equals(ConstantStr.EVENT_MODEL_LOWER)) {
-                                        if (dmData.compareTo(bigEventValue) == -1) {
-                                            Object eventDataValueObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE + id + itemId);
-                                            List<BigDecimal> eventDataValueList = JavaTypeUtil.objChangeListBig(eventDataValueObject);
-                                            eventDataValueList.add(dmData);
-                                            redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemId, eventDataValueList, ConstantStr.TWO_HOUR);
-
-                                            Object eventDataValueTimeObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId);
-                                            List<String> eventDataValueTimeList = JavaTypeUtil.objChangeListStr(eventDataValueTimeObject);
-                                            eventDataValueTimeList.add(currentYmdhmss);
-                                            redisUtil.set(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId, eventDataValueTimeList, ConstantStr.TWO_HOUR);
-                                        }
+                                        eventFlage = true;
+                                        opcAsyncTask.addEventRawData(rawData);
+                                    } else {
+                                        eventFlage = false;
                                     }
                                 }
                             } else {
-                                String valueBelongTime = String.valueOf(redisUtil.get(ConstantStr.VALUE_BELONG_TIME + id + itemId));
-
-                                Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                                List<BigDecimal> dataValueList = JavaTypeUtil.objChangeListBig(dataValueObject);
-
-                                Object dataValueTimeObject = redisUtil.get(ConstantStr.DATA_VALUE_TIME + id + itemId);
-                                List<String> dataValueTimeList = JavaTypeUtil.objChangeListStr(dataValueTimeObject);
-
-                                //存数据
-                                RawData rawData = new RawData(id, dataSourceId,
-                                        itemId,
-                                        javaType,
-                                        JSON.toJSONString(dataValueList),
-                                        String.valueOf(dataValueTimeList),
-                                        String.valueOf(valueBelongTime),
-                                        new Date());
-                                opcAsyncTask.addRawData(id, rawData);
-
-                                if (Blank.isNotEmpty(eventMode) && Blank.isNotEmpty(eventValue) && Blank.isNotEmpty(tableReportId)) {
-                                    BigDecimal bigEventValue = new BigDecimal(eventValue);
-                                    if (eventMode.equals(ConstantStr.EVENT_MODEL_EXCEED)) {
-                                        Object eventDataValueObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE + id + itemId);
-                                        List<BigDecimal> eventDataValueList = JavaTypeUtil.objChangeListBig(eventDataValueObject);
-
-                                        Object eventDataValueTimeObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId);
-                                        List<String> eventDataValueTimeList = JavaTypeUtil.objChangeListStr(eventDataValueTimeObject);
-                                        opcAsyncTask.addEventTable(tableReportId, eventDataValueList, eventDataValueTimeList);
-                                        eventDataValueList = new ArrayList<>();
-                                        eventDataValueTimeList = new ArrayList<>();
-                                        if (dmData.compareTo(bigEventValue) == 1) {
-                                            eventDataValueList.add(dmData);
-                                            eventDataValueTimeList.add(currentYmdhmss);
-                                        }
-                                        redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemId, eventDataValueList, ConstantStr.TWO_HOUR);
-                                        redisUtil.set(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId, eventDataValueTimeList, ConstantStr.TWO_HOUR);
-                                    } else if (eventMode.equals(ConstantStr.EVENT_MODEL_LOWER)) {
-                                        Object eventDataValueObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE + id + itemId);
-                                        List<BigDecimal> eventDataValueList = JavaTypeUtil.objChangeListBig(eventDataValueObject);
-
-                                        Object eventDataValueTimeObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId);
-                                        List<String> eventDataValueTimeList = JavaTypeUtil.objChangeListStr(eventDataValueTimeObject);
-                                        opcAsyncTask.addEventTable(tableReportId, eventDataValueList, eventDataValueTimeList);
-                                        eventDataValueList = new ArrayList<>();
-                                        eventDataValueTimeList = new ArrayList<>();
-                                        if (dmData.compareTo(bigEventValue) == -1) {
-                                            eventDataValueList.add(dmData);
-                                            eventDataValueTimeList.add(currentYmdhmss);
-                                        }
-                                        redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemId, eventDataValueList, ConstantStr.TWO_HOUR);
-                                        redisUtil.set(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId, eventDataValueTimeList, ConstantStr.TWO_HOUR);
-                                    }
-                                }
-
-                                dataValueList = new ArrayList<>();
-                                dataValueTimeList = new ArrayList<>();
-                                if (dmData.compareTo(bigModeValue) == -1) {
-                                    dataValueList.add(dmData);
-                                    dataValueTimeList.add(currentYmdhmss);
+                                if (eventFlage) {
+                                    opcAsyncTask.addEventRawData(rawData);
                                 }
-                                redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, ConstantStr.TWO_HOUR);
-                                redisUtil.set(ConstantStr.VALUE_BELONG_TIME + id + itemId, currentYmdh, ConstantStr.TWO_HOUR);
-                                redisUtil.set(ConstantStr.DATA_VALUE_TIME + id + itemId, dataValueTimeList, ConstantStr.TWO_HOUR);
                             }
                         }
                     } catch (Exception e) {
+                        RawData rawData = new RawData(id, dataSourceId, itemId, javaType, JSON.toJSONString(value.toString()),
+                                currentYmdhmss, currentYmdh, new Date());
+                        opcAsyncTask.addTempRawData(rawData);
 
-                    }
-                }
-            } catch (Exception e) {
-                //存入已有的数据
-                String valueBelongTime = String.valueOf(redisUtil.get(ConstantStr.VALUE_BELONG_TIME + id + itemId));
-
-                Object dataValueTimeObject = redisUtil.get(ConstantStr.DATA_VALUE_TIME + id + itemId);
-                List<String> dataValueTimeList = JavaTypeUtil.objChangeListStr(dataValueTimeObject);
-
-                String javaType = String.valueOf(redisUtil.get(ConstantStr.JAVA_TYPE + id + itemId));
-                if (!javaType.toLowerCase().equals("boolean")) {
-                    try {
-                        Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                        List<BigDecimal> dataValueList = JavaTypeUtil.objChangeListBig(dataValueObject);
-                        //存数据
-                        RawData rawData = new RawData(id, dataSourceId,
-                                itemId,
-                                javaType,
-                                JSON.toJSONString(dataValueList),
-                                String.valueOf(dataValueTimeList),
-                                String.valueOf(valueBelongTime),
-                                new Date());
-                        opcAsyncTask.addRawData(id, rawData);
-
-                        if (Blank.isNotEmpty(eventMode) && Blank.isNotEmpty(eventValue) && Blank.isNotEmpty(tableReportId)) {
-                            BigDecimal bigEventValue = new BigDecimal(eventValue);
-                            if (eventMode.equals(ConstantStr.EVENT_MODEL_EXCEED) ||
-                                    eventMode.equals(ConstantStr.EVENT_MODEL_LOWER)) {
-                                Object eventDataValueObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE + id + itemId);
-                                List<BigDecimal> eventDataValueList = JavaTypeUtil.objChangeListBig(eventDataValueObject);
-
-                                Object eventDataValueTimeObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId);
-                                List<String> eventDataValueTimeList = JavaTypeUtil.objChangeListStr(eventDataValueTimeObject);
-                                opcAsyncTask.addEventTable(tableReportId, eventDataValueList, eventDataValueTimeList);
+                        if (Blank.isEmpty(eventMode, eventValue, tableReportId)) {
+                            if (eventFlage) {
+                                opcAsyncTask.addEventRawData(rawData);
                             }
                         }
-                    } catch (Exception e1) {
-
                     }
                 }
-                redisUtil.del(ConstantStr.DATA_VALUE + id + itemId);
-                redisUtil.del(ConstantStr.DATA_VALUE_TIME + id + itemId);
-                redisUtil.del(ConstantStr.VALUE_BELONG_TIME + id + itemId);
-
-                redisUtil.del(ConstantStr.ITEM_GROUP + id + itemId);
+            } catch (Exception e) {
+                //执行组装数据库的数据,以及生成驱动报表
+                opcAsyncTask.packageRawDataList(itemList, dataSourceId, sqlCurrentYmdh);
+                redisUtil.del(ConstantStr.VALUE_BELONG_TIME + id);
 
                 messageNoticeDao.addMessageNotice(new MessageNotice(itemGroup.getUserId(),
                         itemGroup.getGroupName() + "-" + itemId + DateUtil.dateChangeStrYmdhms(new Date()) + "运行失败",
                         e.getMessage(),
                         ConstantStr.NO_READ));
 
-                redisUtil.set(ConstantStr.ITEM_GROUP + id, false);
+                if (Blank.isNotEmpty(opcUaClient)) {
+                    opcUaClient.disconnect();
+                }
+
+                redisUtil.del(ConstantStr.ITEM_GROUP + id);
+                itemGroupDao.runItemGroupById(id, ConstantStr.STOP_IT);
+                timer.cancel();
             }
         }
         Boolean flage = (Boolean) redisUtil.get(ConstantStr.ITEM_GROUP + id);
@@ -298,53 +168,15 @@ public class OpcUaLowerTask extends TimerTask {
             flage = false;
         }
         if (!flage) {
-            for (Item item : itemList) {
-                String itemId = item.getItemReadName();
-                Integer eventMode = item.getEventMode();
-                Double eventValue = item.getEventValue();
-                Integer tableReportId = item.getTableReportId();
-                String valueBelongTime = String.valueOf(redisUtil.get(ConstantStr.VALUE_BELONG_TIME + id + itemId));
-
-                Object dataValueTimeObject = redisUtil.get(ConstantStr.DATA_VALUE_TIME + id + itemId);
-                List<String> dataValueTimeList = JavaTypeUtil.objChangeListStr(dataValueTimeObject);
-
-                String javaType = String.valueOf(redisUtil.get(ConstantStr.JAVA_TYPE + id + itemId));
-                if (!javaType.toLowerCase().equals("boolean")) {
-                    try {
-                        Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                        List<BigDecimal> dataValueList = JavaTypeUtil.objChangeListBig(dataValueObject);
-                        //存数据
-                        RawData rawData = new RawData(id, dataSourceId,
-                                itemId,
-                                javaType,
-                                JSON.toJSONString(dataValueList),
-                                String.valueOf(dataValueTimeList),
-                                String.valueOf(valueBelongTime),
-                                new Date());
-                        opcAsyncTask.addRawData(id, rawData);
-
-                        if (Blank.isNotEmpty(eventMode) && Blank.isNotEmpty(eventValue) && Blank.isNotEmpty(tableReportId)) {
-                            BigDecimal bigEventValue = new BigDecimal(eventValue);
-                            if (eventMode.equals(ConstantStr.EVENT_MODEL_EXCEED) ||
-                                    eventMode.equals(ConstantStr.EVENT_MODEL_LOWER)) {
-                                Object eventDataValueObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE + id + itemId);
-                                List<BigDecimal> eventDataValueList = JavaTypeUtil.objChangeListBig(eventDataValueObject);
-
-                                Object eventDataValueTimeObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId);
-                                List<String> eventDataValueTimeList = JavaTypeUtil.objChangeListStr(eventDataValueTimeObject);
-                                opcAsyncTask.addEventTable(tableReportId, eventDataValueList, eventDataValueTimeList);
-                            }
-                        }
-                    } catch (Exception e1) {
-
-                    }
-                }
-                redisUtil.del(ConstantStr.DATA_VALUE + id + itemId);
-                redisUtil.del(ConstantStr.DATA_VALUE_TIME + id + itemId);
-                redisUtil.del(ConstantStr.VALUE_BELONG_TIME + id + itemId);
-
-                redisUtil.del(ConstantStr.ITEM_GROUP + id + itemId);
-            }
+            //执行组装数据库的数据,以及生成驱动报表
+            String sqlCurrentYmdh = String.valueOf(redisUtil.get(ConstantStr.VALUE_BELONG_TIME + id));
+            opcAsyncTask.packageRawDataList(itemList, dataSourceId, sqlCurrentYmdh);
+            redisUtil.del(ConstantStr.VALUE_BELONG_TIME + id);
+
+            messageNoticeDao.addMessageNotice(new MessageNotice(itemGroup.getUserId(),
+                    itemGroup.getGroupName() + DateUtil.dateChangeStrYmdhms(new Date()) + "运行停止",
+                    "请刷新检查组的运行状态",
+                    ConstantStr.NO_READ));
 
             if (Blank.isNotEmpty(opcUaClient)) {
                 opcUaClient.disconnect();

+ 16 - 10
chaunyi_opc/opc_ua/src/main/resources/mapper/RawDataDao.xml

@@ -10,7 +10,8 @@
         insert into t_raw_data${remainder}
         (item_group_id, data_source_id, item_name, data_type, data_value, data_value_time, value_belong_time,
          create_time)
-        VALUES (#{rawData.itemGroupId}, #{rawData.dataSourceId}, #{rawData.itemName}, #{rawData.dataType}, #{rawData.dataValue},
+        VALUES (#{rawData.itemGroupId}, #{rawData.dataSourceId}, #{rawData.itemName}, #{rawData.dataType},
+                #{rawData.dataValue},
                 #{rawData.dataValueTime}, #{rawData.valueBelongTime}, #{rawData.createTime})
     </insert>
 
@@ -27,16 +28,21 @@
     </insert>
 
     <insert id="addTempRawData">
-        insert into
-        t_raw_data
+        insert into t_raw_data
         (item_group_id, data_source_id, item_name, data_type, data_value, data_value_time, value_belong_time,
-        create_time)
-        VALUES
-        <foreach collection="rawDataList" item="rawData" index="index" separator=",">
-            (#{rawData.itemGroupId}, #{rawData.dataSourceId}, #{rawData.itemName}, #{rawData.dataType},
-            #{rawData.dataValue},
-            #{rawData.dataValueTime}, #{rawData.valueBelongTime}, #{rawData.createTime})
-        </foreach>
+         create_time)
+        VALUES (#{rawData.itemGroupId}, #{rawData.dataSourceId}, #{rawData.itemName}, #{rawData.dataType},
+                #{rawData.dataValue},
+                #{rawData.dataValueTime}, #{rawData.valueBelongTime}, #{rawData.createTime})
+    </insert>
+
+    <insert id="addEventRawData">
+        insert into t_event_raw_data
+        (item_group_id, data_source_id, item_name, data_type, data_value, data_value_time, value_belong_time,
+         create_time)
+        VALUES (#{rawData.itemGroupId}, #{rawData.dataSourceId}, #{rawData.itemName}, #{rawData.dataType},
+                #{rawData.dataValue},
+                #{rawData.dataValueTime}, #{rawData.valueBelongTime}, #{rawData.createTime})
     </insert>
 
     <delete id="delRawDataList">