You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
139 lines
3.2 KiB
139 lines
3.2 KiB
package service |
|
|
|
import ( |
|
"bytes" |
|
"encoding/csv" |
|
"strconv" |
|
"time" |
|
|
|
"go-common/app/admin/main/up-rating/model" |
|
) |
|
|
|
var ( |
|
_avCategory = map[int]string{ |
|
0: "默认", |
|
1: "动画", |
|
3: "音乐", |
|
129: "舞蹈", |
|
4: "游戏", |
|
36: "科技", |
|
160: "生活", |
|
119: "鬼畜", |
|
155: "时尚", |
|
23: "电影", |
|
11: "电视剧", |
|
13: "番剧", |
|
167: "国创", |
|
165: "广告", |
|
5: "娱乐", |
|
177: "纪录片", |
|
181: "影视", |
|
} |
|
|
|
_scoreField = map[model.ScoreType]string{ |
|
model.Magnetic: "magnetic_score", |
|
model.Creativity: "creativity_score", |
|
model.Influence: "influence_score", |
|
model.Credit: "credit_score", |
|
} |
|
) |
|
|
|
// FormatCSV format to csv data |
|
func formatCSV(records [][]string) (data []byte, err error) { |
|
buf := new(bytes.Buffer) |
|
|
|
// add utf bom |
|
if len(records) > 0 { |
|
buf.WriteString("\xEF\xBB\xBF") |
|
} |
|
|
|
w := csv.NewWriter(buf) |
|
err = w.WriteAll(records) |
|
if err != nil { |
|
return |
|
} |
|
|
|
data = buf.Bytes() |
|
return |
|
} |
|
|
|
func tagDesc(tagID int) string { |
|
if v, ok := _avCategory[tagID]; ok { |
|
return v |
|
} |
|
return _avCategory[0] |
|
} |
|
|
|
func formatScores(ratings []*model.RatingInfo) (data [][]string) { |
|
if len(ratings) <= 0 { |
|
return |
|
} |
|
data = make([][]string, len(ratings)+1) |
|
data[0] = []string{"月份", "UID", "昵称", "分区", "总分", "创作力", "影响力", "信用分", "投稿量", "粉丝量"} |
|
for i, v := range ratings { |
|
data[i+1] = []string{ |
|
v.Date, |
|
strconv.FormatInt(v.Mid, 10), |
|
v.NickName, |
|
tagDesc(v.TagID), |
|
strconv.FormatInt(v.MagneticScore, 10), |
|
strconv.FormatInt(v.CreativityScore, 10), |
|
strconv.FormatInt(v.InfluenceScore, 10), |
|
strconv.FormatInt(v.CreditScore, 10), |
|
strconv.FormatInt(v.TotalAvs, 10), |
|
strconv.FormatInt(v.TotalFans, 10), |
|
} |
|
} |
|
|
|
return |
|
} |
|
|
|
func scoreField(st model.ScoreType) string { |
|
if v, ok := _scoreField[st]; ok { |
|
return v |
|
} |
|
return _scoreField[model.Magnetic] |
|
} |
|
|
|
func cDateStr(cdate time.Time) string { |
|
return cdate.Format("2006-01-02") |
|
} |
|
|
|
func prevComputation(t time.Time) time.Time { |
|
return time.Date(t.Year(), t.Month()-1, 1, 0, 0, 0, 0, time.Local) |
|
} |
|
|
|
func formatStatis(list []*model.RatingStatis, ctype int64) (data [][]string) { |
|
if len(list) <= 0 { |
|
return |
|
} |
|
data = make([][]string, len(list)+1) |
|
data[0] = []string{"分数段", "本月", "占比", "对比", "占比", "平均分"} |
|
switch ctype { |
|
case 0: |
|
data[0] = append(data[0], []string{"创造力", "影响力", "信用分"}...) |
|
case 1: |
|
data[0] = append(data[0], []string{"平均稿件数", "平均播放量", "平均互动量"}...) |
|
case 2: |
|
data[0] = append(data[0], []string{"平均粉丝量"}...) |
|
} |
|
for i, v := range list { |
|
data[i+1] = []string{ |
|
v.Tips, |
|
strconv.FormatInt(v.Ups, 10), |
|
v.Proportion, |
|
strconv.FormatInt(v.Compare, 10), |
|
v.ComparePropor, |
|
strconv.FormatInt(v.Score, 10), |
|
} |
|
switch ctype { |
|
case 0: |
|
data[i+1] = append(data[i+1], []string{strconv.FormatInt(v.CreativityScore, 10), strconv.FormatInt(v.InfluenceScore, 10), strconv.FormatInt(v.CreditScore, 10)}...) |
|
case 1: |
|
data[i+1] = append(data[i+1], []string{strconv.FormatInt(v.Avs, 10), strconv.FormatInt(v.Play, 10), strconv.FormatInt(v.Coin, 10)}...) |
|
case 2: |
|
data[i+1] = append(data[i+1], []string{strconv.FormatInt(v.Fans, 10)}...) |
|
} |
|
} |
|
return |
|
}
|
|
|