定时任务

master
lzq 2025-12-18 17:57:14 +08:00
parent 71f2bb4d86
commit 583548c3e6
11 changed files with 342 additions and 2 deletions

View File

@ -1,6 +1,7 @@
package com.njzscloud.common.mp.support;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.util.PageUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.AccessLevel;
import lombok.Getter;
@ -49,7 +50,7 @@ public final class PageResult<T> {
if (data == null) data = Collections.emptyList();
int total = data.size();
int pages = Math.toIntExact(total % size == 0 ? (total / size) : (total / size + 1));
PageUtil.setFirstPageNo(1);
return new PageResult<>(ListUtil.page(current, size, data), total, pages, current, size);
}

View File

@ -7,6 +7,8 @@ import com.njzscloud.common.core.thread.ThreadPool;
import com.njzscloud.common.sichen.contant.ScheduleType;
import com.njzscloud.common.sichen.contant.TaskLogLevel;
import com.njzscloud.common.sichen.controller.TaskController;
import com.njzscloud.common.sichen.controller.TaskExecuteLogController;
import com.njzscloud.common.sichen.controller.TaskScheduleRecodeController;
import com.njzscloud.common.sichen.executor.SichenExecutor;
import com.njzscloud.common.sichen.scheduler.SichenScheduler;
import com.njzscloud.common.sichen.service.*;
@ -60,6 +62,16 @@ public class TaskAutoConfiguration {
return new TaskController(combineStoreService);
}
@Bean
public TaskScheduleRecodeController taskScheduleRecodeController(TaskScheduleRecodeService taskScheduleRecodeService) {
return new TaskScheduleRecodeController(taskScheduleRecodeService);
}
@Bean
public TaskExecuteLogController taskExecuteLogController(TaskExecuteLogService taskExecuteLogService) {
return new TaskExecuteLogController(taskExecuteLogService);
}
@Bean
public TaskExecuteLogService taskExecuteLogService() {
return new TaskExecuteLogService();

View File

@ -51,6 +51,18 @@ public class TaskController {
return R.success();
}
/**
*
*/
@GetMapping("/disable")
public R<?> disable(
@RequestParam("id") Long id,
@RequestParam("disable") Boolean disable
) {
taskStore.dbTaskService.disable(id, disable);
return R.success();
}
/**
*
*/

View File

@ -0,0 +1,67 @@
package com.njzscloud.common.sichen.controller;
import com.njzscloud.common.core.utils.R;
import com.njzscloud.common.mp.support.PageParam;
import com.njzscloud.common.mp.support.PageResult;
import com.njzscloud.common.sichen.pojo.entity.TaskExecuteLogEntity;
import com.njzscloud.common.sichen.pojo.param.SearchTaskExecuteLogParam;
import com.njzscloud.common.sichen.service.TaskExecuteLogService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
*
*/
@Slf4j
@RestController
@RequestMapping("/task_execute_log")
@RequiredArgsConstructor
public class TaskExecuteLogController {
private final TaskExecuteLogService taskExecuteLogService;
/**
*
*/
@PostMapping("/add")
public R<?> add(@RequestBody TaskExecuteLogEntity taskExecuteLogEntity) {
taskExecuteLogService.add(taskExecuteLogEntity);
return R.success();
}
/**
*
*/
@PostMapping("/modify")
public R<?> modify(@RequestBody TaskExecuteLogEntity taskExecuteLogEntity) {
taskExecuteLogService.modify(taskExecuteLogEntity);
return R.success();
}
/**
*
*/
@PostMapping("/del")
public R<?> del(@RequestBody List<Long> ids) {
taskExecuteLogService.del(ids);
return R.success();
}
/**
*
*/
@GetMapping("/detail")
public R<TaskExecuteLogEntity> detail(@RequestParam("id") Long id) {
return R.success(taskExecuteLogService.detail(id));
}
/**
*
*/
@GetMapping("/paging")
public R<PageResult<TaskExecuteLogEntity>> paging(PageParam pageParam, SearchTaskExecuteLogParam searchTaskExecuteLogParam) {
return R.success(taskExecuteLogService.paging(pageParam, searchTaskExecuteLogParam));
}
}

View File

@ -0,0 +1,67 @@
package com.njzscloud.common.sichen.controller;
import com.njzscloud.common.core.utils.R;
import com.njzscloud.common.mp.support.PageParam;
import com.njzscloud.common.mp.support.PageResult;
import com.njzscloud.common.sichen.pojo.entity.TaskScheduleRecodeEntity;
import com.njzscloud.common.sichen.pojo.param.SearchTaskScheduleRecodeParam;
import com.njzscloud.common.sichen.service.TaskScheduleRecodeService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
*
*/
@Slf4j
@RestController
@RequestMapping("/task_schedule_recode")
@RequiredArgsConstructor
public class TaskScheduleRecodeController {
private final TaskScheduleRecodeService taskScheduleRecodeService;
/**
*
*/
@PostMapping("/add")
public R<?> add(@RequestBody TaskScheduleRecodeEntity taskScheduleRecodeEntity) {
taskScheduleRecodeService.add(taskScheduleRecodeEntity);
return R.success();
}
/**
*
*/
@PostMapping("/modify")
public R<?> modify(@RequestBody TaskScheduleRecodeEntity taskScheduleRecodeEntity) {
taskScheduleRecodeService.modify(taskScheduleRecodeEntity);
return R.success();
}
/**
*
*/
@PostMapping("/del")
public R<?> del(@RequestBody List<Long> ids) {
taskScheduleRecodeService.del(ids);
return R.success();
}
/**
*
*/
@GetMapping("/detail")
public R<TaskScheduleRecodeEntity> detail(@RequestParam("id") Long id) {
return R.success(taskScheduleRecodeService.detail(id));
}
/**
*
*/
@GetMapping("/paging")
public R<PageResult<TaskScheduleRecodeEntity>> paging(PageParam pageParam, SearchTaskScheduleRecodeParam searchTaskScheduleRecodeParam) {
return R.success(taskScheduleRecodeService.paging(pageParam, searchTaskScheduleRecodeParam));
}
}

View File

@ -0,0 +1,32 @@
package com.njzscloud.common.sichen.pojo.param;
import com.njzscloud.common.sichen.contant.TaskLogLevel;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.time.LocalDateTime;
/**
*
*/
@Getter
@Setter
@ToString
@Accessors(chain = true)
public class SearchTaskExecuteLogParam {
/**
* Id
*/
private Long scheduleId;
/**
*
*/
private TaskLogLevel logLevel;
/**
*
*/
private LocalDateTime startLogTime;
private LocalDateTime endLogTime;
}

View File

@ -0,0 +1,43 @@
package com.njzscloud.common.sichen.pojo.param;
import com.njzscloud.common.sichen.contant.TaskStatus;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.time.LocalDateTime;
/**
*
*/
@Getter
@Setter
@ToString
@Accessors(chain = true)
public class SearchTaskScheduleRecodeParam {
/**
* Id
*/
private Long taskId;
/**
*
*/
private LocalDateTime startTime;
/**
*
*/
private LocalDateTime endTime;
/**
*
*/
private TaskStatus taskStatus;
/**
*
*/
private Boolean manually;
private Boolean builtin;
}

View File

@ -147,10 +147,18 @@ public class DbTaskService extends ServiceImpl<TaskMapper, TaskEntity> implement
public boolean trigger(Long id) {
TaskEntity taskEntity = this.getById(id);
if (taskEntity != null) {
Assert.isFalse(taskEntity.getDisabled(), () -> Exceptions.exception("请先启用任务"));
TaskUtil.execute(BeanUtil.copyProperties(taskEntity, TaskInfo.class), true);
return true;
} else {
return false;
}
}
public void disable(Long id, Boolean disable) {
this.updateById(new TaskEntity()
.setId(id)
.setDisabled(disable)
);
}
}

