/// <summary> /// 设置实体 /// </summary> /// <param name="sqlBuilder">Sql语句生成器</param> /// <param name="workFlowInstanceEntity">实体</param> private void SetEntity(SQLBuilder sqlBuilder, WorkFlowInstanceEntity workFlowInstanceEntity) { sqlBuilder.SetValue(WorkFlowInstanceTable.FieldWorkFlowId, workFlowInstanceEntity.WorkFlowId); sqlBuilder.SetValue(WorkFlowInstanceTable.FieldWorkFlowNo, workFlowInstanceEntity.WorkFlowNo); sqlBuilder.SetValue(WorkFlowInstanceTable.FieldFlowInsCaption, workFlowInstanceEntity.FlowInsCaption); sqlBuilder.SetValue(WorkFlowInstanceTable.FieldDescription, workFlowInstanceEntity.Description); sqlBuilder.SetValue(WorkFlowInstanceTable.FieldPriority, workFlowInstanceEntity.Priority); sqlBuilder.SetValue(WorkFlowInstanceTable.FieldStatus, workFlowInstanceEntity.Status); sqlBuilder.SetValue(WorkFlowInstanceTable.FieldNowTaskId, workFlowInstanceEntity.NowTaskId); if (DBProvider.CurrentDbType == CurrentDbType.Oracle) { sqlBuilder.SetValue(WorkFlowInstanceTable.FieldStartTime, workFlowInstanceEntity.StartTime != null ? BusinessLogic.GetOracleDateFormat(System.DateTime.Parse(workFlowInstanceEntity.StartTime.ToString()), "yyyy-mm-dd hh24:mi:ss") : workFlowInstanceEntity.StartTime); sqlBuilder.SetValue(WorkFlowInstanceTable.FieldEndTime, workFlowInstanceEntity.EndTime != null ? BusinessLogic.GetOracleDateFormat(System.DateTime.Parse(workFlowInstanceEntity.EndTime.ToString()), "yyyy-mm-dd hh24:mi:ss") : workFlowInstanceEntity.EndTime); sqlBuilder.SetValue(WorkFlowInstanceTable.FieldSuspendTime, workFlowInstanceEntity.SuspendTime != null ? BusinessLogic.GetOracleDateFormat(System.DateTime.Parse(workFlowInstanceEntity.SuspendTime.ToString()), "yyyy-mm-dd hh24:mi:ss") : workFlowInstanceEntity.SuspendTime); } else { sqlBuilder.SetValue(WorkFlowInstanceTable.FieldStartTime, workFlowInstanceEntity.StartTime); sqlBuilder.SetValue(WorkFlowInstanceTable.FieldEndTime, workFlowInstanceEntity.EndTime); sqlBuilder.SetValue(WorkFlowInstanceTable.FieldSuspendTime, workFlowInstanceEntity.SuspendTime); } sqlBuilder.SetValue(WorkFlowInstanceTable.FieldSuspendStaus, workFlowInstanceEntity.SuspendStaus); sqlBuilder.SetValue(WorkFlowInstanceTable.FieldSuspendTotalSeconds, workFlowInstanceEntity.SuspendTotalSeconds); sqlBuilder.SetValue(WorkFlowInstanceTable.FieldIsSubWorkflow, workFlowInstanceEntity.IsSubWorkflow); sqlBuilder.SetValue(WorkFlowInstanceTable.FieldMainWorkflowInsId, workFlowInstanceEntity.MainWorkflowInsId); sqlBuilder.SetValue(WorkFlowInstanceTable.FieldMainWorktaskInsId, workFlowInstanceEntity.MainWorktaskInsId); sqlBuilder.SetValue(WorkFlowInstanceTable.FieldMainWorktaskId, workFlowInstanceEntity.MainWorktaskId); sqlBuilder.SetValue(WorkFlowInstanceTable.FieldMainWorkflowId, workFlowInstanceEntity.MainWorkflowId); }
/// <summary> /// 更新实体 /// </summary> /// <param name="workFlowInstanceEntity">实体</param> public int UpdateEntity(WorkFlowInstanceEntity workFlowInstanceEntity) { SQLBuilder sqlBuilder = new SQLBuilder(DBProvider); sqlBuilder.BeginUpdate(this.CurrentTableName); this.SetEntity(sqlBuilder, workFlowInstanceEntity); sqlBuilder.SetWhere(WorkFlowInstanceTable.FieldWorkFlowInsId, workFlowInstanceEntity.WorkFlowInsId); return(sqlBuilder.EndUpdate()); }
/// <summary> /// 创建工作流实例 /// </summary> /// <param name="userInfo">用户</param> /// <param name="entity">流程实例实体</param> /// <returns>主键</returns> public string CreateWorkFlowInstance(UserInfo userInfo, WorkFlowInstanceEntity entity) { string returnValue = string.Empty; var parameter = ParameterUtil.CreateWithMessage(userInfo, MethodBase.GetCurrentMethod(), this.serviceName, RDIFrameworkMessage.WorkFlowInstanceService_CreateWorkFlowInstance); ServiceUtil.ProcessWorkFlowDbWithTransaction(userInfo, parameter, dbProvider => { var manager = new WorkFlowInstanceManager(dbProvider, userInfo); // 调用方法,并且返回运行结果 returnValue = manager.Create(entity); }); return(returnValue); }
/// <summary> /// 添加实体 /// </summary> /// <param name="workFlowInstanceEntity">实体</param> public string AddEntity(WorkFlowInstanceEntity workFlowInstanceEntity) { string sequence = string.Empty; this.Identity = false; if (!string.IsNullOrEmpty(workFlowInstanceEntity.WorkFlowInsId)) { sequence = workFlowInstanceEntity.WorkFlowInsId.ToString(CultureInfo.InvariantCulture); } SQLBuilder sqlBuilder = new SQLBuilder(DBProvider, this.Identity, this.ReturnId); sqlBuilder.BeginInsert(this.CurrentTableName, WorkFlowInstanceTable.FieldWorkFlowInsId); if (!this.Identity) { if (string.IsNullOrEmpty(workFlowInstanceEntity.WorkFlowInsId)) { sequence = BusinessLogic.NewGuid(); workFlowInstanceEntity.WorkFlowInsId = sequence; } sqlBuilder.SetValue(WorkFlowInstanceTable.FieldWorkFlowInsId, workFlowInstanceEntity.WorkFlowInsId); } else { if (!this.ReturnId && (DBProvider.CurrentDbType == CurrentDbType.Oracle || DBProvider.CurrentDbType == CurrentDbType.DB2)) { if (DBProvider.CurrentDbType == CurrentDbType.Oracle) { sqlBuilder.SetFormula(WorkFlowInstanceTable.FieldWorkFlowInsId, "SEQ_" + this.CurrentTableName.ToUpper() + ".NEXTVAL "); } if (DBProvider.CurrentDbType == CurrentDbType.DB2) { sqlBuilder.SetFormula(WorkFlowInstanceTable.FieldWorkFlowInsId, "NEXT VALUE FOR SEQ_" + this.CurrentTableName.ToUpper()); } } else { if (this.Identity && (DBProvider.CurrentDbType == CurrentDbType.Oracle || DBProvider.CurrentDbType == CurrentDbType.DB2)) { if (string.IsNullOrEmpty(workFlowInstanceEntity.WorkFlowInsId)) { if (string.IsNullOrEmpty(sequence)) { CiSequenceManager sequenceManager = new CiSequenceManager(DBProvider, this.Identity); sequence = sequenceManager.GetSequence(this.CurrentTableName); } workFlowInstanceEntity.WorkFlowInsId = sequence; } sqlBuilder.SetValue(WorkFlowInstanceTable.FieldWorkFlowInsId, workFlowInstanceEntity.WorkFlowInsId); } } } this.SetEntity(sqlBuilder, workFlowInstanceEntity); if (this.Identity && (DBProvider.CurrentDbType == CurrentDbType.SqlServer || DBProvider.CurrentDbType == CurrentDbType.Access)) { sequence = sqlBuilder.EndInsert().ToString(CultureInfo.InvariantCulture); } else { sqlBuilder.EndInsert(); } return(sequence); }
/// <summary> /// 获取实体 /// </summary> /// <param name="id">主键</param> public WorkFlowInstanceEntity GetEntity(string id) { WorkFlowInstanceEntity workFlowInstanceEntity = BaseEntity.Create <WorkFlowInstanceEntity>(this.GetDT(new KeyValuePair <string, object>(WorkFlowInstanceTable.FieldWorkFlowInsId, id))); return(workFlowInstanceEntity); }
/// <summary> /// 更新 /// </summary> /// <param name="workFlowInstanceEntity">实体</param> public int Update(WorkFlowInstanceEntity workFlowInstanceEntity) { return(this.UpdateEntity(workFlowInstanceEntity)); }
/// <summary> /// 添加 /// </summary> /// <param name="workFlowInstanceEntity">实体</param> /// <param name="identity">自增量方式</param> /// <param name="returnId">返回主键</param> /// <returns>主键</returns> public string Add(WorkFlowInstanceEntity workFlowInstanceEntity, bool identity, bool returnId) { this.Identity = identity; this.ReturnId = returnId; return(this.AddEntity(workFlowInstanceEntity)); }
/// <summary> /// 添加 /// </summary> /// <param name="workFlowInstanceEntity">实体</param> /// <returns>主键</returns> public string Add(WorkFlowInstanceEntity workFlowInstanceEntity) { return(this.AddEntity(workFlowInstanceEntity)); }
/// <summary> /// 流程启动,草稿和启动两种状态 /// </summary> public string Start() { try { if (string.IsNullOrEmpty(WorkFlowInstanceId)) { WorkFlowInstanceId = BusinessLogic.NewGuid(); } if (string.IsNullOrEmpty(WorkTaskInstanceId)) { WorkTaskInstanceId = BusinessLogic.NewGuid(); } if (string.IsNullOrEmpty(OperatorInstanceId)) { OperatorInstanceId = BusinessLogic.NewGuid(); } if (string.IsNullOrEmpty(UserId)) { return(WorkFlowConst.IsNullUserIdCode); } if (CurrentUser == null) { return(WorkFlowConst.IsNullUser); } if (string.IsNullOrEmpty(WorkFlowId)) { return(WorkFlowConst.IsNullWorkFlowIdCode); } if (string.IsNullOrEmpty(WorkTaskId)) { return(WorkFlowConst.IsNullWorkTaskIdCode); } if (string.IsNullOrEmpty(CommandName)) { return(WorkFlowConst.IsNullCommandNameCode); } if (string.IsNullOrEmpty(WorkFlowNo)) { return(WorkFlowConst.IsNullWorkFlowNoCode); } if (string.IsNullOrEmpty(WorkflowInsCaption)) { return(WorkFlowConst.IsNullWorkflowInsCaption); } if (RDIFrameworkService.Instance.WorkFlowHelperService.IsTaskInsCompleted(this.CurrentUser, WorkTaskInstanceId)) { return(WorkFlowConst.InstanceIsCompletedCode);//流程实例已完成,不能重复提交 } //检查是否已经保存过草稿。如果已经保存过则不需要再创建实例,只保存业务表单数据, //此处的处理与交互节点的处理不同,需要加判断。 if (RDIFrameworkService.Instance.WorkFlowInstanceService.WorkTaskInstanceExist(this.CurrentUser, WorkTaskInstanceId) == false)//实例不存在,说明未保存过 { //创建流程实例 var workflowInstance = new WorkFlowInstanceEntity() { WorkFlowId = WorkFlowId, WorkFlowInsId = WorkFlowInstanceId, WorkFlowNo = WorkFlowNo, FlowInsCaption = WorkflowInsCaption, Description = Description, Priority = Priority, Status = Status, NowTaskId = WorkTaskId,//当前流程所处流程模板的位置 IsSubWorkflow = IsSubWorkflow ? 1: 0, MainWorkflowInsId = MainWorkflowInsId, MainWorktaskId = MainWorktaskId, MainWorkflowId = MainWorkflowId, MainWorktaskInsId = MainWorktaskInsId }; RDIFrameworkService.Instance.WorkFlowInstanceService.CreateWorkFlowInstance(this.CurrentUser, workflowInstance); //创建启动节点的任务实例 var workTaskInstance = new WorkTaskInstanceEntity { WorkFlowId = WorkFlowId, WorkTaskId = WorkTaskId, WorkFlowInsId = WorkFlowInstanceId, WorkTaskInsId = WorkTaskInstanceId, TaskInsCaption = RDIFrameworkService.Instance.WorkFlowTemplateService.GetWorkTaskCaption(this.CurrentUser, WorkTaskId) }; if (IsSubWorkflow)//是子流程调用,需要放到未认领任务中 { workTaskInstance.PreviousTaskId = WorkTaskInstanceId; workTaskInstance.Status = "1"; } else//不是子流程调用,启动节点直接放入已认领任务中 { workTaskInstance.PreviousTaskId = WorkTaskInstanceId;//开始节点的前一节点等于自己 workTaskInstance.Status = "2"; } RDIFrameworkService.Instance.WorkFlowInstanceService.CreateWorkTaskInstance(this.CurrentUser, workTaskInstance); //创建启动节点的处理人实例 var operatorInstance = new OperatorInstanceEntity { OperatorInsId = OperatorInstanceId, WorkFlowId = WorkFlowId, WorkTaskId = WorkTaskId, WorkFlowInsId = WorkFlowInstanceId, WorkTaskInsId = WorkTaskInstanceId, UserId = UserId, OperRealtion = 0, OperContent = UserId }; var userEnity = RDIFrameworkService.Instance.UserService.GetEntity(this.CurrentUser, UserId); var userName = userEnity == null || string.IsNullOrEmpty(userEnity.UserName) ? "未找到处理人" : userEnity.UserName; operatorInstance.OperContentText = userName; operatorInstance.OperType = 3; if (IsSubWorkflow) //是子流程调用,需要放到未认领任务中 { operatorInstance.OperStatus = "0"; } else //不是子流程调用,启动节点直接放入已认领任务中 { operatorInstance.OperStatus = "3"; } RDIFrameworkService.Instance.WorkFlowInstanceService.CreateOperatorInstance(this.CurrentUser, operatorInstance); } if (!IsDraft)//不是草稿状态,提交任务 { var result = RDIFrameworkService.Instance.WorkFlowHelperService.CreateNextTaskInstance(this.CurrentUser, UserId, WorkFlowId, WorkTaskId, WorkFlowInstanceId, WorkTaskInstanceId, OperatorInstanceId, CommandName); if (result != WorkFlowConst.SuccessCode) { var e = new WorkFlowEventArgs(this) { ResultMsg = result }; OnRunFail(this, e); return(result); } else { var e = new WorkFlowEventArgs(this) { ResultMsg = WorkFlowConst.SuccessMsg }; OnRunSuccess(this, e); } } return(WorkFlowConst.SuccessCode); } catch (Exception ex) { var msg = string.Format(WorkFlowConst.EngineErrorMsg, ex.Message); var e = new WorkFlowEventArgs(this) { ResultMsg = msg }; OnRunFail(this, e); return(WorkFlowConst.OtherErrorCode); } }