Skip to content

Commit d9a967e

Browse files
committed
fix #71
1 parent 1bb25d2 commit d9a967e

File tree

8 files changed

+806
-150
lines changed

8 files changed

+806
-150
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,52 @@
11
package com.codingapi.springboot.flow.query;
22

33
import com.codingapi.springboot.flow.record.FlowRecord;
4-
5-
import java.util.List;
4+
import org.springframework.data.domain.Page;
5+
import org.springframework.data.domain.PageRequest;
66

77
public interface FlowRecordQuery {
88

9-
List<FlowRecord> findAll();
9+
10+
Page<FlowRecord> findAll(PageRequest pageRequest);
1011

1112
/**
1213
* 查看个人的待办数据
14+
*
15+
* @param operatorId 操作人
16+
* @return 流程记录
17+
*/
18+
Page<FlowRecord> findTodoByOperatorId(long operatorId, PageRequest pageRequest);
19+
20+
21+
/**
22+
* 查看个人的已办数据
23+
* @param operatorId 操作人
24+
* @return 流程记录
25+
*/
26+
Page<FlowRecord> findDoneByOperatorId(long operatorId, PageRequest pageRequest);
27+
28+
29+
/**
30+
* 查看个人的发起数据 (含待办与已办)
31+
* @param operatorId 操作人
32+
* @return 流程记录
33+
*/
34+
Page<FlowRecord> findInitiatedByOperatorId(long operatorId, PageRequest pageRequest);
35+
36+
37+
/**
38+
* 查看个人的超时的待办流程
39+
* @param operatorId 操作人
40+
* @return 流程记录
41+
*/
42+
Page<FlowRecord> findTimeoutTodoByOperatorId(long operatorId, PageRequest pageRequest);
43+
44+
45+
/**
46+
* 查看个人的延期的待办流程
1347
* @param operatorId 操作人
14-
* @return 流程
48+
* @return 流程记录
1549
*/
16-
List<FlowRecord> findTodoByOperatorId(long operatorId);
50+
Page<FlowRecord> findPostponedTodoByOperatorId(long operatorId, PageRequest pageRequest);
1751

1852
}

springboot-starter-flow/src/main/java/com/codingapi/springboot/flow/record/FlowRecord.java

+32-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.codingapi.springboot.flow.record;
22

