当前位置:网站首页>Business visualization - let your flowchart "run" (4. Actual business scenario test)
Business visualization - let your flowchart "run" (4. Actual business scenario test)
2022-07-28 19:34:00 【Illusory private school】
High quality resource sharing
| Learning route guidance ( Click unlock ) | Knowledge orientation | Crowd positioning |
|---|---|---|
| 🧡 Python Actual wechat ordering applet 🧡 | Progressive class | This course is python flask+ Perfect combination of wechat applet , From the deployment of Tencent to the launch of the project , Create a full stack ordering system . |
| Python Quantitative trading practice | beginner | Take you hand in hand to create an easy to expand 、 More secure 、 More efficient quantitative trading system |
Preface
First , Thank you for your comments on the last article [ Business visualization - Let your flowchart "Run" get up (3. Branch selection & Cross language distributed running nodes )] Support for .
Let me take the actual business scenario as an example , Let's introduce ladybugflow How to use .
Hotel reservation scenario ( The traditional way of writing )
For the following hotel reservation process
technological process 1:

technological process 2

[ technological process 1] The traditional way of writing 1:
Define shared variables between processes ;
Start to deal with ();
Query customer information processing ();
Query hotel information processing ();
Order processing ();
The order was successfully processed ();
Suppose each process uses 3 Second , The whole process needs 3*5=15 second .
So the writing method is derived 2:
Define shared variables between processes ;
Start to deal with ();
start-up Query customer information thread processing A;
start-up Query hotel information thread processing B;
wait for A,B end ;
Order processing ();
The order was successfully processed ();
Save time , But the implementation of multithreading makes the program complex ,
And the above writing puts The flow chart is bound with the business logic ,
That is, add , After deleting a node , The corresponding logic code should also be modified , The test scope is often that the business logic of the whole flow chart should be tested .
Hotel reservation scenario ( neographism )
Answer the above question , I'm designing ladybugflow When , hold The flow chart and business logic are separated ,
Each business logic corresponds to a method , Bind with the nodes in the flowchart .
In this way, there is no need to modify the business logic when modifying the flow chart .
And the flow chart can be generated by tool dragging , You can also view the running results on the graph .
So let's talk about that ladybugflow Development process in
1. Import dependence
Maven
<dependency>
<groupId>io.github.nobugladygroupId>
<artifactId>ladybugflowartifactId>
<version>0.0.6version>
dependency>
Gradle
// https://mvnrepository.com/artifact/io.github.nobuglady/ladybugflow
implementation 'io.github.nobuglady:ladybugflow:0.0.6'
2. Draw flow chart , And generate Json file
First, download this file locally , Open with a browser
https://github.com/nobuglady/ladybugflow/blob/main/html/network.html

Then click on the page [edit] Buttons can draw flow charts ,
After drawing the flow chart , Click on [update json] Button , You can generate the corresponding json file .
3. Write business methods
Each node of the flowchart corresponds to the following method , use @Node Annotations to associate flow charts .
You can use class variables to pass parameters and express results , For example, after placing an order successfully , Set the class variable to "success".
notes : It is recommended to use nodes ID Association , This article is for convenience , Select the Chinese node name for Association
Flow1.java( Note that the file code is UTF-8)
/**
*
* @author NoBugLady
*
*/
public class Flow1 extends FlowRunner {
private String result;
public String getResult() {
return result;
}
@Node(label = "start")
public void processStart() throws InterruptedException {
System.out.println(" Start up ( Simulate business waiting 3 second )");
Thread.sleep(3000);
System.out.println(" Start up end ");
}
@Node(label = " Query user information ")
public void processSearchUser() throws InterruptedException {
System.out.println(" Start querying user information ( Simulate business waiting 3 second )");
Thread.sleep(3000);
System.out.println(" End of user information query ");
}
@Node(label = " Check hotel information ")
public void processSearchHotel() throws InterruptedException {
System.out.println(" Check the hotel information ( Simulate business waiting 3 second )");
Thread.sleep(3000);
System.out.println(" End of hotel information inquiry ");
}
@Node(label = " Place an order ")
public void processOrder() throws InterruptedException {
System.out.println(" Order start ( Simulate business waiting 3 second )");
Thread.sleep(3000);
System.out.println(" End of order ");
}
@Node(label = " checkout success ")
public void processSuccess() throws InterruptedException {
System.out.println(" Order successfully started ( Simulate business waiting 3 second )");
Thread.sleep(3000);
System.out.println(" The order was successfully placed ");
result = "success";
}
} Fold
4. Put the... Of the flow chart Json Put the file into the project
Flow1.json( Note that the file code is UTF-8)
{
"flowId": "your flow id",
"nodes": [
{
"id": "1",
"label": "start"
},
{
"id": "a1a38c2e-0e05-4c68-bd49-f12aea070876",
"label": " Query user information ",
"readyCheck": 0
},
{
"id": "1a90a997-4390-470a-ae7c-626a725438d2",
"label": " Check hotel information ",
"readyCheck": 0
},
{
"id": "52289e99-363d-4453-8077-ca8bdc6d35bf",
"label": " Place an order ",
"readyCheck": 0
},
{
"id": "16422cbb-ccb0-4fe2-952b-e3ad5c3acbb2",
"label": " checkout success ",
"readyCheck": 0
}
],
"edges": [
{
"id": "1",
"from": "1",
"to": "2",
"arrows": "to"
},
{
"id": "b3ad7ab3-8fb6-4527-8cae-6845e03da3e4",
"from": "1",
"to": "a1a38c2e-0e05-4c68-bd49-f12aea070876",
"arrows": "to"
},
{
"id": "001375c7-19e7-436b-bbcd-68e36c8f23b7",
"from": "1",
"to": "1a90a997-4390-470a-ae7c-626a725438d2",
"arrows": "to"
},
{
"id": "dd830043-c7a7-4c71-b91c-10c007b7b19c",
"from": "1a90a997-4390-470a-ae7c-626a725438d2",
"to": "52289e99-363d-4453-8077-ca8bdc6d35bf",
"arrows": "to"
},
{
"id": "21c2c69d-0050-4eca-8283-5a2bcbdc6c37",
"from": "52289e99-363d-4453-8077-ca8bdc6d35bf",
"to": "16422cbb-ccb0-4fe2-952b-e3ad5c3acbb2",
"arrows": "to"
},
{
"id": "19f2f329-8163-4dc6-a353-800df79d18a6",
"from": "a1a38c2e-0e05-4c68-bd49-f12aea070876",
"to": "52289e99-363d-4453-8077-ca8bdc6d35bf",
"arrows": "to"
}
]
} Fold
The project structure is shown in the figure below
Flow1.java and Flow1.json It needs to be put under the same bag .

