Jelajahi Sumber

修改opcua和da实现驱动报表,剩余ua上限和下限未改,回去改

zhoupeng 2 tahun lalu
induk
melakukan
e042facba1

+ 1 - 1
chaunyi_opc/opc_common/src/main/java/com/example/opc_common/entity/RawData.java

@@ -56,7 +56,7 @@ public class RawData implements Serializable {
 
     }
 
-    public RawData(Integer dataSourceId, String itemName, String dataType, String dataValue, String dataValueTime, String valueBelongTime, Date createTime) {
+    public RawData(Integer itemGroupId, Integer dataSourceId, String itemName, String dataType, String dataValue, String dataValueTime, String valueBelongTime, Date createTime) {
         this.dataSourceId = dataSourceId;
         this.itemName = itemName;
         this.dataType = dataType;

+ 10 - 2
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/dao/RawDataDao.java

@@ -10,7 +10,7 @@ import java.util.Map;
 @Repository
 public interface RawDataDao {
 
-    Integer addRawData(Integer itemGroupId, Integer remainder, RawData rawData);
+    Integer addRawData(Integer remainder, RawData rawData);
 
     Integer addRawDataList(Integer itemGroupId, Integer remainder, List<RawData> rawDataList);
 
@@ -18,9 +18,17 @@ public interface RawDataDao {
 
     List<Map<String, Object>> getPieData(Integer itemGroupId, Integer remainder, Integer dataSourceId, List<Item> itemList);
 
-    List<RawData> getTableDataEvery(Integer itemGroupId, Integer remainder, Integer dataSourceId, String itemName,String startBelongTime,String endBelongTime);
+    List<RawData> getTableDataEvery(Integer itemGroupId, Integer remainder, Integer dataSourceId, String itemName, String startBelongTime, String endBelongTime);
 
     List<RawData> getChartData(Integer itemGroupId, Integer remainder, Integer dataSourceId, String itemName, String startBelongTime, String endBelongTime);
 
     List<RawData> getPieChartData(Integer itemGroupId, Integer remainder, Integer dataSourceId, String itemName, String startBelongTime, String endBelongTime);
+
+    List<RawData> getTempRawDataList(Item item, Integer dataSourceId, String valueBelongTime);
+
+    Integer delRawDataList(List<RawData> rawDataList, String valueBelongTime);
+
+    Integer addTempRawData(RawData rawData);
+
+    RawData getRawDataList(Item item, Integer remainder, Integer dataSourceId, String valueBelongTime);
 }

+ 198 - 12
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/task/OpcAsyncTask.java

@@ -1,11 +1,9 @@
 package com.example.opc_da.task;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.example.opc_common.entity.DataSource;
-import com.example.opc_common.entity.RawData;
-import com.example.opc_common.entity.ReportTable;
-import com.example.opc_common.entity.TableAutoLog;
+import com.example.opc_common.entity.*;
 import com.example.opc_common.enums.DataSourceTypeEnum;
 import com.example.opc_common.enums.OpcDaDriverEnum;
 import com.example.opc_common.util.Blank;
@@ -30,10 +28,7 @@ import org.springframework.web.client.RestTemplate;
 import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
 
 @Component
 @Async("threadPoolTaskExecutor")
@@ -68,14 +63,136 @@ public class OpcAsyncTask {
     }
 
     /**
-     * 新增一条原始数据
+     * 新增一条临时数据
      *
      * @param rawData
      */
-    public void addRawData(Integer id, RawData rawData) {
+    public void addTempRawData(RawData rawData) {
+        if (Blank.isNotEmpty(rawData)) {
+            rawDataDao.addTempRawData(rawData);
+        }
+    }
+
+    /**
+     * 将临时数据库表中的原始数据组装为分表中的数据
+     *
+     * @param item
+     * @param sqlCurrentYmdh
+     */
+    public void packageRawData(Item item, Integer dataSourceId, String sqlCurrentYmdh) {
+        try {
+            Thread.sleep(5000);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        Integer itemGroupId = item.getItemGroupId();
+        Integer remainder = itemGroupId % ConstantStr.SUB_TABLE_NUM;
+        if (Blank.isNotEmpty(item)) {
+            RawData oldRawData = rawDataDao.getRawDataList(item, remainder, dataSourceId, sqlCurrentYmdh);
+            List<RawData> rawDataList = rawDataDao.getTempRawDataList(item, dataSourceId, sqlCurrentYmdh);
+            if (Blank.isNotEmpty(rawDataList)) {
+                RawData rawData1 = rawDataList.get(0);
+                String itemName = rawData1.getItemName();
+                String dataType = rawData1.getDataType();
+                if (dataType.equals("boolean")) {
+                    List<Boolean> dataList = Blank.isNotEmpty(oldRawData) ? Arrays.asList(JSON.parseObject(oldRawData.getDataValue(), Boolean[].class)) : new ArrayList<>();
+                    List<String> dataTimeList = Blank.isNotEmpty(oldRawData) ? Arrays.asList(JSON.parseObject(oldRawData.getDataValueTime(), String[].class)) : new ArrayList<>();
+                    for (RawData rawData : rawDataList) {
+                        dataList.add(JSON.parseObject(rawData.getDataValue(), Boolean.class));
+                        dataTimeList.add(rawData.getDataValueTime());
+                    }
+                    RawData rawData = new RawData(itemGroupId, dataSourceId, itemName, dataType, JSON.toJSONString(dataList),
+                            JSON.toJSONString(dataTimeList), sqlCurrentYmdh, new Date());
+                    rawDataDao.addRawData(remainder, rawData);
+                } else {
+                    List<String> dataTimeList = Blank.isNotEmpty(oldRawData) ? Arrays.asList(JSON.parseObject(oldRawData.getDataValueTime(), String[].class)) : new ArrayList<>();
+                    try {
+                        List<BigDecimal> dataList = Blank.isNotEmpty(oldRawData) ? Arrays.asList(JSON.parseObject(oldRawData.getDataValue(), BigDecimal[].class)) : new ArrayList<>();
+                        for (RawData rawData : rawDataList) {
+                            BigDecimal bigDecimal = JSON.parseObject(rawData.getDataValue(), BigDecimal.class);
+                            dataList.add(bigDecimal);
+                            dataTimeList.add(rawData.getDataValueTime());
+                        }
+                        RawData rawData = new RawData(itemGroupId, dataSourceId, itemName, dataType, JSON.toJSONString(dataList),
+                                JSON.toJSONString(dataTimeList), sqlCurrentYmdh, new Date());
+                        rawDataDao.addRawData(remainder, rawData);
+                    } catch (Exception e) {
+                        List<String> dataList = Blank.isNotEmpty(oldRawData) ? Arrays.asList(JSON.parseObject(oldRawData.getDataValue(), String[].class)) : new ArrayList<>();
+                        for (RawData rawData : rawDataList) {
+                            dataList.add(rawData.getDataValue());
+                            dataTimeList.add(rawData.getDataValueTime());
+                        }
+                        RawData rawData = new RawData(itemGroupId, dataSourceId, itemName, dataType, JSON.toJSONString(dataList),
+                                JSON.toJSONString(dataTimeList), sqlCurrentYmdh, new Date());
+                        rawDataDao.addRawData(remainder, rawData);
+                    }
+                }
+                rawDataDao.delRawDataList(rawDataList, sqlCurrentYmdh);
+            }
+        }
+    }
+
+    public void packageRawDataList(List<Item> itemList, Integer dataSourceId, String sqlCurrentYmdh) {
+        try {
+            Thread.sleep(50000);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        if (Blank.isNotEmpty(itemList)) {
+            Item item1 = itemList.get(0);
+            Integer itemGroupId = item1.getItemGroupId();
+            Integer remainder = itemGroupId % ConstantStr.SUB_TABLE_NUM;
+            for (Item item : itemList) {
+                RawData oldRawData = rawDataDao.getRawDataList(item, remainder, dataSourceId, sqlCurrentYmdh);
+                List<RawData> rawDataList = rawDataDao.getTempRawDataList(item, dataSourceId, sqlCurrentYmdh);
+                if (Blank.isNotEmpty(rawDataList)) {
+                    RawData rawData1 = rawDataList.get(0);
+                    String itemName = rawData1.getItemName();
+                    String dataType = rawData1.getDataType();
+                    if (dataType.equals("boolean")) {
+                        List<Boolean> dataList = Blank.isNotEmpty(oldRawData) ? Arrays.asList(JSON.parseObject(oldRawData.getDataValue(), Boolean[].class)) : new ArrayList<>();
+                        List<String> dataTimeList = Blank.isNotEmpty(oldRawData) ? Arrays.asList(JSON.parseObject(oldRawData.getDataValueTime(), String[].class)) : new ArrayList<>();
+                        for (RawData rawData : rawDataList) {
+                            dataList.add(JSON.parseObject(rawData.getDataValue(), Boolean.class));
+                            dataTimeList.add(rawData.getDataValueTime());
+                        }
+                        RawData rawData = new RawData(itemGroupId, dataSourceId, itemName, dataType, JSON.toJSONString(dataList),
+                                JSON.toJSONString(dataTimeList), sqlCurrentYmdh, new Date());
+                        rawDataDao.addRawData(remainder, rawData);
+                    } else {
+                        List<String> dataTimeList = Blank.isNotEmpty(oldRawData) ? Arrays.asList(JSON.parseObject(oldRawData.getDataValueTime(), String[].class)) : new ArrayList<>();
+                        try {
+                            List<BigDecimal> dataList = Blank.isNotEmpty(oldRawData) ? Arrays.asList(JSON.parseObject(oldRawData.getDataValue(), BigDecimal[].class)) : new ArrayList<>();
+                            for (RawData rawData : rawDataList) {
+                                BigDecimal bigDecimal = JSON.parseObject(rawData.getDataValue(), BigDecimal.class);
+                                dataList.add(bigDecimal);
+                                dataTimeList.add(rawData.getDataValueTime());
+                            }
+                            RawData rawData = new RawData(itemGroupId, dataSourceId, itemName, dataType, JSON.toJSONString(dataList),
+                                    JSON.toJSONString(dataTimeList), sqlCurrentYmdh, new Date());
+                            rawDataDao.addRawData(remainder, rawData);
+                        } catch (Exception e) {
+                            List<String> dataList = Blank.isNotEmpty(oldRawData) ? Arrays.asList(JSON.parseObject(oldRawData.getDataValue(), String[].class)) : new ArrayList<>();
+                            for (RawData rawData : rawDataList) {
+                                dataList.add(rawData.getDataValue());
+                                dataTimeList.add(rawData.getDataValueTime());
+                            }
+                            RawData rawData = new RawData(itemGroupId, dataSourceId, itemName, dataType, JSON.toJSONString(dataList),
+                                    JSON.toJSONString(dataTimeList), sqlCurrentYmdh, new Date());
+                            rawDataDao.addRawData(remainder, rawData);
+                        }
+                    }
+                    rawDataDao.delRawDataList(rawDataList, sqlCurrentYmdh);
+                }
+            }
+        }
+    }
+
+    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);
+//            rawDataDao.addRawData(id, remainder, rawData);
         }
     }
 
@@ -225,11 +342,80 @@ public class OpcAsyncTask {
     }
 
     public void addEventTable1(Integer tableReportId, Integer itemGroupId, Map<String, JSONObject> map) {
-        for (String item:map.keySet()) {
+        for (String item : map.keySet()) {
             JSONObject jsonObject = map.get(item);
             Object dataList = jsonObject.get("dataList");
             Object dataTimeList = jsonObject.get("dataTimeList");
         }
     }
 
+    public void addEventTable2(Integer dataSourceId, Integer tableReportId, List<Item> itemList, String sqlCurrentYmdh) {
+        ReportTable reportTable = reportTableDao.getReportTableById(tableReportId);
+        String reportTableData = reportTable.getReportTableData();
+        JSONObject jsonObject = JSONObject.parseObject(reportTableData);
+        JSONArray objects = jsonObject.getJSONArray("tables");
+        if (Blank.isEmpty(objects)) {
+            ReportTable reportTable1 = new ReportTable();
+            reportTable1.setTableTemplateId(reportTable.getTableTemplateId());
+            reportTable1.setUserId(reportTable.getUserId());
+            reportTable1.setReportTableName(reportTable.getReportTableName() + "_" + DateUtil.dateChangeStr(new Date(), "yyyyMMddHHmmss"));
+            reportTable1.setReportTableData(jsonObject.toJSONString());
+            reportTable1.setReportValueFormat(reportTable.getReportValueFormat());
+            reportTable1.setIsAutoReport(ConstantStr.EVENT_GENERATE_REPORT);
+            reportTable1.setVersion(reportTable.getVersion());
+            reportTableDao.addReportTable(reportTable1);
+            TableAutoLog tableAutoLog = new TableAutoLog();
+            tableAutoLog.setAutoTableId(reportTable.getId());
+            tableAutoLog.setAutoChTableId(reportTable1.getId());
+            reportTableDao.addTableAutoLog(tableAutoLog);
+            if (Blank.isNotEmpty(reportTable.getUserGroupList())) {
+                reportTableDao.addTableUserGroup(reportTable1.getId(), reportTable.getUserGroupList());
+            }
+            return;
+        }
+        JSONObject jsonObject1 = objects.getJSONObject(0);
+        JSONArray objects1 = jsonObject1.getJSONArray("item");
+        if (Blank.isNotEmpty(itemList)) {
+            Item item = itemList.get(0);
+            Integer itemGroupId = item.getItemGroupId();
+            Integer remainder = itemGroupId % ConstantStr.SUB_TABLE_NUM;
+            for (int i = 0; i < itemList.size(); i++) {
+                RawData rawData = rawDataDao.getRawDataList(itemList.get(i), remainder, dataSourceId, sqlCurrentYmdh);
+                if (Blank.isNotEmpty(rawData)) {
+                    JSONObject jsonObject2 = new JSONObject();
+                    String dataType = rawData.getDataType();
+                    if (dataType.toLowerCase().equals("boolean")) {
+                        jsonObject2.put("dataList", JSON.parseObject(rawData.getDataValueTime(), Boolean[].class));
+                    } else {
+                        try {
+                            jsonObject2.put("dataList", JSON.parseObject(rawData.getDataValueTime(), BigDecimal[].class));
+                        } catch (Exception e) {
+                            jsonObject2.put("dataList", JSON.parseObject(rawData.getDataValueTime(), String[].class));
+                        }
+                    }
+                    jsonObject2.put("dataTimeList", JSON.parseObject(rawData.getDataValueTime(), String[].class));
+                    objects1.set(i, jsonObject2);
+                }
+            }
+        }
+        objects.set(0, jsonObject1);
+        jsonObject.put("tables", objects);
+        ReportTable reportTable1 = new ReportTable();
+        reportTable1.setTableTemplateId(reportTable.getTableTemplateId());
+        reportTable1.setUserId(reportTable.getUserId());
+        reportTable1.setReportTableName(reportTable.getReportTableName() + "_" + DateUtil.dateChangeStr(new Date(), "yyyyMMddHHmmss"));
+        reportTable1.setReportTableData(jsonObject.toJSONString());
+        reportTable1.setReportValueFormat(reportTable.getReportValueFormat());
+        reportTable1.setIsAutoReport(ConstantStr.EVENT_GENERATE_REPORT);
+        reportTable1.setVersion(reportTable.getVersion());
+        reportTableDao.addReportTable(reportTable1);
+        TableAutoLog tableAutoLog = new TableAutoLog();
+        tableAutoLog.setAutoTableId(reportTable.getId());
+        tableAutoLog.setAutoChTableId(reportTable1.getId());
+        reportTableDao.addTableAutoLog(tableAutoLog);
+        if (Blank.isNotEmpty(reportTable.getUserGroupList())) {
+            reportTableDao.addTableUserGroup(reportTable1.getId(), reportTable.getUserGroupList());
+        }
+    }
+
 }

File diff ditekan karena terlalu besar
+ 35 - 902
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/task/OpcDaChangeTask.java


+ 48 - 230
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/task/OpcDaExceedTask.java

@@ -2,9 +2,10 @@ package com.example.opc_da.task;
 
 import com.alibaba.fastjson.JSON;
 import com.example.opc_common.entity.*;
-import com.example.opc_common.enums.ResultEnum;
-import com.example.opc_common.exception.CustomException;
-import com.example.opc_common.util.*;
+import com.example.opc_common.util.Blank;
+import com.example.opc_common.util.ConstantStr;
+import com.example.opc_common.util.DateUtil;
+import com.example.opc_common.util.MathUtil;
 import com.example.opc_da.dao.ItemGroupDao;
 import com.example.opc_da.dao.MessageNoticeDao;
 import com.example.opc_da.util.OpcDaUtil;
@@ -37,15 +38,17 @@ public class OpcDaExceedTask extends TimerTask {
 
     private final String timeFormat;
 
+    private Boolean eventFlage = false;
+
     public OpcDaExceedTask(RedisUtil redisUtil,
-                           OpcAsyncTask opcAsyncTask,
-                           ItemGroupDao itemGroupDao,
-                           MessageNoticeDao messageNoticeDao,
-                           Timer timer,
-                           ItemGroup itemGroup,
-                           DataSource dataSource,
-                           Map<String, DataModel> map,
-                           List<com.example.opc_common.entity.Item> itemList, String timeFormat) {
+                            OpcAsyncTask opcAsyncTask,
+                            ItemGroupDao itemGroupDao,
+                            MessageNoticeDao messageNoticeDao,
+                            Timer timer,
+                            ItemGroup itemGroup,
+                            DataSource dataSource,
+                            Map<String, DataModel> map,
+                            List<com.example.opc_common.entity.Item> itemList, String timeFormat) {
         this.redisUtil = redisUtil;
         this.opcAsyncTask = opcAsyncTask;
         this.itemGroupDao = itemGroupDao;
@@ -72,10 +75,10 @@ public class OpcDaExceedTask extends TimerTask {
                 Double eventValue = item.getEventValue();
                 Integer tableReportId = item.getTableReportId();
                 access.addItem(itemId, new DataCallback() {
-//                    private long timeLong = 0;
+                    private String sqlCurrentYmdh = "";
 
                     @Override
-                    public void changed(Item item, ItemState itemState) {
+                    public void changed(Item item1, ItemState itemState) {
                         try {
                             Map<String, Object> val = OpcDaUtil.getVal(itemState.getValue());
                             DataModel dm = map.get(itemId);
@@ -84,163 +87,52 @@ public class OpcDaExceedTask extends TimerTask {
                             //读取的值
                             Object value = val.get("value");
                             String javaType = String.valueOf(val.get("javaType"));
-                            redisUtil.set(ConstantStr.JAVA_TYPE + id + itemId, javaType, ConstantStr.TWO_HOUR);
                             //值对应取值的时间
                             Date time = itemState.getTimestamp().getTime();
-                            long time1 = time.getTime();
-//                            if (timeLong == time1) {
-//                                redisUtil.set(ConstantStr.ITEM_GROUP + id, false, ConstantStr.TWO_HOUR);
-//                            }
-//                            timeLong = time1;
                             //归属时间
-                            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);
-                            //只判断能转换为BigDecimal类型的
+
                             if (!javaType.toLowerCase().equals("boolean")) {
                                 try {
                                     BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
                                     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(id, 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(id, rawData);
+                                                } else {
+                                                    eventFlage = false;
                                                 }
                                             }
                                         } else {
-                                            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);
-
-                                            Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                                            List<BigDecimal> dataValueList = JavaTypeUtil.objChangeListBig(dataValueObject);
-                                            //存数据
-                                            RawData rawData = new RawData(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);
-                                                }
+                                            if (eventFlage) {
+                                                opcAsyncTask.addEventRawData(id, rawData);
                                             }
-
-                                            dataValueList = new ArrayList<>();
-                                            dataValueTimeList = new ArrayList<>();
-                                            if (dmData.compareTo(bigModeValue) == 1) {
-                                                dataValueList.add(dmData);
-                                                dataValueTimeList.add(currentYmdhmss);
-                                            }
-                                            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) {
@@ -248,42 +140,9 @@ public class OpcDaExceedTask extends TimerTask {
                                 }
                             }
                         } 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(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) {
-
-                                }
-                            }
+                            //执行组装数据库的数据,以及生成驱动报表
+                            opcAsyncTask.packageRawDataList(itemList,dataSourceId, sqlCurrentYmdh);
+                            redisUtil.del(ConstantStr.VALUE_BELONG_TIME + id);
 
                             messageNoticeDao.addMessageNotice(new MessageNotice(itemGroup.getUserId(),
                                     itemGroup.getGroupName() + DateUtil.dateChangeStrYmdhms(new Date()) + "运行失败",
@@ -293,9 +152,6 @@ public class OpcDaExceedTask extends TimerTask {
                             if (Blank.isNotEmpty(server)) {
                                 server.dispose();
                             }
-                            for (com.example.opc_common.entity.Item item_ : itemList) {
-                                redisUtil.del(ConstantStr.ITEM_GROUP + id + item_.getItemReadName());
-                            }
                             redisUtil.del(ConstantStr.ITEM_GROUP + id);
                             itemGroupDao.runItemGroupById(id, ConstantStr.STOP_IT);
                             timer.cancel();
@@ -310,49 +166,11 @@ public class OpcDaExceedTask extends TimerTask {
                     flage = false;
                 }
                 if (!flage) {
-                    //存已经存入redis中的数据
-                    for (com.example.opc_common.entity.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 sqlCurrentYmdh = String.valueOf(redisUtil.get(ConstantStr.VALUE_BELONG_TIME + id));
+                    opcAsyncTask.packageRawDataList(itemList,dataSourceId, sqlCurrentYmdh);
+                    redisUtil.del(ConstantStr.VALUE_BELONG_TIME + id);
 
-                        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(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.ITEM_GROUP + id + itemId);
-                    }
                     messageNoticeDao.addMessageNotice(new MessageNotice(itemGroup.getUserId(),
                             itemGroup.getGroupName() + DateUtil.dateChangeStrYmdhms(new Date()) + "运行停止",
                             "请刷新检查组的运行状态",

+ 72 - 897
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/task/OpcDaFrequencyTask.java

@@ -1,9 +1,11 @@
 package com.example.opc_da.task;
 
 import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
 import com.example.opc_common.entity.*;
-import com.example.opc_common.util.*;
+import com.example.opc_common.util.Blank;
+import com.example.opc_common.util.ConstantStr;
+import com.example.opc_common.util.DateUtil;
+import com.example.opc_common.util.MathUtil;
 import com.example.opc_da.dao.ItemGroupDao;
 import com.example.opc_da.dao.MessageNoticeDao;
 import com.example.opc_da.util.OpcDaUtil;
@@ -74,836 +76,102 @@ public class OpcDaFrequencyTask extends TimerTask {
                 Double eventValue = item.getEventValue();
                 Integer tableReportId = item.getTableReportId();
                 access.addItem(itemId, new DataCallback() {
-//                    private long timeLong = 0;
+
+                    private String sqlCurrentYmdh = "";
 
                     @Override
-                    public void changed(Item item, ItemState itemState) {
+                    public void changed(Item item1, ItemState itemState) {
                         try {
                             Map<String, Object> val = OpcDaUtil.getVal(itemState.getValue());
                             DataModel dm = map.get(itemId);
                             //读取的值
                             String javaType = String.valueOf(val.get("javaType"));
-                            redisUtil.set(ConstantStr.JAVA_TYPE + id + itemId, javaType, ConstantStr.TWO_HOUR);
                             Object value = val.get("value");
                             //值对应取值的时间
                             Date time = itemState.getTimestamp().getTime();
-//                            long time1 = time.getTime();
-//                            if (timeLong == time1) {
-//                                redisUtil.set(ConstantStr.ITEM_GROUP + id, false, ConstantStr.TWO_HOUR);
-//                            }
-//                            timeLong = time1;
-                            //归属时间
-                            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);
                             //如果redis中存储的年月日时的时间为空,说明还未进行数据的保存
                             if (javaType.toLowerCase().equals("boolean")) {
-                                if (Blank.isEmpty(storageYmdh)) {
-                                    //将当前时间(归属时间)的年月日时存入redis
-                                    redisUtil.set(ConstantStr.VALUE_BELONG_TIME + id + itemId, currentYmdh, ConstantStr.TWO_HOUR);
-
-                                    //将此时读取的数据,用集合的方式存入到redis中
-                                    List<Boolean> dataValueList = new ArrayList<>();
-                                    Boolean dmData = JSON.parseObject(value.toString(), Boolean.class);
-                                    dataValueList.add(dmData);
-                                    redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, ConstantStr.TWO_HOUR);
-
-                                    //将此时server中读取的时间,存入到redis中
-                                    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)) {
-                                        if (eventMode.equals(ConstantStr.EVENT_MODEL_BOOLEAN)) {
-                                            if ((dmData ? ConstantStr.BOOLEAN_TRUE : ConstantStr.BOOLEAN_FALSE).equals(eventValue.intValue())) {
-                                                eventFlage = true;
-                                                List<Boolean> eventDataValueList = new ArrayList<>();
-                                                List<String> eventDataValueTimeList = new ArrayList<>();
-                                                eventDataValueList.add(dmData);
-                                                redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemId, eventDataValueList, ConstantStr.TWO_HOUR);
-
-                                                eventDataValueTimeList.add(currentYmdhmss);
-                                                redisUtil.set(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId, eventDataValueTimeList, ConstantStr.TWO_HOUR);
-                                            }
-                                        }
-                                    } else {
-                                        if (eventFlage) {
-                                            List<Boolean> eventDataValueList = new ArrayList<>();
-                                            List<String> eventDataValueTimeList = new ArrayList<>();
-                                            eventDataValueList.add(dmData);
-                                            redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemId, eventDataValueList, ConstantStr.TWO_HOUR);
-
-                                            eventDataValueTimeList.add(currentYmdhmss);
-                                            redisUtil.set(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId, eventDataValueTimeList, ConstantStr.TWO_HOUR);
+                                //存数据
+                                Boolean dmData = JSON.parseObject(value.toString(), Boolean.class);
+                                RawData rawData = new RawData(id, dataSourceId, itemId, javaType, JSON.toJSONString(dmData),
+                                        currentYmdhmss, currentYmdh, new Date());
+                                opcAsyncTask.addTempRawData(rawData);
+
+                                if (Blank.isNotEmpty(eventMode) && Blank.isNotEmpty(eventValue) && Blank.isNotEmpty(tableReportId)) {
+                                    if (eventMode.equals(ConstantStr.EVENT_MODEL_BOOLEAN)) {
+                                        if ((dmData ? ConstantStr.BOOLEAN_TRUE : ConstantStr.BOOLEAN_FALSE).equals(eventValue.intValue())) {
+                                            eventFlage = true;
+                                            opcAsyncTask.addEventRawData(id, rawData);
+                                        } else {
+                                            eventFlage = false;
                                         }
                                     }
                                 } else {
-                                    //如果redis中存入的归属时间不为空,进行判断,如果现在获取的时间==redis中存入的归属时间,则认定此时的数据,为同一小时的数据,将原来的数据取出,并添加
-                                    if (DateUtil.strChangeDate(storageYmdh, timeFormat).getTime() == DateUtil.strChangeDate(currentYmdh, timeFormat).getTime()) {
-                                        Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                                        List<Boolean> dataValueList = JavaTypeUtil.objChangeListBool(dataValueObject);
-                                        Boolean dmData = JSON.parseObject(value.toString(), Boolean.class);
-                                        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)) {
-                                            if (eventMode.equals(ConstantStr.EVENT_MODEL_BOOLEAN)) {
-                                                if ((dmData ? ConstantStr.BOOLEAN_TRUE : ConstantStr.BOOLEAN_FALSE).equals(eventValue.intValue())) {
-                                                    eventFlage = true;
-                                                    Object eventDataValueObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE + id + itemId);
-                                                    List<Boolean> eventDataValueList = JavaTypeUtil.objChangeListBool(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 {
-                                                    eventFlage = false;
-                                                    //记录并生成报表
-                                                    Map<String, JSONObject> dataMap = new HashMap<>();
-                                                    for (com.example.opc_common.entity.Item item1 : itemList) {
-                                                        String itemName = item1.getItemName();
-                                                        String itemReadName = item1.getItemReadName();
-                                                        JSONObject jsonObject = new JSONObject();
-                                                        Object eventDataValueObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE + id + itemReadName);
-                                                        String itemJavaType = String.valueOf(redisUtil.get(ConstantStr.JAVA_TYPE + id + itemReadName));
-                                                        if (itemJavaType.toLowerCase().equals("boolean")) {
-                                                            List<Boolean> eventDataValueList = JavaTypeUtil.objChangeListBool(eventDataValueObject);
-                                                            if (Blank.isEmpty(eventDataValueList)) {
-                                                                break;
-                                                            }
-                                                            jsonObject.put("dataList", eventDataValueList);
-                                                            eventDataValueList = new ArrayList<>();
-                                                            redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemReadName, eventDataValueList, ConstantStr.TWO_HOUR);
-                                                        } else {
-                                                            try {
-                                                                List<BigDecimal> eventDataValueList = JavaTypeUtil.objChangeListBig(eventDataValueObject);
-                                                                if (Blank.isEmpty(eventDataValueList)) {
-                                                                    break;
-                                                                }
-                                                                jsonObject.put("dataList", eventDataValueList);
-                                                                eventDataValueList = new ArrayList<>();
-                                                                redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemReadName, eventDataValueList, ConstantStr.TWO_HOUR);
-                                                            } catch (Exception e) {
-                                                                List<String> eventDataValueList = JavaTypeUtil.objChangeListStr(eventDataValueObject);
-                                                                if (Blank.isEmpty(eventDataValueList)) {
-                                                                    break;
-                                                                }
-                                                                jsonObject.put("dataList", eventDataValueList);
-                                                                eventDataValueList = new ArrayList<>();
-                                                                redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemReadName, eventDataValueList, ConstantStr.TWO_HOUR);
-                                                            }
-                                                        }
-                                                        Object eventDataValueTimeObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemReadName);
-                                                        List<String> eventDataValueTimeList = JavaTypeUtil.objChangeListStr(eventDataValueTimeObject);
-                                                        if (Blank.isEmpty(eventDataValueTimeList)) {
-                                                            break;
-                                                        }
-                                                        jsonObject.put("dataTimeList", eventDataValueTimeList);
-                                                        dataMap.put(itemName, jsonObject);
-
-                                                        eventDataValueTimeList = new ArrayList<>();
-                                                        redisUtil.set(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemReadName, eventDataValueTimeList, ConstantStr.TWO_HOUR);
-                                                    }
-                                                    if (Blank.isNotEmpty(dataMap)) {
-                                                        opcAsyncTask.addEventTable1(tableReportId, itemGroup.getId(), dataMap);
-                                                    }
-                                                }
-                                            }
-                                        } else {
-                                            if (eventFlage) {
-                                                Object eventDataValueObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE + id + itemId);
-                                                List<Boolean> eventDataValueList = JavaTypeUtil.objChangeListBool(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 {
-                                        //如果当时获取的时间!=redis中存入的归属时间,则将redis中存入的归属时间和数据存入到数据库,redis中存入新的一个小时的数据
-                                        String valueBelongTime = String.valueOf(redisUtil.get(ConstantStr.VALUE_BELONG_TIME + id + itemId));
-
-                                        Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                                        List<Boolean> dataValueList = JavaTypeUtil.objChangeListBool(dataValueObject);
-
-                                        Object dataValueTimeObject = redisUtil.get(ConstantStr.DATA_VALUE_TIME + id + itemId);
-                                        List<String> dataValueTimeList = JavaTypeUtil.objChangeListStr(dataValueTimeObject);
-                                        //存数据
-                                        RawData rawData = new RawData(dataSourceId,
-                                                itemId,
-                                                javaType,
-                                                JSON.toJSONString(dataValueList),
-                                                String.valueOf(dataValueTimeList),
-                                                String.valueOf(valueBelongTime),
-                                                new Date());
-                                        opcAsyncTask.addRawData(id, rawData);
-
-                                        redisUtil.set(ConstantStr.VALUE_BELONG_TIME + id + itemId, currentYmdh, ConstantStr.TWO_HOUR);
-
-                                        dataValueList = new ArrayList<>();
-                                        Boolean dmData = JSON.parseObject(value.toString(), Boolean.class);
-                                        dataValueList.add(dmData);
-                                        redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, ConstantStr.TWO_HOUR);
-
-                                        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)) {
-                                            if (eventMode.equals(ConstantStr.EVENT_MODEL_BOOLEAN)) {
-                                                //记录并生成报表
-                                                Map<String, JSONObject> dataMap = new HashMap<>();
-                                                for (com.example.opc_common.entity.Item item1 : itemList) {
-                                                    String itemName = item1.getItemName();
-                                                    String itemReadName = item1.getItemReadName();
-                                                    JSONObject jsonObject = new JSONObject();
-                                                    Object eventDataValueObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE + id + itemReadName);
-                                                    String itemJavaType = String.valueOf(redisUtil.get(ConstantStr.JAVA_TYPE + id + itemReadName));
-                                                    if (itemJavaType.toLowerCase().equals("boolean")) {
-                                                        List<Boolean> eventDataValueList = JavaTypeUtil.objChangeListBool(eventDataValueObject);
-                                                        if (Blank.isEmpty(eventDataValueList)) {
-                                                            break;
-                                                        }
-                                                        jsonObject.put("dataList", eventDataValueList);
-                                                        eventDataValueList = new ArrayList<>();
-                                                        redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemReadName, eventDataValueList, ConstantStr.TWO_HOUR);
-                                                    } else {
-                                                        try {
-                                                            List<BigDecimal> eventDataValueList = JavaTypeUtil.objChangeListBig(eventDataValueObject);
-                                                            if (Blank.isEmpty(eventDataValueList)) {
-                                                                break;
-                                                            }
-                                                            jsonObject.put("dataList", eventDataValueList);
-                                                            eventDataValueList = new ArrayList<>();
-                                                            redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemReadName, eventDataValueList, ConstantStr.TWO_HOUR);
-                                                        } catch (Exception e) {
-                                                            List<String> eventDataValueList = JavaTypeUtil.objChangeListStr(eventDataValueObject);
-                                                            if (Blank.isEmpty(eventDataValueList)) {
-                                                                break;
-                                                            }
-                                                            jsonObject.put("dataList", eventDataValueList);
-                                                            eventDataValueList = new ArrayList<>();
-                                                            redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemReadName, eventDataValueList, ConstantStr.TWO_HOUR);
-                                                        }
-                                                    }
-                                                    Object eventDataValueTimeObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemReadName);
-                                                    List<String> eventDataValueTimeList = JavaTypeUtil.objChangeListStr(eventDataValueTimeObject);
-                                                    if (Blank.isEmpty(eventDataValueTimeList)) {
-                                                        break;
-                                                    }
-                                                    jsonObject.put("dataTimeList", eventDataValueTimeList);
-                                                    dataMap.put(itemName, jsonObject);
-
-                                                    eventDataValueTimeList = new ArrayList<>();
-                                                    redisUtil.set(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemReadName, eventDataValueTimeList, ConstantStr.TWO_HOUR);
-                                                }
-                                                if (Blank.isNotEmpty(dataMap)) {
-                                                    opcAsyncTask.addEventTable1(tableReportId, itemGroup.getId(), dataMap);
-                                                }
-
-                                                if ((dmData ? ConstantStr.BOOLEAN_TRUE : ConstantStr.BOOLEAN_FALSE).equals(eventValue.intValue())) {
-                                                    eventFlage = true;
-                                                    Object eventDataValueObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE + id + itemId);
-                                                    List<Boolean> eventDataValueList = JavaTypeUtil.objChangeListBool(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 {
-                                                    eventFlage = false;
-                                                }
-                                            }
-                                        } else {
-                                            if (eventFlage) {
-                                                Object eventDataValueObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE + id + itemId);
-                                                List<Boolean> eventDataValueList = JavaTypeUtil.objChangeListBool(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);
-                                            }
-                                        }
+                                    if (eventFlage) {
+                                        opcAsyncTask.addEventRawData(id, rawData);
                                     }
                                 }
                             } else {
-                                if (Blank.isEmpty(storageYmdh)) {
-                                    //将当前时间(归属时间)的年月日时存入redis
-                                    redisUtil.set(ConstantStr.VALUE_BELONG_TIME + id + itemId, currentYmdh, ConstantStr.TWO_HOUR);
-
-                                    //将此时读取的数据,用集合的方式存入到redis中
-                                    try {
-                                        List<BigDecimal> dataValueList = new ArrayList<>();
-                                        BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
-                                        BigDecimal dmData = Blank.isNotEmpty(dm) ?
-                                                MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) :
-                                                bigDecimal;
-                                        dataValueList.add(dmData);
-                                        redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, 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) {
-                                                    eventFlage = true;
-                                                    List<BigDecimal> eventDataValueList = new ArrayList<>();
-                                                    List<String> eventDataValueTimeList = new ArrayList<>();
-                                                    eventDataValueList.add(dmData);
-                                                    redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemId, eventDataValueList, ConstantStr.TWO_HOUR);
-
-                                                    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) {
-                                                    eventFlage = true;
-                                                    List<BigDecimal> eventDataValueList = new ArrayList<>();
-                                                    List<String> eventDataValueTimeList = new ArrayList<>();
-                                                    eventDataValueList.add(dmData);
-                                                    redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemId, eventDataValueList, ConstantStr.TWO_HOUR);
+                                try {
+                                    BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
+                                    BigDecimal dmData = Blank.isNotEmpty(dm) ?
+                                            MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) :
+                                            bigDecimal;
+                                    RawData rawData = new RawData(id, dataSourceId, itemId, javaType, JSON.toJSONString(dmData),
+                                            currentYmdhmss, currentYmdh, new Date());
+                                    opcAsyncTask.addTempRawData(rawData);
 
-                                                    eventDataValueTimeList.add(currentYmdhmss);
-                                                    redisUtil.set(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId, eventDataValueTimeList, ConstantStr.TWO_HOUR);
-                                                }
-                                            }
-                                        } else {
-                                            if (eventFlage) {
-                                                List<BigDecimal> eventDataValueList = new ArrayList<>();
-                                                List<String> eventDataValueTimeList = new ArrayList<>();
-                                                eventDataValueList.add(dmData);
-                                                redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemId, eventDataValueList, ConstantStr.TWO_HOUR);
-
-                                                eventDataValueTimeList.add(currentYmdhmss);
-                                                redisUtil.set(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId, eventDataValueTimeList, ConstantStr.TWO_HOUR);
-                                            }
-                                        }
-                                    } catch (Exception e) {
-                                        List<String> dataValueList = new ArrayList<>();
-                                        dataValueList.add(value.toString());
-                                        redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, ConstantStr.TWO_HOUR);
-
-                                        if (Blank.isEmpty(eventMode, eventValue, tableReportId)) {
-                                            if (eventFlage) {
-                                                List<String> eventDataValueList = new ArrayList<>();
-                                                List<String> eventDataValueTimeList = new ArrayList<>();
-                                                eventDataValueList.add(value.toString());
-                                                redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemId, eventDataValueList, ConstantStr.TWO_HOUR);
-
-                                                eventDataValueTimeList.add(currentYmdhmss);
-                                                redisUtil.set(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId, eventDataValueTimeList, ConstantStr.TWO_HOUR);
-                                            }
-                                        }
-                                    }
-
-                                    //将此时server中读取的时间,存入到redis中
-                                    List<String> dataValueTimeList = new ArrayList<>();
-                                    dataValueTimeList.add(currentYmdhmss);
-                                    redisUtil.set(ConstantStr.DATA_VALUE_TIME + id + itemId, dataValueTimeList, ConstantStr.TWO_HOUR);
-                                } else {
-                                    //如果redis中存入的归属时间不为空,进行判断,如果现在获取的时间==redis中存入的归属时间,则认定此时的数据,为同一小时的数据,将原来的数据取出,并添加
-                                    if (DateUtil.strChangeDate(storageYmdh, timeFormat).getTime() == DateUtil.strChangeDate(currentYmdh, timeFormat).getTime()) {
-                                        Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                                        try {
-                                            List<BigDecimal> dataValueList = JavaTypeUtil.objChangeListBig(dataValueObject);
-                                            BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
-                                            BigDecimal dmData = Blank.isNotEmpty(dm) ?
-                                                    MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) :
-                                                    bigDecimal;
-                                            dataValueList.add(dmData);
-                                            redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, 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) {
-                                                        eventFlage = true;
-                                                        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 {
-                                                        eventFlage = false;
-                                                        //记录并生成报表
-                                                        Map<String, JSONObject> dataMap = new HashMap<>();
-                                                        for (com.example.opc_common.entity.Item item1 : itemList) {
-                                                            String itemName = item1.getItemName();
-                                                            String itemReadName = item1.getItemReadName();
-                                                            JSONObject jsonObject = new JSONObject();
-                                                            Object eventDataValueObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE + id + itemReadName);
-                                                            String itemJavaType = String.valueOf(redisUtil.get(ConstantStr.JAVA_TYPE + id + itemReadName));
-                                                            if (itemJavaType.toLowerCase().equals("boolean")) {
-                                                                List<Boolean> eventDataValueList = JavaTypeUtil.objChangeListBool(eventDataValueObject);
-                                                                if (Blank.isEmpty(eventDataValueList)) {
-                                                                    break;
-                                                                }
-                                                                jsonObject.put("dataList", eventDataValueList);
-                                                                eventDataValueList = new ArrayList<>();
-                                                                redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemReadName, eventDataValueList, ConstantStr.TWO_HOUR);
-                                                            } else {
-                                                                try {
-                                                                    List<BigDecimal> eventDataValueList = JavaTypeUtil.objChangeListBig(eventDataValueObject);
-                                                                    if (Blank.isEmpty(eventDataValueList)) {
-                                                                        break;
-                                                                    }
-                                                                    jsonObject.put("dataList", eventDataValueList);
-                                                                    eventDataValueList = new ArrayList<>();
-                                                                    redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemReadName, eventDataValueList, ConstantStr.TWO_HOUR);
-                                                                } catch (Exception e) {
-                                                                    List<String> eventDataValueList = JavaTypeUtil.objChangeListStr(eventDataValueObject);
-                                                                    if (Blank.isEmpty(eventDataValueList)) {
-                                                                        break;
-                                                                    }
-                                                                    jsonObject.put("dataList", eventDataValueList);
-                                                                    eventDataValueList = new ArrayList<>();
-                                                                    redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemReadName, eventDataValueList, ConstantStr.TWO_HOUR);
-                                                                }
-                                                            }
-                                                            Object eventDataValueTimeObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemReadName);
-                                                            List<String> eventDataValueTimeList = JavaTypeUtil.objChangeListStr(eventDataValueTimeObject);
-                                                            if (Blank.isEmpty(eventDataValueTimeList)) {
-                                                                break;
-                                                            }
-                                                            jsonObject.put("dataTimeList", eventDataValueTimeList);
-                                                            dataMap.put(itemName, jsonObject);
-
-                                                            eventDataValueTimeList = new ArrayList<>();
-                                                            redisUtil.set(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemReadName, eventDataValueTimeList, ConstantStr.TWO_HOUR);
-                                                        }
-                                                        if (Blank.isNotEmpty(dataMap)) {
-                                                            opcAsyncTask.addEventTable1(tableReportId, itemGroup.getId(), dataMap);
-                                                        }
-                                                    }
-                                                } else if (eventMode.equals(ConstantStr.EVENT_MODEL_LOWER)) {
-                                                    if (dmData.compareTo(bigEventValue) == -1) {
-                                                        eventFlage = true;
-                                                        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 {
-                                                        eventFlage = false;
-                                                        //记录并生成报表
-                                                        Map<String, JSONObject> dataMap = new HashMap<>();
-                                                        for (com.example.opc_common.entity.Item item1 : itemList) {
-                                                            String itemName = item1.getItemName();
-                                                            String itemReadName = item1.getItemReadName();
-                                                            JSONObject jsonObject = new JSONObject();
-                                                            Object eventDataValueObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE + id + itemReadName);
-                                                            String itemJavaType = String.valueOf(redisUtil.get(ConstantStr.JAVA_TYPE + id + itemReadName));
-                                                            if (itemJavaType.toLowerCase().equals("boolean")) {
-                                                                List<Boolean> eventDataValueList = JavaTypeUtil.objChangeListBool(eventDataValueObject);
-                                                                if (Blank.isEmpty(eventDataValueList)) {
-                                                                    break;
-                                                                }
-                                                                jsonObject.put("dataList", eventDataValueList);
-                                                                eventDataValueList = new ArrayList<>();
-                                                                redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemReadName, eventDataValueList, ConstantStr.TWO_HOUR);
-                                                            } else {
-                                                                try {
-                                                                    List<BigDecimal> eventDataValueList = JavaTypeUtil.objChangeListBig(eventDataValueObject);
-                                                                    if (Blank.isEmpty(eventDataValueList)) {
-                                                                        break;
-                                                                    }
-                                                                    jsonObject.put("dataList", eventDataValueList);
-                                                                    eventDataValueList = new ArrayList<>();
-                                                                    redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemReadName, eventDataValueList, ConstantStr.TWO_HOUR);
-                                                                } catch (Exception e) {
-                                                                    List<String> eventDataValueList = JavaTypeUtil.objChangeListStr(eventDataValueObject);
-                                                                    if (Blank.isEmpty(eventDataValueList)) {
-                                                                        break;
-                                                                    }
-                                                                    jsonObject.put("dataList", eventDataValueList);
-                                                                    eventDataValueList = new ArrayList<>();
-                                                                    redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemReadName, eventDataValueList, ConstantStr.TWO_HOUR);
-                                                                }
-                                                            }
-                                                            Object eventDataValueTimeObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemReadName);
-                                                            List<String> eventDataValueTimeList = JavaTypeUtil.objChangeListStr(eventDataValueTimeObject);
-                                                            if (Blank.isEmpty(eventDataValueTimeList)) {
-                                                                break;
-                                                            }
-                                                            jsonObject.put("dataTimeList", eventDataValueTimeList);
-                                                            dataMap.put(itemName, jsonObject);
-
-                                                            eventDataValueTimeList = new ArrayList<>();
-                                                            redisUtil.set(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemReadName, eventDataValueTimeList, ConstantStr.TWO_HOUR);
-                                                        }
-                                                        if (Blank.isNotEmpty(dataMap)) {
-                                                            opcAsyncTask.addEventTable1(tableReportId, itemGroup.getId(), dataMap);
-                                                        }
-                                                    }
-                                                } else {
-                                                    if (eventFlage) {
-                                                        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);
-                                                    }
-                                                }
+                                    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) {
+                                                eventFlage = true;
+                                                opcAsyncTask.addEventRawData(id, rawData);
+                                            } else {
+                                                eventFlage = false;
                                             }
