完成定时控制

master
林颖晨 2 years ago
parent 1294a2cd98
commit 703bcede57
  1. 18
      psdc-business/pom.xml
  2. 9
      psdc-business/src/main/java/com/psdc/entity/PsdcTimer.java
  3. 41
      psdc-business/src/main/java/com/psdc/entity/request/PsdcTimerRequest.java
  4. 42
      psdc-business/src/main/java/com/psdc/entity/request/PsdcTimerRunTimeRequest.java
  5. 44
      psdc-business/src/main/java/com/psdc/entity/vo/PsdcTimerVo.java
  6. 25
      psdc-business/src/main/java/com/psdc/mapper/PsdcTimerMapper.java
  7. 42
      psdc-business/src/main/java/com/psdc/service/IPsdcTimerService.java
  8. 3
      psdc-business/src/main/java/com/psdc/service/impl/PsdcSceneServiceImpl.java
  9. 207
      psdc-business/src/main/java/com/psdc/service/impl/PsdcTimerServiceImpl.java
  10. 96
      psdc-business/src/main/resources/mapper/business/PsdcTimerMapper.xml
  11. 4
      psdc-common/src/main/java/com/psdc/enums/ControlKeyEnum.java
  12. 30
      psdc-quartz/src/main/java/com/psdc/controller/SysJobController.java
  13. 22
      psdc-quartz/src/main/java/com/psdc/controller/SysJobLogController.java
  14. 18
      psdc-quartz/src/main/java/com/psdc/domain/SysJob.java
  15. 12
      psdc-quartz/src/main/java/com/psdc/domain/SysJobLog.java
  16. 11
      psdc-quartz/src/main/java/com/psdc/mapper/SysJobLogMapper.java
  17. 17
      psdc-quartz/src/main/java/com/psdc/mapper/SysJobMapper.java
  18. 8
      psdc-quartz/src/main/java/com/psdc/service/ISysJobLogService.java
  19. 17
      psdc-quartz/src/main/java/com/psdc/service/ISysJobService.java
  20. 14
      psdc-quartz/src/main/java/com/psdc/service/impl/SysJobLogServiceImpl.java
  21. 37
      psdc-quartz/src/main/java/com/psdc/service/impl/SysJobServiceImpl.java
  22. 4
      psdc-quartz/src/main/java/com/psdc/task/RyTask.java
  23. 21
      psdc-quartz/src/main/java/com/psdc/util/AbstractQuartzJob.java
  24. 5
      psdc-quartz/src/main/java/com/psdc/util/CronUtils.java
  25. 9
      psdc-quartz/src/main/java/com/psdc/util/JobInvokeUtil.java
  26. 4
      psdc-quartz/src/main/java/com/psdc/util/QuartzDisallowConcurrentExecution.java
  27. 4
      psdc-quartz/src/main/java/com/psdc/util/QuartzJobExecution.java
  28. 15
      psdc-quartz/src/main/java/com/psdc/util/ScheduleUtils.java
  29. 2
      psdc-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml
  30. 7
      psdc-quartz/src/main/resources/mapper/quartz/SysJobMapper.xml
  31. 94
      psdc-web/src/main/java/com/psdc/controller/control/TimerControl.java

@ -28,6 +28,24 @@
<artifactId>psdc-framework</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<groupId>com.psdc</groupId>
<artifactId>psdc-quartz</artifactId>
<version>0.0.1</version>
</dependency>
<!-- 定时任务 -->
<!-- <dependency>-->
<!-- <groupId>org.quartz-scheduler</groupId>-->
<!-- <artifactId>quartz</artifactId>-->
<!-- <exclusions>-->
<!-- <exclusion>-->
<!-- <groupId>com.mchange</groupId>-->
<!-- <artifactId>c3p0</artifactId>-->
<!-- </exclusion>-->
<!-- </exclusions>-->
<!-- </dependency>-->
</dependencies>
</project>

