예제 #1
0
        /// <summary>
        /// 判断流程实例是否存在
        /// </summary>
        /// <param name="processGUID">流程定义ID</param>
        /// <param name="version">流程定义版本</param>
        /// <returns>流程实例记录数</returns>
        public Int32 GetProcessInstanceCount(string processGUID, string version)
        {
            IDbConnection conn = SessionFactory.CreateConnection();

            try
            {
                var pim = new ProcessInstanceManager();
                return(pim.GetProcessInstanceCount(conn, processGUID, version));
            }
            catch
            {
                throw;
            }
            finally
            {
                conn.Close();
            }
        }
예제 #2
0
        /// <summary>
        /// 废弃单据下所有流程的信息
        /// </summary>
        /// <param name="runner">运行者</param>

        /// <returns>设置成功标识</returns>
        internal bool Discard(WfAppRunner runner)
        {
            var           isDiscarded = false;
            IDbConnection conn        = SessionFactory.CreateConnection();
            var           transaction = conn.BeginTransaction();

            try
            {
                //process state:7--discard status
                //record status:1 --invalid status
                string updSql = @"UPDATE WfProcessInstance
		                         SET [ProcessState] = 7, 
			                         [RecordStatusInvalid] = 1,
			                         [LastUpdatedDateTime] = @currentDate,
			                         [LastUpdatedByUserID] = @userID,
			                         [LastUpdatedByUserName] = @userName
		                        WHERE AppInstanceID = @appInstanceID
			                        AND ProcessGUID = @processGUID
                                    AND Version = @version";
                int    result = Repository.Execute(conn,
                                                   updSql,
                                                   new{
                    appInstanceID = runner.AppInstanceID,
                    processGUID   = runner.ProcessGUID,
                    version       = runner.Version,
                    userID        = runner.UserID,
                    userName      = runner.UserName,
                    currentDate   = System.DateTime.Now
                },
                                                   transaction);
                transaction.Commit();
            }
            catch (System.Exception e)
            {
                transaction.Rollback();
                throw new WorkflowException(LocalizeHelper.GetEngineMessage("processinstancemanager.discard.error", e.Message));
            }
            finally
            {
                conn.Close();
            }
            return(isDiscarded);
        }
예제 #3
0
        /// <summary>
        /// 获取运行中的流程实例
        /// </summary>
        /// <param name="runner">运行者</param>
        /// <returns>流程实例实体</returns>
        public ProcessInstanceEntity GetRunningProcessInstance(WfAppRunner runner)
        {
            ProcessInstanceEntity entity = null;
            IDbConnection         conn   = SessionFactory.CreateConnection();

            try
            {
                var pim = new ProcessInstanceManager();
                entity = pim.GetRunningProcessInstance(conn, runner.AppInstanceID, runner.ProcessGUID);
            }
            catch
            {
                throw;
            }
            finally
            {
                conn.Close();
            }
            return(entity);
        }
예제 #4
0
        public ResponseResult StartProcess(WfAppRunner starter)
        {
            IWorkflowService wfService = new WorkflowService();
            IDbConnection    conn      = SessionFactory.CreateConnection();

            IDbTransaction trans = null;

            try
            {
                trans = conn.BeginTransaction();
                WfExecutedResult result = wfService.StartProcess(conn, starter, trans);
                trans.Commit();

                int newProcessInstanceID   = result.ProcessInstanceIDStarted;
                IList <NodeView> nextStpes = wfService.GetNextActivityTree(starter);

                if (result.Status == WfExecutedStatus.Success)
                {
                    trans.Commit();
                    return(ResponseResult.Success());
                }
                else
                {
                    trans.Rollback();
                    return(ResponseResult.Error(result.Message));
                }
            }
            catch (WorkflowException w)
            {
                trans.Rollback();
                return(ResponseResult.Error(w.Message));
            }
            finally
            {
                trans.Dispose();
                if (conn.State == ConnectionState.Open)
                {
                    conn.Close();
                }
            }
        }
예제 #5
0
        /// <summary>
        /// 数据测试
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public Entity.ResponseResult Add(Entity.GenresEntity entity)
        {
            var appResult = ResponseResult.Default();

            try
            {
                using (IDbConnection conn = SessionFactory.CreateConnection())
                {
                    int rows = conn.Insert <GenresEntity>(entity);
                    if (rows > 0)
                    {
                        appResult = ResponseResult.Success();
                    }
                }
            }
            catch (Exception ex)
            {
                appResult = ResponseResult.Error(ex.Message);
            }
            return(appResult);
        }
예제 #6
0
        /// <summary>
        /// 获取特定表单的实例数据
        /// </summary>
        /// <param name="query">实体查询对象</param>
        /// <returns>表单数值列表</returns>
        public List <dynamic> GetEntityInfoWithAttrValueList(EntityInfoQuery query)
        {
            List <dynamic> list = null;

            try
            {
                var param = new DynamicParameters();
                param.Add("@queryType", 1);
                param.Add("@entityDefID", query.EntityDefID);

                using (var conn = SessionFactory.CreateConnection())
                {
                    list = QuickRepository.ExecProcQuery <dynamic>(conn, "pr_eav_EntityAttrValuePivotGet", param).ToList <dynamic>();
                }
                return(list);
            }
            catch (System.Exception ex)
            {
                throw;
            }
        }
