Пример #1
0
        public override async Task <string> Excute(ProcessInstance pi)
        {
            return(await Task <string> .Factory.StartNew(() =>
            {
                BPMDBService.TaskDone(this.ID, pi.CreateUser);

                pi.Status = ProcessStatus.Finish;

                //Console.WriteLine(this.Name);

                return null;
            }));
        }
Пример #2
0
        public override async Task <string> Excute(ProcessInstance pi)
        {
            // 第一次轮到
            var arg = getArg(pi);

            if (this.Status == TaskStatus.Waiting)
            {
                // 用户提交了任务,
                this.Status = TaskStatus.Done;
                this.IsDone = true;

                BPMDBService.TaskDone(this.ID, this.UserID);

                // 通知任务完成
                _Observation.TaskDone(arg);

                return(await base.Excute(pi));
            }
            else
            {
                this.Status   = TaskStatus.Waiting;
                this.TurnDate = DateTime.Now;
                this.UserID   = int.Parse(arg.TaskUser);

                // 异步更新任务状态
                BPMDBService.TaskTurn(this.ID, this.UserID);

                if (!await _Observation.TaskTurnCall(arg))
                {
                    // 发起一个用户通知
                    // 中断等待用户回应

                    return(string.Empty);
                }
                else
                {
                    // 继续任务
                    return(await base.Excute(pi));
                }
            }
        }
Пример #3
0
        public override async Task <string> Excute(ProcessInstance pi)
        {
            var arg = getArg(pi);

            // 第一次轮到会签
            if (!BPMDBService.ExistsJoinSignTask(this.ID))
            {
                // 中断等待用户回应
                this.Status   = TaskStatus.Waiting;
                this.TurnDate = DateTime.Now;

                // 异步更新任务状态
                BPMDBService.TaskTurn(this.ID, 0, arg.TaskUser);

                // 创建会签人员列表 // TODO  arg.TaskUser == 0
                arg.JoinSigns = BPMDBService.CreateJoinSignTasks(this.ID, arg.TaskUser);

                // 发起一个用户通知
                if (!await _Observation.TaskTurnCall(arg))
                {
                    return(string.Empty);
                }
                else
                {
                    // 任务完成
                    BPMDBService.TaskDone(this.ID, int.Parse(arg.TaskUser));

                    // 通知任务完成
                    _Observation.TaskDone(arg);

                    // 继续任务
                    return(await base.Excute(pi));
                }
            }
            else
            {
                // 会签任务完成
                BPMDBService.JoinSignTaskDone(int.Parse(pi.InputData["SignID"].ToString()), bool.Parse(pi.InputData["SignIDResult"].ToString()));

                // 通知任务完成
                _Observation.TaskDone(arg);

                // 第二次,检查所有的会签任务是否完成
                if (BPMDBService.CheckAllJoinSignTaskDone(this.ID))
                {
                    // 任务完成
                    BPMDBService.TaskDone(this.ID, 0);

                    // 如果会签的下一个节点是唯一网关,只要有一个会签失败,这个网关的参数设置为false
                    if (BPMDBService.CheckFailureSign(this.ID) &&
                        !string.IsNullOrEmpty(arg.ArgName) &&
                        arg.ArgName.StartsWith("bool_"))
                    {
                        pi.InputData[arg.ArgName] = false;
                    }

                    // 继续任务
                    return(await base.Excute(pi));
                }
                else
                {
                    // 没有全部完成 继续等待
                    return(string.Empty);
                }
            }
        }