浏览代码

待测试

lifuquan 1 年之前
父节点
当前提交
0fe2163ca1

+ 103 - 0
doc/任务注册和调度.http

@@ -0,0 +1,103 @@
+### 任务调度==查询全部
+POST http://127.0.0.1:22222/common/scheduling/task/scheduled/list/all
+Content-Type: application/json
+
+### 任务调度==查询正在调度的任务
+POST http://127.0.0.1:22222/common/scheduling/task/scheduled/list/scheduled
+Content-Type: application/json
+
+### 任务调度-每天定时出报表
+POST http://127.0.0.1:22222/common/scheduling/task/scheduled/add
+Content-Type: application/json
+
+{
+  "registeredTask": {
+    "id": 211648899235057664
+  },
+  "status": "ON",
+  "scheduledType": "CRON",
+  "scheduledParameter": {
+    "cronExpression": "0 45 13 * * *"
+  },
+  "description": "每天定时出报表"
+}
+
+### 任务调度-每天定时清理临时表
+POST http://127.0.0.1:22222/common/scheduling/task/scheduled/add
+Content-Type: application/json
+
+{
+  "registeredTask": {
+    "id": 211598274090635264
+  },
+  "status": "ON",
+  "scheduledType": "CRON",
+  "scheduledParameter": {
+    "cronExpression": "0 15 14 * * *"
+  },
+  "description": "每天定时清理临时表"
+}
+
+### 任务调度-每小时从工单系统更新数据
+POST http://127.0.0.1:22222/common/scheduling/task/scheduled/add
+Content-Type: application/json
+
+{
+  "registeredTask": {
+    "id": 211598274090635264
+  },
+  "status": "ON",
+  "scheduledType": "CRON",
+  "scheduledParameter": {
+    "cronExpression": "0 5 * * * *"
+  },
+  "description": "每小时从工单系统更新数据"
+}
+
+### 任务注册-查询列表
+POST http://127.0.0.1:22222/common/scheduling/task/registered/list/all
+Content-Type: application/json
+
+### 任务注册-清理临时表
+POST http://127.0.0.1:22222/common/scheduling/task/registered/add
+Content-Type: application/json
+
+{
+  "beanName": "taskService",
+  "methodName": "tempTableCleanCronTask",
+  "withParameter": false,
+  "description": "清理临时表"
+}
+
+### 任务注册-清理临时表
+POST http://127.0.0.1:22222/common/scheduling/task/registered/add
+Content-Type: application/json
+
+{
+  "beanName": "taskService",
+  "methodName": "updateWorkFlowBasicDataTask",
+  "withParameter": false,
+  "description": "从工单系统更新数据"
+}
+
+### 任务注册- 入库-生成报表-截图 单次任务
+POST http://127.0.0.1:22222/common/scheduling/task/registered/add
+Content-Type: application/json
+
+{
+  "beanName": "taskService",
+  "methodName": "wareHouseTask",
+  "withParameter": true,
+  "description": "入库-生成报表-截图"
+}
+
+### 任务注册- 入库-生成报表-截图 定时任务
+POST http://127.0.0.1:22222/common/scheduling/task/registered/add
+Content-Type: application/json
+
+{
+  "beanName": "taskService",
+  "methodName": "dailyWarehouseTask",
+  "withParameter": false,
+  "description": "入库-生成报表-截图 定时任务"
+}

+ 6 - 22
src/main/java/com/nokia/tsl_data/service/DataWarehouseService.java

