Эх сурвалжийг харах

Merge branch 'master' of http://116.63.33.55/git/read_opc

FinalYu 2 жил өмнө
parent
commit
8e5cd9f7f1

+ 1 - 1
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/config/InitRunner.java

@@ -91,7 +91,6 @@ public class InitRunner {
                                 clsId.equals(OpcDaDriverEnum.YOKOGAWA.getValue()) ||
                                 clsId.equals(OpcDaDriverEnum.PAS300.getValue())
                         ) {
-                            SchedulingRunnable task = new SchedulingRunnable(OpcDaTask.class, "opcDaTask", new Object[]{});
                             //新增定时器任务
                             String cronId = "";
                             String cron = "0 0 0 ? * " + itemGroup.getReadWeek();
@@ -100,6 +99,7 @@ public class InitRunner {
                             } else {
                                 cronId = itemGroup.getCronId();
                             }
+                            SchedulingRunnable task = new SchedulingRunnable(OpcDaTask.class, "opcDaTask", new Object[]{itemGroup, dataSource, cronId});
                             cronTaskRegister.addCronTask(task, cronId, cron);
                             itemGroupDao.runItemGroupById(id, ConstantStr.START_UP, cronId);
                         } else {

+ 7 - 3
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/dynamicSchedule/CronTaskRegister.java

@@ -51,9 +51,13 @@ public class CronTaskRegister implements DisposableBean {
      * @param cronId
      */
     public void removeCronTask(String cronId) {
-        ScheduledTask scheduledTask = this.scheduledTaskMap.remove(cronId);
-        if (scheduledTask != null) {
-            scheduledTask.cancel();
+        try {
+            ScheduledTask scheduledTask = this.scheduledTaskMap.remove(cronId);
+            if (scheduledTask != null) {
+                scheduledTask.cancel();
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
         }
     }
 

+ 1 - 1
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/service/impl/ItemGroupServiceImpl.java

@@ -208,7 +208,6 @@ public class ItemGroupServiceImpl implements ItemGroupService {
                         clsId.equals(OpcDaDriverEnum.YOKOGAWA.getValue()) ||
                         clsId.equals(OpcDaDriverEnum.PAS300.getValue())
                 ) {
-                    SchedulingRunnable task = new SchedulingRunnable(OpcDaTask.class, "opcDaTask", new Object[]{itemGroup, dataSource});
                     //新增定时器任务
                     String cronId = "";
                     String cron = "0 0 0 ? * " + itemGroup.getReadWeek();
@@ -217,6 +216,7 @@ public class ItemGroupServiceImpl implements ItemGroupService {
                     } else {
                         cronId = itemGroup.getCronId();
                     }
+                    SchedulingRunnable task = new SchedulingRunnable(OpcDaTask.class, "opcDaTask", new Object[]{itemGroup, dataSource, cronId});
                     cronTaskRegister.addCronTask(task, cronId, cron);
                     itemGroupDao.runItemGroupById(id, runState, cronId);
                     return Result.ok("启动成功");

+ 16 - 1
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/task/OpcDaChangeTask.java

@@ -25,6 +25,8 @@ public class OpcDaChangeTask extends TimerTask {
 
     private final OpcAsyncTask opcAsyncTask;
 
+    private final String cronId;
+
     private final CronTaskRegister cronTaskRegister;
 
     private final ItemGroupDao itemGroupDao;
@@ -43,10 +45,13 @@ public class OpcDaChangeTask extends TimerTask {
 
     private final String timeFormat;
 
+    private final Long endTime;
+
     private Boolean eventFlage = false;
 
     public OpcDaChangeTask(RedisUtil redisUtil,
                            OpcAsyncTask opcAsyncTask,
+                           String cronId,
                            CronTaskRegister cronTaskRegister,
                            ItemGroupDao itemGroupDao,
                            MessageNoticeDao messageNoticeDao,
@@ -54,9 +59,12 @@ public class OpcDaChangeTask extends TimerTask {
                            ItemGroup itemGroup,
                            DataSource dataSource,
                            Map<String, DataModel> map,
-                           List<com.example.opc_common.entity.Item> itemList, String timeFormat) {
+                           List<com.example.opc_common.entity.Item> itemList,
+                           String timeFormat,
+                           Long endTime) {
         this.redisUtil = redisUtil;
         this.opcAsyncTask = opcAsyncTask;
+        this.cronId = cronId;
         this.cronTaskRegister = cronTaskRegister;
         this.itemGroupDao = itemGroupDao;
         this.messageNoticeDao = messageNoticeDao;
@@ -66,6 +74,7 @@ public class OpcDaChangeTask extends TimerTask {
         this.map = map;
         this.itemList = itemList;
         this.timeFormat = timeFormat;
+        this.endTime = endTime;
     }
 
     @Override
@@ -207,6 +216,7 @@ public class OpcDaChangeTask extends TimerTask {
                             }
                             redisUtil.del(ConstantStr.ITEM_GROUP + id);
                             itemGroupDao.stopItemGroupById(id, ConstantStr.STOP_IT);
+                            cronTaskRegister.removeCronTask(cronId);
                             timer.cancel();
                         }
                     }
@@ -218,6 +228,9 @@ public class OpcDaChangeTask extends TimerTask {
                 if (Blank.isEmpty(flage)) {
                     flage = false;
                 }
+                if (System.currentTimeMillis() >= endTime) {
+                    flage = false;
+                }
                 if (!flage) {
                     //执行组装数据库的数据,以及生成驱动报表
                     String sqlCurrentYmdh = String.valueOf(redisUtil.get(ConstantStr.VALUE_BELONG_TIME + id));
@@ -235,6 +248,7 @@ public class OpcDaChangeTask extends TimerTask {
                     }
                     redisUtil.del(ConstantStr.ITEM_GROUP + itemGroup.getId());
                     itemGroupDao.stopItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
+                    cronTaskRegister.removeCronTask(cronId);
                     timer.cancel();
                     break;
                 }
@@ -250,6 +264,7 @@ public class OpcDaChangeTask extends TimerTask {
             }
             redisUtil.del(ConstantStr.ITEM_GROUP + itemGroup.getId());
             itemGroupDao.stopItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
+            cronTaskRegister.removeCronTask(cronId);
             timer.cancel();
         }
     }

+ 21 - 1
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/task/OpcDaExceedTask.java

@@ -8,6 +8,7 @@ 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.dynamicSchedule.CronTaskRegister;
 import com.example.opc_da.util.OpcDaUtil;
 import com.example.opc_da.util.RedisUtil;
 import org.openscada.opc.lib.da.Item;
@@ -22,6 +23,10 @@ public class OpcDaExceedTask extends TimerTask {
 
     private final OpcAsyncTask opcAsyncTask;
 
+    private final String cronId;
+
+    private final CronTaskRegister cronTaskRegister;
+
     private final ItemGroupDao itemGroupDao;
 
     private final MessageNoticeDao messageNoticeDao;
@@ -38,19 +43,27 @@ public class OpcDaExceedTask extends TimerTask {
 
     private final String timeFormat;
 
+    private final Long endTime;
+
     private Boolean eventFlage = false;
 
     public OpcDaExceedTask(RedisUtil redisUtil,
                            OpcAsyncTask opcAsyncTask,
+                           String cronId,
+                           CronTaskRegister cronTaskRegister,
                            ItemGroupDao itemGroupDao,
                            MessageNoticeDao messageNoticeDao,
                            Timer timer,
                            ItemGroup itemGroup,
                            DataSource dataSource,
                            Map<String, DataModel> map,
-                           List<com.example.opc_common.entity.Item> itemList, String timeFormat) {
+                           List<com.example.opc_common.entity.Item> itemList,
+                           String timeFormat,
+                           Long endTime) {
         this.redisUtil = redisUtil;
         this.opcAsyncTask = opcAsyncTask;
+        this.cronId = cronId;
+        this.cronTaskRegister = cronTaskRegister;
         this.itemGroupDao = itemGroupDao;
         this.messageNoticeDao = messageNoticeDao;
         this.timer = timer;
@@ -59,6 +72,7 @@ public class OpcDaExceedTask extends TimerTask {
         this.map = map;
         this.itemList = itemList;
         this.timeFormat = timeFormat;
+        this.endTime = endTime;
     }
 
     @Override
@@ -166,6 +180,7 @@ public class OpcDaExceedTask extends TimerTask {
                             }
                             redisUtil.del(ConstantStr.ITEM_GROUP + id);
                             itemGroupDao.stopItemGroupById(id, ConstantStr.STOP_IT);
+                            cronTaskRegister.removeCronTask(cronId);
                             timer.cancel();
                         }
                     }
@@ -177,6 +192,9 @@ public class OpcDaExceedTask extends TimerTask {
                 if (Blank.isEmpty(flage)) {
                     flage = false;
                 }
+                if (System.currentTimeMillis() >= endTime) {
+                    flage = false;
+                }
                 if (!flage) {
                     //执行组装数据库的数据,以及生成驱动报表
                     String sqlCurrentYmdh = String.valueOf(redisUtil.get(ConstantStr.VALUE_BELONG_TIME + id));
@@ -194,6 +212,7 @@ public class OpcDaExceedTask extends TimerTask {
                     }
                     redisUtil.del(ConstantStr.ITEM_GROUP + itemGroup.getId());
                     itemGroupDao.stopItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
+                    cronTaskRegister.removeCronTask(cronId);
                     timer.cancel();
                     break;
                 }
@@ -209,6 +228,7 @@ public class OpcDaExceedTask extends TimerTask {
             }
             redisUtil.del(ConstantStr.ITEM_GROUP + itemGroup.getId());
             itemGroupDao.stopItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
+            cronTaskRegister.removeCronTask(cronId);
             timer.cancel();
         }
     }

+ 16 - 2
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/task/OpcDaFrequencyTask.java

@@ -23,6 +23,8 @@ public class OpcDaFrequencyTask extends TimerTask {
 
     private final OpcAsyncTask opcAsyncTask;
 
+    private final String cronId;
+
     private final CronTaskRegister cronTaskRegister;
 
     private final ItemGroupDao itemGroupDao;
@@ -41,10 +43,13 @@ public class OpcDaFrequencyTask extends TimerTask {
 
     private final String timeFormat;
 
+    private final Long endTime;
+
     private Boolean eventFlage = false;
 
     public OpcDaFrequencyTask(RedisUtil redisUtil,
                               OpcAsyncTask opcAsyncTask,
+                              String cronId,
                               CronTaskRegister cronTaskRegister,
                               ItemGroupDao itemGroupDao,
                               MessageNoticeDao messageNoticeDao,
@@ -52,9 +57,12 @@ public class OpcDaFrequencyTask extends TimerTask {
                               ItemGroup itemGroup,
                               DataSource dataSource,
                               Map<String, DataModel> map,
-                              List<com.example.opc_common.entity.Item> itemList, String timeFormat) {
+                              List<com.example.opc_common.entity.Item> itemList,
+                              String timeFormat,
+                              Long endTime) {
         this.redisUtil = redisUtil;
         this.opcAsyncTask = opcAsyncTask;
+        this.cronId = cronId;
         this.cronTaskRegister = cronTaskRegister;
         this.itemGroupDao = itemGroupDao;
         this.messageNoticeDao = messageNoticeDao;
@@ -64,6 +72,7 @@ public class OpcDaFrequencyTask extends TimerTask {
         this.map = map;
         this.itemList = itemList;
         this.timeFormat = timeFormat;
+        this.endTime = endTime;
     }
 
     @Override
@@ -202,7 +211,7 @@ public class OpcDaFrequencyTask extends TimerTask {
                             }
                             redisUtil.del(ConstantStr.ITEM_GROUP + id);
                             itemGroupDao.stopItemGroupById(id, ConstantStr.STOP_IT);
-
+                            cronTaskRegister.removeCronTask(cronId);
                             timer.cancel();
                         }
                     }
@@ -214,6 +223,9 @@ public class OpcDaFrequencyTask extends TimerTask {
                 if (Blank.isEmpty(flage)) {
                     flage = false;
                 }
+                if (System.currentTimeMillis() >= endTime) {
+                    flage = false;
+                }
                 if (!flage) {
                     //执行组装数据库的数据,以及生成驱动报表
                     String sqlCurrentYmdh = String.valueOf(redisUtil.get(ConstantStr.VALUE_BELONG_TIME + id));
@@ -232,6 +244,7 @@ public class OpcDaFrequencyTask extends TimerTask {
 
                     redisUtil.del(ConstantStr.ITEM_GROUP + id);
                     itemGroupDao.stopItemGroupById(id, ConstantStr.STOP_IT);
+                    cronTaskRegister.removeCronTask(cronId);
                     timer.cancel();
                     break;
                 }
@@ -247,6 +260,7 @@ public class OpcDaFrequencyTask extends TimerTask {
             }
             redisUtil.del(ConstantStr.ITEM_GROUP + itemGroup.getId());
             itemGroupDao.stopItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
+            cronTaskRegister.removeCronTask(cronId);
             timer.cancel();
         }
     }

+ 21 - 1
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/task/OpcDaLowseTask.java

@@ -8,6 +8,7 @@ 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.dynamicSchedule.CronTaskRegister;
 import com.example.opc_da.util.OpcDaUtil;
 import com.example.opc_da.util.RedisUtil;
 import org.openscada.opc.lib.da.Item;
@@ -22,6 +23,10 @@ public class OpcDaLowseTask extends TimerTask {
 
     private final OpcAsyncTask opcAsyncTask;
 
+    private final String cronId;
+
+    private final CronTaskRegister cronTaskRegister;
+
     private final ItemGroupDao itemGroupDao;
 
     private final MessageNoticeDao messageNoticeDao;
@@ -38,19 +43,27 @@ public class OpcDaLowseTask extends TimerTask {
 
     private final String timeFormat;
 
+    private final Long endTime;
+
     private Boolean eventFlage = false;
 
     public OpcDaLowseTask(RedisUtil redisUtil,
                           OpcAsyncTask opcAsyncTask,
+                          String cronId,
+                          CronTaskRegister cronTaskRegister,
                           ItemGroupDao itemGroupDao,
                           MessageNoticeDao messageNoticeDao,
                           Timer timer,
                           ItemGroup itemGroup,
                           DataSource dataSource,
                           Map<String, DataModel> map,
-                          List<com.example.opc_common.entity.Item> itemList, String timeFormat) {
+                          List<com.example.opc_common.entity.Item> itemList,
+                          String timeFormat,
+                          Long endTime) {
         this.redisUtil = redisUtil;
         this.opcAsyncTask = opcAsyncTask;
+        this.cronId = cronId;
+        this.cronTaskRegister = cronTaskRegister;
         this.itemGroupDao = itemGroupDao;
         this.messageNoticeDao = messageNoticeDao;
         this.timer = timer;
@@ -59,6 +72,7 @@ public class OpcDaLowseTask extends TimerTask {
         this.map = map;
         this.itemList = itemList;
         this.timeFormat = timeFormat;
+        this.endTime = endTime;
     }
 
     @Override
@@ -166,6 +180,7 @@ public class OpcDaLowseTask extends TimerTask {
                             }
                             redisUtil.del(ConstantStr.ITEM_GROUP + id);
                             itemGroupDao.stopItemGroupById(id, ConstantStr.STOP_IT);
+                            cronTaskRegister.removeCronTask(cronId);
                             timer.cancel();
                         }
                     }
@@ -177,6 +192,9 @@ public class OpcDaLowseTask extends TimerTask {
                 if (Blank.isEmpty(flage)) {
                     flage = false;
                 }
+                if (System.currentTimeMillis() >= endTime) {
+                    flage = false;
+                }
                 if (!flage) {
                     //执行组装数据库的数据,以及生成驱动报表
                     String sqlCurrentYmdh = String.valueOf(redisUtil.get(ConstantStr.VALUE_BELONG_TIME + id));
@@ -194,6 +212,7 @@ public class OpcDaLowseTask extends TimerTask {
                     }
                     redisUtil.del(ConstantStr.ITEM_GROUP + itemGroup.getId());
                     itemGroupDao.stopItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
+                    cronTaskRegister.removeCronTask(cronId);
                     timer.cancel();
                     break;
                 }
@@ -209,6 +228,7 @@ public class OpcDaLowseTask extends TimerTask {
             }
             redisUtil.del(ConstantStr.ITEM_GROUP + itemGroup.getId());
             itemGroupDao.stopItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
+            cronTaskRegister.removeCronTask(cronId);
             timer.cancel();
         }
     }

+ 201 - 0
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/task/OpcDaSpecifyTask.java

@@ -0,0 +1,201 @@
+package com.example.opc_da.task;
+
+import com.alibaba.fastjson.JSON;
+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;
+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.dynamicSchedule.CronTaskRegister;
+import com.example.opc_da.util.OpcDaUtil;
+import com.example.opc_da.util.RedisUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.openscada.opc.lib.da.Group;
+import org.openscada.opc.lib.da.ItemState;
+import org.openscada.opc.lib.da.Server;
+
+import java.math.BigDecimal;
+import java.util.*;
+
+@Slf4j
+public class OpcDaSpecifyTask extends TimerTask {
+
+    private final RedisUtil redisUtil;
+
+    private final OpcAsyncTask opcAsyncTask;
+
+    private final String cronId;
+
+    private final CronTaskRegister cronTaskRegister;
+
+    private final ItemGroupDao itemGroupDao;
+
+    private final MessageNoticeDao messageNoticeDao;
+
+    private final Timer timer;
+
+    private final ItemGroup itemGroup;
+
+    private final DataSource dataSource;
+
+    private final Map<String, DataModel> dmMap;
+
+    private final List<com.example.opc_common.entity.Item> itemList;
+
+    private final String[] items;
+
+    private final String timeFormat;
+
+    private Boolean eventFlage = false;
+
+    public OpcDaSpecifyTask(RedisUtil redisUtil,
+                            OpcAsyncTask opcAsyncTask,
+                            String cronId,
+                            CronTaskRegister cronTaskRegister,
+                            ItemGroupDao itemGroupDao,
+                            MessageNoticeDao messageNoticeDao,
+                            Timer timer,
+                            ItemGroup itemGroup,
+                            DataSource dataSource,
+                            Map<String, DataModel> dmMap,
+                            List<com.example.opc_common.entity.Item> itemList,
+                            String[] items,
+                            String timeFormat) {
+        this.redisUtil = redisUtil;
+        this.opcAsyncTask = opcAsyncTask;
+        this.cronId = cronId;
+        this.cronTaskRegister = cronTaskRegister;
+        this.itemGroupDao = itemGroupDao;
+        this.messageNoticeDao = messageNoticeDao;
+        this.timer = timer;
+        this.itemGroup = itemGroup;
+        this.dataSource = dataSource;
+        this.dmMap = dmMap;
+        this.itemList = itemList;
+        this.items = items;
+        this.timeFormat = timeFormat;
+    }
+
+    @Override
+    public void run() {
+        Server server = OpcDaUtil.createServer(dataSource);
+        Integer id = itemGroup.getId();
+        Integer dataSourceId = dataSource.getId();
+        String sqlCurrentYmdh = "";
+        try {
+            server.connect();
+            Group group = server.addGroup();
+            Map<String, org.openscada.opc.lib.da.Item> itemResult = group.addItems(items);
+            Set itemSet = new HashSet(itemResult.values());
+            org.openscada.opc.lib.da.Item[] itemArr = new org.openscada.opc.lib.da.Item[itemSet.size()];
+            itemSet.toArray(itemArr);
+            Map<org.openscada.opc.lib.da.Item, ItemState> resultMap = group.read(true, itemArr);
+            List<EventRawData> eventRawDataList = new ArrayList<>();
+            for (com.example.opc_common.entity.Item item : itemList) {
+                String itemReadName = item.getItemReadName();
+                Integer eventMode = item.getEventMode();
+                Double eventValue = item.getEventValue();
+                Integer tableReportId = item.getTableReportId();
+                DataModel dm = dmMap.get(itemReadName);
+                for (org.openscada.opc.lib.da.Item item1 : resultMap.keySet()) {
+                    String itemId = item1.getId();
+                    if (item.getItemReadName().equals(itemId)) {
+                        ItemState itemState = resultMap.get(item1);
+                        Map<String, Object> val = OpcDaUtil.getVal(itemState.getValue());
+                        String javaType = val.get("javaType").toString();
+                        Object value = val.get("value");
+
+                        //值对应取值的时间
+                        Date time = itemState.getTimestamp().getTime();
+                        String currentYmdh = DateUtil.dateChangeStr(time, timeFormat);
+                        sqlCurrentYmdh = currentYmdh;
+                        //服务器读取的时间
+                        String currentYmdhmss = DateUtil.dateChangeStrYmdhmss(time);
+
+                        if (javaType.toLowerCase().equals("boolean")) {
+                            //存数据
+                            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);
+                            opcAsyncTask.packageRawData(item, dataSourceId, currentYmdh);
+
+                            EventRawData eventRawData = new EventRawData(id, dataSourceId, itemId, javaType, JSON.toJSONString(dmData),
+                                    currentYmdhmss, currentYmdh, new Date(), 0L);
+                            eventRawDataList.add(eventRawData);
+
+                            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;
+                                    }
+                                }
+                            }
+                        } 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);
+
+                                EventRawData eventRawData = new EventRawData(id, dataSourceId, itemId, javaType, JSON.toJSONString(dmData),
+                                        currentYmdhmss, currentYmdh, new Date(), 0L);
+                                eventRawDataList.add(eventRawData);
+
+                                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;
+                                        }
+                                    } else if (eventMode.equals(ConstantStr.EVENT_MODEL_LOWER)) {
+                                        if (dmData.compareTo(bigEventValue) == -1) {
+                                            eventFlage = true;
+                                        }
+                                    }
+                                }
+                            } catch (Exception e) {
+                                RawData rawData = new RawData(id, dataSourceId, itemId, javaType, JSON.toJSONString(value.toString()),
+                                        currentYmdhmss, currentYmdh, new Date());
+                                opcAsyncTask.addTempRawData(rawData);
+
+                                EventRawData eventRawData = new EventRawData(id, dataSourceId, itemId, javaType, JSON.toJSONString(value.toString()),
+                                        currentYmdhmss, currentYmdh, new Date(), 0L);
+                                eventRawDataList.add(eventRawData);
+                            }
+                        }
+                    }
+                }
+            }
+
+            if (eventFlage) {
+                if (Blank.isNotEmpty(eventRawDataList)) {
+                    for (EventRawData eventRawData : eventRawDataList) {
+                        opcAsyncTask.addEventRawData(eventRawData);
+                    }
+                    if (Blank.isNotEmpty(sqlCurrentYmdh)) {
+                        opcAsyncTask.eventTable(dataSourceId, itemList, sqlCurrentYmdh);
+                    }
+                }
+            }
+
+        } catch (Exception e) {
+            messageNoticeDao.addMessageNotice(new MessageNotice(itemGroup.getUserId(),
+                    itemGroup.getGroupName() + DateUtil.dateChangeStrYmdhms(new Date()) + "运行失败",
+                    e.getMessage(),
+                    ConstantStr.NO_READ));
+            if (Blank.isNotEmpty(server)) {
+                server.dispose();
+            }
+            redisUtil.del(ConstantStr.ITEM_GROUP + id);
+            itemGroupDao.stopItemGroupById(id, ConstantStr.STOP_IT);
+            cronTaskRegister.removeCronTask(cronId);
+            timer.cancel();
+        }
+    }
+}

