项目地址:
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
对于数据展示需要一个报表系统,将每天的数据,汇总的数据以页面的形式展现。
但是要是每次都开发一个一个的页面太麻烦了,其实就是针对 mysql 数据表的查询,显示,分页排序等,完全都可以封装,设计一个系统,做成通用化的。
https://datatables.net/examples/styling/material.html
1,使用golang beego jquery 开发web的数据报表系统。
2,使用datatables 做数据展示。通过xml进行配置
3,使用Material Design做样式展示。https://getmdl.io/
定义 pages 标签,代表多个页面,page id 是唯一标识,name中午名字。
dataTable里面设定多个参数。
table 代表要查询的数据表,可以是一个table 名称,也可以是 一个(select xxx from table )as a。
这样的查询sql。
column 是查询显示的 字段。
label 是column 对应的相关中文名字。
<pages>
<page id="data-macroscopic" name="宏观经济数据-存款/贷款利率">
<dataTable id="ts_deposit_rate" name="存款利率">
<table>table>
<column>date,type,ratecolumn>
<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 字段是属性的。
使用xml配置开发一个报表展示系统,通过xml进行配置,查询mysql 数据库。
然后开发通用接口,进行展示。
本文的原文连接是:
https://blog.csdn.net/freewebsys/article/details/80907076
博主地址是:http://blog.csdn.net/freewebsys