protected virtual ReturnInfo <bool> ExecTransaction(ReturnInfo <bool> returnInfo, WorkflowDefineInfo workflowDefine, FlowInT flowIn, FlowCensorshipOutInfo findFlowCensorshipOut, CommonUseData comData = null, string connectionId = null) { IFormEngine formEngine = FormEngineFactory.Create(workflowDefine.Code); if (formEngine == null) { returnInfo.SetFailureMsg($"找不到编码[{workflowDefine.Code}]的表单引擎"); return(returnInfo); } ReturnInfo <bool> basicReturn = formEngine.BeforeExecFlow(findFlowCensorshipOut, flowIn, connectionId: connectionId, comData: comData); if (basicReturn.Failure()) { returnInfo.FromBasic(basicReturn); return(returnInfo); } ExecCore(returnInfo, flowIn, findFlowCensorshipOut, connectionId: connectionId, comData: comData); basicReturn = formEngine.AfterExecFlow(findFlowCensorshipOut, flowIn, returnInfo.Success(), connectionId: connectionId, comData: comData); if (basicReturn.Failure()) { returnInfo.FromBasic(basicReturn); } return(returnInfo); }
/// <summary> /// 转换为申请的具体表单信息 /// </summary> /// <param name="flowCensorshipOut">流程关卡输出</param> /// <param name="flowIn">流程输入</param> /// <param name="returnInfo">返回信息</param> /// <param name="conFlowIn">具体流程输入</param> /// <returns>具体表单信息</returns> private ConcreteFormInfoT ToApplyConcreteFormInfo(FlowCensorshipOutInfo flowCensorshipOut, object flowIn, ReturnInfo <bool> returnInfo, out FlowInInfo <FlowInitInfo <PersonTimeInfo> > conFlowIn) { conFlowIn = flowIn as FlowInInfo <FlowInitInfo <PersonTimeInfo> >; if (conFlowIn == null) { returnInfo.SetFailureMsg("流程输入不能转换为FlowInInfo<FlowApplyInfo<PersonTimeInfo>>"); return(null); } ConcreteFormInfoT form = conFlowIn.Form as ConcreteFormInfoT; if (form == null) { returnInfo.SetFailureMsg($"表单不能转换为{typeof(ConcreteFormInfoT).Name}"); return(null); } return(form); }
/// <summary> /// 执行核心 /// </summary> /// <param name="returnInfo">返回信息</param> /// <param name="flowIn">流程输入</param> /// <param name="findFlowCensorshipOut">查找流程关卡输出</param> /// <param name="connectionId">连接ID</param> /// <param name="comData">通用数据</param> protected abstract void ExecCore(ReturnInfo <bool> returnInfo, FlowInT flowIn, FlowCensorshipOutInfo findFlowCensorshipOut, CommonUseData comData = null, string connectionId = null);
public virtual ReturnInfo <bool> AfterExecFlow(FlowCensorshipOutInfo flowCensorshipOut, object flowIn, bool isSuccess, string connectionId = null) { return(new ReturnInfo <bool>()); }
public virtual ReturnInfo <bool> BeforeExecFlow(FlowCensorshipOutInfo flowCensorshipOut, object flowIn, string connectionId = null) { return(new ReturnInfo <bool>()); }
/// <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()); }
/// <summary> /// 执行流程后 /// </summary> /// <param name="flowCensorshipOut">流程关卡输出</param> /// <param name="flowIn">流程输入</param> /// <param name="isSuccess">是否成功</param> /// <param name="connectionId">连接ID</param> /// <param name="currUser">当前用户</param> /// <returns>返回信息</returns> public override ReturnInfo <bool> AfterExecFlow(FlowCensorshipOutInfo flowCensorshipOut, object flowIn, bool isSuccess, string connectionId = null, BasicUserInfo currUser = null) { ReturnInfo <bool> returnInfo = new ReturnInfo <bool>(); if (isSuccess) { // 当前为申请者关卡 if (flowCensorshipOut.IsCurrApplicantCensorship() && (flowCensorshipOut.ActionType == ActionType.SAVE || flowCensorshipOut.ActionType == ActionType.SEND)) { FlowInInfo <FlowInitInfo <PersonTimeInfo> > conFlowIn; ConcreteFormInfoT form = ToApplyConcreteFormInfo(flowCensorshipOut, flowIn, returnInfo, out conFlowIn); if (returnInfo.Failure()) { return(returnInfo); } ReturnInfo <ConcreteFormInfo> reFormInfo = FormDataReaderFactory.Create(conFlowIn.Flow.WorkflowCode).ReaderByWorkflowId(flowCensorshipOut.Workflow.Id, connectionId, currUser); if (reFormInfo.Failure()) { returnInfo.FromBasic(reFormInfo); return(returnInfo); } if (reFormInfo.Data != null) { switch (reFormInfo.Data.FlowStatus) { case FlowStatusEnum.AUDITING: returnInfo.SetFailureMsg("此表单在审核中不允许重复申请"); return(returnInfo); case FlowStatusEnum.AUDIT_PASS: returnInfo.SetFailureMsg("此表单已审核通过不允许重复申请"); return(returnInfo); case FlowStatusEnum.AUDIT_NOPASS: returnInfo.SetFailureMsg("此表单已审核驳回不允许重复申请"); return(returnInfo); } form.SetModifyInfo(currUser); } else { form.SetCreateInfo(currUser); } form.ApplyNo = flowCensorshipOut.Workflow.ApplyNo; form.WorkflowId = flowCensorshipOut.Workflow.Id; form.FlowStatus = flowCensorshipOut.Workflow.FlowStatus; returnInfo = FormService.Set(form, connectionId, currUser); } // 下一关卡如果是结束关卡(送件)或是申请关卡(退件) else if ((flowCensorshipOut.IsNextEndCensorship() && flowCensorshipOut.ActionType == ActionType.SEND) || (flowCensorshipOut.IsNextApplicantCensorship() && flowCensorshipOut.ActionType == ActionType.RETURN)) { ConcreteFormInfoT form = typeof(ConcreteFormInfoT).CreateInstance <ConcreteFormInfoT>(); form.WorkflowId = flowCensorshipOut.Workflow.Id; form.FlowStatus = flowCensorshipOut.Workflow.FlowStatus; form.SetModifyInfo(currUser); returnInfo = FormService.ModifyFlowStatusByWorkflowId(form, connectionId, currUser); } } return(returnInfo); }
/// <summary> /// 执行核心 /// </summary> /// <param name="returnInfo">返回信息</param> /// <param name="flowIn">流程输入</param> /// <param name="findFlowCensorshipOut">查找流程关卡输出</param> /// <param name="connectionId">连接ID</param> /// <param name="currUser">当前用户</param> protected abstract void ExecCore(ReturnInfo <bool> returnInfo, FlowInT flowIn, FlowCensorshipOutInfo findFlowCensorshipOut, string connectionId = null, BasicUserInfo <int> currUser = null);
/// <summary> /// 执行核心 /// </summary> /// <param name="returnInfo">返回信息</param> /// <param name="flowIn">流程输入</param> /// <param name="findFlowCensorshipOut">查找流程关卡输出</param> /// <param name="connectionId">连接ID</param> /// <param name="currUser">当前用户</param> protected override void ExecCore(ReturnInfo <bool> returnInfo, FlowInInfo <FlowInitInfo <PersonTimeInfo <int> > > flowIn, FlowCensorshipOutInfo findFlowCensorshipOut, string connectionId = null, BasicUserInfo <int> currUser = null) { // 操作工作流 ReturnInfo <bool> reWorkflow = WorkflowService.Set(findFlowCensorshipOut.Workflow, connectionId, currUser); if (reWorkflow.Failure()) { returnInfo.FromBasic(reWorkflow); return; } if (flowIn.Flow.Id < 1) { flowIn.Flow.Id = findFlowCensorshipOut.Workflow.Id; } // 操作工作流处理 var currHandle = findFlowCensorshipOut.CurrConcreteCensorship.WorkflowHandles[0]; currHandle.WorkflowId = findFlowCensorshipOut.Workflow.Id; var existsHandleReturnInfo = WorkflowHandle.FindByWorkflowIdAndFlowCensorshipIdAndHandlerId(currHandle.WorkflowId, currHandle.FlowCensorshipId, currHandle.HandlerId, connectionId, currUser); if (existsHandleReturnInfo.Failure()) { returnInfo.FromBasic(existsHandleReturnInfo); return; } var user = UserTool <int> .GetCurrUser(currUser); if (existsHandleReturnInfo.Data != null) { if (existsHandleReturnInfo.Data.HandlerId != user.Id) { returnInfo.SetFailureMsg($"Sorry,此流程不是您处理的,无权限操作"); return; } currHandle.Id = existsHandleReturnInfo.Data.Id; currHandle.SetModifyInfo(currUser); } ReturnInfo <bool> reHandle = WorkflowHandle.Set(findFlowCensorshipOut.CurrConcreteCensorship.WorkflowHandles[0], connectionId, currUser); if (reHandle.Failure()) { returnInfo.FromBasic(reHandle); return; } if (findFlowCensorshipOut.NextConcreteCensorshipHandles.IsNullOrLength0()) { returnInfo.SetMsg($"申请单号[{findFlowCensorshipOut.Workflow.ApplyNo}]已保存为草稿"); return; } 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); } } reHandle = WorkflowHandle.Add(handlers, connectionId, currUser); if (reHandle.Failure()) { returnInfo.FromBasic(reHandle); return; } returnInfo.SetMsg($"申请单号[{findFlowCensorshipOut.Workflow.ApplyNo}]已送到[{findFlowCensorshipOut.Workflow.CurrHandlers}]审核"); }