Esempio n. 1
0
        public void Save_Click(object sender, AjaxEventArgs e)
        {
            string           workItemId = HWorkItemId.Value.ToString();
            IWorkflowSession wflsession = RuntimeContextExamples.GetRuntimeContext().getWorkflowSession();
            IWorkItem        wi         = wflsession.findWorkItemById(workItemId);
            String           sn         = (String)wi.TaskInstance.AliveProcessInstance.getProcessInstanceVariable("sn");
            LoanInfoDAO      lid        = new LoanInfoDAO();
            LoanInfo         loanInfo   = lid.findBySn(sn);

            loanInfo.SalaryIsReal      = Boolean.Parse(salaryIsReal.SelectedItem.Value);
            loanInfo.CreditStatus      = Boolean.Parse(creditStatus.SelectedItem.Value);
            loanInfo.RiskEvaluator     = riskEvaluator.Text;
            loanInfo.RiskInfoInputDate = DateTime.Parse(riskInfoInputDate.Text);


            //1、首先通过"收入状况是否属实"和"信用状况是否合格"这两项指标来设置RiskFlag流程变量
            if (loanInfo.SalaryIsReal && loanInfo.CreditStatus)
            {
                loanInfo.RiskFlag = false;//false表示风险评估通过
            }
            else
            {
                loanInfo.RiskFlag = true;//表示有风险
            }
            //2、将RiskFlag设置到流程变量
            try
            {
                wi.TaskInstance.AliveProcessInstance.setProcessInstanceVariable("RiskFlag", loanInfo.RiskFlag);
            }
            catch
            {
                throw;
            }

            //3、保存业务数据
            lid.attachDirty(loanInfo);
            try
            {
                if (wi != null)
                {
                    if (wi.ActorId == this.User.Identity.Name)
                    {
                        wi.complete(comments.Text);
                    }
                }
            }
            catch
            {
                throw;
            }
        }
        public void Save_Click(object sender, AjaxEventArgs e)
        {
            LoanInfoDAO loanInfoDAO = new LoanInfoDAO();
            LoanInfo    loanInfo    = new LoanInfo()
            {
                ApplicantName    = applicantName.Text,
                ApplicantId      = applicantId.Text,
                Address          = address.Text,
                Salary           = int.Parse(salary.Text),
                LoanValue        = int.Parse(loanValue.Text),
                ReturnDate       = returnDate.SelectedDate.ToString("yyyy-MM-dd"),
                Loanteller       = loanteller.Text,
                AppInfoInputDate = DateTime.Parse(appInfoInputDate.Text)
            };

            // 一、执行业务业务操作,保存业务数据
            loanInfoDAO.attachDirty(loanInfo);

            // 二、开始执行流程操作
            IWorkflowSession workflowSession = RuntimeContextExamples.GetRuntimeContext().getWorkflowSession();

            try
            {
                // 1、创建流程实例
                IProcessInstance procInst =
                    workflowSession.createProcessInstance("LoanProcess", this.User.Identity.Name);
                // 2、设置流程变量/业务属性字段
                procInst.setProcessInstanceVariable("sn", loanInfo.Sn);                       // 设置流水号
                procInst.setProcessInstanceVariable("applicantName", loanInfo.ApplicantName); //贷款人姓名
                procInst.setProcessInstanceVariable("loanValue", loanInfo.LoanValue);         // 贷款数额

                // 3、启动流程实例,run()方法启动实例并创建第一个环节实例、分派任务
                procInst.run();
            }
            catch
            {
                throw;
            }
        }
Esempio n. 3
0
        public bool taskInstanceCanBeCompleted(IWorkflowSession currentSession, RuntimeContext runtimeContext, IProcessInstance processInstance, ITaskInstance taskInstance)
        {
            IPersistenceService persistenceService = runtimeContext.PersistenceService;
            List <IWorkItem>    workItems          = persistenceService.FindWorkItemsForTaskInstance(taskInstance.Id);

            //从流程变量中获取业务流水号
            String sn = (String)processInstance.getProcessInstanceVariable("sn");

            //已经完成的WorkItem数量
            int completedWorkItemCount = 0;

            //审批同意的决定的数量
            int approvedDecitionCount = 0;

            StringBuilder examinerList = new StringBuilder(); //所有审核人名单
            StringBuilder approverList = new StringBuilder(); //同意者名单
            StringBuilder opponentList = new StringBuilder(); //不同意者名单

            for (int i = 0; i < workItems.Count; i++)
            {
                IWorkItem wi = workItems[i];

                if (wi.State == WorkItemEnum.COMPLETED)
                {
                    completedWorkItemCount++;
                    WebDemo.Example.LoanProcess.Persistence.ApproveInfo approveInfo = approveInfoDAO.findBySnAndUserId(sn, wi.ActorId);
                    if (approveInfo != null)
                    {
                        examinerList.Append(approveInfo.Approver).Append(",");
                        if (approveInfo.Decision)
                        {
                            approvedDecitionCount++;
                            approverList.Append(approveInfo.Approver).Append(",");
                        }
                        else
                        {
                            opponentList.Append(approveInfo.Approver).Append(",");
                        }
                    }
                }
            }


            //------------------判断是否可以结束该汇签任务-----------
            float size    = (float)workItems.Count;
            float theRule = 2 / 3f;
            float currentCompletedPercentage = completedWorkItemCount / size; //已经完成的工单占总工单的比例
            float currentAggreePercentage    = approvedDecitionCount / size;  //已经同意的比例



            //如果完成的工单数量小于2/3,则直接返回false,即不可以结束TaskInstance
            if (currentCompletedPercentage < theRule)
            {
                return(false);
            }
            //如果同意的数量达到2/3则直接结束TaskInstance
            else if (currentAggreePercentage >= theRule)
            {
                //修改流程变量的值
                processInstance.setProcessInstanceVariable("Decision", true);

                //将最终审批决定纪录到业务表中
                LoanInfo loanInfo = loanInfoDAO.findBySn(sn);
                if (loanInfo != null)
                {
                    loanInfo.Decision     = true;
                    loanInfo.ExaminerList = examinerList.ToString();
                    loanInfo.ApproverList = approverList.ToString();
                    loanInfo.OpponentList = opponentList.ToString();
                    loanInfoDAO.attachDirty(loanInfo);
                }

                return(true);
            }
            //当所有的workItem结束时,可以结束TaskInstance
            else if (completedWorkItemCount == workItems.Count)
            {
                LoanInfo loanInfo = loanInfoDAO.findBySn(sn);

                if (currentAggreePercentage < theRule)
                {
                    //修改流程变量的值
                    processInstance.setProcessInstanceVariable("Decision", false);

                    //将最终审批决定记录到业务表中
                    if (loanInfo != null)
                    {
                        loanInfo.Decision = false;
                    }
                    loanInfo.ExaminerList = examinerList.ToString();
                    loanInfo.ApproverList = approverList.ToString();
                    loanInfo.OpponentList = opponentList.ToString();
                    loanInfoDAO.attachDirty(loanInfo);
                }
                else
                {
                    //修改流程变量的值
                    processInstance.setProcessInstanceVariable("Decision", true);

                    //将最终审批决定记录到业务表中
                    if (loanInfo != null)
                    {
                        loanInfo.Decision = true;
                    }
                    loanInfo.ExaminerList = examinerList.ToString();
                    loanInfo.ApproverList = approverList.ToString();
                    loanInfo.OpponentList = opponentList.ToString();
                    loanInfoDAO.attachDirty(loanInfo);
                }

                return(true);
            }
            return(false);
        }