2021与蓝度共同重构项目,服务端
chenjiantian
2021-12-15 d74dd3d6f754a7dd3660ef025276f9a055111b6b
灯模块
已添加23个文件
已修改4个文件
1043 ■■■■■ 文件已修改
dao/src/main/java/com/sandu/ximon/dao/domain/LightTask.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/domain/LightTaskPoleRelation.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/domain/LightTaskQuartz.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/enums/WeekEnums.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/mapper/LightTaskMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/mapper/LightTaskPoleRelationMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/mapper/LightTaskQuartzMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/mapper/PoleBindingMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/resources/mapper/LightTaskMapper.xml 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/resources/mapper/LightTaskPoleRelationMapper.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/resources/mapper/LightTaskQuartzMapper.xml 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sandu-common/src/main/java/com/sandu/common/quartz/ExecutionJob.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sandu-common/src/main/java/com/sandu/common/quartz/config/QuartzConfig.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sandu-common/src/main/java/com/sandu/common/quartz/dto/QuartzJobDto.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sandu-common/src/main/java/com/sandu/common/quartz/service/QuartzService.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sandu-common/src/main/java/com/sandu/common/quartz/service/QuartzServiceImpl.java 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/LightController.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/LightTaskController.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/LightDataDto.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/SingleLightOrderDto.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/param/LightTaskParam.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightReportDataService.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightTaskQuartzService.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightTaskService.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/PoleService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/TaskOrderUtil.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/test/java/com/sandu/ximon/admin/AdminApplicationTests.java 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/domain/LightTask.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,76 @@
package com.sandu.ximon.dao.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Data;
/**
 * è·¯ç¯ä»»åŠ¡è¡¨
 * @TableName light_task
 */
@TableName(value ="light_task")
@Data
public class LightTask implements Serializable {
    /**
     *
     */
    @TableId(type = IdType.AUTO)
    private Long taskId;
    /**
     * å®¢æˆ·id
     */
    private Long clientId;
    /**
     * ä»»åŠ¡åç§°
     */
    private String taskName;
    /**
     * 1暂停、0启用
     */
    private Integer pause;
    /**
     * æ˜ŸæœŸå‡ ï¼Œä½è¿ç®—保存,1代表星期一,2星期二,4星期三,8星期四,16星期五,32星期六,64星期日
     */
    private Integer week;
    /**
     * å¼€ç¯å‘½ä»¤
     */
    private String openOrder;
    /**
     * å…³é—­ç¯å‘½ä»¤
     */
    private String closeOrder;
    /**
     * ç¯æŽ§å‘½ä»¤
     */
    private String controlOrder;
    /**
     * åˆ›å»ºç”¨æˆ·
     */
    private String createUser;
    /**
     * åˆ›å»ºæ—¶é—´
     */
    private LocalDateTime createTime;
    /**
     *
     */
    private LocalDateTime updateTime;
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}
dao/src/main/java/com/sandu/ximon/dao/domain/LightTaskPoleRelation.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,46 @@
package com.sandu.ximon.dao.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Data;
/**
 * è·¯ç¯ä»»åŠ¡å’Œç¯æ†å…³ç³»è¡¨
 * @TableName light_task_pole_relation
 */
@TableName(value ="light_task_pole_relation")
@Data
public class LightTaskPoleRelation implements Serializable {
    /**
     *
     */
    @TableId(type = IdType.AUTO)
    private Long id;
    /**
     * ä»»åŠ¡id
     */
    private Long taskId;
    /**
     * ç¯æ†id
     */
    private Long poleId;
    /**
     * åˆ›å»ºæ—¶é—´
     */
    private LocalDateTime createTime;
    /**
     *
     */
    private LocalDateTime updateTime;
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}
dao/src/main/java/com/sandu/ximon/dao/domain/LightTaskQuartz.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
package com.sandu.ximon.dao.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Data;
/**
 * è·¯ç¯ä»»åŠ¡å®šæ—¶å™¨è¡¨
 * @TableName light_task_quartz
 */
