go-stat-reporter(1):golang开发通用报表展示系统,设计数据结构 - Go语言中文社区

go-stat-reporter(1):golang开发通用报表展示系统,设计数据结构


项目地址:
https://github.com/golangpkg/go-stat-reporter/
相关分类文章:
https://blog.csdn.net/freewebsys/article/category/7778259
本文的原文连接是:
https://blog.csdn.net/freewebsys/article/details/80907076

博主地址是:http://blog.csdn.net/freewebsys

1,关于通用报表系统


对于数据展示需要一个报表系统,将每天的数据,汇总的数据以页面的形式展现。
但是要是每次都开发一个一个的页面太麻烦了,其实就是针对 mysql 数据表的查询,显示,分页排序等,完全都可以封装,设计一个系统,做成通用化的。

2,使用技术


https://datatables.net/examples/styling/material.html

1,使用golang beego jquery 开发web的数据报表系统。

2,使用datatables 做数据展示。通过xml进行配置

3,使用Material Design做样式展示。https://getmdl.io/

3,设计xml结构


定义 pages 标签,代表多个页面,page id 是唯一标识,name中午名字。
dataTable里面设定多个参数。
table 代表要查询的数据表,可以是一个table 名称,也可以是 一个(select xxx from table )as a。
这样的查询sql。
column 是查询显示的 字段。
label 是column 对应的相关中文名字。

<?xml version="1.0" encoding="UTF-8"?>
<pages>
    <page id="data-macroscopic" name="宏观经济数据-存款/贷款利率">
        <dataTable id="ts_deposit_rate" name="存款利率">
            <table><![CDATA[ (select `date`,deposit_type as type,rate from ts_deposit_rate) as a ]]></table>
            <column>date,type,rate</column>
            <label>日期,存款类型,存款利率</label>
        </dataTable>
        .....
    </page>
</pages>        

然后使用golang 进行 xml 解析:

package models

import (
    "encoding/xml"
    "io/ioutil"
    "os"
    "fmt"
    "errors"
    "strings"
)

//Table标签
type XMLDataTable struct {
    XMLName     xml.Name `xml:"dataTable"̀`
    Id          string   `xml:"id,attr"̀`
    Name        string   `xml:"name,attr"̀`
    Table       string   `xml:"table"̀`
    Column      string   `xml:"column"̀`
    Label       string   ` xml:"label"̀`
    ColumnArray []string //字段项
    LabelArray  []string //字段名字
}

//Table标签
type XMLDataChart struct {
    XMLName xml.Name `xml:"dataChart"̀`
    Id      string   `xml:"id,attr"̀`
    Name    string   `xml:"name,attr"̀`
    Type    string   `xml:"type,attr"̀`
    Table   string   `xml:"table"̀`
    Column  string   `xml:"column"̀`
    Label   string   ` xml:"label"̀`
}

//Page标签
type XMLPage struct {
    XMLName    xml.Name       `xml:"page"̀`
    Id         string         `xml:"id,attr"̀`
    Name       string         `xml:"name,attr"̀`
    DataTables []XMLDataTable `xml:"dataTable"̀`
    DataCharts []XMLDataChart `xml:"dataChart"̀`
}

//Pages标签
type XMLPages struct {
    XMLName xml.Name  `xml:"pages"̀`
    Pages   []XMLPage `xml:"page"̀`
}

var ConstantXmlPages XMLPages

//参考代码:
// https://tutorialedge.net/golang/parsing-xml-with-golang/
func ReadXMLConfig(file string) {
    xmlFile, err := os.Open(file)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println("Successfully Open XML : " + file)
    defer xmlFile.Close()
    byteValue, _ := ioutil.ReadAll(xmlFile)
    xml.Unmarshal(byteValue, &ConstantXmlPages)
    println(ConstantXmlPages.Pages)

    for _, page := range ConstantXmlPages.Pages {
        println("page:", page.Name)
        for i, table := range page.DataTables {
            println("table:", table.Name)
            //转换 column为数组字段。
            if table.Column != "" {
                tmpStr := strings.Replace(table.Column, """, "", -1)
                tmpStr = strings.Replace(tmpStr, " ", "", -1)
                tmpStr = strings.Replace(tmpStr, "r", "", -1)
                tmpStr = strings.Replace(tmpStr, "n", "", -1)
                table.ColumnArray = strings.Split(tmpStr, ",")
            }
            //转换 label 为数组字段。
            if table.Label != "" {
                tmpStr := strings.Replace(table.Label, """, "", -1)
                tmpStr = strings.Replace(tmpStr, " ", "", -1)
                tmpStr = strings.Replace(tmpStr, "r", "", -1)
                tmpStr = strings.Replace(tmpStr, "n", "", -1)
                table.LabelArray = strings.Split(tmpStr, ",")
            }
            //fmt.Printf("table %v", table)
            //在将数据放到数组里面。
            page.DataTables[i] = table
        }
    }

    return
}

//循环pages的全部数据,找到id,返回page。
func GetPage(id string) (page XMLPage, err error) {
    for _, page := range ConstantXmlPages.Pages {
        if page.Id == id {
            return page, nil
        }
    }
    return page, errors.New("no page .")
}

//循环Tables的全部数据,找到id,返回Table。
func GetTable(id string) (table XMLDataTable, err error) {
    for _, page := range ConstantXmlPages.Pages {
        for _, table2 := range page.DataTables {
            if table2.Id == id {
                return table2, nil
            }
        }
    }
    return table, errors.New("no page .")
}

这样就可以解析xml了。定义的字段和xml 里面的一样就行。
xml:"label"̀ 这样是对应的 子节点名称。
xml:"id,attr"̀ 其中有,逗号的attr 字段是属性的。

4,总结


使用xml配置开发一个报表展示系统,通过xml进行配置,查询mysql 数据库。
然后开发通用接口,进行展示。

本文的原文连接是:
https://blog.csdn.net/freewebsys/article/details/80907076

博主地址是:http://blog.csdn.net/freewebsys

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/freewebsys/article/details/80907076
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2019-09-13 22:00:46
  • 阅读 ( 1239 )
  • 分类:Go

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