/// <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); }
/// <summary> /// 驳回 /// </summary> /// <returns></returns> public virtual async Task NodeReject(FlowVerifySubmitDto reqest) { var user = await GetCurrentUserAsync(); FlowInstance flowInstance = await Manager.GetByIdAsync(reqest.FlowInstanceId); FlowRuntime wfruntime = new FlowRuntime(flowInstance); string resnode = ""; resnode = string.IsNullOrEmpty(reqest.NodeRejectStep) ? wfruntime.RejectNode() : reqest.NodeRejectStep; var tag = new Tag { Description = reqest.VerificationOpinion, Taged = TagState.Reject, UserId = user.Id, UserName = user.Name }; wfruntime.MakeTagNode(wfruntime.currentNodeId, tag); flowInstance.InstanceStatus = InstanceStatus.Reject;//4表示驳回(需要申请者重新提交表单) if (resnode != "") { var currentNode = wfruntime.Nodes[resnode]; flowInstance.PreviousId = flowInstance.ActivityId; flowInstance.ActivityId = resnode; flowInstance.ActivityType = wfruntime.GetNodeType(resnode); flowInstance.ActivityName = currentNode.name; //如果是开始节点,则取流程实例的创建者 flowInstance.MakerList = flowInstance.ActivityType == 3?$",{flowInstance.CreatorUserId},": GetNodeMakers(currentNode);//当前节点可执行的人信息 await AddTransHistory(wfruntime); } flowInstance.SchemeContent = Newtonsoft.Json.JsonConvert.SerializeObject(wfruntime.ToSchemeObj()); await Manager.UpdateAsync(flowInstance); await FlowInstanceOperationHistoryRepository.InsertAsync(new FlowInstanceOperationHistory { FlowInstanceId = reqest.FlowInstanceId, Content = "【" + wfruntime.currentNode.name + "】【" + DateTime.Now.ToString("yyyy-MM-dd HH:mm") + "】驳回,备注:" + reqest.VerificationOpinion }); }
/// <summary> /// 召回流程 /// </summary> public void ReCall(RecallFlowInstanceReq request) { var user = _auth.GetCurrentUser().User; FlowInstance flowInstance = Get(request.FlowInstanceId); if (flowInstance.IsFinish == FlowInstanceStatus.Draft || flowInstance.IsFinish == FlowInstanceStatus.Finished) { throw new Exception("当前流程状态不能召回"); } FlowRuntime wfruntime = new FlowRuntime(flowInstance); string startNodeId = wfruntime.startNodeId; //起始节点 wfruntime.ReCall(); flowInstance.IsFinish = FlowInstanceStatus.Draft; flowInstance.PreviousId = flowInstance.ActivityId; flowInstance.ActivityId = startNodeId; flowInstance.ActivityType = wfruntime.GetNodeType(startNodeId); flowInstance.ActivityName = wfruntime.Nodes[startNodeId].name; flowInstance.MakerList = GetNodeMarkers(wfruntime.Nodes[startNodeId], flowInstance.CreateUserId); AddTransHistory(wfruntime); UnitWork.Update(flowInstance); UnitWork.Add(new FlowInstanceOperationHistory { InstanceId = request.FlowInstanceId, CreateUserId = user.Id, CreateUserName = user.Name, CreateDate = DateTime.Now, Content = $"【撤销】由{user.Name}撤销,备注:{request.Description}" }); UnitWork.Save(); }
/// <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); }
/// <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); }
/// <summary> /// 驳回 /// 如果NodeRejectStep不为空,优先使用;否则按照NodeRejectType驳回 /// </summary> /// <returns></returns> public async Task <bool> NodeReject(VerificationExtend reqest) { var user = currentuser; FlowinstanceEntity flowInstance = await GetForm(reqest.F_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.F_VerificationOpinion, Taged = (int)TagState.Reject, UserId = user.UserId, UserName = user.UserName }; wfruntime.MakeTagNode(wfruntime.currentNodeId, tag); flowInstance.F_IsFinish = 4;//4表示驳回(需要申请者重新提交表单) uniwork.BeginTrans(); if (resnode != "") { wfruntime.RemoveNode(resnode); flowInstance.F_SchemeContent = wfruntime.ToSchemeObj().ToJson(); flowInstance.F_ActivityId = resnode; var prruntime = new FlowRuntime(flowInstance); prruntime.MakeTagNode(prruntime.currentNodeId, tag); flowInstance.F_PreviousId = prruntime.previousId; flowInstance.F_ActivityType = prruntime.GetNodeType(resnode); flowInstance.F_ActivityName = prruntime.Nodes[resnode].name; if (resnode == wfruntime.startNodeId) { flowInstance.F_MakerList = flowInstance.F_CreatorUserId; } else { flowInstance.F_MakerList = await uniwork.IQueryable <FlowInstanceTransitionHistory>(a => a.F_FromNodeId == resnode && a.F_ToNodeId == prruntime.nextNodeId).OrderByDesc(a => a.F_CreatorTime).Select(a => a.F_CreatorUserId).FirstAsync();//当前节点可执行的人信息 } await AddRejectTransHistory(wfruntime, prruntime); await repository.Update(flowInstance); } await uniwork.Insert(new FlowInstanceOperationHistory { F_Id = Utils.GuId(), F_InstanceId = reqest.F_FlowInstanceId , F_CreatorUserId = user.UserId , F_CreatorUserName = user.UserName , F_CreatorTime = DateTime.Now , F_Content = "【" + wfruntime.currentNode.name + "】【" + DateTime.Now.ToString("yyyy-MM-dd HH:mm") + "】驳回,备注:" + reqest.F_VerificationOpinion }); MessageEntity msg = new MessageEntity(); if (resnode == wfruntime.startNodeId) { msg.F_MessageInfo = flowInstance.F_CustomName + "--流程驳回"; var module = uniwork.IQueryable <ModuleEntity>(a => a.F_EnCode == className.Substring(0, className.Length - 7)).FirstOrDefault(); msg.F_Href = module.F_UrlAddress; msg.F_HrefTarget = module.F_Target; msg.F_ToUserId = flowInstance.F_CreatorUserId; msg.F_ToUserName = flowInstance.F_CreatorUserName; msg.F_ClickRead = true; msg.F_KeyValue = flowInstance.F_Id; } else { msg.F_MessageInfo = flowInstance.F_CustomName + "--流程待处理"; var module = uniwork.IQueryable <ModuleEntity>(a => a.F_EnCode == className.Substring(0, className.Length - 7)).FirstOrDefault(); msg.F_Href = module.F_UrlAddress.Remove(module.F_UrlAddress.Length - 5, 5) + "ToDoFlow"; msg.F_HrefTarget = module.F_Target; msg.F_ToUserId = flowInstance.F_MakerList == "1" ? "" : flowInstance.F_MakerList; msg.F_ClickRead = false; msg.F_KeyValue = flowInstance.F_Id; } msg.F_CreatorUserName = currentuser.UserName; msg.F_EnabledMark = true; msg.F_MessageType = 2; var lastmsg = uniwork.IQueryable <MessageEntity>(a => a.F_ClickRead == false && a.F_KeyValue == flowInstance.F_Id).OrderByDesc(a => a.F_CreatorTime).FirstOrDefault(); if (lastmsg != null && uniwork.IQueryable <MessageHistoryEntity>(a => a.F_MessageId == lastmsg.F_Id).Count() == 0) { await messageApp.ReadMsgForm(lastmsg.F_Id); } await messageApp.SubmitForm(msg); uniwork.Commit(); wfruntime.NotifyThirdParty(_httpClientFactory.CreateClient(), tag); return(true); }