Parcourir la source

修改opcda初始化启动类,以及动态定时器启动时,需要执行的流程

zhoupeng il y a 2 ans
Parent
commit
142f900e86

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

@@ -1,29 +1,16 @@
 package com.example.opc_da.config;
 
 import com.example.opc_common.entity.DataSource;
-import com.example.opc_common.entity.DataSourceType;
-import com.example.opc_common.entity.ItemGroup;
 import com.example.opc_common.enums.DataSourceTypeEnum;
-import com.example.opc_common.enums.OpcDaDriverEnum;
-import com.example.opc_common.enums.ResultEnum;
-import com.example.opc_common.exception.CustomException;
 import com.example.opc_common.util.Blank;
-import com.example.opc_common.util.ConstantStr;
 import com.example.opc_da.dao.DataSourceDao;
-import com.example.opc_da.dao.ItemGroupDao;
-import com.example.opc_da.dynamicSchedule.CronTaskRegister;
-import com.example.opc_da.dynamicSchedule.SchedulingRunnable;
 import com.example.opc_da.task.OpcAsyncTask;
-import com.example.opc_da.task.OpcDaTask;
-import com.example.opc_da.util.RedisUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Configuration;
 
 import javax.annotation.PostConstruct;
 import java.util.List;
-import java.util.UUID;
 
 /**
  * 项目初始化配置
@@ -36,20 +23,8 @@ public class InitRunner {
     private DataSourceDao dataSourceDao;
 
     @Autowired
-    private ItemGroupDao itemGroupDao;
-
-    @Autowired
     private OpcAsyncTask opcAsyncTask;
 
-    @Autowired
-    private RedisUtil redisUtil;
-
-    @Autowired
-    private CronTaskRegister cronTaskRegister;
-
-    @Value("${opc_storage.time_format}")
-    private String timeFormat;
-
     @PostConstruct
     public void initData() {
         //将ua和da的树,加载到redis中去
@@ -67,47 +42,5 @@ public class InitRunner {
                 }
             }
         }
-
-        //将已经启动的服务重新启动
-        List<ItemGroup> itemGroupList = itemGroupDao.getAllItemGroup(null);
-        if (Blank.isNotEmpty(itemGroupList)) {
-            for (ItemGroup itemGroup : itemGroupList) {
-                DataSource dataSource = DataSource.convertPassword(dataSourceDao.getDataSourceById(itemGroup.getDataSourceId()));
-                String clsId = dataSource.getClsId().toUpperCase();
-                DataSourceType dataSourceType = dataSourceDao.getDataSourceTypeById(dataSource.getTypeId());
-                if (dataSourceType.getDataSourceTypeKey().equals(DataSourceTypeEnum.OPC_DA_REAL.getValue()) ||
-                        dataSourceType.getDataSourceTypeKey().equals(DataSourceTypeEnum.OPC_AE_ALARMS.getValue()) ||
-                        dataSourceType.getDataSourceTypeKey().equals(DataSourceTypeEnum.OPC_HDA_HISTORY.getValue())) {
-                    if (itemGroup.getRunState() == ConstantStr.START_UP) {
-                        if (Blank.isEmpty(dataSource.getIpAddress(), dataSource.getIpUserName(), dataSource.getIpPassword())) {
-                            throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "数据组配置的数据源的ip地址,帐户,密码都不能为空");
-                        }
-                        Integer id = itemGroup.getId();
-                        redisUtil.set(ConstantStr.ITEM_GROUP + id, true);
-                        if (clsId.equals(OpcDaDriverEnum.KEPSERVER.getValue()) ||
-                                clsId.equals(OpcDaDriverEnum.OPCIFIX.getValue()) ||
-                                clsId.equals(OpcDaDriverEnum.WINCC.getValue()) ||
-                                clsId.equals(OpcDaDriverEnum.SCADA.getValue()) ||
-                                clsId.equals(OpcDaDriverEnum.YOKOGAWA.getValue()) ||
-                                clsId.equals(OpcDaDriverEnum.PAS300.getValue())
-                        ) {
-                            //新增定时器任务
-                            String cronId = "";
-                            String cron = "0 0 0 ? * " + itemGroup.getReadWeek();
-                            if (Blank.isEmpty(itemGroup.getCronId())) {
-                                cronId = UUID.randomUUID().toString().replace("-", "");
-                            } 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 {
-                            throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前未适配此种驱动类型");
-                        }
-                    }
-                }
-            }
-        }
     }
 }

+ 63 - 0
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/dynamicSchedule/DynamicScheduleConfig.java

@@ -1,9 +1,19 @@
 package com.example.opc_da.dynamicSchedule;
 
+import com.example.opc_common.entity.DataSource;
+import com.example.opc_common.entity.DataSourceType;
+import com.example.opc_common.entity.ItemGroup;
 import com.example.opc_common.entity.ReportTable;
+import com.example.opc_common.enums.DataSourceTypeEnum;
+import com.example.opc_common.enums.OpcDaDriverEnum;
+import com.example.opc_common.enums.ResultEnum;
+import com.example.opc_common.exception.CustomException;
 import com.example.opc_common.util.Blank;
 import com.example.opc_common.util.ConstantStr;
+import com.example.opc_da.dao.DataSourceDao;
+import com.example.opc_da.dao.ItemGroupDao;
 import com.example.opc_da.dao.ReportTableDao;
+import com.example.opc_da.task.OpcDaTask;
 import com.example.opc_da.task.ReportTableTask;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.context.annotation.Configuration;
@@ -12,6 +22,7 @@ import org.springframework.scheduling.config.ScheduledTaskRegistrar;
 
 import javax.annotation.Resource;
 import java.util.List;
+import java.util.UUID;
 
 @Slf4j
 @Configuration
@@ -22,6 +33,12 @@ public class DynamicScheduleConfig implements SchedulingConfigurer {
     ReportTableDao reportTableDao;
 
     @Resource
+    private ItemGroupDao itemGroupDao;
+
+    @Resource
+    private DataSourceDao dataSourceDao;
+
+    @Resource
     CronTaskRegister cronTaskRegister;
 
     @Override
@@ -38,5 +55,51 @@ public class DynamicScheduleConfig implements SchedulingConfigurer {
                 cronTaskRegister.addCronTask(new SchedulingRunnable(ReportTableTask.class, "getTableData", new Object[]{reportTable}), reportTable.getCronId(), reportTable.getCron());
             }
         }
+
+        List<ItemGroup> itemGroupList = itemGroupDao.getAllItemGroup(null);
+        if (Blank.isNotEmpty(itemGroupList)) {
+            for (ItemGroup itemGroup : itemGroupList) {
+                String readWeek = itemGroup.getReadWeek();
+                DataSource dataSource = DataSource.convertPassword(dataSourceDao.getDataSourceById(itemGroup.getDataSourceId()));
+                String clsId = dataSource.getClsId().toUpperCase();
+                DataSourceType dataSourceType = dataSourceDao.getDataSourceTypeById(dataSource.getTypeId());
+                if (dataSourceType.getDataSourceTypeKey().equals(DataSourceTypeEnum.OPC_DA_REAL.getValue()) ||
+                        dataSourceType.getDataSourceTypeKey().equals(DataSourceTypeEnum.OPC_AE_ALARMS.getValue()) ||
+                        dataSourceType.getDataSourceTypeKey().equals(DataSourceTypeEnum.OPC_HDA_HISTORY.getValue())) {
+                    if (itemGroup.getRunState() == ConstantStr.START_UP) {
+                        if (Blank.isEmpty(dataSource.getIpAddress(), dataSource.getIpUserName(), dataSource.getIpPassword())) {
+                            throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "数据组配置的数据源的ip地址,帐户,密码都不能为空");
+                        }
+                        Integer id = itemGroup.getId();
+                        if (clsId.equals(OpcDaDriverEnum.KEPSERVER.getValue()) ||
+                                clsId.equals(OpcDaDriverEnum.OPCIFIX.getValue()) ||
+                                clsId.equals(OpcDaDriverEnum.WINCC.getValue()) ||
+                                clsId.equals(OpcDaDriverEnum.SCADA.getValue()) ||
+                                clsId.equals(OpcDaDriverEnum.YOKOGAWA.getValue()) ||
+                                clsId.equals(OpcDaDriverEnum.PAS300.getValue())
+                        ) {
+                            //新增定时器任务
+                            String cronId = "";
+                            String cron = "0 0 0 ? * ";
+                            if (Blank.isEmpty(readWeek)) {
+                                cron = cron + "MON,TUE,WED,THU,FRI,SAT,SUN";
+                            } else {
+                                cron = cron + itemGroup.getReadWeek();
+                            }
+                            if (Blank.isEmpty(itemGroup.getCronId())) {
+                                cronId = UUID.randomUUID().toString().replace("-", "");
+                            } 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 {
+                            throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前未适配此种驱动类型");
+                        }
+                    }
+                }
+            }
+        }
     }
 }

+ 3 - 8
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/task/OpcAsyncTask.java

@@ -10,7 +10,6 @@ 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.JavaTypeUtil;
-import com.example.opc_da.dao.MessageNoticeDao;
 import com.example.opc_da.dao.RawDataDao;
 import com.example.opc_da.dao.ReportTableDao;
 import com.example.opc_da.util.OpcDaUtil;
@@ -28,16 +27,15 @@ import org.springframework.web.client.RestTemplate;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
-import java.text.SimpleDateFormat;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
 
 @Component
 @Async("threadPoolTaskExecutor")
 @Slf4j
 public class OpcAsyncTask {
 
-    private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
-
     @Resource
     private RawDataDao rawDataDao;
 
@@ -50,9 +48,6 @@ public class OpcAsyncTask {
     @Autowired
     private ReportTableDao reportTableDao;
 
-    @Autowired
-    private MessageNoticeDao messageNoticeDao;
-
     @Value("${opc_ua_server.address}")
     private String opcUaUrl;
 

+ 0 - 2
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/task/OpcDaChangeTask.java

@@ -151,7 +151,6 @@ public class OpcDaChangeTask extends TimerTask {
                             if (Blank.isNotEmpty(server)) {
                                 server.dispose();
                             }
-                            redisUtil.del(ConstantStr.ITEM_GROUP + id);
                             itemGroupDao.stopItemGroupById(id, ConstantStr.EXCEPT_STOP_UP);
                             cronTaskRegister.removeCronTask(cronId);
                             timer.cancel();
@@ -184,7 +183,6 @@ public class OpcDaChangeTask extends TimerTask {
             if (Blank.isNotEmpty(server)) {
                 server.dispose();
             }
-            redisUtil.del(ConstantStr.ITEM_GROUP + itemGroup.getId());
             itemGroupDao.stopItemGroupById(itemGroup.getId(), ConstantStr.EXCEPT_STOP_UP);
             cronTaskRegister.removeCronTask(cronId);
             timer.cancel();

+ 0 - 3
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/task/OpcDaExceedTask.java

@@ -98,7 +98,6 @@ public class OpcDaExceedTask extends TimerTask {
                         try {
                             Map<String, Object> val = OpcDaUtil.getVal(itemState.getValue());
                             DataModel dm = map.get(itemId);
-                            BigDecimal bigModeValue = new BigDecimal(itemGroup.getModeValue());
 
                             //读取的值
                             Object value = val.get("value");
@@ -187,7 +186,6 @@ public class OpcDaExceedTask extends TimerTask {
                             if (Blank.isNotEmpty(server)) {
                                 server.dispose();
                             }
-                            redisUtil.del(ConstantStr.ITEM_GROUP + id);
                             itemGroupDao.stopItemGroupById(id, ConstantStr.STOP_IT);
                             cronTaskRegister.removeCronTask(cronId);
                             timer.cancel();
@@ -220,7 +218,6 @@ public class OpcDaExceedTask extends TimerTask {
             if (Blank.isNotEmpty(server)) {
                 server.dispose();
             }
-            redisUtil.del(ConstantStr.ITEM_GROUP + itemGroup.getId());
             itemGroupDao.stopItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
             cronTaskRegister.removeCronTask(cronId);
             timer.cancel();

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

@@ -146,7 +146,6 @@ public class OpcDaFrequencyTask extends TimerTask {
                             if (Blank.isNotEmpty(server)) {
                                 server.dispose();
                             }
-                            redisUtil.del(ConstantStr.ITEM_GROUP + id);
                             itemGroupDao.stopItemGroupById(id, ConstantStr.EXCEPT_STOP_UP);
                             cronTaskRegister.removeCronTask(cronId);
                             timer.cancel();
@@ -179,7 +178,6 @@ public class OpcDaFrequencyTask extends TimerTask {
             if (Blank.isNotEmpty(server)) {
                 server.dispose();
             }
-            redisUtil.del(ConstantStr.ITEM_GROUP + itemGroup.getId());
             itemGroupDao.stopItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
             cronTaskRegister.removeCronTask(cronId);
             timer.cancel();

+ 5 - 8
chaunyi_opc/opc_da/src/main/java/com/example/opc_da/task/OpcDaTask.java

@@ -1,21 +1,20 @@
 package com.example.opc_da.task;
 
-import com.example.opc_common.entity.*;
+import com.example.opc_common.entity.DataModel;
+import com.example.opc_common.entity.DataSource;
+import com.example.opc_common.entity.Item;
+import com.example.opc_common.entity.ItemGroup;
 import com.example.opc_common.enums.ResultEnum;
 import com.example.opc_common.exception.CustomException;
 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.Result;
 import com.example.opc_da.dao.DataModelDao;
 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.Server;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
@@ -90,8 +89,6 @@ 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,
@@ -136,7 +133,7 @@ public class OpcDaTask {
                             allItemList,
                             timeFormat,
                             endDate.getTime()),
-                    startDate, 1000);
+                    startDate);
         } else {
             throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前未适配其他类型的读取模式");
         }