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) { } }