-                                        } catch (Exception e) {
-                                            List<String> dataValueList = JavaTypeUtil.objChangeListStr(dataValueObject);
-                                            dataValueList.add(value.toString());
-                                            redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, ConstantStr.TWO_HOUR);
-
-                                            if (Blank.isEmpty(eventMode, eventValue, tableReportId)) {
-                                                if (eventFlage) {
-                                                    List<String> eventDataValueList = new ArrayList<>();
-                                                    List<String> eventDataValueTimeList = new ArrayList<>();
-                                                    eventDataValueList.add(value.toString());
-                                                    redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemId, eventDataValueList, ConstantStr.TWO_HOUR);
-
-                                                    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) {
+                                                eventFlage = true;
+                                                opcAsyncTask.addEventRawData(id, rawData);
+                                            } else {
+                                                eventFlage = false;
                                             }
                                         }
-                                        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);
                                     } else {
-                                        //如果当时获取的时间!=redis中存入的归属时间,则将redis中存入的归属时间和数据存入到数据库,redis中存入新的一个小时的数据
-                                        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);
-
-                                        Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                                        try {
-                                            List<BigDecimal> dataValueList = JavaTypeUtil.objChangeListBig(dataValueObject);
-                                            //存数据
-                                            RawData rawData = new RawData(dataSourceId,
-                                                    itemId,
-                                                    javaType,
-                                                    JSON.toJSONString(dataValueList),
-                                                    String.valueOf(dataValueTimeList),
-                                                    String.valueOf(valueBelongTime),
-                                                    new Date());
-                                            opcAsyncTask.addRawData(id, rawData);
-
-                                            dataValueList = new ArrayList<>();
-                                            BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
-                                            BigDecimal dmData = Blank.isNotEmpty(dm) ?
-                                                    MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) :
-                                                    bigDecimal;
-                                            dataValueList.add(dmData);
-                                            redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, 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)) {
-                                                    //记录并生成报表
-                                                    Map<String, JSONObject> dataMap = new HashMap<>();
-                                                    for (com.example.opc_common.entity.Item item1 : itemList) {
-                                                        String itemName = item1.getItemName();
-                                                        String itemReadName = item1.getItemReadName();
-                                                        JSONObject jsonObject = new JSONObject();
-                                                        Object eventDataValueObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE + id + itemReadName);
-                                                        String itemJavaType = String.valueOf(redisUtil.get(ConstantStr.JAVA_TYPE + id + itemReadName));
-                                                        if (itemJavaType.toLowerCase().equals("boolean")) {
-                                                            List<Boolean> eventDataValueList = JavaTypeUtil.objChangeListBool(eventDataValueObject);
-                                                            if (Blank.isEmpty(eventDataValueList)) {
-                                                                break;
-                                                            }
-                                                            jsonObject.put("dataList", eventDataValueList);
-                                                            eventDataValueList = new ArrayList<>();
-                                                            redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemReadName, eventDataValueList, ConstantStr.TWO_HOUR);
-                                                        } else {
-                                                            try {
-                                                                List<BigDecimal> eventDataValueList = JavaTypeUtil.objChangeListBig(eventDataValueObject);
-                                                                if (Blank.isEmpty(eventDataValueList)) {
-                                                                    break;
-                                                                }
-                                                                jsonObject.put("dataList", eventDataValueList);
-                                                                eventDataValueList = new ArrayList<>();
-                                                                redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemReadName, eventDataValueList, ConstantStr.TWO_HOUR);
-                                                            } catch (Exception e) {
-                                                                List<String> eventDataValueList = JavaTypeUtil.objChangeListStr(eventDataValueObject);
-                                                                if (Blank.isEmpty(eventDataValueList)) {
-                                                                    break;
-                                                                }
-                                                                jsonObject.put("dataList", eventDataValueList);
-                                                                eventDataValueList = new ArrayList<>();
-                                                                redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemReadName, eventDataValueList, ConstantStr.TWO_HOUR);
-                                                            }
-                                                        }
-                                                        Object eventDataValueTimeObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemReadName);
-                                                        List<String> eventDataValueTimeList = JavaTypeUtil.objChangeListStr(eventDataValueTimeObject);
-                                                        if (Blank.isEmpty(eventDataValueTimeList)) {
-                                                            break;
-                                                        }
-                                                        jsonObject.put("dataTimeList", eventDataValueTimeList);
-                                                        dataMap.put(itemName, jsonObject);
-
-                                                        eventDataValueTimeList = new ArrayList<>();
-                                                        redisUtil.set(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemReadName, eventDataValueTimeList, ConstantStr.TWO_HOUR);
-                                                    }
-                                                    if (Blank.isNotEmpty(dataMap)) {
-                                                        opcAsyncTask.addEventTable1(tableReportId, itemGroup.getId(), dataMap);
-                                                    }
-
-                                                    if (dmData.compareTo(bigEventValue) == 1) {
-                                                        eventFlage = true;
-                                                        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 {
-                                                        eventFlage = false;
-                                                    }
-                                                } else if (eventMode.equals(ConstantStr.EVENT_MODEL_LOWER)) {
-                                                    //记录并生成报表
-                                                    Map<String, JSONObject> dataMap = new HashMap<>();
-                                                    for (com.example.opc_common.entity.Item item1 : itemList) {
-                                                        String itemName = item1.getItemName();
-                                                        String itemReadName = item1.getItemReadName();
-                                                        JSONObject jsonObject = new JSONObject();
-                                                        Object eventDataValueObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE + id + itemReadName);
-                                                        String itemJavaType = String.valueOf(redisUtil.get(ConstantStr.JAVA_TYPE + id + itemReadName));
-                                                        if (itemJavaType.toLowerCase().equals("boolean")) {
-                                                            List<Boolean> eventDataValueList = JavaTypeUtil.objChangeListBool(eventDataValueObject);
-                                                            if (Blank.isEmpty(eventDataValueList)) {
-                                                                break;
-                                                            }
-                                                            jsonObject.put("dataList", eventDataValueList);
-                                                            eventDataValueList = new ArrayList<>();
-                                                            redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemReadName, eventDataValueList, ConstantStr.TWO_HOUR);
-                                                        } else {
-                                                            try {
-                                                                List<BigDecimal> eventDataValueList = JavaTypeUtil.objChangeListBig(eventDataValueObject);
-                                                                if (Blank.isEmpty(eventDataValueList)) {
-                                                                    break;
-                                                                }
-                                                                jsonObject.put("dataList", eventDataValueList);
-                                                                eventDataValueList = new ArrayList<>();
-                                                                redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemReadName, eventDataValueList, ConstantStr.TWO_HOUR);
-                                                            } catch (Exception e) {
-                                                                List<String> eventDataValueList = JavaTypeUtil.objChangeListStr(eventDataValueObject);
-                                                                if (Blank.isEmpty(eventDataValueList)) {
-                                                                    break;
-                                                                }
-                                                                jsonObject.put("dataList", eventDataValueList);
-                                                                eventDataValueList = new ArrayList<>();
-                                                                redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemReadName, eventDataValueList, ConstantStr.TWO_HOUR);
-                                                            }
-                                                        }
-                                                        Object eventDataValueTimeObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemReadName);
-                                                        List<String> eventDataValueTimeList = JavaTypeUtil.objChangeListStr(eventDataValueTimeObject);
-                                                        if (Blank.isEmpty(eventDataValueTimeList)) {
-                                                            break;
-                                                        }
-                                                        jsonObject.put("dataTimeList", eventDataValueTimeList);
-                                                        dataMap.put(itemName, jsonObject);
-
-                                                        eventDataValueTimeList = new ArrayList<>();
-                                                        redisUtil.set(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemReadName, eventDataValueTimeList, ConstantStr.TWO_HOUR);
-                                                    }
-                                                    if (Blank.isNotEmpty(dataMap)) {
-                                                        opcAsyncTask.addEventTable1(tableReportId, itemGroup.getId(), dataMap);
-                                                    }
-
-                                                    if (dmData.compareTo(bigEventValue) == -1) {
-                                                        eventFlage = true;
-                                                        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 {
-                                                        eventFlage = false;
-                                                    }
-                                                }
-                                            } else {
-                                                if (eventFlage) {
-                                                    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);
-                                                }
-                                            }
-                                        } catch (Exception e) {
-                                            List<String> dataValueList = JavaTypeUtil.objChangeListStr(dataValueObject);
-                                            //存数据
-                                            RawData rawData = new RawData(dataSourceId,
-                                                    itemId,
-                                                    javaType,
-                                                    JSON.toJSONString(dataValueList),
-                                                    String.valueOf(dataValueTimeList),
-                                                    String.valueOf(valueBelongTime),
-                                                    new Date());
-                                            opcAsyncTask.addRawData(id, rawData);
-
-                                            dataValueList = new ArrayList<>();
-                                            dataValueList.add(value.toString());
-                                            redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, ConstantStr.TWO_HOUR);
-
-                                            if (Blank.isEmpty(eventMode, eventValue, tableReportId)) {
-                                                if (eventFlage) {
-                                                    List<String> eventDataValueList = new ArrayList<>();
-                                                    List<String> eventDataValueTimeList = new ArrayList<>();
-                                                    eventDataValueList.add(value.toString());
-                                                    redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemId, eventDataValueList, ConstantStr.TWO_HOUR);
-
-                                                    eventDataValueTimeList.add(currentYmdhmss);
-                                                    redisUtil.set(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId, eventDataValueTimeList, ConstantStr.TWO_HOUR);
-                                                }
-                                            }
+                                        if (eventFlage) {
+                                            opcAsyncTask.addEventRawData(id, rawData);
                                         }
