コード例 #1
0
 public async Task GetExecuteEntryUsers(CommonSignConfigurationRootAction rootAction, string entityKey, Func <string, Task> callback)
 {
     var entryGetExecuteUsersService = _commonSignConfigurationEntryGetExecuteUsersServiceSelector.Choose(rootAction.EntryGetExecuteUsersServiceName);
     await entryGetExecuteUsersService.Execute(rootAction, entityKey, async (userKey) =>
     {
         await callback(userKey);
     });
 }
コード例 #2
0
 /// <summary>
 /// 赋值通用审批配置节点数据操作
 /// </summary>
 public static void SetCommonSignConfigurationRootActionSelectFields(CommonSignConfigurationRootAction data, DbDataReader reader, string prefix)
 {
     data.ID = (Guid)reader[string.Format("{0}id", prefix)];
     data.ConfigurationId                       = (Guid)reader[string.Format("{0}configurationid", prefix)];
     data.ActionName                            = reader[string.Format("{0}actionname", prefix)].ToString();
     data.WorkflowResourceInitStatus            = (int)reader[string.Format("{0}workflowresourceinitstatus", prefix)];
     data.WorkflowResourceDefaultCompleteStatus = (int)reader[string.Format("{0}workflowresourcedefaultcompletestatus", prefix)];
     if (reader[string.Format("{0}entrynodeid", prefix)] != DBNull.Value)
     {
         data.EntryNodeId = (Guid)reader[string.Format("{0}entrynodeid", prefix)];
     }
     if (reader[string.Format("{0}entrynodefindserviceconfiguration", prefix)] != DBNull.Value)
     {
         data.EntryNodeFindServiceConfiguration = reader[string.Format("{0}entrynodefindserviceconfiguration", prefix)].ToString();
     }
     if (reader[string.Format("{0}entrynodefindservicename", prefix)] != DBNull.Value)
     {
         data.EntryNodeFindServiceName = reader[string.Format("{0}entrynodefindservicename", prefix)].ToString();
     }
     if (reader[string.Format("{0}entryserviceconfiguration", prefix)] != DBNull.Value)
     {
         data.EntryServiceConfiguration = reader[string.Format("{0}entryserviceconfiguration", prefix)].ToString();
     }
     if (reader[string.Format("{0}entryservicename", prefix)] != DBNull.Value)
     {
         data.EntryServiceName = reader[string.Format("{0}entryservicename", prefix)].ToString();
     }
     if (reader[string.Format("{0}entrygetexecuteusersserviceconfiguration", prefix)] != DBNull.Value)
     {
         data.EntryGetExecuteUsersServiceConfiguration = reader[string.Format("{0}entrygetexecuteusersserviceconfiguration", prefix)].ToString();
     }
     if (reader[string.Format("{0}entrygetexecuteusersservicename", prefix)] != DBNull.Value)
     {
         data.EntryGetExecuteUsersServiceName = reader[string.Format("{0}entrygetexecuteusersservicename", prefix)].ToString();
     }
     data.CreateTime = (DateTime)reader[string.Format("{0}createtime", prefix)];
     data.ModifyTime = (DateTime)reader[string.Format("{0}modifytime", prefix)];
 }
コード例 #3
0
        public async Task ExecuteEntry(CommonSignConfigurationRootAction rootAction, string entityKey, string executeUserKey, string executeUserExtensionInfo, List <WorkflowUserInfo> userInfos, string data)
        {
            //判断执行操作的用户是否可以操作
            bool          canExecute = false;
            var           entryGetExecuteUsersService = _commonSignConfigurationEntryGetExecuteUsersServiceSelector.Choose(rootAction.EntryGetExecuteUsersServiceName);
            List <string> userKeys = new List <string>();
            await entryGetExecuteUsersService.Execute(rootAction, entityKey, async (userKey) =>
            {
                userKeys.Add(userKey);
                if (executeUserKey.ToLower() == userKey.ToLower())
                {
                    canExecute = true;
                }
                await Task.FromResult(0);
            });

            if (!canExecute)
            {
                string strUserKey = string.Empty;
                foreach (var item in userKeys)
                {
                    strUserKey += $"{item},";
                }
                var fragment = new TextFragment()
                {
                    Code = TextCodes.CommonSignConfigurationRootActionUserCanNotEntry,
                    DefaultFormatting = "工作流资源类型为{0}的通用审批配置下动作名称为{1}的初始化动作,用户{2}不能执行,userkeys:{3}",
                    ReplaceParameters = new List <object>()
                    {
                        rootAction.Configuration.WorkflowResourceType, rootAction.ActionName, executeUserKey, strUserKey
                    }
                };

                throw new UtilityException((int)Errors.CommonSignConfigurationRootActionUserCanNotEntry, fragment);
            }



            //创建工作流资源
            var workflowResource = await WorkflowResourceHelper.GetWorkflowResource(_workflowResourceRepository, rootAction.Configuration.WorkflowResourceType, entityKey, rootAction.WorkflowResourceInitStatus);


            //执行入口服务
            var entryService = _commonSignConfigurationEntryServiceSelector.Choose(rootAction.EntryServiceName);
            var canEntryNode = await entryService.Execute(workflowResource, rootAction.Configuration.EntityType, entityKey, executeUserKey, executeUserExtensionInfo, rootAction.ActionName, userInfos, data, rootAction.EntryServiceConfiguration);



            if (canEntryNode)
            {
                //获取入口节点查找
                CommonSignConfigurationNode node = null;
                bool runComplete = true;
                if (!string.IsNullOrEmpty(rootAction.EntryNodeFindServiceName))
                {
                    var nodeFindService = _commonSignConfigurationEntryNodeFindServiceSelector.Choose(rootAction.EntryNodeFindServiceName);
                    node = await nodeFindService.Execute(rootAction, entityKey, userInfos, data, rootAction.EntryNodeFindServiceConfiguration);

                    if (node != null)
                    {
                        runComplete = false;
                    }
                }


                if (runComplete)
                {
                    //判断入口节点是否有值
                    if (rootAction.EntryNode != null)
                    {
                        node        = rootAction.EntryNode;
                        runComplete = false;
                    }
                }

                if (runComplete || node == null)
                {
                    //表示不需要再往下面的节点执行,直接执行完成服务
                    await rootAction.Configuration.ExecuteComplete(entityKey, executeUserKey, executeUserExtensionInfo, rootAction.WorkflowResourceDefaultCompleteStatus);

                    return;
                }
                else
                {
                    //验证入口节点
                    await ValidateEntryNode(rootAction.Configuration, node);

                    //需要执行入口节点的CreateFlow方法创建工作流相应的步骤
                    await node.CreateFlowExecute(entityKey, rootAction.ActionName, rootAction.WorkflowResourceInitStatus, executeUserKey, executeUserExtensionInfo, userInfos);
                }
            }
        }
