140 lines
3.2 KiB
Go
140 lines
3.2 KiB
Go
|
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
|
||
|
}
|