-
-                                        redisUtil.set(ConstantStr.VALUE_BELONG_TIME + id + itemId, currentYmdh, ConstantStr.TWO_HOUR);
-
-                                        dataValueTimeList = new ArrayList<>();
-                                        dataValueTimeList.add(currentYmdhmss);
-                                        redisUtil.set(ConstantStr.DATA_VALUE_TIME + id + itemId, dataValueTimeList, ConstantStr.TWO_HOUR);
                                     }
-                                }
-                            }
-                        } catch (Exception e) {
-                            System.out.println("我进入了异常:" + e.getMessage());
-                            //存已经存入redis中的数据
-                            Map<String, JSONObject> dataMap = new HashMap<>();
-                            Integer tableReportId1 = null;
-                            for (com.example.opc_common.entity.Item item1 : itemList) {
-                                String itemName1 = item1.getItemName();
-                                String itemId1 = item1.getItemReadName();
-                                Integer eventMode1 = item1.getEventMode();
-                                Double eventValue1 = item1.getEventValue();
-                                Integer tableReportId2 = item1.getTableReportId();
-                                if (Blank.isNotEmpty(eventMode1) && Blank.isNotEmpty(eventValue1) && Blank.isNotEmpty(tableReportId2)) {
-                                    tableReportId1 = tableReportId2;
-                                }
-                                String valueBelongTime = String.valueOf(redisUtil.get(ConstantStr.VALUE_BELONG_TIME + id + itemId1));
-
-                                Object dataValueTimeObject = redisUtil.get(ConstantStr.DATA_VALUE_TIME + id + itemId1);
-                                List<String> dataValueTimeList = JavaTypeUtil.objChangeListStr(dataValueTimeObject);
-
-                                String javaType = String.valueOf(redisUtil.get(ConstantStr.JAVA_TYPE + id + itemId1));
+                                } catch (Exception e) {
+                                    RawData rawData = new RawData(id, dataSourceId, itemId, javaType, JSON.toJSONString(value.toString()),
+                                            currentYmdhmss, currentYmdh, new Date());
+                                    opcAsyncTask.addTempRawData(rawData);
 
-                                JSONObject jsonObject = new JSONObject();
-                                if (javaType.toLowerCase().equals("boolean")) {
-                                    Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId1);
-                                    List<Boolean> dataValueList = JavaTypeUtil.objChangeListBool(dataValueObject);
-                                    //存数据
-                                    RawData rawData = new RawData(dataSourceId,
-                                            itemId1,
-                                            javaType,
-                                            JSON.toJSONString(dataValueList),
-                                            String.valueOf(dataValueTimeList),
-                                            String.valueOf(valueBelongTime),
-                                            new Date());
-                                    opcAsyncTask.addRawData(id, rawData);
-
-                                    Object eventDataValueObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE + id + itemId1);
-                                    List<Boolean> eventDataValueList = JavaTypeUtil.objChangeListBool(eventDataValueObject);
-                                    if (Blank.isNotEmpty(eventDataValueList)) {
-                                        jsonObject.put("dataList", eventDataValueList);
-                                    }
-                                } else {
-                                    try {
-                                        Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId1);
-                                        List<BigDecimal> dataValueList = JavaTypeUtil.objChangeListBig(dataValueObject);
-                                        //存数据
-                                        RawData rawData = new RawData(dataSourceId,
-                                                itemId1,
-                                                javaType,
-                                                JSON.toJSONString(dataValueList),
-                                                String.valueOf(dataValueTimeList),
-                                                String.valueOf(valueBelongTime),
-                                                new Date());
-                                        opcAsyncTask.addRawData(id, rawData);
-
-                                        Object eventDataValueObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE + id + itemId1);
-                                        List<BigDecimal> eventDataValueList = JavaTypeUtil.objChangeListBig(eventDataValueObject);
-                                        if (Blank.isNotEmpty(eventDataValueList)) {
-                                            jsonObject.put("dataList", eventDataValueList);
-                                        }
-                                    } catch (Exception e1) {
-                                        Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId1);
-                                        List<String> dataValueList = JavaTypeUtil.objChangeListStr(dataValueObject);
-                                        //存数据
-                                        RawData rawData = new RawData(dataSourceId,
-                                                itemId1,
-                                                javaType,
-                                                JSON.toJSONString(dataValueList),
-                                                String.valueOf(dataValueTimeList),
-                                                String.valueOf(valueBelongTime),
-                                                new Date());
-                                        opcAsyncTask.addRawData(id, rawData);
-
-                                        Object eventDataValueObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE + id + itemId1);
-                                        List<String> eventDataValueList = JavaTypeUtil.objChangeListStr(eventDataValueObject);
-                                        if (Blank.isNotEmpty(eventDataValueList)) {
-                                            jsonObject.put("dataList", eventDataValueList);
+                                    if (Blank.isEmpty(eventMode, eventValue, tableReportId)) {
+                                        if (eventFlage) {
+                                            opcAsyncTask.addEventRawData(id, rawData);
                                         }
                                     }
                                 }
