示例#1
0
        /// <summary>
        /// 驳回
        /// 如果NodeRejectStep不为空,优先使用;否则按照NodeRejectType驳回
        /// </summary>
        /// <returns></returns>
        public bool NodeReject(VerificationReq reqest)
        {
            var user = _auth.GetCurrentUser().User;

            FlowInstance flowInstance = Get(reqest.FlowInstanceId);

            FlowRuntime wfruntime = new FlowRuntime(flowInstance);

            string resnode = "";

            resnode = string.IsNullOrEmpty(reqest.NodeRejectStep) ? wfruntime.RejectNode(reqest.NodeRejectType) : reqest.NodeRejectStep;

            var tag = new Tag
            {
                Description = reqest.VerificationOpinion,
                Taged       = (int)TagState.Reject,
                UserId      = user.Id,
                UserName    = user.Name
            };

            wfruntime.MakeTagNode(wfruntime.currentNodeId, tag);
            flowInstance.IsFinish = 4;//4表示驳回(需要申请者重新提交表单)
            if (resnode != "")
            {
                flowInstance.PreviousId   = flowInstance.ActivityId;
                flowInstance.ActivityId   = resnode;
                flowInstance.ActivityType = wfruntime.GetNodeType(resnode);
                flowInstance.ActivityName = wfruntime.Nodes[resnode].name;
                flowInstance.MakerList    = GetNodeMakers(wfruntime.Nodes[resnode]);//当前节点可执行的人信息

                AddTransHistory(wfruntime);
            }

            UnitWork.Update(flowInstance);

            UnitWork.Add(new FlowInstanceOperationHistory
            {
                InstanceId = reqest.FlowInstanceId
                ,
                CreateUserId = user.Id
                ,
                CreateUserName = user.Name
                ,
                CreateDate = DateTime.Now
                ,
                Content = "【"
                          + wfruntime.currentNode.name
                          + "】【" + DateTime.Now.ToString("yyyy-MM-dd HH:mm") + "】驳回,备注:"
                          + reqest.VerificationOpinion
            });

            UnitWork.Save();

            wfruntime.NotifyThirdParty(_httpClientFactory.CreateClient(), tag);

            return(true);
        }
 public string Verification(VerificationReq request)
 {
     try
     {
         _app.Verification(request);
     }
     catch (Exception ex)
     {
         Result.Code    = 500;
         Result.Message = ex.InnerException?.Message ?? ex.Message;
     }
     return(JsonHelper.Instance.Serialize(Result));
 }
        public Response Verification(VerificationReq request)
        {
            var response = new Response();

            try {
                _app.Verification(request);
            } catch (Exception ex) {
                response.Code    = 500;
                response.Message = ex.InnerException?.Message ?? ex.Message;
            }

            return(response);
        }
示例#4
0
        /// <summary>
        /// 审核流程
        /// <para>李玉宝于2017-01-20 15:44:45</para>
        /// </summary>
        public void Verification(VerificationReq request)
        {
            CheckNodeDesignate(request);
            bool isReject = TagState.Reject.Equals((TagState)Int32.Parse(request.VerificationFinally));

            if (isReject) //驳回
            {
                NodeReject(request);
            }
            else
            {
                NodeVerification(request);
            }
        }
示例#5
0
 /// <summary>
 /// 审核流程
 /// </summary>
 public void Verification(VerificationReq request)
 {
     //驳回
     if (request.VerificationFinally == "3")
     {
         NodeReject(request);
     }
     else if (request.VerificationFinally == "2")//表示不同意
     {
         NodeVerification(request.FlowInstanceId, false, request.VerificationOpinion);
     }
     else if (request.VerificationFinally == "1")//表示同意
     {
         NodeVerification(request.FlowInstanceId, true, request.VerificationOpinion);
     }
 }
 /// <summary>
 /// 审核流程
 /// <para>李玉宝于2017-01-20 15:44:45</para>
 /// </summary>
 public void Verification(VerificationReq request)
 {
     var user = _auth.GetCurrentUser().User;
     var tag = new Tag
     {
         UserName = user.Name,
         UserId = user.Id,
         Description = request.VerificationOpinion,
         Taged = Int32.Parse(request.VerificationFinally)
     };
     //驳回
     if (request.VerificationFinally == TagState.Reject.ToString())
     {
         NodeReject(request);
     }
     else
     {
         NodeVerification(request.FlowInstanceId, tag);
     }
 }
