Ejemplo n.º 1
0
        public ActionResult Add(WF_Instance wfInstance, int id, int flowTo)
        {
            var currentUserId = 1;

            // 1. Add the new data into workflow-instance
            wfInstance.DelFlag      = (short)DelFlagEnum.Normal;
            wfInstance.StartTime    = DateTime.Now;
            wfInstance.FilePath     = string.Empty;
            wfInstance.SenderId     = currentUserId;
            wfInstance.Level        = 0;
            wfInstance.Status       = (short)WF_InstanceEnum.Processing;
            wfInstance.WFInstanceId = Guid.Empty;
            wfInstance.WF_TempId    = id;
            WF_InstanceService.Add(wfInstance);

            // 2. Start the workflow
            var wfApp = WorkflowApplicationHelper.CreateWorkflowApp(new FinanceActivity(), null);

            wfInstance.WFInstanceId = wfApp.Id;     // save the workflow id
            WF_InstanceService.Update(wfInstance);

            // 3. Add two new procedures to the workflow procedure
            // The first produce handler is self
            WF_Procedure startProcedure = new WF_Procedure();

            startProcedure.WF_InstanceId    = wfInstance.Id;
            startProcedure.SubTime          = DateTime.Now;
            startProcedure.ProcedureName    = "Submit the approval table";
            startProcedure.IsEndProcedure   = false;
            startProcedure.IsStartProcedure = true;
            startProcedure.HandleBy         = currentUserId;
            startProcedure.ProcessComment   = "submit approval";
            startProcedure.ProcessResult    = "pass";
            startProcedure.ProcessStatus    = (short)WF_InstanceEnum.Processing;
            WF_ProcedureService.Add(startProcedure);

            // Initial the next procedure handler
            WF_Procedure nextProcedure = new WF_Procedure();

            nextProcedure.WF_InstanceId  = wfInstance.Id;
            nextProcedure.SubTime        = DateTime.Now;
            nextProcedure.ProcessTime    = DateTime.Now;
            nextProcedure.ProcessComment = string.Empty;

            nextProcedure.IsEndProcedure   = false;
            nextProcedure.IsStartProcedure = false;
            nextProcedure.HandleBy         = flowTo;

            nextProcedure.ProcessResult = "";
            nextProcedure.ProcessStatus = (short)WF_InstanceEnum.Unprocess;
            WF_ProcedureService.Add(nextProcedure);
            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"));
        }
Ejemplo n.º 3
0
        public ActionResult Add(FormCollection fm)
        {
            //int setupValue = Convert.ToInt32(fm["SetUpValue"]);
            //CommonWFInstance wfInstance = new CommonWFInstance();
            //wfInstance.WFInstanceId = Guid.Empty;
            //wfInstance.MaxValue = Convert.ToInt32(fm["MaxValue"]);
            //wfInstance.SubTime = DateTime.Now;
            //wfInstance.status = (short)Enum.WF_InstanceEnum.Processing;
            //wfInstance.TempId = Convert.ToInt32(fm["FID"]);
            //wfInstance.UserId = Convert.ToInt32(fm["ID"]);
            //commonWFInstanceBll.Add(wfInstance);

            var wfApp = WorkflowApplicationHelper.CreateWorkflowApp(new ActivityLibraryFinancial.Activity1(), new Dictionary <string, object> {
                { "SetUpValue", Convert.ToInt32(fm["SetUpValue"]) },
                { "InputValue", Convert.ToInt32(fm["MaxValue"]) },
                { "StartBy", Convert.ToInt32(fm["ID"]) },
                { "ManagerId", 8 },    //暂时写成固定的 userId=8 test2
                { "SupervisorId", 1 }, //暂时写成固定的 userId=1 admin
                { "TempId", Convert.ToInt32(fm["FID"]) },
                { "FinacialId", 9 },   //暂时写成固定的 userId=9 test3
            });

            //创建wf实例

            //wfInstance.WFInstanceId = wfApp.Id;

            //commonWFInstanceBll.Update(wfInstance);
            ////申请人的步骤
            //CommonWFStep wfStep = new CommonWFStep();
            //wfStep.IsStartStep = true;
            //wfStep.IsEndStep = false;
            //wfStep.StepName = "提交审批";
            //wfStep.CommonWFInstanceId = wfInstance.Id;
            //wfStep.ProcessBy = Convert.ToInt32(fm["Process"]);
            //wfStep.SubTime = DateTime.Now;
            //wfStep.ProcessBy = Convert.ToInt32(fm["ID"]);
            //wfStep.StepStatus = (short)Enum.WFStepEnum.Processed;
            //wfStep.ProcessResult = "通过";
            //commonWFStepBll.Add(wfStep);

            return(RedirectToAction("/index"));
        }
