Przeglądaj źródła

完善接口,单元测试

wangwei 7 lat temu
rodzic
commit
ad2c9e98fe

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

@@ -22,17 +22,19 @@ public interface BpmActivityService {
      * 获取指定节点
      * 获取指定节点
      *
      *
      * @param procDefKey        流程定义Key
      * @param procDefKey        流程定义Key
+     * @param activityId        图元ID
      * @return ActivityImpl       指定的节点,未指定返回当前节点
      * @return ActivityImpl       指定的节点,未指定返回当前节点
      */
      */
-    ActivityImpl getActivityByKey(String procDefKey, String activityId);
+    List<ActivityImpl> getActivityByKey(String procDefKey, String activityId);
 
 
     /**
     /**
      * 获取所有节点
      * 获取所有节点
      *
      *
      * @param procDefId        流程定义ID
      * @param procDefId        流程定义ID
+     * @param activityId        图元ID
      * @return List<ActivityImpl>  当前流程的所有节点资源
      * @return List<ActivityImpl>  当前流程的所有节点资源
      */
      */
-    List<ActivityImpl> getActivitys(String procDefId);
+    List<ActivityImpl> getActivitysById(String procDefId, String activityId);
 
 
     /**
     /**
      * 获取所有userTask
      * 获取所有userTask
@@ -40,14 +42,29 @@ public interface BpmActivityService {
      * @param procDefId        流程定义ID
      * @param procDefId        流程定义ID
      * @return List<ActivityImpl>  当前流程的所有userTask资源
      * @return List<ActivityImpl>  当前流程的所有userTask资源
      */
      */
-    List<ActivityImpl> getUserTasks(String procDefId);
+    List<ActivityImpl> getUserTasksByProcDefId(String procDefId);
+
+    /**
+     * 获取所有userTask
+     *
+     * @param procDefKey        流程定义ID
+     * @return List<ActivityImpl>  当前流程的所有userTask资源
+     */
+    List<ActivityImpl> getUserTasksByProcDefKey(String procDefKey);
+
+    /**
+     * 获取开始节点
+     * @param procDefKey        流程定义Key
+     * @return ActivityImpl       当前流程的结束资源
+     */
+    ActivityImpl getStartEvent(String procDefKey);
 
 
     /**
     /**
      * 获取结束节点
      * 获取结束节点
      * @param procDefId        流程定义ID
      * @param procDefId        流程定义ID
      * @return ActivityImpl       当前流程的结束资源
      * @return ActivityImpl       当前流程的结束资源
      */
      */
-    ActivityImpl getEndActivityImpl(String procDefId);
+    ActivityImpl getEndEvent(String procDefId);
 
 
     /***
     /***
      * 获取当前执行节点
      * 获取当前执行节点
@@ -56,4 +73,11 @@ public interface BpmActivityService {
      * @return
      * @return
      */
      */
     ActivityImpl getActivityByProcInstId(String procDefId, String procInstId);
     ActivityImpl getActivityByProcInstId(String procDefId, String procInstId);
+
+    /**
+     * 根据节点获取下一步执行节点集合
+     * @param activity
+     * @return
+     */
+    List<ActivityImpl> getNextEvent(ActivityImpl activity);
 }
 }

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

