diff --git a/flow-engine-framework/src/main/java/com/codingapi/flow/context/RepositoryHolderContext.java b/flow-engine-framework/src/main/java/com/codingapi/flow/context/RepositoryHolderContext.java index 5545add1..d140af43 100644 --- a/flow-engine-framework/src/main/java/com/codingapi/flow/context/RepositoryHolderContext.java +++ b/flow-engine-framework/src/main/java/com/codingapi/flow/context/RepositoryHolderContext.java @@ -222,17 +222,14 @@ private void saveTodoMargeRecords() { List flowTodoRecords = new ArrayList<>(); for (FlowRecord flowRecord : flowRecords) { if (flowRecord.isTodo()) { - FlowTodoRecord todoMargeRecord = null; - if (flowRecord.isMergeable()) { - todoMargeRecord = flowTodoRecordRepository.getByMergeKey(flowRecord.getMergeKey()); - if (todoMargeRecord == null) { - todoMargeRecord = new FlowTodoRecord(flowRecord); - } else { - todoMargeRecord.update(flowRecord); - todoMargeRecord.addMargeCount(); - } - } else { + FlowTodoRecord todoMargeRecord = flowTodoRecordRepository.getByMergeKey(flowRecord.getMergeKey()); + if (todoMargeRecord == null) { todoMargeRecord = new FlowTodoRecord(flowRecord); + } else { + todoMargeRecord.update(flowRecord); + if (flowRecord.isMergeable()) { + todoMargeRecord.addMergeCount(); + } } flowTodoRecords.add(todoMargeRecord); } @@ -259,7 +256,7 @@ private void saveRecords() { } - private void removeTodoMargeRecords() { + private void removeTodoMergeRecords() { for (FlowRecord flowRecord : flowRecords) { if (flowRecord.isDone()) { if (flowRecord.isMergeable()) { @@ -270,8 +267,8 @@ private void removeTodoMargeRecords() { for (FlowTodoMerge margeRelation : margeRelations) { if (margeRelation.isRecord(flowRecord.getId())) { flowTodoMergeRepository.remove(margeRelation); - todoMargeRecord.divMargeCount(); - if (todoMargeRecord.hasMargeCount()) { + todoMargeRecord.divMergeCount(); + if (todoMargeRecord.hasMergeCount()) { flowTodoRecordRepository.save(todoMargeRecord); } else { flowTodoRecordRepository.remove(todoMargeRecord); @@ -293,7 +290,7 @@ private void removeTodoMargeRecords() { public void saveAll() { this.saveRecords(); this.saveTodoMargeRecords(); - this.removeTodoMargeRecords(); + this.removeTodoMergeRecords(); } diff --git a/flow-engine-framework/src/main/java/com/codingapi/flow/record/FlowTodoRecord.java b/flow-engine-framework/src/main/java/com/codingapi/flow/record/FlowTodoRecord.java index 074c10b8..3a15f59c 100644 --- a/flow-engine-framework/src/main/java/com/codingapi/flow/record/FlowTodoRecord.java +++ b/flow-engine-framework/src/main/java/com/codingapi/flow/record/FlowTodoRecord.java @@ -5,14 +5,14 @@ import lombok.Setter; /** - * 待办记录数据,所有的待办列表 + * 待办记录数据,所有的待办列表(自动合并记录) */ @Getter @AllArgsConstructor public class FlowTodoRecord { /** - * 合并记录id + * 待办记录id (todoId,无业务属性,流程处理还是通过recordId来处理) */ @Setter private long id; @@ -81,6 +81,7 @@ public class FlowTodoRecord { /** * 合并记录数量 + * 当 {@link FlowTodoRecord#mergeable} 为true时,该字段有效,否则为0 */ private int margeCount; @@ -101,11 +102,12 @@ public class FlowTodoRecord { public FlowTodoRecord(FlowRecord flowRecord) { - this.update(flowRecord); + this.update(flowRecord); + this.margeCount = flowRecord.isMergeable() ? 1 : 0; } - public void update(FlowRecord flowRecord){ + public void update(FlowRecord flowRecord) { this.processId = flowRecord.getProcessId(); this.workBackupId = flowRecord.getWorkBackupId(); this.workCode = flowRecord.getWorkCode(); @@ -124,19 +126,28 @@ public void update(FlowRecord flowRecord){ this.timeoutTime = flowRecord.getTimeoutTime(); } - public void addMargeCount(){ - if(this.mergeable) { + /** + * 添加合并记录数量 + */ + public void addMergeCount() { + if (this.mergeable) { this.margeCount++; } } - public void divMargeCount(){ - if(this.mergeable) { + /** + * 减去合并记录数量 + */ + public void divMergeCount() { + if (this.mergeable) { this.margeCount--; } } - public boolean hasMargeCount(){ + /** + * 是否有合并记录数量 + */ + public boolean hasMergeCount() { return this.mergeable && this.margeCount > 0; } diff --git a/flow-engine-framework/src/test/java/com/codingapi/flow/repository/FlowTodoMergeRepositoryImpl.java b/flow-engine-framework/src/test/java/com/codingapi/flow/repository/FlowTodoMergeRepositoryImpl.java index eb1fdaf5..44764359 100644 --- a/flow-engine-framework/src/test/java/com/codingapi/flow/repository/FlowTodoMergeRepositoryImpl.java +++ b/flow-engine-framework/src/test/java/com/codingapi/flow/repository/FlowTodoMergeRepositoryImpl.java @@ -38,4 +38,9 @@ public List findByTodoId(long todoId) { filter(relation -> relation.getTodoId() == todoId) .toList(); } + + + public List findAll() { + return cache.values().stream().toList(); + } } diff --git a/flow-engine-framework/src/test/java/com/codingapi/flow/repository/FlowTodoRecordRepositoryImpl.java b/flow-engine-framework/src/test/java/com/codingapi/flow/repository/FlowTodoRecordRepositoryImpl.java index d877193b..717a91f5 100644 --- a/flow-engine-framework/src/test/java/com/codingapi/flow/repository/FlowTodoRecordRepositoryImpl.java +++ b/flow-engine-framework/src/test/java/com/codingapi/flow/repository/FlowTodoRecordRepositoryImpl.java @@ -45,4 +45,8 @@ public List findByOperatorId(long operatorId) { return cache.values().stream().filter(record -> record.getCurrentOperatorId() == operatorId).toList(); } + public List findAll() { + return cache.values().stream().toList(); + } + } diff --git a/flow-engine-framework/src/test/java/com/codingapi/flow/service/FlowMergeableServiceTest.java b/flow-engine-framework/src/test/java/com/codingapi/flow/service/FlowMergeableServiceTest.java index 974562ae..2684d680 100644 --- a/flow-engine-framework/src/test/java/com/codingapi/flow/service/FlowMergeableServiceTest.java +++ b/flow-engine-framework/src/test/java/com/codingapi/flow/service/FlowMergeableServiceTest.java @@ -37,8 +37,8 @@ public class FlowMergeableServiceTest { - private final FlowTodoRecordRepositoryImpl flowTodoMargeRecordRepository = new FlowTodoRecordRepositoryImpl(); - private final FlowTodoMergeRepositoryImpl flowTodoMargeRelationRepository = new FlowTodoMergeRepositoryImpl(); + private final FlowTodoRecordRepositoryImpl flowTodoRecordRepository = new FlowTodoRecordRepositoryImpl(); + private final FlowTodoMergeRepositoryImpl flowTodoMergeRepository = new FlowTodoMergeRepositoryImpl(); private final FlowRecordRepositoryImpl flowRecordRepository = new FlowRecordRepositoryImpl(); private final UserGateway userGateway = new UserGateway(); private final WorkflowBackupRepository workflowBackupRepository = new WorkflowBackupRepositoryImpl(); @@ -46,7 +46,7 @@ public class FlowMergeableServiceTest { private final ParallelBranchRepository parallelBranchRepository = new ParallelBranchRepositoryImpl(); private final DelayTaskRepository delayTaskRepository = new DelayTaskRepositoryImpl(); private final UrgeIntervalRepository urgeIntervalRepository = new UrgeIntervalRepositoryImpl(); - private final FlowService flowService = new FlowService(workflowRepository, userGateway, flowRecordRepository,flowTodoMargeRecordRepository,flowTodoMargeRelationRepository, workflowBackupRepository, parallelBranchRepository, delayTaskRepository, urgeIntervalRepository); + private final FlowService flowService = new FlowService(workflowRepository, userGateway, flowRecordRepository, flowTodoRecordRepository, flowTodoMergeRepository, workflowBackupRepository, parallelBranchRepository, delayTaskRepository, urgeIntervalRepository); /** @@ -143,12 +143,12 @@ void mergeableRecords() { Set set = new HashSet<>(mergeIdList); assertEquals(1,set.size()); - List todoMargeRecords = flowTodoMargeRecordRepository.findByOperatorId(boss.getUserId()); - assertEquals(1, todoMargeRecords.size()); + List todoRecords = flowTodoRecordRepository.findByOperatorId(boss.getUserId()); + assertEquals(1, todoRecords.size()); - FlowTodoRecord todoMargeRecord = todoMargeRecords.get(0); - List relationList = flowTodoMargeRelationRepository.findByTodoId(todoMargeRecord.getId()); - assertEquals(count, relationList.size()); + FlowTodoRecord todoMargeRecord = todoRecords.get(0); + List mergeList = flowTodoMergeRepository.findByTodoId(todoMargeRecord.getId()); + assertEquals(count, mergeList.size()); List bossActions = bossNode.actionManager().getActions(); @@ -167,5 +167,12 @@ void mergeableRecords() { assertEquals(3, records.stream().filter(FlowRecord::isFinish).toList().size()); } - } + List todoRecordList = flowTodoRecordRepository.findAll(); + assertEquals(0, todoRecordList.size()); + + List todoMargeList = flowTodoMergeRepository.findAll(); + assertEquals(0, todoMargeList.size()); + + + } } diff --git a/flow-engine-framework/src/test/java/com/codingapi/flow/service/FlowParallelServiceTest.java b/flow-engine-framework/src/test/java/com/codingapi/flow/service/FlowParallelServiceTest.java index c0eb723c..000d6995 100644 --- a/flow-engine-framework/src/test/java/com/codingapi/flow/service/FlowParallelServiceTest.java +++ b/flow-engine-framework/src/test/java/com/codingapi/flow/service/FlowParallelServiceTest.java @@ -29,8 +29,8 @@ class FlowParallelServiceTest { - private final FlowTodoRecordRepositoryImpl flowTodoMargeRecordRepository = new FlowTodoRecordRepositoryImpl(); - private final FlowTodoMergeRepositoryImpl flowTodoMargeRelationRepository = new FlowTodoMergeRepositoryImpl(); + private final FlowTodoRecordRepositoryImpl flowTodoRecordRepository = new FlowTodoRecordRepositoryImpl(); + private final FlowTodoMergeRepositoryImpl flowTodoMergeRepository = new FlowTodoMergeRepositoryImpl(); private final FlowRecordRepositoryImpl flowRecordRepository = new FlowRecordRepositoryImpl(); private final UserGateway userGateway = new UserGateway(); private final WorkflowBackupRepository workflowBackupRepository = new WorkflowBackupRepositoryImpl(); @@ -38,7 +38,7 @@ class FlowParallelServiceTest { private final ParallelBranchRepository parallelBranchRepository = new ParallelBranchRepositoryImpl(); private final DelayTaskRepository delayTaskRepository = new DelayTaskRepositoryImpl(); private final UrgeIntervalRepository urgeIntervalRepository = new UrgeIntervalRepositoryImpl(); - private final FlowService flowService = new FlowService(workflowRepository, userGateway, flowRecordRepository,flowTodoMargeRecordRepository,flowTodoMargeRelationRepository, workflowBackupRepository, parallelBranchRepository, delayTaskRepository, urgeIntervalRepository); + private final FlowService flowService = new FlowService(workflowRepository, userGateway, flowRecordRepository, flowTodoRecordRepository, flowTodoMergeRepository, workflowBackupRepository, parallelBranchRepository, delayTaskRepository, urgeIntervalRepository); /** diff --git a/flow-engine-framework/src/test/java/com/codingapi/flow/service/FlowSampleServiceTest.java b/flow-engine-framework/src/test/java/com/codingapi/flow/service/FlowSampleServiceTest.java index 59bde7d5..7f01d77d 100644 --- a/flow-engine-framework/src/test/java/com/codingapi/flow/service/FlowSampleServiceTest.java +++ b/flow-engine-framework/src/test/java/com/codingapi/flow/service/FlowSampleServiceTest.java @@ -37,8 +37,8 @@ class FlowSampleServiceTest { - private final FlowTodoRecordRepositoryImpl flowTodoMargeRecordRepository = new FlowTodoRecordRepositoryImpl(); - private final FlowTodoMergeRepositoryImpl flowTodoMargeRelationRepository = new FlowTodoMergeRepositoryImpl(); + private final FlowTodoRecordRepositoryImpl flowTodoRecordRepository = new FlowTodoRecordRepositoryImpl(); + private final FlowTodoMergeRepositoryImpl flowTodoMergeRepository = new FlowTodoMergeRepositoryImpl(); private final FlowRecordRepositoryImpl flowRecordRepository = new FlowRecordRepositoryImpl(); private final UserGateway userGateway = new UserGateway(); private final WorkflowBackupRepository workflowBackupRepository = new WorkflowBackupRepositoryImpl(); @@ -46,7 +46,7 @@ class FlowSampleServiceTest { private final ParallelBranchRepository parallelBranchRepository = new ParallelBranchRepositoryImpl(); private final DelayTaskRepository delayTaskRepository = new DelayTaskRepositoryImpl(); private final UrgeIntervalRepository urgeIntervalRepository = new UrgeIntervalRepositoryImpl(); - private final FlowService flowService = new FlowService(workflowRepository, userGateway, flowRecordRepository,flowTodoMargeRecordRepository,flowTodoMargeRelationRepository, workflowBackupRepository, parallelBranchRepository, delayTaskRepository, urgeIntervalRepository); + private final FlowService flowService = new FlowService(workflowRepository, userGateway, flowRecordRepository, flowTodoRecordRepository, flowTodoMergeRepository, workflowBackupRepository, parallelBranchRepository, delayTaskRepository, urgeIntervalRepository); @Test void create() {