-                                redisUtil.del(ConstantStr.ITEM_GROUP + id + itemId1);
-                                redisUtil.del(ConstantStr.DATA_VALUE + id + itemId1);
-                                redisUtil.del(ConstantStr.DATA_VALUE_TIME + id + itemId1);
-                                redisUtil.del(ConstantStr.VALUE_BELONG_TIME + id + itemId1);
-
-                                Object eventDataValueTimeObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId1);
-                                List<String> eventDataValueTimeList = JavaTypeUtil.objChangeListStr(eventDataValueTimeObject);
-                                if (Blank.isNotEmpty(eventDataValueTimeList)) {
-                                    jsonObject.put("dataTimeList", eventDataValueTimeList);
-                                }
-                                if (Blank.isNotEmpty(jsonObject)) {
-                                    dataMap.put(itemName1, jsonObject);
-                                }
-                                redisUtil.del(ConstantStr.EVENT_DATA_VALUE + id + itemId1);
-                                redisUtil.del(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId1);
-                            }
-                            if (Blank.isNotEmpty(tableReportId1) && Blank.isNotEmpty(dataMap)) {
-                                opcAsyncTask.addEventTable1(tableReportId1, itemGroup.getId(), dataMap);
                             }
+                        } catch (Exception e) {
+                            //执行组装数据库的数据,以及生成驱动报表
+                            opcAsyncTask.packageRawDataList(itemList, dataSourceId, sqlCurrentYmdh);
+                            redisUtil.del(ConstantStr.VALUE_BELONG_TIME + id);
 
                             messageNoticeDao.addMessageNotice(new MessageNotice(itemGroup.getUserId(),
                                     itemGroup.getGroupName() + DateUtil.dateChangeStrYmdhms(new Date()) + "运行失败",
@@ -925,104 +193,11 @@ public class OpcDaFrequencyTask extends TimerTask {
                 if (Blank.isEmpty(flage)) {
                     flage = false;
                 }
-//                System.err.println("我从redis中取出的状态值为:" + flage);
                 if (!flage) {
-                    //存已经存入redis中的数据
-                    Map<String, JSONObject> dataMap = new HashMap<>();
-                    Integer tableReportId = null;
-                    for (com.example.opc_common.entity.Item item : itemList) {
-                        String itemName = item.getItemName();
-                        String itemId = item.getItemReadName();
-                        Integer eventMode = item.getEventMode();
-                        Double eventValue = item.getEventValue();
-                        Integer tableReportId1 = item.getTableReportId();
-                        if (Blank.isNotEmpty(eventMode) && Blank.isNotEmpty(eventValue) && Blank.isNotEmpty(tableReportId1)) {
-                            tableReportId = tableReportId1;
-                        }
-                        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));
-
-                        JSONObject jsonObject = new JSONObject();
-                        if (javaType.toLowerCase().equals("boolean")) {
-                            Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                            List<Boolean> dataValueList = JavaTypeUtil.objChangeListBool(dataValueObject);
-                            //存数据
-                            RawData rawData = new RawData(dataSourceId,
-                                    itemId,
-                                    javaType,
-                                    JSON.toJSONString(dataValueList),
-                                    String.valueOf(dataValueTimeList),
-                                    String.valueOf(valueBelongTime),
-                                    new Date());
-                            opcAsyncTask.addRawData(id, rawData);
-
-                            Object eventDataValueObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE + id + itemId);
-                            List<Boolean> eventDataValueList = JavaTypeUtil.objChangeListBool(eventDataValueObject);
-                            if (Blank.isNotEmpty(eventDataValueList)) {
-                                jsonObject.put("dataList", eventDataValueList);
-                            }
-                        } else {
-                            try {
-                                Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                                List<BigDecimal> dataValueList = JavaTypeUtil.objChangeListBig(dataValueObject);
-                                //存数据
-                                RawData rawData = new RawData(dataSourceId,
-                                        itemId,
-                                        javaType,
-                                        JSON.toJSONString(dataValueList),
-                                        String.valueOf(dataValueTimeList),
-                                        String.valueOf(valueBelongTime),
-                                        new Date());
-                                opcAsyncTask.addRawData(id, rawData);
-
-                                Object eventDataValueObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE + id + itemId);
-                                List<BigDecimal> eventDataValueList = JavaTypeUtil.objChangeListBig(eventDataValueObject);
-                                if (Blank.isNotEmpty(eventDataValueList)) {
-                                    jsonObject.put("dataList", eventDataValueList);
-                                }
-                            } catch (Exception e1) {
-                                Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                                List<String> dataValueList = JavaTypeUtil.objChangeListStr(dataValueObject);
-                                //存数据
-                                RawData rawData = new RawData(dataSourceId,
-                                        itemId,
-                                        javaType,
-                                        JSON.toJSONString(dataValueList),
-                                        String.valueOf(dataValueTimeList),
-                                        String.valueOf(valueBelongTime),
-                                        new Date());
-                                opcAsyncTask.addRawData(id, rawData);
-
-                                Object eventDataValueObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE + id + itemId);
-                                List<String> eventDataValueList = JavaTypeUtil.objChangeListStr(eventDataValueObject);
-                                if (Blank.isNotEmpty(eventDataValueList)) {
-                                    jsonObject.put("dataList", eventDataValueList);
-                                }
-                            }
-                        }
-                        redisUtil.del(ConstantStr.ITEM_GROUP + id + itemId);
-                        redisUtil.del(ConstantStr.DATA_VALUE + id + itemId);
-                        redisUtil.del(ConstantStr.DATA_VALUE_TIME + id + itemId);
-                        redisUtil.del(ConstantStr.VALUE_BELONG_TIME + id + itemId);
-
-                        Object eventDataValueTimeObject = redisUtil.get(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId);
-                        List<String> eventDataValueTimeList = JavaTypeUtil.objChangeListStr(eventDataValueTimeObject);
-                        if (Blank.isNotEmpty(eventDataValueTimeList)) {
-                            jsonObject.put("dataTimeList", eventDataValueTimeList);
-                        }
-                        if (Blank.isNotEmpty(jsonObject)) {
-                            dataMap.put(itemName, jsonObject);
-                        }
-                        redisUtil.del(ConstantStr.EVENT_DATA_VALUE + id + itemId);
-                        redisUtil.del(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId);
-                    }
-                    if (Blank.isNotEmpty(tableReportId) && Blank.isNotEmpty(dataMap)) {
-                        opcAsyncTask.addEventTable1(tableReportId, itemGroup.getId(), dataMap);
-                    }
+                    //执行组装数据库的数据,以及生成驱动报表
+                    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()) + "运行停止",

