Skip to content

Commit c04161a

Browse files
committed
fix #171
1 parent 216578a commit c04161a

File tree

2 files changed

+129
-1
lines changed

2 files changed

+129
-1
lines changed

springboot-starter-flow/src/main/java/com/codingapi/springboot/flow/service/impl/FlowSubmitService.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,10 @@ public FlowSubmitResult trySubmitFlow() {
379379

380380
// 是否跳过相同审批人
381381
public boolean isSkipIfSameApprover() {
382-
return flowWork.isSkipIfSameApprover() && !nextNode.isOverNode();
382+
if(nextNode!=null) {
383+
return flowWork.isSkipIfSameApprover() && !nextNode.isOverNode();
384+
}else {
385+
return flowWork.isSkipIfSameApprover();
386+
}
383387
}
384388
}
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
package com.codingapi.springboot.flow.test;
2+
3+
import com.codingapi.springboot.flow.bind.BindDataSnapshot;
4+
import com.codingapi.springboot.flow.build.FlowWorkBuilder;
5+
import com.codingapi.springboot.flow.domain.FlowWork;
6+
import com.codingapi.springboot.flow.domain.Opinion;
7+
import com.codingapi.springboot.flow.em.ApprovalType;
8+
import com.codingapi.springboot.flow.flow.Leave;
9+
import com.codingapi.springboot.flow.matcher.OperatorMatcher;
10+
import com.codingapi.springboot.flow.record.FlowRecord;
11+
import com.codingapi.springboot.flow.repository.*;
12+
import com.codingapi.springboot.flow.service.FlowService;
13+
import com.codingapi.springboot.flow.user.User;
14+
import org.junit.jupiter.api.Test;
15+
import org.springframework.data.domain.PageRequest;
16+
17+
import java.util.List;
18+
19+
import static org.junit.jupiter.api.Assertions.assertEquals;
20+
import static org.junit.jupiter.api.Assertions.assertTrue;
21+
22+
public class FlowSkipSameApproverTest {
23+
24+
private final UserRepository userRepository = new UserRepository();
25+
private final FlowWorkRepository flowWorkRepository = new FlowWorkRepositoryImpl();
26+
private final FlowRecordRepositoryImpl flowRecordRepository = new FlowRecordRepositoryImpl();
27+
private final FlowBindDataRepositoryImpl flowBindDataRepository = new FlowBindDataRepositoryImpl();
28+
private final LeaveRepository leaveRepository = new LeaveRepository();
29+
private final FlowBackupRepository flowBackupRepository = new FlowBackupRepositoryImpl();
30+
private final FlowProcessRepository flowProcessRepository = new FlowProcessRepositoryImpl(flowBackupRepository, userRepository);
31+
private final FlowService flowService = new FlowService(flowWorkRepository, flowRecordRepository, flowBindDataRepository, userRepository, flowProcessRepository, flowBackupRepository);
32+
33+
34+
/**
35+
* 设置跳过审批人且会签时测试
36+
*/
37+
@Test
38+
void test() {
39+
PageRequest pageRequest = PageRequest.of(0, 1000);
40+
41+
User user = new User("张飞");
42+
userRepository.save(user);
43+
44+
User dept = new User("刘备");
45+
userRepository.save(dept);
46+
47+
User boss = new User("诸葛亮");
48+
userRepository.save(boss);
49+
50+
FlowWork flowWork = FlowWorkBuilder.builder(user)
51+
.title("请假流程")
52+
.skipIfSameApprover(true)
53+
.nodes()
54+
.node("开始节点", "start", "default", ApprovalType.UN_SIGN, OperatorMatcher.anyOperatorMatcher())
55+
.node("部门负责人审批", "dept", "default", ApprovalType.SIGN, OperatorMatcher.specifyOperatorMatcher(user.getUserId(), boss.getUserId()))
56+
.node("分管领导审批", "office", "default", ApprovalType.UN_SIGN, OperatorMatcher.specifyOperatorMatcher(dept.getUserId()))
57+
.node("总经理审批", "manager", "default", ApprovalType.UN_SIGN, OperatorMatcher.specifyOperatorMatcher(boss.getUserId()))
58+
.node("结束节点", "over", "default", ApprovalType.UN_SIGN, OperatorMatcher.anyOperatorMatcher())
59+
.relations()
60+
.relation("部门负责人审批", "start", "dept")
61+
.relation("分管领导审批", "dept", "office")
62+
.relation("总经理审批", "office", "manager")
63+
.relation("结束节点", "manager", "over")
64+
.build();
65+
66+
flowWorkRepository.save(flowWork);
67+
68+
String workCode = flowWork.getCode();
69+
70+
Leave leave = new Leave("我要出去看看");
71+
leaveRepository.save(leave);
72+
73+
// 创建流程
74+
flowService.startFlow(workCode, user, leave, "发起流程");
75+
76+
// 查看我的待办
77+
List<FlowRecord> userTodos = flowRecordRepository.findTodoByOperatorId(user.getUserId(), pageRequest).getContent();
78+
assertEquals(1, userTodos.size());
79+
80+
// 提交流程
81+
FlowRecord userTodo = userTodos.get(0);
82+
flowService.submitFlow(userTodo.getId(), user, leave, Opinion.pass("同意"));
83+
84+
// 查看部门经理的待办
85+
List<FlowRecord> deptTodos = flowRecordRepository.findTodoByOperatorId(dept.getUserId(), pageRequest).getContent();
86+
assertEquals(0, deptTodos.size());
87+
88+
// 查看部门经理的待办
89+
List<FlowRecord> boosTodos = flowRecordRepository.findTodoByOperatorId(boss.getUserId(), pageRequest).getContent();
90+
assertEquals(1, boosTodos.size());
91+
92+
FlowRecord boosTodo = boosTodos.get(0);
93+
flowService.submitFlow(boosTodo.getId(), boss, leave, Opinion.pass("同意"));
94+
95+
deptTodos = flowRecordRepository.findTodoByOperatorId(dept.getUserId(), pageRequest).getContent();
96+
assertEquals(1, deptTodos.size());
97+
98+
FlowRecord deptTodo = deptTodos.get(0);
99+
flowService.submitFlow(deptTodo.getId(), dept, leave, Opinion.pass("同意"));
100+
101+
boosTodos = flowRecordRepository.findTodoByOperatorId(boss.getUserId(), pageRequest).getContent();
102+
assertEquals(1, boosTodos.size());
103+
104+
boosTodo = boosTodos.get(0);
105+
flowService.submitFlow(boosTodo.getId(), boss, leave, Opinion.pass("同意"));
106+
107+
// 查看所有流程
108+
List<FlowRecord> records = flowRecordRepository.findAll(pageRequest).getContent();
109+
assertEquals(5, records.size());
110+
111+
userTodos = flowRecordRepository.findTodoByOperatorId(user.getUserId(), pageRequest).getContent();
112+
assertEquals(0, userTodos.size());
113+
114+
records = flowRecordRepository.findAll(pageRequest).getContent();
115+
assertEquals(5, records.size());
116+
// 查看所有流程是否都已经结束
117+
assertTrue(records.stream().allMatch(FlowRecord::isFinish));
118+
119+
List<BindDataSnapshot> snapshots = flowBindDataRepository.findAll();
120+
assertEquals(6, snapshots.size());
121+
122+
123+
}
124+
}

0 commit comments

Comments
 (0)