5. Start process
App1.java( Note that the file code is UTF-8)
/**
*
* @author NoBugLady
*
*/
public class App1 {
public static void main(String[] args) {
Flow1 testFlow = new Flow1();
testFlow.startFlow(true);
System.out.println(testFlow.getResult());
// It is not recommended to call every time shutdown, Can be in the whole App Call once when closing shutdown
FlowStarter.shutdown();
}
}
6. View the run results
[I]2022/07/27 21:23:12.172 main:ladybugflow.properties in root path not found, use default configuration
[I]2022/07/27 21:23:12.177 main:NodePool started.
[I]2022/07/27 21:23:12.178 main:Ready queue consumer thread started.
[I]2022/07/27 21:23:12.180 main:Complete queue consumer thread started.
[I]2022/07/27 21:23:12.993 [your flow id][38f3567d-77fb-4629-bf7e-68b27633ed68] main:json:
{"flowId":"your flow id","nodes":[{"id":"1","label":"start","readyCheck":0},{"id":"a1a38c2e-0e05-4c68-bd49-f12aea070876","label":" Query user information ","readyCheck":0},{"id":"1a90a997-4390-470a-ae7c-626a725438d2","label":" Check hotel information ","readyCheck":0},{"id":"52289e99-363d-4453-8077-ca8bdc6d35bf","label":" Place an order ","readyCheck":0},{"id":"16422cbb-ccb0-4fe2-952b-e3ad5c3acbb2","label":" checkout success ","readyCheck":0}],"edges":[{"id":"1","from":"1","to":"2","condition":null,"arrows":"to"},{"id":"b3ad7ab3-8fb6-4527-8cae-6845e03da3e4","from":"1","to":"a1a38c2e-0e05-4c68-bd49-f12aea070876","condition":null,"arrows":"to"},{"id":"001375c7-19e7-436b-bbcd-68e36c8f23b7","from":"1","to":"1a90a997-4390-470a-ae7c-626a725438d2","condition":null,"arrows":"to"},{"id":"dd830043-c7a7-4c71-b91c-10c007b7b19c","from":"1a90a997-4390-470a-ae7c-626a725438d2","to":"52289e99-363d-4453-8077-ca8bdc6d35bf","condition":null,"arrows":"to"},{"id":"21c2c69d-0050-4eca-8283-5a2bcbdc6c37","from":"52289e99-363d-4453-8077-ca8bdc6d35bf","to":"16422cbb-ccb0-4fe2-952b-e3ad5c3acbb2","condition":null,"arrows":"to"},{"id":"19f2f329-8163-4dc6-a353-800df79d18a6","from":"a1a38c2e-0e05-4c68-bd49-f12aea070876","to":"52289e99-363d-4453-8077-ca8bdc6d35bf","condition":null,"arrows":"to"}]}
[I]2022/07/27 21:23:12.996 [your flow id][38f3567d-77fb-4629-bf7e-68b27633ed68] pool-1-thread-1:execute node id:1
[I]2022/07/27 21:23:12.996 [your flow id][38f3567d-77fb-4629-bf7e-68b27633ed68] pool-1-thread-1:execute node name:start
Start up ( Simulate business waiting 3 second )
Start up end
[I]2022/07/27 21:23:16.003 [your flow id][38f3567d-77fb-4629-bf7e-68b27633ed68] pool-1-thread-1:execute node id:a1a38c2e-0e05-4c68-bd49-f12aea070876
[I]2022/07/27 21:23:16.003 [your flow id][38f3567d-77fb-4629-bf7e-68b27633ed68] pool-1-thread-1:execute node name: Query user information
[I]2022/07/27 21:23:16.003 [your flow id][38f3567d-77fb-4629-bf7e-68b27633ed68] pool-1-thread-2:execute node id:1a90a997-4390-470a-ae7c-626a725438d2
Start querying user information ( Simulate business waiting 3 second )
[I]2022/07/27 21:23:16.004 [your flow id][38f3567d-77fb-4629-bf7e-68b27633ed68] pool-1-thread-2:execute node name: Check hotel information
Check the hotel information ( Simulate business waiting 3 second )
End of hotel information inquiry
End of user information query
[I]2022/07/27 21:23:19.008 [your flow id][38f3567d-77fb-4629-bf7e-68b27633ed68] pool-1-thread-1:execute node id:52289e99-363d-4453-8077-ca8bdc6d35bf
[I]2022/07/27 21:23:19.008 [your flow id][38f3567d-77fb-4629-bf7e-68b27633ed68] pool-1-thread-1:execute node name: Place an order
Order start ( Simulate business waiting 3 second )
End of order
[I]2022/07/27 21:23:22.014 [your flow id][38f3567d-77fb-4629-bf7e-68b27633ed68] pool-1-thread-1:execute node id:16422cbb-ccb0-4fe2-952b-e3ad5c3acbb2
[I]2022/07/27 21:23:22.014 [your flow id][38f3567d-77fb-4629-bf7e-68b27633ed68] pool-1-thread-1:execute node name: checkout success
Order successfully started ( Simulate business waiting 3 second )
The order was successfully placed
[I]2022/07/27 21:23:25.025 [your flow id][38f3567d-77fb-4629-bf7e-68b27633ed68] Thread-1:Complete success.
[I]2022/07/27 21:23:25.027 [your flow id][38f3567d-77fb-4629-bf7e-68b27633ed68] Thread-1:json:
{"nodes":[{"id": "1","label": "start" ,"color": "#36AE7C"},{"id": "a1a38c2e-0e05-4c68-bd49-f12aea070876","label": " Query user information " ,"color": "#36AE7C"},{"id": "1a90a997-4390-470a-ae7c-626a725438d2","label": " Check hotel information " ,"color": "#36AE7C"},{"id": "52289e99-363d-4453-8077-ca8bdc6d35bf","label": " Place an order " ,"color": "#36AE7C"},{"id": "16422cbb-ccb0-4fe2-952b-e3ad5c3acbb2","label": " checkout success " ,"color": "#36AE7C"}],"edges":[{"id": "1","from": "1","to": "2","arrows": "to"},{"id": "b3ad7ab3-8fb6-4527-8cae-6845e03da3e4","from": "1","to": "a1a38c2e-0e05-4c68-bd49-f12aea070876","arrows": "to"},{"id": "001375c7-19e7-436b-bbcd-68e36c8f23b7","from": "1","to": "1a90a997-4390-470a-ae7c-626a725438d2","arrows": "to"},{"id": "dd830043-c7a7-4c71-b91c-10c007b7b19c","from": "1a90a997-4390-470a-ae7c-626a725438d2","to": "52289e99-363d-4453-8077-ca8bdc6d35bf","arrows": "to"},{"id": "21c2c69d-0050-4eca-8283-5a2bcbdc6c37","from": "52289e99-363d-4453-8077-ca8bdc6d35bf","to": "16422cbb-ccb0-4fe2-952b-e3ad5c3acbb2","arrows": "to"},{"id": "19f2f329-8163-4dc6-a353-800df79d18a6","from": "a1a38c2e-0e05-4c68-bd49-f12aea070876","to": "52289e99-363d-4453-8077-ca8bdc6d35bf","arrows": "to"}]}
success
[I]2022/07/27 21:23:25.028 main:Ready queue thread stoped.
[I]2022/07/27 21:23:25.028 main:Ready queue thread stoped.
[I]2022/07/27 21:23:25.028 main:NodePool stoped. Fold
End the process json Copy the string to the following , And then click [show network] Button , It can display the status after the process is executed
green : Successful implementation , Red : Execution failure , white : unexecuted

