/// <summary> /// 设定处理者实例正常结束 /// </summary> /// <param name="userInfo">用户</param> /// <param name="userId">用户Id</param> /// <param name="operatorInsId">操作者实例id</param> /// <returns>大于0成功</returns> public int SetOperatorInstanceOver(UserInfo userInfo, string userId, string operatorInsId) { int returnValue = -1; var parameter = ParameterUtil.CreateWithMessage(userInfo, MethodBase.GetCurrentMethod(), this.serviceName, RDIFrameworkMessage.WorkFlowInstanceService_SetOperatorInstanceOver); ServiceUtil.ProcessWorkFlowDbWithTransaction(userInfo, parameter, dbProvider => { var manager = new OperatorInstanceManager(dbProvider, userInfo); returnValue = manager.SetOperatorInstanceOver(userId, operatorInsId); }); return(returnValue); }
/// <summary> /// 获得一个要处理的信息 /// </summary> /// <param name="userInfo">用户</param> /// <param name="operatorInsId">处理者实例Id</param> /// <returns></returns> public DataTable GetOperatorInstance(UserInfo userInfo, string operatorInsId) { var parameter = ParameterUtil.CreateWithMessage(userInfo, MethodBase.GetCurrentMethod(), this.serviceName, RDIFrameworkMessage.WorkFlowInstanceService_GetOperatorInstance); var dataTable = new DataTable(OperatorInstanceTable.TableName); ServiceUtil.ProcessWorkFlowDb(userInfo, parameter, dbProvider => { var manager = new OperatorInstanceManager(dbProvider, userInfo); dataTable = manager.GetOperatorInstance(operatorInsId); }); return(dataTable); }
/// <summary> /// 创建处理者实例 /// </summary> /// <param name="userInfo">用户</param> /// <param name="entity">创建处理者实例实体</param> /// <returns>主键</returns> public string CreateOperatorInstance(UserInfo userInfo, OperatorInstanceEntity entity) { string returnValue = string.Empty; var parameter = ParameterUtil.CreateWithMessage(userInfo, MethodBase.GetCurrentMethod(), this.serviceName, RDIFrameworkMessage.WorkFlowInstanceService_CreateOperatorInstance); ServiceUtil.ProcessWorkFlowDbWithTransaction(userInfo, parameter, dbProvider => { var manager = new OperatorInstanceManager(dbProvider, userInfo); // 调用方法,并且返回运行结果 returnValue = manager.Create(entity); }); return(returnValue); }
/// <summary> /// 任务任意退回 /// </summary> /// <param name="userId">用户id</param> /// <param name="operatorInsId">退回的处理实例Id</param> /// <param name="backyy">退回原因</param> /// <param name="workflowInsId">上级</param> /// <returns></returns> public string WorkTaskBackry(string userId, string operatorInsId, string backyy, string workflowInsId) { try { //1、存储过程方法 /* * int i = this.DBProvider.ExecuteProcedure("WorkTaskSubmitBackProry", new IDbDataParameter[] * { * DBProvider.MakeParameter("OPERATORINSTANCEID", operatorInsId), * DBProvider.MakeParameter("BACKYY", backyy), * DBProvider.MakeParameter("WORKFLOWINSID", workflowInsId), * DBProvider.MakeParameter("USERID", userId) * }); * return (i > 0) ? WorkFlowConst.SuccessCode : WorkFlowConst.TaskAssignErrorCode; */ //2、直接语句法 int returnValue = 0; //2.1、取得处理的任务实例 string workTaskInsId = new OperatorInstanceManager(DBProvider).GetProperty(OperatorInstanceTable.FieldOperatorInsId, operatorInsId, OperatorInstanceTable.FieldWorkTaskInsId); //2.2、获取前一任务实例 string workFlow = new WorkTaskInstanceManager(DBProvider).GetProperty(WorkTaskInstanceTable.FieldWorkTaskInsId, workTaskInsId, WorkTaskInstanceTable.FieldWorkFlowInsId); //2.3、设定当前任务结束 //SetWorkTaskInstanceOver(userId, workTaskInsId); SetWorkTaskInstanceOver(GetUserRealNameById(userId), workTaskInsId); //2.4、设置当前处理者实例结束 returnValue += new OperatorInstanceManager(DBProvider).SetOperatorInstanceOver(userId, operatorInsId); //2.5、 string strSql = string.Format(@" INSERT INTO WORKFLOWBACK(ID, USERID ,OPERATORINSID ,BACKYY , BACKTIME) VALUES ( {0} ,{1} ,{2} ,{3},{4} )", DBProvider.GetParameter("ID"), DBProvider.GetParameter("USERID"), DBProvider.GetParameter("OPERATORINSID"), DBProvider.GetParameter("BACKYY"), DBProvider.GetDBNow()); returnValue += DBProvider.ExecuteNonQuery(strSql, new[] { DBProvider.MakeParameter("ID", BusinessLogic.NewGuid()), DBProvider.MakeParameter("USERID", GetUserRealNameById(userId)), DBProvider.MakeParameter("OPERATORINSID", workFlow), DBProvider.MakeParameter("BACKYY", backyy) }); //2.6、 strSql = string.Format(@" INSERT INTO AUDITMESSAGE ( AUDITID,WORKFLOWINSID ,MESSAGE ,AUDITUSERID ,AUDITUSERNAME ,AUDITRESULT ,AUDITTIME ,AUDITXYB) VALUES ( {0} ,{1} ,{2} ,{3} ,{4} ,{5} ,{6},{7})", DBProvider.GetParameter("AUDITID"), DBProvider.GetParameter("WORKFLOWINSID"), DBProvider.GetParameter("MESSAGE"), DBProvider.GetParameter("AUDITUSERID"), DBProvider.GetParameter("USERID"), "'任意退回'", DBProvider.GetDBNow(), 0); returnValue += DBProvider.ExecuteNonQuery(strSql, new[] { DBProvider.MakeParameter("AUDITID", BusinessLogic.NewGuid()), DBProvider.MakeParameter("WORKFLOWINSID", workFlow), DBProvider.MakeParameter("MESSAGE", backyy), DBProvider.MakeParameter("AUDITUSERID", userId), DBProvider.MakeParameter("USERID", GetUserRealNameById(userId)) }); //2.7、退回至提交人 此处与WORKFLOWCONST.TASKBACKMSG对应 //UPDATE WORKTASKINSTANCE SET SUCCESSMSG = '任意退回至提交人!' WHERE WORKTASKINSID = @WORKTASKINSID returnValue += SetProperty(WorkTaskInstanceTable.FieldWorkTaskInsId, workTaskInsId, WorkTaskInstanceTable.FieldSuccessMsg, "任意退回至提交人!"); //2.8、任务状态重置 switch (DBProvider.CurrentDbType) { case CurrentDbType.Access: case CurrentDbType.SqlServer: strSql = string.Format(@" UPDATE WORKTASKINSTANCE SET ENDTIME = {0} ,STATUS = '2' ,REMINDED = '0' ,OPERATEDDES = ISNULL(OPERATEDDES, '') + ',但被[' + {1} + ']任意退回,' WHERE WORKTASKINSID = {2} AND STATUS = 3", DBProvider.GetDBNow(), DBProvider.GetParameter("USERID"), DBProvider.GetParameter("WORKTASKINSID")); break; case CurrentDbType.Oracle: strSql = string.Format(@" UPDATE WORKTASKINSTANCE SET ENDTIME = {0} ,STATUS = '2' ,REMINDED = '0' ,OPERATEDDES = NVL(OPERATEDDES, '') + ',但被[' + {1} + ']任意退回,' WHERE WORKTASKINSID = {2} AND STATUS = 3", DBProvider.GetDBNow(), DBProvider.GetParameter("USERID"), DBProvider.GetParameter("WORKTASKINSID")); break; case CurrentDbType.MySql: strSql = string.Format(@" UPDATE WORKTASKINSTANCE SET ENDTIME = {0} ,STATUS = '2' ,REMINDED = '0' ,OPERATEDDES = CONCAT(IFNULL(OPERATEDDES, '') ,',但被[',{1},']任意退回,') WHERE WORKTASKINSID = {2} AND STATUS = 3", DBProvider.GetDBNow(), DBProvider.GetParameter("USERID"), DBProvider.GetParameter("WORKTASKINSID")); break; } returnValue += DBProvider.ExecuteNonQuery(strSql, new[] { DBProvider.MakeParameter("USERID", GetUserRealNameById(userId)), DBProvider.MakeParameter("WORKTASKINSID", workflowInsId) }); return((returnValue > 0) ? WorkFlowConst.SuccessCode : WorkFlowConst.TaskAssignErrorCode); } catch (Exception ex) { //LogHelper.WriteLog(ex); throw new Exception("BizLogicError:任务退回失败,请与管理员联系!Error:" + ex.Message); } }
/// <summary> /// 认领任务 /// </summary> /// <param name="userId">用户Id</param> /// <param name="operatorInsId">认领的任务Id</param> /// <returns></returns> public string WorkTaskClaim(string userId, string operatorInsId) { try { //1、存储过程方式 /* * int i = DBProvider.ExecuteProcedure("WorkTaskClaimPro", new[] * { * DBProvider.MakeParameter("USERID", userId), * DBProvider.MakeParameter("OPERATORINSTANCEID", operatorInsId) * * }); * * return (i > 0) ? WorkFlowConst.SuccessCode : WorkFlowConst.TaskClaimErrorCode; */ //2、语句方式 //2.1、取得处理的任务实例 string workTaskInstanceId = new OperatorInstanceManager(DBProvider).GetProperty(OperatorInstanceTable.FieldOperatorInsId, operatorInsId, OperatorInstanceTable.FieldWorkTaskInsId); //2.2、检查是否具有认领权限 string strSql = string.Format(@"SELECT COUNT(*) FROM ( SELECT OPERCONTENT , STATUS , USERID , OPERATORINSID , OPERSTATUS FROM WORKTASKINSTANCEVIEW WHERE ( ( OPERCONTENT IN ( SELECT OPERCONTENT FROM OPERCONTENTVIEW WHERE USERID = {0} ) ) OR ( OPERCONTENT = 'All' ) ) AND ( OPERSTATUS = '0' ) AND ( STATUS = '1' ) AND OPERATORINSID = {1} UNION SELECT OPERCONTENT , STATUS , USERID , OPERATORINSID , OPERSTATUS FROM WORKTASKINSACCREDITVIEW WHERE ACCREDITTOUSERID = {2} AND ACCREDITSTATUS = '1' AND STATUS = '1' ) A", DBProvider.GetParameter("USERID"), DBProvider.GetParameter("OPERATORINSID"), DBProvider.GetParameter("ACCREDITTOUSERID")); int jg = BusinessLogic.ConvertToInt(DBProvider.ExecuteScalar(strSql, new[] { DBProvider.MakeParameter("USERID", userId), DBProvider.MakeParameter("OPERATORINSID", operatorInsId), DBProvider.MakeParameter("ACCREDITTOUSERID", userId) })); if (jg < 1) { throw new Exception("BizLogicError:认领任务失败,请与管理员联系"); } //2.3、设置任务实例被那个处理者认领 strSql = string.Format(@"UPDATE WORKTASKINSTANCE SET STATUS = 2 , OPERATORINSID = {0} WHERE WORKTASKINSID = {1} AND STATUS = '1'", DBProvider.GetParameter("OPERATORINSID"), DBProvider.GetParameter("WORKTASKINSID")); int returnValue = DBProvider.ExecuteNonQuery(strSql, new[] { DBProvider.MakeParameter("OPERATORINSID", operatorInsId), DBProvider.MakeParameter("WORKTASKINSID", workTaskInstanceId) }); //2.4、设置处理者实例已认领 strSql = string.Format(@"UPDATE OPERATORINSTANCE SET USERID = {0} , OPERSTATUS = '3' WHERE OPERATORINSID = {1} AND OPERSTATUS = '0'", DBProvider.GetParameter("USERID"), DBProvider.GetParameter("OPERATORINSID")); returnValue += DBProvider.ExecuteNonQuery(strSql, new[] { DBProvider.MakeParameter("USERID", userId), DBProvider.MakeParameter("OPERATORINSID", operatorInsId) }); return((returnValue > 0) ? WorkFlowConst.SuccessCode : WorkFlowConst.TaskClaimErrorCode); } catch (Exception ex) { throw new Exception("BizLogicError:认领任务失败,请与管理员联系!Error:" + ex.Message); } }
/// <summary> /// 指定处理人 /// </summary> /// <param name="userId">用户Id</param> /// <param name="workFlowId">流程模板Id</param> /// <param name="workTaskId">任务模板Id</param> /// <param name="workFlowInstanceId">流程实例Id</param> /// <param name="workTaskInstanceId">任务实例Id</param> /// <param name="operParam">处理者参数</param> /// <returns>是否成功</returns> public bool AssignUser(string userId, string workFlowId, string workTaskId, string workFlowInstanceId, string workTaskInstanceId, OperParameter operParam) { if (string.IsNullOrEmpty(operParam.OperContent)) { return(false); } switch (operParam.OperRule) { case "1": { //创建处理人实例 var operInsEntity = new OperatorInstanceEntity() { OperatorInsId = BusinessLogic.NewGuid(), WorkFlowId = workFlowId, WorkTaskId = workTaskId, WorkFlowInsId = workFlowInstanceId, WorkTaskInsId = workTaskInstanceId, //此时是新任务Id UserId = "", OperRealtion = operParam.OperRelation, OperContent = operParam.OperContent, OperContentText = operParam.OperContenText, OperType = operParam.OperType//此处保留原来的处理类型 }; string successCode = new OperatorInstanceManager(this.DBProvider).Create(operInsEntity); //给处理者发送信息 if (!string.IsNullOrEmpty(successCode) && successCode.Length > 0) { var messageEntity = new CiMessageEntity { Id = BusinessLogic.NewGuid(), FunctionCode = MessageFunction.Remind.ToString(), ReceiverId = DefaultRole.Administrator.ToString(), Title = "业务流程消息", MSGContent = "你有一待办任务,请到未认领任务界面认领。", IsNew = 1, ReadCount = 0, Enabled = 1, DeleteMark = 0 }; var messageManager = new CiMessageManager(DbFactoryProvider.GetProvider(SystemInfo.RDIFrameworkDbType, SystemInfo.RDIFrameworkDbConectionString), this.UserInfo); messageManager.BatchSend(operInsEntity.OperContent, null, null, messageEntity, false); } if ((userId == operParam.OperContent) && (operParam.IsJumpSelf)) //处理者是提交人,自动处理 { var wfrun = new WorkFlowRuntime(); wfrun.Run(userId, operInsEntity.OperatorInsId, "提交"); } } break; case "2": { //创建任务实例 var newTaskId = BusinessLogic.NewGuid();//新任务实例Id var workTaskInsEntity = new WorkTaskInstanceEntity() { WorkFlowId = workFlowId, WorkTaskId = workTaskId, WorkFlowInsId = workFlowInstanceId, WorkTaskInsId = newTaskId, PreviousTaskId = workTaskInstanceId, //此时是当前任务Id TaskInsCaption = new WorkTaskManager(this.DBProvider).GetTaskCaption(workTaskId), Status = "1", }; new WorkTaskInstanceManager(this.DBProvider).Create(workTaskInsEntity); //创建处理人实例 var operInsEntity = new OperatorInstanceEntity() { OperatorInsId = BusinessLogic.NewGuid(), WorkFlowId = workFlowId, WorkTaskId = workTaskId, WorkFlowInsId = workFlowInstanceId, WorkTaskInsId = newTaskId, UserId = "", OperRealtion = operParam.OperRelation, OperContent = operParam.OperContent, OperContentText = operParam.OperContenText, OperType = 3,//此处修改为指定处理人 }; string successCode = new OperatorInstanceManager(this.DBProvider).Create(operInsEntity); //给处理者发送信息 if (!string.IsNullOrEmpty(successCode) && successCode.Length > 0) { var messageEntity = new CiMessageEntity { Id = BusinessLogic.NewGuid(), FunctionCode = MessageFunction.Remind.ToString(), ReceiverId = DefaultRole.Administrator.ToString(), Title = "业务流程消息", MSGContent = "你有一待办任务,请到未认领任务界面认领。", IsNew = 1, ReadCount = 0, Enabled = 1, DeleteMark = 0 }; var messageManager = new CiMessageManager(DbFactoryProvider.GetProvider(SystemInfo.RDIFrameworkDbType, SystemInfo.RDIFrameworkDbConectionString), this.UserInfo); messageManager.BatchSend(operInsEntity.OperContent, null, null, messageEntity, false); } if ((userId == operParam.OperContent) && (operParam.IsJumpSelf)) //处理者是提交人,自动处理 { var wfrun = new WorkFlowRuntime(); wfrun.Run(userId, operInsEntity.OperatorInsId, "提交"); } } break; } return(true); }