ソースを参照

完成 excel 生成功能

runningwater 5 年 前
コミット
001dba9098
11 ファイル変更152 行追加69 行削除
  1. 15 1
      READEME.md
  2. 1 1
      cmd.go
  3. 6 4
      conf/conf.go
  4. 5 3
      conf/config.yaml
  5. 11 49
      db/db.go
  6. 28 6
      db/db_test.go
  7. 22 0
      db/userinfo.go
  8. 40 0
      excel/excel.go
  9. 1 0
      go.mod
  10. 4 0
      go.sum
  11. 19 5
      main.go

+ 15 - 1
READEME.md

@@ -5,4 +5,18 @@
     设备在线但不上传数据 在线但是未接收到数据的时间统计(单位:小时)
     设备总数 在线数 离线书
     设备不同协议版本 总数 在线数 离线数 
-  2. 报表发送相关人员
+  2. 报表发送相关人员
+  
+  需要:
+  
+    github.com/go-sql-driver/mysql v1.5.0
+    github.com/jmoiron/sqlx v1.2.0
+    github.com/spf13/viper v1.7.1
+    
+  安装
+  
+  `go get -u github.com/go-sql-driver/mysql`
+  
+  `go get -u github.com/jmoiron/sqlx v1.2.0`
+  
+  `go get -u github.com/spf13/viper v1.7.1`

+ 1 - 1
cmd.go

