示例#1
0
        /// <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);
        }
示例#2
0
        /// <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);
        }
示例#4
0
        /// <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);
        }
示例#5
0
        /// <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);
        }
示例#6
0
 /// <summary>
 /// 更新
 /// </summary>
 /// <param name="workFlowInstanceEntity">实体</param>
 public int Update(WorkFlowInstanceEntity workFlowInstanceEntity)
 {
     return(this.UpdateEntity(workFlowInstanceEntity));
 }
示例#7
0
 /// <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));
 }
示例#8
0
 /// <summary>
 /// 添加
 /// </summary>
 /// <param name="workFlowInstanceEntity">实体</param>
 /// <returns>主键</returns>
 public string Add(WorkFlowInstanceEntity workFlowInstanceEntity)
 {
     return(this.AddEntity(workFlowInstanceEntity));
 }
示例#9
0
        /// <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);
            }
        }