@TableName(value ="light_task_quartz")
@Data
public class LightTaskQuartz implements Serializable {
    /**
     *
     */
    @TableId(type = IdType.AUTO)
    private Long id;
    /**
     * ä»»åŠ¡id
     */
    private Long taskId;
    /**
     * å®šæ—¶å™¨åç§°
     */
    private String quartzName;
    /**
     * å®šæ—¶å™¨cron
     */
    private String cronExpression;
    /**
     * 1暂停、0启用
     */
    private Integer pause;
    /**
     * å®šæ—¶å™¨å‘½ä»¤å¸§
     */
    private String order;
    /**
     * åˆ›å»ºæ—¶é—´
     */
    private LocalDateTime createTime;
    /**
     *
     */
    private LocalDateTime updateTime;
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}
dao/src/main/java/com/sandu/ximon/dao/enums/WeekEnums.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,52 @@
package com.sandu.ximon.dao.enums;
/**
 * æ˜ŸæœŸæžšä¸¾ç±»
 *
 * @author chenjiantian
 */
public enum WeekEnums {
    /**
     * TUESDAY
     */
    MONDAY(1),
    /**
     * TUESDAY
     */
    TUESDAY(2),
    /**
     * WEDNESDAY
     */
    WEDNESDAY(4),
    /**
     * THURSDAY
     */
    THURSDAY(8),
    /**
     * FRIDAY
     */
    FRIDAY(16),
    /**
     * SATURDAY
     */
    SATURDAY(32),
    /**
     * SUNDAY
     */
    SUNDAY(64),
    ;
    private final Integer code;
    WeekEnums(Integer code) {
        this.code = code;
    }
    public Integer getCode() {
        return code;
    }
}
dao/src/main/java/com/sandu/ximon/dao/mapper/LightTaskMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package com.sandu.ximon.dao.mapper;
import com.sandu.ximon.dao.domain.LightTask;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
 * @Entity com.sandu.ximon.dao.domain.LightTask
 */
public interface LightTaskMapper extends BaseMapper<LightTask> {
}
dao/src/main/java/com/sandu/ximon/dao/mapper/LightTaskPoleRelationMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.sandu.ximon.dao.mapper;
import com.sandu.ximon.dao.domain.LightTaskPoleRelation;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
 * @Entity com.sandu.ximon.dao.domain.LightTaskPoleRelation
 */
@Mapper
public interface LightTaskPoleRelationMapper extends BaseMapper<LightTaskPoleRelation> {
}
dao/src/main/java/com/sandu/ximon/dao/mapper/LightTaskQuartzMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.sandu.ximon.dao.mapper;
import com.sandu.ximon.dao.domain.LightTaskQuartz;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
 * @Entity com.sandu.ximon.dao.domain.LightTaskQuartz
 */
@Mapper
public interface LightTaskQuartzMapper extends BaseMapper<LightTaskQuartz> {
}
dao/src/main/java/com/sandu/ximon/dao/mapper/PoleBindingMapper.java
@@ -2,10 +2,12 @@
import com.sandu.ximon.dao.domain.PoleBinding;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
 * @Entity com.sandu.ximon.dao.domain.PoleBinding
 */
@Mapper
public interface PoleBindingMapper extends BaseMapper<PoleBinding> {
}
dao/src/main/resources/mapper/LightTaskMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sandu.ximon.dao.mapper.LightTaskMapper">
    <resultMap id="BaseResultMap" type="com.sandu.ximon.dao.domain.LightTask">
            <id property="taskId" column="task_id" jdbcType="BIGINT"/>
            <result property="clientId" column="client_id" jdbcType="BIGINT"/>
            <result property="taskName" column="task_name" jdbcType="VARCHAR"/>
            <result property="pause" column="pause" jdbcType="TINYINT"/>
            <result property="week" column="week" jdbcType="TINYINT"/>
            <result property="openOrder" column="open_order" jdbcType="VARCHAR"/>
            <result property="closeOrder" column="close_order" jdbcType="VARCHAR"/>
            <result property="controlOrder" column="control_order" jdbcType="VARCHAR"/>
            <result property="createUser" column="create_user" jdbcType="VARCHAR"/>
            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
    </resultMap>
    <sql id="Base_Column_List">
        task_id,client_id,task_name,
        pause,week,open_order,
        close_order,control_order,create_user,
        create_time,update_time
    </sql>
