Skip to content

Commit 126369c

Browse files
committed
fix #72
1 parent 35f9511 commit 126369c

13 files changed

Lines changed: 145 additions & 14 deletions

File tree

flow-engine-framework/src/main/java/com/codingapi/flow/exception/FlowExecutionException.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,16 @@ public static FlowExecutionException routerNodeNotFound(String nodeId) {
5454
String.format("Router node not found: %s", nodeId));
5555
}
5656

57+
/**
58+
* remove version error
59+
*
60+
* @return exception
61+
*/
62+
public static FlowExecutionException removeWorkflowError() {
63+
return new FlowExecutionException("execution.workflowVersion.removeError",
64+
"current version don't remove.");
65+
}
66+
5767
/**
5868
* Create record size error
5969
*

flow-engine-framework/src/main/java/com/codingapi/flow/service/WorkflowService.java

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.codingapi.flow.service;
22

3+
import com.codingapi.flow.exception.FlowExecutionException;
34
import com.codingapi.flow.repository.WorkflowRepository;
45
import com.codingapi.flow.repository.WorkflowRuntimeRepository;
56
import com.codingapi.flow.repository.WorkflowVersionRepository;
@@ -29,7 +30,7 @@ public void saveWorkflowVersion(WorkflowVersion currentVersion, boolean creatabl
2930
if (versionList != null) {
3031

3132
if (!creatable) {
32-
versionList.stream().filter(WorkflowVersion::isCurrent).findFirst().ifPresent(current ->{
33+
versionList.stream().filter(WorkflowVersion::isCurrent).findFirst().ifPresent(current -> {
3334
currentVersion.setId(current.getId());
3435
currentVersion.setVersionName(current.getVersionName());
3536
});
@@ -57,18 +58,26 @@ public Workflow getWorkflow(String workId) {
5758
return workflowRepository.get(workId);
5859
}
5960

61+
public void deleteVersion(long versionId) {
62+
WorkflowVersion version = workflowVersionRepository.get(versionId);
63+
if (version != null && version.isCurrent()) {
64+
throw FlowExecutionException.removeWorkflowError();
65+
}
66+
workflowVersionRepository.delete(versionId);
67+
}
68+
6069

6170
public void changeVersion(long versionId) {
6271
WorkflowVersion currentVersion = workflowVersionRepository.get(versionId);
6372
List<WorkflowVersion> versionList = workflowVersionRepository.findVersion(currentVersion.getWorkId());
6473
if (versionList != null) {
65-
for (WorkflowVersion version:versionList){
66-
if(currentVersion.getId() == version.getId()){
67-
version.enableVersion();
68-
}else {
69-
version.disableVersion();
70-
}
71-
}
74+
for (WorkflowVersion version : versionList) {
75+
if (currentVersion.getId() == version.getId()) {
76+
version.enableVersion();
77+
} else {
78+
version.disableVersion();
79+
}
80+
}
7281
}
7382
workflowVersionRepository.saveAll(versionList);
7483
workflowRepository.save(currentVersion.toWorkflow());
@@ -90,7 +99,7 @@ public void delete(String workId) {
9099

91100
public void saveWorkflow(Workflow workflow) {
92101
WorkflowVersion workflowVersion = new WorkflowVersion(workflow);
93-
this.saveWorkflowVersion(workflowVersion,false);
102+
this.saveWorkflowVersion(workflowVersion, false);
94103
}
95104

96105
public void saveWorkflowRuntime(WorkflowRuntime workflowRuntime) {

flow-engine-starter-api/src/main/java/com/codingapi/flow/api/controller/WorkflowController.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,13 @@ public Response changeVersion(@RequestBody IdRequest request) {
5050
}
5151

5252

53+
@PostMapping("/deleteVersion")
54+
public Response deleteVersion(@RequestBody IdRequest request) {
55+
workflowService.deleteVersion(request.getLongId());
56+
return Response.buildSuccess();
57+
}
58+
59+
5360
@PostMapping("/changeState")
5461
public Response changeState(@RequestBody IdRequest request) {
5562
Workflow workflow = workflowService.getWorkflow(request.getStringId());
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
export class EventBus {
2+
private static instance: EventBus;
3+
private events: Map<string, Function[]>;
4+
5+
private constructor() {
6+
this.events = new Map();
7+
}
8+
9+
public static getInstance(): EventBus {
10+
if (!this.instance) {
11+
this.instance = new EventBus();
12+
}
13+
return this.instance;
14+
}
15+
16+
public on(eventName: string, callback: Function): void {
17+
const callbacks = this.events.get(eventName) || [];
18+
callbacks.push(callback);
19+
this.events.set(eventName, callbacks);
20+
}
21+
22+
public emit(eventName: string, ...args: any[]): void {
23+
const callbacks = this.events.get(eventName);
24+
if (callbacks) {
25+
callbacks.forEach((callback) => {
26+
try {
27+
callback(...args);
28+
} catch (err) {
29+
console.error(
30+
`Error executing callback for event: ${eventName}`,
31+
err
32+
);
33+
}
34+
});
35+
}
36+
}
37+
38+
public off(eventName: string, callback?: Function): void {
39+
if (callback) {
40+
const callbacks = this.events.get(eventName);
41+
if (callbacks) {
42+
const callbackIndex = callbacks.indexOf(callback);
43+
if (callbackIndex > -1) {
44+
callbacks.splice(callbackIndex, 1);
45+
if (callbacks.length === 0) {
46+
this.events.delete(eventName);
47+
} else {
48+
this.events.set(eventName, callbacks);
49+
}
50+
}
51+
}
52+
} else {
53+
this.events.delete(eventName);
54+
}
55+
}
56+
}

frontend/packages/flow-core/src/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@ export * from "./hooks.ts";
66
export * from "./object.ts";
77
export * from "./table.ts";
88
export * from "./view-plugin.ts";
9-
export * from "./groovy.ts";
9+
export * from "./groovy.ts";
10+
export * from "./event.ts";

frontend/packages/flow-pc/flow-pc-design/src/api/workflow.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ export const changeVersion = (id:any) => {
2424
return httpClient.post('/api/cmd/workflow/changeVersion',{id});
2525
}
2626

27+
export const deleteVersion = (id:any) => {
28+
return httpClient.post('/api/cmd/workflow/deleteVersion',{id});
29+
}
30+
2731
export const changeState = (id:string) => {
2832
return httpClient.post('/api/cmd/workflow/changeState',{id});
2933
}

frontend/packages/flow-pc/flow-pc-design/src/components/design-editor/version/components/version-content.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ export const VersionContent: React.FC<VersionContentProps> = (props) => {
2424
onVersionChange={async (versionId) => {
2525
await props.presenter.changeVersion(versionId);
2626
}}
27+
onVersionRemove={async (versionId)=>{
28+
await props.presenter.deleteVersion(versionId);
29+
}}
2730
/>
2831
)
2932
})}

frontend/packages/flow-pc/flow-pc-design/src/components/design-editor/version/components/version-item.tsx

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ interface VersionItemProps {
1010
version: WorkflowVersion;
1111
onUpdateVersionName: (id: number, name: string) => Promise<void>;
1212
onVersionChange: (id: number) => Promise<void>;
13+
onVersionRemove: (id: number) => Promise<void>;
1314
}
1415

1516
export const VersionItem: React.FC<VersionItemProps> = (props) => {
@@ -80,6 +81,20 @@ export const VersionItem: React.FC<VersionItemProps> = (props) => {
8081
setEditeVisible(true)
8182
}}
8283
>编辑</a>
84+
85+
{!version.current && (
86+
<Popconfirm
87+
title={"确认要删除到该版本吗?"}
88+
onConfirm={async () => {
89+
props.onVersionRemove(version.id).then(() => {
90+
message.success("版本已删除");
91+
});
92+
}}
93+
>
94+
<a>删除</a>
95+
</Popconfirm>
96+
)}
97+
8398
{!version.current && (
8499
<Popconfirm
85100
title={"确认要切换到该版本吗?"}

frontend/packages/flow-pc/flow-pc-design/src/components/design-editor/version/edtior-version.tsx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,22 @@ import {Button, Popover} from "antd";
44
import {HistoryOutlined} from "@ant-design/icons";
55
import {useVersionPresenter} from "@/components/design-editor/version/hooks/use-version-presenter";
66
import {VersionContent} from "./components/version-content";
7+
import {EventBus} from "@flow-engine/flow-core";
78

89
export const EditorVersion = () => {
910

1011
const {state, presenter} = useVersionPresenter();
1112

13+
React.useEffect(()=>{
14+
EventBus.getInstance().on('VersionChangeEvent',()=>{
15+
presenter.initState();
16+
});
17+
18+
return () => {
19+
EventBus.getInstance().off('VersionChangeEvent');
20+
}
21+
},[]);
22+
1223
return (
1324
<VersionContainer>
1425
<VersionSection>

frontend/packages/flow-pc/flow-pc-design/src/components/design-editor/version/model.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import {VersionApi, WorkflowVersion} from "./types";
2-
import {updateVersionName as updateVersionNameApi, versions, changeVersion as changeVersionApi} from "@/api/workflow";
2+
import {updateVersionName as updateVersionNameApi, versions, changeVersion as changeVersionApi,deleteVersion as deleteVersionApi } from "@/api/workflow";
33

44
export class VersionApiImpl implements VersionApi {
55

@@ -22,4 +22,8 @@ export class VersionApiImpl implements VersionApi {
2222
await changeVersionApi(id);
2323
}
2424

25+
deleteVersion = async (id: number) => {
26+
await deleteVersionApi(id);
27+
}
28+
2529
}

0 commit comments

Comments
 (0)