forked from all_user/stat_center
Initial commit
This commit is contained in:
@@ -0,0 +1,429 @@
|
||||
package innerserverser
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/360EntSecGroup-Skylar/excelize"
|
||||
"stat/api/proto"
|
||||
"stat/common/log"
|
||||
"stat/common/utils"
|
||||
"strconv"
|
||||
"time"
|
||||
)
|
||||
|
||||
var exportTransWaterTitle = []string{"日活跃", "日注册", "视频日充值", "棋牌日充值", "交易笔数"}
|
||||
|
||||
const sheetName = "Sheet1"
|
||||
|
||||
// 按字母
|
||||
func NewXlslFile(f *excelize.File, list []*proto.InnerDailyRecharge) {
|
||||
// 设置表头样式
|
||||
headStyleID, _ := f.NewStyle(titlestyle)
|
||||
filePath := "/usr/local" + "/bakexel/" + "vvvv.xlsx"
|
||||
// 设置列宽
|
||||
f.SetColWidth("Sheet1", "A", "L", 23)
|
||||
|
||||
// 设置表头行高
|
||||
//f.SetRowHeight("Sheet1", 1, 25)
|
||||
f.SetCellStyle("Sheet1", "A1", "L1", headStyleID)
|
||||
idx := f.NewSheet(sheetName)
|
||||
f.MergeCell("Sheet1", "A1", "A2")
|
||||
f.SetCellValue(sheetName, "A1", "日期")
|
||||
f.SetCellStyle(sheetName, "A4", "A50", headStyleID)
|
||||
f.SetActiveSheet(idx)
|
||||
now := time.Now()
|
||||
day := now.Format("2006-01")
|
||||
begin, end := utils.MonthDateRange(now)
|
||||
beginday := utils.BeginOfMonth(now).Day()
|
||||
endday := utils.EndOfMonth(now).Day()
|
||||
index := "A"
|
||||
for i := beginday; i <= endday; i++ {
|
||||
tmp := fmt.Sprintf("%s%d", index, i+2)
|
||||
vvvvv := fmt.Sprintf("%s-%d", day, i)
|
||||
f.SetCellValue(sheetName, tmp, vvvvv)
|
||||
}
|
||||
one := 'A'
|
||||
begin0 := 'B'
|
||||
temp0 := begin0
|
||||
pre := ""
|
||||
for _, info := range list {
|
||||
t0 := temp0
|
||||
countt0 := 1
|
||||
for i := 1; i < 5; i++ {
|
||||
temp0 = t0 + int32(countt0)
|
||||
countt0++
|
||||
if temp0 > 'Z' {
|
||||
one++
|
||||
temp0 = 'A'
|
||||
t0 = temp0
|
||||
countt0 = 1
|
||||
}
|
||||
}
|
||||
//merge := setcellindex + 5 + int32(index*5)
|
||||
beginmerge := fmt.Sprintf("%s%s1", pre, string(begin0))
|
||||
if one > 'A' {
|
||||
pre = string(one - 1)
|
||||
}
|
||||
endmerge := fmt.Sprintf("%s%s1", pre, string(temp0))
|
||||
temp0 += 2
|
||||
if temp0 > 'Z' {
|
||||
one++
|
||||
temp0 = 'A' + temp0 - 'Z' - 1
|
||||
if one > 'A' {
|
||||
pre = string(one - 1)
|
||||
}
|
||||
}
|
||||
begin0 = temp0
|
||||
f.MergeCell("Sheet1", beginmerge, endmerge)
|
||||
//tmp := fmt.Sprintf("%s1", string(index0))
|
||||
f.SetCellValue(sheetName, beginmerge, info.Name)
|
||||
fmt.Println(beginmerge, endmerge)
|
||||
}
|
||||
err := f.SaveAs(filePath)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
fmt.Println(begin, end)
|
||||
}
|
||||
|
||||
// 按行列索引
|
||||
func NewXlslFile0(f *excelize.File, list []*proto.InnerDailyRecharge, titlestyle, cellstyle int) error {
|
||||
// 设置列宽
|
||||
f.SetColWidth(sheetName, "A", "AAA", 19)
|
||||
|
||||
// 设置表头行高
|
||||
f.SetRowHeight(sheetName, 1, 25)
|
||||
f.SetCellStyle(sheetName, "A1", "ZZ1", titlestyle)
|
||||
f.SetCellStyle(sheetName, "A2", "ZZ2", titlestyle)
|
||||
f.SetCellStyle(sheetName, "A3", "ZZ3", titlestyle)
|
||||
|
||||
idx := f.NewSheet(sheetName)
|
||||
f.SetCellValue(sheetName, "A1", "日期")
|
||||
f.SetActiveSheet(idx)
|
||||
|
||||
now := time.Now()
|
||||
dayformat := now.Format("2006-01")
|
||||
|
||||
//begin, end := utils.MonthDateRange(now)
|
||||
beginday := utils.BeginOfMonth(now).Day()
|
||||
endday := utils.EndOfMonth(now).Day()
|
||||
|
||||
//设置日期
|
||||
index := "A"
|
||||
for i := beginday; i <= endday; i++ {
|
||||
tmp := fmt.Sprintf("%s%d", index, i+3)
|
||||
rowday := fmt.Sprintf("%s-%02d", dayformat, i)
|
||||
|
||||
f.SetCellValue(sheetName, tmp, rowday)
|
||||
}
|
||||
|
||||
//新文件设置固定的主题和style
|
||||
row := 1
|
||||
col := 2
|
||||
count := col
|
||||
for _, info := range list {
|
||||
begincol := count
|
||||
count = count + 4
|
||||
titleindex := 0
|
||||
titlemap := make(map[string]string, 0)
|
||||
for i := begincol; i <= count; i++ {
|
||||
if titleindex < len(exportTransWaterTitle) {
|
||||
titlecell, serr := utils.CoordinatesToCellName(begincol+titleindex, row+2)
|
||||
if serr != nil {
|
||||
log.Error("NewXlslFile0 CoordinatesToCellName ", log.Any("err", serr),
|
||||
log.Any("title", exportTransWaterTitle[titleindex]))
|
||||
return serr
|
||||
}
|
||||
titlemap[titlecell] = exportTransWaterTitle[titleindex]
|
||||
}
|
||||
titleindex++
|
||||
}
|
||||
info.BeginCol = begincol
|
||||
// 第一行产品
|
||||
begincell, serr := utils.CoordinatesToCellName(begincol, row)
|
||||
if serr != nil {
|
||||
log.Error("NewXlslFile0 CoordinatesToCellName ", log.Any("err", serr),
|
||||
log.Any("infoname", info.Name))
|
||||
return serr
|
||||
}
|
||||
endcell, serr := utils.CoordinatesToCellName(count, row)
|
||||
if serr != nil {
|
||||
log.Error("NewXlslFile0 CoordinatesToCellName ", log.Any("err", serr),
|
||||
log.Any("infoname", info.Name))
|
||||
return serr
|
||||
}
|
||||
// 第二行appid
|
||||
appidbegincell, serr := utils.CoordinatesToCellName(begincol, row+1)
|
||||
if serr != nil {
|
||||
log.Error("NewXlslFile0 CoordinatesToCellName ", log.Any("err", serr),
|
||||
log.Any("infoappid", info.AppId))
|
||||
return serr
|
||||
}
|
||||
appidendcell, serr := utils.CoordinatesToCellName(count, row+1)
|
||||
if serr != nil {
|
||||
log.Error("NewXlslFile0 CoordinatesToCellName ", log.Any("err", serr),
|
||||
log.Any("infoappid", info.AppId))
|
||||
return serr
|
||||
}
|
||||
f.MergeCell(sheetName, begincell, endcell)
|
||||
|
||||
f.MergeCell(sheetName, appidbegincell, appidendcell)
|
||||
//tmp := fmt.Sprintf("%s1", string(index0))
|
||||
/*if info.AppId != 0 {
|
||||
if info.AppId == 888 {
|
||||
//tmp := fmt.Sprintf("%s1", string(index0))
|
||||
f.SetCellValue(sheetName, begincell, info.Name+"(集团)")
|
||||
} else {
|
||||
f.SetCellValue(sheetName, begincell, info.Name+"(内部)")
|
||||
}
|
||||
} else {
|
||||
*/
|
||||
f.SetCellValue(sheetName, begincell, info.Name)
|
||||
//}
|
||||
f.SetCellValue(sheetName, appidbegincell, info.AppId)
|
||||
|
||||
//第三行app统计的信息
|
||||
for key, value := range titlemap {
|
||||
//f.SetCellStyle(sheetName, key, key, cellstyle)
|
||||
f.SetCellValue(sheetName, key, value)
|
||||
}
|
||||
count += 2
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// 合并单元格
|
||||
func MergeCell(f *excelize.File, sheetname string, col int, list []*proto.InnerDailyRecharge) error {
|
||||
row := 1
|
||||
count := col + 1
|
||||
for _, info := range list {
|
||||
begincol := count
|
||||
count = count + 4
|
||||
titleindex := 0
|
||||
titlemap := make(map[string]string, 0)
|
||||
for i := begincol; i <= count; i++ {
|
||||
if titleindex < len(exportTransWaterTitle) {
|
||||
titlecell, serr := utils.CoordinatesToCellName(begincol+titleindex, row+2)
|
||||
if serr != nil {
|
||||
log.Error("MergeCell CoordinatesToCellName ", log.Any("err", serr),
|
||||
log.Any("title", exportTransWaterTitle[titleindex]))
|
||||
return serr
|
||||
}
|
||||
titlemap[titlecell] = exportTransWaterTitle[titleindex]
|
||||
}
|
||||
titleindex++
|
||||
}
|
||||
begincell, serr := utils.CoordinatesToCellName(begincol, row)
|
||||
if serr != nil {
|
||||
log.Error("MergeCell CoordinatesToCellName ", log.Any("err", serr),
|
||||
log.Any("infoname", info.Name))
|
||||
return serr
|
||||
}
|
||||
endcell, serr := utils.CoordinatesToCellName(count, row)
|
||||
if serr != nil {
|
||||
log.Error("MergeCell CoordinatesToCellName ", log.Any("err", serr),
|
||||
log.Any("infoname", info.Name))
|
||||
return serr
|
||||
}
|
||||
// 第一行appid
|
||||
appidbegincell, serr := utils.CoordinatesToCellName(begincol, row+1)
|
||||
if serr != nil {
|
||||
log.Error("MergeCell CoordinatesToCellName ", log.Any("err", serr),
|
||||
log.Any("appid", info.AppId))
|
||||
return serr
|
||||
}
|
||||
appidendcell, serr := utils.CoordinatesToCellName(count, row+1)
|
||||
if serr != nil {
|
||||
log.Error("MergeCell CoordinatesToCellName ", log.Any("err", serr),
|
||||
log.Any("appid", info.AppId))
|
||||
return serr
|
||||
}
|
||||
info.BeginCol = begincol
|
||||
f.MergeCell(sheetname, begincell, endcell)
|
||||
/*if info.AppId != 0 {
|
||||
if info.AppId == 888 {
|
||||
f.SetCellValue(sheetname, begincell, info.Name+"(集团)")
|
||||
} else {
|
||||
f.SetCellValue(sheetname, begincell, info.Name+"(内部)")
|
||||
}
|
||||
} else {
|
||||
*/
|
||||
f.SetCellValue(sheetname, begincell, info.Name)
|
||||
//}
|
||||
|
||||
f.MergeCell(sheetname, appidbegincell, appidendcell)
|
||||
//tmp := fmt.Sprintf("%s1", string(index0))
|
||||
f.SetCellValue(sheetname, appidbegincell, info.AppId)
|
||||
for key, value := range titlemap {
|
||||
f.SetCellValue(sheetname, key, value)
|
||||
}
|
||||
count += 2
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func OpenOldXlsl(f *excelize.File, list []*proto.InnerDailyRecharge) error {
|
||||
idx := f.GetSheetIndex(sheetName)
|
||||
f.SetActiveSheet(idx)
|
||||
|
||||
cols := f.GetRows(sheetName)
|
||||
begincol := 0
|
||||
//查找数据开始单元格,新数据先合并单元格
|
||||
/*for rowindex, col := range cols {
|
||||
for colindex, rowCell := range col {
|
||||
if rowCell == "" {
|
||||
continue
|
||||
}
|
||||
if rowindex == 1 {
|
||||
for _, info := range list {
|
||||
if rowCell == string(info.AppId) {
|
||||
info.BeginRow = rowindex + 1
|
||||
info.BeginCol = colindex + 1
|
||||
info.IsOld = true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
if len(cols) < 2 || len(cols[1]) < len(list) {
|
||||
return errors.New("OpenOldXlsl cols < 0")
|
||||
}
|
||||
|
||||
/*for rowindex := 0; rowindex < len(cols); rowindex++ {
|
||||
if cols[rowindex][0] != "" {
|
||||
for _, info := range list {
|
||||
if cols[rowindex][0] == info.DateTime {
|
||||
info.BeginRow = rowindex + 1
|
||||
info.IsOld = true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
//旧的数据单元格开始信息
|
||||
for colindex := 0; colindex < len(cols[1]); colindex++ {
|
||||
for _, info := range list {
|
||||
appid := strconv.Itoa(int(info.AppId))
|
||||
if cols[1][colindex] != "" && cols[1][colindex] == appid {
|
||||
info.BeginCol = colindex + 1
|
||||
info.IsOld = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//新的单元格从第几列信息
|
||||
newlist := make([]*proto.InnerDailyRecharge, 0)
|
||||
for _, info := range list {
|
||||
if info.IsOld {
|
||||
if info.BeginCol > begincol {
|
||||
begincol = info.BeginCol
|
||||
}
|
||||
} else {
|
||||
newlist = append(newlist, info)
|
||||
}
|
||||
}
|
||||
if len(newlist) > 0 {
|
||||
serr := MergeCell(f, sheetName, begincol+5, newlist)
|
||||
if serr != nil {
|
||||
log.Error("OpenOldXlsl MergeCell ", log.Any("err", serr))
|
||||
return serr
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func NewXlslFile2(f *excelize.File, list []*AppInformation, titlestyle, cellstyle int, now time.Time) error {
|
||||
// 设置列宽
|
||||
f.SetColWidth(sheetName, "A", "AAA", 19)
|
||||
|
||||
// 设置表头行高
|
||||
f.SetRowHeight(sheetName, 1, 25)
|
||||
f.SetCellStyle(sheetName, "A1", "ZZ1", titlestyle)
|
||||
f.SetCellStyle(sheetName, "A2", "ZZ2", titlestyle)
|
||||
f.SetCellStyle(sheetName, "A3", "ZZ3", titlestyle)
|
||||
|
||||
idx := f.NewSheet(sheetName)
|
||||
f.SetCellValue(sheetName, "A1", "日期")
|
||||
f.SetActiveSheet(idx)
|
||||
|
||||
dayformat := now.Format("2006-01")
|
||||
|
||||
//begin, end := utils.MonthDateRange(now)
|
||||
beginday := utils.BeginOfMonth(now).Day()
|
||||
endday := utils.EndOfMonth(now).Day()
|
||||
|
||||
//设置日期
|
||||
index := "A"
|
||||
for i := beginday; i <= endday; i++ {
|
||||
tmp := fmt.Sprintf("%s%d", index, i+3)
|
||||
rowday := fmt.Sprintf("%s-%02d", dayformat, i)
|
||||
f.SetCellValue(sheetName, tmp, rowday)
|
||||
}
|
||||
// 设置汇总
|
||||
tmp := fmt.Sprintf("%s%d", index, endday+1+3)
|
||||
f.SetCellValue(sheetName, tmp, "汇总")
|
||||
|
||||
//新文件设置固定的主题和style
|
||||
row := 1
|
||||
col := 2
|
||||
count := col
|
||||
for _, info := range list {
|
||||
begincol := count
|
||||
count = count + 4
|
||||
titleindex := 0
|
||||
titlemap := make(map[string]string, 0)
|
||||
for i := begincol; i <= count; i++ {
|
||||
if titleindex < len(exportTransWaterTitle) {
|
||||
titlecell, serr := utils.CoordinatesToCellName(begincol+titleindex, row+2)
|
||||
if serr != nil {
|
||||
log.Error("NewXlslFile0 CoordinatesToCellName ", log.Any("err", serr),
|
||||
log.Any("title", exportTransWaterTitle[titleindex]))
|
||||
return serr
|
||||
}
|
||||
titlemap[titlecell] = exportTransWaterTitle[titleindex]
|
||||
}
|
||||
titleindex++
|
||||
}
|
||||
info.BeginCol = begincol
|
||||
// 第一行产品
|
||||
begincell, serr := utils.CoordinatesToCellName(begincol, row)
|
||||
if serr != nil {
|
||||
log.Error("NewXlslFile0 CoordinatesToCellName ", log.Any("err", serr),
|
||||
log.Any("infoname", info.Name))
|
||||
return serr
|
||||
}
|
||||
endcell, serr := utils.CoordinatesToCellName(count, row)
|
||||
if serr != nil {
|
||||
log.Error("NewXlslFile0 CoordinatesToCellName ", log.Any("err", serr),
|
||||
log.Any("infoname", info.Name))
|
||||
return serr
|
||||
}
|
||||
// 第二行appid
|
||||
appidbegincell, serr := utils.CoordinatesToCellName(begincol, row+1)
|
||||
if serr != nil {
|
||||
log.Error("NewXlslFile0 CoordinatesToCellName ", log.Any("err", serr),
|
||||
log.Any("infoappid", info.Id))
|
||||
return serr
|
||||
}
|
||||
appidendcell, serr := utils.CoordinatesToCellName(count, row+1)
|
||||
if serr != nil {
|
||||
log.Error("NewXlslFile0 CoordinatesToCellName ", log.Any("err", serr),
|
||||
log.Any("infoappid", info.Id))
|
||||
return serr
|
||||
}
|
||||
f.MergeCell(sheetName, begincell, endcell)
|
||||
f.MergeCell(sheetName, appidbegincell, appidendcell)
|
||||
f.SetCellValue(sheetName, begincell, info.Name)
|
||||
f.SetCellValue(sheetName, appidbegincell, info.Id)
|
||||
//第三行app统计的信息
|
||||
for key, value := range titlemap {
|
||||
f.SetCellValue(sheetName, key, value)
|
||||
}
|
||||
count += 2
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user