From d74dd3d6f754a7dd3660ef025276f9a055111b6b Mon Sep 17 00:00:00 2001
From: chenjiantian <214228265@qq.com>
Date: 星期三, 15 十二月 2021 18:33:12 +0800
Subject: [PATCH] 灯模块

---
 sandu-common/src/main/java/com/sandu/common/quartz/service/QuartzService.java       |   47 ++
 dao/src/main/java/com/sandu/ximon/dao/mapper/LightTaskMapper.java                   |   15 
 sandu-common/src/main/java/com/sandu/common/quartz/ExecutionJob.java                |   16 
 ximon-admin/src/main/java/com/sandu/ximon/admin/param/LightTaskParam.java           |   47 ++
 ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightTaskQuartzService.java |   58 +++
 dao/src/main/java/com/sandu/ximon/dao/domain/LightTaskQuartz.java                   |   61 +++
 ximon-admin/src/main/java/com/sandu/ximon/admin/dto/LightDataDto.java               |   11 
 dao/src/main/java/com/sandu/ximon/dao/enums/WeekEnums.java                          |   52 ++
 ximon-admin/src/main/java/com/sandu/ximon/admin/utils/TaskOrderUtil.java            |   76 ++++
 dao/src/main/java/com/sandu/ximon/dao/mapper/LightTaskQuartzMapper.java             |   17 
 ximon-admin/src/main/java/com/sandu/ximon/admin/dto/SingleLightOrderDto.java        |   19 +
 ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightTaskService.java       |   49 ++
 dao/src/main/java/com/sandu/ximon/dao/domain/LightTask.java                         |   76 ++++
 dao/src/main/java/com/sandu/ximon/dao/mapper/PoleBindingMapper.java                 |    2 
 ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightReportDataService.java |   14 
 ximon-admin/src/main/java/com/sandu/ximon/admin/service/PoleService.java            |    2 
 ximon-admin/src/main/java/com/sandu/ximon/admin/controller/LightController.java     |   39 ++
 sandu-common/src/main/java/com/sandu/common/quartz/service/QuartzServiceImpl.java   |  125 ++++++
 ximon-admin/src/main/java/com/sandu/ximon/admin/controller/LightTaskController.java |   38 ++
 ximon-admin/src/test/java/com/sandu/ximon/admin/AdminApplicationTests.java          |   27 +
 sandu-common/src/main/java/com/sandu/common/quartz/config/QuartzConfig.java         |   59 +++
 dao/src/main/resources/mapper/LightTaskMapper.xml                                   |   27 +
 sandu-common/src/main/java/com/sandu/common/quartz/dto/QuartzJobDto.java            |   61 +++
 dao/src/main/java/com/sandu/ximon/dao/domain/LightTaskPoleRelation.java             |   46 ++
 dao/src/main/java/com/sandu/ximon/dao/mapper/LightTaskPoleRelationMapper.java       |   17 
 dao/src/main/resources/mapper/LightTaskPoleRelationMapper.xml                       |   19 +
 dao/src/main/resources/mapper/LightTaskQuartzMapper.xml                             |   23 +
 27 files changed, 1,036 insertions(+), 7 deletions(-)

