void SubDivideWorkflowCompleted(WorkflowApplicationCompletedEventArgs e) { //流程结束,将流程实例移除 MyWorkflowInstance.removeDecomposeWorkflowApplication(e.InstanceId.ToString()); CrowdTaskService crowdTaskService = new CrowdTaskService(); //将当前流程的分解解决方案写入数据库 int result = crowdTaskService.saveDecomposeResult(e.InstanceId.ToString(), (ArrayList)e.Outputs["out_arraylist_task"]); //得到当前分解任务的内容 CrowdTask crowdTask = new CrowdTask(); crowdTask = crowdTaskService.findCrowdTaskByWorkflowId(e.InstanceId.ToString()); //通过当前分解任务的父工作流ID ,获得该父工作流的所有子工作流,如果都完成了则开启分解判断过程 ArrayList allSonCrowdTask = crowdTaskService.findAllSonCrowdTaskByParentWorkflowIdAndTaskName(crowdTask.taskParentWorkflowId, crowdTask.taskName, crowdTask.mainTaskId); Dictionary <string, ArrayList> solutionTasks = new Dictionary <string, ArrayList>(); int count = 0; //遍历看看这个任务的同一级的分解任务是否都结束了 foreach (CrowdTask ct in allSonCrowdTask) { WorkflowApplication wa = MyWorkflowInstance.getDecomposeWorkflowApplication(ct.taskWorkflowId); if (wa != null) { break; } else { count++; } } //如果都结束了 if (count == ConstantDefine.divideNumber) { //获得每一个分解任务给出的解决方案 foreach (CrowdTask ct in allSonCrowdTask) { ArrayList solutions = crowdTaskService.findDecomposeResultByWorkflowId(ct.taskWorkflowId, ct.mainTaskId); if (solutions.Count != 0) { //表示当前工作流Id给出了分解方案 solutionTasks.Add(ct.taskWorkflowId, solutions); } } //表示至少有一个分解任务给出了解决方案 if (solutionTasks.Count != 0) { //开启5个投票流程 工作流实例 for (int i = 0; i < ConstantDefine.decomposeVotingNumber; i++) { StartSubProcess ssp = new StartSubProcess(); ssp.startDevideVotingProcess(solutionTasks); } } //表示所有的当前这几个分解任务都认为这个任务是简单任务,设置简单标记 else { //当前一个任务判定为简单,是要等这一层级的所有任务都判定完了在根据情况,把这一层是简单的任务抛出去 foreach (CrowdTask ct in allSonCrowdTask) { int h = crowdTaskService.updateDecomposeResultByWokflowIdAndTaskName(ct.taskParentWorkflowId, ct.taskName, ct.mainTaskId); } } /* * //等待这一层的所有任务都分解完成了,把这一层的简单任务选出来,分发出去 * ArrayList ThisLayerAllSonCrowdTask = crowdTaskService.findCrowdTaskByParentWorkflowIdAndTaskType(crowdTask.taskParentWorkflowId, TaskType.decomposeTask); * int count1 = 0; * //遍历这一层的任务,看看是否都完成了 * foreach (CrowdTask ct in ThisLayerAllSonCrowdTask) * { * WorkflowApplication wa = MyWorkflowInstance.getDecomposeWorkflowApplication(ct.taskWorkflowId); * if (wa != null) * { * break; * } * else * { * count1++; * } * } * //这一层的所有任务都完成了 * if (ThisLayerAllSonCrowdTask.Count == count1) * { * ArrayList al_simple = crowdTaskService.getAllThisLayerNeedSolvedCrowTaskInDecomposeResult(crowdTask.taskParentWorkflowId); * //可以得到这一层一共有多少个简单任务 * //将每一个简单任务分发出去启动解决流程 * foreach (DecomposeResult al in al_simple) * { * for (int k = 0; k < ConstantDefine.solvingNumber; k++) * { * //将这个任务分发出去 * CrowdTask ct = new CrowdTask(); * ct.taskName = al.taskName; * ct.taskDescription = al.taskDescription; * ct.taskType = TaskType.solveTask; * StartSubProcess ssp = new StartSubProcess(); * ssp.startSolveProcess(ct); * } * } * } * */ } //如果分解的工作流为空。 if (MyWorkflowInstance.getdecomposeWorkflowApplications().Count == 0 && MyWorkflowInstance.getdecomposeVotingWorkflowApplications().Count == 0) { //加载所有的需要解决的任务,作为解决任务发放出去 ArrayList li = crowdTaskService.getAllNeedSolvedCrowTaskInDecomposeResult1(crowdTask.mainTaskId); foreach (DecomposeResult dr in li) { for (int k = 0; k < ConstantDefine.solvingNumber; k++) { //将这个任务分发出去 CrowdTask ct = new CrowdTask(); ct.taskName = dr.taskName; ct.taskDescription = dr.taskDescription; ct.taskType = TaskType.solveTask; ct.taskParentWorkflowId = dr.parent_workflow_id; StartSubProcess ssp = new StartSubProcess(); ssp.startSolveProcess(ct); } } MyWorkflowInstance.getWorkflowApplication(crowdTask.mainTaskId).ResumeBookmark(BookmarkName.Decomposing, null);; } }
void SubDivideWorkflowCompleted(WorkflowApplicationCompletedEventArgs e) { //流程结束,将流程实例移除 MyWorkflowInstance.removeDecomposeWorkflowApplication(e.InstanceId.ToString()); CrowdTaskService crowdTaskService = new CrowdTaskService(); //将当前流程的分解解决方案写入数据库 int result = crowdTaskService.saveDecomposeResult(e.InstanceId.ToString(),(ArrayList)e.Outputs["out_arraylist_task"]); //得到当前分解任务的内容 CrowdTask crowdTask = new CrowdTask(); crowdTask = crowdTaskService.findCrowdTaskByWorkflowId(e.InstanceId.ToString()); //通过当前分解任务的父工作流ID ,获得该父工作流的所有子工作流,如果都完成了则开启分解判断过程 ArrayList allSonCrowdTask = crowdTaskService.findAllSonCrowdTaskByParentWorkflowIdAndTaskName(crowdTask.taskParentWorkflowId, crowdTask.taskName,crowdTask.mainTaskId); Dictionary<string, ArrayList> solutionTasks = new Dictionary<string, ArrayList>(); int count = 0; //遍历看看这个任务的同一级的分解任务是否都结束了 foreach (CrowdTask ct in allSonCrowdTask) { WorkflowApplication wa = MyWorkflowInstance.getDecomposeWorkflowApplication(ct.taskWorkflowId); if (wa != null) { break; } else { count++; } } //如果都结束了 if (count == ConstantDefine.divideNumber) { //获得每一个分解任务给出的解决方案 foreach (CrowdTask ct in allSonCrowdTask) { ArrayList solutions = crowdTaskService.findDecomposeResultByWorkflowId(ct.taskWorkflowId,ct.mainTaskId); if (solutions.Count != 0) { //表示当前工作流Id给出了分解方案 solutionTasks.Add(ct.taskWorkflowId, solutions); } } //表示至少有一个分解任务给出了解决方案 if (solutionTasks.Count != 0) { //开启5个投票流程 工作流实例 for (int i = 0; i < ConstantDefine.decomposeVotingNumber; i++) { StartSubProcess ssp = new StartSubProcess(); ssp.startDevideVotingProcess(solutionTasks); } } //表示所有的当前这几个分解任务都认为这个任务是简单任务,设置简单标记 else { //当前一个任务判定为简单,是要等这一层级的所有任务都判定完了在根据情况,把这一层是简单的任务抛出去 foreach (CrowdTask ct in allSonCrowdTask) { int h = crowdTaskService.updateDecomposeResultByWokflowIdAndTaskName(ct.taskParentWorkflowId, ct.taskName,ct.mainTaskId); } } /* //等待这一层的所有任务都分解完成了,把这一层的简单任务选出来,分发出去 ArrayList ThisLayerAllSonCrowdTask = crowdTaskService.findCrowdTaskByParentWorkflowIdAndTaskType(crowdTask.taskParentWorkflowId, TaskType.decomposeTask); int count1 = 0; //遍历这一层的任务,看看是否都完成了 foreach (CrowdTask ct in ThisLayerAllSonCrowdTask) { WorkflowApplication wa = MyWorkflowInstance.getDecomposeWorkflowApplication(ct.taskWorkflowId); if (wa != null) { break; } else { count1++; } } //这一层的所有任务都完成了 if (ThisLayerAllSonCrowdTask.Count == count1) { ArrayList al_simple = crowdTaskService.getAllThisLayerNeedSolvedCrowTaskInDecomposeResult(crowdTask.taskParentWorkflowId); //可以得到这一层一共有多少个简单任务 //将每一个简单任务分发出去启动解决流程 foreach (DecomposeResult al in al_simple) { for (int k = 0; k < ConstantDefine.solvingNumber; k++) { //将这个任务分发出去 CrowdTask ct = new CrowdTask(); ct.taskName = al.taskName; ct.taskDescription = al.taskDescription; ct.taskType = TaskType.solveTask; StartSubProcess ssp = new StartSubProcess(); ssp.startSolveProcess(ct); } } } * */ } //如果分解的工作流为空。 if (MyWorkflowInstance.getdecomposeWorkflowApplications().Count == 0 && MyWorkflowInstance.getdecomposeVotingWorkflowApplications().Count==0) { //加载所有的需要解决的任务,作为解决任务发放出去 ArrayList li = crowdTaskService.getAllNeedSolvedCrowTaskInDecomposeResult1(crowdTask.mainTaskId); foreach (DecomposeResult dr in li) { for (int k = 0; k < ConstantDefine.solvingNumber; k++) { //将这个任务分发出去 CrowdTask ct = new CrowdTask(); ct.taskName = dr.taskName; ct.taskDescription = dr.taskDescription; ct.taskType = TaskType.solveTask; ct.taskParentWorkflowId = dr.parent_workflow_id; StartSubProcess ssp = new StartSubProcess(); ssp.startSolveProcess(ct); } } MyWorkflowInstance.getWorkflowApplication(crowdTask.mainTaskId).ResumeBookmark(BookmarkName.Decomposing,null); ; } }