예제 #7
0
        /// <summary>
        /// 流程的取消操作
        /// </summary>
        /// <returns>是否成功</returns>
        internal bool Cancel(WfAppRunner runner, IDbConnection conn = null)
        {
            bool isCanceled = false;

            if (conn == null)
            {
                conn = SessionFactory.CreateConnection();
            }
            try
            {
                var entity = GetProcessInstanceLatest(runner.AppName,
                                                      runner.AppInstanceID,
                                                      runner.ProcessGUID);

                if (entity == null || entity.ProcessState != (short)ProcessStateEnum.Running)
                {
                    throw new WorkflowException("无法取消流程,错误原因:当前没有运行中的流程实例,或者同时有多个运行中的流程实例(不合法数据)!");
                }

                IDbSession session = SessionFactory.CreateSession();
                entity.ProcessState          = (short)ProcessStateEnum.Canceled;
                entity.RecordStatusInvalid   = 1;
                entity.LastUpdatedByUserID   = runner.UserID;
                entity.LastUpdatedByUserName = runner.UserName;
                entity.LastUpdatedDateTime   = System.DateTime.Now;

                Update(entity, session);

                isCanceled = true;
            }
            catch (System.Exception e)
            {
                throw new WorkflowException(string.Format("取消流程实例失败,错误原因:{0}", e.Message));
            }
            finally
            {
                conn.Close();
            }
            return(isCanceled);
        }
예제 #8
0
        /// <summary>
        /// 获取流程正常实例数据
        /// </summary>
        /// <param name="runner"></param>
        /// <returns></returns>
        public ProcessInstanceEntity GetProcessInstance(WfAppRunner runner, IDbConnection conn = null)
        {
            if (conn == null)
            {
                conn = SessionFactory.CreateConnection();
            }

            try
            {
                var pim             = new ProcessInstanceManager();
                var processInstance = pim.GetProcessInstanceLatest(runner.AppInstanceID, runner.ProcessGUID);
                return(processInstance);
            }
            catch
            {
                throw;
            }
            finally
            {
                conn.Close();
            }
        }
예제 #9
0
        /// <summary>
        /// (通用)生成单据编号。统一格式:前缀+年月日+4位字符,示例 YT2017070001
        /// </summary>
        /// <param name="tableName">表名</param>
        /// <param name="columnName">列名</param>
        /// <param name="prefix">前缀</param>
        /// <returns>返回单据编号</returns>
        public string GetMonthBatchCode(string tableName, string columnName, string prefix)
        {
            string batchCode = string.Empty;

            using (IDbConnection conn = SessionFactory.CreateConnection())
            {
                try
                {
                    string sql = string.Format("EXEC UP_GetMonthBatchCode '{0}', '{1}', '{2}'", tableName, columnName, prefix);
                    object obj = QuickRepository.ExecuteScalar(conn, sql);
                    if (obj != null)
                    {
                        batchCode = obj.ToString();
                    }
                }
                catch (Exception ex)
                {
                }
            }

            return(batchCode);
        }
예제 #10
0
        /// <summary>
        /// 流程的取消操作
        /// </summary>
        /// <param name="runner">运行者</param>
        /// <param name="conn">数据库链接</param>
        /// <returns>设置成功标识</returns>
        internal bool Cancel(WfAppRunner runner, IDbConnection conn = null)
        {
            bool isCanceled = false;

            if (conn == null)
            {
                conn = SessionFactory.CreateConnection();
            }
            try
            {
                var entity = GetProcessInstanceLatest(runner.AppInstanceID,
                                                      runner.ProcessGUID);

                if (entity == null || entity.ProcessState != (short)ProcessStateEnum.Running)
                {
                    throw new WorkflowException(LocalizeHelper.GetEngineMessage("processinstancemanager.cancel.error"));
                }

                IDbSession session = SessionFactory.CreateSession();
                entity.ProcessState          = (short)ProcessStateEnum.Canceled;
                entity.RecordStatusInvalid   = 1;
                entity.LastUpdatedByUserID   = runner.UserID;
                entity.LastUpdatedByUserName = runner.UserName;
                entity.LastUpdatedDateTime   = System.DateTime.Now;

                Update(entity, session);

                isCanceled = true;
            }
            catch (System.Exception e)
            {
                throw new WorkflowException(LocalizeHelper.GetEngineMessage("processinstancemanager.cancel.error", e.Message));
            }
            finally
            {
                conn.Close();
            }
            return(isCanceled);
        }
