diff --git a/example/example-app/example-app-cmd-domain/pom.xml b/example/example-app/example-app-cmd-domain/pom.xml
index c370028c..018eb07e 100644
--- a/example/example-app/example-app-cmd-domain/pom.xml
+++ b/example/example-app/example-app-cmd-domain/pom.xml
@@ -6,7 +6,7 @@
com.codingapi.springboot
example-app
- 3.3.68
+ 3.3.69
../pom.xml
diff --git a/example/example-app/example-app-cmd-meta/pom.xml b/example/example-app/example-app-cmd-meta/pom.xml
index ed09466e..91e50b72 100644
--- a/example/example-app/example-app-cmd-meta/pom.xml
+++ b/example/example-app/example-app-cmd-meta/pom.xml
@@ -6,7 +6,7 @@
com.codingapi.springboot
example-app
- 3.3.68
+ 3.3.69
../pom.xml
diff --git a/example/example-app/example-app-query/pom.xml b/example/example-app/example-app-query/pom.xml
index fe11d075..222bedd8 100644
--- a/example/example-app/example-app-query/pom.xml
+++ b/example/example-app/example-app-query/pom.xml
@@ -6,7 +6,7 @@
com.codingapi.springboot
example-app
- 3.3.68
+ 3.3.69
../pom.xml
diff --git a/example/example-app/pom.xml b/example/example-app/pom.xml
index a222df23..c98cb078 100644
--- a/example/example-app/pom.xml
+++ b/example/example-app/pom.xml
@@ -6,7 +6,7 @@
com.codingapi.springboot
springboot-example
- 3.3.68
+ 3.3.69
../pom.xml
pom
diff --git a/example/example-domain/example-domain-leave/pom.xml b/example/example-domain/example-domain-leave/pom.xml
index 1b37d3d2..4ad8b661 100644
--- a/example/example-domain/example-domain-leave/pom.xml
+++ b/example/example-domain/example-domain-leave/pom.xml
@@ -6,7 +6,7 @@
com.codingapi.springboot
example-domain
- 3.3.68
+ 3.3.69
../pom.xml
diff --git a/example/example-domain/example-domain-user/pom.xml b/example/example-domain/example-domain-user/pom.xml
index 54d39e76..663a36ef 100644
--- a/example/example-domain/example-domain-user/pom.xml
+++ b/example/example-domain/example-domain-user/pom.xml
@@ -6,7 +6,7 @@
com.codingapi.springboot
example-domain
- 3.3.68
+ 3.3.69
../pom.xml
diff --git a/example/example-domain/pom.xml b/example/example-domain/pom.xml
index c12b6466..538032d2 100644
--- a/example/example-domain/pom.xml
+++ b/example/example-domain/pom.xml
@@ -5,7 +5,7 @@
com.codingapi.springboot
springboot-example
- 3.3.68
+ 3.3.69
../pom.xml
4.0.0
diff --git a/example/example-infra/example-infra-flow/pom.xml b/example/example-infra/example-infra-flow/pom.xml
index 44d8f0c6..fc684dce 100644
--- a/example/example-infra/example-infra-flow/pom.xml
+++ b/example/example-infra/example-infra-flow/pom.xml
@@ -5,7 +5,7 @@
com.codingapi.springboot
example-infra
- 3.3.68
+ 3.3.69
../pom.xml
diff --git a/example/example-infra/example-infra-jpa/pom.xml b/example/example-infra/example-infra-jpa/pom.xml
index 5e9b6a28..176af819 100644
--- a/example/example-infra/example-infra-jpa/pom.xml
+++ b/example/example-infra/example-infra-jpa/pom.xml
@@ -5,7 +5,7 @@
com.codingapi.springboot
example-infra
- 3.3.68
+ 3.3.69
../pom.xml
diff --git a/example/example-infra/example-infra-security/pom.xml b/example/example-infra/example-infra-security/pom.xml
index 8542f6be..853d2136 100644
--- a/example/example-infra/example-infra-security/pom.xml
+++ b/example/example-infra/example-infra-security/pom.xml
@@ -6,7 +6,7 @@
com.codingapi.springboot
example-infra
- 3.3.68
+ 3.3.69
../pom.xml
diff --git a/example/example-infra/pom.xml b/example/example-infra/pom.xml
index cb96f73c..a1e121bc 100644
--- a/example/example-infra/pom.xml
+++ b/example/example-infra/pom.xml
@@ -6,7 +6,7 @@
com.codingapi.springboot
springboot-example
- 3.3.68
+ 3.3.69
../pom.xml
pom
diff --git a/example/example-interface/pom.xml b/example/example-interface/pom.xml
index 74fac464..efd87090 100644
--- a/example/example-interface/pom.xml
+++ b/example/example-interface/pom.xml
@@ -6,7 +6,7 @@
com.codingapi.springboot
springboot-example
- 3.3.68
+ 3.3.69
example-interface
diff --git a/example/example-server/pom.xml b/example/example-server/pom.xml
index 248b4b3b..6b885856 100644
--- a/example/example-server/pom.xml
+++ b/example/example-server/pom.xml
@@ -5,7 +5,7 @@
springboot-example
com.codingapi.springboot
- 3.3.68
+ 3.3.69
4.0.0
diff --git a/example/pom.xml b/example/pom.xml
index 0f7f2385..614b8ce5 100644
--- a/example/pom.xml
+++ b/example/pom.xml
@@ -19,7 +19,7 @@
springboot-example
- 3.3.68
+ 3.3.69
springboot-example
springboot-example project for Spring Boot
diff --git a/pom.xml b/pom.xml
index 2694fc12..7749b705 100644
--- a/pom.xml
+++ b/pom.xml
@@ -12,7 +12,7 @@
com.codingapi.springboot
springboot-parent
- 3.3.68
+ 3.3.69
https://github.com/codingapi/springboot-framewrok
springboot-parent
diff --git a/springboot-starter-data-authorization/pom.xml b/springboot-starter-data-authorization/pom.xml
index 15df8892..8e12827a 100644
--- a/springboot-starter-data-authorization/pom.xml
+++ b/springboot-starter-data-authorization/pom.xml
@@ -6,7 +6,7 @@
com.codingapi.springboot
springboot-parent
- 3.3.68
+ 3.3.69
springboot-starter-data-authorization
diff --git a/springboot-starter-data-fast/pom.xml b/springboot-starter-data-fast/pom.xml
index a99cf1b7..794c70ff 100644
--- a/springboot-starter-data-fast/pom.xml
+++ b/springboot-starter-data-fast/pom.xml
@@ -5,7 +5,7 @@
springboot-parent
com.codingapi.springboot
- 3.3.68
+ 3.3.69
4.0.0
diff --git a/springboot-starter-flow/pom.xml b/springboot-starter-flow/pom.xml
index 7bc7020b..46dcc11c 100644
--- a/springboot-starter-flow/pom.xml
+++ b/springboot-starter-flow/pom.xml
@@ -6,7 +6,7 @@
springboot-parent
com.codingapi.springboot
- 3.3.68
+ 3.3.69
springboot-starter-flow
diff --git a/springboot-starter-flow/src/main/java/com/codingapi/springboot/flow/pojo/FlowResult.java b/springboot-starter-flow/src/main/java/com/codingapi/springboot/flow/pojo/FlowResult.java
index 8d83d359..9bdc605b 100644
--- a/springboot-starter-flow/src/main/java/com/codingapi/springboot/flow/pojo/FlowResult.java
+++ b/springboot-starter-flow/src/main/java/com/codingapi/springboot/flow/pojo/FlowResult.java
@@ -37,4 +37,8 @@ public List matchRecordByOperator(IFlowOperator operator){
public boolean isOver() {
return records.stream().allMatch(FlowRecord::isOverNode);
}
+
+ public boolean isStart() {
+ return records.stream().allMatch(FlowRecord::isStartNode);
+ }
}
diff --git a/springboot-starter-flow/src/main/java/com/codingapi/springboot/flow/record/FlowRecord.java b/springboot-starter-flow/src/main/java/com/codingapi/springboot/flow/record/FlowRecord.java
index 819772a4..2f91d341 100644
--- a/springboot-starter-flow/src/main/java/com/codingapi/springboot/flow/record/FlowRecord.java
+++ b/springboot-starter-flow/src/main/java/com/codingapi/springboot/flow/record/FlowRecord.java
@@ -450,4 +450,8 @@ public boolean isStartRecord() {
public boolean isOverNode() {
return this.nodeCode.equals(FlowNode.CODE_OVER);
}
+
+ public boolean isStartNode() {
+ return this.nodeCode.equals(FlowNode.CODE_START);
+ }
}
diff --git a/springboot-starter-flow/src/main/java/com/codingapi/springboot/flow/service/impl/FlowSubmitService.java b/springboot-starter-flow/src/main/java/com/codingapi/springboot/flow/service/impl/FlowSubmitService.java
index abbaedd7..2f8c83c8 100644
--- a/springboot-starter-flow/src/main/java/com/codingapi/springboot/flow/service/impl/FlowSubmitService.java
+++ b/springboot-starter-flow/src/main/java/com/codingapi/springboot/flow/service/impl/FlowSubmitService.java
@@ -230,7 +230,7 @@ private void pushEvent(FlowRecord flowRecord, int eventState) {
*/
public FlowResult submitFlow() {
FlowResult flowResult = this.submitCurrentFlow();
- if (this.isSkipIfSameApprover() && !flowResult.isOver()) {
+ if (this.isSkipIfSameApprover() && !flowResult.isOver() && !flowResult.isStart()) {
List flowRecords = flowResult.matchRecordByOperator(currentOperator);
FlowResult result = flowResult;
if (!flowRecords.isEmpty()) {
diff --git a/springboot-starter-flow/src/test/java/com/codingapi/springboot/flow/test/FlowTest.java b/springboot-starter-flow/src/test/java/com/codingapi/springboot/flow/test/FlowTest.java
index 3ada7ad0..fb30aa70 100644
--- a/springboot-starter-flow/src/test/java/com/codingapi/springboot/flow/test/FlowTest.java
+++ b/springboot-starter-flow/src/test/java/com/codingapi/springboot/flow/test/FlowTest.java
@@ -711,6 +711,88 @@ void postponedAndUrgeTest() {
}
+ /**
+ * 一直退回的测试
+ */
+ @Test
+ void rejectAllTest() {
+ PageRequest pageRequest = PageRequest.of(0, 1000);
+
+ User user = new User("张飞");
+ userRepository.save(user);
+
+ User dept = new User("刘备");
+ userRepository.save(dept);
+
+ User boss = new User("诸葛亮");
+ userRepository.save(boss);
+
+ FlowWork flowWork = FlowWorkBuilder.builder(user)
+ .title("请假流程")
+ .skipIfSameApprover(true)
+ .nodes()
+ .node("开始节点", "start", "default", ApprovalType.UN_SIGN, OperatorMatcher.anyOperatorMatcher())
+ .node("部门领导审批", "dept", "default", ApprovalType.UN_SIGN, OperatorMatcher.specifyOperatorMatcher(user.getUserId()))
+ .node("办公室领导审批", "office", "default", ApprovalType.UN_SIGN, OperatorMatcher.specifyOperatorMatcher(dept.getUserId()))
+ .node("总经理审批", "manager", "default", ApprovalType.UN_SIGN, OperatorMatcher.specifyOperatorMatcher(boss.getUserId()))
+ .node("结束节点", "over", "default", ApprovalType.UN_SIGN, OperatorMatcher.anyOperatorMatcher())
+ .relations()
+ .relation("部门领导审批", "start", "dept")
+ .relation("办公室领导审批", "dept", "office")
+ .relation("总经理审批", "office", "manager")
+ .relation("结束节点", "manager", "over")
+ .build();
+
+ flowWorkRepository.save(flowWork);
+
+ String workCode = flowWork.getCode();
+
+ Leave leave = new Leave("我要出去看看");
+ leaveRepository.save(leave);
+
+ // 创建流程
+ flowService.startFlow(workCode, user, leave, "发起流程");
+
+ // 查看我的待办
+ List userTodos = flowRecordRepository.findTodoByOperatorId(user.getUserId(), pageRequest).getContent();
+ assertEquals(1, userTodos.size());
+
+ // 提交流程
+ FlowRecord userTodo = userTodos.get(0);
+
+ // 查看流程详情
+ FlowDetail flowDetail = flowService.detail(userTodo.getId());
+ assertEquals("我要出去看看", ((Leave) flowDetail.getBindData()).getTitle());
+ assertTrue(flowDetail.getFlowRecord().isUnRead());
+
+
+ flowService.submitFlow(userTodo.getId(), user, leave, Opinion.pass("同意"));
+
+ // 查看部门经理的待办
+ List deptTodos = flowRecordRepository.findTodoByOperatorId(dept.getUserId(), pageRequest).getContent();
+ assertEquals(1, deptTodos.size());
+
+ // 提交部门经理的审批
+ FlowRecord deptTodo = deptTodos.get(0);
+ flowService.submitFlow(deptTodo.getId(), dept, leave, Opinion.reject("不同意"));
+
+ userTodos = flowRecordRepository.findTodoByOperatorId(user.getUserId(), pageRequest).getContent();
+ assertEquals(1, userTodos.size());
+
+ // 提交流程
+ userTodo = userTodos.get(0);
+ flowService.submitFlow(userTodo.getId(), user, leave, Opinion.reject("不同意"));
+
+ userTodos = flowRecordRepository.findTodoByOperatorId(user.getUserId(), pageRequest).getContent();
+ assertEquals(1, userTodos.size());
+
+ userTodo = userTodos.get(0);
+
+ System.out.println(userTodo.getNodeCode());
+
+ assertEquals("start", userTodo.getNodeCode());
+ }
+
/**
* 部门拒绝再提交测试
*/
diff --git a/springboot-starter-security/pom.xml b/springboot-starter-security/pom.xml
index aef8bc2f..fed35c8f 100644
--- a/springboot-starter-security/pom.xml
+++ b/springboot-starter-security/pom.xml
@@ -6,7 +6,7 @@
springboot-parent
com.codingapi.springboot
- 3.3.68
+ 3.3.69
springboot-starter-security
diff --git a/springboot-starter/pom.xml b/springboot-starter/pom.xml
index 79f9c73e..4f1349ef 100644
--- a/springboot-starter/pom.xml
+++ b/springboot-starter/pom.xml
@@ -5,7 +5,7 @@
com.codingapi.springboot
springboot-parent
- 3.3.68
+ 3.3.69
springboot-starter
diff --git a/springboot-starter/src/main/resources/banner.txt b/springboot-starter/src/main/resources/banner.txt
index 6d1333c6..fa2a34bd 100644
--- a/springboot-starter/src/main/resources/banner.txt
+++ b/springboot-starter/src/main/resources/banner.txt
@@ -1,4 +1,4 @@
------------------------------------------------------
-CodingApi SpringBoot-Starter 3.3.68
+CodingApi SpringBoot-Starter 3.3.69
springboot version (${spring-boot.version})
------------------------------------------------------