</mapper>
dao/src/main/resources/mapper/LightTaskPoleRelationMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sandu.ximon.dao.mapper.LightTaskPoleRelationMapper">
    <resultMap id="BaseResultMap" type="com.sandu.ximon.dao.domain.LightTaskPoleRelation">
            <id property="id" column="id" jdbcType="BIGINT"/>
            <result property="taskId" column="task_id" jdbcType="BIGINT"/>
            <result property="poleId" column="pole_id" jdbcType="BIGINT"/>
            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
    </resultMap>
    <sql id="Base_Column_List">
        id,task_id,pole_id,
        create_time,update_time
    </sql>
</mapper>
dao/src/main/resources/mapper/LightTaskQuartzMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sandu.ximon.dao.mapper.LightTaskQuartzMapper">
    <resultMap id="BaseResultMap" type="com.sandu.ximon.dao.domain.LightTaskQuartz">
            <id property="id" column="id" jdbcType="BIGINT"/>
            <result property="taskId" column="task_id" jdbcType="BIGINT"/>
            <result property="quartzName" column="quartz_name" jdbcType="VARCHAR"/>
            <result property="cronExpression" column="cron_expression" jdbcType="VARCHAR"/>
            <result property="pause" column="pause" jdbcType="TINYINT"/>
            <result property="order" column="order" jdbcType="VARCHAR"/>
            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
    </resultMap>
    <sql id="Base_Column_List">
        id,task_id,quartz_name,
        cron_expression,pause,order,
        create_time,update_time
    </sql>
</mapper>
sandu-common/src/main/java/com/sandu/common/quartz/ExecutionJob.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.sandu.common.quartz;
import org.quartz.JobExecutionContext;
import org.springframework.scheduling.quartz.QuartzJobBean;
/**
 * @author chenjiantian
 * @date 2021/12/15 10:28
 */
public class ExecutionJob extends QuartzJobBean {
    @Override
    protected void executeInternal(JobExecutionContext context) {
        System.out.println(Thread.currentThread().toString());
    }
}
sandu-common/src/main/java/com/sandu/common/quartz/config/QuartzConfig.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
package com.sandu.common.quartz.config;
import com.sandu.common.quartz.service.QuartzService;
import org.quartz.Scheduler;
import org.quartz.spi.TriggerFiredBundle;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.AdaptableJobFactory;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import org.springframework.stereotype.Component;
/**
 * @author chenjiantian
 * @date 2021/12/15 10:48
 */
@Configuration
@ConditionalOnClass(QuartzService.class)
public class QuartzConfig {
    /**
     * è§£å†³Job中注入Spring Bean为null的问题
     */
    @Component("quartzJobFactory")
    public static class QuartzJobFactory extends AdaptableJobFactory {
        private final AutowireCapableBeanFactory capableBeanFactory;
        public QuartzJobFactory(AutowireCapableBeanFactory capableBeanFactory) {
            this.capableBeanFactory = capableBeanFactory;
        }
        @Override
        protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
            //调用父类的方法
            Object jobInstance = super.createJobInstance(bundle);
            capableBeanFactory.autowireBean(jobInstance);
            return jobInstance;
        }
    }
    /**
     * æ³¨å…¥scheduler到spring
     * @param quartzJobFactory /
     * @return Scheduler
     * @throws Exception /
     */
    @Bean(name = "scheduler")
    public Scheduler scheduler(QuartzJobFactory quartzJobFactory) throws Exception {
        SchedulerFactoryBean factoryBean = new SchedulerFactoryBean();
        factoryBean.setJobFactory(quartzJobFactory);
        factoryBean.afterPropertiesSet();
        Scheduler scheduler = factoryBean.getScheduler();
        scheduler.start();
        return scheduler;
    }
}
sandu-common/src/main/java/com/sandu/common/quartz/dto/QuartzJobDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
package com.sandu.common.quartz.dto;
import lombok.Data;
import java.io.Serializable;
import java.sql.Timestamp;
/**
 * @author chenjiantian
 * @date 2021/12/14 17:41
 * ä»»åŠ¡è°ƒåº¦dto
 */
