Browse Source

后台动态定时器修改为使用quartz框架,并修改打印,报表,数据组定时器任务的执行方式

zhoupeng 1 year ago
parent
commit
cec9ad3980
23 changed files with 775 additions and 383 deletions
  1. 1 2
      chuanyi_client2/package.json
  2. 117 1
      chuanyi_client2/src/views/run_config/index.vue
  3. 118 5
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/config/InitRunner.java
  4. 0 77
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/dynamicSchedule/CronTaskRegister.java
  5. 0 142
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/dynamicSchedule/DynamicScheduleConfig.java
  6. 0 24
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/dynamicSchedule/ScheduleConfig.java
  7. 0 57
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/dynamicSchedule/SchedulingRunnable.java
  8. 55 0
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/quartz/QuartzBean.java
  9. 34 0
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/quartz/QuartzService.java
  10. 80 0
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/quartz/QuartzServiceImpl.java
  11. 285 0
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/quartz/task/AutoTableTask.java
  12. 23 8
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/quartz/task/OpcDaTask.java
  13. 12 21
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/quartz/task/PrintTask.java
  14. 12 6
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/service/impl/ItemGroupServiceImpl.java
  15. 12 9
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/service/impl/PrintServiceImpl.java
  16. 10 5
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/service/impl/ReportTableServiceImpl.java
  17. 5 5
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/OpcDaChangeTask.java
  18. 0 1
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/OpcDaChangeTask1.java
  19. 6 7
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/OpcDaExceedTask.java
  20. 0 1
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/OpcDaExceedTask1.java
  21. 5 5
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/OpcDaFrequencyTask.java
  22. 0 1
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/OpcDaFrequencyTask1.java
  23. 0 6
      cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/ReportTableTask.java

+ 1 - 2
chuanyi_client2/package.json

@@ -53,6 +53,5 @@
     "> 1%",
     "last 2 versions",
     "not dead"
-  ],
-  "__npminstall_done": false
+  ]
 }

+ 117 - 1
chuanyi_client2/src/views/run_config/index.vue