コード例 #4
0
        public async Task QueryAll(Guid configurationId, Func <CommonSignConfigurationRootAction, Task> callback)
        {
            var resultList = new List <CommonSignConfigurationRootAction>();

            await DBTransactionHelper.SqlTransactionWorkAsync(DBTypes.SqlServer, true, false, _dbConnectionFactory.CreateReadForWorkflow(), async (conn, transaction) =>
            {
                long?sequence      = null;
                const int pageSize = 1000;

                while (true)
                {
                    resultList.Clear();

                    SqlTransaction sqlTran = null;
                    if (transaction != null)
                    {
                        sqlTran = (SqlTransaction)transaction;
                    }

                    await using (var command = new SqlCommand()
                    {
                        Connection = (SqlConnection)conn,
                        CommandType = CommandType.Text,
                        Transaction = sqlTran,
                    })
                    {
                        if (!sequence.HasValue)
                        {
                            command.CommandText = string.Format(@"SELECT TOP (@pagesize) {0},{1},{2},{3}
                                                                    FROM [CommonSignConfigurationRootAction] AS rootaction
                                                                    INNER JOIN [CommonSignConfiguration] AS config
                                                                        ON rootaction.configurationid = config.id
                                                                    LEFT JOIN [CommonSignConfigurationNode] AS node
                                                                        ON rootaction.entrynodeid = node.id
                                                                    LEFT JOIN [CommonSignConfiguration] AS nodeconfig
                                                                        ON nodeconfig.id = node.configurationid
                                                                    WHERE rootaction.configurationid = @configurationid
                                                                    ORDER BY rootaction.sequence;",
                                                                StoreHelper.GetCommonSignConfigurationRootActionSelectFields("rootaction"),
                                                                StoreHelper.GetCommonSignConfigurationSelectFields("config"),
                                                                StoreHelper.GetCommonSignConfigurationNodeSelectFields("node"),
                                                                StoreHelper.GetCommonSignConfigurationSelectFields("nodeconfig"));
                        }
                        else
                        {
                            command.CommandText = string.Format(@"SELECT TOP (@pagesize) {0},{1},{2},{3}
                                                                    FROM [CommonSignConfigurationRootAction] AS rootaction
                                                                            INNER JOIN [CommonSignConfiguration] AS config
                                                                                ON rootaction.configurationid = config.id
                                                                            LEFT JOIN [CommonSignConfigurationNode] AS node
                                                                                ON rootaction.entrynodeid = node.id
                                                                            LEFT JOIN [CommonSignConfiguration] AS nodeconfig
                                                                                ON nodeconfig.id = node.configurationid
                                                                    WHERE rootaction.configurationid = @configurationid
                                                                          AND rootaction.sequence > @sequence
                                                                    ORDER BY rootaction.sequence;",
                                                                StoreHelper.GetCommonSignConfigurationRootActionSelectFields("rootaction"),
                                                                StoreHelper.GetCommonSignConfigurationSelectFields("config"),
                                                                StoreHelper.GetCommonSignConfigurationNodeSelectFields("node"),
                                                                StoreHelper.GetCommonSignConfigurationSelectFields("nodeconfig"));
                        }

                        var parameter = new SqlParameter("@configurationid", SqlDbType.UniqueIdentifier)
                        {
                            Value = configurationId
                        };
                        command.Parameters.Add(parameter);

                        parameter = new SqlParameter("@pagesize", SqlDbType.Int)
                        {
                            Value = pageSize
                        };
                        command.Parameters.Add(parameter);

                        if (sequence.HasValue)
                        {
                            parameter = new SqlParameter("@sequence", SqlDbType.BigInt)
                            {
                                Value = sequence
                            };
                            command.Parameters.Add(parameter);
                        }

                        await command.PrepareAsync();

                        SqlDataReader reader = null;

                        await using (reader = await command.ExecuteReaderAsync())
                        {
                            while (await reader.ReadAsync())
                            {
                                var data = new CommonSignConfigurationRootAction();
                                StoreHelper.SetCommonSignConfigurationRootActionSelectFields(data, reader, "rootaction");
                                data.Configuration = new CommonSignConfiguration();
                                StoreHelper.SetCommonSignConfigurationSelectFields(data.Configuration, reader, "config");
                                if (reader[string.Format("{0}id", "node")] != DBNull.Value)
                                {
                                    data.EntryNode = new CommonSignConfigurationNode();
                                    StoreHelper.SetCommonSignConfigurationNodeSelectFields(data.EntryNode, reader, "node");
                                }
                                if (reader[string.Format("{0}id", "nodeconfig")] != DBNull.Value)
                                {
                                    data.EntryNode.Configuration = new CommonSignConfiguration();
                                    StoreHelper.SetCommonSignConfigurationSelectFields(data.EntryNode.Configuration, reader, "nodeconfig");
                                }
                                sequence = (long)reader["rootactionsequence"];
                                resultList.Add(data);
                            }
                            await reader.CloseAsync();
                        }
                    }

                    foreach (var workflowStep in resultList)
                    {
                        await callback(workflowStep);
                    }

                    if (resultList.Count != pageSize)
                    {
                        break;
                    }
                }
            });
        }