+ 40 - 222
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/task/OpcDaLowseTask.java

@@ -2,7 +2,10 @@ package com.example.opc_da.task;
 
 import com.alibaba.fastjson.JSON;
 import com.example.opc_common.entity.*;
-import com.example.opc_common.util.*;
+import com.example.opc_common.util.Blank;
+import com.example.opc_common.util.ConstantStr;
+import com.example.opc_common.util.DateUtil;
+import com.example.opc_common.util.MathUtil;
 import com.example.opc_da.dao.ItemGroupDao;
 import com.example.opc_da.dao.MessageNoticeDao;
 import com.example.opc_da.util.OpcDaUtil;
@@ -35,6 +38,8 @@ public class OpcDaLowseTask extends TimerTask {
 
     private final String timeFormat;
 
+    private Boolean eventFlage = false;
+
     public OpcDaLowseTask(RedisUtil redisUtil,
                           OpcAsyncTask opcAsyncTask,
                           ItemGroupDao itemGroupDao,
@@ -70,10 +75,10 @@ public class OpcDaLowseTask extends TimerTask {
                 Double eventValue = item.getEventValue();
                 Integer tableReportId = item.getTableReportId();
                 access.addItem(itemId, new DataCallback() {
-//                    private long timeLong = 0;
+                    private String sqlCurrentYmdh = "";
 
                     @Override
-                    public void changed(Item item, ItemState itemState) {
+                    public void changed(Item item1, ItemState itemState) {
                         try {
                             Map<String, Object> val = OpcDaUtil.getVal(itemState.getValue());
                             DataModel dm = map.get(itemId);
@@ -82,163 +87,52 @@ public class OpcDaLowseTask extends TimerTask {
                             //读取的值
                             Object value = val.get("value");
                             String javaType = String.valueOf(val.get("javaType"));
-                            redisUtil.set(ConstantStr.JAVA_TYPE + id + itemId, javaType, ConstantStr.TWO_HOUR);
                             //值对应取值的时间
                             Date time = itemState.getTimestamp().getTime();
-                            long time1 = time.getTime();
-//                            if (timeLong == time1) {
-//                                redisUtil.set(ConstantStr.ITEM_GROUP + id, false, ConstantStr.TWO_HOUR);
-//                            }
-//                            timeLong = time1;
                             //归属时间
-                            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);
-                            //只判断能转换为BigDecimal类型的
+
                             if (!javaType.toLowerCase().equals("boolean")) {
                                 try {
                                     BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
                                     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(id, 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(id, rawData);
+                                                } else {
+                                                    eventFlage = false;
                                                 }
                                             }
                                         } else {
-                                            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);
-
-                                            Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                                            List<BigDecimal> dataValueList = JavaTypeUtil.objChangeListBig(dataValueObject);
-                                            //存数据
-                                            RawData rawData = new RawData(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);
-                                                }
+                                            if (eventFlage) {
+                                                opcAsyncTask.addEventRawData(id, rawData);
                                             }
-
-                                            dataValueList = new ArrayList<>();
-                                            dataValueTimeList = new ArrayList<>();
-                                            if (dmData.compareTo(bigModeValue) == -1) {
-                                                dataValueList.add(dmData);
-                                                dataValueTimeList.add(currentYmdhmss);
-                                            }
-                                            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) {
@@ -246,43 +140,9 @@ public class OpcDaLowseTask extends TimerTask {
                                 }
                             }
                         } 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(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) {
-
-                                }
-                            }
+                            //执行组装数据库的数据,以及生成驱动报表
+                            opcAsyncTask.packageRawDataList(itemList,dataSourceId, sqlCurrentYmdh);
+                            redisUtil.del(ConstantStr.VALUE_BELONG_TIME + id);
 
                             messageNoticeDao.addMessageNotice(new MessageNotice(itemGroup.getUserId(),
                                     itemGroup.getGroupName() + DateUtil.dateChangeStrYmdhms(new Date()) + "运行失败",
@@ -292,9 +152,6 @@ public class OpcDaLowseTask extends TimerTask {
                             if (Blank.isNotEmpty(server)) {
                                 server.dispose();
                             }
-                            for (com.example.opc_common.entity.Item item_ : itemList) {
-                                redisUtil.del(ConstantStr.ITEM_GROUP + id + item_.getItemReadName());
-                            }
                             redisUtil.del(ConstantStr.ITEM_GROUP + id);
                             itemGroupDao.runItemGroupById(id, ConstantStr.STOP_IT);
                             timer.cancel();
@@ -309,50 +166,11 @@ public class OpcDaLowseTask extends TimerTask {
                     flage = false;
                 }
                 if (!flage) {
-                    //存已经存入redis中的数据
-                    for (com.example.opc_common.entity.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 sqlCurrentYmdh = String.valueOf(redisUtil.get(ConstantStr.VALUE_BELONG_TIME + id));
+                    opcAsyncTask.packageRawDataList(itemList,dataSourceId, sqlCurrentYmdh);
+                    redisUtil.del(ConstantStr.VALUE_BELONG_TIME + id);
 
-                        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(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.ITEM_GROUP + id + itemId);
-                    }
                     messageNoticeDao.addMessageNotice(new MessageNotice(itemGroup.getUserId(),
                             itemGroup.getGroupName() + DateUtil.dateChangeStrYmdhms(new Date()) + "运行停止",
                             "请刷新检查组的运行状态",

+ 46 - 2
chaunyi_opc/opc_da/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 (#{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>
 
@@ -26,6 +27,29 @@
         </foreach>
     </insert>
 
+    <insert id="addTempRawData">
+        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>
+    </insert>
+
+    <delete id="delRawDataList">
+        delete
+        from t_raw_data
+        where value_belong_time = #{valueBelongTime}
+        and
+        <foreach collection="rawDataList" item="rawData" index="index" separator=",">
+            (#{rawData.id})
+        </foreach>
+    </delete>
+
     <select id="getLineOrBarData" resultType="com.example.opc_common.entity.RawData">
         SELECT id, data_source_id, item_name, data_type, data_value, create_time
         FROM t_raw_data${remainder}
@@ -80,4 +104,24 @@
         AND value_belong_time BETWEEN #{startBelongTime} AND #{endBelongTime}
         ORDER BY value_belong_time
     </select>
-</mapper>
+
+    <select id="getTempRawDataList" resultType="com.example.opc_common.entity.RawData">
+        select data_type, data_value
+        from t_raw_data
+        where item_group_id = #{item.itemGroupId}
+          and data_souerce_id = #{dataSourceId}
+          and item_name = #{item.itemReadName}
+          and value_belong_time = #{valueBelongTime}
+        order by data_value_time desc
+    </select>
+
+    <select id="getRawDataList" resultType="com.example.opc_common.entity.RawData">
+        select
+        <include refid="rawData"/>
+        from t_raw_data${remainder}
+        where item_group_id = #{item.itemGroupId}
+        and data_souerce_id = #{dataSourceId}
+        and item_name = #{item.itemReadName}
+        and value_belong_time = #{valueBelongTime}
+    </select>
+</mapper>

+ 10 - 1
chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/dao/RawDataDao.java

@@ -1,5 +1,6 @@
 package com.example.opc_ua.dao;
 
+import com.example.opc_common.entity.Item;
 import com.example.opc_common.entity.RawData;
 import org.springframework.stereotype.Repository;
 
@@ -8,7 +9,15 @@ import java.util.List;
 @Repository
 public interface RawDataDao {
 
-    Integer addRawData(Integer itemGroupId, Integer remainder, RawData rawData);
+    Integer addRawData(Integer remainder, RawData rawData);
 
     Integer addRawDataList(Integer itemGroupId, Integer remainder, List<RawData> rawDataList);
+
+    Integer addTempRawData(RawData rawData);
+
+    RawData getRawDataList(Item item, Integer remainder, Integer dataSourceId, String valueBelongTime);
+
+    List<RawData> getTempRawDataList(Item item, Integer dataSourceId, String valueBelongTime);
+
+    Integer delRawDataList(List<RawData> rawDataList, String valueBelongTime);
 }

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

@@ -1,11 +1,9 @@
 package com.example.opc_ua.task;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.example.opc_common.entity.DataSource;
-import com.example.opc_common.entity.RawData;
-import com.example.opc_common.entity.ReportTable;
-import com.example.opc_common.entity.TableAutoLog;
+import com.example.opc_common.entity.*;
 import com.example.opc_common.util.Blank;
 import com.example.opc_common.util.ConstantStr;
 import com.example.opc_common.util.DateUtil;
@@ -22,6 +20,8 @@ import org.springframework.stereotype.Component;
 import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 
@@ -50,7 +50,7 @@ public class OpcAsyncTask {
         if (Blank.isNotEmpty(id) && Blank.isNotEmpty(rawData)) {
             if (Blank.isNotEmpty(rawData.getValueBelongTime())) {
                 Integer remainder = id % ConstantStr.SUB_TABLE_NUM;
-                rawDataDao.addRawData(id, remainder, rawData);
+                rawDataDao.addRawData( remainder, rawData);
             }
         }
     }
@@ -67,6 +67,140 @@ public class OpcAsyncTask {
         }
     }
 
+    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);
+        }
+    }
+
+    /**
+     * 新增一条临时数据
+     *
+     * @param rawData
+     */
+    public void addTempRawData(RawData rawData) {
+        if (Blank.isNotEmpty(rawData)) {
+            rawDataDao.addTempRawData(rawData);
+        }
+    }
+
+    /**
+     * 将临时数据库表中的原始数据组装为分表中的数据
+     *
+     * @param item
+     * @param sqlCurrentYmdh
+     */
+    public void packageRawData(Item item, Integer dataSourceId, String sqlCurrentYmdh) {
+        try {
+            Thread.sleep(5000);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        Integer itemGroupId = item.getItemGroupId();
+        Integer remainder = itemGroupId % ConstantStr.SUB_TABLE_NUM;
+        if (Blank.isNotEmpty(item)) {
+            RawData oldRawData = rawDataDao.getRawDataList(item, remainder, dataSourceId, sqlCurrentYmdh);
+            List<RawData> rawDataList = rawDataDao.getTempRawDataList(item, dataSourceId, sqlCurrentYmdh);
+            if (Blank.isNotEmpty(rawDataList)) {
+                RawData rawData1 = rawDataList.get(0);
+                String itemName = rawData1.getItemName();
+                String dataType = rawData1.getDataType();
+                if (dataType.equals("boolean")) {
+                    List<Boolean> dataList = Blank.isNotEmpty(oldRawData) ? Arrays.asList(JSON.parseObject(oldRawData.getDataValue(), Boolean[].class)) : new ArrayList<>();
+                    List<String> dataTimeList = Blank.isNotEmpty(oldRawData) ? Arrays.asList(JSON.parseObject(oldRawData.getDataValueTime(), String[].class)) : new ArrayList<>();
+                    for (RawData rawData : rawDataList) {
+                        dataList.add(JSON.parseObject(rawData.getDataValue(), Boolean.class));
+                        dataTimeList.add(rawData.getDataValueTime());
+                    }
+                    RawData rawData = new RawData(itemGroupId, dataSourceId, itemName, dataType, JSON.toJSONString(dataList),
+                            JSON.toJSONString(dataTimeList), sqlCurrentYmdh, new Date());
+                    rawDataDao.addRawData(remainder, rawData);
+                } else {
+                    List<String> dataTimeList = Blank.isNotEmpty(oldRawData) ? Arrays.asList(JSON.parseObject(oldRawData.getDataValueTime(), String[].class)) : new ArrayList<>();
+                    try {
+                        List<BigDecimal> dataList = Blank.isNotEmpty(oldRawData) ? Arrays.asList(JSON.parseObject(oldRawData.getDataValue(), BigDecimal[].class)) : new ArrayList<>();
+                        for (RawData rawData : rawDataList) {
+                            BigDecimal bigDecimal = JSON.parseObject(rawData.getDataValue(), BigDecimal.class);
+                            dataList.add(bigDecimal);
+                            dataTimeList.add(rawData.getDataValueTime());
+                        }
+                        RawData rawData = new RawData(itemGroupId, dataSourceId, itemName, dataType, JSON.toJSONString(dataList),
+                                JSON.toJSONString(dataTimeList), sqlCurrentYmdh, new Date());
+                        rawDataDao.addRawData(remainder, rawData);
+                    } catch (Exception e) {
+                        List<String> dataList = Blank.isNotEmpty(oldRawData) ? Arrays.asList(JSON.parseObject(oldRawData.getDataValue(), String[].class)) : new ArrayList<>();
+                        for (RawData rawData : rawDataList) {
+                            dataList.add(rawData.getDataValue());
+                            dataTimeList.add(rawData.getDataValueTime());
+                        }
+                        RawData rawData = new RawData(itemGroupId, dataSourceId, itemName, dataType, JSON.toJSONString(dataList),
+                                JSON.toJSONString(dataTimeList), sqlCurrentYmdh, new Date());
+                        rawDataDao.addRawData(remainder, rawData);
+                    }
+                }
+                rawDataDao.delRawDataList(rawDataList, sqlCurrentYmdh);
+            }
+        }
+    }
+
+    public void packageRawDataList(List<Item> itemList, Integer dataSourceId, String sqlCurrentYmdh) {
+        try {
+            Thread.sleep(50000);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        if (Blank.isNotEmpty(itemList)) {
+            Item item1 = itemList.get(0);
+            Integer itemGroupId = item1.getItemGroupId();
+            Integer remainder = itemGroupId % ConstantStr.SUB_TABLE_NUM;
+            for (Item item : itemList) {
+                RawData oldRawData = rawDataDao.getRawDataList(item, remainder, dataSourceId, sqlCurrentYmdh);
+                List<RawData> rawDataList = rawDataDao.getTempRawDataList(item, dataSourceId, sqlCurrentYmdh);
+                if (Blank.isNotEmpty(rawDataList)) {
+                    RawData rawData1 = rawDataList.get(0);
+                    String itemName = rawData1.getItemName();
+                    String dataType = rawData1.getDataType();
+                    if (dataType.equals("boolean")) {
+                        List<Boolean> dataList = Blank.isNotEmpty(oldRawData) ? Arrays.asList(JSON.parseObject(oldRawData.getDataValue(), Boolean[].class)) : new ArrayList<>();
+                        List<String> dataTimeList = Blank.isNotEmpty(oldRawData) ? Arrays.asList(JSON.parseObject(oldRawData.getDataValueTime(), String[].class)) : new ArrayList<>();
+                        for (RawData rawData : rawDataList) {
+                            dataList.add(JSON.parseObject(rawData.getDataValue(), Boolean.class));
+                            dataTimeList.add(rawData.getDataValueTime());
+                        }
+                        RawData rawData = new RawData(itemGroupId, dataSourceId, itemName, dataType, JSON.toJSONString(dataList),
+                                JSON.toJSONString(dataTimeList), sqlCurrentYmdh, new Date());
+                        rawDataDao.addRawData(remainder, rawData);
+                    } else {
+                        List<String> dataTimeList = Blank.isNotEmpty(oldRawData) ? Arrays.asList(JSON.parseObject(oldRawData.getDataValueTime(), String[].class)) : new ArrayList<>();
+                        try {
+                            List<BigDecimal> dataList = Blank.isNotEmpty(oldRawData) ? Arrays.asList(JSON.parseObject(oldRawData.getDataValue(), BigDecimal[].class)) : new ArrayList<>();
+                            for (RawData rawData : rawDataList) {
+                                BigDecimal bigDecimal = JSON.parseObject(rawData.getDataValue(), BigDecimal.class);
+                                dataList.add(bigDecimal);
+                                dataTimeList.add(rawData.getDataValueTime());
+                            }
+                            RawData rawData = new RawData(itemGroupId, dataSourceId, itemName, dataType, JSON.toJSONString(dataList),
+                                    JSON.toJSONString(dataTimeList), sqlCurrentYmdh, new Date());
+                            rawDataDao.addRawData(remainder, rawData);
+                        } catch (Exception e) {
+                            List<String> dataList = Blank.isNotEmpty(oldRawData) ? Arrays.asList(JSON.parseObject(oldRawData.getDataValue(), String[].class)) : new ArrayList<>();
+                            for (RawData rawData : rawDataList) {
+                                dataList.add(rawData.getDataValue());
+                                dataTimeList.add(rawData.getDataValueTime());
+                            }
+                            RawData rawData = new RawData(itemGroupId, dataSourceId, itemName, dataType, JSON.toJSONString(dataList),
+                                    JSON.toJSONString(dataTimeList), sqlCurrentYmdh, new Date());
+                            rawDataDao.addRawData(remainder, rawData);
+                        }
+                    }
+                    rawDataDao.delRawDataList(rawDataList, sqlCurrentYmdh);
+                }
+            }
+        }
+    }
+
     public void opcUaGetTree(DataSource dataSource) {
         OpcUaClient opcUaClient = null;
         try {

+ 72 - 374
chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/task/OpcUaChangeTask.java

@@ -39,6 +39,8 @@ public class OpcUaChangeTask extends TimerTask {
 
     private final String timeFormat;
 
+    private Boolean eventFlage = false;
+
     public OpcUaChangeTask(RedisUtil redisUtil,
                            OpcAsyncTask opcAsyncTask,
                            ItemGroupDao itemGroupDao,
@@ -75,6 +77,7 @@ public class OpcUaChangeTask extends TimerTask {
             NodeId n = new NodeId(item.getNodeIndex(), itemId);
             DataModel dm = map.get(itemId);
             Object redisValue = redisUtil.get(ConstantStr.VALUE + id + itemId);
+            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()) {
@@ -88,344 +91,103 @@ public class OpcUaChangeTask extends TimerTask {
                 //归属时间
                 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")) {
-                    if (Blank.isEmpty(storageYmdh)) {
+                    if (JSON.parseObject(redisValue.toString(), Boolean.class) != JSON.parseObject(value.toString(), Boolean.class)) {
                         redisUtil.set(ConstantStr.VALUE + id + itemId, JSON.parseObject(value.toString(), Boolean.class), ConstantStr.TWO_HOUR);
-                        //将当前时间(归属时间)的年月日时存入redis
-                        redisUtil.set(ConstantStr.VALUE_BELONG_TIME + id + itemId, currentYmdh, ConstantStr.TWO_HOUR);
-
-                        //将此时读取的数据,用集合的方式存入到redis中
-                        List<Boolean> dataValueList = new ArrayList<>();
-                        dataValueList.add(JSON.parseObject(value.toString(), Boolean.class));
-                        redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, ConstantStr.TWO_HOUR);
+                        Boolean dmData = JSON.parseObject(value.toString(), Boolean.class);
+                        RawData rawData = new RawData(id, dataSourceId, itemId, javaType, JSON.toJSONString(dmData),
+                                currentYmdhmss, currentYmdh, new Date());
+                        opcAsyncTask.addTempRawData(rawData);
 
-                        //将此时server中读取的时间,存入到redis中
-                        List<String> dataValueTimeList = new ArrayList<>();
-                        dataValueTimeList.add(currentYmdhmss);
-                        redisUtil.set(ConstantStr.DATA_VALUE_TIME + id + itemId, dataValueTimeList);
-                    } else {
-                        //如果redis中存入的归属时间不为空,进行判断,如果现在获取的时间==redis中存入的归属时间,则认定此时的数据,为同一小时的数据,将原来的数据取出,并添加
-                        if (DateUtil.strChangeDate(storageYmdh, timeFormat).getTime() == DateUtil.strChangeDate(currentYmdh, timeFormat).getTime()) {
-                            if (JSON.parseObject(redisValue.toString(), Boolean.class) != JSON.parseObject(value.toString(), Boolean.class)) {
-                                redisUtil.set(ConstantStr.VALUE + id + itemId, JSON.parseObject(value.toString(), Boolean.class), ConstantStr.TWO_HOUR);
-
-                                Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                                List<Boolean> dataValueList = JavaTypeUtil.objChangeListBool(dataValueObject);
-                                dataValueList.add(JSON.parseObject(value.toString(), Boolean.class));
-                                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)) {
+                            if (eventMode.equals(ConstantStr.EVENT_MODEL_BOOLEAN)) {
+                                if ((dmData ? ConstantStr.BOOLEAN_TRUE : ConstantStr.BOOLEAN_FALSE).equals(eventValue.intValue())) {
+                                    eventFlage = true;
+                                    opcAsyncTask.addEventRawData(id, rawData);
+                                } else {
+                                    eventFlage = false;
+                                }
                             }
                         } else {
-                            //如果当时获取的时间!=redis中存入的归属时间,则将redis中存入的归属时间和数据存入到数据库,redis中存入新的一个小时的数据
-                            String valueBelongTime = String.valueOf(redisUtil.get(ConstantStr.VALUE_BELONG_TIME + id + itemId));
-
-                            Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                            List<Boolean> dataValueList = JavaTypeUtil.objChangeListBool(dataValueObject);
-
-                            Object dataValueTimeObject = redisUtil.get(ConstantStr.DATA_VALUE_TIME + id + itemId);
-                            List<String> dataValueTimeList = JavaTypeUtil.objChangeListStr(dataValueTimeObject);
-                            //存数据
-                            RawData rawData = new RawData(dataSourceId,
-                                    itemId,
-                                    javaType,
-                                    JSON.toJSONString(dataValueList),
-                                    String.valueOf(dataValueTimeList),
-                                    String.valueOf(valueBelongTime),
-                                    new Date());
-                            opcAsyncTask.addRawData(id, rawData);
-
-                            redisUtil.set(ConstantStr.VALUE + id + itemId, JSON.parseObject(value.toString(), Boolean.class), ConstantStr.TWO_HOUR);
-
-                            redisUtil.set(ConstantStr.VALUE_BELONG_TIME + id + itemId, currentYmdh, ConstantStr.TWO_HOUR);
-
-                            dataValueList = new ArrayList<>();
-                            dataValueList.add(JSON.parseObject(value.toString(), Boolean.class));
-                            redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, ConstantStr.TWO_HOUR);
-
-                            dataValueTimeList = new ArrayList<>();
-                            dataValueTimeList.add(currentYmdhmss);
-                            redisUtil.set(ConstantStr.DATA_VALUE_TIME + id + itemId, dataValueTimeList, ConstantStr.TWO_HOUR);
+                            if (eventFlage) {
+                                opcAsyncTask.addEventRawData(id, rawData);
+                            }
                         }
                     }
                 } else {
-                    if (Blank.isEmpty(storageYmdh)) {
-                        //将当前时间(归属时间)的年月日时存入redis
-                        redisUtil.set(ConstantStr.VALUE_BELONG_TIME + id + itemId, currentYmdh, ConstantStr.TWO_HOUR);
-
-                        //将此时读取的数据,用集合的方式存入到redis中
-                        try {
-                            redisUtil.set(ConstantStr.VALUE + id + itemId, JSON.parseObject(value.toString(), BigDecimal.class), ConstantStr.TWO_HOUR);
+                    try {
+                        BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
+                        BigDecimal dmData = Blank.isNotEmpty(dm) ?
+                                MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) :
+                                bigDecimal;
+                        if (JSON.parseObject(redisValue.toString(), BigDecimal.class).compareTo(dmData) != 0) {
+                            RawData rawData = new RawData(id, dataSourceId, itemId, javaType, JSON.toJSONString(dmData),
+                                    currentYmdhmss, currentYmdh, new Date());
+                            opcAsyncTask.addTempRawData(rawData);
 
-                            List<BigDecimal> dataValueList = new ArrayList<>();
-                            BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
-                            BigDecimal dmData = Blank.isNotEmpty(dm) ?
-                                    MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) :
-                                    bigDecimal;
-                            dataValueList.add(dmData);
                             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<>();
-                                        List<String> eventDataValueTimeList = new ArrayList<>();
-                                        eventDataValueList.add(dmData);
-                                        redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemId, eventDataValueList, ConstantStr.TWO_HOUR);
-
-                                        eventDataValueTimeList.add(currentYmdhmss);
-                                        redisUtil.set(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId, eventDataValueTimeList, ConstantStr.TWO_HOUR);
+                                        eventFlage = true;
+                                        opcAsyncTask.addEventRawData(id, rawData);
+                                    } else {
+                                        eventFlage = false;
                                     }
                                 } else if (eventMode.equals(ConstantStr.EVENT_MODEL_LOWER)) {
                                     if (dmData.compareTo(bigEventValue) == -1) {
-                                        List<BigDecimal> eventDataValueList = new ArrayList<>();
-                                        List<String> eventDataValueTimeList = new ArrayList<>();
-                                        eventDataValueList.add(dmData);
-                                        redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemId, eventDataValueList, ConstantStr.TWO_HOUR);
-
-                                        eventDataValueTimeList.add(currentYmdhmss);
-                                        redisUtil.set(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId, eventDataValueTimeList, ConstantStr.TWO_HOUR);
-                                    }
-                                }
-                            }
-                            redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, ConstantStr.TWO_HOUR);
-                        } catch (Exception e) {
-                            redisUtil.set(ConstantStr.VALUE + id + itemId, value.toString(), ConstantStr.TWO_HOUR);
-
-                            List<String> dataValueList = new ArrayList<>();
-                            dataValueList.add(value.toString());
-                            redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, ConstantStr.TWO_HOUR);
-                        }
-
-                        //将此时server中读取的时间,存入到redis中
-                        List<String> dataValueTimeList = new ArrayList<>();
-                        dataValueTimeList.add(currentYmdhmss);
-                        redisUtil.set(ConstantStr.DATA_VALUE_TIME + id + itemId, dataValueTimeList, ConstantStr.TWO_HOUR);
-                    } else {
-                        //如果redis中存入的归属时间不为空,进行判断,如果现在获取的时间==redis中存入的归属时间,则认定此时的数据,为同一小时的数据,将原来的数据取出,并添加
-                        if (DateUtil.strChangeDate(storageYmdh, timeFormat).getTime() == DateUtil.strChangeDate(currentYmdh, timeFormat).getTime()) {
-                            Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                            try {
-                                if (JSON.parseObject(redisValue.toString(), Boolean.class) != JSON.parseObject(value.toString(), Boolean.class)) {
-                                    redisUtil.set(ConstantStr.VALUE + id + itemId, JSON.parseObject(value.toString(), BigDecimal.class), ConstantStr.TWO_HOUR);
-
-                                    List<BigDecimal> dataValueList = JavaTypeUtil.objChangeListBig(dataValueObject);
-                                    BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
-                                    BigDecimal dmData = Blank.isNotEmpty(dm) ?
-                                            MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) :
-                                            bigDecimal;
-                                    dataValueList.add(dmData);
-                                    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(id, rawData);
+                                    } else {
+                                        eventFlage = false;
                                     }
-                                    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);
                                 }
-                            } catch (Exception e) {
-                                if (!redisValue.toString().equals(value.toString())) {
-                                    redisUtil.set(ConstantStr.VALUE + id + itemId, value.toString(), ConstantStr.TWO_HOUR);
-
-                                    List<String> dataValueList = JavaTypeUtil.objChangeListStr(dataValueObject);
-                                    dataValueList.add(value.toString());
-                                    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);
+                            } else {
+                                if (eventFlage) {
+                                    opcAsyncTask.addEventRawData(id, rawData);
                                 }
                             }
-                        } else {
-                            //如果当时获取的时间!=redis中存入的归属时间,则将redis中存入的归属时间和数据存入到数据库,redis中存入新的一个小时的数据
-                            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);
-
-                            Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                            try {
-                                List<BigDecimal> dataValueList = JavaTypeUtil.objChangeListBig(dataValueObject);
-                                //存数据
-                                RawData rawData = new RawData(dataSourceId,
-                                        itemId,
-                                        javaType,
-                                        JSON.toJSONString(dataValueList),
-                                        String.valueOf(dataValueTimeList),
-                                        String.valueOf(valueBelongTime),
-                                        new Date());
-                                opcAsyncTask.addRawData(id, rawData);
-
-                                dataValueList = new ArrayList<>();
-                                BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
-                                BigDecimal dmData = Blank.isNotEmpty(dm) ?
-                                        MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) :
-                                        bigDecimal;
-                                dataValueList.add(dmData);
-                                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);
-                                    }
-                                }
-                                redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, ConstantStr.TWO_HOUR);
-
-                                redisUtil.set(ConstantStr.VALUE + id + itemId, JSON.parseObject(value.toString(), BigDecimal.class), ConstantStr.TWO_HOUR);
-                            } catch (Exception e) {
-                                List<String> dataValueList = JavaTypeUtil.objChangeListStr(dataValueObject);
-                                //存数据
-                                RawData rawData = new RawData(dataSourceId,
-                                        itemId,
-                                        javaType,
-                                        JSON.toJSONString(dataValueList),
-                                        String.valueOf(dataValueTimeList),
-                                        String.valueOf(valueBelongTime),
-                                        new Date());
-                                opcAsyncTask.addRawData(id, rawData);
-
-                                dataValueList = new ArrayList<>();
-                                dataValueList.add(value.toString());
-                                redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, ConstantStr.TWO_HOUR);
-
-                                redisUtil.set(ConstantStr.VALUE + id + itemId, value.toString(), ConstantStr.TWO_HOUR);
-                            }
-                            redisUtil.set(ConstantStr.VALUE_BELONG_TIME + id + itemId, currentYmdh, ConstantStr.TWO_HOUR);
-
-                            dataValueTimeList = new ArrayList<>();
-                            dataValueTimeList.add(currentYmdhmss);
-                            redisUtil.set(ConstantStr.DATA_VALUE_TIME + id + itemId, dataValueTimeList, ConstantStr.TWO_HOUR);
                         }