@Data
public class QuartzJobDto implements Serializable {
    public static final String JOB_KEY = "JOB_KEY";
    /**
     * å®šæ—¶ä»»åŠ¡ID
     */
    private Long id;
    /**
     * Bean名称
     */
    private String beanName;
    /**
     * cron è¡¨è¾¾å¼
     */
    private String cronExpression;
    /**
     * çŠ¶æ€ï¼š1暂停、0启用
     */
    private Boolean isPause;
    /**
     * ä»»åŠ¡åç§°
     */
    private String jobName;
    /**
     * æ–¹æ³•名称
     */
    private String methodName;
    /**
     * å‚æ•°
     */
    private String params;
    /**
     * å¤‡æ³¨
     */
    private String remark;
    /**
     * åˆ›å»ºæ—¥æœŸ
     */
    private Timestamp createTime;
}
sandu-common/src/main/java/com/sandu/common/quartz/service/QuartzService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,47 @@
package com.sandu.common.quartz.service;
import com.sandu.common.quartz.dto.QuartzJobDto;
import org.springframework.scheduling.quartz.QuartzJobBean;
/**
 * @author chenjiantian
 * @date 2021/12/15 10:36
 */
public interface QuartzService {
    /**
     * å¢žåŠ ä¸€ä¸ªä»»åŠ¡job
     * @param quartzJobDto å®šæ—¶ä»»åŠ¡å®žä½“ç±»
     */
    void addJob(Class<? extends QuartzJobBean> jobClass, QuartzJobDto quartzJobDto);
    /**
     * ä¿®æ”¹ä¸€ä¸ªä»»åŠ¡job
     * @param quartzJobDto å®šæ—¶ä»»åŠ¡å®žä½“ç±»
     */
    void updateJobCron(Class<? extends QuartzJobBean> jobClass,QuartzJobDto quartzJobDto);
    /**
     * åˆ é™¤ä¸€ä¸ªä»»åŠ¡job
     * @param jobId å®šæ—¶ä»»åŠ¡id
     */
    void deleteJob(Class<? extends QuartzJobBean> jobClass,Long jobId);
    /**
     * æš‚停一个任务job
     * @param jobId å®šæ—¶ä»»åŠ¡id
     */
    void pauseJob(Class<? extends QuartzJobBean> jobClass,Long jobId);
    /**
     * æ¢å¤ä¸€ä¸ªä»»åŠ¡job
     * @param quartzJobDto å®šæ—¶ä»»åŠ¡å®žä½“ç±»
     */
    void resumeJob(Class<? extends QuartzJobBean> jobClass,QuartzJobDto quartzJobDto);
    /**
     * ç«‹å³æ‰§è¡Œä¸€ä¸ªä»»åŠ¡job
     * @param quartzJobDto å®šæ—¶ä»»åŠ¡å®žä½“ç±»
     */
    void runJobNow(Class<? extends QuartzJobBean> jobClass,QuartzJobDto quartzJobDto);
}
sandu-common/src/main/java/com/sandu/common/quartz/service/QuartzServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,125 @@
package com.sandu.common.quartz.service;
import com.sandu.common.execption.BusinessException;
import com.sandu.common.quartz.ExecutionJob;
import com.sandu.common.quartz.dto.QuartzJobDto;
import lombok.extern.slf4j.Slf4j;
import org.quartz.*;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.scheduling.quartz.QuartzJobBean;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
 * @author chenjiantian
 * @date 2021/12/15 10:39
 * quartz job管理类
 */
