From ff56ab10a840308183509e613284003a59646f9f Mon Sep 17 00:00:00 2001 From: wangli Date: Tue, 25 Feb 2025 21:32:23 +0800 Subject: [PATCH] =?UTF-8?q?feat(REQ-3581)=20-=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=8D=95=E4=BD=8D=E7=94=A8=E5=8D=B0=E7=94=B3=E8=AF=B7=E7=9A=84?= =?UTF-8?q?=E5=AE=A1=E6=89=B9=E7=BB=93=E6=9E=9C=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CompleteVisaChangeStampHandler.java | 5 +- .../ProcessInstanceOfEssAllEventHandler.java | 149 ++++++++++++++++++ ...ProcessInstanceOfVisaAllEventHandler.java} | 17 +- ... => ProcessTaskOfVisaAllEventHandler.java} | 8 +- 4 files changed, 163 insertions(+), 16 deletions(-) create mode 100644 visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/mq/listener/workflow/process/ProcessInstanceOfEssAllEventHandler.java rename visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/mq/listener/workflow/process/{ProcessInstanceAllEventHandler.java => ProcessInstanceOfVisaAllEventHandler.java} (90%) rename visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/mq/listener/workflow/task/{ProcessTaskAllEventHandler.java => ProcessTaskOfVisaAllEventHandler.java} (90%) diff --git a/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/mq/listener/workflow/process/CompleteVisaChangeStampHandler.java b/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/mq/listener/workflow/process/CompleteVisaChangeStampHandler.java index a338be1a..849058d2 100644 --- a/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/mq/listener/workflow/process/CompleteVisaChangeStampHandler.java +++ b/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/mq/listener/workflow/process/CompleteVisaChangeStampHandler.java @@ -4,6 +4,7 @@ import cn.axzo.framework.rocketmq.Event; import cn.axzo.framework.rocketmq.EventConsumer; import cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum; import cn.axzo.nanopart.visa.api.request.UpdateVisaChangeReq; +import cn.axzo.nanopart.visa.server.config.RefreshableConfiguration; import cn.axzo.nanopart.visa.server.domain.ChangeRecordRelation; import cn.axzo.nanopart.visa.server.dto.VisaRelationDto; import cn.axzo.nanopart.visa.server.service.ChangeRecordRelationService; @@ -34,10 +35,12 @@ public class CompleteVisaChangeStampHandler implements ProcessInstanceEventHandl private ChangeRecordRelationService changeRecordRelationService; @Autowired private ChangeRecordService changeRecordService; + @Autowired + private RefreshableConfiguration refreshableConfiguration; @Override public boolean accept(ProcessInstanceDTO dto, Event event, EventConsumer.Context context) { - return Objects.equals(dto.getProcessDefinitionKey(), "bgqzyy"); + return Objects.equals(dto.getProcessDefinitionKey(), refreshableConfiguration.getStampProcessDefinitionKey()); } @Override diff --git a/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/mq/listener/workflow/process/ProcessInstanceOfEssAllEventHandler.java b/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/mq/listener/workflow/process/ProcessInstanceOfEssAllEventHandler.java new file mode 100644 index 00000000..7c72768a --- /dev/null +++ b/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/mq/listener/workflow/process/ProcessInstanceOfEssAllEventHandler.java @@ -0,0 +1,149 @@ +package cn.axzo.nanopart.visa.server.mq.listener.workflow.process; + +import cn.axzo.framework.rocketmq.Event; +import cn.axzo.framework.rocketmq.EventConsumer; +import cn.axzo.framework.rocketmq.EventProducer; +import cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum; +import cn.axzo.nanopart.visa.api.enums.VisaStampStatusEnum; +import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum; +import cn.axzo.nanopart.visa.api.enums.VisaTypeEnum; +import cn.axzo.nanopart.visa.api.request.ChangeStatusRequest; +import cn.axzo.nanopart.visa.server.config.RefreshableConfiguration; +import cn.axzo.nanopart.visa.server.domain.ChangeRecord; +import cn.axzo.nanopart.visa.server.domain.ChangeRecordLog; +import cn.axzo.nanopart.visa.server.domain.ChangeRecordRelation; +import cn.axzo.nanopart.visa.server.dto.RelationEssContextDto; +import cn.axzo.nanopart.visa.server.dto.VisaRelationDto; +import cn.axzo.nanopart.visa.server.mq.listener.workflow.BasicLogSupport; +import cn.axzo.nanopart.visa.server.mq.producer.VisaChangeLogPayload; +import cn.axzo.nanopart.visa.server.rpc.VisaOrganizationalNodeUserGateway; +import cn.axzo.nanopart.visa.server.service.ChangeRecordBillService; +import cn.axzo.nanopart.visa.server.service.ChangeRecordRelationService; +import cn.axzo.nanopart.visa.server.service.ChangeRecordService; +import cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum; +import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner; +import cn.axzo.workflow.common.model.response.mq.ProcessInstanceDTO; +import cn.axzo.workflow.starter.handler.ProcessInstanceEventHandler; +import com.alibaba.fastjson.JSON; +import com.google.common.collect.Lists; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; + +import java.util.Date; +import java.util.List; +import java.util.Objects; +import java.util.Optional; + +import static cn.axzo.nanopart.visa.api.constant.VisaConstant.WORKFLOW_VAR_VISA_TYPE_KEY; +import static cn.axzo.nanopart.visa.api.enums.VisaLogTypeEnum.REJECT_APPROVE; +import static cn.axzo.nanopart.visa.api.enums.VisaLogTypeEnum.REVERT_APPROVE; +import static cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum.PROCESS_INSTANCE_OF_VISA; +import static cn.axzo.nanopart.visa.api.enums.VisaTypeEnum.DESIGN_CHANGE; +import static cn.axzo.nanopart.visa.api.enums.VisaTypeEnum.PROJECT_VISA; +import static cn.axzo.nanopart.visa.api.enums.VisaTypeEnum.TECHNOLOGY_APPROVED; + +/** + * 工作流广播的实例维度的所有事件类型 + * + * @author wangli + * @since 2025-01-17 11:35 + */ +@Slf4j +@Component +public class ProcessInstanceOfEssAllEventHandler extends BasicLogSupport implements ProcessInstanceEventHandler { + private final RefreshableConfiguration refreshableConfiguration; + private final ChangeRecordRelationService changeRecordRelationService; + + public ProcessInstanceOfEssAllEventHandler(EventProducer eventProducer, + VisaOrganizationalNodeUserGateway visaOrganizationalNodeUserGateway, + RefreshableConfiguration refreshableConfiguration, + ChangeRecordRelationService changeRecordRelationService) { + super(eventProducer, visaOrganizationalNodeUserGateway); + this.refreshableConfiguration = refreshableConfiguration; + this.changeRecordRelationService = changeRecordRelationService; + } + + @Override + public int getOrder() { + return Integer.MIN_VALUE; + } + + @Override + public boolean accept(ProcessInstanceDTO dto, Event event, EventConsumer.Context context) { + return Objects.equals(dto.getProcessDefinitionKey(), refreshableConfiguration.getStampProcessDefinitionKey()); + } + + @Override + public void onCreated(ProcessInstanceDTO dto) { + ProcessInstanceEventHandler.super.onCreated(dto); + } + + + @Override + public void onCompleted(ProcessInstanceDTO dto) { + changeProcessInstanceOfEss(dto); + } + + /** + * 流程撤回 + * + * @param dto + */ + @Override + public void onCancelled(ProcessInstanceDTO dto) { + changeProcessInstanceOfEss(dto); + } + + /** + * 流程驳回 + * + * @param dto + */ + @Override + public void onRejected(ProcessInstanceDTO dto) { + changeProcessInstanceOfEss(dto); + } + + @Override + public void onAborted(ProcessInstanceDTO dto) { + changeProcessInstanceOfEss(dto); + } + + private void changeProcessInstanceOfEss(ProcessInstanceDTO dto) { + log.info("change process instance of ess: {}, instance result: {}", dto.getProcessInstanceId(), dto.getType().getTag()); + Long visaId = Long.valueOf(dto.getBusinessKey()); + Long operatorId = Optional.ofNullable(dto.getLastOperationAssigner()) + .map(e -> Long.valueOf(e.getPersonId())) + .orElse(null); + List essInstances = changeRecordRelationService.findByCondition(VisaRelationDto.builder() + .visaId(visaId) + .varName(VisaRelationFieldEnum.PROCESS_INSTANCE_OF_ESS.name()) + .build()); + essInstances.forEach(e -> { + String approvalId = JSON.parseObject(e.getContent(), RelationEssContextDto.class).getApprovalId(); + if (Objects.equals(approvalId, dto.getProcessInstanceId())) { + switch (dto.getType()) { + case PROCESS_INSTANCE_COMPLETED: + e.setContentExt(BpmnProcessInstanceResultEnum.APPROVED.getStatus()); + break; + case PROCESS_INSTANCE_REJECTED: + e.setContentExt(BpmnProcessInstanceResultEnum.REJECTED.getStatus()); + break; + case PROCESS_INSTANCE_ABORTED: + e.setContentExt(BpmnProcessInstanceResultEnum.ABORTED.getStatus()); + break; + case PROCESS_INSTANCE_CANCELLED: + e.setContentExt(BpmnProcessInstanceResultEnum.CANCELLED.getStatus()); + break; + default: + break; + } + } + e.setUpdateBy(operatorId); + changeRecordRelationService.save(e); + log.info("change success process instance of ess : {}", dto.getProcessInstanceId()); + }); + } + +} diff --git a/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/mq/listener/workflow/process/ProcessInstanceAllEventHandler.java b/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/mq/listener/workflow/process/ProcessInstanceOfVisaAllEventHandler.java similarity index 90% rename from visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/mq/listener/workflow/process/ProcessInstanceAllEventHandler.java rename to visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/mq/listener/workflow/process/ProcessInstanceOfVisaAllEventHandler.java index 8a67b59f..be24d674 100644 --- a/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/mq/listener/workflow/process/ProcessInstanceAllEventHandler.java +++ b/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/mq/listener/workflow/process/ProcessInstanceOfVisaAllEventHandler.java @@ -7,7 +7,6 @@ import cn.axzo.nanopart.visa.api.enums.VisaStampStatusEnum; import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum; import cn.axzo.nanopart.visa.api.enums.VisaTypeEnum; import cn.axzo.nanopart.visa.api.request.ChangeStatusRequest; -import cn.axzo.nanopart.visa.server.config.RefreshableConfiguration; import cn.axzo.nanopart.visa.server.domain.ChangeRecord; import cn.axzo.nanopart.visa.server.domain.ChangeRecordLog; import cn.axzo.nanopart.visa.server.domain.ChangeRecordRelation; @@ -44,29 +43,25 @@ import static cn.axzo.nanopart.visa.api.enums.VisaTypeEnum.TECHNOLOGY_APPROVED; * @since 2025-01-17 11:35 */ @Component -public class ProcessInstanceAllEventHandler extends BasicLogSupport implements ProcessInstanceEventHandler { +public class ProcessInstanceOfVisaAllEventHandler extends BasicLogSupport implements ProcessInstanceEventHandler { protected final ChangeRecordService changeRecordService; protected final ChangeRecordRelationService changeRecordRelationService; protected final ChangeRecordBillService changeRecordBillService; - protected final RefreshableConfiguration refreshableConfiguration; public final static List SUPPORTED_DEFINITION_KEYS = Lists.newArrayList( DESIGN_CHANGE.getProcessDefinitionKey(), TECHNOLOGY_APPROVED.getProcessDefinitionKey(), PROJECT_VISA.getProcessDefinitionKey() ); - public ProcessInstanceAllEventHandler(EventProducer eventProducer, - VisaOrganizationalNodeUserGateway visaOrganizationalNodeUserGateway, - ChangeRecordService changeRecordService, - ChangeRecordRelationService changeRecordRelationService, - ChangeRecordBillService changeRecordBillService, - RefreshableConfiguration refreshableConfiguration) { + public ProcessInstanceOfVisaAllEventHandler(EventProducer eventProducer, + VisaOrganizationalNodeUserGateway visaOrganizationalNodeUserGateway, + ChangeRecordService changeRecordService, + ChangeRecordRelationService changeRecordRelationService, + ChangeRecordBillService changeRecordBillService) { super(eventProducer, visaOrganizationalNodeUserGateway); this.changeRecordService = changeRecordService; this.changeRecordRelationService = changeRecordRelationService; this.changeRecordBillService = changeRecordBillService; - this.refreshableConfiguration = refreshableConfiguration; - SUPPORTED_DEFINITION_KEYS.add(refreshableConfiguration.getStampProcessDefinitionKey()); } @Override diff --git a/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/mq/listener/workflow/task/ProcessTaskAllEventHandler.java b/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/mq/listener/workflow/task/ProcessTaskOfVisaAllEventHandler.java similarity index 90% rename from visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/mq/listener/workflow/task/ProcessTaskAllEventHandler.java rename to visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/mq/listener/workflow/task/ProcessTaskOfVisaAllEventHandler.java index 798241f6..ccbe4667 100644 --- a/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/mq/listener/workflow/task/ProcessTaskAllEventHandler.java +++ b/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/mq/listener/workflow/task/ProcessTaskOfVisaAllEventHandler.java @@ -17,7 +17,7 @@ import java.util.Objects; import static cn.axzo.nanopart.visa.api.enums.VisaLogTypeEnum.APPROVED_AGRESS; import static cn.axzo.nanopart.visa.api.enums.VisaLogTypeEnum.TRANSMIT_APPROVE; -import static cn.axzo.nanopart.visa.server.mq.listener.workflow.process.ProcessInstanceAllEventHandler.SUPPORTED_DEFINITION_KEYS; +import static cn.axzo.nanopart.visa.server.mq.listener.workflow.process.ProcessInstanceOfVisaAllEventHandler.SUPPORTED_DEFINITION_KEYS; /** * 工作流广播的任务维度的所有事件类型 @@ -26,10 +26,10 @@ import static cn.axzo.nanopart.visa.server.mq.listener.workflow.process.ProcessI * @since 2025-01-17 11:34 */ @Component -@DependsOn("processInstanceAllEventHandler") -public class ProcessTaskAllEventHandler extends BasicLogSupport implements ProcessTaskEventHandler { +@DependsOn("processInstanceOfVisaAllEventHandler") +public class ProcessTaskOfVisaAllEventHandler extends BasicLogSupport implements ProcessTaskEventHandler { - public ProcessTaskAllEventHandler(EventProducer eventProducer, VisaOrganizationalNodeUserGateway visaOrganizationalNodeUserGateway) { + public ProcessTaskOfVisaAllEventHandler(EventProducer eventProducer, VisaOrganizationalNodeUserGateway visaOrganizationalNodeUserGateway) { super(eventProducer, visaOrganizationalNodeUserGateway); }