4/28 ljc 新增trigger模块初始代码,完善postprocess模块impl

This commit is contained in:
Hope Li 2025-04-28 16:36:32 +08:00
parent 57dd302228
commit 848c41b7a2
18 changed files with 881 additions and 9 deletions

View File

@ -0,0 +1,18 @@
package cd.casic.ci.commons.join.annototion;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
*@ClassName FindAll
*@Author hopeli
*@Date 2025/4/28 15:15
*@Version 1.0
*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface FindAll {
}

View File

@ -0,0 +1,18 @@
package cd.casic.ci.commons.join.annototion;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* @ClassName FindList
* @Author hopeli
* @Date 2025/4/28 15:18
* @Version 1.0
*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface FindList {
}

View File

@ -0,0 +1,18 @@
package cd.casic.ci.commons.join.annototion;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
*@ClassName FindOne
*@Author hopeli
*@Date 2025/4/28 15:19
*@Version 1.0
*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface FindOne {
}

View File

@ -0,0 +1,18 @@
package cd.casic.ci.commons.join.annototion;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* @ClassName JoinProvider
* @Author hopeli
* @Date 2025/4/28 15:12
* @Version 1.0
*/
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface JoinProvider {
Class model() default Object.class;
}

View File

@ -1,8 +1,8 @@
package cd.casic.module.process.dispatch.trigger; package cd.casic.module.process.dispatch.trigger;
import cd.casic.ci.commons.bean.dispatch.trigger.Trigger; import cd.casic.module.process.support.trigger.entity.Trigger;
import cd.casic.ci.commons.bean.dispatch.trigger.TriggerQuery; import cd.casic.module.process.support.trigger.entity.TriggerQuery;
import java.util.List; import java.util.List;

View File

@ -1,7 +1,7 @@
package cd.casic.module.process.dispatch.trigger; package cd.casic.module.process.dispatch.trigger;
import cd.casic.ci.commons.bean.dispatch.trigger.TriggerTime; import cd.casic.module.process.support.trigger.entity.TriggerTime;
import java.util.List; import java.util.List;

View File