diff --git a/dao/src/main/java/com/sandu/ximon/dao/domain/LightTask.java b/dao/src/main/java/com/sandu/ximon/dao/domain/LightTask.java
new file mode 100644
index 0000000..6d08c4e
--- /dev/null
+++ b/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浠h〃鏄熸湡涓�锛�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;
+}
\ No newline at end of file
diff --git a/dao/src/main/java/com/sandu/ximon/dao/domain/LightTaskPoleRelation.java b/dao/src/main/java/com/sandu/ximon/dao/domain/LightTaskPoleRelation.java
new file mode 100644
index 0000000..498d7a0
--- /dev/null
+++ b/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;
+}
\ No newline at end of file
diff --git a/dao/src/main/java/com/sandu/ximon/dao/domain/LightTaskQuartz.java b/dao/src/main/java/com/sandu/ximon/dao/domain/LightTaskQuartz.java
new file mode 100644
index 0000000..7b63d09
--- /dev/null
+++ b/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;
+
+    /**
+     * 瀹氭椂鍣╟ron
+     */
+    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;
+}
\ No newline at end of file
diff --git a/dao/src/main/java/com/sandu/ximon/dao/enums/WeekEnums.java b/dao/src/main/java/com/sandu/ximon/dao/enums/WeekEnums.java
new file mode 100644
index 0000000..20391d3
--- /dev/null
+++ b/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;
+    }
+
+
+}
diff --git a/dao/src/main/java/com/sandu/ximon/dao/mapper/LightTaskMapper.java b/dao/src/main/java/com/sandu/ximon/dao/mapper/LightTaskMapper.java
new file mode 100644
index 0000000..ea6a350
--- /dev/null
+++ b/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> {
+
+}
+
+
+
+
diff --git a/dao/src/main/java/com/sandu/ximon/dao/mapper/LightTaskPoleRelationMapper.java b/dao/src/main/java/com/sandu/ximon/dao/mapper/LightTaskPoleRelationMapper.java
new file mode 100644
index 0000000..a4eca8e
--- /dev/null
+++ b/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> {
+
+}
+
+
+
+
diff --git a/dao/src/main/java/com/sandu/ximon/dao/mapper/LightTaskQuartzMapper.java b/dao/src/main/java/com/sandu/ximon/dao/mapper/LightTaskQuartzMapper.java
new file mode 100644
index 0000000..3ca8d53
--- /dev/null
+++ b/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> {
+
+}
+
+
+
+
diff --git a/dao/src/main/java/com/sandu/ximon/dao/mapper/PoleBindingMapper.java b/dao/src/main/java/com/sandu/ximon/dao/mapper/PoleBindingMapper.java
index 8e6085d..f9ea8b3 100644
--- a/dao/src/main/java/com/sandu/ximon/dao/mapper/PoleBindingMapper.java
+++ b/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> {
 
 }
