package com.norteksoft.wf.unit; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.junit.Assert; import org.junit.Test; import org.unitils.database.annotations.Transactional; import org.unitils.database.util.TransactionMode; import org.unitils.spring.annotation.SpringApplicationContext; import org.unitils.spring.annotation.SpringBeanByName; import com.norteksoft.ems.entity.ExpenseReport; import com.norteksoft.ems.service.ExpenseReportManager; import com.norteksoft.product.api.ApiFactory; import com.norteksoft.product.api.entity.WorkflowInstance; import com.norteksoft.product.api.entity.WorkflowTask; import com.norteksoft.product.util.ParameterUtils; import com.norteksoft.task.service.WorkflowTaskManager; import com.norteksoft.wf.base.enumeration.CompleteTaskTipType; import com.norteksoft.wf.engine.entity.WorkflowDefinition; import com.norteksoft.wf.engine.service.TaskService; import com.norteksoft.wf.engine.service.WorkflowDefinitionManager; import com.norteksoft.wf.engine.service.WorkflowInstanceManager; /** * 工作流里流程定义 * */ @Transactional(TransactionMode.ROLLBACK) @SpringApplicationContext({"applicationContext-test.xml","applicationContext-memcache.xml"}) public class WorkflowDefinitionTest extends BaseWorkflowTestCase{ @SpringBeanByName WorkflowDefinitionManager workflowDefinitionManager; @SpringBeanByName WorkflowInstanceManager workflowInstanceManager; @SpringBeanByName ExpenseReportManager expenseReportManager; @SpringBeanByName TaskService taskService; @SpringBeanByName WorkflowTaskManager workflowTaskManager; //增加 @Test public void saveWorkflowDefinition(){ String fileContent = readFileContent("wf_test_8.xml"); Long id = workflowDefinitionManager.saveWorkflowDefinition(null, 1L, fileContent,1L,7L); Assert.assertNotNull(id); } //修改 @Test public void updateWfDefVersion(){ String fileContent = readFileContent("wf_test_8.xml"); Long id = workflowDefinitionManager.saveWorkflowDefinition(null, 1L, fileContent,1L,7L); Long result = workflowDefinitionManager.updateWfDefVersion(id, 1L, fileContent,1L,7L); Assert.assertNotNull(result); } //修改基本属性 @Test public void saveWfBasic(){ String fileContent = readFileContent("wf_test_8.xml"); Long id = workflowDefinitionManager.saveWorkflowDefinition(null, 1L, fileContent,1L,7L); WorkflowDefinition wf = workflowDefinitionManager.getWfDefinitionByWfdId(id); wf.setName("wangjing_wf_testtttt"); workflowDefinitionManager.saveWfBasic(wf,"test"); WorkflowDefinition result = workflowDefinitionManager.getWfDefinitionByWfdId(id); Assert.assertEquals("wangjing_wf_testtttt", result.getName()); } //删除 @Test public void delete(){ List<Long> wfIds = new ArrayList<Long>(); String fileContent = readFileContent("wf_test_8.xml"); wfIds.add(workflowDefinitionManager.saveWorkflowDefinition(null, 1L, fileContent,1L,7L)); wfIds.add(workflowDefinitionManager.saveWorkflowDefinition(null, 1L, fileContent,1L,7L)); int result = workflowDefinitionManager.deleteWfDefinitions(wfIds); Assert.assertEquals(2,result); } //启用、禁用 @Test public void deployProcess() throws UnsupportedEncodingException{ String fileContent = readFileContent("wf_test_8.xml"); Long id = workflowDefinitionManager.saveWorkflowDefinition(null, 1L, fileContent,1L,7L); String result = workflowDefinitionManager.deployProcess(id); Assert.assertEquals("草稿 -> 启用",result); WorkflowDefinition wf = workflowDefinitionManager.getWfDefinitionByWfdId(id); String result2 = workflowDefinitionManager.deployProcess(id); Assert.assertEquals("启用 -> 禁用",result2); } //取消流程 @Test public void endWorkflowInstance() { // 准备数据 deploy("wf_test_8.xml"); ParameterUtils.setParameters(getPrmt(1L, 65L, "test2", "test2")); ExpenseReport dp = new ExpenseReport(); dp.setCompanyId(1L); expenseReportManager.save(dp); // 启动流程 ApiFactory.getInstanceService().startInstance("wf_test_8",1,dp); // 提交第一环节任务 CompleteTaskTipType cttt = ApiFactory.getInstanceService().submitInstance("wf_test_8",1, dp); Assert.assertEquals(CompleteTaskTipType.OK, cttt); //根据实例id查询流程实例 WorkflowInstance instance=ApiFactory.getInstanceService().getInstance(dp.getWorkflowInfo().getWorkflowId()); Set<Long> workflowIds = new HashSet<Long>(); workflowIds.add(instance.getId()); String result = workflowInstanceManager.endWorkflowInstance(workflowIds); Assert.assertEquals("1个已取消", result); } //暂停流程 @Test public void pauseWorkflowInstance() { // 准备数据 deploy("wf_test_8.xml"); ParameterUtils.setParameters(getPrmt(1L, 65L, "test2", "test2")); ExpenseReport dp = new ExpenseReport(); dp.setCompanyId(1L); expenseReportManager.save(dp); // 启动流程 ApiFactory.getInstanceService().startInstance("wf_test_8",1,dp); // 提交第一环节任务 CompleteTaskTipType cttt = ApiFactory.getInstanceService().submitInstance("wf_test_8",1, dp); Assert.assertEquals(CompleteTaskTipType.OK, cttt); //根据实例id查询流程实例 WorkflowInstance instance=ApiFactory.getInstanceService().getInstance(dp.getWorkflowInfo().getWorkflowId()); Set<Long> workflowIds = new HashSet<Long>(); workflowIds.add(instance.getId()); String result = workflowInstanceManager.pauseWorkflowInstance(workflowIds); Assert.assertEquals("1个已暂停", result); } //继续流程 @Test public void continueWorkflowInstance() { // 准备数据 deploy("wf_test_8.xml"); ParameterUtils.setParameters(getPrmt(1L, 65L, "test2", "test2")); ExpenseReport dp = new ExpenseReport(); dp.setCompanyId(1L); expenseReportManager.save(dp); // 启动流程 ApiFactory.getInstanceService().startInstance("wf_test_8",1,dp); // 提交第一环节任务 CompleteTaskTipType cttt = ApiFactory.getInstanceService().submitInstance("wf_test_8",1, dp); Assert.assertEquals(CompleteTaskTipType.OK, cttt); //根据实例id查询流程实例 WorkflowInstance instance=ApiFactory.getInstanceService().getInstance(dp.getWorkflowInfo().getWorkflowId()); Set<Long> workflowIds = new HashSet<Long>(); workflowIds.add(instance.getId()); String result1 = workflowInstanceManager.pauseWorkflowInstance(workflowIds); Assert.assertEquals("1个已暂停", result1); String result = workflowInstanceManager.continueWorkflowInstance(workflowIds); Assert.assertEquals("1个已继续", result); } //强制结束流程 @Test public void compelEndWorkflowInstance() { // 准备数据 deploy("wf_test_8.xml"); ParameterUtils.setParameters(getPrmt(1L, 65L, "test2", "test2")); ExpenseReport dp = new ExpenseReport(); dp.setCompanyId(1L); expenseReportManager.save(dp); // 启动流程 ApiFactory.getInstanceService().startInstance("wf_test_8",1,dp); // 提交第一环节任务 CompleteTaskTipType cttt = ApiFactory.getInstanceService().submitInstance("wf_test_8",1, dp); Assert.assertEquals(CompleteTaskTipType.OK, cttt); //根据实例id查询流程实例 WorkflowInstance instance=ApiFactory.getInstanceService().getInstance(dp.getWorkflowInfo().getWorkflowId()); Set<Long> workflowIds = new HashSet<Long>(); workflowIds.add(instance.getId()); String result = workflowInstanceManager.compelEndWorkflowInstance(workflowIds); Assert.assertEquals("1个已强制结束", result); } //更改办理人 @Test public void changeTransactor() { // 准备数据 deploy("wf_test_8.xml"); ParameterUtils.setParameters(getPrmt(1L, 65L, "test2", "test2")); ExpenseReport dp = new ExpenseReport(); dp.setCompanyId(1L); expenseReportManager.save(dp); // 提交第一环节任务 ApiFactory.getInstanceService().submitInstance("wf_test_8", dp); List<WorkflowTask> tasks= ApiFactory.getTaskService().getActivityTasks(dp); Assert.assertNotNull(tasks.get(0)); taskService.changeTransactor(tasks.get(0).getId(), "ldx"); WorkflowTask result = ApiFactory.getTaskService().getActiveTaskByLoginName(dp, "ldx"); Assert.assertEquals("ldx", result.getTransactor()); } //增加办理人 @Test public void addTransactor() { // 准备数据 deploy("wf_test_8.xml"); ParameterUtils.setParameters(getPrmt(1L, 65L, "test2", "test2")); ExpenseReport dp = new ExpenseReport(); dp.setCompanyId(1L); expenseReportManager.save(dp); // 提交第一环节任务 ApiFactory.getInstanceService().submitInstance("wf_test_8", dp); List<WorkflowTask> tasks= ApiFactory.getTaskService().getActivityTasks(dp); Assert.assertNotNull(tasks.get(0)); List<String> transactors = new ArrayList<String>(); transactors.add(33+""); taskService.addTransactor(tasks.get(0).getProcessInstanceId(), transactors); WorkflowTask result = ApiFactory.getTaskService().getActiveTaskByLoginName(dp, "ldx"); Assert.assertEquals("ldx", result.getTransactor()); } //减少办理人 @Test public void delTransactor() { // 准备数据 deploy("wf_test_8.xml"); ParameterUtils.setParameters(getPrmt(1L, 65L, "test2", "test2")); ExpenseReport dp = new ExpenseReport(); dp.setCompanyId(1L); expenseReportManager.save(dp); // 提交第一环节任务 ApiFactory.getInstanceService().submitInstance("wf_test_8", dp); List<WorkflowTask> tasks= ApiFactory.getTaskService().getActivityTasks(dp); Assert.assertNotNull(tasks.get(0)); List<String> transactors = new ArrayList<String>(); transactors.add(33+""); taskService.addTransactor(tasks.get(0).getProcessInstanceId(), transactors); WorkflowTask result1 = ApiFactory.getTaskService().getActiveTaskByLoginName(dp, "ldx"); Assert.assertEquals("ldx", result1.getTransactor()); List<Long> transactorIds = new ArrayList<Long>(); transactorIds.add(33l); //减少办理人 taskService.delTransactor(tasks.get(0).getProcessInstanceId(),new ArrayList<String>(), transactorIds); WorkflowTask result = ApiFactory.getTaskService().getActiveTaskByLoginName(dp, "ldx"); Assert.assertTrue(result==null); } //环节跳转 @Test public void goback() { // 准备数据 deploy("wf_test_8.xml"); ParameterUtils.setParameters(getPrmt(1L, 65L, "test2", "test2")); ExpenseReport dp = new ExpenseReport(); dp.setCompanyId(1L); expenseReportManager.save(dp); // 提交第一环节任务 ApiFactory.getInstanceService().submitInstance("wf_test_8", dp); List<WorkflowTask> tasks= ApiFactory.getTaskService().getActivityTasks(dp); Assert.assertNotNull(tasks.get(0)); com.norteksoft.wf.engine.entity.WorkflowInstance workflowInstance = workflowInstanceManager.getWorkflowInstance(tasks.get(0).getProcessInstanceId()); CompleteTaskTipType result = taskService.taskJump(workflowInstance, "审批报销单",new ArrayList<String>(),null,false); Assert.assertEquals(CompleteTaskTipType.OK, result); } //批量移除任务 @Test public void delTasksBatch() { // 准备数据 deploy("wf_test_8.xml"); ParameterUtils.setParameters(getPrmt(1L, 65L, "test2", "test2")); ExpenseReport dp = new ExpenseReport(); dp.setCompanyId(1L); expenseReportManager.save(dp); // 提交第一环节任务 ApiFactory.getInstanceService().submitInstance("wf_test_8", dp); List<WorkflowTask> tasks= ApiFactory.getTaskService().getActivityTasks(dp); Assert.assertNotNull(tasks.get(0)); List<Long> taskIds = new ArrayList<Long>(); taskIds.add(tasks.get(0).getId()); Map<String, List<com.norteksoft.task.entity.WorkflowTask>> chooseTasks = taskService.deleteTasks(taskIds); Assert.assertNotNull(chooseTasks.get("JUST_ONE")); } //批量环节跳转 @Test public void volumeBack() { // 准备数据 deploy("wf_test_8.xml"); ParameterUtils.setParameters(getPrmt(1L, 65L, "test2", "test2")); ExpenseReport dp = new ExpenseReport(); dp.setCompanyId(1L); expenseReportManager.save(dp); // 提交第一环节任务 ApiFactory.getInstanceService().submitInstance("wf_test_8", dp); List<WorkflowTask> tasks= ApiFactory.getTaskService().getActivityTasks(dp); Assert.assertNotNull(tasks.get(0)); com.norteksoft.wf.engine.entity.WorkflowInstance workflowInstance = workflowInstanceManager.getWorkflowInstance(tasks.get(0).getProcessInstanceId()); String[] wfids={workflowInstance.getProcessInstanceId()}; CompleteTaskTipType result = taskService.taskJumps(wfids, "审批报销单",new ArrayList<String>(),"volumeBack"); Assert.assertEquals(CompleteTaskTipType.OK, result); } //删除 @Test public void deleteWorkflowInstances() { // 准备数据 deploy("wf_test_8.xml"); ParameterUtils.setParameters(getPrmt(1L, 65L, "test2", "test2")); ExpenseReport dp = new ExpenseReport(); dp.setCompanyId(1L); expenseReportManager.save(dp); // 提交第一环节任务 ApiFactory.getInstanceService().submitInstance("wf_test_8", dp); List<WorkflowTask> tasks= ApiFactory.getTaskService().getActivityTasks(dp); Assert.assertNotNull(tasks.get(0)); com.norteksoft.wf.engine.entity.WorkflowInstance workflowInstance = workflowInstanceManager.getWorkflowInstance(tasks.get(0).getProcessInstanceId()); Set<com.norteksoft.wf.engine.entity.WorkflowInstance> workflowInstances = new HashSet<com.norteksoft.wf.engine.entity.WorkflowInstance>(); workflowInstances.add(workflowInstance); String result = workflowInstanceManager.deleteWorkflowInstances(workflowInstances); Assert.assertEquals("删除成功1个,失败0个。失败是因为不能单独删除子流程,但删除主流程时会自动把关联的子流程删除。", result); } }