+ 26 - 16
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/task/OpcDaTask.java

@@ -47,7 +47,7 @@ public class OpcDaTask {
     @Value("${opc_storage.time_format}")
     private String timeFormat;
 
-    public void opcDaTask(ItemGroup itemGroup, DataSource dataSource) {
+    public void opcDaTask(ItemGroup itemGroup, DataSource dataSource, String cronId) {
         Integer id = itemGroup.getId();
         Integer readMode = itemGroup.getReadMode();
         //读取数据并保存
@@ -81,9 +81,12 @@ public class OpcDaTask {
                 }
             }
         }
+        List<String> itemStrList = itemGroupDao.getItemReadNameById(itemGroup.getId());
+        String[] items = itemStrList.toArray(new String[]{});
         if (readMode == ConstantStr.ON_FREQUENCY) {
             timer.schedule(new OpcDaFrequencyTask(redisUtil,
                             opcAsyncTask,
+                            cronId,
                             cronTaskRegister,
                             itemGroupDao,
                             messageNoticeDao,
@@ -92,12 +95,13 @@ public class OpcDaTask {
                             dataSource,
                             map,
                             allItemList,
-                            timeFormat),
-                    startDate,
-                    endDate.getTime() - startDate.getTime());
+                            timeFormat,
+                            endDate.getTime()),
+                    startDate);
         } else if (readMode == ConstantStr.ON_CHANGE) {
             timer.schedule(new OpcDaChangeTask(redisUtil,
                             opcAsyncTask,
+                            cronId,
                             cronTaskRegister,
                             itemGroupDao,
                             messageNoticeDao,
@@ -106,12 +110,14 @@ public class OpcDaTask {
                             dataSource,
                             map,
                             allItemList,
-                            timeFormat),
-                    startDate,
-                    endDate.getTime() - startDate.getTime());
+                            timeFormat,
+                            endDate.getTime()),
+                    startDate);
         } else if (readMode == ConstantStr.EXCEED_SET_VALUE) {
             timer.schedule(new OpcDaExceedTask(redisUtil,
                             opcAsyncTask,
+                            cronId,
+                            cronTaskRegister,
                             itemGroupDao,
                             messageNoticeDao,
                             timer,
@@ -119,12 +125,14 @@ public class OpcDaTask {
                             dataSource,
                             map,
                             allItemList,
-                            timeFormat),
-                    startDate,
-                    endDate.getTime() - startDate.getTime());
+                            timeFormat,
+                            endDate.getTime()),
+                    startDate);
         } else if (readMode == ConstantStr.LOWER_SET_VALUE) {
             timer.schedule(new OpcDaLowseTask(redisUtil,
                             opcAsyncTask,
+                            cronId,
+                            cronTaskRegister,
                             itemGroupDao,
                             messageNoticeDao,
                             timer,
@@ -132,12 +140,14 @@ public class OpcDaTask {
                             dataSource,
                             map,
                             allItemList,
-                            timeFormat),
-                    startDate,
-                    endDate.getTime() - startDate.getTime());
+                            timeFormat,
+                            endDate.getTime()),
+                    startDate);
         } else if (readMode == ConstantStr.SPECIFY_TIME) {
-            timer.schedule(new OpcDaLowseTask(redisUtil,
+            timer.schedule(new OpcDaSpecifyTask(redisUtil,
                             opcAsyncTask,
+                            cronId,
+                            cronTaskRegister,
                             itemGroupDao,
                             messageNoticeDao,
                             timer,
@@ -145,9 +155,9 @@ public class OpcDaTask {
                             dataSource,
                             map,
                             allItemList,
+                            items,
                             timeFormat),
-                    startDate,
-                    endDate.getTime() - startDate.getTime());
+                    startDate);
         } else {
             throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前未适配其他类型的读取模式");
         }