Hotel reservation process with branch processing
ladybugflow It provides branch processing function for flow chart .
According to the return result of the node , Perform different processes .
such as , In the above example , increase 【 Check order 】 node , as follows

Check the order successfully , Then go through the hotel reservation process , otherwise , Follow the failure process .
For the above process , We set the return value on both sides of the check order , as follows :


Generated Json The documents are as follows
Flow2.json( Note that the file code is UTF-8)
{
"flowId": "your flow id",
"nodes": [
{
"id": "1",
"label": "start"
},
{
"id": "a1a38c2e-0e05-4c68-bd49-f12aea070876",
"label": " Query user information ",
"readyCheck": 0
},
{
"id": "1a90a997-4390-470a-ae7c-626a725438d2",
"label": " Check hotel information ",
"readyCheck": 0
},
{
"id": "52289e99-363d-4453-8077-ca8bdc6d35bf",
"label": " Place an order ",
"readyCheck": 0
},
{
"id": "16422cbb-ccb0-4fe2-952b-e3ad5c3acbb2",
"label": " checkout success ",
"readyCheck": 0
},
{
"id": "5a1068c1-e365-4a51-b617-8cc093ce5e3d",
"label": " Check order ",
"readyCheck": 0
},
{
"id": "0aa3e9de-4015-4db0-9eda-fd1cd0fbbf10",
"label": " You can book ",
"readyCheck": 0
},
{
"id": "7e841bf6-b422-4c2c-b4ec-d2352e22cc88",
"label": " No reservations ",
"readyCheck": 0
},
{
"id": "8fc59321-8b96-4e17-9d8e-0c8f5fe9c45e",
"label": " Failure to deal with ",
"readyCheck": 0
}
],
"edges": [
{
"id": "1",
"from": "1",
"to": "2",
"arrows": "to"
},
{
"id": "b3ad7ab3-8fb6-4527-8cae-6845e03da3e4",
"from": "0aa3e9de-4015-4db0-9eda-fd1cd0fbbf10",
"to": "a1a38c2e-0e05-4c68-bd49-f12aea070876",
"arrows": "to"
},
{
"id": "001375c7-19e7-436b-bbcd-68e36c8f23b7",
"from": "5a1068c1-e365-4a51-b617-8cc093ce5e3d",
"to": "0aa3e9de-4015-4db0-9eda-fd1cd0fbbf10",
"condition": "1",
"arrows": "to"
},
{
"id": "dd830043-c7a7-4c71-b91c-10c007b7b19c",
"from": "1a90a997-4390-470a-ae7c-626a725438d2",
"to": "52289e99-363d-4453-8077-ca8bdc6d35bf",
"arrows": "to"
},
{
"id": "21c2c69d-0050-4eca-8283-5a2bcbdc6c37",
"from": "52289e99-363d-4453-8077-ca8bdc6d35bf",
"to": "16422cbb-ccb0-4fe2-952b-e3ad5c3acbb2",
"arrows": "to"
},
{
"id": "19f2f329-8163-4dc6-a353-800df79d18a6",
"from": "a1a38c2e-0e05-4c68-bd49-f12aea070876",
"to": "52289e99-363d-4453-8077-ca8bdc6d35bf",
"arrows": "to"
},
{
"id": "822e5c76-ce59-4962-b5e3-a3dfd905fa05",
"from": "1",
"to": "5a1068c1-e365-4a51-b617-8cc093ce5e3d",
"arrows": "to"
},
{
"id": "36d6e697-b835-4374-9fa7-c1cd24b100e9",
"from": "5a1068c1-e365-4a51-b617-8cc093ce5e3d",
"to": "7e841bf6-b422-4c2c-b4ec-d2352e22cc88",
"condition": "0",
"arrows": "to"
},
{
"id": "d4a03a18-2a24-4bec-9717-a82c8a4a764b",
"from": "0aa3e9de-4015-4db0-9eda-fd1cd0fbbf10",
"to": "1a90a997-4390-470a-ae7c-626a725438d2",
"arrows": "to"
},
{
"id": "673051d5-27f5-4578-8fc2-4f5e7352d5d2",
"from": "7e841bf6-b422-4c2c-b4ec-d2352e22cc88",
"to": "8fc59321-8b96-4e17-9d8e-0c8f5fe9c45e",
"arrows": "to"
}
]
} Fold
Add the hotel check node in the business method , Return here 1, Go through the process of checking success .
Flow2.java( Note that the file code is UTF-8)
/**
*
* @author NoBugLady
*
*/
public class Flow2 extends FlowRunner {
private String result;
public String getResult() {
return result;
}
@Node(label = "start")
public void processStart() throws InterruptedException {
System.out.println(" Start up ( Simulate business waiting 3 second )");
Thread.sleep(3000);
System.out.println(" Start up end ");
}
@Node(label = " Check order ")
public int processCheckOrder() throws InterruptedException {
System.out.println(" Check order start ( Simulate business waiting 3 second )");
Thread.sleep(3000);
System.out.println(" Check the end of the order ");
return 1;
}
@Node(label = " You can book ")
public void processCheckOrderOK() throws InterruptedException {
System.out.println(" You can book the start ( Simulate business waiting 3 second )");
Thread.sleep(3000);
System.out.println(" It can be scheduled to end ");
}
@Node(label = " Non bookable ")
public void processCheckOrderNG() throws InterruptedException {
System.out.println(" Non bookable start ( Simulate business waiting 3 second )");
Thread.sleep(3000);
System.out.println(" Non bookable end ");
}
@Node(label = " Query user information ")
public void processSearchUser() throws InterruptedException {
System.out.println(" Start querying user information ( Simulate business waiting 3 second )");
Thread.sleep(3000);
System.out.println(" End of user information query ");
}
@Node(label = " Check hotel information ")
public void processSearchHotel() throws InterruptedException {
System.out.println(" Check the hotel information ( Simulate business waiting 3 second )");
Thread.sleep(3000);
System.out.println(" End of hotel information inquiry ");
}
@Node(label = " Place an order ")
public void processOrder() throws InterruptedException {
System.out.println(" Order start ( Simulate business waiting 3 second )");
Thread.sleep(3000);
System.out.println(" End of order ");
}
@Node(label = " checkout success ")
public void processSuccess() throws InterruptedException {
System.out.println(" Order successfully started ( Simulate business waiting 3 second )");
Thread.sleep(3000);
System.out.println(" The order was successfully placed ");
result = "success";
}
@Node(label = " Failure to deal with ")
public void processError() throws InterruptedException {
System.out.println(" Failure processing starts ( Simulate business waiting 3 second )");
Thread.sleep(3000);
System.out.println(" End of failure processing ");
result = "error";
}
} Fold
Start process
App2.java( Note that the file code is UTF-8)
/**
*
* @author NoBugLady
*
*/
public class App2 {
public static void main(String[] args) {
Flow2 testFlow = new Flow2();
testFlow.startFlow(true);
System.out.println(testFlow.getResult());
// It is not recommended to call every time shutdown, Can be in the whole App Call once when closing shutdown
FlowStarter.shutdown();
}
}
View the run results
[I]2022/07/27 21:29:56.046 main:ladybugflow.properties in root path not found, use default configuration
[I]2022/07/27 21:29:56.052 main:NodePool started.
[I]2022/07/27 21:29:56.052 main:Ready queue consumer thread started.
[I]2022/07/27 21:29:56.054 main:Complete queue consumer thread started.
[I]2022/07/27 21:29:56.927 [your flow id][73a425a8-2f13-42bc-9358-111d10378204] main:json:
{"flowId":"your flow id","nodes":[{"id":"1","label":"start","readyCheck":0},{"id":"a1a38c2e-0e05-4c68-bd49-f12aea070876","label":" Query user information ","readyCheck":0},{"id":"1a90a997-4390-470a-ae7c-626a725438d2","label":" Check hotel information ","readyCheck":0},{"id":"52289e99-363d-4453-8077-ca8bdc6d35bf","label":" Place an order ","readyCheck":0},{"id":"16422cbb-ccb0-4fe2-952b-e3ad5c3acbb2","label":" checkout success ","readyCheck":0},{"id":"5a1068c1-e365-4a51-b617-8cc093ce5e3d","label":" Check order ","readyCheck":0},{"id":"0aa3e9de-4015-4db0-9eda-fd1cd0fbbf10","label":" You can book ","readyCheck":0},{"id":"7e841bf6-b422-4c2c-b4ec-d2352e22cc88","label":" No reservations ","readyCheck":0},{"id":"8fc59321-8b96-4e17-9d8e-0c8f5fe9c45e","label":" Failure to deal with ","readyCheck":0}],"edges":[{"id":"1","from":"1","to":"2","condition":null,"arrows":"to"},{"id":"b3ad7ab3-8fb6-4527-8cae-6845e03da3e4","from":"0aa3e9de-4015-4db0-9eda-fd1cd0fbbf10","to":"a1a38c2e-0e05-4c68-bd49-f12aea070876","condition":null,"arrows":"to"},{"id":"001375c7-19e7-436b-bbcd-68e36c8f23b7","from":"5a1068c1-e365-4a51-b617-8cc093ce5e3d","to":"0aa3e9de-4015-4db0-9eda-fd1cd0fbbf10","condition":"1","arrows":"to"},{"id":"dd830043-c7a7-4c71-b91c-10c007b7b19c","from":"1a90a997-4390-470a-ae7c-626a725438d2","to":"52289e99-363d-4453-8077-ca8bdc6d35bf","condition":null,"arrows":"to"},{"id":"21c2c69d-0050-4eca-8283-5a2bcbdc6c37","from":"52289e99-363d-4453-8077-ca8bdc6d35bf","to":"16422cbb-ccb0-4fe2-952b-e3ad5c3acbb2","condition":null,"arrows":"to"},{"id":"19f2f329-8163-4dc6-a353-800df79d18a6","from":"a1a38c2e-0e05-4c68-bd49-f12aea070876","to":"52289e99-363d-4453-8077-ca8bdc6d35bf","condition":null,"arrows":"to"},{"id":"822e5c76-ce59-4962-b5e3-a3dfd905fa05","from":"1","to":"5a1068c1-e365-4a51-b617-8cc093ce5e3d","condition":null,"arrows":"to"},{"id":"36d6e697-b835-4374-9fa7-c1cd24b100e9","from":"5a1068c1-e365-4a51-b617-8cc093ce5e3d","to":"7e841bf6-b422-4c2c-b4ec-d2352e22cc88","condition":"0","arrows":"to"},{"id":"d4a03a18-2a24-4bec-9717-a82c8a4a764b","from":"0aa3e9de-4015-4db0-9eda-fd1cd0fbbf10","to":"1a90a997-4390-470a-ae7c-626a725438d2","condition":null,"arrows":"to"},{"id":"673051d5-27f5-4578-8fc2-4f5e7352d5d2","from":"7e841bf6-b422-4c2c-b4ec-d2352e22cc88","to":"8fc59321-8b96-4e17-9d8e-0c8f5fe9c45e","condition":null,"arrows":"to"}]}
[I]2022/07/27 21:29:56.931 [your flow id][73a425a8-2f13-42bc-9358-111d10378204] pool-1-thread-1:execute node id:1
[I]2022/07/27 21:29:56.931 [your flow id][73a425a8-2f13-42bc-9358-111d10378204] pool-1-thread-1:execute node name:start
Start up ( Simulate business waiting 3 second )
Start up end
[I]2022/07/27 21:29:59.939 [your flow id][73a425a8-2f13-42bc-9358-111d10378204] pool-1-thread-1:execute node id:5a1068c1-e365-4a51-b617-8cc093ce5e3d
[I]2022/07/27 21:29:59.939 [your flow id][73a425a8-2f13-42bc-9358-111d10378204] pool-1-thread-1:execute node name: Check order
Check order start ( Simulate business waiting 3 second )
Check the end of the order
[I]2022/07/27 21:30:02.942 [your flow id][73a425a8-2f13-42bc-9358-111d10378204] pool-1-thread-1:execute node id:0aa3e9de-4015-4db0-9eda-fd1cd0fbbf10
[I]2022/07/27 21:30:02.942 [your flow id][73a425a8-2f13-42bc-9358-111d10378204] pool-1-thread-1:execute node name: You can book
You can book the start ( Simulate business waiting 3 second )
It can be scheduled to end
[I]2022/07/27 21:30:05.950 [your flow id][73a425a8-2f13-42bc-9358-111d10378204] pool-1-thread-1:execute node id:a1a38c2e-0e05-4c68-bd49-f12aea070876
[I]2022/07/27 21:30:05.950 [your flow id][73a425a8-2f13-42bc-9358-111d10378204] pool-1-thread-1:execute node name: Query user information
Start querying user information ( Simulate business waiting 3 second )
[I]2022/07/27 21:30:05.951 [your flow id][73a425a8-2f13-42bc-9358-111d10378204] pool-1-thread-2:execute node id:1a90a997-4390-470a-ae7c-626a725438d2
[I]2022/07/27 21:30:05.951 [your flow id][73a425a8-2f13-42bc-9358-111d10378204] pool-1-thread-2:execute node name: Check hotel information
Check the hotel information ( Simulate business waiting 3 second )
End of hotel information inquiry
End of user information query
[I]2022/07/27 21:30:08.956 [your flow id][73a425a8-2f13-42bc-9358-111d10378204] pool-1-thread-1:execute node id:52289e99-363d-4453-8077-ca8bdc6d35bf
[I]2022/07/27 21:30:08.956 [your flow id][73a425a8-2f13-42bc-9358-111d10378204] pool-1-thread-1:execute node name: Place an order
Order start ( Simulate business waiting 3 second )
End of order
[I]2022/07/27 21:30:11.960 [your flow id][73a425a8-2f13-42bc-9358-111d10378204] pool-1-thread-1:execute node id:16422cbb-ccb0-4fe2-952b-e3ad5c3acbb2
[I]2022/07/27 21:30:11.960 [your flow id][73a425a8-2f13-42bc-9358-111d10378204] pool-1-thread-1:execute node name: checkout success
Order successfully started ( Simulate business waiting 3 second )
The order was successfully placed
[I]2022/07/27 21:30:14.975 [your flow id][73a425a8-2f13-42bc-9358-111d10378204] Thread-1:Complete success.
[I]2022/07/27 21:30:14.977 [your flow id][73a425a8-2f13-42bc-9358-111d10378204] Thread-1:json:
{"nodes":[{"id": "1","label": "start" ,"color": "#36AE7C"},{"id": "a1a38c2e-0e05-4c68-bd49-f12aea070876","label": " Query user information " ,"color": "#36AE7C"},{"id": "1a90a997-4390-470a-ae7c-626a725438d2","label": " Check hotel information " ,"color": "#36AE7C"},{"id": "52289e99-363d-4453-8077-ca8bdc6d35bf","label": " Place an order " ,"color": "#36AE7C"},{"id": "16422cbb-ccb0-4fe2-952b-e3ad5c3acbb2","label": " checkout success " ,"color": "#36AE7C"},{"id": "5a1068c1-e365-4a51-b617-8cc093ce5e3d","label": " Check order " ,"color": "#36AE7C"},{"id": "0aa3e9de-4015-4db0-9eda-fd1cd0fbbf10","label": " You can book " ,"color": "#36AE7C"},{"id": "7e841bf6-b422-4c2c-b4ec-d2352e22cc88","label": " No reservations " ,"color": "#E8F9FD"},{"id": "8fc59321-8b96-4e17-9d8e-0c8f5fe9c45e","label": " Failure to deal with " ,"color": "#E8F9FD"}],"edges":[{"id": "1","from": "1","to": "2","arrows": "to"},{"id": "b3ad7ab3-8fb6-4527-8cae-6845e03da3e4","from": "0aa3e9de-4015-4db0-9eda-fd1cd0fbbf10","to": "a1a38c2e-0e05-4c68-bd49-f12aea070876","arrows": "to"},{"id": "001375c7-19e7-436b-bbcd-68e36c8f23b7","from": "5a1068c1-e365-4a51-b617-8cc093ce5e3d","to": "0aa3e9de-4015-4db0-9eda-fd1cd0fbbf10","arrows": "to"},{"id": "dd830043-c7a7-4c71-b91c-10c007b7b19c","from": "1a90a997-4390-470a-ae7c-626a725438d2","to": "52289e99-363d-4453-8077-ca8bdc6d35bf","arrows": "to"},{"id": "21c2c69d-0050-4eca-8283-5a2bcbdc6c37","from": "52289e99-363d-4453-8077-ca8bdc6d35bf","to": "16422cbb-ccb0-4fe2-952b-e3ad5c3acbb2","arrows": "to"},{"id": "19f2f329-8163-4dc6-a353-800df79d18a6","from": "a1a38c2e-0e05-4c68-bd49-f12aea070876","to": "52289e99-363d-4453-8077-ca8bdc6d35bf","arrows": "to"},{"id": "822e5c76-ce59-4962-b5e3-a3dfd905fa05","from": "1","to": "5a1068c1-e365-4a51-b617-8cc093ce5e3d","arrows": "to"},{"id": "36d6e697-b835-4374-9fa7-c1cd24b100e9","from": "5a1068c1-e365-4a51-b617-8cc093ce5e3d","to": "7e841bf6-b422-4c2c-b4ec-d2352e22cc88","arrows": "to"},{"id": "d4a03a18-2a24-4bec-9717-a82c8a4a764b","from": "0aa3e9de-4015-4db0-9eda-fd1cd0fbbf10","to": "1a90a997-4390-470a-ae7c-626a725438d2","arrows": "to"},{"id": "673051d5-27f5-4578-8fc2-4f5e7352d5d2","from": "7e841bf6-b422-4c2c-b4ec-d2352e22cc88","to": "8fc59321-8b96-4e17-9d8e-0c8f5fe9c45e","arrows": "to"}]}
success
[I]2022/07/27 21:30:14.977 main:Ready queue thread stoped.
[I]2022/07/27 21:30:14.977 main:Ready queue thread stoped.
[I]2022/07/27 21:30:14.977 main:NodePool stoped. Fold
End the process json Copy the string to the following , And then click [show network] Button , It can display the status after the process is executed
green : Successful implementation , Red : Execution failure , white : unexecuted