Ejemplo n.º 4
0
        public ActionResult PassCheck(FormCollection fm)
        {
            //stepId:id, isPass: pass, Comment: $("#Comment").val() }

            //1、更新当前步骤
            int          id   = Convert.ToInt32(fm["stepId"]);
            CommonWFStep step = commonWFStepBll.GetEntities(s => s.Id == id).FirstOrDefault();

            //step.StepStatus = fm["Result"].ToLower() == "true" ? (short)SimpleOA.Enum.WFStepEnum.Processed: (short)SimpleOA.Enum.WFStepEnum.UnProecess;
            //step.SubTime = DateTime.Now;
            //commonWFStepBll.Update(step);
            ////让书签继续往下执行。
            var Value = fm["Result"].ToLower() == "true" ? 1 : 0;

            WorkflowApplicationHelper.ResumeBookMark(
                new ActivityLibraryFinancial.Activity1(),
                step.CommonWFInstance.WFInstanceId,
                step.StepName,
                Value);
            return(RedirectToAction("/index"));
        }
Ejemplo n.º 5
0
        public ActionResult PMDecision(int insId, bool isPass, string Comment, int FlowTo)
        {
            var instance = wF_InstanceService.LoadEntities(i => i.ID == insId).FirstOrDefault();
            var step     = (from s in instance.WF_StepInfo
                            where s.IsProcessed == false
                            select s).FirstOrDefault();

            step.IsProcessed = true;
            step.Comment     = Comment;
            step.FlowTo      = FlowTo;
            wF_StepInfoService.DeteachEntities(step);

            ActivityResult activityResult = new ActivityResult();

            activityResult.Data = step;
            activityResult.NextStepBookMarkName = step.StepName;
            activityResult.Result = isPass ? (short)WorkFlow.WFEnum.WFEnum.IsPass
                                           : (short)WorkFlow.WFEnum.WFEnum.IsReject;

            WorkflowApplicationHelper.LoadWorkflowApplication(new ClaimExpenseActivity(),
                                                              instance.ApplicationId, new Bookmark(step.StepName), activityResult);
            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"));
        }
Ejemplo n.º 7
0
        public ActionResult StartWorkflow(WF_Instance wF_Instance)
        {
            //将流程列表中添加数据
            wF_Instance.ApplicationId = Convert.ToInt32(Guid.Empty);
            wF_Instance.Result        = 0 + "";
            wF_Instance.StartedBy     = loginUser.id.ToString();
            wF_Instance.Status        = 0 + "";
            wF_Instance.SubTime       = DateTime.Now;
            wF_Instance.WF_TempID     = int.Parse(Request["hiddenTempId"]);
            WF_InstanceService.AddEntity(wF_Instance);
            //然后启动流程
            var dict = new Dictionary <string, object> {
                { "TempBookMarkName", "总监审批" }
            };

            Guid guid = Guid.Empty;

            WorkflowApplicationHelper.CreateWorkflow(new FincalActivity(), dict, out guid);

            wF_Instance.ApplicationId = Convert.ToInt32(guid);

            //保存步骤
            WF_StepInfo stepInfo = new WF_StepInfo();

            stepInfo.ChildStepID   = 0;
            stepInfo.Comment       = "开始进行财务审批";
            stepInfo.DelFlag       = 0;
            stepInfo.IsProcessed   = true;
            stepInfo.IsStartStep   = true;
            stepInfo.IsEndStep     = false;
            stepInfo.ProcessBy     = loginUser.id;
            stepInfo.ParentStepID  = 0;
            stepInfo.ParentStepID  = 0;
            stepInfo.ProcessTime   = DateTime.Now;
            stepInfo.Remark        = "开始财务审批";
            stepInfo.StepName      = "第一步";
            stepInfo.StepResult    = 1 + "";
            stepInfo.SubTime       = DateTime.Now;
            stepInfo.Title         = "开始财务审批";
            stepInfo.WF_InstanceID = wF_Instance.ID;

            WF_StepInfoService.AddEntity(stepInfo);

            //保存步骤
            WF_StepInfo masterStepInfo = new WF_StepInfo();

            masterStepInfo.ChildStepID   = 0;
            masterStepInfo.Comment       = "总监开始进行财务审批";
            masterStepInfo.DelFlag       = 0;
            masterStepInfo.IsProcessed   = false;
            masterStepInfo.IsStartStep   = false;
            masterStepInfo.IsEndStep     = false;
            masterStepInfo.ProcessBy     = int.Parse(Request["FlowTo"]);
            masterStepInfo.ParentStepID  = 0;
            masterStepInfo.ParentStepID  = 0;
            masterStepInfo.ProcessTime   = DateTime.Now;
            masterStepInfo.Remark        = "总监开始财务审批";
            masterStepInfo.StepName      = "总监审批";
            masterStepInfo.StepResult    = 1 + "";
            masterStepInfo.SubTime       = DateTime.Now;
            masterStepInfo.Title         = "开始财务审批";
            masterStepInfo.WF_InstanceID = wF_Instance.ID;

            WF_StepInfoService.AddEntity(masterStepInfo);

            return(Content("ok"));
        }