-                    }
-                }
-            } 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")) {
-                    Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                    List<Boolean> dataValueList = JavaTypeUtil.objChangeListBool(dataValueObject);
-                    //存数据
-                    RawData rawData = new RawData(dataSourceId,
-                            itemId,
-                            javaType,
-                            JSON.toJSONString(dataValueList),
-                            String.valueOf(dataValueTimeList),
-                            String.valueOf(valueBelongTime),
-                            new Date());
-                    opcAsyncTask.addRawData(id, rawData);
-                } else {
-                    try {
-                        Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                        List<BigDecimal> dataValueList = JavaTypeUtil.objChangeListBig(dataValueObject);
-                        //存数据
-                        RawData rawData = new RawData(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 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);
                             }
                         }
-                    } catch (Exception e1) {
-                        Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                        List<String> dataValueList = JavaTypeUtil.objChangeListStr(dataValueObject);
-                        //存数据
-                        RawData rawData = new RawData(dataSourceId,
-                                itemId,
-                                javaType,
-                                JSON.toJSONString(dataValueList),
-                                String.valueOf(dataValueTimeList),
-                                String.valueOf(valueBelongTime),
-                                new Date());
-                        opcAsyncTask.addRawData(id, rawData);
                     }
                 }
-                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);
@@ -433,74 +195,10 @@ public class OpcUaChangeTask 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")) {
-                    Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                    List<Boolean> dataValueList = JavaTypeUtil.objChangeListBool(dataValueObject);
-                    //存数据
-                    RawData rawData = new RawData(dataSourceId,
-                            itemId,
-                            javaType,
-                            JSON.toJSONString(dataValueList),
-                            String.valueOf(dataValueTimeList),
-                            String.valueOf(valueBelongTime),
-                            new Date());
-                    opcAsyncTask.addRawData(id, rawData);
-                } else {
-                    try {
-                        Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                        List<BigDecimal> dataValueList = JavaTypeUtil.objChangeListBig(dataValueObject);
-                        //存数据
-                        RawData rawData = new RawData(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) {
-                        Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                        List<String> dataValueList = JavaTypeUtil.objChangeListStr(dataValueObject);
-                        //存数据
-                        RawData rawData = new RawData(dataSourceId,
-                                itemId,
-                                javaType,
-                                JSON.toJSONString(dataValueList),
-                                String.valueOf(dataValueTimeList),
-                                String.valueOf(valueBelongTime),
-                                new Date());
-                        opcAsyncTask.addRawData(id, rawData);
-                    }
-                }
-                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);
 
             if (Blank.isNotEmpty(opcUaClient)) {
                 opcUaClient.disconnect();

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

@@ -183,7 +183,7 @@ public class OpcUaExceedTask extends TimerTask {
                                 List<String> dataValueTimeList = JavaTypeUtil.objChangeListStr(dataValueTimeObject);
 
                                 //存数据
-                                RawData rawData = new RawData(dataSourceId, itemId, javaType, JSON.toJSONString(dataValueList), String.valueOf(dataValueTimeList), String.valueOf(valueBelongTime), new Date());
+                                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)) {
@@ -249,7 +249,7 @@ public class OpcUaExceedTask extends TimerTask {
                         Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
                         List<BigDecimal> dataValueList = JavaTypeUtil.objChangeListBig(dataValueObject);
                         //存数据
-                        RawData rawData = new RawData(dataSourceId,
+                        RawData rawData = new RawData(id, dataSourceId,
                                 itemId,
                                 javaType,
                                 JSON.toJSONString(dataValueList),
@@ -308,7 +308,7 @@ public class OpcUaExceedTask extends TimerTask {
                         Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
                         List<BigDecimal> dataValueList = JavaTypeUtil.objChangeListBig(dataValueObject);
                         //存数据
-                        RawData rawData = new RawData(dataSourceId,
+                        RawData rawData = new RawData(id, dataSourceId,
                                 itemId,
                                 javaType,
                                 JSON.toJSONString(dataValueList),

+ 84 - 358
chaunyi_opc/opc_ua/src/main/java/com/example/opc_ua/task/OpcUaFrequencyTask.java

@@ -41,6 +41,8 @@ public class OpcUaFrequencyTask extends TimerTask {
 
     private final String timeFormat;
 
+    private Boolean eventFlage = false;
+
     public OpcUaFrequencyTask(RedisUtil redisUtil,
                               OpcAsyncTask opcAsyncTask,
                               ItemGroupDao itemGroupDao,
@@ -76,6 +78,7 @@ public class OpcUaFrequencyTask extends TimerTask {
             Integer tableReportId = item.getTableReportId();
             NodeId n = new NodeId(item.getNodeIndex(), itemId);
             DataModel dm = map.get(itemId);
+            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()) {
@@ -87,318 +90,100 @@ public class OpcUaFrequencyTask extends TimerTask {
                 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")) {
-                    if (Blank.isEmpty(storageYmdh)) {
-                        //将当前时间(归属时间)的年月日时存入redis
-                        redisUtil.set(ConstantStr.VALUE_BELONG_TIME + id + itemId, currentYmdh, ConstantStr.TWO_HOUR);
-
-                        //将此时读取的数据,用集合的方式存入到redis中
-                        List<Boolean> dataValueList = new ArrayList<>();
-                        dataValueList.add(JSON.parseObject(value.toString(), Boolean.class));
-                        redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, ConstantStr.TWO_HOUR);
-
-                        //将此时server中读取的时间,存入到redis中
-                        List<String> dataValueTimeList = new ArrayList<>();
-                        dataValueTimeList.add(currentYmdhmss);
-                        redisUtil.set(ConstantStr.DATA_VALUE_TIME + id + itemId, dataValueTimeList, ConstantStr.TWO_HOUR);
+                    //存数据
+                    Boolean dmData = JSON.parseObject(value.toString(), Boolean.class);
+                    RawData rawData = new RawData(id, dataSourceId, itemId, javaType, JSON.toJSONString(dmData),
+                            currentYmdhmss, currentYmdh, new Date());
+                    opcAsyncTask.addTempRawData(rawData);
+
+                    if (Blank.isNotEmpty(eventMode) && Blank.isNotEmpty(eventValue) && Blank.isNotEmpty(tableReportId)) {
+                        if (eventMode.equals(ConstantStr.EVENT_MODEL_BOOLEAN)) {
+                            if ((dmData ? ConstantStr.BOOLEAN_TRUE : ConstantStr.BOOLEAN_FALSE).equals(eventValue.intValue())) {
+                                eventFlage = true;
+                                opcAsyncTask.addEventRawData(id, rawData);
+                            } else {
+                                eventFlage = false;
+                            }
+                        }
                     } else {
-                        //如果redis中存入的归属时间不为空,进行判断,如果现在获取的时间==redis中存入的归属时间,则认定此时的数据,为同一小时的数据,将原来的数据取出,并添加
-                        if (DateUtil.strChangeDate(storageYmdh, timeFormat).getTime() == DateUtil.strChangeDate(currentYmdh, timeFormat).getTime()) {
-                            Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                            List<Boolean> dataValueList = JavaTypeUtil.objChangeListBool(dataValueObject);
-                            dataValueList.add(JSON.parseObject(value.toString(), Boolean.class));
-                            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);
-                        } else {
-                            //如果当时获取的时间!=redis中存入的归属时间,则将redis中存入的归属时间和数据存入到数据库,redis中存入新的一个小时的数据
-                            String valueBelongTime = String.valueOf(redisUtil.get(ConstantStr.VALUE_BELONG_TIME + id + itemId));
-
-                            Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                            List<Boolean> dataValueList = JavaTypeUtil.objChangeListBool(dataValueObject);
-
-                            Object dataValueTimeObject = redisUtil.get(ConstantStr.DATA_VALUE_TIME + id + itemId);
-                            List<String> dataValueTimeList = JavaTypeUtil.objChangeListStr(dataValueTimeObject);
-                            //存数据
-                            RawData rawData = new RawData(dataSourceId,
-                                    itemId,
-                                    javaType,
-                                    JSON.toJSONString(dataValueList),
-                                    String.valueOf(dataValueTimeList),
-                                    String.valueOf(valueBelongTime),
-                                    new Date());
-                            opcAsyncTask.addRawData(id, rawData);
-
-                            redisUtil.set(ConstantStr.VALUE_BELONG_TIME + id + itemId, currentYmdh, ConstantStr.TWO_HOUR);
-
-                            dataValueList = new ArrayList<>();
-                            dataValueList.add(JSON.parseObject(value.toString(), Boolean.class));
-                            redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, ConstantStr.TWO_HOUR);
-
-                            dataValueTimeList = new ArrayList<>();
-                            dataValueTimeList.add(currentYmdhmss);
-                            redisUtil.set(ConstantStr.DATA_VALUE_TIME + id + itemId, dataValueTimeList, ConstantStr.TWO_HOUR);
+                        if (eventFlage) {
+                            opcAsyncTask.addEventRawData(id, rawData);
                         }
                     }
-                } else {
-                    if (Blank.isEmpty(storageYmdh)) {
-                        //将当前时间(归属时间)的年月日时存入redis
-                        redisUtil.set(ConstantStr.VALUE_BELONG_TIME + id + itemId, currentYmdh, ConstantStr.TWO_HOUR);
-
-                        //将此时读取的数据,用集合的方式存入到redis中
-                        try {
-                            List<BigDecimal> dataValueList = new ArrayList<>();
-                            BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
-                            BigDecimal dmData = Blank.isNotEmpty(dm) ?
-                                    MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) :
-                                    bigDecimal;
-                            dataValueList.add(dmData);
-                            if (Blank.isNotEmpty(eventMode) && Blank.isNotEmpty(eventValue) && Blank.isNotEmpty(tableReportId)) {
-                                BigDecimal bigEventValue = new BigDecimal(eventValue);
-                                List<BigDecimal> eventDataValueList = new ArrayList<>();
-                                List<String> eventDataValueTimeList = new ArrayList<>();
-                                if (eventMode.equals(ConstantStr.EVENT_MODEL_EXCEED)) {
-                                    if (dmData.compareTo(bigEventValue) == 1) {
-                                        eventDataValueList.add(dmData);
-                                        redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemId, eventDataValueList, ConstantStr.TWO_HOUR);
-
-                                        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) {
-                                        eventDataValueList.add(dmData);
-                                        redisUtil.set(ConstantStr.EVENT_DATA_VALUE + id + itemId, eventDataValueList, ConstantStr.TWO_HOUR);
+                }else{
+                    try {
+                        BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
+                        BigDecimal dmData = Blank.isNotEmpty(dm) ?
+                                MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) :
+                                bigDecimal;
+                        RawData rawData = new RawData(id, dataSourceId, itemId, javaType, JSON.toJSONString(dmData),
+                                currentYmdhmss, currentYmdh, new Date());
+                        opcAsyncTask.addTempRawData(rawData);
 
-                                        eventDataValueTimeList.add(currentYmdhmss);
-                                        redisUtil.set(ConstantStr.EVENT_DATA_VALUE_TIME + id + itemId, eventDataValueTimeList, 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) {
+                                    eventFlage = true;
+                                    opcAsyncTask.addEventRawData(id, rawData);
+                                } else {
+                                    eventFlage = false;
                                 }
-                            }
-                            redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, ConstantStr.TWO_HOUR);
-                        } catch (Exception e) {
-                            List<String> dataValueList = new ArrayList<>();
-                            dataValueList.add(value.toString());
-                            redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, ConstantStr.TWO_HOUR);
-                        }
-
-                        //将此时server中读取的时间,存入到redis中
-                        List<String> dataValueTimeList = new ArrayList<>();
-                        dataValueTimeList.add(currentYmdhmss);
-                        redisUtil.set(ConstantStr.DATA_VALUE_TIME + id + itemId, dataValueTimeList, ConstantStr.TWO_HOUR);
-                    } else {
-                        //如果redis中存入的归属时间不为空,进行判断,如果现在获取的时间==redis中存入的归属时间,则认定此时的数据,为同一小时的数据,将原来的数据取出,并添加
-                        if (DateUtil.strChangeDate(storageYmdh, timeFormat).getTime() == DateUtil.strChangeDate(currentYmdh, timeFormat).getTime()) {
-                            Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                            try {
-                                List<BigDecimal> dataValueList = JavaTypeUtil.objChangeListBig(dataValueObject);
-                                BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
-                                BigDecimal dmData = Blank.isNotEmpty(dm) ?
-                                        MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) :
-                                        bigDecimal;
-                                dataValueList.add(dmData);
-                                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);
-                                        }
-                                    }
+                            } else if (eventMode.equals(ConstantStr.EVENT_MODEL_LOWER)) {
+                                if (dmData.compareTo(bigEventValue) == -1) {
+                                    eventFlage = true;
+                                    opcAsyncTask.addEventRawData(id, rawData);
+                                } else {
+                                    eventFlage = false;
                                 }
-                                redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, ConstantStr.TWO_HOUR);
-                            } catch (Exception e) {
-                                List<String> dataValueList = JavaTypeUtil.objChangeListStr(dataValueObject);
-                                dataValueList.add(value.toString());
-                                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);
                         } else {
-                            //如果当时获取的时间!=redis中存入的归属时间,则将redis中存入的归属时间和数据存入到数据库,redis中存入新的一个小时的数据
-                            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);
-
-                            Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                            try {
-                                List<BigDecimal> dataValueList = JavaTypeUtil.objChangeListBig(dataValueObject);
-                                //存数据
-                                RawData rawData = new RawData(dataSourceId,
-                                        itemId,
-                                        javaType,
-                                        JSON.toJSONString(dataValueList),
-                                        String.valueOf(dataValueTimeList),
-                                        String.valueOf(valueBelongTime),
-                                        new Date());
-                                opcAsyncTask.addRawData(id, rawData);
-
-                                dataValueList = new ArrayList<>();
-                                BigDecimal bigDecimal = JSON.parseObject(value.toString(), BigDecimal.class);
-                                BigDecimal dmData = Blank.isNotEmpty(dm) ?
-                                        MathUtil.quadricOperation(dm.getMathParameter(), dm.getOperationRule(), bigDecimal) :
-                                        bigDecimal;
-                                dataValueList.add(dmData);
-                                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);
-                                    }
-                                }
-                                redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, ConstantStr.TWO_HOUR);
-                            } catch (Exception e) {
-                                List<String> dataValueList = JavaTypeUtil.objChangeListStr(dataValueObject);
-                                //存数据
-                                RawData rawData = new RawData(dataSourceId,
-                                        itemId,
-                                        javaType,
-                                        JSON.toJSONString(dataValueList),
-                                        String.valueOf(dataValueTimeList),
-                                        String.valueOf(valueBelongTime),
-                                        new Date());
-                                opcAsyncTask.addRawData(id, rawData);
-
-                                dataValueList = new ArrayList<>();
-                                dataValueList.add(value.toString());
-                                redisUtil.set(ConstantStr.DATA_VALUE + id + itemId, dataValueList, ConstantStr.TWO_HOUR);
+                            if (eventFlage) {
+                                opcAsyncTask.addEventRawData(id, rawData);
                             }
-
-                            redisUtil.set(ConstantStr.VALUE_BELONG_TIME + id + itemId, currentYmdh, ConstantStr.TWO_HOUR);
-
-                            dataValueTimeList = new ArrayList<>();
-                            dataValueTimeList.add(currentYmdhmss);
-                            redisUtil.set(ConstantStr.DATA_VALUE_TIME + id + itemId, dataValueTimeList, ConstantStr.TWO_HOUR);
                         }