@ -17,8 +17,10 @@ public class PsdcTimer extends BaseEntity {
private Integer deviceId ;
/** 用户id */
private Integer userId ;
/** 执行日期 */
private String runday ;
/** 执行时间 */
private String runtimer ;
private String runtime ;
/** 执行指令 */
private String controlKey ;
/** 指令描述 */
@ -27,6 +29,11 @@ public class PsdcTimer extends BaseEntity {
private String controlValue ;
/** cron表达式 */
private String cronText ;
/**
*quartz_job表id
*/
private Integer jobId;
/** 状态:1-开启,2-暂停 */
private Integer timerStatus ;
}

@ -0,0 +1,41 @@
package com.psdc.entity.request;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.stereotype.Component;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
public class PsdcTimerRequest {
/** 定时控制任务主键 */
private Integer timerId ;
/** 设备id */
private Integer deviceId ;
/** 用户id */
private Long userId ;
/** 执行日期 */
private String runday ;
/** 执行时间 */
private String runtime ;
/** 执行指令 */
private String controlKey ;
/** 指令描述 */
private String controlContext ;
/** 状态:1-开启,2-暂停 */
private Integer timerStatus ;
/**
* 创建时间开始时间
*/
private String createStart;
/**
* 创建时间结束时间
*/
private String createEnd;
}

@ -0,0 +1,42 @@
package com.psdc.entity.request;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PsdcTimerRunTimeRequest {
/**
* 设备id
*/
private Integer deviceId;
/**
* 控制键
*/
private String controlKey;
/**
* 控制值
*/
private String controlValue;
/**
* 任务状态 1开启2关闭
*/
private Integer status;
/** 执行日期 0每天,1-7 周一 - 周日,其中0只会出现一个,周一到周日可以出现多个*/
private String runday ;
/** 执行时间 */
private String runtime ;
}

@ -0,0 +1,44 @@
package com.psdc.entity.vo;
import com.psdc.core.domain.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.stereotype.Component;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
public class PsdcTimerVo extends BaseEntity {
/** 定时控制任务主键 */
private Integer timerId ;
/** 设备id */
private Integer deviceId ;
/** 设备名称 */
private String deviceName ;
/** 用户id */
private Integer userId ;
/** 执行日期 */
private String runday ;
/** 执行时间 */
private String runtime ;
/** 执行指令 */
private String controlKey ;
/** 指令描述 */
private String controlContext ;
/** 指令值 */
private String controlValue ;
/** cron表达式 */
private String cronText ;
/**
*quartz_job表id
*/
private Integer jobId;
/** 状态:1-开启,2-暂停 */
private Integer timerStatus ;
}

@ -3,12 +3,13 @@ package com.psdc.mapper;
import java.util.List;
import com.psdc.entity.PsdcTimer;
import com.psdc.entity.request.PsdcTimerRequest;
import com.psdc.entity.vo.PsdcTimerVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.data.domain.Pageable;
/**
/**
* 定时控制任务表;(psdc_timer)表数据库访问层
* @date : 2023-5-10
*/
@ -21,6 +22,14 @@ public interface PsdcTimerMapper{
* @return 实例对象
*/
PsdcTimer queryById(Integer timerId);
/**
* 通过ID查询单条数据
*
* @param timerId 主键
* @return 实例对象
*/
PsdcTimerVo queryById2(Integer timerId);
/**
* 分页查询指定行数据
*
@ -28,7 +37,7 @@ public interface PsdcTimerMapper{
* @param pageable 分页对象
* @return 对象列表
*/
List<PsdcTimer> queryAllByLimit(PsdcTimer psdcTimer);
List<PsdcTimerVo> queryAllByLimit(PsdcTimerRequest psdcTimerRequest);
/**
* 新增数据
@ -46,6 +55,16 @@ public interface PsdcTimerMapper{
* @return 影响行数
*/
int update(PsdcTimer psdcTimer);
/**
* 更新状态数据
* @param timerId
* @param status
* @return
*/
int updateStatus(@Param(value = "timerId") Integer timerId,
@Param(value = "status") Integer status);
/**
* 通过主键删除数据
*

@ -1,11 +1,15 @@
package com.psdc.service;
import com.psdc.entity.PsdcTimer;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import com.psdc.entity.request.PsdcTimerRequest;
import com.psdc.entity.request.PsdcTimerRunTimeRequest;
import com.psdc.entity.vo.PsdcTimerVo;
import org.quartz.SchedulerException;
import java.util.List;
/**
/**
* 定时控制任务表;(psdc_timer)表服务接口
* @date : 2023-5-10
*/
@ -16,7 +20,7 @@ public interface IPsdcTimerService {
* @param timerId 主键
* @return 实例对象
*/
PsdcTimer queryById(Integer timerId);
PsdcTimerVo queryById(Integer timerId);
/**
* 新增数据
@ -31,7 +35,7 @@ public interface IPsdcTimerService {
* @param psdcTimer 实例对象
* @return 实例对象
*/
PsdcTimer update(PsdcTimer psdcTimer);
PsdcTimerVo update(PsdcTimer psdcTimer);
/**
* 通过主键删除数据
*
@ -39,4 +43,32 @@ public interface IPsdcTimerService {
* @return 是否成功
*/
boolean deleteById(Integer timerId);
/**
* 查询所有定时任务
* @param psdcTimerRequest
*/
List<PsdcTimerVo> query(PsdcTimerRequest psdcTimerRequest);
/**
* 创建定时任务
* @param psdcTimerRunTimeRequest
* @return
*/
Integer addTimer(PsdcTimerRunTimeRequest psdcTimerRunTimeRequest);
/**
* 修改定时任务状态
* @param timerId
* @param status
* @return
*/
int updateStatus(Integer timerId, Integer status) throws SchedulerException;
/**
* 删除定时任务
* @param timerId
* @return
*/
Integer delete(Integer timerId) throws SchedulerException;
}

@ -9,7 +9,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@ -18,7 +17,7 @@ import java.util.stream.Collectors;
* @date : 2023-5-10
*/
@Service
public class IPsdcSceneServiceImpl implements IPsdcSceneService {
public class PsdcSceneServiceImpl implements IPsdcSceneService {
@Autowired
private PsdcSceneMapper psdcSceneMapper;

@ -1,21 +1,49 @@
package com.psdc.service.impl;
import com.psdc.domain.SysJob;
import com.psdc.entity.PsdcTimer;
import com.psdc.entity.request.PsdcTimerRequest;
import com.psdc.entity.request.PsdcTimerRunTimeRequest;
import com.psdc.entity.vo.PsdcTimerVo;
import com.psdc.enums.ControlKeyEnum;
import com.psdc.exception.ServiceException;
import com.psdc.exception.job.TaskException;
import com.psdc.mapper.PsdcTimerMapper;
import com.psdc.service.IPsdcDeviceService;
import com.psdc.service.IPsdcTimerService;
import org.springframework.beans.factory.annotation.Autowired;
import com.psdc.service.ISysJobLogService;
import com.psdc.service.ISysJobService;
import com.psdc.utils.SecurityUtils;
import com.psdc.utils.bean.BeanUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.quartz.SchedulerException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
/**
/**
* 定时控制任务表;(psdc_timer)表服务实现类
* @author : http://www.chiner.pro
* @date : 2023-5-10
* @date : 2023-5-10
*/
@Service
@Slf4j
public class PsdcTimerServiceImpl implements IPsdcTimerService {
@Autowired
@Resource
private PsdcTimerMapper psdcTimerMapper;
@Resource
private ISysJobService jobService;
@Resource
private ISysJobLogService jobLogService;
@Resource
private IPsdcDeviceService psdcDeviceService;
/**
* 通过ID查询单条数据
@ -23,8 +51,8 @@ public class PsdcTimerServiceImpl implements IPsdcTimerService {
* @param timerId 主键
* @return 实例对象
*/
public PsdcTimer queryById(Integer timerId){
return psdcTimerMapper.queryById(timerId);
public PsdcTimerVo queryById(Integer timerId){
return psdcTimerMapper.queryById2(timerId);
}
@ -46,7 +74,7 @@ public class PsdcTimerServiceImpl implements IPsdcTimerService {
* @param psdcTimer 实例对象
* @return 实例对象
*/
public PsdcTimer update(PsdcTimer psdcTimer){
public PsdcTimerVo update(PsdcTimer psdcTimer){
psdcTimerMapper.update(psdcTimer);
return queryById(psdcTimer.getTimerId());
}
@ -61,4 +89,167 @@ public class PsdcTimerServiceImpl implements IPsdcTimerService {
int total = psdcTimerMapper.deleteById(timerId);
return total > 0;
}
@Override
public List<PsdcTimerVo> query(PsdcTimerRequest psdcTimerRequest) {
psdcTimerRequest.setUserId(SecurityUtils.getUserId());
return psdcTimerMapper.queryAllByLimit(psdcTimerRequest);
}
/**
* 创建定时任务
* @param psdcTimerRunTimeRequest 请求类
* @return int
*/
@Override
@Transactional
public Integer addTimer(PsdcTimerRunTimeRequest psdcTimerRunTimeRequest) {
//获取psdcTimerRunTimeRequest中的timeList数组,根据内容拼出cron表达式
String runDay = psdcTimerRunTimeRequest.getRunday();
String runtime = psdcTimerRunTimeRequest.getRuntime();
//设置cron表达式
String[] cronArr = new String[7];
//秒,默认为每分钟的0秒
if (runtime == null || !runtime.contains(":") ){
throw new ServiceException("设定执行时间错误,创建定时任务失败,设定时间为:"+runtime);
}
if (runDay == null || "".equals(runDay)) {
throw new ServiceException("设定日期错误,创建定时任务失败,设定日期为:" + runDay);
}
String[] split1 = runtime.split(":");
cronArr[0] = "0";
//分
cronArr[1] = split1[1];
//时
cronArr[2] = split1[0];
/*
接下来拼装日月或周只有三种情况
*/
if(runDay.equals("0")){
//每天的情况
//日
cronArr[3] = "*";
//月
cronArr[4] = "*";
//周
cronArr[5] = "?";
} else if (runDay.length() == 10 && (runDay.contains("-"))) {
//设定日期情况,就是一次的情况
String[] split = runDay.split("-");
//日
cronArr[3] = split[2];
//月
cronArr[4] = split[1];
//周
cronArr[5] = "?";
} else if (runDay.contains(",")) {
//设定星期情况
String[] split = runDay.split("-");
//日
cronArr[3] = "?";
//月
cronArr[4] = "*";
//周
cronArr[5] = StringUtils.join(split,",");
} else {
throw new ServiceException("设定日期错误,创建定时任务失败,设定日期为:" + runDay);
}
//年,。暂时不用
// cronArr[6] =
String cron = StringUtils.join(cronArr, " ");
log.info("cron表达式:{}",cron);
try {
/*
创建job对象往quartz中插入执行的任务拿到jobId
*/
SysJob job = new SysJob();
//设备id + 控制键 + 控制值 + 控制日期 + 控制时间 +
String jobName = psdcTimerRunTimeRequest.getDeviceId() + "+" + ControlKeyEnum.getControlContext(psdcTimerRunTimeRequest.getControlKey()) + "-" +
psdcTimerRunTimeRequest.getControlValue() + "+" + psdcTimerRunTimeRequest.getRunday() + "+" + psdcTimerRunTimeRequest.getRuntime() + "+" + System.currentTimeMillis();
job.setJobName(jobName);
//默认
job.setJobGroup("psdc");
String controlKey = psdcTimerRunTimeRequest.getControlKey();
String jobClassName = "";
//判断控制指令
if (controlKey.equals( "startandstop")){
//控制启停
log.info("控制设备启停");
jobClassName = String.format("psdcDeviceServiceImpl.controlDeviceStartAndStop(%d,%d,'%s',%d))",psdcTimerRunTimeRequest.getDeviceId(),Integer.valueOf(psdcTimerRunTimeRequest.getControlValue()),SecurityUtils.getUsername(),2);
} else if (controlKey.equals( "intemp") || controlKey.equals( "outtemp") || controlKey.equals( "temp") ) {
//控制温度
jobClassName = String.format("psdcDeviceServiceImpl.setTemperature(%d,'%s','%s','%s',%d))",psdcTimerRunTimeRequest.getDeviceId(),controlKey,psdcTimerRunTimeRequest.getControlValue(),SecurityUtils.getUsername(),2);
}
job.setInvokeTarget(jobClassName);
//cron表达式
job.setCronExpression(cron);
//执行错误放弃执行
job.setMisfirePolicy("3");
//是否并发,不并发
job.setConcurrent("1");
job.setCreateBy(SecurityUtils.getUsername());
int i = jobService.insertJob(job);
SysJob job1 = null;
if( i > 0){
job1 = jobService.selectJobByName(jobName);
} else {
throw new ServiceException("创建定时任务失败,请联系管理员");
}
//将创建的任务插入psdcTimer表
PsdcTimer psdcTimer = new PsdcTimer();
BeanUtils.copyProperties(psdcTimerRunTimeRequest,psdcTimer);
psdcTimer.setUserId(SecurityUtils.getUserId().intValue());
psdcTimer.setControlContext( ControlKeyEnum.getControlContext(psdcTimerRunTimeRequest.getControlKey()));
psdcTimer.setCronText(cron);
psdcTimer.setJobId(job1.getJobId().intValue());
psdcTimer.setTimerStatus(Integer.valueOf(job1.getStatus()));
psdcTimer.setCreateBy(SecurityUtils.getUsername());
return psdcTimerMapper.insert(psdcTimer);
} catch (SchedulerException e) {
throw new RuntimeException(e);
} catch (TaskException e) {
throw new RuntimeException(e);
}
}
@Override
@Transactional
public int updateStatus(Integer timerId, Integer status) throws SchedulerException {
//获取jobId
PsdcTimer psdcTimer = psdcTimerMapper.queryById(timerId);
//修改quartz状态
SysJob job = new SysJob();
job.setStatus(status.toString());
job.setJobId(psdcTimer.getJobId().longValue());
job.setJobGroup("psdc");
int i = jobService.changeStatus(job);
if (i > 0){
return psdcTimerMapper.updateStatus(timerId, status);
} else {
throw new ServiceException("修改定时任务状态失败");
}
}
@Override
@Transactional
public Integer delete(Integer timerId) throws SchedulerException {
//获取jobId
PsdcTimer psdcTimer = psdcTimerMapper.queryById(timerId);
//删除quartz任务
SysJob job = new SysJob();
job.setJobId(psdcTimer.getJobId().longValue());
job.setJobGroup("psdc");
int i = jobService.deleteJob(job);
if (i > 0){
return psdcTimerMapper.deleteById(timerId);
} else {
throw new ServiceException("删除定时任务失败");
}
}
}

@ -5,7 +5,27 @@
<result property="timerId" column="timer_id" />
<result property="deviceId" column="device_id" />
<result property="userId" column="user_id" />
<result property="runtimer" column="runtimer" />
<result property="runday" column="runday" />
<result property="runtime" column="runtime" />
<result property="controlKey" column="control_key" />
<result property="controlContext" column="control_context" />
<result property="controlValue" column="control_value" />
<result property="cronText" column="cron_text" />
<result property="jobId" column="job_id"/>
<result property="timerStatus" column="timer_status" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
</resultMap>
<resultMap type="com.psdc.entity.vo.PsdcTimerVo" id="PsdcTimerVoMap">
<result property="timerId" column="timer_id" />
<result property="deviceId" column="device_id" />
<result property="deviceName" column="device_name" />
<result property="userId" column="user_id" />
<result property="runday" column="runday" />
<result property="runtime" column="runtime" />
<result property="controlKey" column="control_key" />
<result property="controlContext" column="control_context" />
<result property="controlValue" column="control_value" />
@ -20,64 +40,63 @@
<!-- 通过ID查询单条数据 -->
<select id="queryById" resultMap="PsdcTimerMap">
select
timer_id,device_id,user_id,runtimer,control_key,control_context,control_value,cron_text,timer_status,create_by,create_time,update_by,update_time
timer_id,device_id,user_id,runday,runtime,control_key,control_context,control_value,cron_text,job_id,timer_status,create_by,create_time,update_by,update_time
from psdc_timer
where timer_id = #{timerId}
</select>
<!-- 通过ID查询单条数据 -->
<select id="queryById2" resultMap="PsdcTimerVoMap">
select
pt.timer_id,pt.device_id,pd.device_name,pt.user_id,pt.runday,pt.runtime,pt.control_key,pt.control_context,pt.job_id,pt.control_value,pt.cron_text,pt.timer_status,pt.create_by,pt.create_time,pt.update_by,pt.update_time
from psdc_timer pt left join psdc_device pd on pt.device_id = pd.device_id
where timer_id = #{timerId}
</select>
<!--分页查询指定行数据-->
<select id="queryAllByLimit" resultMap="PsdcTimerMap">
select
timer_id,device_id,user_id,runtimer,control_key,control_context,control_value,cron_text,timer_status,create_by,create_time,update_by,update_time
from psdc_timer
pt.timer_id,pt.device_id,pd.device_name,pt.user_id,pt.runday,pt.runtime,pt.control_key,pt.control_context,pt.control_value,pt.cron_text,pt.job_id,pt.timer_status,pt.create_by,pt.create_time,pt.update_by,pt.update_time
from psdc_timer pt left join psdc_device pd on pt.device_id = pd.device_id
<where>
<if test="timerId != null and timerId != ''">
and timer_id = #{timerId}
and pt.timer_id = #{timerId}
</if>
<if test="deviceId != null and deviceId != ''">
and device_id = #{deviceId}
and pt.device_id = #{deviceId}
</if>
<if test="userId != null and userId != ''">
and user_id = #{userId}
and pt.user_id = #{userId}
</if>
<if test="runday != null and runday != ''">
and pt.runday = #{runday}
</if>
<if test="runtimer != null and runtimer != ''">
and runtimer = #{runtimer}
<if test="runtime != null and runtime != ''">
and pt.runtime = #{runtime}
</if>
<if test="controlKey != null and controlKey != ''">
and control_key = #{controlKey}
and pt.control_key = #{controlKey}
</if>
<if test="controlContext != null and controlContext != ''">
and control_context = #{controlContext}
</if>
<if test="controlValue != null and controlValue != ''">
and control_value = #{controlValue}
</if>
<if test="cronText != null and cronText != ''">
and cron_text = #{cronText}
and pt.control_context = #{controlContext}
</if>
<if test="timerStatus != null and timerStatus != ''">
and timer_status = #{timerStatus}
and pt.timer_status = #{timerStatus}
</if>
<if test="createBy != null and createBy != ''">
and create_by = #{createBy}
<if test="createStart != null and createStart != ''"><!-- 开始时间检索 -->
AND date_format(pt.create_time,'%y%m%d') &gt;= date_format(#{createStart},'%y%m%d')
</if>
<if test="createTime != null and createTime != ''">
and create_time = #{createTime}
</if>
<if test="updateBy != null and updateBy != ''">
and update_by = #{updateBy}
</if>
<if test="updateTime != null and updateTime != ''">
and update_time = #{updateTime}
<if test="createEnd != null and createEnd != ''"><!-- 结束时间检索 -->
AND date_format(pt.create_time,'%y%m%d') &lt;= date_format(#{createEnd},'%y%m%d')
</if>
</where>
</select>
<!--新增数据-->
<insert id="insert" keyProperty="timer_id" useGeneratedKeys="true">
insert into psdc_timer(timer_id,device_id,user_id,runtimer,control_key,control_context,control_value,cron_text,timer_status,create_by,create_time,update_by,update_time)
values (#{timerId},#{deviceId},#{userId},#{runtimer},#{controlKey},#{controlContext},#{controlValue},#{cronText},#{timerStatus},#{createBy},#{createTime},#{updateBy},#{updateTime})
<insert id="insert" >
insert into psdc_timer(device_id,user_id,runday,runtime,control_key,control_context,control_value,cron_text,job_id,timer_status,create_by,create_time)
values (#{deviceId},#{userId},#{runday},#{runtime},#{controlKey},#{controlContext},#{controlValue},#{cronText},#{jobId},#{timerStatus},#{createBy},sysdate())
</insert>
@ -95,8 +114,11 @@
<if test="userId != null and userId != ''">
user_id = #{userId},
</if>
<if test="runtimer != null and runtimer != ''">
runtimer = #{runtimer},
<if test="runday != null and runday != ''">
runday = #{runday},
</if>
<if test="runtime != null and runtime != ''">
runtime = #{runtime},
</if>
<if test="controlKey != null and controlKey != ''">
control_key = #{controlKey},
@ -110,6 +132,9 @@
<if test="cronText != null and cronText != ''">
cron_text = #{cronText},
</if>
<if test="jobId != null and jobId != ''">
job_id = #{jobId},
</if>
<if test="timerStatus != null and timerStatus != ''">
timer_status = #{timerStatus},
</if>
@ -129,6 +154,11 @@
where timer_id = #{timerId}
</update>
<!-- 修改任务状态-->
<update id="updateStatus">
update psdc_timer set timer_status = #{status} where timer_id = #{timerId}
</update>
<!--通过主键删除-->
<delete id="deleteById">
delete from psdc_timer where timer_id = #{timerId}

@ -6,7 +6,8 @@ public enum ControlKeyEnum {
TEMPERATURE("temp","设定温度"),
IN_TEMPERATURE("intemp","设定进水温度"),
OUT_TEMPERATURE("outtemp","设定出水温度");
OUT_TEMPERATURE("outtemp","设定出水温度"),
START_AND_STOP("startandstop","设备启停");
/**
* 设备指令
@ -32,6 +33,7 @@ public enum ControlKeyEnum {
case "temp":return TEMPERATURE.getControlContext();
case "intemp":return IN_TEMPERATURE.getControlContext();
case "outtemp":return OUT_TEMPERATURE.getControlContext();
case "startandstop":return START_AND_STOP.getControlContext();
default:return null;
}
}

@ -1,18 +1,5 @@
package com.psdc.quartz.controller;
package com.psdc.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.quartz.SchedulerException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.psdc.annotation.Log;
import com.psdc.constant.Constants;
import com.psdc.core.controller.BaseController;
@ -20,12 +7,19 @@ import com.psdc.core.domain.AjaxResult;
import com.psdc.core.page.TableDataInfo;
import com.psdc.enums.BusinessType;
import com.psdc.exception.job.TaskException;
import com.psdc.domain.SysJob;
import com.psdc.service.ISysJobService;
import com.psdc.util.CronUtils;
import com.psdc.util.ScheduleUtils;
import com.psdc.utils.StringUtils;
import com.psdc.utils.poi.ExcelUtil;
import com.psdc.quartz.domain.SysJob;
import com.psdc.quartz.service.ISysJobService;
import com.psdc.quartz.util.CronUtils;
import com.psdc.quartz.util.ScheduleUtils;
import org.quartz.SchedulerException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* 调度任务信息操作处理

@ -1,23 +1,19 @@
package com.psdc.quartz.controller;
package com.psdc.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.psdc.annotation.Log;
import com.psdc.core.controller.BaseController;
import com.psdc.core.domain.AjaxResult;
import com.psdc.core.page.TableDataInfo;
import com.psdc.domain.SysJobLog;
import com.psdc.enums.BusinessType;
import com.psdc.service.ISysJobLogService;
import com.psdc.utils.poi.ExcelUtil;
import com.psdc.quartz.domain.SysJobLog;
import com.psdc.quartz.service.ISysJobLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* 调度日志操作处理

@ -1,22 +1,22 @@
package com.psdc.quartz.domain;
package com.psdc.domain;
import java.util.Date;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.psdc.annotation.Excel;
import com.psdc.annotation.Excel.ColumnType;
import com.psdc.constant.ScheduleConstants;
import com.psdc.core.domain.BaseEntity;
import com.psdc.util.CronUtils;
import com.psdc.utils.StringUtils;
import com.psdc.quartz.util.CronUtils;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.util.Date;
/**
* 定时任务调度表 sys_job
*
* @author ruoyi
*
*/
public class SysJob extends BaseEntity
{

@ -1,15 +1,15 @@
package com.psdc.quartz.domain;
package com.psdc.domain;
import java.util.Date;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.psdc.annotation.Excel;
import com.psdc.core.domain.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import java.util.Date;
/**
* 定时任务调度日志表 sys_job_log
*
* @author ruoyi
*
*/
public class SysJobLog extends BaseEntity
{

@ -1,13 +1,16 @@
package com.psdc.quartz.mapper;
package com.psdc.mapper;
import com.psdc.domain.SysJobLog;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
import com.psdc.quartz.domain.SysJobLog;
/**
* 调度任务日志信息 数据层
*
* @author ruoyi
*
*/
@Mapper
public interface SysJobLogMapper
{
/**

@ -1,13 +1,15 @@
package com.psdc.quartz.mapper;
package com.psdc.mapper;
import com.psdc.domain.SysJob;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
import com.psdc.quartz.domain.SysJob;
/**
* 调度任务信息 数据层
*
* @author ruoyi
*
*/
@Mapper
public interface SysJobMapper
{
/**
@ -64,4 +66,11 @@ public interface SysJobMapper
* @return 结果
*/
public int insertJob(SysJob job);
/**
* 根据名称查询调度信息
* @param jobName
* @return
*/
public SysJob selectJobByName(String jobName);
}

@ -1,12 +1,12 @@
package com.psdc.quartz.service;
package com.psdc.service;
import com.psdc.domain.SysJobLog;
import java.util.List;
import com.psdc.quartz.domain.SysJobLog;
/**
* 定时任务调度日志信息信息 服务层
*
* @author ruoyi
*
*/
public interface ISysJobLogService
{

@ -1,9 +1,10 @@
package com.psdc.quartz.service;
package com.psdc.service;
import java.util.List;
import org.quartz.SchedulerException;
import com.psdc.exception.job.TaskException;
import com.psdc.quartz.domain.SysJob;
import com.psdc.domain.SysJob;
import org.quartz.SchedulerException;
import java.util.List;
/**
* 定时任务调度信息信息 服务层
@ -28,6 +29,14 @@ public interface ISysJobService
*/
public SysJob selectJobById(Long jobId);
/**
* 通过调度任务name查询调度信息
*
* @param jobName 调度任务ID
* @return 调度任务对象信息
*/
public SysJob selectJobByName(String jobName);
/**
* 暂停任务
*

@ -1,16 +1,16 @@
package com.psdc.quartz.service.impl;
package com.psdc.service.impl;
import java.util.List;
import com.psdc.domain.SysJobLog;
import com.psdc.mapper.SysJobLogMapper;
import com.psdc.service.ISysJobLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.psdc.quartz.domain.SysJobLog;
import com.psdc.quartz.mapper.SysJobLogMapper;
import com.psdc.quartz.service.ISysJobLogService;
import java.util.List;
/**
* 定时任务调度日志信息 服务层
*
* @author ruoyi
*
*/
@Service
public class SysJobLogServiceImpl implements ISysJobLogService

@ -1,7 +1,12 @@
package com.psdc.quartz.service.impl;
package com.psdc.service.impl;
import java.util.List;
import javax.annotation.PostConstruct;
import com.psdc.constant.ScheduleConstants;
import com.psdc.exception.job.TaskException;
import com.psdc.domain.SysJob;
import com.psdc.mapper.SysJobMapper;
import com.psdc.service.ISysJobService;
import com.psdc.util.CronUtils;
import com.psdc.util.ScheduleUtils;
import org.quartz.JobDataMap;
import org.quartz.JobKey;
import org.quartz.Scheduler;
@ -9,18 +14,13 @@ import org.quartz.SchedulerException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.psdc.constant.ScheduleConstants;
import com.psdc.exception.job.TaskException;
import com.psdc.quartz.domain.SysJob;
import com.psdc.quartz.mapper.SysJobMapper;
import com.psdc.quartz.service.ISysJobService;
import com.psdc.quartz.util.CronUtils;
import com.psdc.quartz.util.ScheduleUtils;
import javax.annotation.PostConstruct;
import java.util.List;
/**
* 定时任务调度信息 服务层
*
* @author ruoyi
*
*/
@Service
public class SysJobServiceImpl implements ISysJobService
@ -69,6 +69,19 @@ public class SysJobServiceImpl implements ISysJobService
return jobMapper.selectJobById(jobId);
}
/**
* 通过调度任务ID查询调度信息
*
* @param jobName 调度任务ID
* @return 调度任务对象信息
*/
@Override
public SysJob selectJobByName(String jobName)
{
return jobMapper.selectJobByName(jobName);
}
/**
* 暂停任务
*

@ -1,7 +1,7 @@
package com.psdc.quartz.task;
package com.psdc.task;
import org.springframework.stereotype.Component;
import com.psdc.utils.StringUtils;
import org.springframework.stereotype.Component;
/**
* 定时任务调度测试

@ -1,20 +1,21 @@
package com.psdc.quartz.util;
package com.psdc.util;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.psdc.constant.Constants;
import com.psdc.constant.ScheduleConstants;
import com.psdc.domain.SysJob;
import com.psdc.domain.SysJobLog;
import com.psdc.service.ISysJobLogService;
import com.psdc.utils.ExceptionUtil;
import com.psdc.utils.StringUtils;
import com.psdc.utils.bean.BeanUtils;
import com.psdc.utils.spring.SpringUtils;
import com.psdc.quartz.domain.SysJob;
import com.psdc.quartz.domain.SysJobLog;
import com.psdc.quartz.service.ISysJobLogService;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Date;
/**
* 抽象quartz调用

@ -1,8 +1,9 @@
package com.psdc.quartz.util;
package com.psdc.util;
import org.quartz.CronExpression;
import java.text.ParseException;
import java.util.Date;
import org.quartz.CronExpression;
/**
* cron表达式工具类

@ -1,12 +1,13 @@
package com.psdc.quartz.util;
package com.psdc.util;
import com.psdc.domain.SysJob;
import com.psdc.utils.StringUtils;
import com.psdc.utils.spring.SpringUtils;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.LinkedList;
import java.util.List;
import com.psdc.utils.StringUtils;
import com.psdc.utils.spring.SpringUtils;
import com.psdc.quartz.domain.SysJob;
/**
* 任务执行工具

@ -1,8 +1,8 @@
package com.psdc.quartz.util;
package com.psdc.util;
import com.psdc.domain.SysJob;
import org.quartz.DisallowConcurrentExecution;
import org.quartz.JobExecutionContext;
import com.psdc.quartz.domain.SysJob;
/**
* 定时任务处理禁止并发执行

@ -1,7 +1,7 @@
package com.psdc.quartz.util;
package com.psdc.util;
import com.psdc.domain.SysJob;
import org.quartz.JobExecutionContext;
import com.psdc.quartz.domain.SysJob;
/**
* 定时任务处理允许并发执行

@ -1,22 +1,13 @@
package com.psdc.quartz.util;
package com.psdc.util;
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerKey;
import com.psdc.constant.Constants;
import com.psdc.constant.ScheduleConstants;
import com.psdc.exception.job.TaskException;
import com.psdc.exception.job.TaskException.Code;
import com.psdc.domain.SysJob;
import com.psdc.utils.StringUtils;
import com.psdc.utils.spring.SpringUtils;
import com.psdc.quartz.domain.SysJob;
import org.quartz.*;
/**
* 定时任务工具类

@ -2,7 +2,7 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.psdc.quartz.mapper.SysJobLogMapper">
<mapper namespace="com.psdc.mapper.SysJobLogMapper">
<resultMap type="SysJobLog" id="SysJobLogResult">
<id property="jobLogId" column="job_log_id" />

@ -2,7 +2,7 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.psdc.quartz.mapper.SysJobMapper">
<mapper namespace="com.psdc.mapper.SysJobMapper">
<resultMap type="SysJob" id="SysJobResult">
<id property="jobId" column="job_id" />
@ -51,6 +51,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include refid="selectJobVo"/>
where job_id = #{jobId}
</select>
<select id="selectJobByName" parameterType="string" resultMap="SysJobResult">
<include refid="selectJobVo"/>
where job_name = #{jobName}
</select>
<delete id="deleteJobById" parameterType="Long">
delete from quartz_job where job_id = #{jobId}

@ -1,14 +1,102 @@
package com.psdc.controller.control;
import com.alibaba.fastjson2.JSONObject;
import com.psdc.core.controller.BaseController;
import com.psdc.core.domain.AjaxResult;
import com.psdc.core.page.TableDataInfo;
import com.psdc.entity.PsdcControlLog;
import com.psdc.entity.request.PsdcTimerRequest;
import com.psdc.entity.request.PsdcTimerRunTimeRequest;
import com.psdc.entity.vo.PsdcTimerVo;
import com.psdc.service.IPsdcTimerService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.aspectj.weaver.loadtime.Aj;
import org.quartz.SchedulerException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@Slf4j
@RequestMapping("/control/timer")
public class TimerControl {
public class TimerControl extends BaseController {
@Autowired
private IPsdcTimerService psdcTimerService;
/**
* 获取定时任务列表
*/
@PreAuthorize("@ss.hasPermi('control:timer:list')")
@PostMapping("/list")
public TableDataInfo timerList(@RequestBody JSONObject jsonObject) {
PsdcTimerRequest psdcTimerRequest = myPage(jsonObject, PsdcTimerRequest.class);
List<PsdcTimerVo> query = psdcTimerService.query(psdcTimerRequest);
return getDataTable(query);
}
/**
* 获取定时任务详情
*/
@PreAuthorize("@ss.hasPermi('control:timer:info')")
@GetMapping("/queryTimer/{timerId}")
public AjaxResult queryTimer(@PathVariable(value = "timerId") Integer timerId) {
return AjaxResult.success(psdcTimerService.queryById(timerId));
}
/**
* 新增定时任务
*/
@PreAuthorize("@ss.hasPermi('control:timer:add')")
@PostMapping("/addTimer")
public AjaxResult addTimer(@RequestBody PsdcTimerRunTimeRequest psdcTimerRunTimeRequest) {
Integer i = psdcTimerService.addTimer(psdcTimerRunTimeRequest);
if (i == 1){
return AjaxResult.success("创建任务成功");
} else {
return AjaxResult.error("创建任务失败,请联系管理员");
}
}
/**
* 修改定时任务状态
*/
@PreAuthorize("@ss.hasPermi('control:timer:update')")
@GetMapping("/updateStatus/{timerId}/{status}")
public AjaxResult updateStatus(@PathVariable(value = "timerId")Integer timerId,@PathVariable(value = "status") Integer status) throws SchedulerException {
int i = psdcTimerService.updateStatus(timerId,status);
if (i == 1){
return AjaxResult.success("修改任务状态成功");
} else {
return AjaxResult.error("修改任务状态失败,请联系管理员");
}
}
/**
* 更新定时任务
*/
@PreAuthorize("@ss.hasPermi('control:timer:update')")
@PostMapping("/update")
public TableDataInfo updateTimer() {
return null;
}
/**
* 删除定时任务
*/
@PreAuthorize("@ss.hasPermi('control:timer:delete')")
@GetMapping("/deleteTimer/{timerId}")
public AjaxResult deleteTimer(@PathVariable(value = "timerId") Integer timerId) throws SchedulerException {
int i = psdcTimerService.delete(timerId);
if (i == 1){
return AjaxResult.success("删除定时任务成功");
} else {
return AjaxResult.error("删除定时任务失败,请联系管理员");
}
}
}

Loading…
Cancel
Save