@Slf4j
@Service
@ConditionalOnProperty(prefix = "sandu.quartz", name = "enable", havingValue = "true")
public class QuartzServiceImpl implements QuartzService {
    @Resource(name = "scheduler")
    private Scheduler scheduler;
    @Override
    public void addJob(Class<? extends QuartzJobBean> jobClass, QuartzJobDto quartzJobDto) {
        try {
            String simpleName = jobClass.getSimpleName();
            JobDetail jobDetail = JobBuilder.newJob(ExecutionJob.class)
                    .withIdentity(simpleName + quartzJobDto.getId())
                    .build();
            CronTrigger cronTrigger = TriggerBuilder.newTrigger()
                    .withIdentity(simpleName + quartzJobDto.getId())
                    .withSchedule(CronScheduleBuilder.cronSchedule(quartzJobDto.getCronExpression()))
                    .build();
            cronTrigger.getJobDataMap().put(QuartzJobDto.JOB_KEY, quartzJobDto);
            scheduler.scheduleJob(jobDetail, cronTrigger);
        } catch (SchedulerException e) {
            log.error("创建定时任务失败", e);
            throw new BusinessException("创建定时任务失败");
        }
    }
    @Override
    public void updateJobCron(Class<? extends QuartzJobBean> jobClass, QuartzJobDto quartzJobDto) {
        try {
            TriggerKey triggerKey = TriggerKey.triggerKey(jobClass.getSimpleName() + quartzJobDto.getId());
            CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
            if (trigger == null) {
                addJob(jobClass, quartzJobDto);
                trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
            }
            CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(quartzJobDto.getCronExpression());
            trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();
            trigger.getJobDataMap().put(QuartzJobDto.JOB_KEY, quartzJobDto);
            scheduler.rescheduleJob(triggerKey, trigger);
        } catch (SchedulerException e) {
            log.error("更新定时任务失败", e);
            throw new BusinessException("更新定时任务失败");
        }
    }
    @Override
    public void deleteJob(Class<? extends QuartzJobBean> jobClass, Long jobId) {
        try {
            JobKey jobKey = JobKey.jobKey(jobClass.getSimpleName() + jobId);
            scheduler.pauseJob(jobKey);
            scheduler.deleteJob(jobKey);
        } catch (SchedulerException e) {
            log.error("删除定时任务失败", e);
            throw new BusinessException("删除定时任务失败");
        }
    }
    @Override
    public void pauseJob(Class<? extends QuartzJobBean> jobClass, Long jobId) {
        try {
            JobKey jobKey = JobKey.jobKey(jobClass.getSimpleName() + jobId);
            scheduler.pauseJob(jobKey);
        } catch (Exception e) {
            log.error("定时任务暂停失败", e);
            throw new BusinessException("定时任务暂停失败");
        }
    }
    @Override
    public void resumeJob(Class<? extends QuartzJobBean> jobClass, QuartzJobDto quartzJobDto) {
        try {
            TriggerKey triggerKey = TriggerKey.triggerKey(jobClass.getSimpleName() + quartzJobDto.getId());
            CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
            // å¦‚果不存在则创建一个定时任务
            if (trigger == null) {
                addJob(jobClass, quartzJobDto);
            }
            JobKey jobKey = JobKey.jobKey(jobClass.getSimpleName() + quartzJobDto.getId());
            scheduler.resumeJob(jobKey);
        } catch (Exception e) {
            log.error("恢复定时任务失败", e);
            throw new BusinessException("恢复定时任务失败");
        }
    }
    @Override
    public void runJobNow(Class<? extends QuartzJobBean> jobClass, QuartzJobDto quartzJobDto) {
        try {
            TriggerKey triggerKey = TriggerKey.triggerKey(jobClass.getSimpleName() + quartzJobDto.getId());
            CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
            // å¦‚果不存在则创建一个定时任务
            if (trigger == null) {
                addJob(jobClass, quartzJobDto);
            }
            JobDataMap dataMap = new JobDataMap();
            dataMap.put(QuartzJobDto.JOB_KEY, quartzJobDto);
            JobKey jobKey = JobKey.jobKey(jobClass.getSimpleName() + quartzJobDto.getId());
            scheduler.triggerJob(jobKey, dataMap);
        } catch (Exception e) {
            log.error("定时任务执行失败", e);
            throw new BusinessException("定时任务执行失败");
        }
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/LightController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
package com.sandu.ximon.admin.controller;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.sandu.common.domain.ResponseVO;
import com.sandu.common.object.BaseConditionVO;
import com.sandu.common.util.ResponseUtil;
import com.sandu.ximon.admin.dto.LightDataDto;
import com.sandu.ximon.admin.service.LightReportDataService;
import com.sandu.ximon.dao.domain.Pole;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
 * è·¯ç¯ç›¸å…³æŽ§åˆ¶ç±»
 *
 * @author chenjiantian
 */
@RestController
@AllArgsConstructor
@RequestMapping("/v1/light")
public class LightController {
    private final LightReportDataService lightReportDataService;
    @GetMapping("/list")
    public ResponseVO<Object> listLight(BaseConditionVO conditionVO, @RequestParam(required = false) String keyword) {
        List<LightDataDto> list = lightReportDataService.listLight(conditionVO.getPageNo(),conditionVO.getPageSize(),keyword);
        return ResponseUtil.success(list);
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/LightTaskController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,38 @@
package com.sandu.ximon.admin.controller;
import com.sandu.common.domain.ResponseVO;
import com.sandu.common.util.ResponseUtil;
import com.sandu.ximon.admin.param.LightTaskParam;
import com.sandu.ximon.admin.service.LightTaskService;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * è·¯ç¯ä»»åŠ¡ç›¸å…³æŽ§åˆ¶ç±»
 *
 * @author chenjiantian
 */
@RestController
@AllArgsConstructor
@RequestMapping("/v1/light/task")
public class LightTaskController {
    private final LightTaskService lightTaskService;
    @PostMapping("/add")
    public ResponseVO<Object> addLightTask(@RequestBody @Validated LightTaskParam param) {
        boolean result = lightTaskService.addLightTask(param);
        if (result) {
            return ResponseUtil.success("新增成功");
        } else {
            return ResponseUtil.fail("新增失败");
        }
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/LightDataDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
package com.sandu.ximon.admin.dto;
import lombok.Data;
/**
 * @author chenjiantian
 * @date 2021/12/14 14:36
 */
@Data
public class LightDataDto {
}
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/SingleLightOrderDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package com.sandu.ximon.admin.dto;
import lombok.Data;
/**
 * @author chenjiantian
 * @date 2021/12/15 18:07
 * å•个路灯任务命令的内容
 */
@Data
public class SingleLightOrderDto {
    private int hour;
    private int minute;
    /**
     * 0-100
     */
    private int brightness;
}
ximon-admin/src/main/java/com/sandu/ximon/admin/param/LightTaskParam.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,47 @@
package com.sandu.ximon.admin.param;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
 * @author chenjiantian
 * è·¯ç¯ä»»åŠ¡
 */
@Data
public class LightTaskParam {
    /**
     * ä»»åŠ¡åç§°
     */
    @NotEmpty(message = "任务名称不能为空")
    private String taskName;
    /**
     * æ˜ŸæœŸå‡ ï¼Œä½è¿ç®—保存,1代表星期一,2星期二,4星期三,8星期四,16星期五,32星期六,64星期日
     */
    @NotNull(message = "星期不能为空")
    private Integer week;
    /**
     * å¼€ç¯å‘½ä»¤
     */
    @Length(min = 6, max = 6, message = "开灯命令长度错误")
    private String openOrder;
    /**
     * å…³é—­ç¯å‘½ä»¤
     */
    @Length(min = 6, max = 6, message = "关灯命令长度错误")
    private String closeOrder;
    /**
     * ç¯æŽ§å‘½ä»¤
     */
    private String controlOrder;
    private List<Long> poleIdList;
}
ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightReportDataService.java
@@ -1,11 +1,15 @@
package com.sandu.ximon.admin.service;
import com.github.pagehelper.PageHelper;
import com.sandu.common.service.impl.BaseServiceImpl;
import com.sandu.ximon.admin.dto.LightDataDto;
import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5LightHeartbeatReportInnerFrame;
import com.sandu.ximon.dao.domain.LightReportData;
import com.sandu.ximon.dao.mapper.LightReportDataMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * @author chenjiantian
@@ -28,4 +32,14 @@
        return save(lightReportData);
    }
    /**
     * èŽ·å–è·¯ç¯åˆ—è¡¨
     * @return è¿”回组合数据dto
     */
    public List<LightDataDto> listLight(int pageNo, int pageSize, String keyword) {
        PageHelper.startPage(pageNo,pageSize);
        return null;
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightTaskQuartzService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,58 @@
package com.sandu.ximon.admin.service;
import cn.hutool.core.util.ArrayUtil;
import com.sandu.common.execption.BusinessException;
import com.sandu.common.service.impl.BaseServiceImpl;
import com.sandu.ximon.admin.dto.SingleLightOrderDto;
import com.sandu.ximon.admin.utils.TaskOrderUtil;
import com.sandu.ximon.dao.domain.LightTask;
import com.sandu.ximon.dao.domain.LightTaskQuartz;
import com.sandu.ximon.dao.mapper.LightTaskQuartzMapper;
import org.quartz.CronScheduleBuilder;
import org.quartz.DateBuilder;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
 * @author chenjiantian
 * @date 2021/12/15 17:46
 */
@Service
public class LightTaskQuartzService extends BaseServiceImpl<LightTaskQuartzMapper, LightTaskQuartz> {
    /**
     * æ·»åŠ å®šæ—¶å™¨ä»»åŠ¡
     *
     * @param lightTask è·¯ç¯ä»»åŠ¡å®žä½“ç±»ï¼Œä¸€ä¸ªè·¯ç¯ä»»åŠ¡æœ‰å¤šä¸ªå®šæ—¶å™¨ä»»åŠ¡
     */
    public boolean addLightTaskQuartz(LightTask lightTask) {
        List<LightTaskQuartz> list = new ArrayList<>();
        // æ·»åŠ å¼€ç¯å®šæ—¶å™¨
        String openOrder = lightTask.getOpenOrder();
        SingleLightOrderDto singleLightOrder = TaskOrderUtil.parseLightOrder(openOrder);
        Integer[] weekArrays = TaskOrderUtil.parseLightWeek(lightTask.getWeek());
        if (singleLightOrder == null) {
            throw new BusinessException("解析单灯命令失败");
        }
        if(ArrayUtil.isEmpty(weekArrays)) {
            throw new BusinessException("请设置星期");
        }
        String cron = TaskOrderUtil.getHourAndMinuteOnGivenDaysOfWeek(singleLightOrder.getHour(), singleLightOrder.getMinute(), weekArrays);
        LightTaskQuartz lightTaskQuartz = new LightTaskQuartz();
        lightTaskQuartz.setTaskId(lightTask.getTaskId());
        lightTaskQuartz.setCronExpression(cron);
        return false;
    }
    public static void main(String[] args) {
        System.out.println(CronScheduleBuilder.atHourAndMinuteOnGivenDaysOfWeek(0, 1, DateBuilder.SUNDAY).build().getCalendarName());
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightTaskService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,49 @@
package com.sandu.ximon.admin.service;
import cn.hutool.core.util.StrUtil;
import com.sandu.common.execption.BusinessException;
import com.sandu.common.service.impl.BaseServiceImpl;
import com.sandu.ximon.admin.param.LightTaskParam;
import com.sandu.ximon.admin.security.SecurityUtils;
import com.sandu.ximon.dao.domain.LightTask;
import com.sandu.ximon.dao.mapper.LightTaskMapper;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
 * @author chenjiantian
 * @date 2021/12/15 16:33
 * è·¯ç¯ä»»åŠ¡æ“ä½œ
 */
@Service
@AllArgsConstructor
public class LightTaskService extends BaseServiceImpl<LightTaskMapper, LightTask> {
    private final static int ORDER_LENGTH = 6;
    private final LightTaskQuartzService lightTaskQuartzService;
    /**
     * æ–°å¢žè·¯ç¯ä»»åŠ¡
     */
    @Transactional(rollbackFor = Exception.class)
    public boolean addLightTask(LightTaskParam param) {
        if(StrUtil.length(param.getControlOrder()) % ORDER_LENGTH != 0){
            throw new BusinessException("灯控命令格式不正确");
        }
        LightTask lightTask = new LightTask();
        lightTask.setClientId(SecurityUtils.getClientId());
        lightTask.setTaskName(param.getTaskName());
        lightTask.setWeek(param.getWeek());
        lightTask.setCloseOrder(param.getCloseOrder());
        lightTask.setOpenOrder(param.getOpenOrder());
        lightTask.setControlOrder(param.getControlOrder());
        lightTask.setCreateUser(SecurityUtils.getUsername());
        if(!save(lightTask)) {
            throw new BusinessException("保存路灯任务失败");
        }
        boolean result = lightTaskQuartzService.addLightTaskQuartz(lightTask);
        return false;
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/service/PoleService.java
@@ -64,7 +64,7 @@
    /**
     * ç”Ÿæˆç¯æ†ç¼–号
     */
    private Long generatePoleCode() {
    public Long generatePoleCode() {
        StringBuilder sb = new StringBuilder();
        String date = new SimpleDateFormat("yyMMdd").format(new Date());
        sb.append(date);
ximon-admin/src/main/java/com/sandu/ximon/admin/utils/TaskOrderUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,76 @@
package com.sandu.ximon.admin.utils;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import com.sandu.ximon.admin.dto.SingleLightOrderDto;
import com.sandu.ximon.dao.enums.WeekEnums;
import org.quartz.DateBuilder;
import java.util.ArrayList;
import java.util.List;
/**
 * @author chenjiantian
 * @date 2021/12/15 18:06
 * ä»»åŠ¡å‘½ä»¤å·¥å…·ç±»
 */
public class TaskOrderUtil {
    public static SingleLightOrderDto parseLightOrder(String lightOrder) {
        if (StrUtil.length(lightOrder) != 6) {
            return null;
        }
        SingleLightOrderDto singleLightOrderDto = new SingleLightOrderDto();
        singleLightOrderDto.setHour(NumberUtil.parseInt(lightOrder.substring(0, 2)));
        singleLightOrderDto.setMinute(NumberUtil.parseInt(lightOrder.substring(2, 4)));
        singleLightOrderDto.setBrightness(NumberUtil.parseInt(lightOrder.substring(4, 6)));
        return singleLightOrderDto;
    }
    public static Integer[] parseLightWeek(Integer week) {
        if (week == null) {
            return null;
        }
        List<Integer> list = new ArrayList<>();
        if((WeekEnums.SUNDAY.getCode() & week) > 0){
            list.add(DateBuilder.SUNDAY);
        }
        if((WeekEnums.MONDAY.getCode() & week) > 0){
            list.add(DateBuilder.MONDAY);
        }
        if((WeekEnums.TUESDAY.getCode() & week) > 0){
            list.add(DateBuilder.TUESDAY);
        }
        if((WeekEnums.WEDNESDAY.getCode() & week) > 0){
            list.add(DateBuilder.WEDNESDAY);
        }
        if((WeekEnums.THURSDAY.getCode() & week) > 0){
            list.add(DateBuilder.THURSDAY);
        }
        if((WeekEnums.FRIDAY.getCode() & week) > 0){
            list.add(DateBuilder.FRIDAY);
        }
        if((WeekEnums.SATURDAY.getCode() & week) > 0){
            list.add(DateBuilder.SATURDAY);
        }
        return list.toArray(new Integer[0]);
    }
    /**
     * æ ¹æ®ç»™å®šçš„æ—¶åˆ†å‘¨ç”Ÿæˆcron
     * @param hour æ—¶
     * @param minute åˆ†
     * @param daysOfWeek 1表示的是星期日,7表示的星期六
     * @return cron
     */
    public static String getHourAndMinuteOnGivenDaysOfWeek(int hour, int minute, Integer... daysOfWeek) {
        StringBuilder cronExpression = new StringBuilder(String.format("0 %d %d ? * %d", minute, hour,
                daysOfWeek[0]));
        for (int i = 1; i < daysOfWeek.length; i++) {
            cronExpression.append(",").append(daysOfWeek[i]);
        }
        return cronExpression.toString();
    }
}
ximon-admin/src/test/java/com/sandu/ximon/admin/AdminApplicationTests.java
@@ -1,6 +1,9 @@
package com.sandu.ximon.admin;
import com.sandu.ximon.admin.service.PoleService;
import org.junit.jupiter.api.Test;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.security.crypto.password.PasswordEncoder;
@@ -8,12 +11,24 @@
@SpringBootTest
class AdminApplicationTests {
    @Autowired
    private PasswordEncoder passwordEncoder;
    @Test
    void contextLoads() {
        System.out.println(passwordEncoder.encode("666666"));
    }
    @Autowired
    private PasswordEncoder passwordEncoder;
    @Autowired
    private PoleService poleService;
    @Test
    void contextLoads() {
        System.out.println(passwordEncoder.encode("666666"));
    }
    @Test
    void poleService() {
        System.out.println(poleService.generatePoleCode());
    }
    public static void main(String[] args) {
    }
}