123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- package service
- import (
- "context"
- "encoding/csv"
- "fmt"
- "io"
- "os"
- "sort"
- "strconv"
- "strings"
- "time"
- "go-common/app/job/main/growup/model"
- "go-common/library/log"
- )
- const (
- _topTen = "%d年%d月%d日UP主,稿件收入top 10 统计"
- )
- func (s *Service) execSendTopTen(c context.Context, date time.Time) (body string, err error) {
- var ups []*model.MIDInfo
- ups, err = s.getTopTenUps(c, date)
- if err != nil {
- log.Error("s.execSendTopTen s.getTopTenUps error(%v)", err)
- return
- }
- avs, err := s.getTopTenAVs(c, date)
- if err != nil {
- log.Error("s.execSendTopTen s.getTopTenAVs error(%v)", err)
- return
- }
- data := [][]string{
- {fmt.Sprintf(_topTen, date.Year(), date.Month(), date.Day())},
- {"日期", "名次", "UID", "昵称", "新增收入(元)", "累计收入(元)"},
- }
- for i, up := range ups {
- a := []string{
- fmt.Sprintf("%d-%d-%d", date.Year(), date.Month(), date.Day()), strconv.Itoa(i + 1), strconv.FormatInt(up.MID, 10), up.NickName, strconv.FormatFloat(float64(up.Income)/100, 'f', 2, 32), strconv.FormatFloat(float64(up.TotalIncome)/100, 'f', 2, 32),
- }
- data = append(data, a)
- }
- t := []string{"日期", "名次", "avid", "UID", "昵称", "新增收入(元)", "累计收入(元)"}
- data = append(data, t)
- for i, av := range avs {
- a := []string{
- fmt.Sprintf("%d-%d-%d", date.Year(), date.Month(), date.Day()), strconv.Itoa(i + 1), strconv.FormatInt(av.AVID, 10), strconv.FormatInt(av.MID, 10), av.NickName, strconv.FormatFloat(float64(av.Income)/100, 'f', 2, 32), strconv.FormatFloat(float64(av.TotalIncome)/100, 'f', 2, 32),
- }
- data = append(data, a)
- }
- f, err := os.Create("top10.csv")
- if err != nil {
- log.Error("s.execSendTopTen create top10.csv error(%v)", err)
- return
- }
- defer f.Close()
- w := csv.NewWriter(f)
- w.WriteAll(data)
- w.Flush()
- rfile, err := os.Open("top10.csv")
- if err != nil {
- log.Error("s.execSendTopTen open top10.csv error(%v)", err)
- return
- }
- defer rfile.Close()
- r := csv.NewReader(rfile)
- for {
- var strs []string
- strs, err = r.Read()
- if err == io.EOF {
- break
- }
- body += fmt.Sprintf("<tr><td>%s</td></tr>", strings.Join(strs, "</td><td>"))
- }
- err = os.Remove("top10.csv")
- if err != nil {
- log.Error("s.execSendTopTen remove top10.csv error(%v)", err)
- }
- return
- }
- func (s *Service) getTopTenUps(c context.Context, date time.Time) (infos []*model.MIDInfo, err error) {
- ups, err := s.getUpIncome(c, date)
- if err != nil {
- log.Error("s.getTopTenUps s.getUpIncome date(%v) error(%v)", date, err)
- return
- }
- infos = make([]*model.MIDInfo, 0)
- sort.SliceStable(ups, func(i, j int) bool {
- return ups[i].Income > ups[j].Income
- })
- cnt := 10
- if len(ups) < 10 {
- cnt = len(ups)
- }
- for i := 0; i < cnt; i++ {
- a := &model.MIDInfo{MID: ups[i].MID, Income: ups[i].Income, TotalIncome: ups[i].TotalIncome}
- a.NickName, err = s.dao.GetNickname(c, a.MID)
- if err != nil {
- log.Error("s.getTopTenUps dao.GetNickname mid(%v) error(%v)", a.MID, err)
- return
- }
- infos = append(infos, a)
- }
- return
- }
- func (s *Service) getTopTenAVs(c context.Context, date time.Time) (infos []*model.AVIDInfo, err error) {
- avs, err := s.getAvIncome(c, date)
- if err != nil {
- log.Error("s.getTopTenAVs s.getAvIncome error(%v)", err)
- return
- }
- sort.SliceStable(avs, func(i, j int) bool {
- return avs[i].Income > avs[j].Income
- })
- infos = make([]*model.AVIDInfo, 0)
- cnt := 10
- if len(avs) < 10 {
- cnt = len(avs)
- }
- for i := 0; i < cnt; i++ {
- a := &model.AVIDInfo{AVID: avs[i].AVID, MID: avs[i].MID, Income: avs[i].Income, TotalIncome: avs[i].TotalIncome}
- a.NickName, err = s.dao.GetNickname(c, a.MID)
- if err != nil {
- log.Error("s.getTopTenAVs dao.GetNickname mid(%v) error(%v)", a.MID, err)
- return
- }
- infos = append(infos, a)
- }
- return
- }
|