From 8ec054f6be58a930c07e75a5d5248545bd94380c Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Wed, 4 Sep 2024 16:02:39 +0800 Subject: [PATCH] =?UTF-8?q?feat(REQ-2924)=20-=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E4=B8=80=E4=BA=9B=E6=96=B0=E7=9A=84=E6=97=A5=E5=BF=97=E5=A4=84?= =?UTF-8?q?=E7=90=86=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../listener/EngineEntityEventListener.java | 28 +++++++++++++------ .../core/service/ExtAxProcessLogService.java | 15 ++++++++++ .../impl/ExtAxProcessLogServiceImpl.java | 9 ++++++ 3 files changed, 44 insertions(+), 8 deletions(-) diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/listener/EngineEntityEventListener.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/listener/EngineEntityEventListener.java index 8326140b1..f76131e69 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/listener/EngineEntityEventListener.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/listener/EngineEntityEventListener.java @@ -17,6 +17,7 @@ import org.flowable.common.engine.api.delegate.event.AbstractFlowableEventListen import org.flowable.common.engine.api.delegate.event.FlowableEngineEventType; import org.flowable.common.engine.api.delegate.event.FlowableEntityEvent; import org.flowable.common.engine.api.delegate.event.FlowableEvent; +import org.flowable.engine.HistoryService; import org.flowable.engine.RepositoryService; import org.flowable.engine.RuntimeService; import org.flowable.engine.impl.bpmn.behavior.MultiInstanceActivityBehavior; @@ -31,15 +32,16 @@ import java.util.Set; import static cn.axzo.workflow.common.constant.BpmnConstants.AND_SIGN_EXPRESSION; import static cn.axzo.workflow.common.constant.BpmnConstants.HIDDEN_ASSIGNEE_ID; +import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT; import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_INITIATOR; import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_TASK_RELATION_ASSIGNEE_INFO; import static cn.axzo.workflow.common.constant.BpmnConstants.OLD_INTERNAL_INITIATOR; -import static cn.axzo.workflow.common.enums.ApprovalMethodEnum.bizSpecify; import static cn.axzo.workflow.common.enums.ApprovalMethodEnum.nobody; import static cn.axzo.workflow.common.enums.BpmnFlowNodeMode.AND; import static cn.axzo.workflow.common.enums.BpmnFlowNodeMode.GENERAL; import static cn.axzo.workflow.common.enums.BpmnFlowNodeMode.OR; import static cn.axzo.workflow.common.enums.BpmnFlowNodeType.NODE_STARTER; +import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.APPROVED; import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.PROCESSING; import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getApprovalMethod; import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getNodeType; @@ -108,6 +110,18 @@ public class EngineEntityEventListener extends AbstractFlowableEventListener { private void onDeleted(TaskEntity taskEntity) { log.error("onDeleted"); + ExtAxProcessLog queryLog = new ExtAxProcessLog(); + queryLog.setProcessInstanceId(taskEntity.getProcessInstanceId()); + queryLog.setTaskId(taskEntity.getId()); + ExtAxProcessLog update = new ExtAxProcessLog(); + if (Objects.equals(taskEntity.getTaskDefinitionKey(), NODE_STARTER.getType())) { + update.setStatus(APPROVED.getStatus()); + } else { + ProcessEngineConfigurationImpl processEngineConfiguration = CommandContextUtil.getProcessEngineConfiguration(); + HistoryService historyService = processEngineConfiguration.getHistoryService(); + + } + processLogService.update(queryLog, update); } private void onUpdated(TaskEntity taskEntity) { @@ -120,7 +134,8 @@ public class EngineEntityEventListener extends AbstractFlowableEventListener { } else { ProcessEngineConfigurationImpl processEngineConfiguration = CommandContextUtil.getProcessEngineConfiguration(); RuntimeService runtimeService = processEngineConfiguration.getRuntimeService(); - List assigneeList = runtimeService.getVariable(taskEntity.getProcessInstanceId(), "[_ACTIVITY_INFO_SNAPSHOT_]" + taskEntity.getTaskDefinitionKey(), List.class); + List assigneeList = runtimeService.getVariable(taskEntity.getProcessInstanceId(), + INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT + taskEntity.getTaskDefinitionKey(), List.class); ListUtils.emptyIfNull(assigneeList).stream().filter(e -> Objects.equals(e.buildAssigneeId(), taskEntity.getAssignee())).findAny() .ifPresent(assignee -> { log.error("审批人: {}", JSON.toJSONString(assignee)); @@ -165,16 +180,11 @@ public class EngineEntityEventListener extends AbstractFlowableEventListener { log.setActivityId(taskEntity.getTaskDefinitionKey()); log.setActivityName(taskEntity.getName()); log.setApprovalMethod((isNodeStarter ? nobody : getApprovalMethod(flowElement).orElse(nobody)).getType()); - if (Objects.equals(log.getApprovalMethod(), nobody.getType()) || Objects.equals(log.getApprovalMethod(), bizSpecify.getType())) { - log.setOperationDesc("待处理"); - } log.setNodeType((getNodeType(flowElement).orElse(BpmnFlowNodeType.NODE_EMPTY)).getType()); log.setNodeMode((isNodeStarter ? BpmnFlowNodeMode.GENERAL : getNodeMode(flowElement)).getType()); log.setTaskId(taskEntity.getId()); + log.setOperationDesc("待处理"); if (Objects.nonNull(assignee)) { - // FIXME 应该还有逻辑来拼接 - log.setOperationDesc(isNodeStarter ? assignee.getAssignerName() : null); - log.setAssigneeFull(assignee); log.setAssigneeId(Long.valueOf(assignee.getPersonId())); log.setAssigneeTenantId(assignee.getTenantId()); @@ -183,6 +193,7 @@ public class EngineEntityEventListener extends AbstractFlowableEventListener { } log.setStartTime(taskEntity.getCreateTime()); log.setStatus(PROCESSING.getStatus()); + processLogService.insert(log); } @@ -199,6 +210,7 @@ public class EngineEntityEventListener extends AbstractFlowableEventListener { return node; } + @Override public boolean isFailOnException() { return true; diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/ExtAxProcessLogService.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/ExtAxProcessLogService.java index 7cee90d03..99b9ef4e8 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/ExtAxProcessLogService.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/ExtAxProcessLogService.java @@ -25,6 +25,21 @@ public interface ExtAxProcessLogService { */ void delete(ExtAxProcessLog deleteLog); + /** + * 根据有 ID 的实体直接更新 + * + * @param updateLog + */ + void updateById(ExtAxProcessLog updateLog); + + /** + * 根据条件更新指定对象的列 + * + * @param query + * @param update + */ + void update(ExtAxProcessLog query, ExtAxProcessLog update); + /** * 更新指定任务的审批人 * diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/ExtAxProcessLogServiceImpl.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/ExtAxProcessLogServiceImpl.java index 5f491349a..67c30f0e7 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/ExtAxProcessLogServiceImpl.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/ExtAxProcessLogServiceImpl.java @@ -42,9 +42,18 @@ public class ExtAxProcessLogServiceImpl implements ExtAxProcessLogService { extAxProcessLogMapper.delete(buildQueryWrapper(deleteLog)); } + public void updateById(ExtAxProcessLog updateLog) { + extAxProcessLogMapper.updateById(updateLog); + } + + public void update(ExtAxProcessLog query, ExtAxProcessLog update) { + extAxProcessLogMapper.update(update, buildQueryWrapper(query)); + } + @Override public void updateAssignee(ExtAxProcessLog queryLog, BpmnTaskDelegateAssigner assignee) { updateAssignee(queryLog, assignee, assignee.getAssignerName()); + } @Override