diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workflow/test/Form1Listener.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workflow/test/Form1Listener.java new file mode 100644 index 0000000..dcdae63 --- /dev/null +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workflow/test/Form1Listener.java @@ -0,0 +1,43 @@ +package org.springblade.plugin.workflow.test; + +import org.flowable.engine.RuntimeService; +import org.flowable.engine.delegate.DelegateExecution; +import org.flowable.engine.delegate.ExecutionListener; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Map; + +/** + * flowable 执行监听器示例 + * 该监听器可以配置在节点和线 + * @author ytl + * @since 2022-12-28 11:13 + */ +@Component +public class Form1Listener implements ExecutionListener { + @Autowired + private RuntimeService runtimeService; + + @Override + public void notify(DelegateExecution execution) { + String event = execution.getEventName(); + String processInstanceId = execution.getProcessInstanceId(); + switch (event) { + case "start" ://开始时触发 + System.out.println("执行监听器示例start event------------------"); + Map variables = execution.getVariables(); + for(String s : variables.keySet()){ + System.out.println("执行监听器获取到的表单参数:" + s + "-" + variables.get(s).toString()); + } + String currentActivityId = execution.getCurrentActivityId(); + break; + case "end" ://结束时触发 + System.out.println("执行监听器示例end event-----------------"); + break; + case "take" ://主要用于监控流程线,当流程流转该线时触发 + System.out.println("执行监听器示例take event-----------------"); + break; + } + } +} diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workflow/test/TaskListenerTest.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workflow/test/TaskListenerTest.java new file mode 100644 index 0000000..d3e4ad0 --- /dev/null +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workflow/test/TaskListenerTest.java @@ -0,0 +1,57 @@ +package org.springblade.plugin.workflow.test; + +import org.checkerframework.checker.units.qual.A; +import org.flowable.engine.FormService; +import org.flowable.engine.ProcessEngine; +import org.flowable.engine.RuntimeService; +import org.flowable.engine.TaskService; +import org.flowable.engine.delegate.TaskListener; +import org.flowable.engine.form.FormProperty; +import org.flowable.engine.form.StartFormData; +import org.flowable.engine.form.TaskFormData; +import org.flowable.task.service.delegate.DelegateTask; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +/** + * 任务监听器示例 + * 该监听器只能监听带有任务信息的节点,开始和结束节点由于没有任务因此无法监听 + * @author ytl + * @since 2022-12-28 11:36 + */ +@Component +public class TaskListenerTest implements TaskListener { + + @Override + public void notify(DelegateTask delegateTask) { + String event = delegateTask.getEventName(); + String taskId = delegateTask.getId(); + String definitionId = delegateTask.getProcessDefinitionId(); + + switch (event) { + case "create" :// 任务创建时触发,此时所有属性已被设置完毕 + delegateTask.setAssignee("11111111111111"); + Map variables = delegateTask.getVariables(); + for(String s : variables.keySet()){ + System.out.println("任务监听器示例获取的表单参数:" + s + "-" + variables.get(s).toString()); + } + System.out.println("任务监听器示例create event------"); + break; + case "assignment" :// 任务被委派给某人后触发,如通过变量的方式设置处理人时会触发,先于create事件触发 + System.out.println("任务监听器示例assignment event------"); + String assignee = delegateTask.getAssignee(); + System.out.println("任务监听器获取当前负责人:" + assignee); + break; + case "complete" :// 在任务完成后,且被从运行时数据(runtime data)中删除前触发 + System.out.println("任务监听器示例complete event------"); + break; + case "delete" :// 在任务将要被删除之前发生。 + System.out.println("任务监听器示例delete event------"); + break; + } + } +} diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workflow/test/TestController.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workflow/test/TestController.java new file mode 100644 index 0000000..f0dd39c --- /dev/null +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workflow/test/TestController.java @@ -0,0 +1,118 @@ +package org.springblade.plugin.workflow.test; + +import io.swagger.annotations.Api; +import lombok.AllArgsConstructor; +import org.flowable.engine.FormService; +import org.flowable.engine.ProcessEngine; +import org.flowable.engine.RuntimeService; +import org.flowable.engine.TaskService; +import org.flowable.engine.form.FormProperty; +import org.flowable.engine.form.StartFormData; +import org.flowable.engine.form.TaskFormData; +import org.flowable.engine.runtime.ProcessInstance; +import org.flowable.form.api.FormInfo; +import org.flowable.task.api.Task; +import org.springblade.core.tool.api.R; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author ytl + * @since 2022-12-28 10:26 + */ +@RestController +@AllArgsConstructor +@RequestMapping("/flowTest") +@Api(value = "", tags = "") +public class TestController { + @Autowired + private RuntimeService runtimeService; + + @Autowired + private TaskService taskService; + + @Autowired + private FormService formService; + + /** + * 开启流程 + */ + @GetMapping("/startProcess") + public void startProcess(String processDefinitionId){ + ProcessInstance processInstance = runtimeService + .startProcessInstanceById(processDefinitionId) + ; + System.out.println("processInstance--name==" + processInstance.getName()); + } + + /** + * 给节点分配负责人 + */ +// @GetMapping("/setAssign") +// public void setAssign(){ +// Map variable = new HashMap<>(); +// variable.put("assignee","1531816365170929666"); +// runtimeService +// } + /** + * 测试查询某个流程到哪一步了 + */ + @GetMapping("/testProcessStep") + public void testProcessStep(){ + List activeActivityIds = runtimeService.getActiveActivityIds("3d4b3f06-865f-11ed-9d65-024236c41969"); + for (String s : activeActivityIds){ + System.out.println(s); + } + } + + /** + * FormService.getTaskFormData(String taskId) + * 获取流程的form 表单中的数据(具体的数据) + */ + @GetMapping("/getTaskFormData") + public R getTaskFormData(String taskId){ + TaskFormData taskFormData = formService.getTaskFormData(taskId); + List list = taskFormData.getFormProperties(); + for (FormProperty p : list){ + System.out.println(p.getName() + ":" + p.getValue() + ":" + p.getType()); + } + + return R.data(""); + } + + /** + * getStartFormData + * 获取流程的form定义的表单信息 + */ + @GetMapping("/getStartFormData") + public R getStartFormData(String processDefinitionId){ + StartFormData startFormData = formService.getStartFormData(processDefinitionId); + startFormData.getFormProperties().forEach(s->{ + System.out.println(s.getName()); + }); + return R.data(""); + } + + /** + * 给节点分配负责人 + */ + @GetMapping("/doTask") + public R doTask(String taskId){ + Task task = taskService.createTaskQuery() + // .taskAssignee("1530472079338819585") +// .processInstanceId("ee59a8ff-868c-11ed-ab1c-005056c00001") + .taskId(taskId) + .singleResult(); + Map processVariables = task.getProcessVariables(); + Map caseVariables = task.getCaseVariables(); + taskService.setVariable(taskId,"意见","同意把"); + taskService.setAssignee(taskId,"1530823299437965313"); + return R.success(""); + } +}