Remove unnecessary business nodes
In actual use , Not every business node needs a corresponding business code ,
For example, in the above example 【 You can book 】 and 【 No reservations 】 There can be no corresponding business logic , Just jump to the next node .
therefore , We can remove the above nodes from the business logic , as follows , Removed 【 You can book 】 and 【 No reservations 】 Corresponding business method .
Flow3.java( Note that the file code is UTF-8)
/**
*
* @author NoBugLady
*
*/
public class Flow3 extends FlowRunner {
private String result;
public String getResult() {
return result;
}
@Node(label = "start")
public void processStart() throws InterruptedException {
System.out.println(" Start up ( Simulate business waiting 3 second )");
Thread.sleep(3000);
System.out.println(" Start up end ");
}
@Node(label = " Check order ")
public int processCheckOrder() throws InterruptedException {
System.out.println(" Check order start ( Simulate business waiting 3 second )");
Thread.sleep(3000);
System.out.println(" Check the end of the order ");
return 1;
}
@Node(label = " Query user information ")
public void processSearchUser() throws InterruptedException {
System.out.println(" Start querying user information ( Simulate business waiting 3 second )");
Thread.sleep(3000);
System.out.println(" End of user information query ");
}
@Node(label = " Check hotel information ")
public void processSearchHotel() throws InterruptedException {
System.out.println(" Check the hotel information ( Simulate business waiting 3 second )");
Thread.sleep(3000);
System.out.println(" End of hotel information inquiry ");
}
@Node(label = " Place an order ")
public void processOrder() throws InterruptedException {
System.out.println(" Order start ( Simulate business waiting 3 second )");
Thread.sleep(3000);
System.out.println(" End of order ");
}
@Node(label = " checkout success ")
public void processSuccess() throws InterruptedException {
System.out.println(" Order successfully started ( Simulate business waiting 3 second )");
Thread.sleep(3000);
System.out.println(" The order was successfully placed ");
result = "success";
}
@Node(label = " Failure to deal with ")
public void processError() throws InterruptedException {
System.out.println(" Failure processing starts ( Simulate business waiting 3 second )");
Thread.sleep(3000);
System.out.println(" End of failure processing ");
result = "error";
}
} Fold
The startup code and process configuration file remain unchanged
App3.java( Note that the file code is UTF-8)
/**
*
* @author NoBugLady
*
*/
public class App3 {
public static void main(String[] args) {
Flow3 testFlow = new Flow3();
testFlow.startFlow(true);
System.out.println(testFlow.getResult());
// It is not recommended to call every time shutdown, Can be in the whole App Call once when closing shutdown
FlowStarter.shutdown();
}
}
Flow3.json( Note that the file code is UTF-8)
{
"flowId": "your flow id",
"nodes": [
{
"id": "1",
"label": "start"
},
{
"id": "a1a38c2e-0e05-4c68-bd49-f12aea070876",
"label": " Query user information ",
"readyCheck": 0
},
{
"id": "1a90a997-4390-470a-ae7c-626a725438d2",
"label": " Check hotel information ",
"readyCheck": 0
},
{
"id": "52289e99-363d-4453-8077-ca8bdc6d35bf",
"label": " Place an order ",
"readyCheck": 0
},
{
"id": "16422cbb-ccb0-4fe2-952b-e3ad5c3acbb2",
"label": " checkout success ",
"readyCheck": 0
},
{
"id": "5a1068c1-e365-4a51-b617-8cc093ce5e3d",
"label": " Check order ",
"readyCheck": 0
},
{
"id": "0aa3e9de-4015-4db0-9eda-fd1cd0fbbf10",
"label": " You can book ",
"readyCheck": 0
},
{
"id": "7e841bf6-b422-4c2c-b4ec-d2352e22cc88",
"label": " No reservations ",
"readyCheck": 0
},
{
"id": "8fc59321-8b96-4e17-9d8e-0c8f5fe9c45e",
"label": " Failure to deal with ",
"readyCheck": 0
}
],
"edges": [
{
"id": "1",
"from": "1",
"to": "2",
"arrows": "to"
},
{
"id": "b3ad7ab3-8fb6-4527-8cae-6845e03da3e4",
"from": "0aa3e9de-4015-4db0-9eda-fd1cd0fbbf10",
"to": "a1a38c2e-0e05-4c68-bd49-f12aea070876",
"arrows": "to"
},
{
"id": "001375c7-19e7-436b-bbcd-68e36c8f23b7",
"from": "5a1068c1-e365-4a51-b617-8cc093ce5e3d",
"to": "0aa3e9de-4015-4db0-9eda-fd1cd0fbbf10",
"condition": "1",
"arrows": "to"
},
{
"id": "dd830043-c7a7-4c71-b91c-10c007b7b19c",
"from": "1a90a997-4390-470a-ae7c-626a725438d2",
"to": "52289e99-363d-4453-8077-ca8bdc6d35bf",
"arrows": "to"
},
{
"id": "21c2c69d-0050-4eca-8283-5a2bcbdc6c37",
"from": "52289e99-363d-4453-8077-ca8bdc6d35bf",
"to": "16422cbb-ccb0-4fe2-952b-e3ad5c3acbb2",
"arrows": "to"
},
{
"id": "19f2f329-8163-4dc6-a353-800df79d18a6",
"from": "a1a38c2e-0e05-4c68-bd49-f12aea070876",
"to": "52289e99-363d-4453-8077-ca8bdc6d35bf",
"arrows": "to"
},
{
"id": "822e5c76-ce59-4962-b5e3-a3dfd905fa05",
"from": "1",
"to": "5a1068c1-e365-4a51-b617-8cc093ce5e3d",
"arrows": "to"
},
{
"id": "36d6e697-b835-4374-9fa7-c1cd24b100e9",
"from": "5a1068c1-e365-4a51-b617-8cc093ce5e3d",
"to": "7e841bf6-b422-4c2c-b4ec-d2352e22cc88",
"condition": "0",
"arrows": "to"
},
{
"id": "d4a03a18-2a24-4bec-9717-a82c8a4a764b",
"from": "0aa3e9de-4015-4db0-9eda-fd1cd0fbbf10",
"to": "1a90a997-4390-470a-ae7c-626a725438d2",
"arrows": "to"
},
{
"id": "673051d5-27f5-4578-8fc2-4f5e7352d5d2",
"from": "7e841bf6-b422-4c2c-b4ec-d2352e22cc88",
"to": "8fc59321-8b96-4e17-9d8e-0c8f5fe9c45e",
"arrows": "to"
}
]
} Fold
Running results
[I]2022/07/27 21:34:29.548 main:ladybugflow.properties in root path not found, use default configuration
[I]2022/07/27 21:34:29.558 main:NodePool started.
[I]2022/07/27 21:34:29.560 main:Ready queue consumer thread started.
[I]2022/07/27 21:34:29.563 main:Complete queue consumer thread started.
[I]2022/07/27 21:34:30.494 [your flow id][970f3310-4ca1-41db-9348-bcc3fe994ce5] main:json:
{"flowId":"your flow id","nodes":[{"id":"1","label":"start","readyCheck":0},{"id":"a1a38c2e-0e05-4c68-bd49-f12aea070876","label":" Query user information ","readyCheck":0},{"id":"1a90a997-4390-470a-ae7c-626a725438d2","label":" Check hotel information ","readyCheck":0},{"id":"52289e99-363d-4453-8077-ca8bdc6d35bf","label":" Place an order ","readyCheck":0},{"id":"16422cbb-ccb0-4fe2-952b-e3ad5c3acbb2","label":" checkout success ","readyCheck":0},{"id":"5a1068c1-e365-4a51-b617-8cc093ce5e3d","label":" Check order ","readyCheck":0},{"id":"0aa3e9de-4015-4db0-9eda-fd1cd0fbbf10","label":" You can book ","readyCheck":0},{"id":"7e841bf6-b422-4c2c-b4ec-d2352e22cc88","label":" No reservations ","readyCheck":0},{"id":"8fc59321-8b96-4e17-9d8e-0c8f5fe9c45e","label":" Failure to deal with ","readyCheck":0}],"edges":[{"id":"1","from":"1","to":"2","condition":null,"arrows":"to"},{"id":"b3ad7ab3-8fb6-4527-8cae-6845e03da3e4","from":"0aa3e9de-4015-4db0-9eda-fd1cd0fbbf10","to":"a1a38c2e-0e05-4c68-bd49-f12aea070876","condition":null,"arrows":"to"},{"id":"001375c7-19e7-436b-bbcd-68e36c8f23b7","from":"5a1068c1-e365-4a51-b617-8cc093ce5e3d","to":"0aa3e9de-4015-4db0-9eda-fd1cd0fbbf10","condition":"1","arrows":"to"},{"id":"dd830043-c7a7-4c71-b91c-10c007b7b19c","from":"1a90a997-4390-470a-ae7c-626a725438d2","to":"52289e99-363d-4453-8077-ca8bdc6d35bf","condition":null,"arrows":"to"},{"id":"21c2c69d-0050-4eca-8283-5a2bcbdc6c37","from":"52289e99-363d-4453-8077-ca8bdc6d35bf","to":"16422cbb-ccb0-4fe2-952b-e3ad5c3acbb2","condition":null,"arrows":"to"},{"id":"19f2f329-8163-4dc6-a353-800df79d18a6","from":"a1a38c2e-0e05-4c68-bd49-f12aea070876","to":"52289e99-363d-4453-8077-ca8bdc6d35bf","condition":null,"arrows":"to"},{"id":"822e5c76-ce59-4962-b5e3-a3dfd905fa05","from":"1","to":"5a1068c1-e365-4a51-b617-8cc093ce5e3d","condition":null,"arrows":"to"},{"id":"36d6e697-b835-4374-9fa7-c1cd24b100e9","from":"5a1068c1-e365-4a51-b617-8cc093ce5e3d","to":"7e841bf6-b422-4c2c-b4ec-d2352e22cc88","condition":"0","arrows":"to"},{"id":"d4a03a18-2a24-4bec-9717-a82c8a4a764b","from":"0aa3e9de-4015-4db0-9eda-fd1cd0fbbf10","to":"1a90a997-4390-470a-ae7c-626a725438d2","condition":null,"arrows":"to"},{"id":"673051d5-27f5-4578-8fc2-4f5e7352d5d2","from":"7e841bf6-b422-4c2c-b4ec-d2352e22cc88","to":"8fc59321-8b96-4e17-9d8e-0c8f5fe9c45e","condition":null,"arrows":"to"}]}
[I]2022/07/27 21:34:30.497 [your flow id][970f3310-4ca1-41db-9348-bcc3fe994ce5] pool-1-thread-1:execute node id:1
[I]2022/07/27 21:34:30.498 [your flow id][970f3310-4ca1-41db-9348-bcc3fe994ce5] pool-1-thread-1:execute node name:start
Start up ( Simulate business waiting 3 second )
Start up end
[I]2022/07/27 21:34:33.502 [your flow id][970f3310-4ca1-41db-9348-bcc3fe994ce5] pool-1-thread-1:execute node id:5a1068c1-e365-4a51-b617-8cc093ce5e3d
[I]2022/07/27 21:34:33.503 [your flow id][970f3310-4ca1-41db-9348-bcc3fe994ce5] pool-1-thread-1:execute node name: Check order
Check order start ( Simulate business waiting 3 second )
Check the end of the order
[I]2022/07/27 21:34:36.518 [your flow id][970f3310-4ca1-41db-9348-bcc3fe994ce5] pool-1-thread-1:execute node id:0aa3e9de-4015-4db0-9eda-fd1cd0fbbf10
[I]2022/07/27 21:34:36.518 [your flow id][970f3310-4ca1-41db-9348-bcc3fe994ce5] pool-1-thread-1:execute node name: You can book
[I]2022/07/27 21:34:36.519 [your flow id][970f3310-4ca1-41db-9348-bcc3fe994ce5] pool-1-thread-1:execute node id:a1a38c2e-0e05-4c68-bd49-f12aea070876
[I]2022/07/27 21:34:36.519 [your flow id][970f3310-4ca1-41db-9348-bcc3fe994ce5] pool-1-thread-1:execute node name: Query user information
Start querying user information ( Simulate business waiting 3 second )
[I]2022/07/27 21:34:36.519 [your flow id][970f3310-4ca1-41db-9348-bcc3fe994ce5] pool-1-thread-2:execute node id:1a90a997-4390-470a-ae7c-626a725438d2
[I]2022/07/27 21:34:36.519 [your flow id][970f3310-4ca1-41db-9348-bcc3fe994ce5] pool-1-thread-2:execute node name: Check hotel information
Check the hotel information ( Simulate business waiting 3 second )
End of user information query
End of hotel information inquiry
[I]2022/07/27 21:34:39.522 [your flow id][970f3310-4ca1-41db-9348-bcc3fe994ce5] pool-1-thread-2:execute node id:52289e99-363d-4453-8077-ca8bdc6d35bf
[I]2022/07/27 21:34:39.522 [your flow id][970f3310-4ca1-41db-9348-bcc3fe994ce5] pool-1-thread-2:execute node name: Place an order
Order start ( Simulate business waiting 3 second )
End of order
[I]2022/07/27 21:34:42.529 [your flow id][970f3310-4ca1-41db-9348-bcc3fe994ce5] pool-1-thread-2:execute node id:16422cbb-ccb0-4fe2-952b-e3ad5c3acbb2
[I]2022/07/27 21:34:42.529 [your flow id][970f3310-4ca1-41db-9348-bcc3fe994ce5] pool-1-thread-2:execute node name: checkout success
Order successfully started ( Simulate business waiting 3 second )
The order was successfully placed
[I]2022/07/27 21:34:45.530 [your flow id][970f3310-4ca1-41db-9348-bcc3fe994ce5] Thread-1:Complete success.
[I]2022/07/27 21:34:45.532 [your flow id][970f3310-4ca1-41db-9348-bcc3fe994ce5] Thread-1:json:
{"nodes":[{"id": "1","label": "start" ,"color": "#36AE7C"},{"id": "a1a38c2e-0e05-4c68-bd49-f12aea070876","label": " Query user information " ,"color": "#36AE7C"},{"id": "1a90a997-4390-470a-ae7c-626a725438d2","label": " Check hotel information " ,"color": "#36AE7C"},{"id": "52289e99-363d-4453-8077-ca8bdc6d35bf","label": " Place an order " ,"color": "#36AE7C"},{"id": "16422cbb-ccb0-4fe2-952b-e3ad5c3acbb2","label": " checkout success " ,"color": "#36AE7C"},{"id": "5a1068c1-e365-4a51-b617-8cc093ce5e3d","label": " Check order " ,"color": "#36AE7C"},{"id": "0aa3e9de-4015-4db0-9eda-fd1cd0fbbf10","label": " You can book " ,"color": "#36AE7C"},{"id": "7e841bf6-b422-4c2c-b4ec-d2352e22cc88","label": " No reservations " ,"color": "#E8F9FD"},{"id": "8fc59321-8b96-4e17-9d8e-0c8f5fe9c45e","label": " Failure to deal with " ,"color": "#E8F9FD"}],"edges":[{"id": "1","from": "1","to": "2","arrows": "to"},{"id": "b3ad7ab3-8fb6-4527-8cae-6845e03da3e4","from": "0aa3e9de-4015-4db0-9eda-fd1cd0fbbf10","to": "a1a38c2e-0e05-4c68-bd49-f12aea070876","arrows": "to"},{"id": "001375c7-19e7-436b-bbcd-68e36c8f23b7","from": "5a1068c1-e365-4a51-b617-8cc093ce5e3d","to": "0aa3e9de-4015-4db0-9eda-fd1cd0fbbf10","arrows": "to"},{"id": "dd830043-c7a7-4c71-b91c-10c007b7b19c","from": "1a90a997-4390-470a-ae7c-626a725438d2","to": "52289e99-363d-4453-8077-ca8bdc6d35bf","arrows": "to"},{"id": "21c2c69d-0050-4eca-8283-5a2bcbdc6c37","from": "52289e99-363d-4453-8077-ca8bdc6d35bf","to": "16422cbb-ccb0-4fe2-952b-e3ad5c3acbb2","arrows": "to"},{"id": "19f2f329-8163-4dc6-a353-800df79d18a6","from": "a1a38c2e-0e05-4c68-bd49-f12aea070876","to": "52289e99-363d-4453-8077-ca8bdc6d35bf","arrows": "to"},{"id": "822e5c76-ce59-4962-b5e3-a3dfd905fa05","from": "1","to": "5a1068c1-e365-4a51-b617-8cc093ce5e3d","arrows": "to"},{"id": "36d6e697-b835-4374-9fa7-c1cd24b100e9","from": "5a1068c1-e365-4a51-b617-8cc093ce5e3d","to": "7e841bf6-b422-4c2c-b4ec-d2352e22cc88","arrows": "to"},{"id": "d4a03a18-2a24-4bec-9717-a82c8a4a764b","from": "0aa3e9de-4015-4db0-9eda-fd1cd0fbbf10","to": "1a90a997-4390-470a-ae7c-626a725438d2","arrows": "to"},{"id": "673051d5-27f5-4578-8fc2-4f5e7352d5d2","from": "7e841bf6-b422-4c2c-b4ec-d2352e22cc88","to": "8fc59321-8b96-4e17-9d8e-0c8f5fe9c45e","arrows": "to"}]}
success
[I]2022/07/27 21:34:45.532 main:Ready queue thread stoped.
[I]2022/07/27 21:34:45.532 main:Ready queue thread stoped.
[I]2022/07/27 21:34:45.533 main:NodePool stoped. Fold
End the process json Copy the string to the following , And then click [show network] Button , It can display the status after the process is executed
green : Successful implementation , Red : Execution failure , white : unexecuted