示例#7
0
        /// <summary>
        /// 审核流程
        /// <para>李玉宝于2017-01-20 15:44:45</para>
        /// </summary>
        public void Verification(VerificationReq request)
        {
            var user = _auth.GetCurrentUser().User;
            var tag  = new Tag
            {
                UserName    = user.Name,
                UserId      = user.Id,
                Description = request.VerificationOpinion,
                Taged       = Int32.Parse(request.VerificationFinally)
            };
            bool isReject = TagState.Reject.Equals((TagState)tag.Taged);

            if (isReject)  //驳回
            {
                NodeReject(request);
            }
            else
            {
                NodeVerification(request.FlowInstanceId, tag);
            }
        }
示例#8
0
        /// <summary>
        /// 驳回
        /// </summary>
        /// <returns></returns>
        public bool NodeReject(VerificationReq reqest)
        {
            var user = AuthUtil.GetCurrentUser().User;

            FlowInstance flowInstance = Get(reqest.FlowInstanceId);

            FlowRuntime wfruntime = new FlowRuntime(flowInstance);

            string resnode = "";

            if (string.IsNullOrEmpty(reqest.NodeRejectStep))
            {
                resnode = wfruntime.RejectNode();
            }
            else
            {
                resnode = reqest.NodeRejectStep;
            }

            var tag = new Tag
            {
                Description = reqest.VerificationOpinion,
                Taged       = 0,
                UserId      = user.Id,
                UserName    = user.Name
            };

            wfruntime.MakeTagNode(wfruntime.runtimeModel.currentNodeId, tag);
            flowInstance.IsFinish = 4;//4表示驳回(需要申请者重新提交表单)
            if (resnode != "")
            {
                flowInstance.PreviousId   = flowInstance.ActivityId;
                flowInstance.ActivityId   = resnode;
                flowInstance.ActivityType = wfruntime.GetNodeType(resnode);
                flowInstance.ActivityName = wfruntime.runtimeModel.nodes[resnode].name;
                flowInstance.MakerList    = GetMakerList(wfruntime.runtimeModel.nodes[resnode], flowInstance.PreviousId);//当前节点可执行的人信息
                #region 流转记录

                UnitWork.Add(new FlowInstanceTransitionHistory
                {
                    InstanceId     = flowInstance.Id,
                    CreateUserId   = user.Id,
                    CreateUserName = user.Name,
                    FromNodeId     = wfruntime.runtimeModel.currentNodeId,
                    FromNodeName   = wfruntime.runtimeModel.currentNode.name,
                    FromNodeType   = wfruntime.runtimeModel.currentNodeType,
                    ToNodeId       = wfruntime.runtimeModel.nextNodeId,
                    ToNodeName     = wfruntime.runtimeModel.nextNode.name,
                    ToNodeType     = wfruntime.runtimeModel.nextNodeType,
                    IsFinish       = wfruntime.runtimeModel.nextNodeType == 4 ? 1 : 0,
                    TransitionSate = 1
                });
                #endregion
            }

            UnitWork.Update(flowInstance);

            UnitWork.Add(new FlowInstanceOperationHistory
            {
                InstanceId       = reqest.FlowInstanceId
                , CreateUserId   = user.Id
                , CreateUserName = user.Name
                , CreateDate     = DateTime.Now
                , Content        = "【"
                                   + wfruntime.runtimeModel.currentNode.name
                                   + "】【" + DateTime.Now.ToString("yyyy-MM-dd HH:mm") + "】驳回,备注:"
                                   + reqest.VerificationOpinion
            });

            UnitWork.Save();

            return(true);
        }