@@ -3351,5 +3351,121 @@ export default {
 </script>
 
 <style rel="stylesheet/scss" lang="scss">
-@import './index.css'
+// @import './index.css'
+.breadcrumb-content {
+    padding-bottom: 0;
+}
+
+.cy-nav-sx {
+    float: left !important;
+    margin-top: -23px !important;
+    margin-left: 120px !important;
+    display: flex;
+}
+
+.cy-nav-btn {
+    float: right !important;
+    margin-right: 20px !important;
+    margin-top: -20px !important;
+}
+
+.cy-main {
+    margin: 10px 20px;
+    width: calc(100% - 40px);
+    height: calc(100% - 100px);
+
+    .cy-btn {
+        margin-bottom: 10px;
+    }
+
+    .cy-btn .el-link {
+        margin-right: 15px;
+    }
+
+    .cy-main-left {
+        width: 100%;
+        height: 100%;
+        overflow: auto;
+        /* float: left; */
+        padding: 5px 10px;
+        /* border-right: 1px solid #d4d4d4; */
+
+        .cy-list {
+            overflow: auto;
+            height: 100%;
+            height: calc(100% - 40px);
+
+            ul {
+                display: flex;
+                flex-wrap: wrap;
+                padding: 0;
+                margin-top: 0;
+
+                li {
+                    list-style-type: none;
+                    background: #41aed7;
+                    width: 23%;
+                    margin: 10px 1%;
+                    border-radius: 8px;
+                    height: 110px;
+                    padding: 15px;
+                    color: #ffffff;
+
+                    .cy-item-name {
+                        font-size: 14px;
+                        text-overflow: ellipsis;
+                        white-space: nowrap;
+                        overflow: hidden;
+                        margin-bottom: 15px;
+                        cursor: pointer;
+                    }
+
+                    .cy-item-val {
+                        font-size: 12px;
+                    }
+
+                    .cy-list-item {
+                        font-size: 12px;
+                        color: #f6f6f6;
+                        width: 100%;
+                        /* display: flex; */
+                        margin-top: 40px;
+                    }
+                }
+            }
+        }
+    }
+
+    .cy-main-right {
+        width: 100%;
+        height: 100%;
+        float: left;
+        overflow: hidden;
+    }
+}
+
+.cy-group-tree1 {
+    font-size: 14px;
+
+    .custom-tree-node1 {
+        height: 28px;
+        line-height: 28px;
+    }
+}
+
+.cron-txt {
+    color: blue;
+    margin-right: 20px;
+    cursor: pointer;
+    font-weight: bold;
+    font-size: 16px;
+}
+
+.cron-txt-desc {}
+
+.ug-div {
+    .el-transfer-panel {
+        width: 300px;
+    }
+}
 </style>

+ 118 - 5
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/config/InitRunner.java

@@ -1,19 +1,28 @@
 package com.example.opc_da.config;
 
-import com.example.opc_common.entity.Item;
-import com.example.opc_common.entity.ItemGroup;
+import com.example.opc_common.entity.*;
 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.RawDataDao;
+import com.example.opc_common.util.DateUtil;
+import com.example.opc_common.util.OpcUtil;
+import com.example.opc_da.dao.*;
+import com.example.opc_da.quartz.QuartzBean;
+import com.example.opc_da.quartz.QuartzService;
+import com.example.opc_da.quartz.task.AutoTableTask;
+import com.example.opc_da.quartz.task.OpcDaTask;
 import com.example.opc_da.task.OpcAsyncTask;
+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.Server;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
 
 import javax.annotation.PostConstruct;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.UUID;
 
 /**
  * 项目初始化配置
@@ -34,6 +43,21 @@ public class InitRunner {
     @Autowired
     private OpcAsyncTask opcAsyncTask;
 
+    @Autowired
+    private ReportTableDao reportTableDao;
+
+    @Autowired
+    private QuartzService quartzService;
+
+    @Autowired
+    private RedisUtil redisUtil;
+
+    @Autowired
+    private OpcDaTask opcDaTask;
+
+    @Autowired
+    private PrintDao printDao;
+
     @PostConstruct
     public void initData() {
 
@@ -56,5 +80,94 @@ public class InitRunner {
                 }
             }
         }
+
+        List<ReportTable> reportTableList = reportTableDao.getAllAutoReportTable(ConstantStr.AUTOMATIC_REPORT, ConstantStr.START_UP);
+        if (Blank.isNotEmpty(reportTableList)) {
+            for (ReportTable reportTable : reportTableList) {
+                Map<String, Object> map = new HashMap<>();
+                map.put("reportTable", reportTable);
+                String cronId = reportTable.getCronId();
+                String cron = reportTable.getCron();
+                quartzService.addTask(new QuartzBean(cronId, cronId, AutoTableTask.class, 0, cron, map));
+            }
+        }
+
+        List<ItemGroup> itemGroupList = itemGroupDao.getAllItemGroup(null, null);
+        if (Blank.isNotEmpty(itemGroupList)) {
+            for (ItemGroup itemGroup : itemGroupList) {
+                String readWeek = itemGroup.getReadWeek();
+                Integer id = itemGroup.getId();
+                DataSource dataSource = DataSource.convertPassword(dataSourceDao.getDataSourceById(itemGroup.getDataSourceId()));
+                DataSourceType dataSourceType = dataSourceDao.getDataSourceTypeById(dataSource.getTypeId());
+                if (OpcUtil.isOpcDa(dataSourceType.getDataSourceTypeKey())) {
+                    if (itemGroup.getRunState() == ConstantStr.START_UP || itemGroup.getRunState() == ConstantStr.EXCEPT_STOP_UP) {
+                        if (Blank.isEmpty(dataSource.getIpAddress(), dataSource.getIpUserName(), dataSource.getIpPassword())) {
+                            //如果数据组配置的数据源的ip地址,帐户,密码其中一个为空,直接关停数据组
+                            itemGroupDao.stopItemGroupById(id, ConstantStr.STOP_IT);
+                            redisUtil.del(ConstantStr.ITEM_GROUP + id);
+                        }
+                        //如果opc服务未启动,数据组连接不上,直接将这个数据组设为停止状态
+                        //如果opc服务启动好了,数据组连接不上,直接将数据组设置为停止状态
+                        //如果opc服务启动好了,我们能连接上,将数据组设置为启动状态,并重新运行
+                        Server server = null;
+                        try {
+                            server = OpcDaUtil.createServer(dataSource);
+                            server.connect();
+                            if (Blank.isEmpty(server)) {
+                                itemGroupDao.stopItemGroupById(id, ConstantStr.STOP_IT);
+                                redisUtil.del(ConstantStr.ITEM_GROUP + id);
+                                continue;
+                            }
+                        } catch (Exception e) {
+                            itemGroupDao.stopItemGroupById(id, ConstantStr.STOP_IT);
+                            redisUtil.del(ConstantStr.ITEM_GROUP + id);
+                            continue;
+                        } finally {
+                            if (Blank.isNotEmpty(server)) {
+                                server.dispose();
+                            }
+                        }
+                        //新增定时器任务
+                        String cronId = Blank.isEmpty(itemGroup.getCronId()) ?
+                                UUID.randomUUID().toString().replace("-", "") :
+                                itemGroup.getCronId();
+                        String cron = "0 0 0 ? * ";
+                        if (Blank.isEmpty(readWeek)) {
+                            cron = cron + "MON,TUE,WED,THU,FRI,SAT,SUN";
+                            //立即执行一次Timer
+                            opcDaTask.opcDaTask(itemGroup, dataSource, cronId);
+                        } else {
+                            cron = cron + readWeek;
+                            for (String str : readWeek.split(",")) {
+                                if (str.equals(DateUtil.getCurrentWeekEn())) {
+                                    //立即执行一次Timer
+                                    opcDaTask.opcDaTask(itemGroup, dataSource, cronId);
+                                    break;
+                                }
+                            }
+                        }
+                        Map<String, Object> map = new HashMap<>();
+                        map.put("itemGroup", itemGroup);
+                        map.put("dataSource", dataSource);
+                        map.put("cronId", cronId);
+                        quartzService.addTask(new QuartzBean(cronId, cronId, OpcDaTask.class, 0, cron, map));
+                        itemGroupDao.runItemGroupById(id, ConstantStr.START_UP, cronId);
+                        redisUtil.set(ConstantStr.ITEM_GROUP + id, true);
+                    }
+                }
+            }
+        }
+
+        List<Print> printList = printDao.getAllPrint(ConstantStr.START_UP);
+        if (Blank.isNotEmpty(printList)) {
+            for (Print print : printList) {
+                printDao.runAutoPrintById(print.getId(), ConstantStr.START_UP);
+                Map<String, Object> map = new HashMap<>();
+                map.put("print", print);
+                String cronId = print.getCronId();
+                String cron = print.getCron();
+                quartzService.addTask(new QuartzBean(cronId, cronId, com.example.opc_da.quartz.task.PrintTask.class, 0, cron, map));
+            }
+        }
     }
 }

+ 0 - 77
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/dynamicSchedule/CronTaskRegister.java

@@ -1,77 +0,0 @@
-package com.example.opc_da.dynamicSchedule;
-
-import com.example.opc_common.dynamicSchedule.ScheduledTask;
-import org.springframework.beans.factory.DisposableBean;
-import org.springframework.scheduling.TaskScheduler;
-import org.springframework.scheduling.config.CronTask;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.Resource;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-/**
- * 定时器注册类,增加定时器任务,删除定时器任务
- */
-@Component
-public class CronTaskRegister implements DisposableBean {
-
-    @Resource
-    TaskScheduler taskScheduler;
-
-    private final Map<String, ScheduledTask> scheduledTaskMap = new ConcurrentHashMap<>();
-
-    public TaskScheduler getTaskScheduler() {
-        return this.taskScheduler;
-    }
-
-    /**
-     * 新增定时器任务
-     *
-     * @param task
-     * @param cron
-     */
-    public void addCronTask(Runnable task, String cronId, String cron) {
-        addCronTask(new CronTask(task, cron), cronId);
-    }
-
-    public void addCronTask(CronTask cronTask, String cronId) {
-        if (cronTask != null) {
-            if (this.scheduledTaskMap.containsKey(cronId)) {
-                removeCronTask(cronId);
-            }
-            //重新添加
-            this.scheduledTaskMap.put(cronId, scheduleCronTask(cronTask));
-        }
-    }
-
-    /**
-     * 移除定时器
-     *
-     * @param cronId
-     */
-    public void removeCronTask(String cronId) {
-        try {
-            ScheduledTask scheduledTask = this.scheduledTaskMap.remove(cronId);
-            if (scheduledTask != null) {
-                scheduledTask.cancel();
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    public ScheduledTask scheduleCronTask(CronTask cronTask) {
-        ScheduledTask scheduledTask = new ScheduledTask();
-        scheduledTask.future = this.taskScheduler.schedule(cronTask.getRunnable(), cronTask.getTrigger());
-        return scheduledTask;
-    }
-
-    @Override
-    public void destroy() throws Exception {
-        for (ScheduledTask task : this.scheduledTaskMap.values()) {
-            task.cancel();
-        }
-        this.scheduledTaskMap.clear();
-    }
-}

+ 0 - 142
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/dynamicSchedule/DynamicScheduleConfig.java

@@ -1,142 +0,0 @@
-package com.example.opc_da.dynamicSchedule;
-
-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.OpcUtil;
-import com.example.opc_da.dao.DataSourceDao;
-import com.example.opc_da.dao.ItemGroupDao;
-import com.example.opc_da.dao.PrintDao;
-import com.example.opc_da.dao.ReportTableDao;
-import com.example.opc_da.task.OpcDaTask;
-import com.example.opc_da.task.PrintTask;
-import com.example.opc_da.task.ReportTableTask;
-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.Server;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.scheduling.annotation.SchedulingConfigurer;
-import org.springframework.scheduling.config.ScheduledTaskRegistrar;
-
-import javax.annotation.Resource;
-import java.util.List;
-import java.util.UUID;
-
-@Slf4j
-@Configuration
-public class DynamicScheduleConfig implements SchedulingConfigurer {
-
-    //这里因为报表存在动态定时器,所以,引入进来,如果后面有其他类型的动态定时器也需要在这里引进来,系统启动才能扫描到配置的定时器
-    @Resource
-    ReportTableDao reportTableDao;
-
-    @Resource
-    private ItemGroupDao itemGroupDao;
-
-    @Resource
-    private DataSourceDao dataSourceDao;
-
-    @Autowired
-    private PrintDao printDao;
-
-    @Resource
-    private CronTaskRegister cronTaskRegister;
-
-    @Autowired
-    private OpcDaTask opcDaTask;
-
-    @Resource
-    private RedisUtil redisUtil;
-
-    @Override
-    public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
-
-        List<ReportTable> reportTableList = reportTableDao.getAllAutoReportTable(ConstantStr.AUTOMATIC_REPORT, ConstantStr.START_UP);
-        if (Blank.isNotEmpty(reportTableList)) {
-            for (ReportTable reportTable : reportTableList) {
-                SchedulingRunnable task = new SchedulingRunnable(ReportTableTask.class, "genAutoTableData", new Object[]{reportTable});
-                cronTaskRegister.addCronTask(task, reportTable.getCronId(), reportTable.getCron());
-//                scheduledTaskRegistrar.addTriggerTask(
-//                        new SchedulingRunnable(TestTask.class, "test1", new Object[]{reportTable.getId(), reportTable.getCron()})
-//                        , triggerContext -> {
-//                            return new CronTrigger(reportTable.getCron()).nextExecutionTime(triggerContext);
-//                        });
-            }
-        }
-
-        List<ItemGroup> itemGroupList = itemGroupDao.getAllItemGroup(null, null);
-        if (Blank.isNotEmpty(itemGroupList)) {
-            for (ItemGroup itemGroup : itemGroupList) {
-                String readWeek = itemGroup.getReadWeek();
-                Integer id = itemGroup.getId();
-                DataSource dataSource = DataSource.convertPassword(dataSourceDao.getDataSourceById(itemGroup.getDataSourceId()));
-                DataSourceType dataSourceType = dataSourceDao.getDataSourceTypeById(dataSource.getTypeId());
-                if (OpcUtil.isOpcDa(dataSourceType.getDataSourceTypeKey())) {
-                    if (itemGroup.getRunState() == ConstantStr.START_UP || itemGroup.getRunState() == ConstantStr.EXCEPT_STOP_UP) {
-                        if (Blank.isEmpty(dataSource.getIpAddress(), dataSource.getIpUserName(), dataSource.getIpPassword())) {
-                            //如果数据组配置的数据源的ip地址,帐户,密码其中一个为空,直接关停数据组
-                            itemGroupDao.stopItemGroupById(id, ConstantStr.STOP_IT);
-                            redisUtil.del(ConstantStr.ITEM_GROUP + id);
-                        }
-                        //如果opc服务未启动,数据组连接不上,直接将这个数据组设为停止状态
-                        //如果opc服务启动好了,数据组连接不上,直接将数据组设置为停止状态
-                        //如果opc服务启动好了,我们能连接上,将数据组设置为启动状态,并重新运行
-                        Server server = null;
-                        try {
-                            server = OpcDaUtil.createServer(dataSource);
-                            server.connect();
-                            if (Blank.isEmpty(server)) {
-                                itemGroupDao.stopItemGroupById(id, ConstantStr.STOP_IT);
-                                redisUtil.del(ConstantStr.ITEM_GROUP + id);
-                                continue;
-                            }
-                        } catch (Exception e) {
-                            itemGroupDao.stopItemGroupById(id, ConstantStr.STOP_IT);
-                            redisUtil.del(ConstantStr.ITEM_GROUP + id);
-                            continue;
-                        } finally {
-                            if (Blank.isNotEmpty(server)) {
-                                server.dispose();
-                            }
-                        }
-                        //新增定时器任务
-                        String cronId = Blank.isEmpty(itemGroup.getCronId()) ?
-                                UUID.randomUUID().toString().replace("-", "") :
-                                itemGroup.getCronId();
-                        String cron = "0 0 0 ? * ";
-                        if (Blank.isEmpty(readWeek)) {
-                            cron = cron + "MON,TUE,WED,THU,FRI,SAT,SUN";
-                            //立即执行一次Timer
-                            opcDaTask.opcDaTask(itemGroup, dataSource, cronId);
-                        } else {
-                            cron = cron + readWeek;
-                            for (String str : readWeek.split(",")) {
-                                if (str.equals(DateUtil.getCurrentWeekEn())) {
-                                    //立即执行一次Timer
-                                    opcDaTask.opcDaTask(itemGroup, dataSource, cronId);
-                                    break;
-                                }
-                            }
-                        }
-                        SchedulingRunnable task = new SchedulingRunnable(OpcDaTask.class, "opcDaTask", new Object[]{itemGroup, dataSource, cronId});
-                        cronTaskRegister.addCronTask(task, cronId, cron);
-                        itemGroupDao.runItemGroupById(id, ConstantStr.START_UP, cronId);
-                        redisUtil.set(ConstantStr.ITEM_GROUP + id, true);
-                    }
-                }
-            }
-        }
-
-        List<Print> printList = printDao.getAllPrint(ConstantStr.START_UP);
-        if (Blank.isNotEmpty(printList)) {
-            for (Print print : printList) {
-                printDao.runAutoPrintById(print.getId(), ConstantStr.START_UP);
-                SchedulingRunnable task = new SchedulingRunnable(PrintTask.class, "autoPrint", new Object[]{print});
-                cronTaskRegister.addCronTask(task, print.getCronId(), print.getCron());
-            }
-        }
-    }
-}

+ 0 - 24
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/dynamicSchedule/ScheduleConfig.java

@@ -1,24 +0,0 @@
-package com.example.opc_da.dynamicSchedule;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.scheduling.TaskScheduler;
-import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
-
-@Configuration
-public class ScheduleConfig {
-
-    /**
-     * 线程池
-     * @return
-     */
-    @Bean
-    public TaskScheduler taskScheduler() {
-        ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
-        //定时任务执行线程池核心线程数
-        taskScheduler.setPoolSize(50);
-        taskScheduler.setRemoveOnCancelPolicy(true);
-        taskScheduler.setThreadNamePrefix("schedule-task-");
-        return taskScheduler;
-    }
-}

+ 0 - 57
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/dynamicSchedule/SchedulingRunnable.java

@@ -1,57 +0,0 @@
-package com.example.opc_da.dynamicSchedule;
-
-import com.example.opc_da.config.SpringContextUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.util.ReflectionUtils;
-
-import java.lang.reflect.Method;
-
-public class SchedulingRunnable implements Runnable {
-
-    private static final Logger logger = LoggerFactory.getLogger(SchedulingRunnable.class);
-
-    private Class clazz;
-    private String className;
-
-    private String methodName;
-
-    private Object[] params;
-
-    public SchedulingRunnable(Class clazz, String methodName, Object... params) {
-        this.clazz = clazz;
-        className = clazz.getName();
-        this.methodName = methodName;
-        this.params = params;
-    }
-
-    @Override
-    public void run() {
-        logger.info("定时任务开始执行 -bean:{},方法:{},参数:{}", className, methodName, params);
-
-        long startTime = System.currentTimeMillis();
-        try {
-            Object target = SpringContextUtils.getBean(clazz);
-            Method method = null;
-            if (null != params && params.length > 0) {
-                Class<?>[] paramCls = new Class[params.length];
-                for (int i = 0; i < params.length; i++) {
-                    paramCls[i] = params[i].getClass();
-                }
-                method = target.getClass().getDeclaredMethod(methodName, paramCls);
-            } else {
-                method = target.getClass().getDeclaredMethod(methodName);
-            }
-            ReflectionUtils.makeAccessible(method);
-            if (null != params && params.length > 0) {
-                method.invoke(target, params);
-            } else {
-                method.invoke(target);
-            }
-        } catch (Exception e) {
-            logger.error(String.format("定时任务执行异常 - bean:%s,方法:%s,参数:%s ", className, methodName, params), e);
-        }
-        long times = System.currentTimeMillis() - startTime;
-        logger.info("定时任务执行结束 - bean:{},方法:{},参数:{},耗时:{} 毫秒", className, methodName, params, times);
-    }
-}

+ 55 - 0
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/quartz/QuartzBean.java

@@ -0,0 +1,55 @@
+package com.example.opc_da.quartz;
+
+import lombok.Data;
+import lombok.experimental.Tolerate;
+import org.quartz.Job;
+
+import java.util.Map;
+
+@Data
+public class QuartzBean {
+    /**
+     * 任务id
+     */
+    private String id;
+
+    /**
+     * 任务名称
+     */
+    private String jobName;
+
+    /**
+     * 任务执行类 全路径
+     */
+    private Class<? extends Job> jobClass;
+
+    /**
+     * 任务状态 启动还是暂停
+     */
+    private Integer status;
+
+    /**
+     * 任务运行时间表达式
+     */
+    private String cronExpression;
+
+    /**
+     * 参数
+     */
+    private Map<String,Object> params;
+
+    @Tolerate
+    public QuartzBean() {
+
+    }
+
+    public QuartzBean(String id, String jobName, Class<? extends Job> jobClass,
+                      Integer status, String cronExpression,Map<String,Object> params) {
+        this.id = id;
+        this.jobName = jobName;
+        this.jobClass = jobClass;
+        this.status = status;
+        this.cronExpression = cronExpression;
+        this.params = params;
+    }
+}

+ 34 - 0
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/quartz/QuartzService.java

@@ -0,0 +1,34 @@
+package com.example.opc_da.quartz;
+
+public interface QuartzService {
+    /**
+     * 创建定时器
+     * @param quartzBean
+     */
+    void addTask(QuartzBean quartzBean);
+    /**
+     * 暂停定时器
+     * @param quartzBean
+     */
+    void pauseTask(QuartzBean quartzBean);
+    /**
+     * 恢复定时器
+     * @param quartzBean
+     */
+    void resumeTask(QuartzBean quartzBean);
+    /**
+     * 立刻运行一次定时器
+     * @param quartzBean
+     */
+    void runOne(QuartzBean quartzBean);
+    /**
+     * 修改定时器
+     * @param quartzBean
+     */
+    void editTask(QuartzBean quartzBean);
+    /**
+     * 删除定时器
+     * @param quartzBean
+     */
+    void deleteTask(String jobName);
+}

+ 80 - 0
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/quartz/QuartzServiceImpl.java

@@ -0,0 +1,80 @@
+package com.example.opc_da.quartz;
+
+import org.quartz.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class QuartzServiceImpl implements QuartzService {
+
+    @Autowired
+    private Scheduler scheduler;
+
+    @Override
+    public void addTask(QuartzBean quartzBean) {
+        JobDetail jobDetail = null;
+        try {
+            //按照实体类参数注释传参即可,执行的任务类需要包全路径
+            jobDetail = JobBuilder.newJob(quartzBean.getJobClass()).withIdentity(quartzBean.getJobName()).usingJobData(new JobDataMap(quartzBean.getParams())).build();
+            CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(quartzBean.getCronExpression());
+            CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(quartzBean.getId()).withSchedule(scheduleBuilder).build();
+            scheduler.scheduleJob(jobDetail, trigger);
+        } catch (SchedulerException e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    public void pauseTask(QuartzBean quartzBean) {
+        try {
+            scheduler.pauseJob(JobKey.jobKey(quartzBean.getJobName()));
+        } catch (SchedulerException e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    public void resumeTask(QuartzBean quartzBean) {
+        try {
+            scheduler.resumeJob(JobKey.jobKey(quartzBean.getJobName()));
+        } catch (SchedulerException e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    public void runOne(QuartzBean quartzBean) {
+        try {
+            scheduler.triggerJob(JobKey.jobKey(quartzBean.getJobName()));
+        } catch (SchedulerException e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    public void editTask(QuartzBean quartzBean) {
+        try {
+            //获取到对应任务的触发器
+            TriggerKey triggerKey = TriggerKey.triggerKey(quartzBean.getJobName());
+            //设置定时任务执行方式
+            CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(quartzBean.getCronExpression());
+            //重新构建任务的触发器trigger
+            CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
+            trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();
+            //重置对应的job
+            scheduler.rescheduleJob(triggerKey, trigger);
+        } catch (SchedulerException e) {
+            System.out.println("更新定时任务出错:" + e.getMessage());
+        }
+
+    }
+
+    @Override
+    public void deleteTask(String jobName) {
+        try {
+            scheduler.deleteJob(JobKey.jobKey(jobName));
+        } catch (SchedulerException e) {
+            e.printStackTrace();
+        }
+    }
+}

+ 285 - 0
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/quartz/task/AutoTableTask.java

@@ -0,0 +1,285 @@
+package com.example.opc_da.quartz.task;
+
+import cn.hutool.core.util.IdUtil;
+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.Blank;
+import com.example.opc_common.util.ConstantStr;
+import com.example.opc_common.util.DateUtil;
+import com.example.opc_da.dao.RawDataDao;
+import com.example.opc_da.dao.ReportTableDao;
+import com.example.opc_da.task.AsyncAsyncTask;
+import com.example.opc_da.task.ReportTask;
+import com.example.opc_da.util.CronUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.quartz.JobDataMap;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.quartz.QuartzJobBean;
+import org.springframework.stereotype.Component;
+
+import java.util.*;
+
+@Slf4j
+@Component
+public class AutoTableTask extends QuartzJobBean {
+
+    @Autowired
+    private ReportTableDao reportTableDao;
+
+    @Autowired
+    private RawDataDao rawDataDao;
+
+    @Autowired
+    private AsyncAsyncTask asyncAsyncTask;
+
+    @Override
+    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
+        JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
+        ReportTable reportTable = (ReportTable) jobDataMap.get("reportTable");
+        log.info("自动报表,{},执行开始,时间为{}", reportTable, DateUtil.dateChangeStrYmdhmss(new Date()));
+        Integer tableTemplateId = reportTable.getTableTemplateId();
+        TableTemplate tableTemplate = reportTableDao.getTableTemplateNoDataById(tableTemplateId);
+        if (Blank.isEmpty(tableTemplate)) {
+            log.info("报表模板不存在");
+        }
+        //通过报表关联的模板,查询出模板对应的统计图,以及统计图数据项信息
+        List<TableTemplateChart> tableTemplateChartList = reportTableDao.getTtcByTemplateId(tableTemplateId);
+        //生成一张新的子报表,并添加相应的日志,以及用户组授权
+        String id = IdUtil.createSnowflake(1, 1).nextId() + "";
+        asyncAsyncTask.addHaveKeyChReport(reportTable, id, ConstantStr.AUTOMATIC_GENERATE_REPORT, null);
+        //根据报表的cron和开始、结束时间,生成此次执行报表抓取数据的开始时间和结束时间
+        String cron = reportTable.getCron();
+        Date startTime = CronUtil.mappingAutoTime(cron, reportTable.getStartTime());
+        Date endTime = CronUtil.getTimeAfter(cron, startTime);
+        //获取此报表管理的报表模板,所关联的表格数据项
+        List<ReportTableItem> reportTableItemList = new ArrayList<>();
+        //通过时段类型,数据组id,数据源id,对数据项进行分组
+        List<TableTemplateTableItem> tableTemplateItemGroupList = reportTableDao.getTttiByTemplateIdGroup(tableTemplateId);
+        if (Blank.isNotEmpty(tableTemplateItemGroupList)) {
+            for (TableTemplateTableItem ttti : tableTemplateItemGroupList) {
+                Integer itemGroupId = ttti.getItemGroupId();
+                Integer dataSourceId = ttti.getDataSourceId();
+                Integer remainder = itemGroupId % ConstantStr.SUB_TABLE_NUM;
+                Integer bucketType = ttti.getBucketType();
+                //查询每个分组下的报表模板数据项信息
+                List<TableTemplateTableItem> tableTemplateItemList = reportTableDao.getTttiByGroup(tableTemplateId, itemGroupId, dataSourceId, bucketType);
+                List<RawData> rawDataList = new ArrayList<>();
+                List<CursorRawData> cursorRawDataList = new ArrayList<>();
+                //获取所有数据项的数据
+                if (bucketType.equals(ConstantStr.PERIOD_TIME_DAY) || bucketType.equals(ConstantStr.PERIOD_TIME_HOUR)
+                        || bucketType.equals(ConstantStr.PERIOD_TIME_MINUTE) || bucketType.equals(ConstantStr.PERIOD_TIME_SECOND)) {
+                    String startBelongTime;
+                    String endBelongTime;
+
+                    //从历史表中,查出历史数据;从临时表中,查出所有临时数据
+                    if (bucketType.equals(ConstantStr.PERIOD_TIME_DAY)) {
+                        startBelongTime = DateUtil.dateChangeStrYmdhms(startTime).substring(0, ConstantStr.TIME_DAY_STR.length());
+                        endBelongTime = DateUtil.dateChangeStrYmdhms(endTime).substring(0, ConstantStr.TIME_DAY_STR.length());
+                        rawDataList = rawDataDao.getTableDataGroupByDay(itemGroupId, remainder, dataSourceId, tableTemplateItemList, startBelongTime, endBelongTime);
+                        cursorRawDataList = rawDataDao.getTableCursorDataGroupByDay(itemGroupId, dataSourceId, tableTemplateItemList, startBelongTime, endBelongTime);
+                    } else {
+                        startBelongTime = DateUtil.dateChangeStrYmdhms(startTime).substring(0, ConstantStr.TIME_HOUR_STR.length());
+                        endBelongTime = DateUtil.dateChangeStrYmdhms(endTime).substring(0, ConstantStr.TIME_HOUR_STR.length());
+                        rawDataList = rawDataDao.getTableDataGroup(itemGroupId, remainder, dataSourceId, tableTemplateItemList, startBelongTime, endBelongTime);
+                        cursorRawDataList = rawDataDao.getTableCursorDataGroup(itemGroupId, dataSourceId, tableTemplateItemList, startBelongTime, endBelongTime);
+                    }
+                } else {
+                    throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前还未适配此种类型的取值模式");
+                }
+
+                for (TableTemplateTableItem t : tableTemplateItemList) {
+                    //循环得到每个数据项的历史数据和临时数据,归属时间
+                    Integer itemGroupId1 = t.getItemGroupId();
+                    Integer dataSourceId1 = t.getDataSourceId();
+                    String itemReadName = t.getItemReadName();
+                    List<RawData> currentRawDataList = new ArrayList<>();
+                    List<CursorRawData> currentCursorRawDataList = new ArrayList<>();
+                    for (int i = 0; i < rawDataList.size(); i++) {
+                        RawData rawData = rawDataList.get(i);
+                        //生成历史数据
+                        if (rawData.getItemGroupId().equals(itemGroupId1)
+                                && rawData.getDataSourceId().equals(dataSourceId1)
+                                && rawData.getItemName().equals(itemReadName)) {
+                            currentRawDataList.add(rawData);
+//                            rawDataList.remove(i);
+//                            i--;
+                        }
+                    }
+                    for (int i = 0; i < cursorRawDataList.size(); i++) {
+                        CursorRawData cursorRawData = cursorRawDataList.get(i);
+                        //生成临时数据
+                        if (cursorRawData.getItemGroupId().equals(itemGroupId1)
+                                && cursorRawData.getDataSourceId().equals(dataSourceId1)
+                                && cursorRawData.getItemName().equals(itemReadName)) {
+                            currentCursorRawDataList.add(cursorRawData);
+//                            cursorRawDataList.remove(i);
+//                            i--;
+                        }
+                    }
+                    //将所有数据组合成一个List<CursorRawData>
+                    currentCursorRawDataList.addAll(ReportTask.genRawChangeCursor(currentRawDataList));
+                    //对currentCursorRawDataList进行排序,使用dataValueTime排序
+                    Collections.sort(currentCursorRawDataList, new Comparator<CursorRawData>() {
+                        @Override
+                        public int compare(CursorRawData o1, CursorRawData o2) {
+                            return o1.getDataValueTime().compareTo(o2.getDataValueTime());
+                        }
+                    });
+
+                    //计算出数据项的值集合
+                    Map<String, String> map = new HashMap<>();
+                    Integer valueTakingMode = t.getValueTakingMode();
+                    Integer bucketValue = t.getBucketValue();
+                    if (Blank.isNotEmpty(currentCursorRawDataList)) {
+                        String dataType = currentCursorRawDataList.get(0).getDataType();
+                        if (dataType.equals("boolean")) {
+                            map = ReportTask.genBoolean(currentCursorRawDataList, startTime, endTime, valueTakingMode, bucketType, bucketValue);
+                        } else {
+                            try {
+                                map = ReportTask.genBigDecimal(currentCursorRawDataList, startTime, endTime, valueTakingMode, bucketType, bucketValue);
+                            } catch (Exception e) {
+                                map = ReportTask.genString(currentCursorRawDataList, startTime, endTime, bucketType, bucketValue);
+                            }
+                        }
+                    } else {
+                        map = ReportTask.genString(currentCursorRawDataList, startTime, endTime, bucketType, bucketValue);
+                    }
+                    Integer valueType = t.getValueType();
+                    boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
+                    String valueList = map.get(flage ? "valueList" : "orgValueList");
+                    String valueTimeList = map.get("valueTimeList");
+                    String valueIndexList = map.get("valueIndexList");
+                    Integer itemId = t.getItemId();
+                    Integer xaxis = t.getXaxis();
+                    Integer yaxis = t.getYaxis();
+                    String standby = t.getStandby();
+                    //将数据项的信息放到集合中
+                    reportTableItemList.add(new ReportTableItem(
+                            id, itemId, valueType, xaxis, yaxis, standby, valueList, valueTimeList, valueIndexList
+                    ));
+                }
+            }
+        }
+        if (Blank.isNotEmpty(reportTableItemList)) {
+            reportTableDao.addReportTableItemList(reportTableItemList);
+        }
+
+        if (Blank.isNotEmpty(tableTemplateChartList)) {
+            for (TableTemplateChart ttc : tableTemplateChartList) {
+                Integer valueTakingMode = ttc.getValueTakingMode();
+                Integer valueType = ttc.getValueType();
+                Integer bucketType = ttc.getBucketType();
+                Integer bucketValue = ttc.getBucketValue();
+                boolean flage = valueType.equals(ConstantStr.CALCULATED_VALUE);
+                //根据模板中的统计图生成相应的报表统计图,并添加
+                ReportChart reportChart = new ReportChart(
+                        id, ttc.getId(), ttc.getChartType(), ttc.getChartName(), valueType, ttc.getStandby()
+                );
+                reportTableDao.addReportChart(reportChart);
+                Integer reportChartId = reportChart.getId();
+                //获取模板统计图中的数据项信息
+                List<TableTemplateChartItem> tableTemplateChartItemList = ttc.getTableTemplateChartItemList();
+                List<ReportChartItem> reportChartItemList = new ArrayList<>();
+                if (Blank.isNotEmpty(tableTemplateChartItemList)) {
+                    TableTemplateChartItem tableTemplateChartItem = tableTemplateChartItemList.get(0);
+                    Integer itemGroupId = tableTemplateChartItem.getItemGroupId();
+                    Integer dataSourceId = tableTemplateChartItem.getDataSourceId();
+                    Integer remainder = itemGroupId % ConstantStr.SUB_TABLE_NUM;
+                    List<RawData> rawDataList = new ArrayList<>();
+                    List<CursorRawData> cursorRawDataList = new ArrayList<>();
+                    if (bucketType.equals(ConstantStr.PERIOD_TIME_DAY) || bucketType.equals(ConstantStr.PERIOD_TIME_HOUR)
+                            || bucketType.equals(ConstantStr.PERIOD_TIME_MINUTE) || bucketType.equals(ConstantStr.PERIOD_TIME_SECOND)) {
+                        String startBelongTime;
+                        String endBelongTime;
+
+                        //从历史表中,查出历史数据;从临时表中,查出所有临时数据
+                        if (bucketType.equals(ConstantStr.PERIOD_TIME_DAY)) {
+                            startBelongTime = DateUtil.dateChangeStrYmdhms(startTime).substring(0, ConstantStr.TIME_DAY_STR.length());
+                            endBelongTime = DateUtil.dateChangeStrYmdhms(endTime).substring(0, ConstantStr.TIME_DAY_STR.length());
+                            rawDataList = rawDataDao.getTableChartDataGroupByDay(itemGroupId, remainder, dataSourceId, tableTemplateChartItemList, startBelongTime, endBelongTime);
+                            cursorRawDataList = rawDataDao.getTableChartCursorDataGroupByDay(itemGroupId, dataSourceId, tableTemplateChartItemList, startBelongTime, endBelongTime);
+                        } else {
+                            startBelongTime = DateUtil.dateChangeStrYmdhms(startTime).substring(0, ConstantStr.TIME_HOUR_STR.length());
+                            endBelongTime = DateUtil.dateChangeStrYmdhms(endTime).substring(0, ConstantStr.TIME_HOUR_STR.length());
+                            rawDataList = rawDataDao.getTableChartDataGroup(itemGroupId, remainder, dataSourceId, tableTemplateChartItemList, startBelongTime, endBelongTime);
+                            cursorRawDataList = rawDataDao.getTableChartCursorDataGroup(itemGroupId, dataSourceId, tableTemplateChartItemList, startBelongTime, endBelongTime);
+                        }
+
+                        for (TableTemplateChartItem t : tableTemplateChartItemList) {
+                            Integer itemGroupId1 = t.getItemGroupId();
+                            Integer dataSourceId1 = t.getDataSourceId();
+                            Integer itemId = t.getItemId();
+                            String itemReadName = t.getItemReadName();
+                            List<RawData> currentRawDataList = new ArrayList<>();
+                            List<CursorRawData> currentCursorRawDataList = new ArrayList<>();
+                            for (int i = 0; i < rawDataList.size(); i++) {
+                                RawData rawData = rawDataList.get(i);
+                                //生成历史数据
+                                if (rawData.getItemGroupId().equals(itemGroupId1)
+                                        && rawData.getDataSourceId().equals(dataSourceId1)
+                                        && rawData.getItemName().equals(itemReadName)) {
+                                    currentRawDataList.add(rawData);
+//                                    rawDataList.remove(i);
+//                                    i--;
+                                }
+                            }
+                            for (int i = 0; i < cursorRawDataList.size(); i++) {
+                                CursorRawData cursorRawData = cursorRawDataList.get(i);
+                                //生成临时数据
+                                if (cursorRawData.getItemGroupId().equals(itemGroupId1)
+                                        && cursorRawData.getDataSourceId().equals(dataSourceId1)
+                                        && cursorRawData.getItemName().equals(itemReadName)) {
+                                    currentCursorRawDataList.add(cursorRawData);
+//                                    cursorRawDataList.remove(i);
+//                                    i--;
+                                }
+                            }
+                            //将所有数据组合成一个List<CursorRawData>
+                            currentCursorRawDataList.addAll(ReportTask.genRawChangeCursor(currentRawDataList));
+                            //对currentCursorRawDataList进行排序,使用dataValueTime排序
+                            Collections.sort(currentCursorRawDataList, new Comparator<CursorRawData>() {
+                                @Override
+                                public int compare(CursorRawData o1, CursorRawData o2) {
+                                    return o1.getDataValueTime().compareTo(o2.getDataValueTime());
+                                }
+                            });
+
+                            //计算出数据项的值集合
+                            Map<String, String> map = new HashMap<>();
+                            if (Blank.isNotEmpty(currentCursorRawDataList)) {
+                                String dataType = currentCursorRawDataList.get(0).getDataType();
+                                if (dataType.equals("boolean")) {
+                                    map = ReportTask.genBoolean(currentCursorRawDataList, startTime, endTime, valueTakingMode, bucketType, bucketValue);
+                                } else {
+                                    try {
+                                        map = ReportTask.genBigDecimal(currentCursorRawDataList, startTime, endTime, valueTakingMode, bucketType, bucketValue);
+                                    } catch (Exception e) {
+                                        map = ReportTask.genString(currentCursorRawDataList, startTime, endTime, bucketType, bucketValue);
+                                    }
+                                }
+                            } else {
+                                map = ReportTask.genString(currentCursorRawDataList, startTime, endTime, bucketType, bucketValue);
+                            }
+                            String valueList = map.get(flage ? "valueList" : "orgValueList");
+                            String valueTimeList = map.get("valueTimeList");
+                            String valueIndexList = map.get("valueIndexList");
+                            reportChartItemList.add(new ReportChartItem(
+                                    reportChartId, itemId, valueList, valueTimeList, valueIndexList
+                            ));
+                        }
+                        //添加报表统计图相关的数据项
+                        if (Blank.isNotEmpty(reportChartItemList)) {
+                            reportTableDao.addReportChartItem(reportChartItemList);
+                        }
+                    } else {
+                        throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "目前还未适配此种类型的取值模式");
+                    }
+                }
+            }
+        }
+        log.info("自动报表,{},执行结束,时间为{}", reportTable, DateUtil.dateChangeStrYmdhmss(new Date()));
+    }
+}

+ 23 - 8
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/OpcDaTask.java → cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/quartz/task/OpcDaTask.java

@@ -1,4 +1,4 @@
-package com.example.opc_da.task;
+package com.example.opc_da.quartz.task;
 
 import com.alibaba.fastjson.JSON;
 import com.example.opc_common.entity.*;
@@ -12,7 +12,8 @@ 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.dao.ReportTableDao;
-import com.example.opc_da.dynamicSchedule.CronTaskRegister;
+import com.example.opc_da.quartz.QuartzService;
+import com.example.opc_da.task.*;
 import com.example.opc_da.util.OpcDaUtil;
 import com.example.opc_da.util.RedisUtil;
 import lombok.extern.slf4j.Slf4j;
@@ -20,8 +21,12 @@ import org.openscada.opc.dcom.da.OPCSERVERSTATE;
 import org.openscada.opc.lib.da.Group;
 import org.openscada.opc.lib.da.ItemState;
 import org.openscada.opc.lib.da.Server;
+import org.quartz.JobDataMap;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.quartz.QuartzJobBean;
 import org.springframework.stereotype.Component;
 
 import java.math.BigDecimal;
@@ -29,7 +34,7 @@ import java.util.*;
 
 @Slf4j
 @Component
-public class OpcDaTask {
+public class OpcDaTask extends QuartzJobBean {
 
     @Autowired
     private DataModelDao dataModelDao;
@@ -44,7 +49,7 @@ public class OpcDaTask {
     private OpcAsyncTask opcAsyncTask;
 
     @Autowired
-    private CronTaskRegister cronTaskRegister;
+    private QuartzService quartzService;
 
     @Autowired
     private RedisUtil redisUtil;
@@ -58,6 +63,16 @@ public class OpcDaTask {
     @Autowired
     private ReportTableTask reportTableTask;
 
+    @Override
+    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
+        JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
+        ItemGroup itemGroup = (ItemGroup) jobDataMap.get("itemGroup");
+        DataSource dataSource = (DataSource) jobDataMap.get("dataSource");
+        String cronId = jobDataMap.getString("cronId");
+
+        opcDaTask(itemGroup,dataSource,cronId);
+    }
+
     public void opcDaTask(ItemGroup itemGroup, DataSource dataSource, String cronId) {
         log.error("OPCDa开始运行,{},执行开始,执行时间为{}", itemGroup, DateUtil.dateChangeStrYmdhmss(new Date()));
         log.info("OPCDa开始运行,{},执行开始,执行时间为{}", itemGroup, DateUtil.dateChangeStrYmdhmss(new Date()));
@@ -69,7 +84,7 @@ public class OpcDaTask {
         }
         if (!flageItemGroup) {
             redisUtil.del(ConstantStr.ITEM_GROUP + id);
-            cronTaskRegister.removeCronTask(cronId);
+            quartzService.deleteTask(cronId);
             return;
         }
         //读取数据并保存
@@ -108,7 +123,7 @@ public class OpcDaTask {
                 timer.schedule(new OpcDaFrequencyTask(redisUtil,
                                 opcAsyncTask,
                                 cronId,
-                                cronTaskRegister,
+                                quartzService,
                                 itemGroupDao,
                                 messageNoticeDao,
                                 timer,
@@ -128,7 +143,7 @@ public class OpcDaTask {
                 timer.schedule(new OpcDaChangeTask(redisUtil,
                                 opcAsyncTask,
                                 cronId,
-                                cronTaskRegister,
+                                quartzService,
                                 itemGroupDao,
                                 messageNoticeDao,
                                 timer,
@@ -152,7 +167,7 @@ public class OpcDaTask {
                 timer.schedule(new OpcDaExceedTask(redisUtil,
                                 opcAsyncTask,
                                 cronId,
-                                cronTaskRegister,
+                                quartzService,
                                 itemGroupDao,
                                 messageNoticeDao,
                                 timer,

+ 12 - 21
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/PrintTask.java → cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/quartz/task/PrintTask.java

@@ -1,4 +1,4 @@
-package com.example.opc_da.task;
+package com.example.opc_da.quartz.task;
 
 import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson.JSONObject;
@@ -8,43 +8,37 @@ 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_da.dao.PrintDao;
-import com.example.opc_da.dao.ReportTableDao;
-import com.example.opc_da.service.PrintService;
 import lombok.extern.slf4j.Slf4j;
+import org.quartz.JobDataMap;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.quartz.QuartzJobBean;
 import org.springframework.stereotype.Component;
 
-import java.net.InetAddress;
 import java.net.URLEncoder;
 import java.util.HashMap;
 
 @Slf4j
 @Component
-public class PrintTask {
+public class PrintTask extends QuartzJobBean {
 
-    @Value("${reportTable.pageUrl}")
-    private String pageUrl;
+    @Autowired
+    private PrintDao printDao;
 
     @Value("${reportTable.printUrl}")
     private String printUrl;
 
-    @Autowired
-    private PrintService printService;
-
-    @Autowired
-    private ReportTableDao reportTableDao;
-
-    @Autowired
-    private PrintDao printDao;
-
-    public void autoPrint(Print print) {
+    @Override
+    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
+        JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
+        Print print = (Print) jobDataMap.get("print");
         log.info("开始执行打印任务");
         String reportTableId = print.getReportTableId();
         String printIp = print.getPrintIp();
         Integer printConfigId = print.getPrintConfigId();
         try {
-            String hostAddress = InetAddress.getLocalHost().getHostAddress();
             PrintConfig printConfig = new PrintConfig();
             if (Blank.isNotEmpty(printConfigId)) {
                 PrintConfig printConfig1 = printDao.getPrintConfigById(printConfigId);
@@ -52,12 +46,9 @@ public class PrintTask {
                     printConfig = printConfig1;
                 }
             }
-//            String url = "http://192.168.0.15:8081/app" + pageUrl + "?id=" + reportTableId;
             String url = "http://localhost:8084/cy-sheet-ss/index.html?id=" + reportTableId;
-//            String url = "http://" + hostAddress + ":8081/app" + pageUrl + "?id=" + reportTableId;
             log.info("报表请求地址{}", url);
             String post = HttpUtil.post("http://" + printIp + ":8084" + printUrl + "?excelUrl=" + URLEncoder.encode(url, "UTF-8") + "&printConfig=" + JSONObject.toJSONString(printConfig), new HashMap<>());
-//            String post = HttpUtil.post("http://" + printIp + ":8084" + printUrl, map);
             log.info(post);
         } catch (Exception e) {
             String message = e.getMessage();

+ 12 - 6
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/service/impl/ItemGroupServiceImpl.java

@@ -7,10 +7,10 @@ import com.example.opc_common.enums.ResultEnum;
 import com.example.opc_common.exception.CustomException;
 import com.example.opc_common.util.*;
 import com.example.opc_da.dao.*;
-import com.example.opc_da.dynamicSchedule.CronTaskRegister;
-import com.example.opc_da.dynamicSchedule.SchedulingRunnable;
+import com.example.opc_da.quartz.QuartzBean;
+import com.example.opc_da.quartz.QuartzService;
+import com.example.opc_da.quartz.task.OpcDaTask;
 import com.example.opc_da.service.ItemGroupService;
-import com.example.opc_da.task.OpcDaTask;
 import com.example.opc_da.task.ReportTask;
 import com.example.opc_da.util.OpcDaUtil;
 import com.example.opc_da.util.RedisUtil;
@@ -67,6 +67,9 @@ public class ItemGroupServiceImpl implements ItemGroupService {
     @Value("${opc_ua_server.address}")
     private String opcUaUrl;
 
+    @Autowired
+    private QuartzService quartzService;
+
     @Override
     public synchronized Result addItemGroup(ItemGroup itemGroup) {
         String userId = userUtil.getCurrentUserId();
@@ -380,15 +383,18 @@ public class ItemGroupServiceImpl implements ItemGroupService {
                             }
                         }
                     }
-                    SchedulingRunnable task = new SchedulingRunnable(OpcDaTask.class, "opcDaTask", new Object[]{itemGroup, dataSource, cronId});
-                    cronTaskRegister.addCronTask(task, cronId, cron);
+                    Map<String, Object> map = new HashMap<>();
+                    map.put("itemGroup", itemGroup);
+                    map.put("dataSource", dataSource);
+                    map.put("cronId", cronId);
+                    quartzService.addTask(new QuartzBean(cronId, cronId, OpcDaTask.class, 0, cron, map));
                     itemGroupDao.runItemGroupById(id, runState, cronId);
                     return Result.ok("启动成功");
                 }
             } else if (runState.equals(ConstantStr.STOP_IT)) {
                 redisUtil.set(ConstantStr.ITEM_GROUP + id, false);
                 itemGroupDao.stopItemGroupById(id, runState);
-                cronTaskRegister.removeCronTask(itemGroup.getCronId());
+                quartzService.deleteTask(itemGroup.getCronId());
                 return Result.ok("停用成功");
             } else {
                 throw new CustomException(ResultEnum.SERVER_ERROR.getRespCode(), ResultEnum.REQUEST_WRONGPARAMS.getRespMsg());

+ 12 - 9
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/service/impl/PrintServiceImpl.java

@@ -10,16 +10,18 @@ import com.example.opc_common.util.ConstantStr;
 import com.example.opc_common.util.Result;
 import com.example.opc_da.dao.PrintDao;
 import com.example.opc_da.dao.ReportTableDao;
-import com.example.opc_da.dynamicSchedule.CronTaskRegister;
-import com.example.opc_da.dynamicSchedule.SchedulingRunnable;
+import com.example.opc_da.quartz.QuartzBean;
+import com.example.opc_da.quartz.QuartzService;
+import com.example.opc_da.quartz.task.PrintTask;
 import com.example.opc_da.service.PrintService;
-import com.example.opc_da.task.PrintTask;
 import org.quartz.CronExpression;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.UUID;
 
 @Transactional
@@ -35,6 +37,9 @@ public class PrintServiceImpl implements PrintService {
     @Autowired
     CronTaskRegister cronTaskRegister;
 
+    @Autowired
+    private QuartzService quartzService;
+
     @Override
     public synchronized Result addPrint(Print print) {
         String cron = print.getCron();
@@ -50,18 +55,16 @@ public class PrintServiceImpl implements PrintService {
                 return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "新增打印任务失败");
             }
             printDao.runAutoPrintById(print.getId(), ConstantStr.START_UP);
-            SchedulingRunnable task = new SchedulingRunnable(PrintTask.class, "autoPrint", new Object[]{print});
-            cronTaskRegister.addCronTask(task, cronId, cron);
+            Map<String, Object> map = new HashMap<>();
+            map.put("print", print);
+            quartzService.addTask(new QuartzBean(cronId, cronId, PrintTask.class, 0, cron, map));
         } else {
             if (printDao.updatePrint(print) <= 0) {
                 return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "修改打印任务失败");
             }
             Print print1 = printDao.getPrintByReportId(reportTableId);
-            String cronId = print1.getCronId();
-            cronTaskRegister.removeCronTask(cronId);
             printDao.runAutoPrintById(id, ConstantStr.START_UP);
-            SchedulingRunnable task = new SchedulingRunnable(PrintTask.class, "autoPrint", new Object[]{print});
-            cronTaskRegister.addCronTask(task, cronId, cron);
+            quartzService.deleteTask(print1.getCronId());
         }
         return Result.ok("打印任务配置成功");
     }

+ 10 - 5
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/service/impl/ReportTableServiceImpl.java

@@ -10,8 +10,9 @@ import com.example.opc_common.util.Result;
 import com.example.opc_da.dao.DictDao;
 import com.example.opc_da.dao.ItemGroupDao;
 import com.example.opc_da.dao.ReportTableDao;
-import com.example.opc_da.dynamicSchedule.CronTaskRegister;
-import com.example.opc_da.dynamicSchedule.SchedulingRunnable;
+import com.example.opc_da.quartz.QuartzBean;
+import com.example.opc_da.quartz.QuartzService;
+import com.example.opc_da.quartz.task.AutoTableTask;
 import com.example.opc_da.service.ReportTableService;
 import com.example.opc_da.task.ReportTableTask;
 import com.example.opc_da.util.RedisUtil;
@@ -54,6 +55,9 @@ public class ReportTableServiceImpl implements ReportTableService {
     @Value("${opc_ua_server.address}")
     private String opcUaUrl;
 
+    @Autowired
+    private QuartzService quartzService;
+
     @Override
     public Result getSysTableTemplate(String keyType, Integer dictId, String templateName) {
         List<Integer> dictIdList = new ArrayList<>();
@@ -694,8 +698,9 @@ public class ReportTableServiceImpl implements ReportTableService {
                     return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "此自动报表已经处于启动状态");
                 }
                 //新增定时器任务
-                SchedulingRunnable task = new SchedulingRunnable(ReportTableTask.class, "genAutoTableData", new Object[]{reportTable});
-                cronTaskRegister.addCronTask(task, cronId, cron);
+                Map<String, Object> map = new HashMap<>();
+                map.put("reportTable", reportTable);
+                quartzService.addTask(new QuartzBean(cronId, cronId, AutoTableTask.class, 0, cron, map));
                 return Result.ok("启动成功");
             } else if (runState.equals(ConstantStr.STOP_IT)) {
                 if (Blank.isEmpty(cronId)) {
@@ -704,7 +709,7 @@ public class ReportTableServiceImpl implements ReportTableService {
                 if (oldRunState.equals(ConstantStr.STOP_IT)) {
                     return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "此自动报表已经处于停止状态");
                 }
-                cronTaskRegister.removeCronTask(cronId);
+                quartzService.deleteTask(cronId);
                 return Result.ok("停止成功");
             } else {
                 throw new CustomException(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "自动报表的状态只有启动或停止");

+ 5 - 5
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/OpcDaChangeTask.java

@@ -8,7 +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.quartz.QuartzService;
 import com.example.opc_da.util.OpcDaUtil;
 import com.example.opc_da.util.RedisUtil;
 import lombok.SneakyThrows;
@@ -38,7 +38,7 @@ public class OpcDaChangeTask extends TimerTask {
 
     private final String cronId;
 
-    private final CronTaskRegister cronTaskRegister;
+    private final QuartzService quartzService;
 
     private final ItemGroupDao itemGroupDao;
 
@@ -65,7 +65,7 @@ public class OpcDaChangeTask extends TimerTask {
     public OpcDaChangeTask(RedisUtil redisUtil,
                            OpcAsyncTask opcAsyncTask,
                            String cronId,
-                           CronTaskRegister cronTaskRegister,
+                           QuartzService quartzService,
                            ItemGroupDao itemGroupDao,
                            MessageNoticeDao messageNoticeDao,
                            Timer timer,
@@ -79,7 +79,7 @@ public class OpcDaChangeTask extends TimerTask {
         this.redisUtil = redisUtil;
         this.opcAsyncTask = opcAsyncTask;
         this.cronId = cronId;
-        this.cronTaskRegister = cronTaskRegister;
+        this.quartzService = quartzService;
         this.itemGroupDao = itemGroupDao;
         this.messageNoticeDao = messageNoticeDao;
         this.timer = timer;
@@ -169,6 +169,7 @@ public class OpcDaChangeTask extends TimerTask {
             //判断此时数据组是否被停止
             if (!getItemGroupRunState(id)) {
                 itemGroupDao.stopItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
+                quartzService.deleteTask(cronId);
                 redisUtil.del(ConstantStr.ITEM_GROUP + id);
                 stopTaskInformation(listener, server, group, threadPool);
                 break;
@@ -353,7 +354,6 @@ public class OpcDaChangeTask extends TimerTask {
             }
             server.dispose();
         }
-        cronTaskRegister.removeCronTask(cronId);
         threadPool.shutdown();
         timer.cancel();
     }

+ 0 - 1
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/OpcDaChangeTask1.java

@@ -8,7 +8,6 @@ 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;

+ 6 - 7
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/OpcDaExceedTask.java

@@ -8,15 +8,15 @@ 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.quartz.QuartzService;
 import com.example.opc_da.util.OpcDaUtil;
 import com.example.opc_da.util.RedisUtil;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import org.jinterop.dcom.common.JIException;
 import org.openscada.opc.lib.common.NotConnectedException;
-import org.openscada.opc.lib.da.*;
 import org.openscada.opc.lib.da.Item;
+import org.openscada.opc.lib.da.*;
 
 import java.math.BigDecimal;
 import java.net.UnknownHostException;
@@ -37,7 +37,7 @@ public class OpcDaExceedTask extends TimerTask {
 
     private final String cronId;
 
-    private final CronTaskRegister cronTaskRegister;
+    private final QuartzService quartzService;
 
     private final ItemGroupDao itemGroupDao;
 
@@ -68,7 +68,7 @@ public class OpcDaExceedTask extends TimerTask {
     public OpcDaExceedTask(RedisUtil redisUtil,
                            OpcAsyncTask opcAsyncTask,
                            String cronId,
-                           CronTaskRegister cronTaskRegister,
+                           QuartzService quartzService,
                            ItemGroupDao itemGroupDao,
                            MessageNoticeDao messageNoticeDao,
                            Timer timer,
@@ -84,7 +84,7 @@ public class OpcDaExceedTask extends TimerTask {
         this.redisUtil = redisUtil;
         this.opcAsyncTask = opcAsyncTask;
         this.cronId = cronId;
-        this.cronTaskRegister = cronTaskRegister;
+        this.quartzService = quartzService;
         this.itemGroupDao = itemGroupDao;
         this.messageNoticeDao = messageNoticeDao;
         this.timer = timer;
@@ -172,6 +172,7 @@ public class OpcDaExceedTask extends TimerTask {
             //判断此时数据组是否被停止
             if (!getItemGroupRunState(id)) {
                 itemGroupDao.stopItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
+                quartzService.deleteTask(cronId);
                 redisUtil.del(ConstantStr.ITEM_GROUP + id);
                 stopTaskInformation(listener, server, group, threadPool);
                 break;
@@ -494,8 +495,6 @@ public class OpcDaExceedTask extends TimerTask {
             }
             server.dispose();
         }
-
-        cronTaskRegister.removeCronTask(cronId);
         threadPool.shutdown();
         timer.cancel();
     }

+ 0 - 1
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/OpcDaExceedTask1.java

@@ -8,7 +8,6 @@ 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.jinterop.dcom.common.JIException;

+ 5 - 5
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/OpcDaFrequencyTask.java

@@ -8,7 +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.quartz.QuartzService;
 import com.example.opc_da.util.OpcDaUtil;
 import com.example.opc_da.util.RedisUtil;
 import lombok.SneakyThrows;
@@ -38,7 +38,7 @@ public class OpcDaFrequencyTask extends TimerTask {
 
     private final String cronId;
 
-    private final CronTaskRegister cronTaskRegister;
+    private final QuartzService quartzService;
 
     private final ItemGroupDao itemGroupDao;
 
@@ -72,7 +72,7 @@ public class OpcDaFrequencyTask extends TimerTask {
     public OpcDaFrequencyTask(RedisUtil redisUtil,
                               OpcAsyncTask opcAsyncTask,
                               String cronId,
-                              CronTaskRegister cronTaskRegister,
+                              QuartzService quartzService,
                               ItemGroupDao itemGroupDao,
                               MessageNoticeDao messageNoticeDao,
                               Timer timer,
@@ -90,7 +90,7 @@ public class OpcDaFrequencyTask extends TimerTask {
         this.redisUtil = redisUtil;
         this.opcAsyncTask = opcAsyncTask;
         this.cronId = cronId;
-        this.cronTaskRegister = cronTaskRegister;
+        this.quartzService = quartzService;
         this.itemGroupDao = itemGroupDao;
         this.messageNoticeDao = messageNoticeDao;
         this.timer = timer;
@@ -177,6 +177,7 @@ public class OpcDaFrequencyTask extends TimerTask {
             //判断此时数据组是否被停止
             if (!getItemGroupRunState(id)) {
                 itemGroupDao.stopItemGroupById(itemGroup.getId(), ConstantStr.STOP_IT);
+                quartzService.deleteTask(cronId);
                 redisUtil.del(ConstantStr.ITEM_GROUP + id);
                 stopTaskInformation(listener, server, group, threadPool);
                 break;
@@ -388,7 +389,6 @@ public class OpcDaFrequencyTask extends TimerTask {
             }
             server.dispose();
         }
-        cronTaskRegister.removeCronTask(cronId);
         threadPool.shutdown();
         timer.cancel();
     }

+ 0 - 1
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/OpcDaFrequencyTask1.java

@@ -8,7 +8,6 @@ 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;

+ 0 - 6
cqcy-ei/cqcy-ei-da/src/main/java/com/example/opc_da/task/ReportTableTask.java

@@ -36,9 +36,6 @@ public class ReportTableTask {
     private ReportTableDao reportTableDao;
 
     @Resource
-    private ItemGroupDao itemGroupDao;
-
-    @Resource
     private RawDataDao rawDataDao;
 
     @Autowired
@@ -56,9 +53,6 @@ public class ReportTableTask {
     @Autowired
     private RestTemplate restTemplate;
 
-    @Resource
-    private MessageNoticeDao messageNoticeDao;
-
     @Autowired
     private AsyncAsyncTask asyncAsyncTask;