/// <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("您没有审批该流程的权限"); } }
/// <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("只有执行中的工单才可进行终止操作"); } }