示例#9
0
        /// <summary>
        /// 驳回
        /// 如果NodeRejectStep不为空,优先使用;否则按照NodeRejectType驳回
        /// </summary>
        /// <returns></returns>
        public bool NodeReject(VerificationReq reqest)
        {
            var          user         = _auth.GetCurrentUser().User;
            FlowInstance flowInstance = Get(reqest.FlowInstanceId);

            if (flowInstance.MakerList != "1" && !flowInstance.MakerList.Contains(user.Id))
            {
                throw new Exception("当前用户没有驳回该节点权限");
            }

            FlowRuntime wfruntime = new FlowRuntime(flowInstance);

            string rejectNode = ""; //驳回的节点

            rejectNode = string.IsNullOrEmpty(reqest.NodeRejectStep)
                ? wfruntime.RejectNode(reqest.NodeRejectType)
                : reqest.NodeRejectStep;

            var tag = new Tag
            {
                Description = reqest.VerificationOpinion,
                Taged       = (int)TagState.Reject,
                UserId      = user.Id,
                UserName    = user.Name
            };

            wfruntime.MakeTagNode(wfruntime.currentNodeId, tag);
            flowInstance.IsFinish = FlowInstanceStatus.Rejected; //4表示驳回(需要申请者重新提交表单)
            if (rejectNode != "")
            {
                flowInstance.PreviousId   = flowInstance.ActivityId;
                flowInstance.ActivityId   = rejectNode;
                flowInstance.ActivityType = wfruntime.GetNodeType(rejectNode);
                flowInstance.ActivityName = wfruntime.Nodes[rejectNode].name;
                flowInstance.MakerList    = GetNodeMarkers(wfruntime.Nodes[rejectNode], flowInstance.CreateUserId);

                AddTransHistory(wfruntime);
            }

            UnitWork.Update(flowInstance);

            UnitWork.Add(new FlowInstanceOperationHistory
            {
                InstanceId     = reqest.FlowInstanceId,
                CreateUserId   = user.Id,
                CreateUserName = user.Name,
                CreateDate     = DateTime.Now,
                Content        = "【"
                                 + wfruntime.currentNode.name
                                 + "】【" + DateTime.Now.ToString("yyyy-MM-dd HH:mm") + "】驳回,备注:"
                                 + reqest.VerificationOpinion
            });

            //给流程创建人发送通知信息
            _messageApp.SendMsgTo(flowInstance.CreateUserId,
                                  $"你的流程[{flowInstance.CustomName}]已被{user.Name}驳回。备注信息:{reqest.VerificationOpinion}");

            UnitWork.Save();

            wfruntime.NotifyThirdParty(_httpClientFactory.CreateClient(), tag);

            return(true);
        }
