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.
376 lines
9.9 KiB
376 lines
9.9 KiB
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"` |
|
}
|
|
|