diff --git a/dao/src/main/resources/mapper/LightTaskMapper.xml b/dao/src/main/resources/mapper/LightTaskMapper.xml
new file mode 100644
index 0000000..b3eb1db
--- /dev/null
+++ b/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>
diff --git a/dao/src/main/resources/mapper/LightTaskPoleRelationMapper.xml b/dao/src/main/resources/mapper/LightTaskPoleRelationMapper.xml
new file mode 100644
index 0000000..c50eafc
--- /dev/null
+++ b/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>
diff --git a/dao/src/main/resources/mapper/LightTaskQuartzMapper.xml b/dao/src/main/resources/mapper/LightTaskQuartzMapper.xml
new file mode 100644
index 0000000..38f6f3f
--- /dev/null
+++ b/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>
diff --git a/sandu-common/src/main/java/com/sandu/common/quartz/ExecutionJob.java b/sandu-common/src/main/java/com/sandu/common/quartz/ExecutionJob.java
new file mode 100644
index 0000000..b01dd09
--- /dev/null
+++ b/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());
+    }
+}
diff --git a/sandu-common/src/main/java/com/sandu/common/quartz/config/QuartzConfig.java b/sandu-common/src/main/java/com/sandu/common/quartz/config/QuartzConfig.java
new file mode 100644
index 0000000..c828724
--- /dev/null
+++ b/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 {
+
+    /**
+     * 瑙e喅Job涓敞鍏pring Bean涓簄ull鐨勯棶棰�
+     */
+    @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鍒皊pring
+     * @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;
+    }
+}
diff --git a/sandu-common/src/main/java/com/sandu/common/quartz/dto/QuartzJobDto.java b/sandu-common/src/main/java/com/sandu/common/quartz/dto/QuartzJobDto.java
new file mode 100644
index 0000000..292044b
--- /dev/null
+++ b/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;
+
+}
diff --git a/sandu-common/src/main/java/com/sandu/common/quartz/service/QuartzService.java b/sandu-common/src/main/java/com/sandu/common/quartz/service/QuartzService.java
new file mode 100644
index 0000000..70c3e2e
--- /dev/null
+++ b/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 {
+
+    /**
+     * 澧炲姞涓�涓换鍔ob
+     * @param quartzJobDto 瀹氭椂浠诲姟瀹炰綋绫�
+     */
+    void addJob(Class<? extends QuartzJobBean> jobClass, QuartzJobDto quartzJobDto);
+
+    /**
+     * 淇敼涓�涓换鍔ob
+     * @param quartzJobDto 瀹氭椂浠诲姟瀹炰綋绫�
+     */
+    void updateJobCron(Class<? extends QuartzJobBean> jobClass,QuartzJobDto quartzJobDto);
+
+    /**
+     * 鍒犻櫎涓�涓换鍔ob
+     * @param jobId 瀹氭椂浠诲姟id
+     */
+    void deleteJob(Class<? extends QuartzJobBean> jobClass,Long jobId);
+
+    /**
+     * 鏆傚仠涓�涓换鍔ob
+     * @param jobId 瀹氭椂浠诲姟id
+     */
+    void pauseJob(Class<? extends QuartzJobBean> jobClass,Long jobId);
+
+    /**
+     * 鎭㈠涓�涓换鍔ob
+     * @param quartzJobDto 瀹氭椂浠诲姟瀹炰綋绫�
+     */
+    void resumeJob(Class<? extends QuartzJobBean> jobClass,QuartzJobDto quartzJobDto);
+
+    /**
+     * 绔嬪嵆鎵ц涓�涓换鍔ob
+     * @param quartzJobDto 瀹氭椂浠诲姟瀹炰綋绫�
+     */
+    void runJobNow(Class<? extends QuartzJobBean> jobClass,QuartzJobDto quartzJobDto);
+}
diff --git a/sandu-common/src/main/java/com/sandu/common/quartz/service/QuartzServiceImpl.java b/sandu-common/src/main/java/com/sandu/common/quartz/service/QuartzServiceImpl.java
new file mode 100644
index 0000000..ec54efb
--- /dev/null
+++ b/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("瀹氭椂浠诲姟鎵ц澶辫触");
+        }
+    }
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/LightController.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/LightController.java
new file mode 100644
index 0000000..05cc0d0
--- /dev/null
+++ b/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);
+    }
+
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/LightTaskController.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/controller/LightTaskController.java
new file mode 100644
index 0000000..69602df
--- /dev/null
+++ b/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("鏂板澶辫触");
+        }
+    }
+
+
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/dto/LightDataDto.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/dto/LightDataDto.java
new file mode 100644
index 0000000..484a571
--- /dev/null
+++ b/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 {
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/dto/SingleLightOrderDto.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/dto/SingleLightOrderDto.java
new file mode 100644
index 0000000..a44e64b
--- /dev/null
+++ b/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;
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/param/LightTaskParam.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/param/LightTaskParam.java
new file mode 100644
index 0000000..1fd7a35
--- /dev/null
+++ b/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浠h〃鏄熸湡涓�锛�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;
+
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightReportDataService.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightReportDataService.java
index 213eaeb..5a79a77 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightReportDataService.java
+++ b/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;
+    }
 }
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightTaskQuartzService.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightTaskQuartzService.java
new file mode 100644
index 0000000..3e16e33
--- /dev/null
+++ b/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("瑙f瀽鍗曠伅鍛戒护澶辫触");
+        }
+        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());
+    }
+
+
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightTaskService.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightTaskService.java
new file mode 100644
index 0000000..6da0e0d
--- /dev/null
+++ b/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;
+    }
+}
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/PoleService.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/PoleService.java
index 193edc4..e837d24 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/PoleService.java
+++ b/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);
diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/TaskOrderUtil.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/utils/TaskOrderUtil.java
new file mode 100644
index 0000000..e66b74e
--- /dev/null
+++ b/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();
+    }
+}
diff --git a/ximon-admin/src/test/java/com/sandu/ximon/admin/AdminApplicationTests.java b/ximon-admin/src/test/java/com/sandu/ximon/admin/AdminApplicationTests.java
index a85696a..a0e14ef 100644
--- a/ximon-admin/src/test/java/com/sandu/ximon/admin/AdminApplicationTests.java
+++ b/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) {
+
+
+    }
 
 }

--
Gitblit v1.9.3