示例#1
0
文件: RptRoot.cs 项目: Daoting/dt
        /// <summary>
        /// 构造报表实例
        /// </summary>
        /// <param name="p_inst"></param>
        public async Task Build(RptRootInst p_inst)
        {
            Inst = p_inst;
            await Header.Build();

            await Body.Build();

            await Footer.Build();
        }
示例#2
0
        /// <summary>
        /// Builds the embed and returns a Discord.Net embed object.
        /// </summary>
        /// <param name="currentTimestamp">Determines whether the timestamp parameter should be set to the current UTC time.</param>
        /// <returns>A Discord.Net embed object.</returns>
        public Embed Build(bool currentTimestamp = false)
        {
            if (currentTimestamp)
            {
                this.Timestamp = DateTimeOffset.UtcNow;
            }

            EmbedBuilder emb = new EmbedBuilder();

            // Title and Url.
            if (!string.IsNullOrWhiteSpace(Title))
            {
                emb.WithTitle(Title);
                if (IsUrl(TitleUrl))
                {
                    emb.WithUrl(TitleUrl);
                }
            }

            // Description.
            if (!string.IsNullOrWhiteSpace(Description))
            {
                emb.WithDescription(Description);
            }

            // Author embed.
            EmbedAuthorBuilder embAuth = Author.Build();

            if (embAuth != null)
            {
                emb.WithAuthor(embAuth);
            }

            // Color.
            if (ColorStripe != null)
            {
                emb.WithColor((Color)ColorStripe);
            }

            // Footer embed.
            EmbedFooterBuilder embFoot = Footer.Build();

            if (embFoot != null)
            {
                emb.WithFooter(embFoot);
            }

            // Field embeds.
            foreach (JEmbedField fld in Fields)
            {
                EmbedFieldBuilder embFld = fld.Build();
                if (embFld != null)
                {
                    emb.AddField(embFld);
                }
            }

            // Thumbnail.
            if (IsUrl(ThumbnailUrl))
            {
                emb.WithThumbnailUrl(ThumbnailUrl);
            }

            // Image.
            if (IsUrl(ImageUrl))
            {
                emb.WithImageUrl(ImageUrl);
            }

            // Timestamp.
            if (Timestamp != null)
            {
                emb.WithTimestamp((DateTimeOffset)Timestamp);
            }

            return(emb.Build());
        }
示例#3
0
        internal DiscordApiData Build()
        {
            DiscordApiData data = new DiscordApiData(DiscordApiDataType.Container);

            if (Title != null)
            {
                data.Set("title", Title);
            }
            if (Description != null)
            {
                data.Set("description", Description);
            }
            if (Url != null)
            {
                data.Set("url", Url);
            }
            if (Timestamp.HasValue)
            {
                data.Set("timestamp", Timestamp.Value.ToUniversalTime().ToString("s", CultureInfo.InvariantCulture));
            }
            if (Color.HasValue)
            {
                data.Set("color", Color.Value.ToHexadecimal());
            }

            if (Footer != null)
            {
                data.Set("footer", Footer.Build());
            }

            if (ImageUrl != null)
            {
                DiscordApiData imageData = new DiscordApiData(DiscordApiDataType.Container);
                imageData.Set("url", ImageUrl);

                data.Set("image", imageData);
            }

            if (Author != null)
            {
                data.Set("author", Author.Build());
            }

            if (ThumbnailUrl != null)
            {
                DiscordApiData thumbnailData = new DiscordApiData(DiscordApiDataType.Container);
                thumbnailData.Set("url", ThumbnailUrl);

                data.Set("thumbnail", thumbnailData);
            }

            if (Fields != null)
            {
                DiscordApiData fieldArray = new DiscordApiData(DiscordApiDataType.Array);
                foreach (EmbedField field in Fields)
                {
                    fieldArray.Values.Add(field.Build());
                }

                data.Set("fields", fieldArray);
            }

            return(data);
        }
示例#4
0
        /// <summary>
        /// 构造报表项实例
        /// </summary>
        public override async Task Build()
        {
            RptRootInst inst    = _part.Inst;
            string      tblName = _data.Str("tbl");

            if (string.IsNullOrEmpty(tblName))
            {
                return;
            }

            // 使用时再加载数据
            var rptData = await inst.Info.GetData(tblName);

            if (rptData == null)
            {
                return;
            }

            inst.CurrentParent = null;
            RptTableInst tbl = new RptTableInst(this);

            inst.Body.AddChild(tbl);
            inst.CurrentTable = tbl;
            tbl.Data          = rptData;
            Table data = tbl.Data.Data;

            if (Header != null && Header.Rows.Count > 0)
            {
                await Header.Build();
            }

            if (Body != null)
            {
                for (int num = 0; num < data.Count; num++)
                {
                    RptTblGroup group;
                    Row         curRow  = data[num];
                    Row         preRow  = null;
                    Row         nextRow = null;
                    if (num > 0)
                    {
                        preRow = data[num - 1];
                    }
                    if (num < data.Count - 1)
                    {
                        nextRow = data[num + 1];
                    }

                    // 分组头
                    if (Groups != null)
                    {
                        for (int i = 0; i < Groups.Count; i++)
                        {
                            group = Groups[i];
                            string field = group.Field;
                            if (!string.IsNullOrEmpty(field) &&
                                (preRow == null || curRow.Str(field) != preRow.Str(field)))
                            {
                                for (int j = i; j < Groups.Count; j++)
                                {
                                    group = Groups[j];
                                    if (group.Header != null && group.Header.Rows.Count > 0)
                                    {
                                        Dictionary <string, string> dict = GetFilters(j, curRow);
                                        await group.Header.Build(dict);
                                    }
                                }
                                break;
                            }
                        }
                    }

                    await Body.Build();

                    // 分组尾
                    if (Groups != null)
                    {
                        for (int i = 0; i < Groups.Count; i++)
                        {
                            group = Groups[i];
                            string field = group.Field;
                            if (!string.IsNullOrEmpty(field) &&
                                (nextRow == null || curRow.Str(field) != nextRow.Str(field)))
                            {
                                for (int j = Groups.Count - 1; j >= i; j--)
                                {
                                    group = Groups[j];
                                    if (group.Footer != null && group.Footer.Rows.Count > 0)
                                    {
                                        Dictionary <string, string> dict = GetFilters(j, curRow);
                                        await group.Footer.Build(dict);
                                    }
                                }
                                break;
                            }
                        }
                    }
                }

                // 未达到最少行数时增加空行
                int minCount = MinRowCount;
                if (minCount > 0 && minCount > data.Count)
                {
                    int tail = minCount - data.Count;
                    for (int i = 0; i < tail; i++)
                    {
                        await Body.Build();
                    }
                }
            }

            if (Footer != null && Footer.Rows.Count > 0)
            {
                await Footer.Build();
            }
        }