View File

@ -1,9 +1,59 @@
package com.njzscloud.common.sichen.service;
import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njzscloud.common.core.ex.Exceptions;
import com.njzscloud.common.mp.support.PageParam;
import com.njzscloud.common.mp.support.PageResult;
import com.njzscloud.common.sichen.mapper.TaskExecuteLogMapper;
import com.njzscloud.common.sichen.pojo.entity.TaskExecuteLogEntity;
import com.njzscloud.common.sichen.pojo.param.SearchTaskExecuteLogParam;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
public class TaskExecuteLogService extends ServiceImpl<TaskExecuteLogMapper, TaskExecuteLogEntity> implements IService<TaskExecuteLogEntity> {
/**
*
*/
public void add(TaskExecuteLogEntity taskExecuteLogEntity) {
this.save(taskExecuteLogEntity);
}
/**
*
*/
public void modify(TaskExecuteLogEntity taskExecuteLogEntity) {
this.updateById(taskExecuteLogEntity);
}
/**
*
*/
@Transactional(rollbackFor = Exception.class)
public void del(List<Long> ids) {
this.removeBatchByIds(ids);
}
/**
*
*/
public TaskExecuteLogEntity detail(Long id) {
return this.getById(id);
}
/**
*
*/
public PageResult<TaskExecuteLogEntity> paging(PageParam pageParam, SearchTaskExecuteLogParam searchTaskExecuteLogParam) {
Long scheduleId = searchTaskExecuteLogParam.getScheduleId();
Assert.notNull(scheduleId, () -> Exceptions.clierr("未指调度记录"));
return PageResult.of(this.page(pageParam.toPage(), Wrappers.<TaskExecuteLogEntity>lambdaQuery()
.eq(TaskExecuteLogEntity::getScheduleId, scheduleId)
));
}
}