Ejemplo n.º 8
0
        public ActionResult StartFinancial(QA.Model.WF_Instance wFInstance)
        {
            //Step1: Keep an instance data in the DB.
            wFInstance.ApplicationId = Guid.Empty; //The id of an instance
            wFInstance.Result        = 0;
            wFInstance.WF_TempID     = int.Parse(Request["hiddenTempId"]);
            wFInstance.Status        = 0;
            wFInstance.SubTime       = DateTime.Now;
            wFInstance.StartedBy     = LoginUserInfo.ID;
            wF_InstanceService.AddEntity(wFInstance);

            // Start workflow

            IDictionary <string, object> data = new Dictionary <string, object>();

            //data.Add("TempBookMarkName", "Project Manager");
            data.Add("FlowTo", int.Parse(Request["flowto"]));
            data.Add("Money", decimal.Parse(Request["Amount"]));
            data.Add("ProcessBy", wFInstance.StartedBy);
            data.Add("WFInstanceId", wFInstance.ID);

            //Start the worklfow
            //var app = Common.WorkFlowHelper.CreateApplicationAndRun(new FinancialActivity(), data);

            //var app = Common.WorkFlowHelper.CreateApplicationAndRun(new FinancialActivity(), data);

            #region Workflow

            var application = WorkflowApplicationHelper.CreateWorkflowApplication(new ClaimExpenseActivity(), data);
            wFInstance.ApplicationId = application.Id;
            wF_InstanceService.EditEntity(wFInstance); //Update the worflow instance id.

            //Start the first step, apply for expense claim
            //QA.Model.WF_StepInfo initStepInfo = new QA.Model.WF_StepInfo();
            //initStepInfo.ChildStepID = 0;
            //initStepInfo.Comment = "Start a expense claim";
            //initStepInfo.DelFlag = 0;
            //initStepInfo.IsEndStep = false;
            //initStepInfo.IsProcessed = true;
            //initStepInfo.IsStartStep = true;
            //initStepInfo.ParentStepID = -1;
            ////initStepInfo.ProcessBy = LoginUser.ID;
            //initStepInfo.ProcessBy = 2;
            //initStepInfo.ProcessTime = DateTime.Now;
            //initStepInfo.Remark = "Start an expense claim";
            //initStepInfo.StepName = "The begining initiate step";
            //initStepInfo.StepResult = 0;
            //initStepInfo.SubTime = DateTime.Now;
            //initStepInfo.Title = "Initiate an expense claim";
            //initStepInfo.WF_InstanceID = wFInstance.ID;
            //wF_StepInfoService.AddEntity(initStepInfo);

            ////Create project manager validating step and waiting for approving
            //QA.Model.WF_StepInfo pmStepInfo = new QA.Model.WF_StepInfo();
            //pmStepInfo.ChildStepID = 0;
            //pmStepInfo.Comment = string.Empty;
            //pmStepInfo.DelFlag = 0;
            //pmStepInfo.IsEndStep = false;
            //pmStepInfo.IsProcessed = false;
            //pmStepInfo.IsStartStep = false;
            //pmStepInfo.ParentStepID = initStepInfo.ID;
            ////pmStepInfo.ProcessBy = LoginUser.ID;
            //pmStepInfo.ProcessBy = 38;
            //pmStepInfo.ProcessTime = DateTime.Now;
            //pmStepInfo.Remark = string.Empty;
            //pmStepInfo.StepName = "Project manager validation";
            //pmStepInfo.StepResult = 0;
            //pmStepInfo.SubTime = DateTime.Now;
            //pmStepInfo.Title = string.Empty;
            //pmStepInfo.WF_InstanceID = wFInstance.ID;
            //wF_StepInfoService.AddEntity(pmStepInfo);
            #endregion

            //return Redirect("/WFInstance/StartFinancial?id=" + id);
            return(Content("ok"));
        }
        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"));
        }