forked from golang/hotime
增加导出功能
This commit is contained in:
parent
a8f9f12bb8
commit
39d67d1775
153
code.go
153
code.go
@ -2,6 +2,8 @@ package hotime
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
. "code.hoteas.com/golang/hotime/common"
|
. "code.hoteas.com/golang/hotime/common"
|
||||||
|
"fmt"
|
||||||
|
"github.com/360EntSecGroup-Skylar/excelize"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
@ -261,6 +263,12 @@ var TptProject = Proj{
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"download"`) &&
|
||||||
|
strings.Contains(v1.GetString("auth"), `"download"`) {
|
||||||
|
auth = append(auth, "download")
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"add"`) &&
|
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"add"`) &&
|
||||||
strings.Contains(v1.GetString("auth"), `"add"`) {
|
strings.Contains(v1.GetString("auth"), `"add"`) {
|
||||||
auth = append(auth, "add")
|
auth = append(auth, "add")
|
||||||
@ -315,7 +323,11 @@ var TptProject = Proj{
|
|||||||
auth = append(auth, "show")
|
auth = append(auth, "show")
|
||||||
|
|
||||||
}
|
}
|
||||||
|
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"download"`) &&
|
||||||
|
strings.Contains(v1.GetString("auth"), `"download"`) {
|
||||||
|
auth = append(auth, "download")
|
||||||
|
|
||||||
|
}
|
||||||
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"add"`) &&
|
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"add"`) &&
|
||||||
strings.Contains(v2.GetString("auth"), `"add"`) {
|
strings.Contains(v2.GetString("auth"), `"add"`) {
|
||||||
auth = append(auth, "add")
|
auth = append(auth, "add")
|
||||||
@ -516,7 +528,11 @@ var TptProject = Proj{
|
|||||||
auth = append(auth, "show")
|
auth = append(auth, "show")
|
||||||
|
|
||||||
}
|
}
|
||||||
|
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"download"`) &&
|
||||||
|
strings.Contains(v1.GetString("auth"), `"download"`) {
|
||||||
|
auth = append(auth, "download")
|
||||||
|
|
||||||
|
}
|
||||||
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"add"`) &&
|
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"add"`) &&
|
||||||
strings.Contains(v1.GetString("auth"), `"add"`) {
|
strings.Contains(v1.GetString("auth"), `"add"`) {
|
||||||
auth = append(auth, "add")
|
auth = append(auth, "add")
|
||||||
@ -571,7 +587,11 @@ var TptProject = Proj{
|
|||||||
auth = append(auth, "show")
|
auth = append(auth, "show")
|
||||||
|
|
||||||
}
|
}
|
||||||
|
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"download"`) &&
|
||||||
|
strings.Contains(v1.GetString("auth"), `"download"`) {
|
||||||
|
auth = append(auth, "download")
|
||||||
|
|
||||||
|
}
|
||||||
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"add"`) &&
|
if strings.Contains(myAuth.GetMap(str).GetString("auth"), `"add"`) &&
|
||||||
strings.Contains(v2.GetString("auth"), `"add"`) {
|
strings.Contains(v2.GetString("auth"), `"add"`) {
|
||||||
auth = append(auth, "add")
|
auth = append(auth, "add")
|
||||||
@ -657,7 +677,6 @@ var TptProject = Proj{
|
|||||||
}
|
}
|
||||||
that.Display(0, "删除成功")
|
that.Display(0, "删除成功")
|
||||||
},
|
},
|
||||||
|
|
||||||
"search": func(that *Context) {
|
"search": func(that *Context) {
|
||||||
hotimeName := that.RouterString[0]
|
hotimeName := that.RouterString[0]
|
||||||
fileConfig := that.MakeCodeRouter[hotimeName].FileConfig
|
fileConfig := that.MakeCodeRouter[hotimeName].FileConfig
|
||||||
@ -669,6 +688,8 @@ var TptProject = Proj{
|
|||||||
page := ObjToInt(that.Req.FormValue("page"))
|
page := ObjToInt(that.Req.FormValue("page"))
|
||||||
pageSize := ObjToInt(that.Req.FormValue("pageSize"))
|
pageSize := ObjToInt(that.Req.FormValue("pageSize"))
|
||||||
|
|
||||||
|
download := ObjToInt(that.Req.FormValue("download"))
|
||||||
|
|
||||||
if page < 1 {
|
if page < 1 {
|
||||||
page = 1
|
page = 1
|
||||||
}
|
}
|
||||||
@ -677,23 +698,39 @@ var TptProject = Proj{
|
|||||||
pageSize = 20
|
pageSize = 20
|
||||||
}
|
}
|
||||||
|
|
||||||
count := that.Db.Count(tableName, leftJoin, where)
|
var count int
|
||||||
reData := that.Db.Page(page, pageSize).
|
var reData []Map
|
||||||
|
//是否下载
|
||||||
|
if download == 0 {
|
||||||
|
count = that.Db.Count(tableName, leftJoin, where)
|
||||||
|
reData = that.Db.Page(page, pageSize).
|
||||||
PageSelect(tableName, leftJoin, columnStr, where)
|
PageSelect(tableName, leftJoin, columnStr, where)
|
||||||
|
}
|
||||||
|
if download == 1 {
|
||||||
|
reData = that.Db.Select(tableName, leftJoin, columnStr, where)
|
||||||
|
}
|
||||||
|
|
||||||
for _, v := range reData {
|
for _, v := range reData {
|
||||||
v.RangeSort(func(k string, v1 interface{}) (isEnd bool) {
|
v.RangeSort(func(k string, v1 interface{}) (isEnd bool) {
|
||||||
|
|
||||||
//如果有table字段则代为link
|
//如果有table字段则代为link
|
||||||
if v["table"] != nil && v["table_id"] != nil {
|
if v["table"] != nil && v["table_id"] != nil {
|
||||||
|
|
||||||
id := v.GetCeilInt64("table_id")
|
id := v.GetCeilInt64("table_id")
|
||||||
tableName := that.MakeCodeRouter[hotimeName].TableConfig.GetMap(v.GetString("table")).GetString("label")
|
tableName := that.MakeCodeRouter[hotimeName].TableConfig.GetMap(v.GetString("table")).GetString("label")
|
||||||
v["table_table_name"] = strings.Replace(tableName, "管理", "", -1)
|
v["table_table_name"] = strings.Replace(tableName, "管理", "", -1)
|
||||||
parentC := that.Db.Get(v.GetString("table"), "name", Map{"id": id})
|
|
||||||
|
sname := "name"
|
||||||
|
if that.MakeCodeRouter[hotimeName].TableColumns[v.GetString("table")][sname] == nil {
|
||||||
|
sname = "title"
|
||||||
|
if that.MakeCodeRouter[hotimeName].TableColumns[v.GetString("table")][sname] == nil {
|
||||||
|
sname = "id"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
parentC := that.Db.Get(v.GetString("table"), sname, Map{"id": id})
|
||||||
v["table_table_id_name"] = ""
|
v["table_table_id_name"] = ""
|
||||||
if parentC != nil {
|
if parentC != nil {
|
||||||
v["table_table_id_name"] = parentC.GetString("name")
|
v["table_table_id_name"] = parentC.GetString(sname)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -717,6 +754,93 @@ var TptProject = Proj{
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if download == 1 {
|
||||||
|
|
||||||
|
tableNameLabel := that.MakeCodeRouter[hotimeName].TableConfig.GetMap(tableName).GetString("label")
|
||||||
|
f := excelize.NewFile()
|
||||||
|
// 创建一个工作表
|
||||||
|
f.NewSheet(tableNameLabel)
|
||||||
|
|
||||||
|
f.DeleteSheet("Sheet1")
|
||||||
|
columns := that.MakeCodeRouter[hotimeName].TableConfig.GetMap(tableName).GetSlice("columns")
|
||||||
|
//单列
|
||||||
|
n := 0
|
||||||
|
for k, _ := range columns {
|
||||||
|
v := columns.GetMap(k)
|
||||||
|
if v["list"] != nil && v.GetBool("list") == false {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
n++
|
||||||
|
//第一个要加状态行
|
||||||
|
//单行
|
||||||
|
for k1, v1 := range reData {
|
||||||
|
if k1 == 0 {
|
||||||
|
f.SetCellValue(tableNameLabel, convertToTitle(n)+"1", v.GetString("label"))
|
||||||
|
}
|
||||||
|
|
||||||
|
if v.GetString("link") != "" {
|
||||||
|
f.SetCellValue(tableNameLabel, convertToTitle(n)+ObjToStr(k1+2), v1.GetString(v.GetString("link")+"_"+v.GetString("name")+"_"+v.GetString("value")))
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if v.GetString("name") == "table" {
|
||||||
|
f.SetCellValue(tableNameLabel, convertToTitle(n)+ObjToStr(k1+2), that.MakeCodeRouter[hotimeName].TableConfig.GetMap(v1.GetString("table")).GetString("label"))
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if v.GetString("name") == "table_id" {
|
||||||
|
f.SetCellValue(tableNameLabel, convertToTitle(n)+ObjToStr(k1+2), v1.GetString("table_"+v.GetString("name")+"_name"))
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
//select类型
|
||||||
|
options := v.GetSlice("options")
|
||||||
|
if len(options) != 0 {
|
||||||
|
isEnd := false
|
||||||
|
for ok, _ := range options {
|
||||||
|
ov := options.GetMap(ok)
|
||||||
|
if ov.GetString("value") == v1.GetString(v.GetString("name")) {
|
||||||
|
f.SetCellValue(tableNameLabel, convertToTitle(n)+ObjToStr(k1+2), ov.GetString("name"))
|
||||||
|
isEnd = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
if isEnd {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
f.SetCellValue(tableNameLabel, convertToTitle(n)+ObjToStr(k1+2), v1.GetString(v.GetString("name")))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
filePath := that.Config.GetString("filePath")
|
||||||
|
if filePath == "" {
|
||||||
|
filePath = "/file/temp/"
|
||||||
|
}
|
||||||
|
|
||||||
|
//path := time.Now().Format(filePath)
|
||||||
|
e := os.MkdirAll(that.Config.GetString("tpt")+filePath, os.ModeDir)
|
||||||
|
if e != nil {
|
||||||
|
that.Display(3, e)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
filePath = filePath + tableName + time.Now().Format("2006-01-02-15-04-05") + ".xlsx"
|
||||||
|
|
||||||
|
// 根据指定路径保存文件
|
||||||
|
if err := f.SaveAs(that.Config.GetString("tpt") + filePath); err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
that.Display(4, "输出异常")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
f.Save()
|
||||||
|
//that.Resp.Header().Set("Location", filePath)
|
||||||
|
//that.Resp.WriteHeader(307) //关键在这里!
|
||||||
|
that.Display(0, filePath)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
that.Display(0, Map{"count": count, "data": reData})
|
that.Display(0, Map{"count": count, "data": reData})
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -1030,3 +1154,20 @@ var TptProject = Proj{
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func convertToTitle(columnNumber int) string {
|
||||||
|
var res []byte
|
||||||
|
for columnNumber > 0 {
|
||||||
|
a := columnNumber % 26
|
||||||
|
if a == 0 {
|
||||||
|
a = 26
|
||||||
|
}
|
||||||
|
res = append(res, 'A'+byte(a-1))
|
||||||
|
columnNumber = (columnNumber - a) / 26
|
||||||
|
}
|
||||||
|
// 上面输出的res是反着的,前后交换
|
||||||
|
for i, n := 0, len(res); i < n/2; i++ {
|
||||||
|
res[i], res[n-1-i] = res[n-1-i], res[i]
|
||||||
|
}
|
||||||
|
return string(res)
|
||||||
|
}
|
||||||
|
@ -176,7 +176,7 @@ func (that *MakeCode) Db2JSON(db *db.HoTimeDB, config Map) {
|
|||||||
that.TableConfig[v.GetString("name")] = Map{
|
that.TableConfig[v.GetString("name")] = Map{
|
||||||
"label": v.GetString("label"),
|
"label": v.GetString("label"),
|
||||||
"table": v.GetString("name"),
|
"table": v.GetString("name"),
|
||||||
"auth": []string{"show", "add", "delete", "edit", "info"},
|
"auth": []string{"show", "add", "delete", "edit", "info", "download"},
|
||||||
"columns": []Map{},
|
"columns": []Map{},
|
||||||
"search": []Map{
|
"search": []Map{
|
||||||
|
|
||||||
|
@ -6,6 +6,7 @@ import (
|
|||||||
"database/sql"
|
"database/sql"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
_ "github.com/go-sql-driver/mysql"
|
_ "github.com/go-sql-driver/mysql"
|
||||||
_ "github.com/mattn/go-sqlite3"
|
_ "github.com/mattn/go-sqlite3"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
@ -618,8 +619,8 @@ func (that *HoTimeDB) where(data Map) (string, []interface{}) {
|
|||||||
if v != nil && reflect.ValueOf(v).Type().String() == "common.Slice" && len(v.(Slice)) == 0 {
|
if v != nil && reflect.ValueOf(v).Type().String() == "common.Slice" && len(v.(Slice)) == 0 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
fmt.Println(reflect.ValueOf(v).Type().String())
|
||||||
if v != nil && reflect.ValueOf(v).Type().String() == "[]interface {}" && len(v.([]interface{})) == 0 {
|
if v != nil && strings.Contains(reflect.ValueOf(v).Type().String(), "[]") && len(ObjToSlice(v)) == 0 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ var ArticleCtr = Ctr{
|
|||||||
|
|
||||||
sort := that.Req.FormValue("sort")
|
sort := that.Req.FormValue("sort")
|
||||||
|
|
||||||
where := Map{"article.push_time[<=]": time.Now().Format("2006-01-02 15:04"), "article.state": 0}
|
where := Map{"article.push_time[<]": time.Now().Format("2006-01-02 15:04"), "article.state": 0}
|
||||||
if sn != "" {
|
if sn != "" {
|
||||||
ctg := that.Db.Get("ctg", "id", Map{"sn": sn})
|
ctg := that.Db.Get("ctg", "id", Map{"sn": sn})
|
||||||
if ctg != nil {
|
if ctg != nil {
|
||||||
@ -66,10 +66,20 @@ var ArticleCtr = Ctr{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
startTime := that.Req.FormValue("start_time") //ctgsn
|
||||||
|
finishTime := that.Req.FormValue("finish_time") //ctgsn
|
||||||
|
|
||||||
if lunbo != 0 {
|
if lunbo != 0 {
|
||||||
where["article.lunbo"] = lunbo
|
where["article.lunbo"] = lunbo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(startTime) > 5 {
|
||||||
|
where["article.push_time[>=]"] = startTime
|
||||||
|
}
|
||||||
|
if len(finishTime) > 5 {
|
||||||
|
where["article.push_time[<=]"] = finishTime
|
||||||
|
}
|
||||||
|
|
||||||
if keywords != "" {
|
if keywords != "" {
|
||||||
where["OR"] = Map{"article.title[~]": keywords, "article.description[~]": keywords, "article.author[~]": keywords, "article.sn[~]": keywords, "article.origin[~]": keywords, "article.url[~]": keywords}
|
where["OR"] = Map{"article.title[~]": keywords, "article.description[~]": keywords, "article.author[~]": keywords, "article.sn[~]": keywords, "article.origin[~]": keywords, "article.url[~]": keywords}
|
||||||
}
|
}
|
||||||
|
@ -70,7 +70,7 @@ var MailCtr = Ctr{
|
|||||||
|
|
||||||
//sort:=that.Req.FormValue("sort")
|
//sort:=that.Req.FormValue("sort")
|
||||||
|
|
||||||
where := Map{"state": 0}
|
where := Map{"state": 0, "show": 1}
|
||||||
|
|
||||||
//if keywords!=""{
|
//if keywords!=""{
|
||||||
// where["OR"]=Map{"title[~]":keywords,"description[~]":keywords,"author[~]":keywords,"sn[~]":keywords,"origin[~]":keywords,"url[~]":keywords}
|
// where["OR"]=Map{"title[~]":keywords,"description[~]":keywords,"author[~]":keywords,"sn[~]":keywords,"origin[~]":keywords,"url[~]":keywords}
|
||||||
|
@ -8,6 +8,10 @@ import (
|
|||||||
func main() {
|
func main() {
|
||||||
|
|
||||||
appIns := Init("config/config.json")
|
appIns := Init("config/config.json")
|
||||||
|
appIns.SetConnectListener(func(that *Context) (isFinished bool) {
|
||||||
|
|
||||||
|
return isFinished
|
||||||
|
})
|
||||||
appIns.Run(Router{"app": app.AppProj})
|
appIns.Run(Router{"app": app.AppProj})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user