2021与蓝度共同重构项目,服务端
liuhaonan
2022-10-25 dda268997ca8f8a364f7c19b45d7a43a50a98efe
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package com.sandu.ximon.admin.quartz;
 
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.sandu.common.util.SpringContextHolder;
import com.sandu.common.util.ThrowableUtil;
import com.sandu.ximon.admin.service.*;
import com.sandu.ximon.dao.domain.LightTask;
import com.sandu.ximon.dao.domain.LightTaskQuartz;
import com.sandu.ximon.dao.domain.LightTaskQuartzLog;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
 
import java.util.List;
 
/**
 * @author chenjiantian
 * @date 2021/12/15 10:28
 * 设置定时控灯的定时任务
 */
public class LightTimerJob extends QuartzJobBean {
 
    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        System.out.println("执行任务" + Thread.currentThread().toString());
        long quartzId = context.getMergedJobDataMap().getLong("quartzId");
        String taskName = context.getMergedJobDataMap().getString("taskName");
        long taskId = context.getMergedJobDataMap().getLong("taskId");
        String cron = context.getMergedJobDataMap().getString("cron");
 
        LightTaskQuartzLog log = new LightTaskQuartzLog();
        log.setCronExpression(cron);
        log.setTaskId(taskId);
        log.setTaskName(taskName);
        log.setQuartzId(quartzId);
 
        PoleService poleService = SpringContextHolder.getBean(PoleService.class);
        LightTaskPoleRelationService lightTaskPoleRelationService = SpringContextHolder.getBean(LightTaskPoleRelationService.class);
        LightTaskQuartzService lightTaskQuartzService = SpringContextHolder.getBean(LightTaskQuartzService.class);
        LightTaskService lightTaskService = SpringContextHolder.getBean(LightTaskService.class);
        LightTaskQuartzLogService lightTaskQuartzLogService = SpringContextHolder.getBean(LightTaskQuartzLogService.class);
 
        long startTime = System.currentTimeMillis();
        try {
            // 任务绑定的灯杆
            List<Long> poleIdList = lightTaskPoleRelationService.listPoleIdByTaskId(taskId);
            String lightAdress = lightTaskService.getOne(Wrappers.lambdaQuery(LightTask.class).eq(LightTask::getTaskId, taskId)).getLightAdress();
            // 灯杆的设备码
            List<String> deviceCodeList = poleService.listDeviceCodeByIds(poleIdList);
 
            if (CollectionUtil.isNotEmpty(deviceCodeList)) {
                LightTaskQuartz lightTaskQuartz = lightTaskQuartzService.getById(quartzId);
                if (lightTaskQuartz != null) {
                    for (String deviceCode : deviceCodeList) {
                        // 定时给每个设备吗发送灯控请求
                        lightTaskService.sendTimeRRpc(lightTaskQuartz.getFramePayload(), deviceCode, lightAdress);
                    }
                    log.setFramePayload(lightTaskQuartz.getFramePayload());
                }
            }
            long times = System.currentTimeMillis() - startTime;
            log.setTime(times);
        } catch (Exception e) {
            log.setExceptionDetail(ThrowableUtil.getStackTrace(e));
            long times = System.currentTimeMillis() - startTime;
            log.setTime(times);
        } finally {
            lightTaskQuartzLogService.save(log);
        }
    }
}