Skip to content

Commit b39881f

Browse files
authored
Merge pull request #74 from codingapi/dev
Dev
2 parents a7f177e + a6f8532 commit b39881f

File tree

62 files changed

+632
-243
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+632
-243
lines changed

.DS_Store

-8 KB
Binary file not shown.

README.md

+8
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ v.3.x 为springboot 3.x版本,使用jdk17版本
1818

1919
* springboot-starter | Springboot领域驱动框架
2020
* springboot-starter-data-fast | 快速数据呈现框架
21+
* springboot-starter-flow | 流程引擎框架
2122
* springboot-starter-security | security权限框架支持基于JWT的无状态权限认证与Redis的有状态权限认证
2223

2324
## SpringBoot DDD Architecture | SpringBoot DDD 框架图
@@ -41,6 +42,13 @@ v.3.x 为springboot 3.x版本,使用jdk17版本
4142
<version>${last.version}</version>
4243
</dependency>
4344
45+
<!-- 快速数据呈现框架 -->
46+
<dependency>
47+
<groupId>com.codingapi.springboot</groupId>
48+
<artifactId>springboot-starter-flow</artifactId>
49+
<version>${last.version}</version>
50+
</dependency>
51+
4452
<!-- security&jwt权限框架 -->
4553
<dependency>
4654
<groupId>com.codingapi.springboot</groupId>

