/// <summary> /// 执行连接ID过程 /// 如果传过来的连接ID为空,则会创建新的连接ID,结束后会自动注释连接ID,否则不会 /// </summary> /// <param name="action">动作</param> /// <param name="connectionId">连接ID</param> /// <param name="accessMode">访问模式</param> protected void ExecProcConnectionId(Action <string> action, string connectionId = null, AccessMode accessMode = AccessMode.MASTER) { if (string.IsNullOrWhiteSpace(connectionId)) { connectionId = WorkflowPersistence.NewConnectionId(accessMode); try { action(connectionId); } catch (Exception ex) { throw new Exception(ex.Message, ex); } finally { WorkflowPersistence.Release(connectionId); } } else { action(connectionId); return; } }
/// <summary> /// 执行 /// </summary> /// <param name="flowIn">流程输入</param> /// <param name="connectionId">连接ID</param> /// <param name="comData">通用数据</param> /// <returns>返回信息</returns> public virtual ReturnInfo <bool> Execute(int flowIn, CommonUseData comData = null, string connectionId = null) { return(ExecReturnFuncAndConnectionId <bool>((reInfo, connId) => { var workflow = WorkflowPersistence.Select(flowIn, connectionId: connId, comData: comData); if (workflow == null) { reInfo.SetFailureMsg($"找不到ID[{flowIn}]的工作流"); return false; } workflow.WorkflowDefine = WorkflowDefinePersistence.Select(workflow.WorkflowDefineId, connectionId: connId, comData: comData); if (workflow.WorkflowDefine == null) { reInfo.SetFailureMsg($"找不到ID[{flowIn}]的工作流定义"); return false; } workflow.Handles = WorkflowHandlePersistence.SelectByWorkflowId(flowIn, connId); Vali(reInfo, workflow, comData); if (reInfo.Failure()) { return false; } ReturnInfo <bool> reTrans = ExecTransaction(reInfo, workflow, connectionId: connId, comData: comData); reInfo.FromBasic(reTrans); if (reTrans.Failure()) { return false; } var descAttr = typeof(RemoveType).GetAttributeForEnum <DescriptionAttribute>(GetRemoveType().ToString()); if (descAttr != null) { reInfo.SetSuccessMsg($"此工作流已{descAttr.Description}"); } return true; })); }
/// <summary> /// 执行核心 /// </summary> /// <param name="returnInfo">返回信息</param> /// <param name="workflow">工作流</param> /// <param name="connectionId">连接ID</param> protected override void ExecCore(ReturnInfo <bool> returnInfo, WorkflowInfo workflow, string connectionId = null) { // 除本人外,所有处理者都删除 foreach (var h in workflow.Handles) { if (h.HandlerId == UserTool.CurrUser.Id) { workflow.CurrHandlerIds = h.HandlerId.ToString(); workflow.CurrHandlers = h.Handler; workflow.CurrConcreteCensorshipIds = h.ConcreteConcreteId.ToString(); workflow.CurrConcreteCensorships = h.ConcreteConcrete; workflow.CurrFlowCensorshipIds = h.FlowCensorshipId.ToString(); workflow.FlowStatus = FlowStatusEnum.REVERSED; continue; } WorkflowHandlePersistence.DeleteById(h.Id, connectionId); } WorkflowPersistence.UpdateFlowStatusAndCensorshipAndHandlerById(workflow, connectionId); }
/// <summary> /// 执行核心 /// </summary> /// <param name="returnInfo">返回信息</param> /// <param name="workflow">工作流</param> /// <param name="connectionId">连接ID</param> /// <param name="comData">通用数据</param> protected virtual void ExecCore(ReturnInfo <bool> returnInfo, WorkflowInfo workflow, CommonUseData comData = null, string connectionId = null) { WorkflowHandlePersistence.DeleteByWorkflowId(workflow.Id, connectionId); WorkflowPersistence.DeleteById(workflow.Id, connectionId: connectionId, comData: comData); }
/// <summary> /// 执行核心 /// </summary> /// <param name="returnInfo">返回信息</param> /// <param name="workflow">工作流</param> /// <param name="connectionId">连接ID</param> /// <param name="currUser">当前用户</param> protected virtual void ExecCore(ReturnInfo <bool> returnInfo, WorkflowInfo workflow, string connectionId = null, BasicUserInfo currUser = null) { WorkflowHandlePersistence.DeleteByWorkflowId(workflow.Id, connectionId); WorkflowPersistence.DeleteById(workflow.Id, connectionId); }
/// <summary> /// 执行核心 /// </summary> /// <param name="returnInfo">返回信息</param> /// <param name="flowIn">流程输入</param> /// <param name="findFlowCensorshipOut">查找流程关卡输出</param> /// <param name="connectionId">连接ID</param> protected override void ExecCore(ReturnInfo <bool> returnInfo, FlowInInfo <FlowAuditInfo> flowIn, FlowCensorshipOutInfo findFlowCensorshipOut, string connectionId = null) { // 更新工作流状态 WorkflowPersistence.UpdateFlowStatusAndCensorshipAndHandlerById(findFlowCensorshipOut.Workflow, connectionId); // 更新当前工作流处理状态 WorkflowHandlePersistence.UpdateHandleStatusById(findFlowCensorshipOut.CurrConcreteCensorship.WorkflowHandles[0], connectionId); string actionStr = flowIn.Flow.ActionType == ActionType.SEND ? "送件" : "退件"; if (findFlowCensorshipOut.NextConcreteCensorshipHandles.IsNullOrLength0()) { returnInfo.SetSuccessMsg($"申请单号[{findFlowCensorshipOut.Workflow.ApplyNo}]已{actionStr},等待其他人处理"); return; } else { WorkflowHandleInfo updateEf = new WorkflowHandleInfo() { Id = flowIn.Flow.HandleId, FlowCensorshipId = flowIn.Flow.WorkflowHandle.FlowCensorshipId, ConcreteConcreteId = flowIn.Flow.WorkflowHandle.ConcreteConcreteId, WorkflowId = flowIn.Flow.WorkflowHandle.WorkflowId }; updateEf.SetModifyInfo(); if (flowIn.Flow.ActionType == ActionType.SEND) { WorkflowHandlePersistence.UpdateEfficacyedNotIdByWorkflowIdAndFlowCensorshipId(updateEf, connectionId); } else { WorkflowHandlePersistence.UpdateEfficacyedNotIdByWorkflowId(updateEf, connectionId); } // 插入下一个处理者 IList <WorkflowHandleInfo> handlers = new List <WorkflowHandleInfo>(); foreach (var c in findFlowCensorshipOut.NextConcreteCensorshipHandles) { foreach (var h in c.WorkflowHandles) { h.WorkflowId = findFlowCensorshipOut.Workflow.Id; handlers.Add(h); } } ReturnInfo <bool> reHandle = WorkflowHandle.Add(handlers, connectionId); if (reHandle.Failure()) { returnInfo.FromBasic(reHandle); return; } } StringBuilder msg = new StringBuilder($"申请单号[{findFlowCensorshipOut.Workflow.ApplyNo}]"); if (findFlowCensorshipOut.ActionType == ActionType.SEND) { msg.AppendFormat("已送到[{0}]", findFlowCensorshipOut.Workflow.CurrHandlers); if (findFlowCensorshipOut.IsNextEndCensorship()) { msg.Append(",审核通过,流程结束"); } else { msg.Append("审核"); } } else { msg.AppendFormat("已退给[{0}]", findFlowCensorshipOut.Workflow.CurrHandlers); if (findFlowCensorshipOut.IsNextApplicantCensorship()) { msg.Append(",审核驳回,流程结束"); } else { msg.Append("审核"); } } returnInfo.SetMsg(msg.ToString()); }