@@ -31,8 +31,6 @@ public class DataWarehouseService {
     private final SysDataDictionaryRepository sysDataDictionaryRepository;
     private final DataWarehouseProperties dataWarehouseProperties;
     private final MessageService messageService;
-    // 重试等待时间
-    private final Long delayForRetry = 1800L;
 
     public DataWarehouseService(TslDataDao tslDataDao, MobileComplaintMapper mobileComplaintMapper, HighQualityCountMapper highQualityCountMapper, HighQualityListDayMapper highQualityListDayMapper, SysDataDictionaryRepository sysDataDictionaryRepository, DataWarehouseProperties dataWarehouseProperties, MessageService messageService) {
         this.tslDataDao = tslDataDao;
@@ -44,26 +42,6 @@ public class DataWarehouseService {
         this.messageService = messageService;
     }
 
-    public void checkSourceAndDelayIfNotOK(String day) {
-        boolean flag = false;
-        do {
-            String result = checkSource(day);
-            if (result.length() == 0) {
-                // 数据源正常
-                flag = true;
-            } else {
-                // 数据源存在异常
-                messageService.error(result);
-                // 等待一段时间后再次检查
-                try {
-                    Thread.sleep(1000L * delayForRetry);
-                } catch (InterruptedException e) {
-                    throw new RuntimeException("检查数据源等待中被中断... " + e.getMessage());
-                }
-            }
-        } while (!flag);
-    }
-
     public String checkSource(String day) {
         StringBuffer stringBuffer = new StringBuffer();
         // 河北_CEM移网质量投诉明细
@@ -93,6 +71,12 @@ public class DataWarehouseService {
         return stringBuffer.toString();
     }
 
+    public void wareHouse(String day) {
+        warehouseHighQualityCountDay(day);
+        warehouseHighQualityListDay(day);
+        warehouseMobileComplaintDay(day);
+    }
+
     private File getMobileComplaintDayFile(String day) {
         String fileName = dataWarehouseProperties.getPrefixOfMobileComplaint() + day + ".csv";
         return Paths.get(dataWarehouseProperties.getDirOfMobileComplaint(), fileName).toFile();

+ 56 - 20
src/main/java/com/nokia/tsl_data/service/TaskService.java

@@ -3,15 +3,20 @@ package com.nokia.tsl_data.service;
 import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
 import com.nokia.common.basic.DateUtil;
+import com.nokia.common.basic.InstantUtil;
+import com.nokia.common.scheduling.entity.ScheduledTask;
+import com.nokia.common.scheduling.entity._enum.ScheduledStatus;
+import com.nokia.common.scheduling.entity._enum.ScheduledType;
+import com.nokia.common.scheduling.entity.pojo.ScheduledParameter;
+import com.nokia.common.scheduling.service.SchedulingService;
 import com.nokia.tsl_data.dao.TaskRecordRepository;
 import com.nokia.tsl_data.dao.TslDataDao;
 import com.nokia.tsl_data.entity.TaskRecord;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
 
-import java.text.SimpleDateFormat;
 import java.time.Instant;
-import java.util.Date;
 import java.util.List;
 
 /**
@@ -27,38 +32,65 @@ public class TaskService {
     private final DataWarehouseService dataWarehouseService;
     private final MessageService messageService;
     private final TslReportService tslReportService;
+    private final HighQualityDataService highQualityDataService;
+    private final SchedulingService schedulingService;
 
-    public TaskService(WorkFlowService workFlowService, DataWarehouseService dataWarehouseService, MessageService messageService, TslDataDao tslDataDao, TaskRecordRepository taskRecordRepository, TslReportService tslReportService) {
+    public TaskService(WorkFlowService workFlowService, DataWarehouseService dataWarehouseService, MessageService messageService, TslDataDao tslDataDao, TaskRecordRepository taskRecordRepository, TslReportService tslReportService, HighQualityDataService highQualityDataService, SchedulingService schedulingService) {
         this.workFlowService = workFlowService;
         this.dataWarehouseService = dataWarehouseService;
         this.messageService = messageService;
         this.tslDataDao = tslDataDao;
         this.taskRecordRepository = taskRecordRepository;
         this.tslReportService = tslReportService;
+        this.highQualityDataService = highQualityDataService;
+        this.schedulingService = schedulingService;
     }
 
     /**
-     * 日报表
+     * 每日定时任务
      */
-    public void dailyReport() {
-        // 当天时间
-        String day = new SimpleDateFormat("yyyyMMdd")
-                .format(new Date(System.currentTimeMillis() - 1000L * 3600 * 24));
-        try {
-            // 检查数据源
-            dataWarehouseService.checkSourceAndDelayIfNotOK(day);
-            // 入库数据
-            dataWarehouseService.warehouseHighQualityCountDay(day);
-            dataWarehouseService.warehouseHighQualityListDay(day);
-            dataWarehouseService.warehouseMobileComplaintDay(day);
-            // 生成表
+    public void dailyWarehouseTask() {
+        String day = InstantUtil.ofPattern("yyyyMMdd").format(Instant.now());
+        // 调度一次 taskService.wareHouseTask(day)
+        ScheduledTask task = new ScheduledTask()
+                .setRegisteredTask(schedulingService.findRegisteredTaskByBeanNameAndMethodName(
+                        "taskService", "wareHouseTask"))
+                .setMethodParameter(day)
+                .setStatus(ScheduledStatus.ON)
+                // 马上调度
+                .setScheduledType(ScheduledType.IMMEDIATELY)
+                .setDescription(day + " 报表生成");
+        schedulingService.add(task);
+    }
+
+    /**
+     * 指定日期任务
+     */
+    public void wareHouseTask(String day) {
+        String result = dataWarehouseService.checkSource(day);
+        if (StringUtils.hasLength(result)) {
+            // 存在异常情况
+            messageService.error(result);
+            // 延时调度,间隔一段时间后再次调度
+            ScheduledTask task = new ScheduledTask()
+                    .setRegisteredTask(schedulingService.findRegisteredTaskByBeanNameAndMethodName(
+                            "taskService", "wareHouseTask"))
+                    .setMethodParameter(day)
+                    .setStatus(ScheduledStatus.ON)
+                    .setScheduledType(ScheduledType.ONCE)
+                    // 延时 1800L 调度
+                    .setScheduledParameter(ScheduledParameter.ofDelay(1800L));
+            // 调度任务
+            schedulingService.add(task);
+        } else {
+            // 执行入库任务
+            dataWarehouseService.wareHouse(day);
+            // 生成HighQualityData
+            highQualityDataService.generateHighQualityData(day);
+            // 生成报表
             tslReportService.generateReport(day);
             // 截图
             tslReportService.screenShot(day);
-        } catch (Exception e) {
-            log.error("定时任务出错--{}", e.getMessage());
-            e.printStackTrace();
-            messageService.error("定时任务出错--" + e.getMessage());
         }
     }
 
@@ -67,10 +99,12 @@ public class TaskService {
      * 调度周期每小时
      */
     public void updateWorkFlowBasicDataTask() {
+        log.info("从工单系统定时更新数据 任务开始...");
         Instant start = taskRecordRepository.findLastSuccessUpdateWorkFlowBasicDataTaskEndInstant();
         Instant end = Instant.now();
         TaskRecord taskRecord = workFlowService.updateWorkFlowBasicData(start, end);
         taskRecordRepository.save(taskRecord);
+        log.info("从工单系统定时更新数据 任务完成...");
     }
 
     /**
@@ -78,6 +112,7 @@ public class TaskService {
      * 调度周期,每天
      */
     public void tempTableCleanCronTask() {
+        log.info("定时删除过期的临时表 任务开始...");
         TaskRecord taskRecord = new TaskRecord();
         taskRecord.setTaskName("临时表清理");
         taskRecord.setStartTime(Instant.now());
@@ -101,5 +136,6 @@ public class TaskService {
         taskRecord.setEndTime(Instant.now());
         taskRecord.setTimeCost(taskRecord.getEndTime().toEpochMilli() - taskRecord.getStartTime().toEpochMilli());
         taskRecordRepository.save(taskRecord);
+        log.info("定时删除过期的临时表 任务完成...");
     }
 }

+ 2 - 1
src/main/java/com/nokia/tsl_data/service/WorkFlowService.java

@@ -49,7 +49,8 @@ public class WorkFlowService {
             tslDataDao.batchInsertWorkFlowBasicData(workFlowBasicDataList, tempTableName);
             int insertCount = tslDataDao.insertWorkFlowBasicDataFromTempTable(tempTableName);
             int updateCount = tslDataDao.updateWorkFlowBasicDataFromTempTable(tempTableName);
-            log.info("已完成工作流数据更新, 插入 {} 项, 更新 {} 项, 起: {} 止: {}", insertCount, updateCount, start, end);
+            log.info("已完成工作流数据更新, 插入 {} 项, 更新 {} 项, 起: {} 止: {}",
+                    insertCount, updateCount, dateFormat.format(start), dateFormat.format(end));
             record.setEndStatus(0);
             record.setEndTime(Instant.ofEpochMilli(System.currentTimeMillis()));
         } catch (Exception e) {