View File

@ -2,23 +2,30 @@ package com.njzscloud.common.sichen.service;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njzscloud.common.core.ex.Exceptions;
import com.njzscloud.common.core.tuple.Tuple2;
import com.njzscloud.common.core.utils.CallerUtil;
import com.njzscloud.common.mp.support.PageParam;
import com.njzscloud.common.mp.support.PageResult;
import com.njzscloud.common.sichen.config.TaskProperties;
import com.njzscloud.common.sichen.contant.TaskLogLevel;
import com.njzscloud.common.sichen.mapper.TaskScheduleRecodeMapper;
import com.njzscloud.common.sichen.pojo.entity.TaskExecuteLogEntity;
import com.njzscloud.common.sichen.pojo.entity.TaskScheduleRecodeEntity;
import com.njzscloud.common.sichen.pojo.param.SearchTaskScheduleRecodeParam;
import com.njzscloud.common.sichen.support.Task;
import com.njzscloud.common.sichen.support.TaskHandle;
import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.List;
import java.util.concurrent.LinkedBlockingQueue;
@Slf4j
@ -28,6 +35,47 @@ public class TaskScheduleRecodeService extends ServiceImpl<TaskScheduleRecodeMap
private final TaskProperties taskProperties;
private final Thread recodeLogThread;
/**
*
*/
public void add(TaskScheduleRecodeEntity taskScheduleRecodeEntity) {
this.save(taskScheduleRecodeEntity);
}
/**
*
*/
public void modify(TaskScheduleRecodeEntity taskScheduleRecodeEntity) {
this.updateById(taskScheduleRecodeEntity);
}
/**
*
*/
@Transactional(rollbackFor = Exception.class)
public void del(List<Long> ids) {
this.removeBatchByIds(ids);
taskExecuteLogService.remove(Wrappers.<TaskExecuteLogEntity>lambdaQuery().in(TaskExecuteLogEntity::getScheduleId, ids));
}
/**
*
*/
public TaskScheduleRecodeEntity detail(Long id) {
return this.getById(id);
}
/**
*
*/
public PageResult<TaskScheduleRecodeEntity> paging(PageParam pageParam, SearchTaskScheduleRecodeParam searchTaskScheduleRecodeParam) {
Long taskId = searchTaskScheduleRecodeParam.getTaskId();
Assert.notNull(taskId, () -> Exceptions.clierr("未指定任务"));
return PageResult.of(this.page(pageParam.toPage(), Wrappers.<TaskScheduleRecodeEntity>lambdaQuery()
.eq(TaskScheduleRecodeEntity::getTaskId, taskId)
));
}
public TaskScheduleRecodeService(TaskProperties taskProperties, TaskExecuteLogService taskExecuteLogService) {
this.taskProperties = taskProperties;
this.taskExecuteLogService = taskExecuteLogService;

View File

@ -17,7 +17,7 @@ public class Example {
TaskHandle.debug("A-------当前时间:{} 线程名称:{} 是否虚拟线程:{}", System.currentTimeMillis() / 1000, name, virtual);
TaskHandle.info("A-------当前时间:{} 线程名称:{} 是否虚拟线程:{}", System.currentTimeMillis() / 1000, name, virtual);
TaskHandle.warn("A-------当前时间:{} 线程名称:{} 是否虚拟线程:{}", System.currentTimeMillis() / 1000, name, virtual);
TaskHandle.error("A-------当前时间:{} 线程名称:{} 是否虚拟线程:{}", System.currentTimeMillis() / 1000, name, virtual);
TaskHandle.error(new RuntimeException("错误错误错误错误错误错误错误"), "A-------当前时间:{} 线程名称:{} 是否虚拟线程:{}", System.currentTimeMillis() / 1000, name, virtual);
try {
int sleepTime = RandomUtil.randomInt(1000, 5000);
Thread.sleep(sleepTime);