From c35c21d700b3e325a633cde2eda20210938c9998 Mon Sep 17 00:00:00 2001 From: daihw <928874202@qq.com> Date: Mon, 22 May 2023 11:07:23 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=88=A0=E9=99=A4=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E6=97=B6=EF=BC=8C=E6=9C=AA=E5=88=A0=E9=99=A4=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=92=8Cwebhook=E6=96=87=E4=BB=B6=20[https:/?= =?UTF-8?q?/gitee.com/jianmu-dev/jianmu/issues/I6VC20]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/eventhandler/ProjectEventHandler.java | 11 +- ..._Add_Jianmu_Trash_Table_And_Add_Indexs.sql | 39 ++++++ .../V2.7.2__Update_Parameter_Table.sql | 2 - .../service/ProjectApplication.java | 121 +++++++++--------- .../mapper/parameter/ParameterMapper.java | 6 + .../mapper/project/TrashProjectMapper.java | 41 ++++++ .../mapper/task/InstanceParameterMapper.java | 53 +++++--- .../mapper/task/TaskInstanceMapper.java | 15 +-- .../mapper/trigger/TriggerEventMapper.java | 5 + .../trigger/TriggerEventParameterMapper.java | 29 ++++- .../mapper/trigger/WebRequestMapper.java | 4 +- .../parameter/ParameterRepositoryImpl.java | 8 ++ .../project/TrashProjectRepositoryImpl.java | 39 ++++++ .../task/InstanceParameterRepositoryImpl.java | 16 +++ .../task/TaskInstanceRepositoryImpl.java | 4 +- .../trigger/TriggerEventRepositoryImpl.java | 35 ++++- .../project/event/FileDeletedEvent.java | 75 ----------- .../dev/jianmu/project/event/TrashEvent.java | 19 +++ .../repository/TrashProjectRepository.java | 19 +++ .../InstanceParameterRepository.java | 5 +- .../repository/TaskInstanceRepository.java | 2 +- .../repository/TriggerEventRepository.java | 7 + .../repository/ParameterRepository.java | 2 + 23 files changed, 368 insertions(+), 189 deletions(-) create mode 100644 api/src/main/resources/db/migration/V2.7.2__Add_Jianmu_Trash_Table_And_Add_Indexs.sql delete mode 100644 api/src/main/resources/db/migration/V2.7.2__Update_Parameter_Table.sql create mode 100644 infrastructure/src/main/java/dev/jianmu/infrastructure/mapper/project/TrashProjectMapper.java create mode 100644 infrastructure/src/main/java/dev/jianmu/infrastructure/mybatis/project/TrashProjectRepositoryImpl.java delete mode 100644 project-core/src/main/java/dev/jianmu/project/event/FileDeletedEvent.java create mode 100644 project-core/src/main/java/dev/jianmu/project/event/TrashEvent.java create mode 100644 project-core/src/main/java/dev/jianmu/project/repository/TrashProjectRepository.java diff --git a/api/src/main/java/dev/jianmu/api/eventhandler/ProjectEventHandler.java b/api/src/main/java/dev/jianmu/api/eventhandler/ProjectEventHandler.java index 3496b5d19..54b662178 100644 --- a/api/src/main/java/dev/jianmu/api/eventhandler/ProjectEventHandler.java +++ b/api/src/main/java/dev/jianmu/api/eventhandler/ProjectEventHandler.java @@ -3,6 +3,7 @@ package dev.jianmu.api.eventhandler; import org.springframework.context.event.EventListener; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; +import org.springframework.transaction.event.TransactionPhase; import org.springframework.transaction.event.TransactionalEventListener; import dev.jianmu.application.command.WorkflowStartCmd; @@ -13,7 +14,7 @@ import dev.jianmu.application.service.internal.WorkflowInstanceInternalApplicati import dev.jianmu.infrastructure.lock.DistributedLock; import dev.jianmu.project.event.CreatedEvent; import dev.jianmu.project.event.DeletedEvent; -import dev.jianmu.project.event.FileDeletedEvent; +import dev.jianmu.project.event.TrashEvent; import dev.jianmu.project.event.MovedEvent; import dev.jianmu.project.event.TriggerEvent; import lombok.extern.slf4j.Slf4j; @@ -90,9 +91,9 @@ public class ProjectEventHandler { } @Async - @EventListener - public void handlerFileDelete(FileDeletedEvent event) { - // 删除项目相关文件 - this.projectApplication.deleteFile(event.getTriggerIds(), event.getTaskInstanceIds(), event.getWebRequestIds()); + @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) + public void handlerFileDelete(TrashEvent event) { + // 清理项目数据 + this.projectApplication.trashProject(event.getProjectId()); } } diff --git a/api/src/main/resources/db/migration/V2.7.2__Add_Jianmu_Trash_Table_And_Add_Indexs.sql b/api/src/main/resources/db/migration/V2.7.2__Add_Jianmu_Trash_Table_And_Add_Indexs.sql new file mode 100644 index 000000000..5e9b13756 --- /dev/null +++ b/api/src/main/resources/db/migration/V2.7.2__Add_Jianmu_Trash_Table_And_Add_Indexs.sql @@ -0,0 +1,39 @@ +ALTER TABLE `parameter` + add `default` bit(1) NOT NULL DEFAULT 1 COMMENT '是否为默认值'; + +ALTER TABLE `jianmu_trigger_event_parameter` + ADD INDEX `idx_trigger_event_id` (`trigger_event_id`); +ALTER TABLE `jianmu_web_request` + ADD INDEX `idx_project_id` (`project_id`); +ALTER TABLE `task_instance` + ADD INDEX `idx_workflow_ref` (`workflow_ref`); +ALTER TABLE `async_task_instance` + ADD INDEX `idx_workflow_ref` (`workflow_ref`); +ALTER TABLE `jianmu_trigger_event` + ADD INDEX `idx_project_id` (`project_id`); +ALTER TABLE `workflow` + ADD INDEX `idx_ref` (`ref`); + +CREATE TABLE `jianmu_trash_project` +( + `id` varchar(45) NOT NULL COMMENT 'ID', + `dsl_source` varchar(45) DEFAULT NULL COMMENT 'DSL来源', + `dsl_type` varchar(45) DEFAULT NULL COMMENT 'DSL 类型', + `trigger_type` varchar(45) DEFAULT NULL COMMENT '触发类型', + `git_repo_id` varchar(150) NOT NULL COMMENT 'Git仓库ID', + `workflow_name` varchar(45) NOT NULL COMMENT '流程定义显示名称', + `workflow_ref` varchar(45) NOT NULL COMMENT '流程定义Ref', + `workflow_version` varchar(45) NOT NULL COMMENT '流程定义版本', + `steps` int NOT NULL COMMENT '步骤数量', + `dsl_text` longtext NOT NULL COMMENT 'DSL内容文本', + `created_time` datetime DEFAULT NULL COMMENT '创建时间', + `last_modified_by` varchar(45) DEFAULT NULL COMMENT '最后修改人', + `last_modified_time` datetime NOT NULL COMMENT '最后修改时间', + `workflow_description` varchar(255) DEFAULT NULL COMMENT '描述', + `enabled` tinyint(1) DEFAULT NULL COMMENT '项目是否可触发', + `mutable` tinyint(1) DEFAULT NULL COMMENT '项目状态是否可变', + `concurrent` int NOT NULL COMMENT '并发执行数', + PRIMARY KEY (`id`) +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_0900_ai_ci COMMENT ='废弃项目表'; \ No newline at end of file diff --git a/api/src/main/resources/db/migration/V2.7.2__Update_Parameter_Table.sql b/api/src/main/resources/db/migration/V2.7.2__Update_Parameter_Table.sql deleted file mode 100644 index 0bbf96e45..000000000 --- a/api/src/main/resources/db/migration/V2.7.2__Update_Parameter_Table.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `parameter` - add `default` bit(1) NOT NULL DEFAULT 1 COMMENT '是否为默认值'; \ No newline at end of file diff --git a/application/src/main/java/dev/jianmu/application/service/ProjectApplication.java b/application/src/main/java/dev/jianmu/application/service/ProjectApplication.java index bfe87fcbc..b17487be7 100644 --- a/application/src/main/java/dev/jianmu/application/service/ProjectApplication.java +++ b/application/src/main/java/dev/jianmu/application/service/ProjectApplication.java @@ -16,7 +16,7 @@ import dev.jianmu.infrastructure.storage.StorageService; import dev.jianmu.project.aggregate.*; import dev.jianmu.project.event.CreatedEvent; import dev.jianmu.project.event.DeletedEvent; -import dev.jianmu.project.event.FileDeletedEvent; +import dev.jianmu.project.event.TrashEvent; import dev.jianmu.project.event.MovedEvent; import dev.jianmu.project.event.TriggerEvent; import dev.jianmu.project.query.ProjectVo; @@ -24,6 +24,7 @@ import dev.jianmu.project.repository.GitRepoRepository; import dev.jianmu.project.repository.ProjectGroupRepository; import dev.jianmu.project.repository.ProjectLastExecutionRepository; import dev.jianmu.project.repository.ProjectLinkGroupRepository; +import dev.jianmu.project.repository.TrashProjectRepository; import dev.jianmu.secret.aggregate.CredentialManager; import dev.jianmu.task.aggregate.TaskInstance; import dev.jianmu.task.aggregate.Volume; @@ -94,29 +95,31 @@ public class ProjectApplication { private final CredentialManager credentialManager; private final ExpressionLanguage expressionLanguage; private final ParameterRepository parameterRepository; + private final TrashProjectRepository trashProjectRepository; public ProjectApplication( - ProjectRepositoryImpl projectRepository, - GitRepoRepository gitRepoRepository, - WorkflowRepository workflowRepository, - WorkflowInstanceRepository workflowInstanceRepository, - AsyncTaskInstanceRepository asyncTaskInstanceRepository, - TaskInstanceRepository taskInstanceRepository, - NodeDefApi nodeDefApi, - ApplicationEventPublisher publisher, - JgitService jgitService, - ProjectLinkGroupRepository projectLinkGroupRepository, - ProjectGroupRepository projectGroupRepository, - GlobalProperties globalProperties, - TriggerEventRepository triggerEventRepository, - ProjectLastExecutionRepository projectLastExecutionRepository, - InstanceParameterRepository instanceParameterRepository, - StorageService storageService, - WebRequestRepository webRequestRepository, - TriggerRepository triggerRepository, - CredentialManager credentialManager, - ExpressionLanguage expressionLanguage, - ParameterRepository parameterRepository + ProjectRepositoryImpl projectRepository, + GitRepoRepository gitRepoRepository, + WorkflowRepository workflowRepository, + WorkflowInstanceRepository workflowInstanceRepository, + AsyncTaskInstanceRepository asyncTaskInstanceRepository, + TaskInstanceRepository taskInstanceRepository, + NodeDefApi nodeDefApi, + ApplicationEventPublisher publisher, + JgitService jgitService, + ProjectLinkGroupRepository projectLinkGroupRepository, + ProjectGroupRepository projectGroupRepository, + GlobalProperties globalProperties, + TriggerEventRepository triggerEventRepository, + ProjectLastExecutionRepository projectLastExecutionRepository, + InstanceParameterRepository instanceParameterRepository, + StorageService storageService, + WebRequestRepository webRequestRepository, + TriggerRepository triggerRepository, + CredentialManager credentialManager, + ExpressionLanguage expressionLanguage, + ParameterRepository parameterRepository, + TrashProjectRepository trashProjectRepository ) { this.projectRepository = projectRepository; this.gitRepoRepository = gitRepoRepository; @@ -139,6 +142,7 @@ public class ProjectApplication { this.credentialManager = credentialManager; this.expressionLanguage = expressionLanguage; this.parameterRepository = parameterRepository; + this.trashProjectRepository = trashProjectRepository; } public void switchEnabled(String projectId, boolean enabled) { @@ -609,45 +613,16 @@ public class ProjectApplication { if (running > 0) { throw new RuntimeException("仍有流程执行中,不能删除"); } - var projectLinkGroup = this.projectLinkGroupRepository.findByProjectId(id) - .orElseThrow(() -> new DataNotFoundException("未找到项目分组, 项目id: " + id)); - var triggerIds = this.workflowInstanceRepository.findByRef(project.getWorkflowRef()).stream() - .map(WorkflowInstance::getTriggerId) - .collect(Collectors.toList()); - var webRequestIds = this.webRequestRepository.findByProjectId(project.getId()).stream() - .map(WebRequest::getId) - .collect(Collectors.toList()); - var taskInstanceIds = this.taskInstanceRepository.findByWorkflowRef(project.getWorkflowRef()).stream() - .filter(taskInstance -> !taskInstance.getAsyncTaskRef().equalsIgnoreCase("start")) - .filter(taskInstance -> !taskInstance.getAsyncTaskRef().equalsIgnoreCase("end")) - .map(TaskInstance::getId) - .collect(Collectors.toList()); - this.projectLinkGroupRepository.deleteById(projectLinkGroup.getId()); - this.projectGroupRepository.subProjectCountById(projectLinkGroup.getProjectGroupId(), 1); this.projectRepository.deleteByWorkflowRef(project.getWorkflowRef()); - this.projectLastExecutionRepository.deleteByRef(project.getWorkflowRef()); - this.workflowRepository.deleteByRef(project.getWorkflowRef()); - this.workflowInstanceRepository.deleteByWorkflowRef(project.getWorkflowRef()); - this.asyncTaskInstanceRepository.deleteByWorkflowRef(project.getWorkflowRef()); - this.taskInstanceRepository.deleteByWorkflowRef(project.getWorkflowRef()); - this.gitRepoRepository.deleteById(project.getGitRepoId()); - triggerIds.forEach(triggerId -> { - this.triggerEventRepository.deleteByTriggerId(triggerId); - this.triggerEventRepository.deleteParameterByTriggerId(triggerId); - this.instanceParameterRepository.deleteByTriggerId(triggerId); - }); + this.trashProjectRepository.add(project); + this.publisher.publishEvent(new DeletedEvent(project.getId())); this.publisher.publishEvent(VolumeDeletedEvent.aVolumeDeletedEvent() .workflowRef(project.getWorkflowRef()) .deletedType(VolumeDeletedEvent.VolumeDeletedType.REF) .build()); - this.publisher.publishEvent(FileDeletedEvent.aFileDeletedEventBuild() - .projectId(project.getId()) - .triggerIds(triggerIds) - .taskInstanceIds(taskInstanceIds) - .webRequestIds(webRequestIds) - .build()); + this.publisher.publishEvent(new TrashEvent(project.getId())); } @Transactional @@ -750,9 +725,41 @@ public class ProjectApplication { .orElseThrow(() -> new DataNotFoundException("未找到该Workflow")); } - public void deleteFile(List triggerIds, List taskInstanceIds, List webRequestIds) { + @Transactional + public void trashProject(String projectId) { + var project = this.trashProjectRepository.findById(projectId) + .orElseThrow(() -> new DataNotFoundException("未找到待删除项目:" + projectId)); + var projectLinkGroup = this.projectLinkGroupRepository.findByProjectId(projectId) + .orElseThrow(() -> new DataNotFoundException("未找到项目分组, 项目id: " + projectId)); + var triggerIds = this.workflowInstanceRepository.findByRef(project.getWorkflowRef()).stream() + .map(WorkflowInstance::getTriggerId) + .collect(Collectors.toList()); triggerIds.forEach(this.storageService::deleteWorkflowLog); - taskInstanceIds.forEach(this.storageService::deleteTaskLog); - webRequestIds.forEach(this.storageService::deleteWebhook); + this.webRequestRepository.findByProjectId(project.getId()).stream() + .map(WebRequest::getId) + .forEach(this.storageService::deleteWebhook); + this.taskInstanceRepository.findIdAndRefByWorkflowRef(project.getWorkflowRef()).stream() + .filter(taskInstance -> !taskInstance.getAsyncTaskRef().equalsIgnoreCase("start")) + .filter(taskInstance -> !taskInstance.getAsyncTaskRef().equalsIgnoreCase("end")) + .map(TaskInstance::getId) + .forEach(this.storageService::deleteTaskLog); + + this.projectLinkGroupRepository.deleteById(projectLinkGroup.getId()); + this.projectGroupRepository.subProjectCountById(projectLinkGroup.getProjectGroupId(), 1); + this.projectLastExecutionRepository.deleteByRef(project.getWorkflowRef()); + this.workflowRepository.deleteByRef(project.getWorkflowRef()); + this.workflowInstanceRepository.deleteByWorkflowRef(project.getWorkflowRef()); + this.asyncTaskInstanceRepository.deleteByWorkflowRef(project.getWorkflowRef()); + this.taskInstanceRepository.deleteByWorkflowRef(project.getWorkflowRef()); + this.gitRepoRepository.deleteById(project.getGitRepoId()); + this.triggerEventRepository.deleteByProjectId(project.getId()); + + var eventParameterIds = this.triggerEventRepository.findParameterIdByTriggerIdIn(triggerIds); + this.triggerEventRepository.deleteParameterByTriggerIdIn(triggerIds); + this.parameterRepository.deleteByIdIn(eventParameterIds); + + var instanceParameterIds = this.instanceParameterRepository.findParameterIdByTriggerIdIn(triggerIds); + this.instanceParameterRepository.deleteByTriggerIdIn(triggerIds); + this.parameterRepository.deleteByIdIn(instanceParameterIds); } } diff --git a/infrastructure/src/main/java/dev/jianmu/infrastructure/mapper/parameter/ParameterMapper.java b/infrastructure/src/main/java/dev/jianmu/infrastructure/mapper/parameter/ParameterMapper.java index c277cef19..db769159b 100644 --- a/infrastructure/src/main/java/dev/jianmu/infrastructure/mapper/parameter/ParameterMapper.java +++ b/infrastructure/src/main/java/dev/jianmu/infrastructure/mapper/parameter/ParameterMapper.java @@ -50,4 +50,10 @@ public interface ParameterMapper { }) }) List findByIds(@Param("ids") Set ids); + + @Delete("") + void deleteByIdIn(@Param("ids") List ids); } diff --git a/infrastructure/src/main/java/dev/jianmu/infrastructure/mapper/project/TrashProjectMapper.java b/infrastructure/src/main/java/dev/jianmu/infrastructure/mapper/project/TrashProjectMapper.java new file mode 100644 index 000000000..d0944acd3 --- /dev/null +++ b/infrastructure/src/main/java/dev/jianmu/infrastructure/mapper/project/TrashProjectMapper.java @@ -0,0 +1,41 @@ +package dev.jianmu.infrastructure.mapper.project; + +import org.apache.ibatis.annotations.Delete; +import org.apache.ibatis.annotations.Insert; +import org.apache.ibatis.annotations.Result; +import org.apache.ibatis.annotations.Select; + +import java.util.Optional; + +import dev.jianmu.project.aggregate.Project; + +/** + * @class TrashProjectMapper + * @description TrashProjectMapper + * @author Daihw + * @create 2023/5/22 10:34 上午 + */ +public interface TrashProjectMapper { + @Insert("insert into jianmu_trash_project(id, dsl_source, dsl_type, enabled, mutable, trigger_type, git_repo_id, workflow_name, workflow_description, workflow_ref, workflow_version, steps, dsl_text, created_time, last_modified_by, last_modified_time, concurrent) " + + "values(#{id}, #{dslSource}, #{dslType}, #{enabled}, #{mutable}, #{triggerType}, #{gitRepoId}, #{workflowName}, #{workflowDescription}, #{workflowRef}, #{workflowVersion}, #{steps}, #{dslText}, #{createdTime}, #{lastModifiedBy}, #{lastModifiedTime}, #{concurrent})") + void add(Project project); + + @Delete("delete from jianmu_trash_project where workflow_ref = #{workflowRef}") + void deleteByWorkflowRef(String workflowRef); + + @Select("select * from jianmu_trash_project where id = #{id}") + @Result(column = "workflow_name", property = "workflowName") + @Result(column = "workflow_description", property = "workflowDescription") + @Result(column = "dsl_source", property = "dslSource") + @Result(column = "dsl_type", property = "dslType") + @Result(column = "event_bridge_id", property = "eventBridgeId") + @Result(column = "trigger_type", property = "triggerType") + @Result(column = "git_repo_id", property = "gitRepoId") + @Result(column = "workflow_ref", property = "workflowRef") + @Result(column = "workflow_version", property = "workflowVersion") + @Result(column = "dsl_text", property = "dslText") + @Result(column = "created_time", property = "createdTime") + @Result(column = "last_modified_by", property = "lastModifiedBy") + @Result(column = "last_modified_time", property = "lastModifiedTime") + Optional findById(String id); +} diff --git a/infrastructure/src/main/java/dev/jianmu/infrastructure/mapper/task/InstanceParameterMapper.java b/infrastructure/src/main/java/dev/jianmu/infrastructure/mapper/task/InstanceParameterMapper.java index e369ab427..f24309c8a 100644 --- a/infrastructure/src/main/java/dev/jianmu/infrastructure/mapper/task/InstanceParameterMapper.java +++ b/infrastructure/src/main/java/dev/jianmu/infrastructure/mapper/task/InstanceParameterMapper.java @@ -1,31 +1,42 @@ package dev.jianmu.infrastructure.mapper.task; -import dev.jianmu.task.aggregate.InstanceParameter; -import org.apache.ibatis.annotations.*; +import org.apache.ibatis.annotations.Delete; +import org.apache.ibatis.annotations.Insert; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Result; +import org.apache.ibatis.annotations.Select; import java.util.List; import java.util.Set; +import dev.jianmu.task.aggregate.InstanceParameter; + /** + * @author Ethan Liu * @class InstanceParameterMapper * @description InstanceParameterMapper - * @author Ethan Liu * @create 2021-05-01 21:31 -*/ + */ public interface InstanceParameterMapper { @Insert("") + "insert into task_instance_parameter(instance_id, serial_no, def_key, async_task_ref, business_id, trigger_id, ref, `type`, workflow_type, parameter_id, required) values" + + "" + + "(#{i.instanceId}, #{i.serialNo}, #{i.defKey}, #{i.asyncTaskRef}, #{i.businessId}, #{i.triggerId}, #{i.ref}, #{i.type}, #{i.workflowType}, #{i.parameterId}, #{i.required})" + + "" + + " ") void addAll(@Param("instanceParameters") Set instanceParameters); @Delete("delete t1, t2 from task_instance_parameter t1 " + - "left join parameter t2 on (t1.parameter_id = (t2.id collate utf8mb4_0900_ai_ci) and t2.default = 0)" + - "where t1.trigger_id = #{triggerId}") + "left join parameter t2 on (t1.parameter_id = (t2.id collate utf8mb4_0900_ai_ci) and t2.default = 0)" + + "where t1.trigger_id = #{triggerId}") void deleteByTriggerId(String triggerId); + @Delete("") + void deleteByTriggerIdIn(@Param("triggerIds") List triggerIds); + @Select("select * from task_instance_parameter where instance_id = #{instanceId}") @Result(column = "instance_id", property = "instanceId") @Result(column = "serial_no", property = "serialNo") @@ -49,13 +60,13 @@ public interface InstanceParameterMapper { List findByInstanceIdAndType(@Param("instanceId") String instanceId, @Param("type") InstanceParameter.Type type); @Select("SELECT T.* FROM task_instance_parameter as T," + - "(" + - "SELECT max(serial_no) as max_no, async_task_ref, ref FROM task_instance_parameter " + - " WHERE trigger_id=#{triggerId} " + - " GROUP BY async_task_ref, ref" + - ") as B " + - "WHERE trigger_id=#{triggerId} " + - "AND T.async_task_ref=B.async_task_ref AND T.ref=B.ref AND T.serial_no=B.max_no AND T.type='OUTPUT'") + "(" + + "SELECT max(serial_no) as max_no, async_task_ref, ref FROM task_instance_parameter " + + " WHERE trigger_id=#{triggerId} " + + " GROUP BY async_task_ref, ref" + + ") as B " + + "WHERE trigger_id=#{triggerId} " + + "AND T.async_task_ref=B.async_task_ref AND T.ref=B.ref AND T.serial_no=B.max_no AND T.type='OUTPUT'") @Result(column = "instance_id", property = "instanceId") @Result(column = "serial_no", property = "serialNo") @Result(column = "def_key", property = "defKey") @@ -65,4 +76,10 @@ public interface InstanceParameterMapper { @Result(column = "parameter_id", property = "parameterId") @Result(column = "workflow_type", property = "workflowType") List findLastOutputParamByTriggerId(String triggerId); + + @Select("") + List findParameterIdByTriggerIdIn(@Param("triggerIds") List triggerIds); } diff --git a/infrastructure/src/main/java/dev/jianmu/infrastructure/mapper/task/TaskInstanceMapper.java b/infrastructure/src/main/java/dev/jianmu/infrastructure/mapper/task/TaskInstanceMapper.java index da4bc81bd..a56f2d905 100644 --- a/infrastructure/src/main/java/dev/jianmu/infrastructure/mapper/task/TaskInstanceMapper.java +++ b/infrastructure/src/main/java/dev/jianmu/infrastructure/mapper/task/TaskInstanceMapper.java @@ -182,18 +182,7 @@ public interface TaskInstanceMapper { @Result(column = "end_time", property = "endTime") List findByTriggerIdAndStatus(@Param("triggerId") String triggerId, @Param("status") InstanceStatus status); - @Select("select * from task_instance where workflow_ref = #{workflowRef}") - @Result(column = "serial_no", property = "serialNo") - @Result(column = "def_key", property = "defKey") - @Result(column = "node_info", property = "nodeInfo", typeHandler = NodeInfoTypeHandler.class) + @Select("select id, async_task_ref from task_instance where workflow_ref = #{workflowRef}") @Result(column = "async_task_ref", property = "asyncTaskRef") - @Result(column = "workflow_ref", property = "workflowRef") - @Result(column = "workflow_version", property = "workflowVersion") - @Result(column = "business_id", property = "businessId") - @Result(column = "trigger_id", property = "triggerId") - @Result(column = "worker_id", property = "workerId") - @Result(column = "_version", property = "version") - @Result(column = "start_time", property = "startTime") - @Result(column = "end_time", property = "endTime") - List findByWorkflowRef(String workflowRef); + List findIdAndRefByWorkflowRef(String workflowRef); } diff --git a/infrastructure/src/main/java/dev/jianmu/infrastructure/mapper/trigger/TriggerEventMapper.java b/infrastructure/src/main/java/dev/jianmu/infrastructure/mapper/trigger/TriggerEventMapper.java index 900030eaf..f95b68039 100644 --- a/infrastructure/src/main/java/dev/jianmu/infrastructure/mapper/trigger/TriggerEventMapper.java +++ b/infrastructure/src/main/java/dev/jianmu/infrastructure/mapper/trigger/TriggerEventMapper.java @@ -31,4 +31,9 @@ public interface TriggerEventMapper { "left join jianmu_web_request t2 on t1.web_request_id = (t2.id collate utf8mb4_0900_ai_ci) " + "where t1.id = #{triggerId}") void deleteByTriggerId(String triggerId); + + @Delete("delete t1, t2 from jianmu_trigger_event t1 " + + "left join jianmu_web_request t2 on t1.web_request_id = (t2.id collate utf8mb4_0900_ai_ci) " + + "where t1.project_id = #{projectId}") + void deleteByProjectId(String projectId); } diff --git a/infrastructure/src/main/java/dev/jianmu/infrastructure/mapper/trigger/TriggerEventParameterMapper.java b/infrastructure/src/main/java/dev/jianmu/infrastructure/mapper/trigger/TriggerEventParameterMapper.java index ca5974a6d..b43da5dbc 100644 --- a/infrastructure/src/main/java/dev/jianmu/infrastructure/mapper/trigger/TriggerEventParameterMapper.java +++ b/infrastructure/src/main/java/dev/jianmu/infrastructure/mapper/trigger/TriggerEventParameterMapper.java @@ -1,14 +1,19 @@ package dev.jianmu.infrastructure.mapper.trigger; -import dev.jianmu.trigger.event.TriggerEventParameter; -import org.apache.ibatis.annotations.*; +import org.apache.ibatis.annotations.Delete; +import org.apache.ibatis.annotations.Insert; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Result; +import org.apache.ibatis.annotations.Select; import java.util.List; +import dev.jianmu.trigger.event.TriggerEventParameter; + /** + * @author Ethan Liu * @class TriggerEventParameterMapper * @description TriggerEventParameterMapper - * @author Ethan Liu * @create 2021-11-11 09:45 */ public interface TriggerEventParameterMapper { @@ -17,11 +22,23 @@ public interface TriggerEventParameterMapper { List findById(String triggerEventId); @Insert("insert into jianmu_trigger_event_parameter(trigger_event_id, name, type, value, parameter_id) " + - "values(#{triggerEventId}, #{ep.name}, #{ep.type}, #{ep.value}, #{ep.parameterId})") + "values(#{triggerEventId}, #{ep.name}, #{ep.type}, #{ep.value}, #{ep.parameterId})") void save(@Param("triggerEventId") String triggerEventId, @Param("ep") TriggerEventParameter triggerEventParameter); @Delete("delete t1, t2 from jianmu_trigger_event_parameter t1 " + - "left join parameter t2 on t1.parameter_id = (t2.id collate utf8mb4_0900_ai_ci) " + - "where t1.trigger_event_id = #{triggerId}") + "left join parameter t2 on t1.parameter_id = (t2.id collate utf8mb4_0900_ai_ci) " + + "where t1.trigger_event_id = #{triggerId}") void deleteByTriggerId(String triggerId); + + @Delete("") + void deleteParameterByTriggerIdIn(@Param("triggerIds") List triggerIds); + + @Select("") + List findParameterIdByTriggerIdIn(@Param("triggerIds") List triggerIds); } diff --git a/infrastructure/src/main/java/dev/jianmu/infrastructure/mapper/trigger/WebRequestMapper.java b/infrastructure/src/main/java/dev/jianmu/infrastructure/mapper/trigger/WebRequestMapper.java index cc65d4c6b..97ab9bc67 100644 --- a/infrastructure/src/main/java/dev/jianmu/infrastructure/mapper/trigger/WebRequestMapper.java +++ b/infrastructure/src/main/java/dev/jianmu/infrastructure/mapper/trigger/WebRequestMapper.java @@ -66,9 +66,7 @@ public interface WebRequestMapper { @Result(column = "request_time", property = "requestTime") Optional findLatestByProjectId(String projectId); - @Select("select t2.* from jianmu_trigger_event t1 " + - "join jianmu_web_request t2 on t1.web_request_id = (t2.id collate utf8mb4_0900_ai_ci) " + - "where t1.project_id = #{projectId}") + @Select("select * from jianmu_web_request where project_id = #{projectId}") @Result(column = "project_id", property = "projectId") @Result(column = "workflow_ref", property = "workflowRef") @Result(column = "workflow_version", property = "workflowVersion") diff --git a/infrastructure/src/main/java/dev/jianmu/infrastructure/mybatis/parameter/ParameterRepositoryImpl.java b/infrastructure/src/main/java/dev/jianmu/infrastructure/mybatis/parameter/ParameterRepositoryImpl.java index 5c67a76f8..c91192d41 100644 --- a/infrastructure/src/main/java/dev/jianmu/infrastructure/mybatis/parameter/ParameterRepositoryImpl.java +++ b/infrastructure/src/main/java/dev/jianmu/infrastructure/mybatis/parameter/ParameterRepositoryImpl.java @@ -36,4 +36,12 @@ public class ParameterRepositoryImpl implements ParameterRepository { } return this.parameterMapper.findByIds(ids); } + + @Override + public void deleteByIdIn(List ids) { + if (ids.isEmpty()) { + return; + } + this.parameterMapper.deleteByIdIn(ids); + } } diff --git a/infrastructure/src/main/java/dev/jianmu/infrastructure/mybatis/project/TrashProjectRepositoryImpl.java b/infrastructure/src/main/java/dev/jianmu/infrastructure/mybatis/project/TrashProjectRepositoryImpl.java new file mode 100644 index 000000000..060ffac9f --- /dev/null +++ b/infrastructure/src/main/java/dev/jianmu/infrastructure/mybatis/project/TrashProjectRepositoryImpl.java @@ -0,0 +1,39 @@ +package dev.jianmu.infrastructure.mybatis.project; + +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +import dev.jianmu.infrastructure.mapper.project.TrashProjectMapper; +import dev.jianmu.project.aggregate.Project; +import dev.jianmu.project.repository.TrashProjectRepository; + +/** + * @class TrashProjectRepositoryImpl + * @description TrashProjectRepositoryImpl + * @author Daihw + * @create 2023/5/22 10:33 上午 + */ +@Repository +public class TrashProjectRepositoryImpl implements TrashProjectRepository { + private final TrashProjectMapper trashProjectMapper; + + public TrashProjectRepositoryImpl(TrashProjectMapper trashProjectMapper) { + this.trashProjectMapper = trashProjectMapper; + } + + @Override + public void add(Project project) { + this.trashProjectMapper.add(project); + } + + @Override + public void deleteByWorkflowRef(String workflowRef) { + this.trashProjectMapper.deleteByWorkflowRef(workflowRef); + } + + @Override + public Optional findById(String id) { + return this.trashProjectMapper.findById(id); + } +} diff --git a/infrastructure/src/main/java/dev/jianmu/infrastructure/mybatis/task/InstanceParameterRepositoryImpl.java b/infrastructure/src/main/java/dev/jianmu/infrastructure/mybatis/task/InstanceParameterRepositoryImpl.java index 673d95f55..8cbd25ea7 100644 --- a/infrastructure/src/main/java/dev/jianmu/infrastructure/mybatis/task/InstanceParameterRepositoryImpl.java +++ b/infrastructure/src/main/java/dev/jianmu/infrastructure/mybatis/task/InstanceParameterRepositoryImpl.java @@ -48,4 +48,20 @@ public class InstanceParameterRepositoryImpl implements InstanceParameterReposit public void deleteByTriggerId(String triggerId) { this.instanceParameterMapper.deleteByTriggerId(triggerId); } + + @Override + public void deleteByTriggerIdIn(List triggerIds) { + if (triggerIds.isEmpty()) { + return; + } + this.instanceParameterMapper.deleteByTriggerIdIn(triggerIds); + } + + @Override + public List findParameterIdByTriggerIdIn(List triggerIds) { + if (triggerIds.isEmpty()) { + return List.of(); + } + return this.instanceParameterMapper.findParameterIdByTriggerIdIn(triggerIds); + } } diff --git a/infrastructure/src/main/java/dev/jianmu/infrastructure/mybatis/task/TaskInstanceRepositoryImpl.java b/infrastructure/src/main/java/dev/jianmu/infrastructure/mybatis/task/TaskInstanceRepositoryImpl.java index f4a3662d0..3e4ece861 100644 --- a/infrastructure/src/main/java/dev/jianmu/infrastructure/mybatis/task/TaskInstanceRepositoryImpl.java +++ b/infrastructure/src/main/java/dev/jianmu/infrastructure/mybatis/task/TaskInstanceRepositoryImpl.java @@ -208,7 +208,7 @@ public class TaskInstanceRepositoryImpl implements TaskInstanceRepository { } @Override - public List findByWorkflowRef(String workflowRef) { - return this.taskInstanceMapper.findByWorkflowRef(workflowRef); + public List findIdAndRefByWorkflowRef(String workflowRef) { + return this.taskInstanceMapper.findIdAndRefByWorkflowRef(workflowRef); } } diff --git a/infrastructure/src/main/java/dev/jianmu/infrastructure/mybatis/trigger/TriggerEventRepositoryImpl.java b/infrastructure/src/main/java/dev/jianmu/infrastructure/mybatis/trigger/TriggerEventRepositoryImpl.java index 1f944e53d..cec488fe6 100644 --- a/infrastructure/src/main/java/dev/jianmu/infrastructure/mybatis/trigger/TriggerEventRepositoryImpl.java +++ b/infrastructure/src/main/java/dev/jianmu/infrastructure/mybatis/trigger/TriggerEventRepositoryImpl.java @@ -1,17 +1,19 @@ package dev.jianmu.infrastructure.mybatis.trigger; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + import dev.jianmu.infrastructure.mapper.trigger.TriggerEventMapper; import dev.jianmu.infrastructure.mapper.trigger.TriggerEventParameterMapper; import dev.jianmu.trigger.event.TriggerEvent; import dev.jianmu.trigger.repository.TriggerEventRepository; -import org.springframework.stereotype.Repository; - -import java.util.Optional; /** + * @author Ethan Liu * @class TriggerEventRepositoryImpl * @description TriggerEventRepositoryImpl - * @author Ethan Liu * @create 2021-11-11 08:36 */ @Repository @@ -20,8 +22,8 @@ public class TriggerEventRepositoryImpl implements TriggerEventRepository { private final TriggerEventParameterMapper triggerEventParameterMapper; public TriggerEventRepositoryImpl( - TriggerEventMapper triggerEventMapper, - TriggerEventParameterMapper triggerEventParameterMapper + TriggerEventMapper triggerEventMapper, + TriggerEventParameterMapper triggerEventParameterMapper ) { this.triggerEventMapper = triggerEventMapper; this.triggerEventParameterMapper = triggerEventParameterMapper; @@ -53,4 +55,25 @@ public class TriggerEventRepositoryImpl implements TriggerEventRepository { public void deleteParameterByTriggerId(String triggerId) { this.triggerEventParameterMapper.deleteByTriggerId(triggerId); } + + @Override + public void deleteByProjectId(String projectId) { + this.triggerEventMapper.deleteByProjectId(projectId); + } + + @Override + public void deleteParameterByTriggerIdIn(List triggerIds) { + if (triggerIds.isEmpty()) { + return; + } + this.triggerEventParameterMapper.deleteParameterByTriggerIdIn(triggerIds); + } + + @Override + public List findParameterIdByTriggerIdIn(List triggerIds) { + if (triggerIds.isEmpty()) { + return List.of(); + } + return this.triggerEventParameterMapper.findParameterIdByTriggerIdIn(triggerIds); + } } diff --git a/project-core/src/main/java/dev/jianmu/project/event/FileDeletedEvent.java b/project-core/src/main/java/dev/jianmu/project/event/FileDeletedEvent.java deleted file mode 100644 index 0734b11c9..000000000 --- a/project-core/src/main/java/dev/jianmu/project/event/FileDeletedEvent.java +++ /dev/null @@ -1,75 +0,0 @@ -package dev.jianmu.project.event; - -import java.util.List; - -/** - * @class DeletedEvent - * @description DeletedEvent - * @author Ethan Liu - * @create 2021-08-21 18:31 -*/ -public class FileDeletedEvent { - private String projectId; - private List triggerIds; - private List taskInstanceIds; - private List webRequestIds; - - public FileDeletedEvent() { - } - - public String getProjectId() { - return projectId; - } - - public List getTriggerIds() { - return triggerIds; - } - - public List getTaskInstanceIds() { - return taskInstanceIds; - } - - public List getWebRequestIds() { - return webRequestIds; - } - - public static Builder aFileDeletedEventBuild() { - return new Builder(); - } - - public static class Builder{ - private String projectId; - private List triggerIds; - private List taskInstanceIds; - private List webRequestIds; - - public Builder projectId(String projectId) { - this.projectId = projectId; - return this; - } - - public Builder triggerIds(List triggerIds) { - this.triggerIds = triggerIds; - return this; - } - - public Builder taskInstanceIds(List taskInstanceIds) { - this.taskInstanceIds = taskInstanceIds; - return this; - } - - public Builder webRequestIds(List webRequestIds) { - this.webRequestIds = webRequestIds; - return this; - } - - public FileDeletedEvent build() { - var event = new FileDeletedEvent(); - event.projectId = this.projectId; - event.triggerIds = this.triggerIds; - event.taskInstanceIds = this.taskInstanceIds; - event.webRequestIds = this.webRequestIds; - return event; - } - } -} diff --git a/project-core/src/main/java/dev/jianmu/project/event/TrashEvent.java b/project-core/src/main/java/dev/jianmu/project/event/TrashEvent.java new file mode 100644 index 000000000..070718b42 --- /dev/null +++ b/project-core/src/main/java/dev/jianmu/project/event/TrashEvent.java @@ -0,0 +1,19 @@ +package dev.jianmu.project.event; + +/** + * @author Daihw + * @class TrashEvent + * @description TrashEvent + * @create 2023/5/22 10:26 上午 + */ +public class TrashEvent { + private String projectId; + + public TrashEvent(String projectId) { + this.projectId = projectId; + } + + public String getProjectId() { + return projectId; + } +} diff --git a/project-core/src/main/java/dev/jianmu/project/repository/TrashProjectRepository.java b/project-core/src/main/java/dev/jianmu/project/repository/TrashProjectRepository.java new file mode 100644 index 000000000..ad4d5e5c2 --- /dev/null +++ b/project-core/src/main/java/dev/jianmu/project/repository/TrashProjectRepository.java @@ -0,0 +1,19 @@ +package dev.jianmu.project.repository; + +import java.util.Optional; + +import dev.jianmu.project.aggregate.Project; + +/** + * @class TrashProjectRepository + * @description TrashProjectRepository + * @author Daihw + * @create 2023/5/22 10:32 上午 + */ +public interface TrashProjectRepository { + void add(Project project); + + void deleteByWorkflowRef(String workflowRef); + + Optional findById(String id); +} diff --git a/task-core/src/main/java/dev/jianmu/task/repository/InstanceParameterRepository.java b/task-core/src/main/java/dev/jianmu/task/repository/InstanceParameterRepository.java index 36041d45e..deb003ca0 100644 --- a/task-core/src/main/java/dev/jianmu/task/repository/InstanceParameterRepository.java +++ b/task-core/src/main/java/dev/jianmu/task/repository/InstanceParameterRepository.java @@ -3,7 +3,6 @@ package dev.jianmu.task.repository; import dev.jianmu.task.aggregate.InstanceParameter; import java.util.List; -import java.util.Optional; import java.util.Set; /** @@ -22,4 +21,8 @@ public interface InstanceParameterRepository { List findLastOutputParamByTriggerId(String triggerId); void deleteByTriggerId(String triggerId); + + void deleteByTriggerIdIn(List triggerIds); + + List findParameterIdByTriggerIdIn(List triggerIds); } diff --git a/task-core/src/main/java/dev/jianmu/task/repository/TaskInstanceRepository.java b/task-core/src/main/java/dev/jianmu/task/repository/TaskInstanceRepository.java index aa8b41500..3452979e6 100644 --- a/task-core/src/main/java/dev/jianmu/task/repository/TaskInstanceRepository.java +++ b/task-core/src/main/java/dev/jianmu/task/repository/TaskInstanceRepository.java @@ -50,5 +50,5 @@ public interface TaskInstanceRepository { List findByTriggerIdAndStatus(String triggerId, InstanceStatus status); - List findByWorkflowRef(String workflowRef); + List findIdAndRefByWorkflowRef(String workflowRef); } diff --git a/trigger-core/src/main/java/dev/jianmu/trigger/repository/TriggerEventRepository.java b/trigger-core/src/main/java/dev/jianmu/trigger/repository/TriggerEventRepository.java index 4a1ca2f8f..3a14e685e 100644 --- a/trigger-core/src/main/java/dev/jianmu/trigger/repository/TriggerEventRepository.java +++ b/trigger-core/src/main/java/dev/jianmu/trigger/repository/TriggerEventRepository.java @@ -2,6 +2,7 @@ package dev.jianmu.trigger.repository; import dev.jianmu.trigger.event.TriggerEvent; +import java.util.List; import java.util.Optional; /** @@ -18,4 +19,10 @@ public interface TriggerEventRepository { void deleteByTriggerId(String triggerId); void deleteParameterByTriggerId(String triggerId); + + void deleteByProjectId(String projectId); + + void deleteParameterByTriggerIdIn(List triggerIds); + + List findParameterIdByTriggerIdIn(List triggerIds); } diff --git a/workflow-core/src/main/java/dev/jianmu/workflow/repository/ParameterRepository.java b/workflow-core/src/main/java/dev/jianmu/workflow/repository/ParameterRepository.java index 3aaec6663..90ec2ca50 100644 --- a/workflow-core/src/main/java/dev/jianmu/workflow/repository/ParameterRepository.java +++ b/workflow-core/src/main/java/dev/jianmu/workflow/repository/ParameterRepository.java @@ -16,4 +16,6 @@ public interface ParameterRepository { void addAll(List parameters); List findByIds(Set ids); + + void deleteByIdIn(List ids); } -- Gitee