@ -17,7 +17,7 @@ import java.util.List;
* @Author hopeli * @Author hopeli
* @Date 2025/4/28 10:43 * @Date 2025/4/28 10:43
* @Version 1.0 * @Version 1.0
**/ */
public class PostprocessController { public class PostprocessController {
@Resource @Resource

View File

@ -1,9 +1,12 @@
package cd.casic.module.process.support.postprocess.dao; package cd.casic.module.process.support.postprocess.dao;
import cd.casic.ci.commons.bean.engine.postprocess.Postprocess;
import cd.casic.framework.mybatis.core.mapper.BaseMapperX; import cd.casic.framework.mybatis.core.mapper.BaseMapperX;
import cd.casic.module.process.support.postprocess.entity.PostprocessDo; import cd.casic.module.process.support.postprocess.entity.PostprocessDo;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/** /**
* @author by mianbin * @author by mianbin
* @Classname PostprocessDao * @Classname PostprocessDao
@ -12,4 +15,19 @@ import org.apache.ibatis.annotations.Mapper;
*/ */
@Mapper @Mapper
public interface PostprocessDao extends BaseMapperX<PostprocessDo> { public interface PostprocessDao extends BaseMapperX<PostprocessDo> {
List<PostprocessDo> findTaskPost(String taskId);
List<PostprocessDo> findPipelinePost(String pipelineId);
String createPost(PostprocessDo postprocessEntity);
void deletePost(String postprocessId);
PostprocessDo findOnePost(String postprocessId);
List<Postprocess> findAllPost();
List<Postprocess> findAllPostList(List<String> idList);
void updatePost(PostprocessDo map);
} }

View File

@ -1,9 +1,12 @@
package cd.casic.module.process.support.postprocess.dao; package cd.casic.module.process.support.postprocess.dao;
import cd.casic.ci.commons.bean.engine.postprocess.PostprocessInstance;
import cd.casic.framework.mybatis.core.mapper.BaseMapperX; import cd.casic.framework.mybatis.core.mapper.BaseMapperX;
import cd.casic.module.process.support.postprocess.entity.PostprocessInstanceDo; import cd.casic.module.process.support.postprocess.entity.PostprocessInstanceDo;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/** /**
* @author by mianbin * @author by mianbin
* @Classname PostprocessInstanceDao * @Classname PostprocessInstanceDao
@ -12,4 +15,15 @@ import org.apache.ibatis.annotations.Mapper;
*/ */
@Mapper @Mapper
public interface PostprocessInstanceDao extends BaseMapperX<PostprocessInstanceDo> { public interface PostprocessInstanceDao extends BaseMapperX<PostprocessInstanceDo> {
String createPostInstance(PostprocessInstance instance);
PostprocessInstance findOnePostInstance(String postInstanceId);
void updatePostInstance(PostprocessInstance instance);
List<PostprocessInstanceDo> findPipelinePostInstance(String instanceId);
List<PostprocessInstance> findAllPostInstance();
List<PostprocessInstanceDo> findTaskPostInstance(String taskInstanceId);
} }

View File

@ -0,0 +1,104 @@
package cd.casic.module.process.support.postprocess.service.impl;
import cd.casic.ci.commons.bean.engine.job.Tasks;
import cd.casic.ci.commons.bean.engine.postprocess.Postprocess;
import cd.casic.ci.commons.bean.engine.postprocess.PostprocessInstance;
import cd.casic.module.process.engine.task.TasksExecService;
import cd.casic.module.process.engine.task.TasksService;
import cd.casic.module.process.support.postprocess.service.PostprocessExecService;
import cd.casic.module.process.support.postprocess.service.PostprocessInstanceService;
import cd.casic.module.process.support.postprocess.service.PostprocessService;
import cd.casic.module.process.support.util.PipelineUtilService;
import cd.casic.module.process.support.util.util.PipelineFinal;
import jakarta.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* @ClassName PostprocessExecServiceImpl
* @Author hopeli
* @Date 2025/4/28 15:39
* @Version 1.0
*/
public class PostprocessExecServiceImpl implements PostprocessExecService {
@Resource
PostprocessService postprocessService;
@Resource
TasksExecService tasksExecService;
@Resource
PostprocessInstanceService postInstanceService;
@Resource
PipelineUtilService utilService;
@Resource
TasksService tasksService;
private static final Logger logger = LoggerFactory.getLogger(PostprocessExecServiceImpl.class);
//后置任务id与后置任务实例id之间的关系
public static Map<String , String> postIdOrPostInstanceId = new HashMap<>();
//后置实例id与后置任务实例之间的关系
public static Map<String , PostprocessInstance> postInstanceIdOrPostInstance = new HashMap<>();
private final static Map<String , List<String>> pipelineIdOrPostInstanceId = new HashMap<>();
@Override
public List<Postprocess> createPipelinePostInstance(String pipelineId, String instanceId){
String fileAddress = utilService.findPipelineDefaultAddress(pipelineId,2) + instanceId;
List<Postprocess> postprocessList = postprocessService.findAllPipelinePostTask(pipelineId);
if (postprocessList.isEmpty()){
return Collections.emptyList();
}
for (Postprocess postprocess : postprocessList) {
PostprocessInstance postInstance = new PostprocessInstance();
postInstance.setInstanceId(instanceId);
postInstance.setPostState(PipelineFinal.RUN_HALT);
String postInstanceId = postInstanceService.createPostInstance(postInstance);
Tasks task = tasksService.findOnePostTaskOrTask(postprocess.getPostId());
task.setTaskSort(postprocess.getTaskSort());
fileAddress = fileAddress + "/" + postInstanceId;
String taskInstanceId = tasksExecService.createTaskExecInstance(task, postInstanceId, 3, fileAddress);
task.setInstanceId(taskInstanceId);
postInstance.setTaskInstanceId(taskInstanceId);
task.setTaskSort(postprocess.getTaskSort());
postprocess.setTask(task);
postprocess.setValues(task);
postprocess.setInstanceId(postInstanceId);
}
return postprocessList;
}
public String findPostInstanceId(String postId){
return postIdOrPostInstanceId.get(postId);
}
public PostprocessInstance findPostInstance(String postInstanceId){
return postInstanceIdOrPostInstance.get(postInstanceId);
}
private List<String> findPipelineOrPostInstanceCache(String pipelineId){
List<String> list = pipelineIdOrPostInstanceId.get(pipelineId);
if (Objects.isNull(list)){
return new ArrayList<>();
}
return list;
}
}

View File

@ -0,0 +1,100 @@
package cd.casic.module.process.support.postprocess.service.impl;
import cd.casic.ci.commons.bean.engine.postprocess.PostprocessInstance;
import cd.casic.module.process.support.postprocess.dao.PostprocessInstanceDao;
import cd.casic.module.process.support.postprocess.entity.PostprocessInstanceDo;
import cd.casic.module.process.support.postprocess.service.PostprocessInstanceService;
import cd.casic.module.process.toolkit.beans.BeanMapper;
import jakarta.annotation.Resource;
import org.springframework.beans.BeanUtils;
import java.util.Collections;
import java.util.List;
/**
* @ClassName PostprocessInstanceServiceImpl
* @Author hopeli
* @Date 2025/4/28 15:42
* @Version 1.0
*/
public class PostprocessInstanceServiceImpl implements PostprocessInstanceService {
@Resource
private PostprocessInstanceDao postInstanceDao;
@Override
public String createPostInstance(PostprocessInstance instance) {
return postInstanceDao.createPostInstance(instance);
}
@Override
public PostprocessInstance findPostInstance(String postInstanceId) {
PostprocessInstance postprocessInstance = postInstanceDao.findOnePostInstance(postInstanceId);
return BeanMapper.map(postprocessInstance,PostprocessInstance.class);
}
/**
* 删除执行实例
* @param postInstanceId 实例id
*/
public void deletePostInstance(String postInstanceId) {
postInstanceDao.findOnePostInstance(postInstanceId);
}
@Override
public void deletePipelinePostInstance(String instanceId) {
List<PostprocessInstance> postInstanceList = findPipelinePostInstance(instanceId);
if (postInstanceList.isEmpty()){
return;
}
for (PostprocessInstance instance : postInstanceList) {
deletePostInstance(instance.getId());
}
}
@Override
public void deleteTaskPostInstance(String taskInstanceId) {
List<PostprocessInstance> postInstanceList = findPipelinePostInstance(taskInstanceId);
if (postInstanceList.isEmpty()){
return;
}
for (PostprocessInstance instance : postInstanceList) {
deletePostInstance(instance.getId());
}
}
@Override
public void updatePostInstance(PostprocessInstance instance) {
postInstanceDao.updatePostInstance(instance);
}
@Override
public List<PostprocessInstance> findTaskPostInstance(String taskInstanceId) {
List<PostprocessInstanceDo> allPostInstanceEntity = postInstanceDao.findTaskPostInstance(taskInstanceId);
if (allPostInstanceEntity.isEmpty()){
return Collections.emptyList();
}
return BeanMapper.mapList(allPostInstanceEntity,PostprocessInstance.class);
}
@Override
public List<PostprocessInstance> findPipelinePostInstance(String instanceId) {
List<PostprocessInstanceDo> allPostInstanceEntity = postInstanceDao.findPipelinePostInstance(instanceId);
if (allPostInstanceEntity.isEmpty()){
return Collections.emptyList();
}
return BeanMapper.mapList(allPostInstanceEntity,PostprocessInstance.class);
}
/**
* 查询所有后置处理实例
* @return 后置处理实例集合
*/
private List<PostprocessInstance> findAllPostInstance(){
List<PostprocessInstance> allPostInstance = postInstanceDao.findAllPostInstance();
if (allPostInstance == null || allPostInstance.isEmpty()){
return Collections.emptyList();
}
return allPostInstance;
}
}

View File

@ -0,0 +1,196 @@
package cd.casic.module.process.support.postprocess.service.impl;
import cd.casic.ci.commons.bean.engine.job.Tasks;
import cd.casic.ci.commons.bean.engine.postprocess.Postprocess;
import cd.casic.ci.commons.bean.exception.ApplicationException;
import cd.casic.module.process.engine.task.TasksCloneService;
import cd.casic.module.process.engine.task.TasksService;
import cd.casic.module.process.support.postprocess.dao.PostprocessDao;
import cd.casic.module.process.support.postprocess.entity.PostprocessDo;
import cd.casic.module.process.support.postprocess.service.PostprocessService;
import cd.casic.module.process.toolkit.beans.BeanMapper;
import jakarta.annotation.Resource;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
/**
* @ClassName PostprocessServiceImpl
* @Author hopeli
* @Date 2025/4/28 16:26
* @Version 1.0
*/
public class PostprocessServiceImpl implements PostprocessService {
@Resource
PostprocessDao postprocessDao;
@Resource
TasksService tasksService;
@Resource
TasksCloneService tasksCloneService;
@Override
public String createPostTask(Postprocess postprocess) {
if (Objects.isNull(postprocess.getTaskType())){
throw new ApplicationException("taskType不能为空");
}
String pipelineId = postprocess.getPipelineId();
if (Objects.isNull(pipelineId)){
List<PostprocessDo> taskPost = postprocessDao.findTaskPost(postprocess.getTaskId());
int size = taskPost.size();
postprocess.setTaskSort(size);
}else {
List<PostprocessDo> taskPost = postprocessDao.findPipelinePost(pipelineId);
int size = taskPost.size();
postprocess.setTaskSort(size);
}
// 设置默认名称
if (Objects.isNull(postprocess.getPostName())){
String name = tasksService.initDifferentTaskName(postprocess.getTaskType());
postprocess.setPostName(name);
}
PostprocessDo postprocessEntity = BeanMapper.map(postprocess, PostprocessDo.class);
postprocessEntity.setCreateTime(LocalDateTime.now());
String postId = postprocessDao.createPost(postprocessEntity);
Tasks tasks = new Tasks();
tasks.setTaskSort(postprocess.getTaskSort());
tasks.setTaskName(postprocess.getPostName());
tasks.setTaskType(postprocess.getTaskType());
tasks.setPostprocessId(postId);
tasks.setValues(postprocess.getValues());
tasksService.createTasksOrTask(tasks);
return postId;
}
@Override
public List<Postprocess> findAllPipelinePostTask(String pipelineId){
List<PostprocessDo> allPostEntity = postprocessDao.findPipelinePost(pipelineId);
List<Postprocess> postprocessList = BeanMapper.mapList(allPostEntity, Postprocess.class);
if (postprocessList.isEmpty()){
return Collections.emptyList();
}
List<Postprocess> list = new ArrayList<>();
for (Postprocess postprocess : postprocessList) {
String postprocessId = postprocess.getPostId();
Tasks tasks = tasksService.findOnePostTaskOrTask(postprocessId);
postprocess.setTask(tasks);
String taskType = tasks.getTaskType();
postprocess.setTaskType(taskType);
list.add(postprocess);
}
list.sort(Comparator.comparing(Postprocess::getTaskSort));
return list;
}
@Override
public void clonePostTask(String pipelineId,String clonePipelineId){
List<PostprocessDo> allPostEntity = postprocessDao.findPipelinePost(pipelineId);
List<Postprocess> postprocessList = BeanMapper.mapList(allPostEntity, Postprocess.class);
for (Postprocess postprocess : postprocessList) {
postprocess.setPipelineId(clonePipelineId);
PostprocessDo postprocessEntity = BeanMapper.map(postprocess, PostprocessDo.class);
String clonePostId = postprocessDao.createPost(postprocessEntity);
tasksCloneService.clonePostTasks(postprocess.getPostId(),clonePostId);
}
}
@Override
public List<Postprocess> findAllTaskPostTask(String taskId) {
List<PostprocessDo> allPostEntity = postprocessDao.findTaskPost(taskId);
List<Postprocess> postprocessList = BeanMapper.mapList(allPostEntity, Postprocess.class);
if (postprocessList.isEmpty()){
return Collections.emptyList();
}
List<Postprocess> list = new ArrayList<>();
for (Postprocess postprocess : postprocessList) {
String id = postprocess.getPostId();
Tasks tasks = tasksService.findOnePostTaskOrTask(id);
String taskType = tasks.getTaskType();
postprocess.setTaskType(taskType);
postprocess.setTask(tasks);
list.add(postprocess);
}
postprocessList.sort(Comparator.comparing(Postprocess::getCreateTime).reversed());
return list;
}
@Override
public void deletePostTask(String postprocessId) {
Tasks postTask = tasksService.findOnePostTask(postprocessId);
String taskId = postTask.getTaskId();
tasksService.deleteTasksOrTask(taskId);
postprocessDao.deletePost(postprocessId);
}
@Override
public List<Postprocess> findAllPost(String taskId) {
List<Postprocess> allPostprocess = findAllPost();
if (allPostprocess == null){
return Collections.emptyList();
}
List<Postprocess> list = new ArrayList<>();
for (Postprocess postprocess : allPostprocess) {
String postTaskId = postprocess.getTaskId();
if (!postTaskId.equals(taskId)){
continue;
}
list.add(postprocess);
}
list.sort(Comparator.comparing(Postprocess::getCreateTime).reversed());
return list;
}
@Override
public void updatePostTask(Postprocess postprocess) {
String postprocessId = postprocess.getPostId();
Postprocess onePost = findOnePost(postprocessId);
onePost.setPostName(postprocess.getPostName());
postprocessDao.updatePost(BeanMapper.map(onePost,PostprocessDo.class));
Tasks task = tasksService.findOnePostTask(postprocessId);
Object values = postprocess.getValues();
task.setTask(values);
task.setValues(values);
task.setTaskType(postprocess.getTaskType());
tasksService.updateTasksTask(task);
}
public void updatePost(Postprocess postprocess){
postprocessDao.updatePost(BeanMapper.map(postprocess,PostprocessDo.class));
}
@Override
public Postprocess findOnePostOrTask(String postprocessId) {
Postprocess postprocess = findOnePost(postprocessId);
String id = postprocess.getPostId();
Tasks taskOrTask = tasksService.findOnePostTaskOrTask(id);
postprocess.setTask(taskOrTask);
postprocess.setTaskType(taskOrTask.getTaskType());
return postprocess;
}
@Override
public Postprocess findOnePost(String postprocessId) {
PostprocessDo postprocessEntity = postprocessDao.findOnePost(postprocessId);
return BeanMapper.map(postprocessEntity, Postprocess.class);
}
@Override
public List<Postprocess> findAllPost() {
return BeanMapper.mapList(postprocessDao.findAllPost(), Postprocess.class);
}
@Override
public List<Postprocess> findAllPostList(List<String> idList) {
return BeanMapper.mapList(postprocessDao.findAllPostList(idList), Postprocess.class);
}
}

View File

@ -1,4 +1,4 @@
package cd.casic.ci.commons.bean.dispatch.trigger; package cd.casic.module.process.support.trigger.entity;
import cd.casic.ci.commons.bean.process.definition.Pipeline; import cd.casic.ci.commons.bean.process.definition.Pipeline;
@ -6,9 +6,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import org.mapstruct.Mappings;
/** /**
* @author by mianbin * @author by mianbin

View File

@ -1,4 +1,4 @@
package cd.casic.ci.commons.bean.dispatch.trigger; package cd.casic.module.process.support.trigger.entity;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;

View File

@ -1,4 +1,4 @@
package cd.casic.ci.commons.bean.dispatch.trigger; package cd.casic.module.process.support.trigger.entity;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;

View File

@ -0,0 +1,181 @@
package cd.casic.module.process.support.trigger.service;
import cd.casic.ci.commons.bean.exception.ApplicationException;
import cd.casic.ci.commons.bean.utils.PipelineUtil;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.temporal.TemporalAdjusters;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* @ClassName CronUtils
* @Author hopeli
* @Date 2025/4/28 14:49
* @Version 1.0
*/
public class CronUtils {
/**
* cron 表达式转换成日期
* @param cron 表达式
* @return 日期
*/
public static Map<String, String > cronWeek(String cron) {
String[] s = cron.split(" ");
String date = s[2]+":"+s[1];
LocalDate localDate = LocalDate.of(Integer.parseInt(s[6]), Integer.parseInt(s[4]), Integer.parseInt(s[3]));
int value = localDate.getDayOfWeek().getValue();
String[] weekDays = {"今天","周一", "周二", "周三", "周四", "周五", "周六","周日"};
String weekTime = weekTime(cron);
Date chengeDate = PipelineUtil.StringChengeDate(weekTime);
// 获取当前日期
LocalDate today = LocalDate.now();
LocalDate tomorrow = today.plusDays(1);
LocalDateTime tomorrowMidnight = LocalDateTime.of(tomorrow, LocalTime.MIDNIGHT);
Date dates = Date.from(tomorrowMidnight.atZone(ZoneId.systemDefault()).toInstant());
if (new Date().getTime() < chengeDate.getTime() && chengeDate.getTime()< dates.getTime()){
value = 0;
}
String time = weekDays[value];
Map<String, String > map = new HashMap<>();
map.put("cron",time);
map.put("time",date);
map.put("weekTime",weekTime);
return map;
}
/**
* 周几转换成具体日期
* @param cron 表达式
* @return 日期
*/
public static String weekTime(String cron){
String[] s = cron.split(" ");
// 0 27 16 1 4 ? 2023
return s[6] + "-" + s[4]+ "-" + s[3] +" "+ s[2] + ":"+ s[1] +":00";
}
public static String weekCron(String date,int timeDay){
int year ;
int month ;
int day ;
String hour ;
String minute ;
boolean isToday = false;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm");
Date parse ;
try {
parse = simpleDateFormat.parse(date);
} catch (ParseException e) {
throw new ApplicationException("时间格式转换错误,错误时间:" + date);
}
SimpleDateFormat dateFormat = new SimpleDateFormat("mm");
minute = dateFormat.format(parse);
SimpleDateFormat format = new SimpleDateFormat("HH");
hour = format.format(parse);
// 判断是否为今天
int nowWeek = PipelineUtil.week();
if( timeDay == nowWeek){
LocalTime currentTime = LocalTime.now();
if (currentTime.getHour() == Integer.parseInt(hour) ){
if (currentTime.getMinute() < Integer.parseInt(minute) ){
isToday = true;
}
} else if (currentTime.getHour() < Integer.parseInt(hour)){
isToday = true;
}
}
if (isToday){
// 获取今天的日期
LocalDate currentDate = LocalDate.now();
// 获取年月和日
year = currentDate.getYear();
month = currentDate.getMonthValue();
day = currentDate.getDayOfMonth();
}else {
Map<String, Integer> weekDetails ;
if (timeDay <= nowWeek ){
weekDetails = findNextWeekTime(timeDay);
}else {
weekDetails = findNowWeekTime(timeDay);
}
year = weekDetails.get("year");
month = weekDetails.get("month");
day = weekDetails.get("day");
}
return "00 " + minute + " " + hour + " " + day + " " + month + " ? " + year;
}
/**
* 获取下周的日期
* @param week 周几
* @return 下周的日期
*/
public static Map<String, Integer> findNextWeekTime(int week) {
// 获取当前日期
LocalDate currentDate = LocalDate.now();
// 找到下一个周一的日期
LocalDate nextMonday = currentDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
LocalDate nextDate = nextMonday.plusDays(week-1);
// 获取年日和星期几
int year = nextDate.getYear();
int month = nextDate.getMonthValue();
int day = nextDate.getDayOfMonth();
int dayOfWeek = nextDate.getDayOfWeek().getValue();
Map<String,Integer> weekMap = new HashMap<>();
weekMap.put("year", nextDate.getYear());
weekMap.put("month", nextDate.getMonthValue());
weekMap.put("day", nextDate.getDayOfMonth());
return weekMap;
}
/**
* 获取本周的日期
* @param week 周几
* @return 下周的日期
*/
public static Map<String, Integer> findNowWeekTime(int week) {
// 获取当前日期
LocalDate currentDate = LocalDate.now();
// 获取传入数字对应的DayOfWeek
DayOfWeek targetDayOfWeek = DayOfWeek.of(week);
// 如果传入的是星期六或星期天获取当前周的相应星期的日期
LocalDate nowDate = (week == 6 || week == 7) ?
currentDate.with(TemporalAdjusters.nextOrSame(targetDayOfWeek)) :
currentDate.with(TemporalAdjusters.next(targetDayOfWeek));
Map<String,Integer> weekMap = new HashMap<>();
weekMap.put("year", nowDate.getYear());
weekMap.put("month", nowDate.getMonthValue());
weekMap.put("day", nowDate.getDayOfMonth());
return weekMap;
}
}

View File

@ -0,0 +1,88 @@
package cd.casic.module.process.support.trigger.service;
import cd.casic.module.process.support.trigger.entity.Trigger;
import cd.casic.module.process.support.trigger.entity.TriggerQuery;
import java.util.List;
/**
* 流水线触发器服务接口
*@ClassName TriggerService
*@Author hopeli
*@Date 2025/4/28 14:57
*@Version 1.0
*/
public interface TriggerService {
/**
* 创建配置及任务
* @param trigger 配置
* @return 配置id
*/
String createTrigger(Trigger trigger);
/**
* 查询所有配置
* @param triggerQuery 流水线id
* @return 配置列表
*/
List<Object> findAllTrigger(TriggerQuery triggerQuery);
void cloneTrigger(String pipelineId,String clonePipelineId);
/**
* 删除流水线所有定时任务
* @param pipelineId 流水线id
*/
void deleteAllTrigger(String pipelineId);
/**
* 更新单个定时任务
* @param triggerId 定时任务id
*/
void updateTrigger(String triggerId);
/**
* 更新配置信息
* @param trigger 配置
*/
void updateTrigger(Trigger trigger);
/**
* 根据流水线id查询触发器配置
* @param triggerQuery 流水线id
* @return 配置
*/
List<Trigger> findTriggerList(TriggerQuery triggerQuery) ;
/**
* 删除单个定时任务
* @param triggerId 定时任务id
*/
void deleteTrigger(String triggerId) ;
/**
* 查询所有配置
* @return 配置列表
*/
List<Trigger> findAllTrigger();
/**
* 根据ID查询配置
* @param triggerId 配置ID
* @return 配置
*/
Trigger findOneTriggerById(String triggerId);
/**
* 根据ID列表查询配置
* @param idList 配置ID列表
* @return 配置列表
*/
List<Trigger> findAllTriggerConfigList(List<String> idList) ;
}

View File

@ -0,0 +1,101 @@
package cd.casic.module.process.support.trigger.service;
import cd.casic.ci.commons.join.annototion.FindList;
import cd.casic.ci.commons.join.annototion.FindOne;
import cd.casic.ci.commons.join.annototion.JoinProvider;
import cd.casic.module.process.support.trigger.entity.TriggerTime;
import java.util.List;
/**
* 流水线触发器时间服务接口
* @ClassName TriggerTimeService
* @Author hopeli
* @Date 2025/4/28 15:01
* @Version 1.0
*/
@JoinProvider(model = TriggerTime.class)
public interface TriggerTimeService {
/**
* 创建所有关联时间信息
* @param triggerTime 信息
*/
String createTriggerTime(TriggerTime triggerTime, String pipelineId);
/**
* 根据配置id查询消息类型
* @param triggerId 配置id
* @return 消息
*/
TriggerTime findTriggerTime(String triggerId);
/**
* 根据配置查询所有任务
* @param triggerId 配置id
* @return 任务集合
*/
List<TriggerTime> findAllTriggerTime(String triggerId);
/**
* 查询cron时间列表
* @param cron cron表达式
* @return 时间列表
*/
List<TriggerTime> fondCronTimeList(String cron);
/**
* 根据配置获取所有时间
* @param configId 配置id
* @return 时间集合
*/
List<Integer> findAllDataConfig(String configId);
/**
* 删除当前配置下的的所有任务
* @param triggerId 配置id
*/
void deleteAllTime(String triggerId,String pipelineId);
/**
* 周期任务更新执行时间
* @param timeId 任务id
*/
Boolean deleteCronTime(String pipelineId,String timeId);
/**
* 删除
* @param timeId timeId
*/
void deleteTime(String timeId) ;
void updateTime(TriggerTime triggerTime);
/**
* 查询单个信息
* @param timeId pipelineTimeId
* @return time信息
*/
@FindOne
TriggerTime findOneTime(String timeId) ;
/**
* 查询所有信息
* @return time信息集合
*/
List<TriggerTime> findAllTime() ;
/**
* 根据ID列表查询时间
* @param idList 时间ID列表
* @return 时间列表
*/
@FindList
List<TriggerTime> findAllTimeList(List<String> idList);
}