Initial commit
This commit is contained in:
@@ -0,0 +1,711 @@
|
||||
package innerserverser
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/360EntSecGroup-Skylar/excelize"
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"io"
|
||||
"net/http"
|
||||
"os"
|
||||
"sort"
|
||||
"stat/api/proto"
|
||||
"stat/common/log"
|
||||
"stat/common/tgbot"
|
||||
"stat/common/utils"
|
||||
"stat/models/appInfoMod"
|
||||
"stat/models/dailystatmod"
|
||||
"stat/statg"
|
||||
"strconv"
|
||||
"time"
|
||||
)
|
||||
|
||||
func InnerRequestBotcmd(url string, reqproto interface{}, bind interface{}) error {
|
||||
data, err := json.Marshal(reqproto)
|
||||
|
||||
if err != nil {
|
||||
log.Error("InnerRequestBotcmd json.Marshal", log.Any("err", err))
|
||||
return err
|
||||
}
|
||||
|
||||
//resp, err = InnerPlainPost(url, data)
|
||||
bodyReader := bytes.NewReader(data)
|
||||
req, err := http.NewRequest(http.MethodPost, url, bodyReader)
|
||||
if err != nil {
|
||||
log.Error("InnerRequestBotcmd http.NewRequest", log.Any("err", err))
|
||||
return err
|
||||
}
|
||||
timeout := 30 * time.Second
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
client := http.Client{
|
||||
Timeout: timeout,
|
||||
}
|
||||
resp, err := client.Do(req)
|
||||
|
||||
if err != nil {
|
||||
log.Error("InnerRequestBotcmd http.NewRequest", log.Any("err", err))
|
||||
return err
|
||||
}
|
||||
|
||||
if resp.StatusCode != 200 {
|
||||
err = fmt.Errorf("error status %s, http code %d", resp.Status, resp.StatusCode)
|
||||
log.Error("InnerRequestBotcmd http.NewRequest resp", log.Any("err", err))
|
||||
return err
|
||||
}
|
||||
|
||||
defer resp.Body.Close()
|
||||
|
||||
data, err = io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
log.Error("InnerRequestBotcmd io.ReadAll", log.Any("err", err))
|
||||
return err
|
||||
}
|
||||
|
||||
return json.Unmarshal(data, bind)
|
||||
}
|
||||
|
||||
// bili请求过来的
|
||||
func InnerRecgaregeBotcmdList(ctx context.Context, req *proto.InnerRechargeBotcmdReq) (
|
||||
*proto.InnerDailyRechargeList, error) {
|
||||
if req.InnerId != int32(statg.Conf.ServerIndex) {
|
||||
err := fmt.Errorf("InnerRecgaregeBotcmdList req.InnerId %d", req.InnerId)
|
||||
log.Error("InnerRecgaregeBotcmdList req.InnerId", log.Any("err", err))
|
||||
return nil, err
|
||||
}
|
||||
|
||||
resp := &proto.InnerDailyRechargeList{}
|
||||
resp.List = make([]*proto.InnerDailyRecharge, 0)
|
||||
|
||||
list, appinfo, err := GetDbListBotcmd(ctx, &req.EndTime, &req.BeginTime)
|
||||
if err != nil {
|
||||
log.Error("InnerRecgaregeBotcmdList:GetDbList", log.E(err))
|
||||
return nil, err
|
||||
}
|
||||
for _, info := range list {
|
||||
if info.AppId == 889 {
|
||||
continue
|
||||
}
|
||||
name := ""
|
||||
if data, ok := appinfo[info.AppId]; ok {
|
||||
name = data.Name
|
||||
}
|
||||
temp := &proto.InnerDailyRecharge{
|
||||
AppId: info.AppId,
|
||||
Name: name,
|
||||
Type: "",
|
||||
DateTime: info.SumDate.Format("2006-01-02"),
|
||||
DailyVistCount: info.TotalVisitCount,
|
||||
DailyRegister: info.NewTotalCount,
|
||||
DailyAppAmount: info.TotalAmount,
|
||||
DailyGameAmount: info.GameRechageAmount,
|
||||
RechargeOrder: info.SuccessRechargeOrder,
|
||||
}
|
||||
resp.List = append(resp.List, temp)
|
||||
}
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
func GetDbListBotcmd(ctx context.Context, day *time.Time, yesterday *time.Time) (
|
||||
[]*dailystatmod.DailyStatMod, map[int32]*appInfoMod.AppInfo, error) {
|
||||
list := make([]*dailystatmod.DailyStatMod, 0)
|
||||
appinfo, serr := appInfoMod.GetAllAppIdMap(ctx, bson.M{})
|
||||
if serr != nil {
|
||||
log.Error("GetDbListBotcmd appInfoMod.GetAllAppInfo", log.Any("serr", serr))
|
||||
return nil, nil, serr
|
||||
}
|
||||
for _, info := range appinfo {
|
||||
//data, serr := dailystatmod.FindOneDailyStat(ctx, info.AppId, yesterday)
|
||||
rechargelist, serr := dailystatmod.GetDailyStatTotalList(ctx, &info.AppId, yesterday, day)
|
||||
if serr != nil {
|
||||
log.Error("GetDbListBotcmd dailystatmod.GetDailyStatTotalList", log.Any("serr", serr))
|
||||
continue
|
||||
}
|
||||
if rechargelist != nil {
|
||||
list = append(list, rechargelist...)
|
||||
} else {
|
||||
log.Error("GetDbListBotcmd rechargelist nil")
|
||||
}
|
||||
}
|
||||
return list, appinfo, nil
|
||||
}
|
||||
|
||||
func NewXlslFileBot(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.MergeCell(sheetName, "A1", "A3")
|
||||
f.SetCellValue(sheetName, "A1", "日期")
|
||||
|
||||
//f.SetCellStyle(sheetName, "B2", "AAA2", cellstyle)
|
||||
f.SetCellStyle(sheetName, "A4", "A50", cellstyle)
|
||||
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+3)
|
||||
rowday := fmt.Sprintf("%s-%02d", day, 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 {
|
||||
return serr
|
||||
}
|
||||
titlemap[titlecell] = exportTransWaterTitle[titleindex]
|
||||
}
|
||||
titleindex++
|
||||
}
|
||||
for key, value := range titlemap {
|
||||
f.SetCellValue(sheetName, key, value)
|
||||
}
|
||||
info.BeginCol = begincol
|
||||
// 第一行产品
|
||||
begincell, serr := utils.CoordinatesToCellName(begincol, row)
|
||||
if serr != nil {
|
||||
return serr
|
||||
}
|
||||
endcell, serr := utils.CoordinatesToCellName(count, row)
|
||||
if serr != nil {
|
||||
return serr
|
||||
}
|
||||
// 第一行appid
|
||||
appidbegincell, serr := utils.CoordinatesToCellName(begincol, row+1)
|
||||
if serr != nil {
|
||||
return serr
|
||||
}
|
||||
appidendcell, serr := utils.CoordinatesToCellName(count, row+1)
|
||||
if serr != nil {
|
||||
return serr
|
||||
}
|
||||
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)
|
||||
count += 2
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// bili请求麻豆知乎信息只在bili启动麻豆知乎只响应数据
|
||||
func InnerServerBotDateMonthStat(ctx context.Context, cmd *tgbot.Command) error {
|
||||
if statg.Conf.ServerIndex != statg.ServerIndexBili {
|
||||
log.Error("InnerServerBotDateMonthStat serverindex",
|
||||
log.Any("serverindex", statg.Conf.ServerIndex))
|
||||
return nil
|
||||
}
|
||||
|
||||
log.Info("InnerServerBotDateMonthStat start")
|
||||
sBegin := cmd.GetFlagStringValue("-begin")
|
||||
if sBegin == "" {
|
||||
return tgbot.NewUserError(cmd, "请输入查询开始日期,格式:\n"+cmd.Help+"\n"+cmd.Desc)
|
||||
}
|
||||
sEnd := cmd.GetFlagStringValue("-end")
|
||||
if sEnd == "" {
|
||||
return tgbot.NewUserError(cmd, "请输入查询结束日期,格式:\n"+cmd.Help+"\n"+cmd.Desc)
|
||||
}
|
||||
beginmonth, err := time.ParseInLocation("2006-01-02", sBegin, time.Local)
|
||||
if err != nil {
|
||||
return tgbot.NewUserError(cmd, "解析开始日期出错, 格式:\n"+cmd.Help+"\n"+cmd.Desc)
|
||||
}
|
||||
//beginmonth = beginmonth.AddDate(0, 0, -1)
|
||||
endmonth, err := time.ParseInLocation("2006-01-02", sEnd, time.Local)
|
||||
if err != nil {
|
||||
return tgbot.NewUserError(cmd, "解析结束日期出错, 格式:\n"+cmd.Help+"\n"+cmd.Desc)
|
||||
}
|
||||
|
||||
list := make([]*proto.InnerDailyRecharge, 0)
|
||||
for id, info := range statg.Conf.InnerServers {
|
||||
if id == statg.ServerIndexBili {
|
||||
continue
|
||||
}
|
||||
|
||||
if id != statg.ServerIndexBili && info == "" {
|
||||
log.Error("InnerServerBotDateMonthStat server not found",
|
||||
log.Any("statg.Conf.InnerServers", id))
|
||||
continue
|
||||
}
|
||||
req := &proto.InnerRechargeBotcmdReq{
|
||||
InnerId: int32(id),
|
||||
BeginTime: beginmonth,
|
||||
EndTime: endmonth,
|
||||
}
|
||||
url := info + "/api/stat/inner/rechargebotcmd/list"
|
||||
log.Info("InnerServerBotDateMonthStat", log.Any("req", url))
|
||||
res := &proto.InnerDailyRechargeResp{}
|
||||
err = InnerRequestBotcmd(url, req, res)
|
||||
if err != nil {
|
||||
log.Error("InnerServerBotDateMonthStat InnerRequest",
|
||||
log.Any("InnerRequest", err))
|
||||
continue
|
||||
}
|
||||
if res == nil {
|
||||
log.Error("InnerServerBotDateMonthStat InnerRequest data not found")
|
||||
continue
|
||||
}
|
||||
if res.Data.List != nil && len(res.Data.List) > 0 {
|
||||
list = append(list, res.Data.List...)
|
||||
}
|
||||
}
|
||||
|
||||
bililist, appinfo, err := GetDbListBotcmd(ctx, &endmonth, &beginmonth)
|
||||
if err != nil {
|
||||
log.Error("InnerServerBotDateMonthStat:GetDbList", log.E(err))
|
||||
return err
|
||||
}
|
||||
|
||||
for _, info := range bililist {
|
||||
name := ""
|
||||
if data, ok := appinfo[info.AppId]; ok {
|
||||
name = data.Name
|
||||
}
|
||||
temp := &proto.InnerDailyRecharge{
|
||||
AppId: info.AppId,
|
||||
Name: name,
|
||||
Type: "",
|
||||
DateTime: info.SumDate.Format("2006-01-02"),
|
||||
DailyVistCount: info.TotalVisitCount,
|
||||
DailyRegister: info.NewTotalCount,
|
||||
DailyAppAmount: info.TotalAmount,
|
||||
DailyGameAmount: info.GameRechageAmount,
|
||||
RechargeOrder: info.SuccessRechargeOrder,
|
||||
}
|
||||
list = append(list, temp)
|
||||
}
|
||||
|
||||
listmap := make(map[string]*proto.InnerDailyMap)
|
||||
for _, info := range list {
|
||||
if value, ok := listmap[info.DateTime]; ok {
|
||||
value.List = append(value.List, info)
|
||||
} else {
|
||||
tempmap := &proto.InnerDailyMap{
|
||||
Id: info.DateTime,
|
||||
List: make([]*proto.InnerDailyRecharge, 0),
|
||||
}
|
||||
tempmap.List = append(tempmap.List, info)
|
||||
listmap[info.DateTime] = tempmap
|
||||
}
|
||||
}
|
||||
|
||||
// 中间会不同日期加入新的appid要用所有的appid组成数组创建新xlsx
|
||||
tempcell := make([]*proto.InnerDailyRecharge, 0)
|
||||
tempmap0 := make(map[int32]*proto.InnerDailyRecharge)
|
||||
for _, value := range listmap {
|
||||
temp := &proto.InnerDailyRecharge{AppId: -1}
|
||||
for _, info := range value.List {
|
||||
temp.AppId = 0
|
||||
temp.Name = "天宇总充值"
|
||||
temp.DateTime = info.DateTime
|
||||
temp.CellType = 1
|
||||
temp.DailyVistCount += info.DailyVistCount
|
||||
temp.DailyRegister += info.DailyRegister
|
||||
temp.DailyAppAmount += info.DailyAppAmount
|
||||
temp.DailyGameAmount += info.DailyGameAmount
|
||||
temp.RechargeOrder += info.RechargeOrder
|
||||
tempmap0[info.AppId] = info
|
||||
}
|
||||
tempmap0[temp.AppId] = temp
|
||||
value.List = append(value.List, temp)
|
||||
for i, j := 0, len(value.List)-1; i < j; i, j = i+1, j-1 {
|
||||
value.List[i], value.List[j] = value.List[j], value.List[i]
|
||||
}
|
||||
}
|
||||
|
||||
for _, value := range tempmap0 {
|
||||
tempcell = append(tempcell, value)
|
||||
}
|
||||
sort.Slice(tempcell, func(i, j int) bool {
|
||||
return tempcell[i].AppId < tempcell[j].AppId
|
||||
})
|
||||
|
||||
var f *excelize.File
|
||||
dir := beginmonth.Format("2006-01")
|
||||
dayrow := beginmonth.Format("2006-01-02")
|
||||
filePath := "/usr/local" + "/bakmonthbot/" + dir + "/"
|
||||
filename := filePath + dayrow + ".xlsx"
|
||||
if !DocExsit(filePath) {
|
||||
err = os.MkdirAll(filePath, os.ModePerm)
|
||||
if err != nil {
|
||||
log.Error("InnerServerBotDateMonthStat:export save file to disk failed",
|
||||
log.Any("fileName", filePath),
|
||||
log.E(err))
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
f = excelize.NewFile()
|
||||
|
||||
if f == nil {
|
||||
log.Error("InnerServerBotDateMonthStat f failed")
|
||||
err = errors.New("InnerServerBotDateMonthStat f failed")
|
||||
return err
|
||||
}
|
||||
|
||||
// 设置表头样式
|
||||
headStyleID, _ := f.NewStyle(titlestyle)
|
||||
// 设置表头样式
|
||||
headStyleID0, _ := f.NewStyle(cellstyle)
|
||||
|
||||
if tempcell != nil && len(tempcell) > 0 {
|
||||
err = NewXlslFileBot(f, tempcell, headStyleID, headStyleID0)
|
||||
if err != nil {
|
||||
log.Error("InnerServerBotDateMonthStat excelize.OpenFile failed",
|
||||
log.Any("fileName", filePath),
|
||||
log.E(err))
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
for key, value := range listmap {
|
||||
cols := f.GetRows(sheetName)
|
||||
if len(cols) < 2 || len(cols[1]) < len(value.List) {
|
||||
return errors.New("InnerServerBotcmdMonthStat cols < 0")
|
||||
}
|
||||
for rowindex := 0; rowindex < len(cols); rowindex++ {
|
||||
if cols[rowindex][0] != "" && cols[rowindex][0] == key {
|
||||
for _, info := range value.List {
|
||||
info.BeginRow = rowindex + 1
|
||||
info.IsOld = true
|
||||
}
|
||||
}
|
||||
}
|
||||
for colindex := 0; colindex < len(cols[1]); colindex++ {
|
||||
for _, info := range value.List {
|
||||
appid := strconv.Itoa(int(info.AppId))
|
||||
if cols[1][colindex] != "" && cols[1][colindex] == appid {
|
||||
info.BeginCol = colindex + 1
|
||||
info.IsOld = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for _, info := range value.List {
|
||||
cellday, serr := utils.CoordinatesToCellName(info.BeginCol, info.BeginRow)
|
||||
if serr != nil {
|
||||
log.Error("InnerServerBotDateMonthStat CoordinatesToCellName ", log.Any("err", serr))
|
||||
return serr
|
||||
}
|
||||
cellregister, serr := utils.CoordinatesToCellName(info.BeginCol+1, info.BeginRow)
|
||||
if serr != nil {
|
||||
log.Error("InnerServerBotDateMonthStat CoordinatesToCellName ", log.Any("err", serr))
|
||||
return serr
|
||||
}
|
||||
cellrecharge, serr := utils.CoordinatesToCellName(info.BeginCol+2, info.BeginRow)
|
||||
if serr != nil {
|
||||
log.Error("InnerServerBotDateMonthStat CoordinatesToCellName ", log.Any("err", serr))
|
||||
|
||||
return serr
|
||||
}
|
||||
cellgame, serr := utils.CoordinatesToCellName(info.BeginCol+3, info.BeginRow)
|
||||
if serr != nil {
|
||||
log.Error("InnerServerBotDateMonthStat CoordinatesToCellName ", log.Any("err", serr))
|
||||
|
||||
return serr
|
||||
}
|
||||
cellorder, serr := utils.CoordinatesToCellName(info.BeginCol+4, info.BeginRow)
|
||||
if serr != nil {
|
||||
log.Error("InnerServerBotDateMonthStat CoordinatesToCellName ", log.Any("err", serr))
|
||||
|
||||
return serr
|
||||
}
|
||||
|
||||
f.SetCellStyle(sheetName, cellday, cellday, headStyleID0)
|
||||
totalamount := fmt.Sprintf("%.2f", float64(info.DailyVistCount)*0.01)
|
||||
f.SetCellValue(sheetName, cellday, totalamount)
|
||||
f.SetCellStyle(sheetName, cellregister, cellday, headStyleID0)
|
||||
totalamount = fmt.Sprintf("%.2f", float64(info.DailyRegister)*0.01)
|
||||
f.SetCellValue(sheetName, cellregister, totalamount)
|
||||
f.SetCellStyle(sheetName, cellrecharge, cellday, headStyleID0)
|
||||
totalamount = fmt.Sprintf("%.2f", float64(info.DailyAppAmount)*0.0001)
|
||||
f.SetCellValue(sheetName, cellrecharge, totalamount)
|
||||
if info.AppId == 0 || info.AppId == 888 {
|
||||
f.SetCellStyle(sheetName, cellgame, cellday, headStyleID0)
|
||||
totalamount = fmt.Sprintf("%.2f", float64(info.DailyGameAmount)*0.0001)
|
||||
f.SetCellValue(sheetName, cellgame, totalamount)
|
||||
}
|
||||
f.SetCellStyle(sheetName, cellorder, cellday, headStyleID0)
|
||||
totalamount = fmt.Sprintf("%.2f", float64(info.RechargeOrder)*0.01)
|
||||
f.SetCellValue(sheetName, cellorder, totalamount)
|
||||
}
|
||||
}
|
||||
err = f.SaveAs(filename)
|
||||
if err != nil {
|
||||
log.Error("InnerServerBotDateMonthStat CoordinatesToCellName ", log.Any("err", err))
|
||||
|
||||
return err
|
||||
}
|
||||
if statg.RchssendBot != nil {
|
||||
err = statg.RchssendBot.Sendrchstochat("天宇公司综合日报间隔日期", filename, tgbot.FileTypeDocument)
|
||||
//statg.Bot.Sendrchstochat("充值", fileName, tgbot.FileTypeDocument)
|
||||
if err != nil {
|
||||
log.Error("InnerServerBotDateMonthStat Sendrchstochat", log.Any("Sendrchstochat", err))
|
||||
}
|
||||
}
|
||||
log.Info("InnerServerBotDateMonthStat end")
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// bili请求麻豆知乎信息只在bili启动麻豆知乎只响应数据
|
||||
func InnerServerBotDateDayStat(ctx context.Context, cmd *tgbot.Command) error {
|
||||
if statg.Conf.ServerIndex != statg.ServerIndexBili {
|
||||
log.Error("InnerServerBotDateDayStat serverindex",
|
||||
log.Any("serverindex", statg.Conf.ServerIndex))
|
||||
return nil
|
||||
}
|
||||
|
||||
log.Info("InnerServerBotDateDayStat start")
|
||||
|
||||
sBegin := cmd.GetFlagStringValue("-date")
|
||||
if sBegin == "" {
|
||||
return tgbot.NewUserError(cmd, "请输入查询开始日期,格式:\n"+cmd.Help+"\n"+cmd.Desc)
|
||||
}
|
||||
beginmonth, err := time.ParseInLocation("2006-01-02", sBegin, time.Local)
|
||||
if err != nil {
|
||||
return tgbot.NewUserError(cmd, "解析开始日期出错, 格式:\n"+cmd.Help+"\n"+cmd.Desc)
|
||||
}
|
||||
endmonth := beginmonth.AddDate(0, 0, 1)
|
||||
|
||||
list := make([]*proto.InnerDailyRecharge, 0)
|
||||
for id, info := range statg.Conf.InnerServers {
|
||||
if id == statg.ServerIndexBili {
|
||||
continue
|
||||
}
|
||||
|
||||
if id != statg.ServerIndexBili && info == "" {
|
||||
log.Error("InnerServerBotDateDayStat server not found",
|
||||
log.Any("InnerServerBotDateDayStat", id))
|
||||
continue
|
||||
}
|
||||
req := &proto.InnerRechargeBotcmdReq{
|
||||
InnerId: int32(id),
|
||||
BeginTime: beginmonth,
|
||||
EndTime: endmonth,
|
||||
}
|
||||
url := info + "/api/stat/inner/rechargebotcmd/list"
|
||||
log.Info("InnerServerBotDateDayStat", log.Any("req", url))
|
||||
res := &proto.InnerDailyRechargeResp{}
|
||||
err = InnerRequestBotcmd(url, req, res)
|
||||
if err != nil {
|
||||
log.Error("InnerServerBotDateDayStat InnerRequest",
|
||||
log.Any("InnerRequest", err))
|
||||
continue
|
||||
}
|
||||
if res == nil {
|
||||
log.Error("InnerServerBotDateDayStat InnerRequest data not found")
|
||||
continue
|
||||
}
|
||||
if res.Data.List != nil && len(res.Data.List) > 0 {
|
||||
list = append(list, res.Data.List...)
|
||||
}
|
||||
}
|
||||
|
||||
bililist, appinfo, err := GetDbListBotcmd(ctx, &endmonth, &beginmonth)
|
||||
if err != nil {
|
||||
log.Error("InnerServerBotDateDayStat:GetDbListBotcmd", log.E(err))
|
||||
return err
|
||||
}
|
||||
|
||||
for _, info := range bililist {
|
||||
name := ""
|
||||
if data, ok := appinfo[info.AppId]; ok {
|
||||
name = data.Name
|
||||
}
|
||||
temp := &proto.InnerDailyRecharge{
|
||||
AppId: info.AppId,
|
||||
Name: name,
|
||||
Type: "",
|
||||
DateTime: info.SumDate.Format("2006-01-02"),
|
||||
DailyVistCount: info.TotalVisitCount,
|
||||
DailyRegister: info.NewTotalCount,
|
||||
DailyAppAmount: info.TotalAmount,
|
||||
DailyGameAmount: info.GameRechageAmount,
|
||||
RechargeOrder: info.SuccessRechargeOrder,
|
||||
}
|
||||
list = append(list, temp)
|
||||
}
|
||||
|
||||
temp := &proto.InnerDailyRecharge{}
|
||||
for _, info := range list {
|
||||
temp.AppId = 0
|
||||
temp.CellType = 1
|
||||
temp.Name = "天宇总充值"
|
||||
temp.DailyVistCount += info.DailyVistCount
|
||||
temp.DailyRegister += info.DailyRegister
|
||||
temp.DailyAppAmount += info.DailyAppAmount
|
||||
temp.DailyGameAmount += info.DailyGameAmount
|
||||
temp.RechargeOrder += info.RechargeOrder
|
||||
}
|
||||
list = append(list, temp)
|
||||
for i, j := 0, len(list)-1; i < j; i, j = i+1, j-1 {
|
||||
list[i], list[j] = list[j], list[i]
|
||||
}
|
||||
|
||||
var f *excelize.File
|
||||
dir := beginmonth.Format("2006-01")
|
||||
dayrow := beginmonth.Format("2006-01-02")
|
||||
filePath := "/usr/local" + "/bakmonthday/" + dir + "/"
|
||||
filename := filePath + dayrow + ".xlsx"
|
||||
if !DocExsit(filePath) {
|
||||
err = os.MkdirAll(filePath, os.ModePerm)
|
||||
if err != nil {
|
||||
log.Error("InnerServerBotDateDayStat:export save file to disk failed",
|
||||
log.Any("fileName", filePath),
|
||||
log.E(err))
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
f = excelize.NewFile()
|
||||
|
||||
if f == nil {
|
||||
log.Error("InnerServerBotDateDayStat f failed")
|
||||
err = errors.New("InnerServerBotDateDayStat f failed")
|
||||
return err
|
||||
}
|
||||
|
||||
// 设置表头样式
|
||||
headStyleID, _ := f.NewStyle(titlestyle)
|
||||
// 设置表头样式
|
||||
headStyleID0, _ := f.NewStyle(cellstyle)
|
||||
|
||||
err = NewXlslFileBot(f, list, headStyleID, headStyleID0)
|
||||
if err != nil {
|
||||
log.Error("InnerServerBotDateDayStat excelize.OpenFile failed",
|
||||
log.Any("fileName", filePath),
|
||||
log.E(err))
|
||||
return err
|
||||
}
|
||||
|
||||
row := 0
|
||||
cols := f.GetRows(sheetName)
|
||||
for rowindex, col := range cols {
|
||||
for colindex, rowCell := range col {
|
||||
if rowCell == "" {
|
||||
continue
|
||||
}
|
||||
if colindex == 0 {
|
||||
if rowCell == dayrow {
|
||||
row = rowindex + 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if row == 0 {
|
||||
return errors.New("InnerServerBotDateDayStat row <= 0")
|
||||
}
|
||||
|
||||
for _, info := range list {
|
||||
cellday, serr := utils.CoordinatesToCellName(info.BeginCol, row)
|
||||
if serr != nil {
|
||||
log.Error("InnerServerBotDateDayStat CoordinatesToCellName ", log.Any("err", serr))
|
||||
return serr
|
||||
}
|
||||
cellregister, serr := utils.CoordinatesToCellName(info.BeginCol+1, row)
|
||||
if serr != nil {
|
||||
log.Error("InnerServerBotDateDayStat CoordinatesToCellName ", log.Any("err", serr))
|
||||
return serr
|
||||
}
|
||||
cellrecharge, serr := utils.CoordinatesToCellName(info.BeginCol+2, row)
|
||||
if serr != nil {
|
||||
log.Error("InnerServerBotDateDayStat CoordinatesToCellName ", log.Any("err", serr))
|
||||
|
||||
return serr
|
||||
}
|
||||
cellgame, serr := utils.CoordinatesToCellName(info.BeginCol+3, row)
|
||||
if serr != nil {
|
||||
log.Error("InnerServerBotDateDayStat CoordinatesToCellName ", log.Any("err", serr))
|
||||
|
||||
return serr
|
||||
}
|
||||
cellorder, serr := utils.CoordinatesToCellName(info.BeginCol+4, row)
|
||||
if serr != nil {
|
||||
log.Error("InnerServerBotDateDayStat CoordinatesToCellName ", log.Any("err", serr))
|
||||
|
||||
return serr
|
||||
}
|
||||
|
||||
f.SetCellStyle(sheetName, cellday, cellday, headStyleID0)
|
||||
totalamount := fmt.Sprintf("%.2f", float64(info.DailyVistCount)*0.01)
|
||||
f.SetCellValue(sheetName, cellday, totalamount)
|
||||
|
||||
f.SetCellStyle(sheetName, cellregister, cellregister, headStyleID0)
|
||||
totalamount = fmt.Sprintf("%.2f", float64(info.DailyRegister)*0.01)
|
||||
f.SetCellValue(sheetName, cellregister, totalamount)
|
||||
|
||||
f.SetCellStyle(sheetName, cellrecharge, cellrecharge, headStyleID0)
|
||||
totalamount = fmt.Sprintf("%.2f", float64(info.DailyAppAmount)*0.0001)
|
||||
f.SetCellValue(sheetName, cellrecharge, totalamount)
|
||||
|
||||
if info.AppId == 0 || info.AppId == 888 {
|
||||
f.SetCellStyle(sheetName, cellgame, cellgame, headStyleID0)
|
||||
totalamount = fmt.Sprintf("%.2f", float64(info.DailyGameAmount)*0.0001)
|
||||
f.SetCellValue(sheetName, cellgame, totalamount)
|
||||
}
|
||||
|
||||
f.SetCellStyle(sheetName, cellorder, cellorder, headStyleID0)
|
||||
totalamount = fmt.Sprintf("%.2f", float64(info.RechargeOrder)*0.01)
|
||||
f.SetCellValue(sheetName, cellorder, totalamount)
|
||||
}
|
||||
|
||||
err = f.SaveAs(filename)
|
||||
if err != nil {
|
||||
log.Error("InnerServerBotDateDayStat SaveAs ", log.Any("err", err))
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
if statg.RchssendBot != nil {
|
||||
err = statg.RchssendBot.Sendrchstochat("天宇公司综合日报具体date", filename,
|
||||
tgbot.FileTypeDocument)
|
||||
if err != nil {
|
||||
log.Error("InnerServerBotDateDayStat Sendrchstochat", log.Any("Sendrchstochat", err))
|
||||
}
|
||||
}
|
||||
|
||||
log.Info("InnerServerBotDateDayStat end")
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user