示例#10
0
        /// <summary>
        /// 节点审核
        /// </summary>
        /// <param name="instanceId"></param>
        /// <returns></returns>
        public bool NodeVerification(VerificationReq request)
        {
            var user       = _auth.GetCurrentUser().User;
            var instanceId = request.FlowInstanceId;

            var tag = new Tag
            {
                UserName    = user.Name,
                UserId      = user.Id,
                Description = request.VerificationOpinion,
                Taged       = Int32.Parse(request.VerificationFinally)
            };

            FlowInstance flowInstance = Get(instanceId);

            if (flowInstance.MakerList != "1" && !flowInstance.MakerList.Contains(user.Id))
            {
                throw new Exception("当前用户没有审批该节点权限");
            }

            FlowInstanceOperationHistory flowInstanceOperationHistory = new FlowInstanceOperationHistory
            {
                InstanceId     = instanceId,
                CreateUserId   = tag.UserId,
                CreateUserName = tag.UserName,
                CreateDate     = DateTime.Now
            }; //操作记录
            FlowRuntime wfruntime = new FlowRuntime(flowInstance);

            #region 会签

            if (flowInstance.ActivityType == 0) //当前节点是会签节点
            {
                //会签时的【当前节点】一直是会签开始节点
                //TODO: 标记会签节点的状态,这个地方感觉怪怪的
                wfruntime.MakeTagNode(wfruntime.currentNodeId, tag);

                string canCheckId = ""; //寻找当前登录用户可审核的节点Id
                foreach (string fromForkStartNodeId in wfruntime.FromNodeLines[wfruntime.currentNodeId]
                         .Select(u => u.to))
                {
                    var fromForkStartNode = wfruntime.Nodes[fromForkStartNodeId]; //与会前开始节点直接连接的节点
                    canCheckId = GetOneForkLineCanCheckNodeId(fromForkStartNode, wfruntime, tag);
                    if (!string.IsNullOrEmpty(canCheckId))
                    {
                        break;
                    }
                }

                if (canCheckId == "")
                {
                    throw (new Exception("审核异常,找不到审核节点"));
                }

                flowInstanceOperationHistory.Content = "【" + wfruntime.Nodes[canCheckId].name
                                                       + "】【" + DateTime.Now.ToString("yyyy-MM-dd HH:mm")
                                                       + "】" + (tag.Taged == 1 ? "同意" : "不同意") + ",备注:"
                                                       + tag.Description;

                wfruntime.MakeTagNode(canCheckId, tag); //标记审核节点状态
                string res = wfruntime.NodeConfluence(canCheckId, tag);
                if (res == TagState.No.ToString("D"))
                {
                    flowInstance.IsFinish = FlowInstanceStatus.Disagree;
                }
                else if (!string.IsNullOrEmpty(res))
                {
                    flowInstance.PreviousId   = flowInstance.ActivityId;
                    flowInstance.ActivityId   = wfruntime.nextNodeId;
                    flowInstance.ActivityType = wfruntime.nextNodeType;
                    flowInstance.ActivityName = wfruntime.nextNode.name;
                    flowInstance.IsFinish     = (wfruntime.nextNodeType == 4
                        ? FlowInstanceStatus.Finished
                        : FlowInstanceStatus.Running);
                    flowInstance.MakerList =
                        (wfruntime.nextNodeType == 4 ? "" : GetNextMakers(wfruntime));

                    AddTransHistory(wfruntime);
                }
                else
                {
                    //会签过程中,需要更新用户
                    flowInstance.MakerList = GetForkNodeMakers(wfruntime, wfruntime.currentNodeId);
                    AddTransHistory(wfruntime);
                }
            }

            #endregion 会签

            #region 一般审核

            else
            {
                wfruntime.MakeTagNode(wfruntime.currentNodeId, tag);
                if (tag.Taged == (int)TagState.Ok)
                {
                    flowInstance.PreviousId   = flowInstance.ActivityId;
                    flowInstance.ActivityId   = wfruntime.nextNodeId;
                    flowInstance.ActivityType = wfruntime.nextNodeType;
                    flowInstance.ActivityName = wfruntime.nextNode.name;
                    flowInstance.MakerList    = wfruntime.nextNodeType == 4 ? "" : GetNextMakers(wfruntime, request);
                    flowInstance.IsFinish     = (wfruntime.nextNodeType == 4
                        ? FlowInstanceStatus.Finished
                        : FlowInstanceStatus.Running);
                    AddTransHistory(wfruntime);
                }
                else
                {
                    flowInstance.IsFinish = FlowInstanceStatus.Disagree; //表示该节点不同意
                }

                flowInstanceOperationHistory.Content = "【" + wfruntime.currentNode.name
                                                       + "】【" + DateTime.Now.ToString("yyyy-MM-dd HH:mm")
                                                       + "】" + (tag.Taged == 1 ? "同意" : "不同意") + ",备注:"
                                                       + tag.Description;
            }

            #endregion 一般审核

            flowInstance.SchemeContent = JsonHelper.Instance.Serialize(wfruntime.ToSchemeObj());

            UnitWork.Update(flowInstance);
            UnitWork.Add(flowInstanceOperationHistory);

            //给流程创建人发送通知信息
            _messageApp.SendMsgTo(flowInstance.CreateUserId,
                                  $"你的流程[{flowInstance.CustomName}]已被{user.Name}处理。处理情况如下:{flowInstanceOperationHistory.Content}");

            UnitWork.Save();

            wfruntime.NotifyThirdParty(_httpClientFactory.CreateClient(), tag);
            return(true);
        }