377 lines
9.9 KiB
Go
377 lines
9.9 KiB
Go
|
package upcrmmodel
|
|||
|
|
|||
|
import (
|
|||
|
"go-common/app/admin/main/up/model/datamodel"
|
|||
|
"go-common/app/admin/main/up/util"
|
|||
|
"go-common/library/time"
|
|||
|
xtime "time"
|
|||
|
)
|
|||
|
|
|||
|
const (
|
|||
|
//CompareTypeNothing 0
|
|||
|
CompareTypeNothing = 0
|
|||
|
//CompareType7day 1
|
|||
|
CompareType7day = 1
|
|||
|
//CompareType30day 2
|
|||
|
CompareType30day = 2
|
|||
|
//CompareTypeMonthFirstDay 3
|
|||
|
CompareTypeMonthFirstDay = 3
|
|||
|
)
|
|||
|
|
|||
|
const (
|
|||
|
|
|||
|
//AttrBitVideo video
|
|||
|
// see http://info.bilibili.co/pages/viewpage.action?pageId=9830931
|
|||
|
AttrBitVideo = 0
|
|||
|
//AttrBitAudio audio
|
|||
|
AttrBitAudio = 1
|
|||
|
//AttrBitArticle article
|
|||
|
AttrBitArticle = 2
|
|||
|
//AttrBitPhoto photo
|
|||
|
AttrBitPhoto = 3
|
|||
|
//AttrBitSign sign
|
|||
|
AttrBitSign = 4
|
|||
|
//AttrBitGrowup growup
|
|||
|
AttrBitGrowup = 5
|
|||
|
//AttrBitVerify verify
|
|||
|
AttrBitVerify = 6
|
|||
|
)
|
|||
|
|
|||
|
var (
|
|||
|
//AttrGroup1 筛选用第一组attr
|
|||
|
AttrGroup1 = map[int]int{AttrBitVideo: 0, AttrBitAudio: 0, AttrBitArticle: 0, AttrBitPhoto: 0}
|
|||
|
//AttrGroup2 筛选用第二组attr, 两组之间的关系是与
|
|||
|
AttrGroup2 = map[int]int{AttrBitSign: 0, AttrBitGrowup: 0, AttrBitVerify: 0}
|
|||
|
)
|
|||
|
|
|||
|
// ScoreQueryArgs ------------------------- requests ------------------------
|
|||
|
type ScoreQueryArgs struct {
|
|||
|
ScoreType int `form:"score_type"`
|
|||
|
CompareType int `form:"compare_type"`
|
|||
|
Export string `form:"export"`
|
|||
|
}
|
|||
|
|
|||
|
//ScoreQueryUpArgs arg
|
|||
|
type ScoreQueryUpArgs struct {
|
|||
|
Mid int64 `form:"mid" validate:"required"`
|
|||
|
Date string `form:"date"`
|
|||
|
}
|
|||
|
|
|||
|
//ScoreQueryUpHistoryArgs arg
|
|||
|
type ScoreQueryUpHistoryArgs struct {
|
|||
|
Mid int64 `form:"mid" validate:"required"`
|
|||
|
ScoreType int `form:"score_type"`
|
|||
|
Day int `form:"day" default:"7"`
|
|||
|
Date string `form:"date"`
|
|||
|
}
|
|||
|
|
|||
|
//PlayQueryArgs arg
|
|||
|
type PlayQueryArgs struct {
|
|||
|
Mid int64 `form:"mid" validate:"required"`
|
|||
|
BusinessType int `form:"business_type"`
|
|||
|
}
|
|||
|
|
|||
|
//InfoQueryArgs arg
|
|||
|
type InfoQueryArgs struct {
|
|||
|
Mid int64 `form:"mid" validate:"required"`
|
|||
|
}
|
|||
|
|
|||
|
//CreditLogQueryArgs arg
|
|||
|
type CreditLogQueryArgs struct {
|
|||
|
Mid int64 `form:"mid" validate:"required"`
|
|||
|
Limit int `form:"limit"`
|
|||
|
}
|
|||
|
|
|||
|
//UpRankQueryArgs arg
|
|||
|
type UpRankQueryArgs struct {
|
|||
|
Type int `form:"type" validate:"required"`
|
|||
|
Page int `form:"page"` // (从1开始)
|
|||
|
Size int `form:"size"` // 1 ~ 50
|
|||
|
}
|
|||
|
|
|||
|
//InfoAccountInfoArgs arg
|
|||
|
type InfoAccountInfoArgs struct {
|
|||
|
Mids string `form:"mids" validate:"required"`
|
|||
|
}
|
|||
|
|
|||
|
//InfoSearchArgs arg
|
|||
|
type InfoSearchArgs struct {
|
|||
|
AccountState int `json:"account_state"`
|
|||
|
Activity int `json:"activity"`
|
|||
|
Attrs UpAttr `json:"attrs"`
|
|||
|
FirstDateBegin string `json:"first_date_begin"`
|
|||
|
FirstDateEnd string `json:"first_date_end"`
|
|||
|
Mid int64 `json:"mid"`
|
|||
|
Order struct {
|
|||
|
Field string `json:"field"`
|
|||
|
Order string `json:"order"`
|
|||
|
}
|
|||
|
Page int `json:"page"`
|
|||
|
Size int `json:"size"`
|
|||
|
}
|
|||
|
|
|||
|
//TestGetViewBaseArgs test arg
|
|||
|
type TestGetViewBaseArgs struct {
|
|||
|
Mid int64 `form:"mid" validate:"required"`
|
|||
|
}
|
|||
|
|
|||
|
// ------------------------- results ------------------------
|
|||
|
|
|||
|
//ScoreSection struct
|
|||
|
type ScoreSection struct {
|
|||
|
Section int `json:"-"`
|
|||
|
Value int
|
|||
|
Percent int
|
|||
|
}
|
|||
|
|
|||
|
//ScoreQueryResult result
|
|||
|
type ScoreQueryResult struct {
|
|||
|
CompareAxis []ScoreSection `json:"compareAxis"`
|
|||
|
XAxis []string `json:"xAxis"`
|
|||
|
YAxis []ScoreSection `json:"yAxis"`
|
|||
|
}
|
|||
|
|
|||
|
//NewEmptyScoreQueryResult make new result
|
|||
|
func NewEmptyScoreQueryResult() ScoreQueryResult {
|
|||
|
return ScoreQueryResult{
|
|||
|
CompareAxis: []ScoreSection{},
|
|||
|
XAxis: []string{},
|
|||
|
YAxis: []ScoreSection{},
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//ScoreInfo struct
|
|||
|
type ScoreInfo struct {
|
|||
|
Current int `json:"current"`
|
|||
|
DiffLastDay int `json:"diff_last_day"`
|
|||
|
}
|
|||
|
|
|||
|
//ScoreQueryUpResult result
|
|||
|
type ScoreQueryUpResult struct {
|
|||
|
PrScore ScoreInfo
|
|||
|
QualityScore ScoreInfo
|
|||
|
CreditScore ScoreInfo
|
|||
|
Date time.Time
|
|||
|
}
|
|||
|
|
|||
|
//ScoreHistoryInfo struct
|
|||
|
type ScoreHistoryInfo struct {
|
|||
|
Type int `json:"type"`
|
|||
|
Score []int `json:"score"`
|
|||
|
Date []time.Time `json:"date"`
|
|||
|
}
|
|||
|
|
|||
|
//ScoreQueryUpHistoryResult result
|
|||
|
type ScoreQueryUpHistoryResult struct {
|
|||
|
ScoreData []ScoreHistoryInfo `json:"score_data"`
|
|||
|
}
|
|||
|
|
|||
|
//PlayInfo struct
|
|||
|
type PlayInfo struct {
|
|||
|
Type int `json:"type"`
|
|||
|
PlayCountAccumulate int64 `json:"play_count_accumulate"`
|
|||
|
PlayCountAvg int64 `json:"play_count_avg"`
|
|||
|
PlayCountAvg90Day int64 `json:"play_count_avg_90day"`
|
|||
|
}
|
|||
|
|
|||
|
//PlayQueryResult result
|
|||
|
type PlayQueryResult struct {
|
|||
|
ArticleCount30Day int `json:"article_count_30day"`
|
|||
|
ArticleCountAccumulate int `json:"article_count_accumulate"`
|
|||
|
BusinessData []PlayInfo `json:"business_data"`
|
|||
|
}
|
|||
|
|
|||
|
//CastUpPlayInfoToPlayInfo cast
|
|||
|
func CastUpPlayInfoToPlayInfo(info UpPlayInfo) (r PlayInfo) {
|
|||
|
r.Type = int(info.BusinessType)
|
|||
|
r.PlayCountAccumulate = info.PlayCountAccumulate
|
|||
|
r.PlayCountAvg = info.PlayCountAccumulate / info.ArticleCount
|
|||
|
r.PlayCountAvg90Day = info.PlayCount90Day / info.ArticleCount
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
//UpAttr struct
|
|||
|
type UpAttr struct {
|
|||
|
AttrVerify int `json:"attr_verify"`
|
|||
|
AttrVideo int `json:"attr_video"`
|
|||
|
AttrAudio int `json:"attr_audio"`
|
|||
|
AttrArticle int `json:"attr_article"`
|
|||
|
AttrPhoto int `json:"attr_photo"`
|
|||
|
AttrSign int `json:"attr_sign"`
|
|||
|
AttrGrowup int `json:"attr_growup"`
|
|||
|
}
|
|||
|
|
|||
|
//InfoQueryResult result
|
|||
|
type InfoQueryResult struct {
|
|||
|
ID uint32 `json:"-"`
|
|||
|
Mid int64 `json:"mid"`
|
|||
|
Name string `json:"name"`
|
|||
|
Sex int8 `json:"sex"`
|
|||
|
JoinTime time.Time `json:"join_time"`
|
|||
|
FirstUpTime time.Time `json:"first_up_time"`
|
|||
|
Level int16 `json:"level"`
|
|||
|
FansCount int `json:"fans_count"`
|
|||
|
AccountState int8 `json:"account_state"`
|
|||
|
Activity int `json:"activity"`
|
|||
|
ArticleCount30day int `json:"article_count_30day"`
|
|||
|
ArticleCountAccumulate int `json:"article_count_accumulate"`
|
|||
|
VerifyType int8 `json:"verify_type"`
|
|||
|
BusinessType int8 `json:"business_type"`
|
|||
|
CreditScore int `json:"credit_score"`
|
|||
|
PrScore int `json:"pr_score"`
|
|||
|
QualityScore int `json:"quality_score"`
|
|||
|
ActiveTid int64 `json:"active_tid"`
|
|||
|
ActiveSubtid int64 `json:"active_subtid"`
|
|||
|
Region string `json:"region"`
|
|||
|
Province string `json:"province"`
|
|||
|
Age int `json:"age"`
|
|||
|
Attr int `json:"-"`
|
|||
|
Attrs UpAttr `json:"attrs"`
|
|||
|
Birthday xtime.Time `json:"-"`
|
|||
|
}
|
|||
|
|
|||
|
//CopyFromBaseInfo copy
|
|||
|
func (i *InfoQueryResult) CopyFromBaseInfo(info UpBaseInfo) {
|
|||
|
i.ID = info.ID
|
|||
|
i.Mid = info.Mid
|
|||
|
i.Name = info.Name
|
|||
|
i.Sex = info.Sex
|
|||
|
i.JoinTime = info.JoinTime
|
|||
|
i.FirstUpTime = info.FirstUpTime
|
|||
|
i.Level = info.Level
|
|||
|
i.FansCount = info.FansCount
|
|||
|
i.AccountState = info.AccountState
|
|||
|
i.ArticleCount30day = info.ArticleCount30day
|
|||
|
i.ArticleCountAccumulate = info.ArticleCountAccumulate
|
|||
|
i.VerifyType = info.VerifyType
|
|||
|
i.BusinessType = info.BusinessType
|
|||
|
i.CreditScore = info.CreditScore
|
|||
|
i.ActiveTid = info.ActiveTid
|
|||
|
i.Birthday = info.Birthday
|
|||
|
i.Region = info.ActiveCity
|
|||
|
i.Province = info.ActiveProvince
|
|||
|
i.Attr = info.Attr
|
|||
|
i.PrScore = info.PrScore
|
|||
|
i.QualityScore = info.QualityScore
|
|||
|
i.Activity = info.Activity
|
|||
|
}
|
|||
|
|
|||
|
// CalculateAttr 根据attr来计算各个attr_xx的属性
|
|||
|
func (i *InfoQueryResult) CalculateAttr() {
|
|||
|
// todo 计算attr属性
|
|||
|
if util.IsBitSet(i.Attr, AttrBitVideo) {
|
|||
|
i.Attrs.AttrVideo = 1
|
|||
|
}
|
|||
|
if util.IsBitSet(i.Attr, AttrBitAudio) {
|
|||
|
i.Attrs.AttrAudio = 1
|
|||
|
}
|
|||
|
if util.IsBitSet(i.Attr, AttrBitArticle) {
|
|||
|
i.Attrs.AttrArticle = 1
|
|||
|
}
|
|||
|
if util.IsBitSet(i.Attr, AttrBitPhoto) {
|
|||
|
i.Attrs.AttrPhoto = 1
|
|||
|
}
|
|||
|
if util.IsBitSet(i.Attr, AttrBitSign) {
|
|||
|
i.Attrs.AttrSign = 1
|
|||
|
}
|
|||
|
if util.IsBitSet(i.Attr, AttrBitGrowup) {
|
|||
|
i.Attrs.AttrGrowup = 1
|
|||
|
}
|
|||
|
if util.IsBitSet(i.Attr, AttrBitVerify) {
|
|||
|
i.Attrs.AttrVerify = 1
|
|||
|
}
|
|||
|
|
|||
|
if !i.Birthday.IsZero() {
|
|||
|
i.Age = int(xtime.Since(i.Birthday).Hours() / float64(24*365))
|
|||
|
if i.Age < 0 {
|
|||
|
i.Age = 0
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//CreditLogInfo struct
|
|||
|
type CreditLogInfo struct {
|
|||
|
Time time.Time `json:"time"`
|
|||
|
Log string `json:"log"`
|
|||
|
}
|
|||
|
|
|||
|
//CreditLogUpResult result
|
|||
|
type CreditLogUpResult struct {
|
|||
|
Logs []CreditLogInfo `json:"logs"`
|
|||
|
}
|
|||
|
|
|||
|
//UpRankInfo struct
|
|||
|
type UpRankInfo struct {
|
|||
|
InfoQueryResult
|
|||
|
Rank int `json:"rank"`
|
|||
|
Value uint `json:"value"`
|
|||
|
Value2 int `json:"value_2"`
|
|||
|
CompleteTime time.Time `json:"complete_time"`
|
|||
|
RankType int16 `json:"-"`
|
|||
|
}
|
|||
|
|
|||
|
//CopyFromUpRank copy
|
|||
|
func (u *UpRankInfo) CopyFromUpRank(upRank *UpRank) {
|
|||
|
u.Value = upRank.Value
|
|||
|
u.Value2 = upRank.Value2
|
|||
|
u.RankType = upRank.Type
|
|||
|
}
|
|||
|
|
|||
|
//UpRankQueryResult result
|
|||
|
type UpRankQueryResult struct {
|
|||
|
Result []*UpRankInfo `json:"result"`
|
|||
|
Date time.Time `json:"date"`
|
|||
|
PageInfo
|
|||
|
}
|
|||
|
|
|||
|
//PageInfo page info
|
|||
|
type PageInfo struct {
|
|||
|
TotalCount int `json:"total_count"`
|
|||
|
Size int `json:"size"`
|
|||
|
Page int `json:"page"`
|
|||
|
}
|
|||
|
|
|||
|
//InfoSearchResult result
|
|||
|
type InfoSearchResult struct {
|
|||
|
Result []*InfoQueryResult `json:"result"`
|
|||
|
PageInfo
|
|||
|
}
|
|||
|
|
|||
|
//UpInfoWithViewerData up data with view data
|
|||
|
type UpInfoWithViewerData struct {
|
|||
|
Mid int64 `json:"mid"`
|
|||
|
UpBaseInfo *InfoQueryResult `json:"up_base_info"`
|
|||
|
ViewerTrend *datamodel.ViewerTrendInfo `json:"viewer_trend"`
|
|||
|
ViewerArea *datamodel.ViewerAreaInfo `json:"viewer_area"`
|
|||
|
ViewerBase *datamodel.ViewerBaseInfo `json:"viewer_base"`
|
|||
|
UpPlayInfo *UpPlayInfo `json:"up_play_info"`
|
|||
|
}
|
|||
|
|
|||
|
//UpInfoWithViewerResult info result
|
|||
|
type UpInfoWithViewerResult struct {
|
|||
|
Result []*UpInfoWithViewerData `json:"result"`
|
|||
|
PageInfo
|
|||
|
}
|
|||
|
|
|||
|
// -------------
|
|||
|
|
|||
|
const (
|
|||
|
// FlagUpBaseData up base info
|
|||
|
FlagUpBaseData = 1
|
|||
|
// FlagUpPlayData up play info
|
|||
|
FlagUpPlayData = 1 << 1
|
|||
|
// FlagViewData view base data flag
|
|||
|
FlagViewData = 1 << 2
|
|||
|
)
|
|||
|
|
|||
|
//UpInfoWithViewerArg arg
|
|||
|
type UpInfoWithViewerArg struct {
|
|||
|
Mids string `form:"mids"`
|
|||
|
Sort string `form:"sort" default:"fans_count"`
|
|||
|
Order string `form:"order" default:"desc"`
|
|||
|
Page int `form:"page" default:"1"`
|
|||
|
Size int `form:"size" default:"20"`
|
|||
|
// 需要的信息
|
|||
|
Flag int `form:"flag" default:"0"`
|
|||
|
}
|