mirror of
https://github.com/hs-web/hsweb-framework.git
synced 2026-06-02 10:57:49 +08:00
Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
|
||||
<process id="test" name="test" isExecutable="true">
|
||||
<process id="testid" name="test" isExecutable="true">
|
||||
<startEvent id="startevent1" name="Start"></startEvent>
|
||||
<userTask id="usertask1" name="User Task" activiti:assignee="ww" activiti:formKey="vacation-request"></userTask>
|
||||
<userTask id="usertask2" name="User Task" activiti:assignee="lisi" activiti:formKey="vacation-request"></userTask>
|
||||
<userTask id="usertask3" name="User Task" activiti:assignee="zhangsan" activiti:formKey="vacation-request"></userTask>
|
||||
<userTask id="usertask1" name="部门立领导" activiti:assignee="ww" activiti:formKey="vacation-request"></userTask>
|
||||
<userTask id="usertask2" name="中心负责人" activiti:assignee="lisi" activiti:formKey="vacation-request"></userTask>
|
||||
<userTask id="usertask3" name="人事部" activiti:assignee="zhangsan" activiti:formKey="vacation-request"></userTask>
|
||||
<sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask3"></sequenceFlow>
|
||||
<exclusiveGateway id="exclusivegateway1" name="Exclusive Gateway"></exclusiveGateway>
|
||||
<sequenceFlow id="flow2" sourceRef="usertask3" targetRef="exclusivegateway1"></sequenceFlow>
|
||||
@@ -17,7 +17,7 @@
|
||||
<sequenceFlow id="flow7" sourceRef="exclusivegateway2" targetRef="endevent1"></sequenceFlow>
|
||||
</process>
|
||||
<bpmndi:BPMNDiagram id="BPMNDiagram_AProcess">
|
||||
<bpmndi:BPMNPlane bpmnElement="test" id="BPMNPlane_AProcess">
|
||||
<bpmndi:BPMNPlane bpmnElement="testid" id="BPMNPlane_AProcess">
|
||||
<bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">
|
||||
<omgdc:Bounds height="35.0" width="35.0" x="50.0" y="170.0"></omgdc:Bounds>
|
||||
</bpmndi:BPMNShape>
|
||||
|
||||
@@ -30,6 +30,7 @@ public class FlowableAutoConfiguration {
|
||||
return configuration -> {
|
||||
configuration
|
||||
.setAsyncExecutorActivate(false)
|
||||
.setDatabaseSchemaUpdate("false")
|
||||
.setJobExecutorActivate(false)
|
||||
.setActivityFontName("宋体")
|
||||
.setLabelFontName("宋体")
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package org.hswebframework.web.workflow.flowable.service;
|
||||
|
||||
import org.activiti.engine.impl.pvm.process.ActivityImpl;
|
||||
import org.activiti.engine.impl.task.TaskDefinition;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -58,9 +59,17 @@ public interface BpmActivityService {
|
||||
*
|
||||
* @param procDefId 流程定义ID
|
||||
* @param activityId 图元ID
|
||||
* @return List<ActivityImpl> 当前流程的所有节点资源
|
||||
* @return List<TaskDefinition> 当前流程的所有下一环节资源
|
||||
*/
|
||||
List<ActivityImpl> getNextActivitys(String procDefId, String activityId);
|
||||
List<TaskDefinition> getNextActivitys(String procDefId, String activityId);
|
||||
|
||||
/**
|
||||
* 根据图元获取办理环节数据
|
||||
* @param activityImpl
|
||||
* @param elString 根据连线条件conditionText获取输出节点,主要用于网关分支(预留)
|
||||
* @return
|
||||
*/
|
||||
List<TaskDefinition> getTaskDefinition(ActivityImpl activityImpl, String elString);
|
||||
|
||||
/**
|
||||
* 获取下一环节办理人
|
||||
|
||||
@@ -2,7 +2,9 @@ package org.hswebframework.web.workflow.flowable.service.imp;
|
||||
|
||||
import org.activiti.engine.delegate.Expression;
|
||||
import org.activiti.engine.impl.RepositoryServiceImpl;
|
||||
import org.activiti.engine.impl.bpmn.behavior.UserTaskActivityBehavior;
|
||||
import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
|
||||
import org.activiti.engine.impl.pvm.PvmActivity;
|
||||
import org.activiti.engine.impl.pvm.PvmTransition;
|
||||
import org.activiti.engine.impl.pvm.process.ActivityImpl;
|
||||
import org.activiti.engine.impl.task.TaskDefinition;
|
||||
@@ -94,35 +96,72 @@ public class BpmActivityServiceImp extends FlowableAbstract implements BpmActivi
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ActivityImpl> getNextActivitys(String procDefId, String activityId) {
|
||||
public List<TaskDefinition> getNextActivitys(String procDefId, String activityId) {
|
||||
ActivityImpl activity;
|
||||
if(activityId!=null)
|
||||
activity = getActivityById(procDefId, activityId);
|
||||
else
|
||||
activity = getStartEvent(procDefId);
|
||||
List<PvmTransition> pvmTransitions = activity.getOutgoingTransitions();
|
||||
List<ActivityImpl> activities = new ArrayList<>();
|
||||
List<TaskDefinition> taskDefinitions = new ArrayList<>();
|
||||
for(PvmTransition pvmTransition : pvmTransitions){
|
||||
activities.add((ActivityImpl)pvmTransition.getDestination());
|
||||
PvmActivity pvmActivity = pvmTransition.getDestination();
|
||||
taskDefinitions.addAll(getTaskDefinition((ActivityImpl)pvmActivity,""));
|
||||
}
|
||||
return activities;
|
||||
return taskDefinitions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TaskDefinition> getTaskDefinition(ActivityImpl activityImpl, String elString) {
|
||||
List<TaskDefinition> taskDefinitionList = new ArrayList<>();
|
||||
List<TaskDefinition> nextTaskDefinition;
|
||||
if("userTask".equals(activityImpl.getProperty("type"))){
|
||||
TaskDefinition taskDefinition = ((UserTaskActivityBehavior)activityImpl.getActivityBehavior()).getTaskDefinition();
|
||||
taskDefinitionList.add(taskDefinition);
|
||||
}else{
|
||||
List<PvmTransition> pvmTransitions = activityImpl.getOutgoingTransitions();
|
||||
List<PvmTransition> outTransitionsTemp;
|
||||
for(PvmTransition tr:pvmTransitions){
|
||||
PvmActivity pvmActivity = tr.getDestination(); //获取线路的终点节点
|
||||
if("exclusiveGateway".equals(pvmActivity.getProperty("type"))||"parallelGateway".equals(pvmActivity.getProperty("type"))){
|
||||
outTransitionsTemp = pvmActivity.getOutgoingTransitions();
|
||||
if(outTransitionsTemp.size() == 1){
|
||||
nextTaskDefinition =getTaskDefinition((ActivityImpl)outTransitionsTemp.get(0).getDestination(), elString);
|
||||
taskDefinitionList.addAll(nextTaskDefinition);
|
||||
}else if(outTransitionsTemp.size() > 1){
|
||||
for(PvmTransition tr1 : outTransitionsTemp){
|
||||
Object s = tr1.getProperty("conditionText");
|
||||
if(elString.equals(s.toString().trim())){
|
||||
nextTaskDefinition = getTaskDefinition((ActivityImpl)tr1.getDestination(), elString);
|
||||
taskDefinitionList.addAll(nextTaskDefinition);
|
||||
}
|
||||
}
|
||||
}
|
||||
}else if("userTask".equals(pvmActivity.getProperty("type"))){
|
||||
taskDefinitionList.add(((UserTaskActivityBehavior)((ActivityImpl)pvmActivity).getActivityBehavior()).getTaskDefinition());
|
||||
}
|
||||
}
|
||||
}
|
||||
return taskDefinitionList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, List<String>> getNextClaim(String procDefId, String activityId) {
|
||||
List<ActivityImpl> activities = getNextActivitys(procDefId, activityId);
|
||||
List<TaskDefinition> taskDefinitions = getNextActivitys(procDefId, activityId);
|
||||
Map<String, List<String>> map = new HashMap<>();
|
||||
for(ActivityImpl activity : activities){
|
||||
for(TaskDefinition taskDefinition : taskDefinitions){
|
||||
List<String> list = new ArrayList<>();
|
||||
TaskDefinition taskDefinition = (TaskDefinition) activity.getProperty("taskDefinition");
|
||||
if(taskDefinition.getAssigneeExpression()!=null)
|
||||
if(taskDefinition!=null && taskDefinition.getAssigneeExpression()!=null)
|
||||
list.add(taskDefinition.getAssigneeExpression().getExpressionText());
|
||||
else if(taskDefinition.getCandidateUserIdExpressions()!=null){
|
||||
else if(taskDefinition!=null && taskDefinition.getCandidateUserIdExpressions()!=null){
|
||||
for(Expression expression : taskDefinition.getCandidateUserIdExpressions()){
|
||||
list.add(expression.getExpressionText());
|
||||
}
|
||||
}
|
||||
map.put(activity.getId(),list);
|
||||
if(taskDefinition.getNameExpression()!=null)
|
||||
map.put(taskDefinition.getNameExpression().getExpressionText(),list);
|
||||
else
|
||||
map.put(taskDefinition.getKey(),list);
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
@@ -182,12 +182,15 @@ public class BpmTaskServiceImp extends FlowableAbstract implements BpmTaskServic
|
||||
|
||||
@Override
|
||||
public ActivityImpl selectActivityImplByTask(String taskId) {
|
||||
if(StringUtils.isNullOrEmpty(taskId)){
|
||||
return new ActivityImpl(null,null);
|
||||
}
|
||||
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
|
||||
ProcessDefinitionEntity entity = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService).getDeployedProcessDefinition(task.getProcessDefinitionId());
|
||||
List<ActivityImpl> activities = entity.getActivities();
|
||||
ActivityImpl activity = null;
|
||||
for(ActivityImpl activity1 : activities){
|
||||
if(activity1.getProperty("name").equals(task.getName())){
|
||||
if(activity1.getProperty("type").equals("userTask") && activity1.getProperty("name").equals(task.getName())){
|
||||
activity = activity1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,7 +48,10 @@ public class ControllerTest extends SimpleWebApplicationTests {
|
||||
public ProcessInstance start() throws Exception {
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("username", "admin");
|
||||
return bpmProcessService.startProcessInstance("1", "test", null, null, "流程名", map);
|
||||
map.put("leader", "zhangsan");
|
||||
map.put("team", "lisi");
|
||||
map.put("people", "wangwu");
|
||||
return bpmProcessService.startProcessInstance("1", "testid", null, null, "流程名", map);
|
||||
}
|
||||
|
||||
// 流程图元数据test
|
||||
@@ -93,13 +96,20 @@ public class ControllerTest extends SimpleWebApplicationTests {
|
||||
System.out.println(activity);
|
||||
System.out.println("=========>>>");
|
||||
System.out.println("=========流程流转下一步,下一步为并行网关。>>>");
|
||||
for (Task task:tasks) {
|
||||
bpmTaskService.complete(task.getId(), "zhangsan",null,null);
|
||||
}
|
||||
// for (Task task:tasks) {
|
||||
// bpmTaskService.complete(task.getId(), "zhangsan",null,null);
|
||||
// }
|
||||
tasks = bpmTaskService.selectTaskByProcessId(processInstance.getId());
|
||||
Assert.assertNotNull(tasks);
|
||||
for (Task task:tasks) {
|
||||
System.out.println("当前环节:"+task.getName()+"__办理人:"+task.getAssignee());
|
||||
System.out.println("当前环节:"+task.getName()+"__id:"+task.getId()+"__办理人:"+task.getAssignee());
|
||||
|
||||
activity = bpmTaskService.selectActivityImplByTask(task.getId());
|
||||
System.out.println("当前节点图元id:"+activity.getId());
|
||||
System.out.println(activity);
|
||||
System.out.println("=========>>>");
|
||||
Map<String, List<String>> map = bpmActivityService.getNextClaim(task.getProcessDefinitionId(),activity.getId());
|
||||
System.out.println("下一步执行json:"+JSON.toJSONString(map));
|
||||
}
|
||||
System.out.println("=========>>>");
|
||||
activity = bpmActivityService.getActivityByProcInstId(processInstance.getProcessDefinitionId(), processInstance.getId());
|
||||
@@ -109,10 +119,17 @@ public class ControllerTest extends SimpleWebApplicationTests {
|
||||
|
||||
}
|
||||
|
||||
@Autowired
|
||||
RepositoryService repositoryService;
|
||||
|
||||
@Test
|
||||
public void task(){
|
||||
List<Task> task = bpmTaskService.selectTaskByProcessId("5");
|
||||
System.out.println(task);
|
||||
ActivityImpl activity = bpmTaskService.selectActivityImplByTask("");
|
||||
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionKey("testid").orderByProcessDefinitionVersion().desc().singleResult();
|
||||
Map<String, List<String>> map = bpmActivityService.getNextClaim(processDefinition.getId(),activity.getId());
|
||||
System.out.println("=========>>>");
|
||||
System.out.println(JSON.toJSONString(map));
|
||||
System.out.println("=========>>>");
|
||||
}
|
||||
|
||||
@Configuration
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
|
||||
<process id="test" name="test" isExecutable="true">
|
||||
<process id="testid" name="test" isExecutable="true">
|
||||
<startEvent id="startevent1" name="Start"></startEvent>
|
||||
<userTask id="usertask1" name="User Task" activiti:assignee="ww" activiti:formKey="vacation-request"></userTask>
|
||||
<userTask id="usertask2" name="User Task" activiti:assignee="lisi" activiti:formKey="vacation-request"></userTask>
|
||||
<userTask id="usertask3" name="User Task" activiti:assignee="zhangsan" activiti:formKey="vacation-request"></userTask>
|
||||
<userTask id="usertask1" name="部门领导" activiti:assignee="ww" activiti:formKey="vacation-request"></userTask>
|
||||
<userTask id="usertask2" name="中心负责人" activiti:assignee="lisi" activiti:formKey="vacation-request"></userTask>
|
||||
<userTask id="usertask3" name="人事部" activiti:assignee="zhangsan" activiti:formKey="vacation-request"></userTask>
|
||||
<sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask3"></sequenceFlow>
|
||||
<exclusiveGateway id="exclusivegateway1" name="Exclusive Gateway"></exclusiveGateway>
|
||||
<sequenceFlow id="flow2" sourceRef="usertask3" targetRef="exclusivegateway1"></sequenceFlow>
|
||||
@@ -17,7 +17,7 @@
|
||||
<sequenceFlow id="flow7" sourceRef="exclusivegateway2" targetRef="endevent1"></sequenceFlow>
|
||||
</process>
|
||||
<bpmndi:BPMNDiagram id="BPMNDiagram_AProcess">
|
||||
<bpmndi:BPMNPlane bpmnElement="test" id="BPMNPlane_AProcess">
|
||||
<bpmndi:BPMNPlane bpmnElement="testid" id="BPMNPlane_AProcess">
|
||||
<bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">
|
||||
<omgdc:Bounds height="35.0" width="35.0" x="50.0" y="170.0"></omgdc:Bounds>
|
||||
</bpmndi:BPMNShape>
|
||||
|
||||
Reference in New Issue
Block a user