@@ -60,7 +60,17 @@ public interface BpmProcessService{
      * @return 流程定义实例
      * @return 流程定义实例
      * @throws Exception 异常信息
      * @throws Exception 异常信息
      */
      */
-    ProcessDefinition getProcessDefinition(String procDefId);
+    ProcessDefinition getProcessDefinitionById(String procDefId);
+
+    /**
+     * 根据流程定义id获取流程定义实例<br/>
+     * 此方法使用了缓存,返回的{@link org.activiti.engine.repository.ProcessDefinition}实例不为activity默认的实例,而是{@link ProcessDefinitionCache},以保证缓存时正常序列化
+     *
+     * @param procDefKey 流程定义id
+     * @return 流程定义实例
+     * @throws Exception 异常信息
+     */
+    ProcessDefinition getProcessDefinitionByKey(String procDefKey);
 
 
     /***
     /***
      * 获取job事件
      * 获取job事件

+ 63 - 17
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.impl.RepositoryServiceImpl;
 import org.activiti.engine.impl.RepositoryServiceImpl;
 import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
 import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
+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.repository.ProcessDefinition;
 import org.activiti.engine.repository.ProcessDefinition;
 import org.activiti.engine.runtime.ProcessInstance;
 import org.activiti.engine.runtime.ProcessInstance;
 import org.hswebframework.web.workflow.flowable.service.BpmActivityService;
 import org.hswebframework.web.workflow.flowable.service.BpmActivityService;
@@ -10,6 +12,8 @@ import org.hswebframework.web.workflow.flowable.utils.FlowableAbstract;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
@@ -31,22 +35,28 @@ public class BpmActivityServiceImp extends FlowableAbstract implements BpmActivi
     }
     }
 
 
     @Override
     @Override
-    public ActivityImpl getActivityByKey(String procDefKey, String activityId) {
+    public List<ActivityImpl> getActivityByKey(String procDefKey, String activityId) {
         ProcessDefinition definition = repositoryService.createProcessDefinitionQuery().processDefinitionKey(procDefKey).orderByProcessDefinitionVersion().desc().list().get(0);
         ProcessDefinition definition = repositoryService.createProcessDefinitionQuery().processDefinitionKey(procDefKey).orderByProcessDefinitionVersion().desc().list().get(0);
         String procDefId = definition.getId();
         String procDefId = definition.getId();
-        return getProcessDefinition(procDefId).findActivity(activityId);
+        if (activityId == null) {
+            return getProcessDefinition(procDefId).getActivities();
+        }else {
+            List<ActivityImpl> activities = new ArrayList<>();
+            activities.add(getProcessDefinition(procDefId).findActivity(activityId));
+            return activities;
+        }
     }
     }
 
 
-    /**
-     * 获取所有节点
-     *
-     * @param processDefId        流程定义ID
-     * @return List<ActivityImpl>  当前流程的所有节点资源
-     */
     @Override
     @Override
-    public List<ActivityImpl> getActivitys(String processDefId){
+    public List<ActivityImpl> getActivitysById(String processDefId, String activityId){
         ProcessDefinitionEntity pde = getProcessDefinition(processDefId);
         ProcessDefinitionEntity pde = getProcessDefinition(processDefId);
-        return pde.getActivities();
+        if (activityId == null) {
+            return pde.getActivities();
+        }else {
+            List<ActivityImpl> activities = new ArrayList<>();
+            activities.add(pde.findActivity(activityId));
+            return activities;
+        }
     }
     }
 
 
     /**
     /**
@@ -56,7 +66,7 @@ public class BpmActivityServiceImp extends FlowableAbstract implements BpmActivi
      * @return List<ActivityImpl>  当前流程的所有userTask资源
      * @return List<ActivityImpl>  当前流程的所有userTask资源
      */
      */
     @Override
     @Override
-    public List<ActivityImpl> getUserTasks(String procDefId){
+    public List<ActivityImpl> getUserTasksByProcDefId(String procDefId){
         ProcessDefinitionEntity pde = getProcessDefinition(procDefId);
         ProcessDefinitionEntity pde = getProcessDefinition(procDefId);
         List<ActivityImpl> activityList = new ArrayList<>();
         List<ActivityImpl> activityList = new ArrayList<>();
         for(ActivityImpl activity : pde.getActivities()){
         for(ActivityImpl activity : pde.getActivities()){
@@ -66,13 +76,39 @@ public class BpmActivityServiceImp extends FlowableAbstract implements BpmActivi
         return activityList;
         return activityList;
     }
     }
 
 
-    /**
-     * 获取结束节点
-     * @param procDefId        流程定义ID
-     * @return ActivityImpl       当前流程的结束资源
-     */
     @Override
     @Override
-    public ActivityImpl getEndActivityImpl(String procDefId){
+    public List<ActivityImpl> getUserTasksByProcDefKey(String procDefKey) {
+        ProcessDefinition definition = repositoryService.createProcessDefinitionQuery().processDefinitionKey(procDefKey).orderByProcessDefinitionVersion().desc().list().get(0);
+        String procDefId = definition.getId();
+        ProcessDefinitionEntity pde = getProcessDefinition(procDefId);
+        List<ActivityImpl> activities = new ArrayList<>();
+        for(ActivityImpl activity : pde.getActivities()){
+            if(activity.getProperty("type").equals("userTask"))
+                activities.add(activity);
+        }
+        Collections.sort(activities, new Comparator<ActivityImpl>() {
+            @Override
+            public int compare(ActivityImpl o1, ActivityImpl o2) {
+                return o1.getId().compareTo(o2.getId());
+            }
+        });
+        return activities;
+    }
+
+    @Override
+    public ActivityImpl getStartEvent(String procDefKey) {
+        List<ActivityImpl> activities = getActivityByKey("test",null);
+        ActivityImpl activity = null;
+        for (ActivityImpl a: activities) {
+            if(a.getProperty("type").equals("startEvent")){
+                activity = a;
+            }
+        }
+        return activity;
+    }
+
+    @Override
+    public ActivityImpl getEndEvent(String procDefId){
         ProcessDefinitionEntity pde = getProcessDefinition(procDefId);
         ProcessDefinitionEntity pde = getProcessDefinition(procDefId);
         for(ActivityImpl activity : pde.getActivities()){
         for(ActivityImpl activity : pde.getActivities()){
             if(activity.getProperty("type").equals("endEvent"))
             if(activity.getProperty("type").equals("endEvent"))
@@ -99,4 +135,14 @@ public class BpmActivityServiceImp extends FlowableAbstract implements BpmActivi
 
 
         return getProcessDefinition(procDefId).findActivity(activityId);
         return getProcessDefinition(procDefId).findActivity(activityId);
     }
     }
+
+    @Override
+    public List<ActivityImpl> getNextEvent(ActivityImpl activity) {
+        List<ActivityImpl> activities = new ArrayList<>();
+        List<PvmTransition> pvmTransitions = activity.getOutgoingTransitions();
+        for(PvmTransition pvmTransition : pvmTransitions){
+            activities.add((ActivityImpl)pvmTransition.getDestination());
+        }
+        return activities;
+    }
 }
 }

+ 7 - 2
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/main/java/org/hswebframework/web/workflow/flowable/service/imp/BpmProcessServiceImp.java

@@ -88,13 +88,18 @@ public class BpmProcessServiceImp extends FlowableAbstract implements BpmProcess
     }
     }
 
 
     @Override
     @Override
-    public ProcessDefinition getProcessDefinition(String processDefinitionId){
+    public ProcessDefinition getProcessDefinitionById(String processDefinitionId){
         return repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult();
         return repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult();
     }
     }
 
 
+    @Override
+    public ProcessDefinition getProcessDefinitionByKey(String procDefKey) {
+        return repositoryService.createProcessDefinitionQuery().processDefinitionKey(procDefKey).orderByProcessDefinitionVersion().desc().list().get(0);
+    }
+
     @Override
     @Override
     public InputStream findProcessPic(String procDefId) {
     public InputStream findProcessPic(String procDefId) {
-        ProcessDefinition definition = getProcessDefinition(procDefId);
+        ProcessDefinition definition = getProcessDefinitionById(procDefId);
         String source = definition.getDiagramResourceName();
         String source = definition.getDiagramResourceName();
         InputStream inputStream = repositoryService.getResourceAsStream(definition.getDeploymentId(),source);
         InputStream inputStream = repositoryService.getResourceAsStream(definition.getDeploymentId(),source);
         return inputStream;
         return inputStream;

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

@@ -169,8 +169,7 @@ public class BpmTaskServiceImp extends FlowableAbstract implements BpmTaskServic
 
 
     @Override
     @Override
     public Map<String,Object> getUserTasksByProcDefKey(String procDefKey){
     public Map<String,Object> getUserTasksByProcDefKey(String procDefKey){
-        String definitionId = repositoryService.createProcessDefinitionQuery().processDefinitionKey(procDefKey).orderByProcessDefinitionVersion().desc().list().get(0).getId();
-        List<ActivityImpl> activitiList = bpmActivityService.getUserTasks(definitionId);
+        List<ActivityImpl> activitiList = bpmActivityService.getUserTasksByProcDefKey(procDefKey);
         Map<String,Object> map = new HashMap<>();
         Map<String,Object> map = new HashMap<>();
         for(ActivityImpl activity:activitiList){
         for(ActivityImpl activity:activitiList){
             map.put(activity.getId(),activity.getProperty("name"));
             map.put(activity.getId(),activity.getProperty("name"));
@@ -181,7 +180,7 @@ public class BpmTaskServiceImp extends FlowableAbstract implements BpmTaskServic
     @Override
     @Override
     public Map<String, Object> getUserTasksByProcInstId(String procInstId) {
     public Map<String, Object> getUserTasksByProcInstId(String procInstId) {
         String definitionId = runtimeService.createProcessInstanceQuery().processInstanceId(procInstId).singleResult().getProcessDefinitionId();
         String definitionId = runtimeService.createProcessInstanceQuery().processInstanceId(procInstId).singleResult().getProcessDefinitionId();
-        List<ActivityImpl> activitiList = bpmActivityService.getUserTasks(definitionId);
+        List<ActivityImpl> activitiList = bpmActivityService.getUserTasksByProcDefId(definitionId);
         Map<String,Object> map = new HashMap<>();
         Map<String,Object> map = new HashMap<>();
         for(ActivityImpl activity:activitiList){
         for(ActivityImpl activity:activitiList){
             map.put(activity.getId(),activity.getProperty("name"));
             map.put(activity.getId(),activity.getProperty("name"));

+ 32 - 4
hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/test/java/org/hswebframework/web/workflow/flowable/ControllerTest.java

@@ -5,16 +5,21 @@ import org.activiti.engine.*;
 import org.activiti.engine.impl.RepositoryServiceImpl;
 import org.activiti.engine.impl.RepositoryServiceImpl;
 import org.activiti.engine.impl.interceptor.SessionFactory;
 import org.activiti.engine.impl.interceptor.SessionFactory;
 import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
 import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
+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.pvm.process.ProcessDefinitionImpl;
 import org.activiti.engine.impl.pvm.process.ProcessDefinitionImpl;
+import org.activiti.engine.impl.task.TaskDefinition;
 import org.activiti.engine.repository.ProcessDefinition;
 import org.activiti.engine.repository.ProcessDefinition;
 import org.activiti.engine.runtime.ProcessInstance;
 import org.activiti.engine.runtime.ProcessInstance;
+import org.activiti.engine.task.Task;
 import org.activiti.spring.boot.ProcessEngineConfigurationConfigurer;
 import org.activiti.spring.boot.ProcessEngineConfigurationConfigurer;
 import org.hswebframework.web.tests.SimpleWebApplicationTests;
 import org.hswebframework.web.tests.SimpleWebApplicationTests;
 import org.hswebframework.web.workflow.flowable.service.BpmActivityService;
 import org.hswebframework.web.workflow.flowable.service.BpmActivityService;
 import org.hswebframework.web.workflow.flowable.service.BpmProcessService;
 import org.hswebframework.web.workflow.flowable.service.BpmProcessService;
+import org.hswebframework.web.workflow.flowable.service.BpmTaskService;
 import org.hswebframework.web.workflow.flowable.service.imp.BpmActivityServiceImp;
 import org.hswebframework.web.workflow.flowable.service.imp.BpmActivityServiceImp;
 import org.hswebframework.web.workflow.flowable.utils.FlowableAbstract;
 import org.hswebframework.web.workflow.flowable.utils.FlowableAbstract;
+import org.junit.Assert;
 import org.junit.Test;
 import org.junit.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.SpringApplication;
@@ -37,6 +42,8 @@ public class ControllerTest extends SimpleWebApplicationTests {
     BpmActivityService bpmActivityService;
     BpmActivityService bpmActivityService;
     @Autowired
     @Autowired
     BpmProcessService bpmProcessService;
     BpmProcessService bpmProcessService;
+    @Autowired
+    BpmTaskService bpmTaskService;
 
 
     public ProcessInstance start() throws Exception {
     public ProcessInstance start() throws Exception {
         Map<String, Object> map = new HashMap<>();
         Map<String, Object> map = new HashMap<>();
@@ -44,22 +51,43 @@ public class ControllerTest extends SimpleWebApplicationTests {
         return bpmProcessService.startProcessInstance("1", "test", null, null, "流程名", map);
         return bpmProcessService.startProcessInstance("1", "test", null, null, "流程名", map);
     }
     }
 
 
+    // 流程图元数据test
+    @Test
+    public void activityImplTest() {
+        List<ActivityImpl> activities = bpmActivityService.getActivityByKey("test",null);
+        Assert.assertNotNull(activities);
+        System.out.println("获取到的流程节点:"+activities);
+        for (ActivityImpl a: activities) {
+            if(a.getProperty("type").equals("startEvent")){
+                System.out.println(a);
+                List<PvmTransition> pvmTransitions = a.getOutgoingTransitions();
+                Assert.assertEquals(pvmTransitions.size(), 1);
+                System.out.println("流程第一节点办理人:"+((TaskDefinition)pvmTransitions.get(0).getDestination().getProperty("taskDefinition")).getAssigneeExpression());
+            }
+        }
+    }
+
+    // 流程流转test
     @Test
     @Test
-    public void test() {
+    public void processInstanceTest() {
         ProcessInstance processInstance = null;
         ProcessInstance processInstance = null;
         try {
         try {
             processInstance = start();
             processInstance = start();
+            Assert.assertNotNull(processInstance);
             System.out.println("流程已启动:" + processInstance.toString());
             System.out.println("流程已启动:" + processInstance.toString());
             int i = bpmProcessService.getProcessInstances(0, 10, "test").size();
             int i = bpmProcessService.getProcessInstances(0, 10, "test").size();
+            Assert.assertEquals(i,1);
             System.out.println("当前活动流程数:" + i);
             System.out.println("当前活动流程数:" + i);
             System.out.println("当前流程节点ID_" + processInstance.getActivityId());
             System.out.println("当前流程节点ID_" + processInstance.getActivityId());
+            Task task = bpmTaskService.selectTaskByProcessId(processInstance.getId());
+            Assert.assertNotNull(task);
+            System.out.println("当前环节:"+task.getName()+"__办理人:"+task.getAssignee());
         } catch (Exception e) {
         } catch (Exception e) {
             System.out.println("启动流程失败" + e);
             System.out.println("启动流程失败" + e);
         }
         }
-        ProcessDefinitionEntity processDefinitionEntity = ((BpmActivityServiceImp)bpmProcessService).getProcessDefinition(processInstance.getProcessDefinitionId());
+        ProcessDefinitionEntity processDefinitionEntity = ((BpmActivityServiceImp)bpmActivityService).getProcessDefinition(processInstance.getProcessDefinitionId());
         ActivityImpl activity = bpmActivityService.getActivityByProcInstId(processInstance.getProcessDefinitionId(), processInstance.getId());
         ActivityImpl activity = bpmActivityService.getActivityByProcInstId(processInstance.getProcessDefinitionId(), processInstance.getId());
-        System.out.println("流程节点读取");
-        System.out.println(processDefinitionEntity.getActivities());
+        System.out.println("当前流程图元");
         System.out.println(activity);
         System.out.println(activity);
         System.out.println("=========>>>");
         System.out.println("=========>>>");
     }
     }