Переглянути джерело

Merge remote-tracking branch 'origin/master'

zhouhao 7 роки тому
батько
коміт
43cef61ba4

Різницю між файлами не показано, бо вона завелика
+ 5 - 5
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable-modeler/src/test/resources/processes/SimpleProcess.bpmn20.xml


+ 1 - 0
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/main/java/org/hswebframework/web/workflow/flowable/FlowableAutoConfiguration.java

@@ -30,6 +30,7 @@ public class FlowableAutoConfiguration {
         return configuration -> {
         return configuration -> {
             configuration
             configuration
                     .setAsyncExecutorActivate(false)
                     .setAsyncExecutorActivate(false)
+                    .setDatabaseSchemaUpdate("false")
                     .setJobExecutorActivate(false)
                     .setJobExecutorActivate(false)
                     .setActivityFontName("宋体")
                     .setActivityFontName("宋体")
                     .setLabelFontName("宋体")
                     .setLabelFontName("宋体")

+ 11 - 2
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/main/java/org/hswebframework/web/workflow/flowable/service/BpmActivityService.java

@@ -1,6 +1,7 @@
 package org.hswebframework.web.workflow.flowable.service;
 package org.hswebframework.web.workflow.flowable.service;
 
 
 import org.activiti.engine.impl.pvm.process.ActivityImpl;
 import org.activiti.engine.impl.pvm.process.ActivityImpl;
+import org.activiti.engine.impl.task.TaskDefinition;
 
 
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
@@ -58,9 +59,17 @@ public interface BpmActivityService {
      *
      *
      * @param procDefId        流程定义ID
      * @param procDefId        流程定义ID
      * @param activityId        图元ID
      * @param activityId        图元ID
-     * @return List<ActivityImpl>  当前流程的所有节点资源
+     * @return List<TaskDefinition>  当前流程的所有下一环节资源
+     */
+    List<TaskDefinition> getNextActivitys(String procDefId, String activityId);
+
+    /**
+     * 根据图元获取办理环节数据
+     * @param activityImpl
+     * @param elString 根据连线条件conditionText获取输出节点,主要用于网关分支(预留)
+     * @return
      */
      */
-    List<ActivityImpl> getNextActivitys(String procDefId, String activityId);
+    List<TaskDefinition> getTaskDefinition(ActivityImpl activityImpl, String elString);
 
 
     /**
     /**
      * 获取下一环节办理人
      * 获取下一环节办理人

+ 49 - 10
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/main/java/org/hswebframework/web/workflow/flowable/service/imp/BpmActivityServiceImp.java

@@ -2,7 +2,9 @@ package org.hswebframework.web.workflow.flowable.service.imp;
 
 
 import org.activiti.engine.delegate.Expression;
 import org.activiti.engine.delegate.Expression;
 import org.activiti.engine.impl.RepositoryServiceImpl;
 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.persistence.entity.ProcessDefinitionEntity;
+import org.activiti.engine.impl.pvm.PvmActivity;
 import org.activiti.engine.impl.pvm.PvmTransition;
 import org.activiti.engine.impl.pvm.PvmTransition;
 import org.activiti.engine.impl.pvm.process.ActivityImpl;
 import org.activiti.engine.impl.pvm.process.ActivityImpl;
 import org.activiti.engine.impl.task.TaskDefinition;
 import org.activiti.engine.impl.task.TaskDefinition;
@@ -94,35 +96,72 @@ public class BpmActivityServiceImp extends FlowableAbstract implements BpmActivi
     }
     }
 
 
     @Override
     @Override
-    public List<ActivityImpl> getNextActivitys(String procDefId, String activityId) {
+    public List<TaskDefinition> getNextActivitys(String procDefId, String activityId) {
         ActivityImpl activity;
         ActivityImpl activity;
         if(activityId!=null)
         if(activityId!=null)
             activity = getActivityById(procDefId, activityId);
             activity = getActivityById(procDefId, activityId);
         else
         else
             activity = getStartEvent(procDefId);
             activity = getStartEvent(procDefId);
         List<PvmTransition> pvmTransitions = activity.getOutgoingTransitions();
         List<PvmTransition> pvmTransitions = activity.getOutgoingTransitions();
-        List<ActivityImpl> activities = new ArrayList<>();
+        List<TaskDefinition> taskDefinitions = new ArrayList<>();
         for(PvmTransition pvmTransition : pvmTransitions){
         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
     @Override
     public Map<String, List<String>> getNextClaim(String procDefId, String activityId) {
     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<>();
         Map<String, List<String>> map = new HashMap<>();
-        for(ActivityImpl activity : activities){
+        for(TaskDefinition taskDefinition : taskDefinitions){
             List<String> list = new ArrayList<>();
             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());
                 list.add(taskDefinition.getAssigneeExpression().getExpressionText());
-            else if(taskDefinition.getCandidateUserIdExpressions()!=null){
+            else if(taskDefinition!=null && taskDefinition.getCandidateUserIdExpressions()!=null){
                 for(Expression expression : taskDefinition.getCandidateUserIdExpressions()){
                 for(Expression expression : taskDefinition.getCandidateUserIdExpressions()){
                     list.add(expression.getExpressionText());
                     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;
         return map;
     }
     }

+ 4 - 1
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/main/java/org/hswebframework/web/workflow/flowable/service/imp/BpmTaskServiceImp.java

@@ -182,12 +182,15 @@ public class BpmTaskServiceImp extends FlowableAbstract implements BpmTaskServic
 
 
     @Override
     @Override
     public ActivityImpl selectActivityImplByTask(String taskId) {
     public ActivityImpl selectActivityImplByTask(String taskId) {
+        if(StringUtils.isNullOrEmpty(taskId)){
+            return new ActivityImpl(null,null);
+        }
         Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
         Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
         ProcessDefinitionEntity entity = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService).getDeployedProcessDefinition(task.getProcessDefinitionId());
         ProcessDefinitionEntity entity = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService).getDeployedProcessDefinition(task.getProcessDefinitionId());
         List<ActivityImpl> activities = entity.getActivities();
         List<ActivityImpl> activities = entity.getActivities();
         ActivityImpl activity = null;
         ActivityImpl activity = null;
         for(ActivityImpl activity1 : activities){
         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;
                 activity = activity1;
             }
             }
         }
         }

+ 24 - 7
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/test/java/org/hswebframework/web/workflow/flowable/ControllerTest.java

@@ -48,7 +48,10 @@ public class ControllerTest extends SimpleWebApplicationTests {
     public ProcessInstance start() throws Exception {
     public ProcessInstance start() throws Exception {
         Map<String, Object> map = new HashMap<>();
         Map<String, Object> map = new HashMap<>();
         map.put("username", "admin");
         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
     // 流程图元数据test
@@ -93,13 +96,20 @@ public class ControllerTest extends SimpleWebApplicationTests {
         System.out.println(activity);
         System.out.println(activity);
         System.out.println("=========>>>");
         System.out.println("=========>>>");
         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());
         tasks = bpmTaskService.selectTaskByProcessId(processInstance.getId());
         Assert.assertNotNull(tasks);
         Assert.assertNotNull(tasks);
         for (Task task: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("=========>>>");
         System.out.println("=========>>>");
         activity = bpmActivityService.getActivityByProcInstId(processInstance.getProcessDefinitionId(), processInstance.getId());
         activity = bpmActivityService.getActivityByProcInstId(processInstance.getProcessDefinitionId(), processInstance.getId());
@@ -109,10 +119,17 @@ public class ControllerTest extends SimpleWebApplicationTests {
 
 
     }
     }
 
 
+    @Autowired
+    RepositoryService repositoryService;
+
     @Test
     @Test
     public void task(){
     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
     @Configuration

Різницю між файлами не показано, бо вона завелика
+ 5 - 5
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/test/resources/processes/SimpleProcess.bpmn20.xml