admin-ui/src/components/Flow/utils/script.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
class GroovyScript {
44

55
public static defaultOutTrigger = "def run(content) {return true;}";
6-
public static defaultTitleGenerator = "def run(content){ return content.getCreateOperator().getName() + \'-\' + content.getFlowWork().getTitle() + \'-\' + content.getFlowNode().getName();}";
6+
public static defaultTitleGenerator = "def run(content){ return content.getCurrentOperator().getName() + '-' + content.getFlowWork().getTitle() + '-' + content.getFlowNode().getName();}";
77

88
public static anyOperatorMatcher="def run(content) {return [content.getCurrentOperator().getUserId()];}";
99
public static creatorOperatorMatcher="def run(content) {return [content.getCreateOperator().getUserId()];}";

admin-ui/src/pages/flow/leave/index.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ const LeavePage = () => {
9292
>
9393

9494
<ProFormText
95-
name={"flowId"}
95+
name={"flowCode"}
9696
hidden={true}
9797
/>
9898

@@ -143,7 +143,7 @@ const LeavePage = () => {
143143

144144
<FlowSelect visible={flowSelectVisible} setVisible={setFlowSelectVisible} onSelect={(flow) => {
145145

146-
form.setFieldValue('flowId', flow.id);
146+
form.setFieldValue('flowCode', flow.code);
147147
form.setFieldValue('flowName', flow.title);
148148

149149
}}/>

admin-ui/src/pages/flow/work/index.tsx

+15
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,10 @@ const FlowPage = () => {
7575
dataIndex: 'id',
7676
search: false,
7777
},
78+
{
79+
title: '编码',
80+
dataIndex: 'code',
81+
},
7882
{
7983
title: '标题',
8084
dataIndex: 'title',
@@ -218,6 +222,17 @@ const FlowPage = () => {
218222
]}
219223
/>
220224

225+
<ProFormText
226+
name={"code"}
227+
label={"编码"}
228+
rules={[
229+
{
230+
required: true,
231+
message: "请输入编码"
232+
}
233+
]}
234+
/>
235+
221236
<ProFormTextArea
222237
name={"description"}
223238
label={"描述"}

example/example-application/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<artifactId>springboot-example</artifactId>
77
<groupId>com.codingapi.springboot</groupId>
8-
<version>3.3.1</version>
8+
<version>3.3.3</version>
99
</parent>
1010
<modelVersion>4.0.0</modelVersion>
1111

example/example-application/src/main/java/com/codingapi/example/command/FlowRecordCmdController.java

+7-8
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
import com.codingapi.example.domain.User;
44
import com.codingapi.example.pojo.cmd.FlowCmd;
55
import com.codingapi.example.repository.UserRepository;
6-
import com.codingapi.springboot.flow.pojo.FlowDetail;
6+
import com.codingapi.springboot.flow.pojo.FlowResult;
7+
import com.codingapi.springboot.flow.record.FlowRecord;
78
import com.codingapi.springboot.flow.service.FlowService;
89
import com.codingapi.springboot.framework.dto.response.Response;
910
import com.codingapi.springboot.framework.dto.response.SingleResponse;
@@ -24,22 +25,20 @@ public class FlowRecordCmdController {
2425
private final UserRepository userRepository;
2526

2627
@PostMapping("/startFlow")
27-
public Response startFlow(@RequestBody FlowCmd.StartFlow request) {
28+
public SingleResponse<FlowResult> startFlow(@RequestBody FlowCmd.StartFlow request) {
2829
User current = userRepository.getUserByUsername(request.getUserName());
29-
flowService.startFlow(request.getWorkId(), current, request.getBindData(), request.getAdvice());
30-
return Response.buildSuccess();
30+
return SingleResponse.of(flowService.startFlow(request.getWorkCode(), current, request.getBindData(), request.getAdvice()));
3131
}
3232

3333

3434
@PostMapping("/submitFlow")
35-
public Response submitFlow(@RequestBody FlowCmd.SubmitFlow request) {
35+
public SingleResponse<FlowResult> submitFlow(@RequestBody FlowCmd.SubmitFlow request) {
3636
User current = userRepository.getUserByUsername(request.getUserName());
3737
if(current.isFlowManager()){
38-
flowService.interfere(request.getRecordId(), current, request.getBindData(), request.getOpinion());
38+
return SingleResponse.of(flowService.interfere(request.getRecordId(), current, request.getBindData(), request.getOpinion()));
3939
}else {
40-
flowService.submitFlow(request.getRecordId(), current, request.getBindData(), request.getOpinion());
40+
return SingleResponse.of(flowService.submitFlow(request.getRecordId(), current, request.getBindData(), request.getOpinion()));
4141
}
42-
return Response.buildSuccess();
4342
}
4443

4544

example/example-application/src/main/java/com/codingapi/example/command/LeaveCmdController.java

+4-5
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44
import com.codingapi.example.domain.User;
55
import com.codingapi.example.pojo.cmd.LeaveCmd;
66
import com.codingapi.example.repository.UserRepository;
7+
import com.codingapi.springboot.flow.pojo.FlowResult;
78
import com.codingapi.springboot.flow.service.FlowService;
8-
import com.codingapi.springboot.framework.dto.response.Response;
9+
import com.codingapi.springboot.framework.dto.response.SingleResponse;
910
import lombok.AllArgsConstructor;
1011
import org.springframework.web.bind.annotation.PostMapping;
1112
import org.springframework.web.bind.annotation.RequestBody;
@@ -22,7 +23,7 @@ public class LeaveCmdController {
2223

2324

2425
@PostMapping("/startLeave")
25-
public Response startLeave(@RequestBody LeaveCmd.StartLeave request) {
26+
public SingleResponse<FlowResult> startLeave(@RequestBody LeaveCmd.StartLeave request) {
2627
User user = userRepository.getUserByUsername(request.getUsername());
2728

2829
Leave leave = new Leave();
@@ -31,8 +32,6 @@ public Response startLeave(@RequestBody LeaveCmd.StartLeave request) {
3132
leave.setDays(request.getDays());
3233
leave.setCreateTime(System.currentTimeMillis());
3334

34-
flowService.startFlow(request.getFlowId(), user, leave, request.getDesc());
35-
36-
return Response.buildSuccess();
35+
return SingleResponse.of(flowService.startFlow(request.getFlowCode(), user, leave, request.getDesc()));
3736
}
3837
}

example/example-application/src/main/java/com/codingapi/example/pojo/cmd/FlowCmd.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public class FlowCmd {
1414
@Getter
1515
public static class StartFlow {
1616

17-
private long workId;
17+
private String workCode;
1818
private String advice;
1919
private JSONObject formData;
2020

example/example-application/src/main/java/com/codingapi/example/pojo/cmd/FlowWorkCmd.java

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public static class CreateRequest{
1313

1414
private long id;
1515
private String title;
16+
private String code;
1617
private String description;
1718
private int postponedMax;
1819

example/example-application/src/main/java/com/codingapi/example/pojo/cmd/LeaveCmd.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public class LeaveCmd {
1111
public static class StartLeave{
1212
private String desc;
1313
private int days;
14-
private long flowId;
14+
private String flowCode;
1515

1616

1717
public String getUsername(){

example/example-application/src/main/java/com/codingapi/example/router/FlowWorkRouter.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,12 @@ public void save(FlowWorkCmd.CreateRequest request) {
2626
User user = userRepository.getUserByUsername(request.getUsername());
2727
long id = request.getId();
2828
if (id == 0) {
29-
FlowWork flowWork = new FlowWork(request.getTitle(), request.getDescription(), request.getPostponedMax(), user);
29+
FlowWork flowWork = new FlowWork(request.getCode(),request.getTitle(), request.getDescription(), request.getPostponedMax(), user);
3030
flowWorkRepository.save(flowWork);
3131
} else {
3232
FlowWorkEntity flowWork = flowWorkEntityRepository.getFlowWorkEntityById(id);
3333
flowWork.setTitle(request.getTitle());
34+
flowWork.setCode(request.getCode());
3435
flowWork.setDescription(request.getDescription());
3536
flowWork.setPostponedMax(request.getPostponedMax());
3637
flowWork.setUpdateTime(System.currentTimeMillis());

example/example-domain/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<artifactId>springboot-example</artifactId>
77
<groupId>com.codingapi.springboot</groupId>
8-
<version>3.3.1</version>
8+
<version>3.3.3</version>
99
</parent>
1010
<modelVersion>4.0.0</modelVersion>
1111

example/example-infra-flow/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<artifactId>springboot-example</artifactId>
77
<groupId>com.codingapi.springboot</groupId>
8-
<version>3.3.1</version>
8+
<version>3.3.3</version>
99
</parent>
1010
<modelVersion>4.0.0</modelVersion>
1111

example/example-infra-flow/src/main/java/com/codingapi/example/convert/FlowRecordConvertor.java

+16-11
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
public class FlowRecordConvertor {
1212

13-
public static FlowRecordEntity convert(FlowRecord flowRecord, UserRepository userRepository) {
13+
public static FlowRecordEntity convert(FlowRecord flowRecord) {
1414
if (flowRecord == null) {
1515
return null;
1616
}
@@ -22,7 +22,7 @@ public static FlowRecordEntity convert(FlowRecord flowRecord, UserRepository use
2222
entity.setProcessId(flowRecord.getProcessId());
2323
entity.setNodeCode(flowRecord.getNodeCode());
2424
entity.setTitle(flowRecord.getTitle());
25-
entity.setCurrentOperatorId(flowRecord.getCurrentOperatorId());
25+
entity.setCurrentOperatorId(flowRecord.getCurrentOperator().getUserId());
2626
entity.setFlowType(flowRecord.getFlowType().name());
2727
if (flowRecord.getFlowSourceDirection() != null) {
2828
entity.setFlowSourceDirection(flowRecord.getFlowSourceDirection().name());
@@ -32,32 +32,34 @@ public static FlowRecordEntity convert(FlowRecord flowRecord, UserRepository use
3232
entity.setFinishTime(flowRecord.getFinishTime());
3333
entity.setTimeoutTime(flowRecord.getTimeoutTime());
3434
entity.setPostponedCount(flowRecord.getPostponedCount());
35-
entity.setCreateOperatorId(flowRecord.getCreateOperatorId());
35+
entity.setCreateOperatorId(flowRecord.getCreateOperator().getUserId());
3636
if (flowRecord.getOpinion() != null) {
3737
entity.setOpinionAdvice(flowRecord.getOpinion().getAdvice());
3838
entity.setOpinionType(flowRecord.getOpinion().getType());
3939
entity.setOpinionResult(flowRecord.getOpinion().getResult());
4040
}
4141

42-
entity.setCurrentOperatorName(userRepository.getUserById(flowRecord.getCurrentOperatorId()).getName());
43-
entity.setCreateOperatorName(userRepository.getUserById(flowRecord.getCreateOperatorId()).getName());
42+
43+
entity.setCurrentOperatorName(flowRecord.getCurrentOperator().getName());
44+
entity.setCreateOperatorName(flowRecord.getCreateOperator().getName());
4445

4546
entity.setFlowStatus(flowRecord.getFlowStatus().name());
4647
entity.setErrMessage(flowRecord.getErrMessage());
4748
entity.setBindClass(flowRecord.getBindClass());
4849
entity.setSnapshotId(flowRecord.getSnapshotId());
4950
entity.setRead(flowRecord.isRead());
5051
entity.setInterfere(flowRecord.isInterfere());
51-
entity.setInterferedOperatorId(flowRecord.getInterferedOperatorId());
52-
if (flowRecord.isInterfere() && flowRecord.getInterferedOperatorId() > 0) {
53-
entity.setInterferedOperatorName(userRepository.getUserById(flowRecord.getInterferedOperatorId()).getName());
52+
53+
if (flowRecord.getInterferedOperator()!=null) {
54+
entity.setInterferedOperatorId(flowRecord.getInterferedOperator().getUserId());
55+
entity.setInterferedOperatorName(flowRecord.getInterferedOperator().getName());
5456
}
5557
entity.setReadTime(flowRecord.getReadTime());
5658
return entity;
5759
}
5860

5961

60-
public static FlowRecord convert(FlowRecordEntity entity) {
62+
public static FlowRecord convert(FlowRecordEntity entity, UserRepository userRepository) {
6163
if (entity == null) {
6264
return null;
6365
}
@@ -69,15 +71,15 @@ public static FlowRecord convert(FlowRecordEntity entity) {
6971
flowRecord.setProcessId(entity.getProcessId());
7072
flowRecord.setNodeCode(entity.getNodeCode());
7173
flowRecord.setTitle(entity.getTitle());
72-
flowRecord.setCurrentOperatorId(entity.getCurrentOperatorId());
74+
flowRecord.setCurrentOperator(userRepository.getUserById(entity.getCurrentOperatorId()));
7375
flowRecord.setFlowType(FlowType.parser(entity.getFlowType()));
7476
flowRecord.setFlowSourceDirection(FlowSourceDirection.parser(entity.getFlowSourceDirection()));
7577
flowRecord.setCreateTime(entity.getCreateTime());
7678
flowRecord.setUpdateTime(entity.getUpdateTime());
7779
flowRecord.setFinishTime(entity.getFinishTime());
7880
flowRecord.setTimeoutTime(entity.getTimeoutTime());
7981
flowRecord.setPostponedCount(entity.getPostponedCount());
80-
flowRecord.setCreateOperatorId(entity.getCreateOperatorId());
82+
flowRecord.setCreateOperator(userRepository.getUserById(entity.getCreateOperatorId()));
8183
if (entity.getOpinionResult() != null && entity.getOpinionType() != null) {
8284
flowRecord.setOpinion(new Opinion(entity.getOpinionAdvice(), entity.getOpinionResult(), entity.getOpinionType()));
8385
}
@@ -87,6 +89,9 @@ public static FlowRecord convert(FlowRecordEntity entity) {
8789
flowRecord.setSnapshotId(entity.getSnapshotId());
8890
flowRecord.setRead(entity.getRead());
8991
flowRecord.setInterfere(entity.getInterfere());
92+
if(entity.getInterferedOperatorId()!=null) {
93+
flowRecord.setInterferedOperator(userRepository.getUserById(entity.getInterferedOperatorId()));
94+
}
9095
flowRecord.setReadTime(entity.getReadTime());
9196
return flowRecord;
9297
}

example/example-infra-flow/src/main/java/com/codingapi/example/convert/FlowWorkConvertor.java

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public static FlowWorkEntity convert(FlowWork flowWork) {
1212
}
1313
FlowWorkEntity entity = new FlowWorkEntity();
1414
entity.setId(flowWork.getId());
15+
entity.setCode(flowWork.getCode());
1516
entity.setTitle(flowWork.getTitle());
1617
entity.setDescription(flowWork.getDescription());
1718
entity.setCreateUser(flowWork.getCreateUser().getUserId());

example/example-infra-flow/src/main/java/com/codingapi/example/entity/FlowWorkEntity.java

+3
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ public class FlowWorkEntity {
1313
@GeneratedValue(strategy = GenerationType.IDENTITY)
1414
private Long id;
1515

16+
@Column(unique = true)
17+
private String code;
18+
1619
private String title;
1720

1821
private String description;

example/example-infra-flow/src/main/java/com/codingapi/example/jpa/FlowWorkEntityRepository.java

+2
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,6 @@ public interface FlowWorkEntityRepository extends FastRepository<FlowWorkEntity,
88

99
FlowWorkEntity getFlowWorkEntityById(long id);
1010

11+
FlowWorkEntity getFlowWorkEntityByCode(String code);
12+
1113
}

example/example-infra-flow/src/main/java/com/codingapi/example/query/FlowRecordQueryImpl.java

+8-6
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.codingapi.example.convert.FlowRecordConvertor;
44
import com.codingapi.example.entity.FlowRecordEntity;
55
import com.codingapi.example.jpa.FlowRecordEntityRepository;
6+
import com.codingapi.example.repository.UserRepository;
67
import com.codingapi.springboot.flow.query.FlowRecordQuery;
78
import com.codingapi.springboot.flow.record.FlowRecord;
89
import lombok.AllArgsConstructor;
@@ -15,41 +16,42 @@
1516
public class FlowRecordQueryImpl implements FlowRecordQuery {
1617

1718
private final FlowRecordEntityRepository flowRecordEntityRepository;
19+
private final UserRepository userRepository;
1820

1921

2022
@Override
2123
public Page<FlowRecord> findAll(PageRequest pageRequest) {
2224
Page<FlowRecordEntity> page = flowRecordEntityRepository.findAll(pageRequest);
23-
return page.map(FlowRecordConvertor::convert);
25+
return page.map(item->FlowRecordConvertor.convert(item,userRepository));
2426
}
2527

2628
@Override
2729
public Page<FlowRecord> findTodoByOperatorId(long operatorId, PageRequest pageRequest) {
2830
Page<FlowRecordEntity> page = flowRecordEntityRepository.findTodoByOperatorId(operatorId,pageRequest);
29-
return page.map(FlowRecordConvertor::convert);
31+
return page.map(item->FlowRecordConvertor.convert(item,userRepository));
3032
}
3133

3234
@Override
3335
public Page<FlowRecord> findDoneByOperatorId(long operatorId, PageRequest pageRequest) {
3436
Page<FlowRecordEntity> page = flowRecordEntityRepository.findDoneByOperatorId(operatorId,pageRequest);
35-
return page.map(FlowRecordConvertor::convert);
37+
return page.map(item->FlowRecordConvertor.convert(item,userRepository));
3638
}
3739

3840
@Override
3941
public Page<FlowRecord> findInitiatedByOperatorId(long operatorId, PageRequest pageRequest) {
4042
Page<FlowRecordEntity> page = flowRecordEntityRepository.findInitiatedByOperatorId(operatorId,pageRequest);
41-
return page.map(FlowRecordConvertor::convert);
43+
return page.map(item->FlowRecordConvertor.convert(item,userRepository));
4244
}
4345

4446
@Override
4547
public Page<FlowRecord> findTimeoutTodoByOperatorId(long operatorId, PageRequest pageRequest) {
4648
Page<FlowRecordEntity> page = flowRecordEntityRepository.findTimeoutTodoByOperatorId(operatorId,System.currentTimeMillis(), pageRequest);
47-
return page.map(FlowRecordConvertor::convert);
49+
return page.map(item->FlowRecordConvertor.convert(item,userRepository));
4850
}
4951

5052
@Override
5153
public Page<FlowRecord> findPostponedTodoByOperatorId(long operatorId, PageRequest pageRequest) {
5254
Page<FlowRecordEntity> page = flowRecordEntityRepository.findPostponedTodoByOperatorId(operatorId,pageRequest);
53-
return page.map(FlowRecordConvertor::convert);
55+
return page.map(item->FlowRecordConvertor.convert(item,userRepository));
5456
}
5557
}

0 commit comments

Comments
 (0)