fix: 1. 增加排序 2.调整title
This commit is contained in:
parent
a72ec8cfc2
commit
57692a8da3
|
|
@ -684,11 +684,10 @@ func (d *DingTalkBotBiz) rechargeDailyReport(ctx context.Context, now time.Time,
|
|||
reports = []*bbxt.ReportRes{
|
||||
{
|
||||
ReportName: "我们的商品统计(电商充值系统)",
|
||||
Title: fmt.Sprintf("%s 电商充值系统我们的商品统计", now.Format("2006-01-02")),
|
||||
Title: res["title"].(string),
|
||||
Path: res["path"].(string),
|
||||
Url: res["url"].(string),
|
||||
Data: res["data"].([][]string),
|
||||
Desc: res["desc"].(string),
|
||||
},
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ import (
|
|||
"fmt"
|
||||
"math/rand"
|
||||
"path/filepath"
|
||||
"sort"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
|
|
@ -91,6 +92,7 @@ type StatisticsOursProductContext struct {
|
|||
ProductData []statistics_ours_product.StatisticsOursProductItem
|
||||
ImgUrl string
|
||||
ExcelData [][]string
|
||||
TotalLoss float64
|
||||
}
|
||||
|
||||
func (w *statisticsOursProduct) buildWorkflow(ctx context.Context) (compose.Runnable[*StatisticsOursProductWorkflowInput, map[string]any], error) {
|
||||
|
|
@ -122,7 +124,7 @@ func (w *statisticsOursProduct) formatContext(ctx context.Context, input *Statis
|
|||
Time: time.Now(),
|
||||
StartTime: startTime,
|
||||
EndTime: endTime,
|
||||
Title: fmt.Sprintf("截止 %s 我们的商品统计", endTimeStr),
|
||||
Title: fmt.Sprintf("截止 %s 亏损100以上我们的商品统计", endTimeStr),
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
|
@ -156,13 +158,13 @@ func (w *statisticsOursProduct) callStatisticsTool(ctx context.Context, state *S
|
|||
|
||||
func (w *statisticsOursProduct) generateExcelAndUpload(ctx context.Context, state *StatisticsOursProductContext) (*StatisticsOursProductContext, error) {
|
||||
// 1. 获取模板路径
|
||||
// cwd, _ := filepath.Abs("../../") // 单元测试用
|
||||
cwd, _ := filepath.Abs(".")
|
||||
cwd, _ := filepath.Abs("../../") // 单元测试用
|
||||
// cwd, _ := filepath.Abs(".")
|
||||
templatePath := filepath.Join(cwd, "tmpl", "excel_temp", "recharge_statistics_ours_product.xlsx")
|
||||
fileName := fmt.Sprintf("statistics_ours_product_%d%d", time.Now().Unix(), rand.Intn(1000))
|
||||
|
||||
// 2. 转换数据为 [][]string
|
||||
excelData := w.convertDataToExcelFormat(state.ProductData)
|
||||
excelData, totalLoss := w.convertDataToExcelFormat(state.ProductData)
|
||||
|
||||
// 3. 生成 Excel
|
||||
req := &excel_generator.ExcelGeneratorRequest{
|
||||
|
|
@ -191,13 +193,20 @@ func (w *statisticsOursProduct) generateExcelAndUpload(ctx context.Context, stat
|
|||
|
||||
state.ImgUrl = url
|
||||
state.ExcelData = excelData
|
||||
state.TotalLoss = totalLoss
|
||||
|
||||
return state, nil
|
||||
}
|
||||
|
||||
// convertDataToExcelFormat 将业务数据转换为 Excel 生成器需要的二维字符串数组
|
||||
func (w *statisticsOursProduct) convertDataToExcelFormat(data []statistics_ours_product.StatisticsOursProductItem) [][]string {
|
||||
var result [][]string
|
||||
func (w *statisticsOursProduct) convertDataToExcelFormat(data []statistics_ours_product.StatisticsOursProductItem) ([][]string, float64) {
|
||||
type sortType struct {
|
||||
Profit float64
|
||||
cells []string
|
||||
}
|
||||
|
||||
var sortList []sortType
|
||||
var totalLoss float64
|
||||
for _, item := range data {
|
||||
|
||||
var profitVal float64
|
||||
|
|
@ -219,6 +228,11 @@ func (w *statisticsOursProduct) convertDataToExcelFormat(data []statistics_ours_
|
|||
profitVal = 0
|
||||
}
|
||||
|
||||
// 累加总亏损
|
||||
if profitVal < 0 {
|
||||
totalLoss += profitVal
|
||||
}
|
||||
|
||||
// 过滤利润小于 -100 的记录
|
||||
if profitVal > -100 {
|
||||
continue
|
||||
|
|
@ -236,16 +250,31 @@ func (w *statisticsOursProduct) convertDataToExcelFormat(data []statistics_ours_
|
|||
fmt.Sprintf("%v", item.Profit),
|
||||
}
|
||||
|
||||
result = append(result, row)
|
||||
sortList = append(sortList, sortType{
|
||||
Profit: profitVal,
|
||||
cells: row,
|
||||
})
|
||||
}
|
||||
return result
|
||||
|
||||
// 排序
|
||||
sort.Slice(sortList, func(i, j int) bool {
|
||||
return sortList[i].Profit < sortList[j].Profit
|
||||
})
|
||||
|
||||
// 转换为 [][]string
|
||||
result := make([][]string, 0, len(sortList))
|
||||
for _, item := range sortList {
|
||||
result = append(result, item.cells)
|
||||
}
|
||||
|
||||
return result, totalLoss
|
||||
}
|
||||
|
||||
func (w *statisticsOursProduct) convertToMap(ctx context.Context, state *StatisticsOursProductContext) (map[string]any, error) {
|
||||
return map[string]any{
|
||||
"path": "",
|
||||
"url": state.ImgUrl,
|
||||
"data": state.ExcelData,
|
||||
"desc": state.Title,
|
||||
"path": "",
|
||||
"url": state.ImgUrl,
|
||||
"data": state.ExcelData,
|
||||
"title": state.Title + fmt.Sprintf("(总亏损 %.2f)", state.TotalLoss),
|
||||
}, nil
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue