void DevideVotingWorkflowCompleted(WorkflowApplicationCompletedEventArgs e) { MyWorkflowInstance.removeVotingDecomposeWorkflowApplication(e.InstanceId.ToString()); CrowdTask crowdTask = new CrowdTask(); CrowdTaskService crowdTaskService = new CrowdTaskService(); //将当前流程的投票的分解的工作流ID写入数据库 int result = crowdTaskService.saveDecomposeVoteResult(e.InstanceId.ToString(), (string)e.Outputs["out_bestSolutionWorkflowId"]); crowdTask = crowdTaskService.findCrowdTaskByWorkflowId(e.InstanceId.ToString()); //通过当前任务的父工作流ID ,获得该父工作流的所有子工作流,如果都完成了则开启分解判断过程 int count = 0; ArrayList allSonCrowdTask = crowdTaskService.findCrowdTaskByParentWorkflowIdAndTaskTypeAndTaskName(crowdTask.taskParentWorkflowId, crowdTask.taskName, TaskType.decomposeVotingTask, crowdTask.mainTaskId); // Dictionary<string, ArrayList> solutionTasks = new Dictionary<string, ArrayList>(); // Dictionary<string, int> dic=null; foreach (CrowdTask ct in allSonCrowdTask) { WorkflowApplication wa = MyWorkflowInstance.getDecomposeVotingWorkflowApplication(ct.taskWorkflowId); if (wa != null) { //有一个不为空就表示改父工作流的所有子工作流没有都完成 break; } else { //表示完成了 count++; } } if (count == ConstantDefine.decomposeVotingNumber) { //得到这个投票任务的结果 ArrayList arraylist1 = crowdTaskService.findCrowdTaskByParentWorkflowIdAndTaskTypeAndTaskName(crowdTask.taskParentWorkflowId, crowdTask.taskName, TaskType.decomposeTask, crowdTask.mainTaskId); //将arrayList1里面的每个任务取出来,将其ID获得,然后根据ID去decomposeResult 里面取值 int[] nums = new int[ConstantDefine.divideNumber]; string[] votedId = new string[ConstantDefine.divideNumber]; int i = 0; foreach (CrowdTask ct in arraylist1) { //在这里将去检索数据库 Dictionary <string, int> dict = crowdTaskService.findSupportThisIdNumber(ct.taskWorkflowId); if (dict.Count != 0) { nums[i] = dict.First().Value; votedId[i] = dict.First().Key; } else { nums[i] = 0; votedId[i] = ""; } i++; } string bestSolutionWorkflowId = votedId[0]; int max = nums[0]; for (int t = 0; t < nums.Length; t++) { if (nums[t] > max) { max = nums[t]; bestSolutionWorkflowId = votedId[t]; } } ArrayList bestSolutionArrayList = crowdTaskService.findDecomposeResultByWorkflowId(bestSolutionWorkflowId, crowdTask.mainTaskId); //设置投票标记 crowdTaskService.updateDecomposeResultVotedByWorkflowId(bestSolutionWorkflowId); foreach (DecomposeResult dr in bestSolutionArrayList) { //开启5个投票流程 工作流实例 for (int m = 0; m < ConstantDefine.divideNumber; m++) { CrowdTask task = new CrowdTask(); task.taskName = dr.taskName; task.taskDescription = dr.taskDescription; task.taskParentWorkflowId = bestSolutionWorkflowId; task.taskType = TaskType.decomposeTask; StartSubProcess ssp = new StartSubProcess(); ssp.startSubDivideProcess(new Guid(bestSolutionWorkflowId), task); } } } }
void DevideVotingWorkflowCompleted(WorkflowApplicationCompletedEventArgs e) { MyWorkflowInstance.removeVotingDecomposeWorkflowApplication(e.InstanceId.ToString()); CrowdTask crowdTask = new CrowdTask(); CrowdTaskService crowdTaskService = new CrowdTaskService(); //将当前流程的投票的分解的工作流ID写入数据库 int result = crowdTaskService.saveDecomposeVoteResult(e.InstanceId.ToString(), (string)e.Outputs["out_bestSolutionWorkflowId"]); crowdTask = crowdTaskService.findCrowdTaskByWorkflowId(e.InstanceId.ToString()); //通过当前任务的父工作流ID ,获得该父工作流的所有子工作流,如果都完成了则开启分解判断过程 int count = 0; ArrayList allSonCrowdTask = crowdTaskService.findCrowdTaskByParentWorkflowIdAndTaskTypeAndTaskName(crowdTask.taskParentWorkflowId, crowdTask.taskName,TaskType.decomposeVotingTask,crowdTask.mainTaskId); // Dictionary<string, ArrayList> solutionTasks = new Dictionary<string, ArrayList>(); // Dictionary<string, int> dic=null; foreach (CrowdTask ct in allSonCrowdTask) { WorkflowApplication wa = MyWorkflowInstance.getDecomposeVotingWorkflowApplication(ct.taskWorkflowId); if (wa != null) { //有一个不为空就表示改父工作流的所有子工作流没有都完成 break; } else { //表示完成了 count++; } } if (count == ConstantDefine.decomposeVotingNumber) { //得到这个投票任务的结果 ArrayList arraylist1= crowdTaskService.findCrowdTaskByParentWorkflowIdAndTaskTypeAndTaskName(crowdTask.taskParentWorkflowId,crowdTask.taskName,TaskType.decomposeTask,crowdTask.mainTaskId); //将arrayList1里面的每个任务取出来,将其ID获得,然后根据ID去decomposeResult 里面取值 int[] nums = new int[ConstantDefine.divideNumber]; string[] votedId = new string[ConstantDefine.divideNumber]; int i=0; foreach ( CrowdTask ct in arraylist1) { //在这里将去检索数据库 Dictionary<string,int> dict = crowdTaskService.findSupportThisIdNumber(ct.taskWorkflowId); if(dict.Count!=0){ nums[i] = dict.First().Value; votedId[i] =dict.First().Key; } else { nums[i] = 0; votedId[i] = ""; } i++; } string bestSolutionWorkflowId = votedId[0]; int max = nums[0]; for (int t = 0; t < nums.Length; t++) { if (nums[t] > max) { max = nums[t]; bestSolutionWorkflowId = votedId[t]; } } ArrayList bestSolutionArrayList = crowdTaskService.findDecomposeResultByWorkflowId(bestSolutionWorkflowId,crowdTask.mainTaskId); //设置投票标记 crowdTaskService.updateDecomposeResultVotedByWorkflowId(bestSolutionWorkflowId); foreach(DecomposeResult dr in bestSolutionArrayList){ //开启5个投票流程 工作流实例 for (int m = 0; m < ConstantDefine.divideNumber; m++) { CrowdTask task = new CrowdTask(); task.taskName=dr.taskName; task.taskDescription=dr.taskDescription; task.taskParentWorkflowId=bestSolutionWorkflowId; task.taskType=TaskType.decomposeTask; StartSubProcess ssp = new StartSubProcess(); ssp.startSubDivideProcess(new Guid(bestSolutionWorkflowId),task); } } } }