Thank you for reading this article .
Last
Design information and detailed usage can refer to the previous article :https://blog.csdn.net/nobuglady/p/16474433.html
Source code :https://github.com/nobuglady/ladybugflow
Running example source code :https://github.com/nobuglady/ladybugflow-demo
边栏推荐
- JS modify table font and table border style
- Dockler的基础用法
- [深入研究4G/5G/6G专题-44]: URLLC-15-《3GPP URLLC相关协议、规范、技术原理深度解读》-9-低延时技术-3-非时隙调度Mini slot
- ES6 new - arrow function
- SaltStack之salt-ssh
- 这种动态规划你见过吗——状态机动态规划之股票问题(下)
- adb remount of the / superblock failed: Permission denied
- Share several coding code receiving verification code platforms, which will be updated in February 2022
- Failed to install app-debug.apk: Failure [INSTALL_FAILED_TEST_ONLY: installPackageLI]
- 这个客制化键盘,秀翻我了~
猜你喜欢

智能合约安全——溢出漏洞

SaltStack系统初始化

【已解决】AC86U ML改版固件虚拟内存创建失败,提示USB磁盘读写速度不满足要求

11、 学习MySQL UNION 操作符

When CNN meets transformer cmt:revolutionary neural networks meet vision transformers

BLDC 6-step commutation simulink