@@ -27,7 +27,7 @@ func parseCmd() *Cmd {
 
 // 使用提示
 func printUsage() {
-	fmt.Fprintf(os.Stderr, "monitor version: monitor/0.0.1 Usage [?] "+
+	fmt.Fprintf(os.Stderr, "monitor version: monitor/0.0.1 Usage"+
 		"\nOptions:\n")
 	flag.PrintDefaults()
 }

+ 6 - 4
conf/conf.go

@@ -13,10 +13,12 @@ type Config struct {
 }
 
 type Database struct {
-	Host   string `mapstructure:"host"`
-	User   string `mapstructure:"user"`
-	Dbname string `mapstructure:"dbname"`
-	Pwd    string `mapstructure:"pwd"`
+	Host    string `mapstructure:"host"`
+	User    string `mapstructure:"user"`
+	Dbname  string `mapstructure:"dbname"`
+	Pwd     string `mapstructure:"pwd"`
+	Port    int    `mapstructure:"port"`
+	Charset string `mapstructure:"charset"`
 }
 
 func LoadConfig() {

+ 5 - 3
conf/config.yaml

@@ -1,5 +1,7 @@
 database:
-  host: 127.0.0.1
+  host: 47.110.138.172
   user: root
-  dbname: test
-  pwd: 123456
+  dbname: newDB
+  pwd: jEER3Dc=
+  port: 3306
+  charset: utf8

+ 11 - 49
db/db.go

@@ -6,59 +6,21 @@ import (
     "github.com/jmoiron/sqlx"
 )
 
-var (
-    userName  string = "root"
-    password  string = "jEER3Dc="
-    ipAddrees string = "47.110.138.172"
-    port      int    = 3306
-    dbName    string = "newDB"
-    charset   string = "utf8"
-)
+type Config struct {
+    UserName string
+    Password string
+    Ip       string
+    Port     int
+    DbName   string
+    Charset  string
+}
 
-func connectMysql() *sqlx.DB {
-    dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s", userName, password, ipAddrees, port, dbName, charset)
+// 连接数据库
+func ConnectMysql(conf *Config) *sqlx.DB {
+    dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s", conf.UserName, conf.Password, conf.Ip, conf.Port, conf.DbName, conf.Charset)
     Db, err := sqlx.Open("mysql", dsn)
     if err != nil {
         fmt.Printf("mysql connect failed, detail is [%v]", err.Error())
     }
     return Db
 }
-
-func queryData(Db *sqlx.DB) {
-    rows, err := Db.Query("select user_id as userId, user_name as userName from sys_user")
-    if err != nil {
-        fmt.Printf("query faied, error:[%v]", err.Error())
-        return
-    }
-    for rows.Next() {
-        //定义变量接收查询数据
-        var userId, userName string
-
-        err := rows.Scan(&userId,&userName)
-        if err != nil {
-            fmt.Printf("get data failed, error:[%v]", err.Error())
-        }
-        fmt.Println(userId, userName)
-    }
-
-    //关闭结果集(释放连接)
-    rows.Close()
-}
-
-func selectData(Db *sqlx.DB)  {
-    type userInfo struct {
-        UserId string `db:"user_id"`
-        UserName string `db:"user_name"`
-    }
-
-    var userInfos []userInfo
-    err := Db.Select(&userInfos, "select user_id, user_name from sys_user")
-    if err!= nil {
-        fmt.Printf("query fail : [%v]" , err)
-        return
-    }
-
-    for _, user := range userInfos {
-        fmt.Println(user.UserId,"=>", user.UserName)
-    }
-}

+ 28 - 6
db/db_test.go

@@ -1,10 +1,32 @@
 package db
 
-import "testing"
-import "github.com/jmoiron/sqlx"
+import (
+	"fmt"
+	"testing"
+)
+
+func TestQuery(t *testing.T) {
+	var (
+		userName  = "root"
+		password  = "jEER3Dc="
+		ipAddrees = "47.110.138.172"
+		port      = 3306
+		dbName    = "newDB"
+		charset   = "utf8"
+	)
+	config := Config{
+		UserName: userName, Password: password, Ip: ipAddrees, Port: port, DbName: dbName, Charset: charset,
+	}
+	var Db = ConnectMysql(&config)
+	defer Db.Close()
+	info := UserInfo{}
+	data, err := info.SelectData(Db)
+	if err != nil {
+		fmt.Printf("error:[%v]", err)
+	}
+
+	for _, d := range data {
+		fmt.Println(d.UserName, "=>", d.UserId)
+	}
 
-func TestQuery(t *testing.T)  {
-   var Db *sqlx.DB = connectMysql()
-   defer Db.Close()
-   selectData(Db)
 }

+ 22 - 0
db/userinfo.go

@@ -0,0 +1,22 @@
+package db
+
+import (
+	"fmt"
+	"github.com/jmoiron/sqlx"
+)
+
+type UserInfo struct {
+	UserId   string `db:"user_id"`
+	UserName string `db:"user_name"`
+}
+
+func (userInfo *UserInfo) SelectData(Db *sqlx.DB) ([]UserInfo, error) {
+
+	var userInfos []UserInfo
+	err := Db.Select(&userInfos, "select user_id, user_name from sys_user")
+	if err != nil {
+		fmt.Printf("query fail : [%v]", err)
+		return nil, err
+	}
+	return userInfos, nil
+}

+ 40 - 0
excel/excel.go

@@ -0,0 +1,40 @@
+package excel
+
+import (
+	"fmt"
+	"github.com/tealeg/xlsx"
+	"monitor/db"
+)
+
+func Writing(userInfos []db.UserInfo) {
+
+	file := xlsx.NewFile()
+	sheet, err := file.AddSheet("Sheet1")
+	if err != nil {
+		fmt.Print(err.Error())
+	}
+
+	row := sheet.AddRow()
+	row.SetHeightCM(0.5)
+	cell := row.AddCell()
+	cell.Value = "用户 ID"
+
+	cell = row.AddCell()
+	cell.Value = "用户名"
+
+	for _, info := range userInfos {
+		row := sheet.AddRow()
+		row.SetHeightCM(0.5)
+		cell := row.AddCell()
+		cell.Value = info.UserId
+
+		cell = row.AddCell()
+		cell.Value = info.UserName
+	}
+
+	// 保存
+	err = file.Save("2019-_-_-2019-_-_Lag延时数据.xlsx")
+	if err != nil {
+		fmt.Printf(err.Error())
+	}
+}

+ 1 - 0
go.mod

@@ -6,4 +6,5 @@ require (
 	github.com/go-sql-driver/mysql v1.5.0
 	github.com/jmoiron/sqlx v1.2.0
 	github.com/spf13/viper v1.7.1
+	github.com/tealeg/xlsx v1.0.5
 )

+ 4 - 0
go.sum

@@ -179,6 +179,8 @@ github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0
 github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
 github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
 github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
+github.com/tealeg/xlsx v1.0.5 h1:+f8oFmvY8Gw1iUXzPk+kz+4GpbDZPK1FhPiQRd+ypgE=
+github.com/tealeg/xlsx v1.0.5/go.mod h1:btRS8dz54TDnvKNosuAqxrM1QgN1udgk9O34bDCnORM=
 github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
 github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
 go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
@@ -295,6 +297,8 @@ gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLks
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
 gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno=
 gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=

+ 19 - 5
main.go

@@ -3,6 +3,8 @@ package main
 import (
 	"fmt"
 	"monitor/conf"
+	"monitor/db"
+	"monitor/excel"
 )
 
 func main() {
@@ -13,14 +15,26 @@ func main() {
 		fmt.Println("run....")
 		// 加载初始化配置文件
 		conf.LoadConfig()
-		cfg := conf.GetInfo()
-		fmt.Println("name: ", cfg.Database.Dbname)
-		fmt.Println("host: ", cfg.Database.Host)
-		fmt.Println("user: ", cfg.Database.User)
-		fmt.Println("pwd: ", cfg.Database.Pwd)
 
 		// 生成报表文件
+		c := conf.GetInfo().Database
+		config := db.Config{
+			DbName:   c.Dbname,
+			UserName: c.User,
+			Password: c.Pwd,
+			Ip:       c.Host,
+			Port:     c.Port,
+			Charset:  c.Charset,
+		}
+		Db := db.ConnectMysql(&config)
+		defer Db.Close()
+		info := db.UserInfo{}
+		data, err := info.SelectData(Db)
+		if err != nil {
+			fmt.Printf("error:[%v]", err)
+		}
 
+		excel.Writing(data)
 		// 发送邮件
 
 	}