Esempio n. 1
0
        /// <summary>
        /// 工单用户审核
        /// </summary>
        /// <param name="condtion">审批请求</param>
        /// <param name="userInfo">审批用户信息</param>
        public void DoWorkFlowUserConfirm(BaseWorkOrderUserConfirmReqeust condtion, ICommunicationable userInfo)
        {
            //权限验证
            var    nowTaskUsers = GetTaskUsersByStepId(this.WorkFlowBookMarkId);
            string userId       = userInfo.getIdString();
            var    stepInfo     = WorkFlowDefStep.GetInstance(this.WorkFlowBookMarkId);

            if (DoWorkFlowUserConfirmBefore(condtion, nowTaskUsers, userInfo, stepInfo))
            {
                var taskUserInfo = nowTaskUsers.Single(p => p.UserId == userId);
                taskUserInfo.IsConfirm         = true;
                taskUserInfo.ConfirmTime       = DateTime.Now;
                taskUserInfo.ConfirmTimeString = taskUserInfo.ConfirmTime.Value.ToString("yyyy-MM-dd HH:mm");
                taskUserInfo.Remark            = condtion.Remark;
                taskUserInfo.SaveConfirm();
                string msg = string.Format("工作流用户审批,步骤:[{0}],备注:[{1}]", stepInfo.name, condtion.Remark);
                UserLog.create(msg, "工作流", userInfo, this);

                //执行下一步
                var next = stepInfo.GetNextLineDetails();
                DoWorkFlowUserConfirmAfter(condtion, nowTaskUsers, taskUserInfo, stepInfo, next, userInfo);
            }
            else
            {
                throw new ValiDataException("用户审批前置验证失败,无法进行审批");
            }

            if (!nowTaskUsers.Select(p => p.UserId).Contains(userId))
            {
                throw new ValiDataException("您没有审批该流程的权限");
            }
        }
Esempio n. 2
0
 /// <summary>
 /// 工作流终止(停止流程执行并设置为终止状态)
 /// </summary>
 public BaseWorkOrder WorkFlowTermination(ICommunicationable user, BaseWorkOrderUserConfirmReqeust condtion)
 {
     if (this.OrderStatus == WorkOrderStatus.执行中)
     {
         var    nowTaskUsers = GetTaskUsersByStepId(this.WorkFlowBookMarkId);
         var    stepInfo     = WorkFlowDefStep.GetInstance(this.WorkFlowBookMarkId);
         string userId       = user.getIdString();
         if (!DoWorkFlowTerminationBefore(condtion, nowTaskUsers, user, stepInfo))
         {
             throw new ValiDataException("该流程不能被终止");
         }
         var taskUserInfo = nowTaskUsers.Single(p => p.UserId == userId);
         var result       = DoWorkFlowTermination(user, condtion.Remark);
         //记录到日志
         UserLog.create(string.Format("流程被终止,原因:[{0}]", condtion.Remark), "工作流", user, this);
         //后续操作
         DoWorkFlowTerminationAfter(condtion, nowTaskUsers, taskUserInfo, stepInfo, user);
         return(result);
     }
     else
     {
         throw new ValiDataException("只有执行中的工单才可进行终止操作");
     }
 }