コード例 #5
0
        public async Task <CommonSignConfigurationRootAction> QueryByActionName(Guid configurationId, string actionName)
        {
            CommonSignConfigurationRootAction result = null;
            await DBTransactionHelper.SqlTransactionWorkAsync(DBTypes.SqlServer, true, false, _dbConnectionFactory.CreateReadForWorkflow(), async (conn, transaction) =>
            {
                SqlTransaction sqlTran = null;
                if (transaction != null)
                {
                    sqlTran = (SqlTransaction)transaction;
                }

                await using (var command = new SqlCommand()
                {
                    Connection = (SqlConnection)conn,
                    CommandType = CommandType.Text,
                    Transaction = sqlTran,
                    CommandText = string.Format(@"SELECT {0},{1},{2},{3}
                                                    FROM [CommonSignConfigurationRootAction] AS rootaction
                                                        INNER JOIN [CommonSignConfiguration] AS config
                                                            ON rootaction.configurationid = config.id
                                                        LEFT JOIN [CommonSignConfigurationNode] AS node
                                                            ON rootaction.entrynodeid = node.id
                                                        LEFT JOIN [CommonSignConfiguration] AS nodeconfig
                                                            ON nodeconfig.id = node.configurationid
                                                    WHERE rootaction.configurationid = @configurationid
                                                          AND rootaction.actionname = @actionname
                                                    ORDER BY rootaction.sequence DESC; ",
                                                StoreHelper.GetCommonSignConfigurationRootActionSelectFields("rootaction"),
                                                StoreHelper.GetCommonSignConfigurationSelectFields("config"),
                                                StoreHelper.GetCommonSignConfigurationNodeSelectFields("node"),
                                                StoreHelper.GetCommonSignConfigurationSelectFields("nodeconfig"))
                })
                {
                    var parameter = new SqlParameter("@configurationid", SqlDbType.UniqueIdentifier)
                    {
                        Value = configurationId
                    };
                    command.Parameters.Add(parameter);
                    parameter = new SqlParameter("@actionname", SqlDbType.NVarChar, 500)
                    {
                        Value = actionName
                    };
                    command.Parameters.Add(parameter);
                    await command.PrepareAsync();

                    SqlDataReader reader = null;

                    await using (reader = await command.ExecuteReaderAsync())
                    {
                        if (await reader.ReadAsync())
                        {
                            result = new CommonSignConfigurationRootAction();
                            StoreHelper.SetCommonSignConfigurationRootActionSelectFields(result, reader, "rootaction");
                            result.Configuration = new CommonSignConfiguration();
                            StoreHelper.SetCommonSignConfigurationSelectFields(result.Configuration, reader, "config");
                            if (reader[string.Format("{0}id", "node")] != DBNull.Value)
                            {
                                result.EntryNode = new CommonSignConfigurationNode();
                                StoreHelper.SetCommonSignConfigurationNodeSelectFields(result.EntryNode, reader, "node");
                            }
                            if (reader[string.Format("{0}id", "nodeconfig")] != DBNull.Value)
                            {
                                result.EntryNode.Configuration = new CommonSignConfiguration();
                                StoreHelper.SetCommonSignConfigurationSelectFields(result.EntryNode.Configuration, reader, "nodeconfig");
                            }
                        }

                        await reader.CloseAsync();
                    }
                }
            });

            return(result);
        }