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);
        }
예제 #2
0
        /// <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());
        }
예제 #7
0
        /// <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);
        }
예제 #8
0
 /// <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);
예제 #9
0
        /// <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}]审核");
        }