From 848c41b7a2051e638312584602f7bdea1a7adbc1 Mon Sep 17 00:00:00 2001 From: Hope Li <1278288511@qq.com> Date: Mon, 28 Apr 2025 16:36:32 +0800 Subject: [PATCH] =?UTF-8?q?4/28=20ljc=20=E6=96=B0=E5=A2=9Etrigger=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E5=88=9D=E5=A7=8B=E4=BB=A3=E7=A0=81=EF=BC=8C=E5=AE=8C?= =?UTF-8?q?=E5=96=84postprocess=E6=A8=A1=E5=9D=97impl?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ci/commons/join/annototion/FindAll.java | 18 ++ .../ci/commons/join/annototion/FindList.java | 18 ++ .../ci/commons/join/annototion/FindOne.java | 18 ++ .../commons/join/annototion/JoinProvider.java | 18 ++ .../dispatch/trigger/TriggerService.java | 4 +- .../dispatch/trigger/TriggerTimeService.java | 2 +- .../controller/PostprocessController.java | 2 +- .../postprocess/dao/PostprocessDao.java | 18 ++ .../dao/PostprocessInstanceDao.java | 14 ++ .../impl/PostprocessExecServiceImpl.java | 104 ++++++++++ .../impl/PostprocessInstanceServiceImpl.java | 100 +++++++++ .../service/impl/PostprocessServiceImpl.java | 196 ++++++++++++++++++ .../support/trigger/entity}/Trigger.java | 4 +- .../support/trigger/entity}/TriggerQuery.java | 2 +- .../support/trigger/entity}/TriggerTime.java | 2 +- .../support/trigger/service/CronUtils.java | 181 ++++++++++++++++ .../trigger/service/TriggerService.java | 88 ++++++++ .../trigger/service/TriggerTimeService.java | 101 +++++++++ 18 files changed, 881 insertions(+), 9 deletions(-) create mode 100644 modules/module-ci-commons/src/main/java/cd/casic/ci/commons/join/annototion/FindAll.java create mode 100644 modules/module-ci-commons/src/main/java/cd/casic/ci/commons/join/annototion/FindList.java create mode 100644 modules/module-ci-commons/src/main/java/cd/casic/ci/commons/join/annototion/FindOne.java create mode 100644 modules/module-ci-commons/src/main/java/cd/casic/ci/commons/join/annototion/JoinProvider.java create mode 100644 modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/postprocess/service/impl/PostprocessExecServiceImpl.java create mode 100644 modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/postprocess/service/impl/PostprocessInstanceServiceImpl.java create mode 100644 modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/postprocess/service/impl/PostprocessServiceImpl.java rename modules/{module-ci-commons/src/main/java/cd/casic/ci/commons/bean/dispatch/trigger => module-ci-process-biz/src/main/java/cd/casic/module/process/support/trigger/entity}/Trigger.java (89%) rename modules/{module-ci-commons/src/main/java/cd/casic/ci/commons/bean/dispatch/trigger => module-ci-process-biz/src/main/java/cd/casic/module/process/support/trigger/entity}/TriggerQuery.java (90%) rename modules/{module-ci-commons/src/main/java/cd/casic/ci/commons/bean/dispatch/trigger => module-ci-process-biz/src/main/java/cd/casic/module/process/support/trigger/entity}/TriggerTime.java (94%) create mode 100644 modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/trigger/service/CronUtils.java create mode 100644 modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/trigger/service/TriggerService.java create mode 100644 modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/trigger/service/TriggerTimeService.java diff --git a/modules/module-ci-commons/src/main/java/cd/casic/ci/commons/join/annototion/FindAll.java b/modules/module-ci-commons/src/main/java/cd/casic/ci/commons/join/annototion/FindAll.java new file mode 100644 index 0000000..c6749b2 --- /dev/null +++ b/modules/module-ci-commons/src/main/java/cd/casic/ci/commons/join/annototion/FindAll.java @@ -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 { +} diff --git a/modules/module-ci-commons/src/main/java/cd/casic/ci/commons/join/annototion/FindList.java b/modules/module-ci-commons/src/main/java/cd/casic/ci/commons/join/annototion/FindList.java new file mode 100644 index 0000000..161f33b --- /dev/null +++ b/modules/module-ci-commons/src/main/java/cd/casic/ci/commons/join/annototion/FindList.java @@ -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 { +} diff --git a/modules/module-ci-commons/src/main/java/cd/casic/ci/commons/join/annototion/FindOne.java b/modules/module-ci-commons/src/main/java/cd/casic/ci/commons/join/annototion/FindOne.java new file mode 100644 index 0000000..bacaf7f --- /dev/null +++ b/modules/module-ci-commons/src/main/java/cd/casic/ci/commons/join/annototion/FindOne.java @@ -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 { +} diff --git a/modules/module-ci-commons/src/main/java/cd/casic/ci/commons/join/annototion/JoinProvider.java b/modules/module-ci-commons/src/main/java/cd/casic/ci/commons/join/annototion/JoinProvider.java new file mode 100644 index 0000000..b0bce70 --- /dev/null +++ b/modules/module-ci-commons/src/main/java/cd/casic/ci/commons/join/annototion/JoinProvider.java @@ -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; +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/dispatch/trigger/TriggerService.java b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/dispatch/trigger/TriggerService.java index 4f3cd56..cf004a9 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/dispatch/trigger/TriggerService.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/dispatch/trigger/TriggerService.java @@ -1,8 +1,8 @@ package cd.casic.module.process.dispatch.trigger; -import cd.casic.ci.commons.bean.dispatch.trigger.Trigger; -import cd.casic.ci.commons.bean.dispatch.trigger.TriggerQuery; +import cd.casic.module.process.support.trigger.entity.Trigger; +import cd.casic.module.process.support.trigger.entity.TriggerQuery; import java.util.List; diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/dispatch/trigger/TriggerTimeService.java b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/dispatch/trigger/TriggerTimeService.java index a1b2be2..74c8e47 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/dispatch/trigger/TriggerTimeService.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/dispatch/trigger/TriggerTimeService.java @@ -1,7 +1,7 @@ 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; diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/postprocess/controller/PostprocessController.java b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/postprocess/controller/PostprocessController.java index 552b13d..b2bfe7b 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/postprocess/controller/PostprocessController.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/postprocess/controller/PostprocessController.java @@ -17,7 +17,7 @@ import java.util.List; * @Author hopeli * @Date 2025/4/28 10:43 * @Version 1.0 - **/ + */ public class PostprocessController { @Resource diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/postprocess/dao/PostprocessDao.java b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/postprocess/dao/PostprocessDao.java index 964879f..eccb85c 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/postprocess/dao/PostprocessDao.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/postprocess/dao/PostprocessDao.java @@ -1,9 +1,12 @@ 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.module.process.support.postprocess.entity.PostprocessDo; import org.apache.ibatis.annotations.Mapper; +import java.util.List; + /** * @author by mianbin * @Classname PostprocessDao @@ -12,4 +15,19 @@ import org.apache.ibatis.annotations.Mapper; */ @Mapper public interface PostprocessDao extends BaseMapperX { + List findTaskPost(String taskId); + + List findPipelinePost(String pipelineId); + + String createPost(PostprocessDo postprocessEntity); + + void deletePost(String postprocessId); + + PostprocessDo findOnePost(String postprocessId); + + List findAllPost(); + + List findAllPostList(List idList); + + void updatePost(PostprocessDo map); } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/postprocess/dao/PostprocessInstanceDao.java b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/postprocess/dao/PostprocessInstanceDao.java index dc9bcdf..d5177b4 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/postprocess/dao/PostprocessInstanceDao.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/postprocess/dao/PostprocessInstanceDao.java @@ -1,9 +1,12 @@ 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.module.process.support.postprocess.entity.PostprocessInstanceDo; import org.apache.ibatis.annotations.Mapper; +import java.util.List; + /** * @author by mianbin * @Classname PostprocessInstanceDao @@ -12,4 +15,15 @@ import org.apache.ibatis.annotations.Mapper; */ @Mapper public interface PostprocessInstanceDao extends BaseMapperX { + String createPostInstance(PostprocessInstance instance); + + PostprocessInstance findOnePostInstance(String postInstanceId); + + void updatePostInstance(PostprocessInstance instance); + + List findPipelinePostInstance(String instanceId); + + List findAllPostInstance(); + + List findTaskPostInstance(String taskInstanceId); } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/postprocess/service/impl/PostprocessExecServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/postprocess/service/impl/PostprocessExecServiceImpl.java new file mode 100644 index 0000000..6e7843a --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/postprocess/service/impl/PostprocessExecServiceImpl.java @@ -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 postIdOrPostInstanceId = new HashMap<>(); + + //后置实例id与后置任务实例之间的关系 + public static Map postInstanceIdOrPostInstance = new HashMap<>(); + + + private final static Map> pipelineIdOrPostInstanceId = new HashMap<>(); + + @Override + public List createPipelinePostInstance(String pipelineId, String instanceId){ + String fileAddress = utilService.findPipelineDefaultAddress(pipelineId,2) + instanceId; + List 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 findPipelineOrPostInstanceCache(String pipelineId){ + List list = pipelineIdOrPostInstanceId.get(pipelineId); + if (Objects.isNull(list)){ + return new ArrayList<>(); + } + return list; + } +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/postprocess/service/impl/PostprocessInstanceServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/postprocess/service/impl/PostprocessInstanceServiceImpl.java new file mode 100644 index 0000000..420c624 --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/postprocess/service/impl/PostprocessInstanceServiceImpl.java @@ -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 postInstanceList = findPipelinePostInstance(instanceId); + if (postInstanceList.isEmpty()){ + return; + } + for (PostprocessInstance instance : postInstanceList) { + deletePostInstance(instance.getId()); + } + } + + @Override + public void deleteTaskPostInstance(String taskInstanceId) { + List 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 findTaskPostInstance(String taskInstanceId) { + List allPostInstanceEntity = postInstanceDao.findTaskPostInstance(taskInstanceId); + if (allPostInstanceEntity.isEmpty()){ + return Collections.emptyList(); + } + return BeanMapper.mapList(allPostInstanceEntity,PostprocessInstance.class); + } + + @Override + public List findPipelinePostInstance(String instanceId) { + List allPostInstanceEntity = postInstanceDao.findPipelinePostInstance(instanceId); + if (allPostInstanceEntity.isEmpty()){ + return Collections.emptyList(); + } + return BeanMapper.mapList(allPostInstanceEntity,PostprocessInstance.class); + } + + /** + * 查询所有后置处理实例 + * @return 后置处理实例集合 + */ + private List findAllPostInstance(){ + List allPostInstance = postInstanceDao.findAllPostInstance(); + if (allPostInstance == null || allPostInstance.isEmpty()){ + return Collections.emptyList(); + } + return allPostInstance; + } +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/postprocess/service/impl/PostprocessServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/postprocess/service/impl/PostprocessServiceImpl.java new file mode 100644 index 0000000..ea712b9 --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/postprocess/service/impl/PostprocessServiceImpl.java @@ -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 taskPost = postprocessDao.findTaskPost(postprocess.getTaskId()); + int size = taskPost.size(); + postprocess.setTaskSort(size); + }else { + List 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 findAllPipelinePostTask(String pipelineId){ + List allPostEntity = postprocessDao.findPipelinePost(pipelineId); + List postprocessList = BeanMapper.mapList(allPostEntity, Postprocess.class); + if (postprocessList.isEmpty()){ + return Collections.emptyList(); + } + List 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 allPostEntity = postprocessDao.findPipelinePost(pipelineId); + List 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 findAllTaskPostTask(String taskId) { + List allPostEntity = postprocessDao.findTaskPost(taskId); + List postprocessList = BeanMapper.mapList(allPostEntity, Postprocess.class); + if (postprocessList.isEmpty()){ + return Collections.emptyList(); + } + List 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 findAllPost(String taskId) { + List allPostprocess = findAllPost(); + if (allPostprocess == null){ + return Collections.emptyList(); + } + List 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 findAllPost() { + return BeanMapper.mapList(postprocessDao.findAllPost(), Postprocess.class); + } + + @Override + public List findAllPostList(List idList) { + return BeanMapper.mapList(postprocessDao.findAllPostList(idList), Postprocess.class); + } +} diff --git a/modules/module-ci-commons/src/main/java/cd/casic/ci/commons/bean/dispatch/trigger/Trigger.java b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/trigger/entity/Trigger.java similarity index 89% rename from modules/module-ci-commons/src/main/java/cd/casic/ci/commons/bean/dispatch/trigger/Trigger.java rename to modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/trigger/entity/Trigger.java index fc2e567..49ad20f 100644 --- a/modules/module-ci-commons/src/main/java/cd/casic/ci/commons/bean/dispatch/trigger/Trigger.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/trigger/entity/Trigger.java @@ -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; @@ -6,9 +6,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; -import lombok.NoArgsConstructor; import lombok.experimental.Accessors; -import org.mapstruct.Mappings; /** * @author by mianbin diff --git a/modules/module-ci-commons/src/main/java/cd/casic/ci/commons/bean/dispatch/trigger/TriggerQuery.java b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/trigger/entity/TriggerQuery.java similarity index 90% rename from modules/module-ci-commons/src/main/java/cd/casic/ci/commons/bean/dispatch/trigger/TriggerQuery.java rename to modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/trigger/entity/TriggerQuery.java index 0ec1462..ed8588c 100644 --- a/modules/module-ci-commons/src/main/java/cd/casic/ci/commons/bean/dispatch/trigger/TriggerQuery.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/trigger/entity/TriggerQuery.java @@ -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.Builder; diff --git a/modules/module-ci-commons/src/main/java/cd/casic/ci/commons/bean/dispatch/trigger/TriggerTime.java b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/trigger/entity/TriggerTime.java similarity index 94% rename from modules/module-ci-commons/src/main/java/cd/casic/ci/commons/bean/dispatch/trigger/TriggerTime.java rename to modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/trigger/entity/TriggerTime.java index 3710db0..5686a17 100644 --- a/modules/module-ci-commons/src/main/java/cd/casic/ci/commons/bean/dispatch/trigger/TriggerTime.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/trigger/entity/TriggerTime.java @@ -1,4 +1,4 @@ -package cd.casic.ci.commons.bean.dispatch.trigger; +package cd.casic.module.process.support.trigger.entity; import lombok.AllArgsConstructor; diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/trigger/service/CronUtils.java b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/trigger/service/CronUtils.java new file mode 100644 index 0000000..35e5a9b --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/trigger/service/CronUtils.java @@ -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 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 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 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 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 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 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 weekMap = new HashMap<>(); + weekMap.put("year", nowDate.getYear()); + weekMap.put("month", nowDate.getMonthValue()); + weekMap.put("day", nowDate.getDayOfMonth()); + return weekMap; + } +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/trigger/service/TriggerService.java b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/trigger/service/TriggerService.java new file mode 100644 index 0000000..5a84b0a --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/trigger/service/TriggerService.java @@ -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 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 findTriggerList(TriggerQuery triggerQuery) ; + + + /** + * 删除单个定时任务 + * @param triggerId 定时任务id + */ + void deleteTrigger(String triggerId) ; + + + /** + * 查询所有配置 + * @return 配置列表 + */ + List findAllTrigger(); + + /** + * 根据ID查询配置 + * @param triggerId 配置ID + * @return 配置 + */ + Trigger findOneTriggerById(String triggerId); + + + /** + * 根据ID列表查询配置 + * @param idList 配置ID列表 + * @return 配置列表 + */ + List findAllTriggerConfigList(List idList) ; + +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/trigger/service/TriggerTimeService.java b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/trigger/service/TriggerTimeService.java new file mode 100644 index 0000000..89396cd --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/module/process/support/trigger/service/TriggerTimeService.java @@ -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 findAllTriggerTime(String triggerId); + + + /** + * 查询cron时间列表 + * @param cron cron表达式 + * @return 时间列表 + */ + List fondCronTimeList(String cron); + + + /** + * 根据配置获取所有时间 + * @param configId 配置id + * @return 时间集合 + */ + List 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 findAllTime() ; + + /** + * 根据ID列表查询时间 + * @param idList 时间ID列表 + * @return 时间列表 + */ + @FindList + List findAllTimeList(List idList); +}