2022年全国最新消防设施操作员(中级消防设施操作员)题库及答案

Quickly install torch spark, torch geometric and other packages in moment pool cloud

OpenOCD如何通过stlink直接下载程序到stm32板子(已解决)

SaltStack入门
随机推荐
Avoidance Adjusted Climbrate
华为入股南京芯视界,布局固态激光雷达芯片领域
Prometheus部署
Photoshop web design practical tutorial
博途1200/1500PLC上升沿下降沿指令编程应用技巧(bool数组)
ES6 new - arrow function
C string to short[] method
【笔记】《启示录》:产品经理的实践经验与反省清单
SaltStack之salt-ssh
峰值速率超2Gbps!高通在中国首发通过5G毫米波MIMO OTA测试
英文翻译意大利语-批量英文翻译意大利语工具免费
Rust Getting Started Guide (modules and engineering structures)
身份证号的奥秘
Rust 入门指南(modules 和工程结构)
投资35.45亿元!格力集团参与小米产业基金
英文翻译葡萄牙语-批量英文转换葡萄牙语-各种语言免费互译转换
Using Baidu easydl to realize chef hat recognition of bright kitchen and stove
WPF 实现带蒙版的 MessageBox 消息提示框
使用SaltStack自动化部署Zabbix
andorid系统layout、values、drawable适配