Example #1
0
        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); ;
             }


        }