-                    }
-                }
-
-            } 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")) {
-                    Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                    List<Boolean> dataValueList = JavaTypeUtil.objChangeListBool(dataValueObject);
-                    //存数据
-                    RawData rawData = new RawData(dataSourceId,
-                            itemId,
-                            javaType,
-                            JSON.toJSONString(dataValueList),
-                            String.valueOf(dataValueTimeList),
-                            String.valueOf(valueBelongTime),
-                            new Date());
-                    opcAsyncTask.addRawData(id, rawData);
-                } else {
-                    try {
-                        Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                        List<BigDecimal> dataValueList = JavaTypeUtil.objChangeListBig(dataValueObject);
-                        //存数据
-                        RawData rawData = new RawData(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 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);
                             }
                         }
-                    } catch (Exception e1) {
-                        Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                        List<String> dataValueList = JavaTypeUtil.objChangeListStr(dataValueObject);
-                        //存数据
-                        RawData rawData = new RawData(dataSourceId,
-                                itemId,
-                                javaType,
-                                JSON.toJSONString(dataValueList),
-                                String.valueOf(dataValueTimeList),
-                                String.valueOf(valueBelongTime),
-                                new Date());
-                        opcAsyncTask.addRawData(id, rawData);
                     }
                 }
-                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);
@@ -406,74 +191,15 @@ public class OpcUaFrequencyTask 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")) {
-                    Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                    List<Boolean> dataValueList = JavaTypeUtil.objChangeListBool(dataValueObject);
-                    //存数据
-                    RawData rawData = new RawData(dataSourceId,
-                            itemId,
-                            javaType,
-                            JSON.toJSONString(dataValueList),
-                            String.valueOf(dataValueTimeList),
-                            String.valueOf(valueBelongTime),
-                            new Date());
-                    opcAsyncTask.addRawData(id, rawData);
-                } else {
-                    try {
-                        Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                        List<BigDecimal> dataValueList = JavaTypeUtil.objChangeListBig(dataValueObject);
-                        //存数据
-                        RawData rawData = new RawData(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) {
-                        Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
-                        List<String> dataValueList = JavaTypeUtil.objChangeListStr(dataValueObject);
-                        //存数据
-                        RawData rawData = new RawData(dataSourceId,
-                                itemId,
-                                javaType,
-                                JSON.toJSONString(dataValueList),
-                                String.valueOf(dataValueTimeList),
-                                String.valueOf(valueBelongTime),
-                                new Date());
-                        opcAsyncTask.addRawData(id, rawData);
-                    }
-                }
-                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();

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

@@ -182,7 +182,7 @@ public class OpcUaLowerTask extends TimerTask {
                                 List<String> dataValueTimeList = JavaTypeUtil.objChangeListStr(dataValueTimeObject);
 
                                 //存数据
-                                RawData rawData = new RawData(dataSourceId,
+                                RawData rawData = new RawData(id, dataSourceId,
                                         itemId,
                                         javaType,
                                         JSON.toJSONString(dataValueList),
@@ -254,7 +254,7 @@ public class OpcUaLowerTask extends TimerTask {
                         Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
                         List<BigDecimal> dataValueList = JavaTypeUtil.objChangeListBig(dataValueObject);
                         //存数据
-                        RawData rawData = new RawData(dataSourceId,
+                        RawData rawData = new RawData(id, dataSourceId,
                                 itemId,
                                 javaType,
                                 JSON.toJSONString(dataValueList),
@@ -314,7 +314,7 @@ public class OpcUaLowerTask extends TimerTask {
                         Object dataValueObject = redisUtil.get(ConstantStr.DATA_VALUE + id + itemId);
                         List<BigDecimal> dataValueList = JavaTypeUtil.objChangeListBig(dataValueObject);
                         //存数据
-                        RawData rawData = new RawData(dataSourceId,
+                        RawData rawData = new RawData(id, dataSourceId,
                                 itemId,
                                 javaType,
                                 JSON.toJSONString(dataValueList),

+ 45 - 2
chaunyi_opc/opc_ua/src/main/resources/mapper/RawDataDao.xml

@@ -10,7 +10,7 @@
         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 (#{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>
 
@@ -26,4 +26,47 @@
         </foreach>
     </insert>
 
-</mapper>
+    <insert id="addTempRawData">
+        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>
+    </insert>
+
+    <delete id="delRawDataList">
+        delete
+        from t_raw_data
+        where value_belong_time = #{valueBelongTime}
+        and
+        <foreach collection="rawDataList" item="rawData" index="index" separator=",">
+            (#{rawData.id})
+        </foreach>
+    </delete>
+
+    <select id="getRawDataList" resultType="com.example.opc_common.entity.RawData">
+        select
+        <include refid="rawData"/>
+        from t_raw_data${remainder}
+        where item_group_id = #{item.itemGroupId}
+        and data_souerce_id = #{dataSourceId}
+        and item_name = #{item.itemReadName}
+        and value_belong_time = #{valueBelongTime}
+    </select>
+
+    <select id="getTempRawDataList" resultType="com.example.opc_common.entity.RawData">
+        select data_type, data_value
+        from t_raw_data
+        where item_group_id = #{item.itemGroupId}
+          and data_souerce_id = #{dataSourceId}
+          and item_name = #{item.itemReadName}
+          and value_belong_time = #{valueBelongTime}
+        order by data_value_time desc
+    </select>
+
+</mapper>

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini