Esempio n. 1
0
        public ActionResult Add(WF_Instance instance, int id, int flowTo)
        {
            var currentUserId = LoginUser.Id;

            //在工作流实例表添加一条数据
            instance.DelFlag      = this.delFlagNormal;
            instance.StartTime    = DateTime.Now;
            instance.FilePath     = string.Empty;
            instance.StartBy      = currentUserId;
            instance.Level        = 0;
            instance.Status       = (short)Wei.OA.Model.Enum.WF_InstanceEnum.Processing;
            instance.WFInstanceId = Guid.Empty;
            instance.WF_TempId    = id;
            WF_InstanceService.Add(instance);
            //启动工作流
            var wfApp = WorkflowApplictionHelper.CreateWorkflowApp(new FinancialActivity(), null); //可以通过反射,更灵活的添加不同的activity

            instance.WFInstanceId = wfApp.Id;
            WF_InstanceService.Update(instance);
            //在步骤表中添加两个步骤,一个当前已经处理完的步骤
            WF_Step startStep = new WF_Step();

            startStep.WF_InstanceId  = instance.Id;
            startStep.SubTime        = DateTime.Now;
            startStep.StepName       = "提交审批表单";
            startStep.IsEndStep      = false;
            startStep.IsStartStep    = true;
            startStep.ProcessBy      = currentUserId;
            startStep.ProcessComment = "提交申请";
            startStep.ProcessResult  = "通过";
            startStep.ProcessTime    = DateTime.Now;
            startStep.StepStatus     = (short)Wei.OA.Model.Enum.WFStepEnum.Processed;

            WF_StepService.Add(startStep);

            //下一步谁审批的步骤
            WF_Step nextStep = new WF_Step();

            nextStep.WF_InstanceId  = instance.Id;
            nextStep.SubTime        = DateTime.Now;
            nextStep.ProcessTime    = DateTime.Now;
            nextStep.ProcessComment = String.Empty;
            nextStep.IsEndStep      = false;
            nextStep.IsStartStep    = false;
            nextStep.ProcessBy      = flowTo;
            nextStep.ProcessResult  = "";
            nextStep.StepName       = "";
            nextStep.StepStatus     = (short)Wei.OA.Model.Enum.WFStepEnum.UnProcess;
            WF_StepService.Add(nextStep);
            return(RedirectToAction("ShowMyCheck"));
        }
        //审批当前流程
        /// <summary>
        /// 审批
        /// </summary>
        /// <param name="stepId">当前审批步骤id</param>
        /// <param name="isPass">是否通过</param>
        /// <param name="Comment">审批意见</param>
        /// <param name="flowTo">流转到谁</param>
        /// <returns></returns>
        public ActionResult DoCheck(int stepId, bool isPass, string Comment, int flowTo)
        {
            //1.更新当前步骤

            var step = WF_StepBLL.GetEntities(u => u.ID == stepId).FirstOrDefault();

            step.ProcessResult  = isPass ? "通过" : "不通过";
            step.StepStaus      = (short)WFStepEnum.Processed;
            step.ProcessContent = Comment;

            step.ProcessTime = DateTime.Now;
            WF_StepBLL.Update(step);
            //初始化下一个步骤
            WF_Step nextStep = new WF_Step();

            nextStep.IsEndStep   = false;
            nextStep.IsStartStep = false;
            nextStep.ProcessBy   = flowTo;

            nextStep.SubTime       = DateTime.Now;
            nextStep.ProcessResult = string.Empty;

            nextStep.StepStaus     = (short)WFStepEnum.UnProecess;
            nextStep.StepName      = string.Empty;
            nextStep.WF_InstanceID = step.WF_InstanceID;
            nextStep.ProcessTime   = DateTime.Now;

            nextStep.ProcessContent = string.Empty;
            WF_StepBLL.Add(nextStep);


            //根据流程类型 来初始化对应流程 反射 实现

            var wfinstance = WF_InstanceBLL.GetEntities(u => u.ID == step.WF_InstanceID).FirstOrDefault();
            var wftemp     = WF_TempBLL.GetEntities(u => u.ID == wfinstance.WF_TempID).FirstOrDefault();
            //让书签继续往下执行
            var Value = isPass ? 1 : 0;

            WorkflowApplicationHelper.ResumeBookMark(
                //new FincallActivity(),
                Assembly.Load("HeiMa8.OA.WorkFlow").CreateInstance(wftemp.ActityType) as Activity,
                step.WF_Instance.WFInstanceId,
                step.StepName,
                Value);
            return(Content("ok"));
        }
        /// <summary>
        /// 审批
        /// </summary>
        /// <param name="stepId">当前审批步骤id</param>
        /// <param name="isPass">是否通过</param>
        /// <param name="Comment">审批意见</param>
        /// <param name="flowTo">流转到谁</param>
        /// <returns></returns>
        public ActionResult DoCheck(int stepId, bool isPass, string Comment, int flowTo)
        {
            //stepId:id, isPass: pass, Comment: $("#Comment").val() }

            //1、更新当前步骤
            var step = WF_StepService.GetEntities(s => s.ID == stepId).FirstOrDefault();

            step.ProcessResult = isPass ? "通过" : "不通过";
            step.StepStatus    = (short)Heima8.OA.Model.Enum.WFStepEnum.Processed;
            step.ProcessTime   = DateTime.Now;

            step.PorcessComment = Comment;
            WF_StepService.Update(step);


            //初始化下一个步骤
            WF_Step nextStep = new WF_Step();

            nextStep.IsEndStep     = false;
            nextStep.IsStartStep   = false;
            nextStep.ProcessBy     = flowTo;//下一个步骤处理人
            nextStep.SubTime       = DateTime.Now;
            nextStep.ProcessResult = string.Empty;

            nextStep.StepStatus     = (short)Heima8.OA.Model.Enum.WFStepEnum.UnProecess;
            nextStep.StepName       = string.Empty;
            nextStep.WF_InstanceID  = step.WF_InstanceID;
            nextStep.ProcessTime    = DateTime.Now;
            nextStep.PorcessComment = string.Empty;

            WF_StepService.Add(nextStep);

            //让书签继续往下执行。
            var Value    = isPass ? 1 : 0;
            var instance = GetWfInstance(step);
            var temp     = GetWfTemp(instance);
            var activity = WorkflowFactory.GetActivity(temp.ActityType);

            Heima8.OA.Workflow.WorkflowApplicationHelper.ResumeBookMark(
                activity,
                step.WF_Instance.WFInstanceId,
                step.StepName,
                Value);
            return(Content("ok"));
        }
        public ActionResult Add(WF_Instance instance, int id, int flowTo)
        {
            var CurrentUserId = LoginUser.ID;

            //1->在工作流实例表中添加一条数据
            instance.DelFlag   = DelFlag;
            instance.StartTime = DateTime.Now;
            instance.FilePath  = string.Empty;

            instance.StartBy   = CurrentUserId; //当前用户 也就是发起人
            instance.Level     = 0;             //紧急程度
            instance.Status    = (short)WF_InstanceEnum.Processing;
            instance.WF_TempID = id;

            //WF_TempBLL.Add(instance);
            WF_InstanceBLL.Add(instance);


            //2->在步骤表里面添加两条步骤
            //2->1 一个当前已处理的步骤
            WF_Step startStep = new WF_Step();

            startStep.WF_InstanceID  = instance.ID;
            startStep.SubTime        = DateTime.Now;
            startStep.StepName       = "提交申请表单";
            startStep.IsEndStep      = false;
            startStep.IsStartStep    = true;
            startStep.ProcessBy      = CurrentUserId;
            startStep.ProcessContent = "提交申请";
            startStep.ProcessResult  = "通过";
            startStep.ProcessTime    = DateTime.Now;
            startStep.StepStaus      = (short)WFStepEnum.Processed;
            WF_StepBLL.Add(startStep);

            //2->2 下一步谁审批的步骤 。项目经理审批
            WF_Step nextStep = new WF_Step();

            nextStep.WF_InstanceID  = instance.ID;
            nextStep.SubTime        = DateTime.Now;
            nextStep.ProcessTime    = DateTime.Now;
            nextStep.ProcessContent = string.Empty;

            nextStep.IsStartStep = false;
            nextStep.IsEndStep   = false;
            nextStep.ProcessBy   = flowTo;

            nextStep.ProcessResult = "";
            nextStep.StepName      = "";
            nextStep.StepStaus     = (short)WFStepEnum.UnProecess;
            WF_StepBLL.Add(nextStep);

            //3->启动工作流
            //根据流程类型 来初始化对应流程 spring 实现
            //通过容器创建一个对象 依赖注入只能在子类中实现
            // IApplicationContext ctx = ContextRegistry.GetContext();
            var wftemp = WF_TempBLL.GetEntities(u => u.ID == id).FirstOrDefault();
            //Activity activityType = ctx.GetObject(wftemp.ActityType.Split('.')[3]) as Activity;

            var wfApp = WorkflowApplicationHelper.CreateWorkflowApp(
                //new FincallActivity(),
                Assembly.Load("HeiMa8.OA.WorkFlow").CreateInstance(wftemp.ActityType) as Activity,
                null);

            instance.WFInstanceId = wfApp.Id;
            WF_InstanceBLL.Update(instance);


            return(Content("ok"));
        }
 public WF_Instance GetWfInstance(WF_Step step)
 {
     return(WF_InstanceService.GetEntities(i => i.DelFlag == DeleteFlag.DelflagNormal && i.ID == step.WF_InstanceID)
            .FirstOrDefault());
 }
        public ActionResult Add(WF_Instance instance, int id, int flowTo)
        {
            var currentUserId = LoginUser.ID;

            //在工作流实例表添加一条数据:
            instance.DelFlag   = delflagNormal;
            instance.StartTime = DateTime.Now;
            instance.FilePath  = string.Empty;

            instance.StartBy      = currentUserId;
            instance.Level        = 0;
            instance.Status       = (short)Heima8.OA.Model.Enum.WF_InstanceEnum.Processing;
            instance.WFInstanceId = Guid.Empty;
            instance.WF_TempID    = id;
            WF_InstanceService.Add(instance);
            //第二点:启动工作流
            //1、获得工作流类型
            var temp     = GetWfTemp(instance);
            var activity = WorkflowFactory.GetActivity(temp.ActityType);
            WorkflowApplication wfApp = null;

            //2、家具产品对应的逻辑
            if (activity is ProductFlow)
            {
                //家具逻辑中,设计之后数控和小锯是二选一
                var designRole =
                    RoleInfoService.GetEntities(r => r.DelFlag == delflagNormal && r.RoleName.Contains("设计"))
                    .FirstOrDefault();
                string flowToKeyWord = GetRoleHelper.GetFlowToRoleKeyWord(designRole, id);
                wfApp = WorkflowApplicationHelper.CreateWorkflowApp(activity,
                                                                    new Dictionary <string, object>()
                {
                    { "AfterDesignFlowTo", flowToKeyWord }
                });
            }//else if{ 其他工作流的逻辑}
            else
            {//没有对应的工作流提前结束
                return(RedirectToAction("ShowMyCheck"));
            }

            instance.WFInstanceId = wfApp.Id;
            WF_InstanceService.Update(instance);

            //第三点:在步骤表里面添加两条步骤。一个当前已经处理的完成步骤。
            WF_Step startStep = new WF_Step();

            startStep.WF_InstanceID  = instance.ID;
            startStep.SubTime        = DateTime.Now;
            startStep.StepName       = "提交审批表单";
            startStep.IsEndStep      = false;
            startStep.IsStartStep    = true;
            startStep.ProcessBy      = currentUserId;
            startStep.PorcessComment = "提交申请";
            startStep.ProcessResult  = "通过";
            startStep.ProcessTime    = DateTime.Now;
//            startStep.StepName = "提交审批表单";
            startStep.StepStatus = (short)Heima8.OA.Model.Enum.WFStepEnum.Processed;


            WF_StepService.Add(startStep);

            //二个步骤:下一步谁审批的步骤。  项目经理审批
            WF_Step nextStep = new WF_Step();

            nextStep.WF_InstanceID  = instance.ID;
            nextStep.SubTime        = DateTime.Now;
            nextStep.ProcessTime    = DateTime.Now;
            nextStep.PorcessComment = string.Empty;

            nextStep.IsEndStep   = false;
            nextStep.IsStartStep = false;
            nextStep.ProcessBy   = flowTo;

            nextStep.ProcessResult = "";

            nextStep.StepName   = "";
            nextStep.StepStatus = (short)Heima8.OA.Model.Enum.WFStepEnum.UnProecess;
            WF_StepService.Add(nextStep);
            return(RedirectToAction("ShowMyCheck"));
        }