예제 #11
0
        /// <summary>
        /// 根据表单实例ID,读取表单字段数值
        /// </summary>
        /// <param name="entityInfoID"></param>
        /// <returns></returns>
        public List <EntityAttrValueItem> QueryEntityAttrValue(int entityInfoID)
        {
            List <EntityAttrValueItem> list = null;

            try
            {
                var param = new DynamicParameters();
                param.Add("@entityInfoID", entityInfoID);

                using (var conn = SessionFactory.CreateConnection())
                {
                    list = QuickRepository.ExecProcQuery <EntityAttrValueItem>(conn,
                                                                               "pr_eav_EntityAttrValueQuery", param).ToList <EntityAttrValueItem>();
                }

                return(list);
            }
            catch (System.Exception ex)
            {
                throw;
            }
        }
예제 #12
0
        public ResponseResult RunProcessApp(WfAppRunner runner)
        {
            IWorkflowService wfService = new WorkflowService();
            IDbConnection    conn      = SessionFactory.CreateConnection();

            IDbTransaction trans = null;

            try
            {
                trans = conn.BeginTransaction();
                var result = wfService.RunProcessApp(conn, runner, trans);
                trans.Commit();

                if (result.Status == WfExecutedStatus.Success)
                {
                    trans.Commit();
                    return(ResponseResult.Success());
                }
                else
                {
                    trans.Rollback();
                    return(ResponseResult.Error(result.Message));
                }
            }
            catch (WorkflowException w)
            {
                trans.Rollback();
                return(ResponseResult.Error(w.Message));
            }
            finally
            {
                trans.Dispose();
                if (conn.State == ConnectionState.Open)
                {
                    conn.Close();
                }
            }
        }
예제 #13
0
        /// <summary>
        /// 获取活动节点实例
        /// </summary>
        /// <param name="appInstanceID"></param>
        /// <param name="processGUID"></param>
        /// <param name="activityGUID"></param>
        /// <returns></returns>
        internal ActivityInstanceEntity GetActivityInstanceLatest(string appInstanceID,
                                                                  string processGUID,
                                                                  string activityGUID)
        {
            var sql = @"SELECT * FROM WfActivityInstance 
                        WHERE AppInstanceID = @appInstanceID 
                            AND ProcessGUID = @processGUID
                            AND ActivityGUID = @activityGUID
                            ORDER BY ID DESC";

            ActivityInstanceEntity activityInstance = null;
            var conn = SessionFactory.CreateConnection();

            try
            {
                var instanceList = Repository.Query <ActivityInstanceEntity>(conn,
                                                                             sql,
                                                                             new
                {
                    appInstanceID = appInstanceID,
                    processGUID   = processGUID.ToString(),
                    activityGUID  = activityGUID.ToString()
                }).ToList();
                if (instanceList.Count > 0)
                {
                    activityInstance = instanceList[0];
                }
            }
            finally
            {
                if (conn != null)
                {
                    conn.Close();
                }
            }

            return(activityInstance);
        }
예제 #14
0
        public ResponseResult <List <AppFlowEntity> > QueryPaged(AppFlowQuery query)
        {
            var result = ResponseResult <List <AppFlowEntity> > .Default();

            var conn = SessionFactory.CreateConnection();

            try
            {
                var count = 0;
                var list  = AppFlowService.GetPaged(query, out count);
                result = ResponseResult <List <AppFlowEntity> > .Success(list);

                result.TotalRowsCount = count;
                result.TotalPages     = (count + query.PageSize - 1) / query.PageSize;
            }
            catch (System.Exception ex)
            {
                result = ResponseResult <List <AppFlowEntity> > .Error(
                    string.Format("获取{0}分页数据失败,错误{1}", "AppFlow", ex.Message)
                    );
            }
            return(result);
        }
예제 #15
0
        public bool UpdateHrsLeave(LeaveEntity leave)
        {
            //IDbSession conn = SessionFactory.CreateSession();
            IDbConnection conn = SessionFactory.CreateConnection();
            string        sql  = @"UPDATE [dbo].[HrsLeave]
                   SET 
                      [DepManagerRemark] = @DepManagerRemark,
                      [DirectorRemark] = @DirectorRemark,
                      [DeputyGeneralRemark] = @DeputyGeneralRemark,
                      [GeneralManagerRemark] =@GeneralManagerRemark
                 WHERE id=@Id";

            try
            {
                string s = Repository.Execute(conn, sql, new
                {
                    DepManagerRemark     = leave.DepManagerRemark,
                    DirectorRemark       = leave.DirectorRemark,
                    DeputyGeneralRemark  = leave.DeputyGeneralRemark,
                    GeneralManagerRemark = leave.GeneralManagerRemark,
                    Id = leave.ID
                }).ToString();

                if (string.IsNullOrEmpty(s))
                {
                    return(false);
                }
                else
                {
                    return(true);
                }
            }
            finally
            {
                conn.Close();
            }
        }
예제 #16
0
        public ProcessEntity GetById(Guid processGUID)
        {
            IDbConnection conn = SessionFactory.CreateConnection();

            return(ProcessRepository.GetById <ProcessEntity>(processGUID, conn, null));
        }