33
import com.codingapi.springboot.flow.bind.BindDataSnapshot;
4+
import com.codingapi.springboot.flow.domain.FlowNode;
45
import com.codingapi.springboot.flow.domain.Opinion;
56
import com.codingapi.springboot.flow.em.FlowStatus;
67
import com.codingapi.springboot.flow.em.RecodeType;
@@ -126,19 +127,30 @@ public class FlowRecord {
126127

127128
/**
128129
* 延期时间
130+
*
129131
* @param postponedMax 最大延期次数
130-
* @param time 延期时间(毫秒)
132+
* @param time 延期时间(毫秒)
131133
*/
132-
public void postponedTime(int postponedMax,long time) {
133-
if(this.postponedCount>=postponedMax){
134+
public void postponedTime(int postponedMax, long time) {
135+
if (this.postponedCount >= postponedMax) {
134136
throw new IllegalArgumentException("postponed count is max");
135137
}
136138
this.read();
139+
if (this.timeoutTime == 0) {
140+
this.timeoutTime = System.currentTimeMillis();
141+
}
137142
this.timeoutTime += time;
138143
this.postponedCount++;
139144
this.updateTime = System.currentTimeMillis();
140145
}
141146

147+
/**
148+
* 是否是发起节点
149+
*/
150+
public boolean isInitiated() {
151+
return preId == 0 && this.nodeCode.equals(FlowNode.CODE_START);
152+
}
153+
142154
/**
143155
* 已读
144156
*/
@@ -343,4 +355,21 @@ public void toTodo(String title, IFlowOperator operator) {
343355
this.pass = false;
344356
this.currentOperatorId = operator.getUserId();
345357
}
358+
359+
/**
360+
* 是否超时
361+
*/
362+
public boolean isTimeout() {
363+
if (this.timeoutTime == 0) {
364+
return false;
365+
}
366+
return System.currentTimeMillis() > this.timeoutTime;
367+
}
368+
369+
/**
370+
* 是否延期
371+
*/
372+
public boolean isPostponed() {
373+
return this.postponedCount > 0;
374+
}
346375
}

springboot-starter-flow/src/test/java/com/codingapi/springboot/flow/repository/FlowRecordRepositoryImpl.java

+32-4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
import com.codingapi.springboot.flow.query.FlowRecordQuery;
44
import com.codingapi.springboot.flow.record.FlowRecord;
5+
import org.springframework.data.domain.Page;
6+
import org.springframework.data.domain.PageImpl;
7+
import org.springframework.data.domain.PageRequest;
58

69
import java.util.ArrayList;
710
import java.util.List;
@@ -51,14 +54,39 @@ public List<FlowRecord> findTodoFlowRecordByProcessId(String processId) {
5154
return cache.stream().filter(record -> record.isTodo() && record.getProcessId().equals(processId)).toList();
5255
}
5356

57+
public Page<FlowRecord> findAll(PageRequest pageRequest) {
58+
return new PageImpl<>(cache);
59+
}
60+
61+
@Override
62+
public Page<FlowRecord> findDoneByOperatorId(long operatorId,PageRequest pageRequest) {
63+
List<FlowRecord> flowRecords = cache.stream().filter(record -> record.isDone() && record.getCurrentOperatorId() == operatorId).toList();
64+
return new PageImpl<>(flowRecords);
65+
}
66+
67+
@Override
68+
public Page<FlowRecord> findInitiatedByOperatorId(long operatorId,PageRequest pageRequest) {
69+
List<FlowRecord> flowRecords = cache.stream().filter(record -> record.isInitiated() && record.getCreateOperatorId() == operatorId).toList();
70+
return new PageImpl<>(flowRecords);
71+
}
72+
73+
@Override
74+
public Page<FlowRecord> findTodoByOperatorId(long operatorId,PageRequest pageRequest) {
75+
List<FlowRecord> flowRecords = cache.stream().filter(record -> record.isTodo() && record.getCurrentOperatorId() == operatorId).toList();
76+
return new PageImpl<>(flowRecords);
77+
}
78+
5479
@Override
55-
public List<FlowRecord> findAll() {
56-
return cache;
80+
public Page<FlowRecord> findTimeoutTodoByOperatorId(long operatorId,PageRequest pageRequest) {
81+
List<FlowRecord> flowRecords = cache.stream().filter(record -> record.isTimeout() && record.isTodo() && record.getCurrentOperatorId() == operatorId).toList();
82+
return new PageImpl<>(flowRecords);
5783
}
5884

85+
5986
@Override
60-
public List<FlowRecord> findTodoByOperatorId(long operatorId) {
61-
return cache.stream().filter(record -> record.isTodo() && record.getCurrentOperatorId() == operatorId).toList();
87+
public Page<FlowRecord> findPostponedTodoByOperatorId(long operatorId,PageRequest pageRequest) {
88+
List<FlowRecord> flowRecords = cache.stream().filter(record -> record.isPostponed() && record.isTodo() && record.getCurrentOperatorId() == operatorId).toList();
89+
return new PageImpl<>(flowRecords);
6290
}
6391

6492
@Override

springboot-starter-flow/src/test/java/com/codingapi/springboot/flow/test/ErrorTest.java

+16-12
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import com.codingapi.springboot.flow.service.FlowService;
1515
import com.codingapi.springboot.flow.user.User;
1616
import org.junit.jupiter.api.Test;
17+
import org.springframework.data.domain.PageRequest;
1718

1819
import java.util.List;
1920

@@ -37,6 +38,7 @@ public class ErrorTest {
3738
*/
3839
@Test
3940
void errorMatcherOperatorTest(){
41+
PageRequest pageRequest = PageRequest.of(0, 1000);
4042
User user = new User("张飞");
4143
userRepository.save(user);
4244

@@ -71,7 +73,7 @@ void errorMatcherOperatorTest(){
7173
flowService.startFlow(workId, user, leave, "发起流程");
7274

7375
// 查看我的待办
74-
List<FlowRecord> userTodos = flowRecordRepository.findTodoByOperatorId(user.getUserId());
76+
List<FlowRecord> userTodos = flowRecordRepository.findTodoByOperatorId(user.getUserId(), pageRequest).getContent();
7577
assertEquals(1, userTodos.size());
7678

7779
// 提交流程
@@ -89,32 +91,32 @@ void errorMatcherOperatorTest(){
8991
flowService.submitFlow(userTodo.getId(), user, leave, Opinion.pass("同意"));
9092

9193
// 查看部门经理的待办
92-
List<FlowRecord> deptTodos = flowRecordRepository.findTodoByOperatorId(dept.getUserId());
94+
List<FlowRecord> deptTodos = flowRecordRepository.findTodoByOperatorId(dept.getUserId(), pageRequest).getContent();
9395
assertEquals(1, deptTodos.size());
9496

9597
// 提交部门经理的审批
9698
FlowRecord deptTodo = deptTodos.get(0);
9799
flowService.submitFlow(deptTodo.getId(), dept, leave, Opinion.pass("同意"));
98100

99101
// 查看总经理的待办
100-
List<FlowRecord> bossTodos = flowRecordRepository.findTodoByOperatorId(boss.getUserId());
102+
List<FlowRecord> bossTodos = flowRecordRepository.findTodoByOperatorId(boss.getUserId(), pageRequest).getContent();
101103
assertEquals(1, bossTodos.size());
102104

103105
// 提交总经理的审批
104106
FlowRecord bossTodo = bossTodos.get(0);
105107
flowService.submitFlow(bossTodo.getId(), boss, leave, Opinion.pass("同意"));
106108

107109
// 查看所有流程
108-
List<FlowRecord> records = flowRecordRepository.findAll();
110+
List<FlowRecord> records = flowRecordRepository.findAll(pageRequest).getContent();
109111
assertEquals(4, records.size());
110112

111-
userTodos = flowRecordRepository.findTodoByOperatorId(user.getUserId());
113+
userTodos = flowRecordRepository.findTodoByOperatorId(user.getUserId(), pageRequest).getContent();
112114
assertEquals(1, userTodos.size());
113115

114116
userTodo = userTodos.get(0);
115117
flowService.submitFlow(userTodo.getId(), user, leave, Opinion.pass("同意"));
116118

117-
records = flowRecordRepository.findAll();
119+
records = flowRecordRepository.findAll(pageRequest).getContent();
118120
assertEquals(4, records.size());
119121
// 查看所有流程是否都已经结束
120122
assertTrue(records.stream().allMatch(FlowRecord::isFinish));
@@ -131,6 +133,8 @@ void errorMatcherOperatorTest(){
131133
*/
132134
@Test
133135
void errorMatcherNodeTest(){
136+
137+
PageRequest pageRequest = PageRequest.of(0,1000);
134138
User user = new User("张飞");
135139
userRepository.save(user);
136140

@@ -165,7 +169,7 @@ void errorMatcherNodeTest(){
165169
flowService.startFlow(workId, user, leave, "发起流程");
166170

167171
// 查看我的待办
168-
List<FlowRecord> userTodos = flowRecordRepository.findTodoByOperatorId(user.getUserId());
172+
List<FlowRecord> userTodos = flowRecordRepository.findTodoByOperatorId(user.getUserId(), pageRequest).getContent();
169173
assertEquals(1, userTodos.size());
170174

171175
// 提交流程
@@ -183,28 +187,28 @@ void errorMatcherNodeTest(){
183187
flowService.submitFlow(userTodo.getId(), user, leave, Opinion.pass("同意"));
184188

185189
// 查看部门经理的待办
186-
List<FlowRecord> deptTodos = flowRecordRepository.findTodoByOperatorId(dept.getUserId());
190+
List<FlowRecord> deptTodos = flowRecordRepository.findTodoByOperatorId(dept.getUserId(), pageRequest).getContent();
187191
assertEquals(0, deptTodos.size());
188192

189193
// 查看总经理的待办
190-
List<FlowRecord> bossTodos = flowRecordRepository.findTodoByOperatorId(boss.getUserId());
194+
List<FlowRecord> bossTodos = flowRecordRepository.findTodoByOperatorId(boss.getUserId(), pageRequest).getContent();
191195
assertEquals(1, bossTodos.size());
192196

193197
// 提交总经理的审批
194198
FlowRecord bossTodo = bossTodos.get(0);
195199
flowService.submitFlow(bossTodo.getId(), boss, leave, Opinion.pass("同意"));
196200

197201
// 查看所有流程
198-
List<FlowRecord> records = flowRecordRepository.findAll();
202+
List<FlowRecord> records = flowRecordRepository.findAll(pageRequest).getContent();
199203
assertEquals(3, records.size());
200204

201-
userTodos = flowRecordRepository.findTodoByOperatorId(user.getUserId());
205+
userTodos = flowRecordRepository.findTodoByOperatorId(user.getUserId(), pageRequest).getContent();
202206
assertEquals(1, userTodos.size());
203207

204208
userTodo = userTodos.get(0);
205209
flowService.submitFlow(userTodo.getId(), user, leave, Opinion.pass("同意"));
206210

207-
records = flowRecordRepository.findAll();
211+
records = flowRecordRepository.findAll(pageRequest).getContent();
208212
assertEquals(3, records.size());
209213
// 查看所有流程是否都已经结束
210214
assertTrue(records.stream().allMatch(FlowRecord::isFinish));

0 commit comments

Comments
 (0)