package model import ( "encoding/csv" "fmt" "time" dtmdl "go-common/app/interface/main/mcn/model/datamodel" xtime "go-common/library/time" ) // Permits . type Permits struct { BasePermission uint8 `form:"base_permission" json:"base_permission" validate:"min=0,max=1"` // 基础权限 DataPermission uint8 `form:"data_permission" json:"data_permission" validate:"min=0,max=1"` // 数据权限 RecPermission uint8 `form:"rec_permission" json:"rec_permission" validate:"min=0,max=1"` // 推荐权限 DepartPermission uint8 `form:"depart_permission" json:"depart_permission" validate:"min=0,max=1"` // 起飞权限 } // SetAttrPermitVal set struct from permission func (p *Permits) SetAttrPermitVal(val uint32) { p.BasePermission = AttrVal(val, uint(AttrBasePermitBit)) p.DataPermission = AttrVal(val, uint(AttrDataPermitBit)) p.RecPermission = AttrVal(val, uint(AttrRecPermitBit)) p.DepartPermission = AttrVal(val, uint(AttrDepartPermitBit)) } // GetAttrPermitVal . func (p *Permits) GetAttrPermitVal() (permission uint32) { permission = AttrSet(permission, p.BasePermission, uint(AttrBasePermitBit)) permission = AttrSet(permission, p.DataPermission, uint(AttrDataPermitBit)) permission = AttrSet(permission, p.RecPermission, uint(AttrRecPermitBit)) permission = AttrSet(permission, p.DepartPermission, uint(AttrDepartPermitBit)) return } // AttrSet set Permission. func AttrSet(dest uint32, bitValue uint8, bit uint) (res uint32) { res = dest&(^(1 << bit)) | (uint32(bitValue) << bit) return } // AttrVal get Permission. func AttrVal(v uint32, bit uint) uint8 { return uint8((v >> bit) & 1) } // MCNSignInfoReply . type MCNSignInfoReply struct { SignID int64 `json:"sign_id"` McnMid int64 `json:"mcn_mid"` McnName string `json:"mcn_name"` CompanyName string `json:"company_name"` CompanyLicenseID string `json:"company_license_id"` CompanyLicenseLink string `json:"company_license_link"` ContractLink string `json:"contract_link"` ContactName string `json:"contact_name"` ContactTitle string `json:"contact_title"` ContactPhone string `json:"contact_phone"` ContactIdcard string `json:"contact_idcard"` BeginDate xtime.Time `json:"begin_date"` EndDate xtime.Time `json:"end_date"` State MCNSignState `json:"state"` RejectTime xtime.Time `json:"reject_time"` RejectReason string `json:"reject_reason"` Ctime xtime.Time `json:"ctime"` Mtime xtime.Time `json:"mtime"` SignPayInfo []*SignPayInfoReply `json:"sign_pay_info"` Permission uint32 `json:"permission"` Permits *Permits `json:"permits"` // 权限集合 } // AttrPermitVal get Permission all. func (n *MCNSignInfoReply) AttrPermitVal() { n.Permits = &Permits{} n.Permits.SetAttrPermitVal(n.Permission) } // MCNSignListReply . type MCNSignListReply struct { List []*MCNSignInfoReply `json:"result"` PageResult } // SignPayInfoReply . type SignPayInfoReply struct { SignPayID int64 `json:"sign_pay_id,omitempty"` McnMid int64 `json:"mcn_mid"` SignID int64 `json:"sign_id,omitempty"` State MCNPayState `json:"state"` DueDate xtime.Time `json:"due_date"` PayValue int64 `json:"pay_value"` // thousand bit } // MCNUPInfoReply . type MCNUPInfoReply struct { SignUpID int64 `json:"sign_up_id"` SignID int64 `json:"sign_id"` McnMid int64 `json:"mcn_mid"` UpMid int64 `json:"up_mid"` BeginDate xtime.Time `json:"begin_date"` EndDate xtime.Time `json:"end_date"` ContractLink string `json:"contract_link"` UpAuthLink string `json:"up_auth_link"` RejectTime xtime.Time `json:"reject_time"` RejectReason string `json:"reject_reason"` State MCNUPState `json:"state"` StateChangeTime xtime.Time `json:"state_change_time"` Ctime xtime.Time `json:"ctime"` Mtime xtime.Time `json:"mtime"` UpName string `json:"up_name"` McnName string `json:"mcn_name"` ActiveTid int16 `json:"active_tid"` TpName string `json:"type_name"` FansCount int64 `json:"fans_count"` FansCountActive int64 `json:"fans_count_active"` FansIncreaseAccumulate int64 `json:"fans_increase_accumulate"` ArchiveCount int64 `json:"archive_count"` PlayCount int64 `json:"play_count"` UPType int8 `json:"up_type"` SiteLink string `json:"site_link"` ConfirmTime xtime.Time `json:"confirm_time"` PubPrice int64 `json:"publication_price"` Permission uint32 `json:"permission"` Permits *Permits `json:"permits"` // 权限集合 } // AttrPermitVal get Permission all. func (n *MCNUPInfoReply) AttrPermitVal() { n.Permits = &Permits{} n.Permits.SetAttrPermitVal(n.Permission) } // MCNUPReviewListReply . type MCNUPReviewListReply struct { List []*MCNUPInfoReply `json:"result"` PageResult } // UpBaseInfo . type UpBaseInfo struct { Mid int64 `json:"mid"` FansCount int64 `json:"fans_count"` ActiveTid int16 `json:"active_tid"` ArticleCountAccumulate int64 `json:"article_count_accumulate"` } // UpPlayInfo . type UpPlayInfo struct { Mid int64 `json:"mid"` ArticleCount int64 `json:"article_count"` PlayCountAccumulate int64 `json:"play_count_accumulate"` PlayCountAverage int64 `json:"play_count_average"` } // MCNListReply struct . type MCNListReply struct { List []*MCNListOne `json:"result"` PageResult } // MCNListOne struct . type MCNListOne struct { ID int64 `json:"id"` MCNMID int64 `json:"mcn_mid"` MCNName string `json:"mcn_name"` UPCount int64 `json:"up_count"` FansCountAccumulate int64 `json:"fans_count_accumulate"` FansCountOnlineAccumulate int64 `json:"fans_count_online_accumulate"` FansCountRealAccumulate int64 `json:"fans_count_real_accumulate"` FansCountCheatAccumulate int64 `json:"fans_count_cheat_accumulate"` GenerateDate xtime.Time `json:"generate_date"` BeginDate xtime.Time `json:"begin_date"` EndDate xtime.Time `json:"end_date"` State MCNSignState `json:"state"` PayInfos []*SignPayInfoReply `json:"pay_infos"` Permission uint32 `json:"permission"` Permits *Permits `json:"permits"` // 权限集合 } // AttrPermitVal get Permission all. func (n *MCNListOne) AttrPermitVal() { n.Permits = &Permits{} n.Permits.SetAttrPermitVal(n.Permission) } // MCNInfoReply struct . type MCNInfoReply struct { MCNSign UPCount int64 `json:"up_count"` ArchiveCountAccumulate int64 `json:"archive_count_accumulate"` PlayCountAccumulate int64 `json:"play_count_accumulate"` FansCountAccumulate int64 `json:"fans_count_accumulate"` FansCountOnline int64 `json:"fans_count_online"` FansCountReal int64 `json:"fans_count_real"` FansCountCheat int64 `json:"fans_count_cheat"` FansCountRealAccumulate int64 `json:"fans_count_real_accumulate"` FansCountOnlineAccumulate int64 `json:"fans_count_online_accumulate"` } // MCNUPListReply struct . type MCNUPListReply struct { List []*MCNUPInfoReply `json:"result"` PageResult } // MCNCheatReply struct . type MCNCheatReply struct { SignID int64 `json:"sign_id"` MCNMID int64 `json:"mcn_mid"` MCNName string `json:"mcn_name"` UpMID int64 `json:"up_mid"` UpName string `json:"up_name"` FansCountCheatAccumulate int64 `json:"fans_count_cheat_accumulate"` FansCountCheatIncreaseDay int64 `json:"fans_count_cheat_increase_day"` FansCountReal int64 `json:"fans_count_real"` FansCountCheatCleanedAccumulate int64 `json:"fans_count_cheat_cleaned_accumulate"` } // MCNCheatListReply struct. type MCNCheatListReply struct { List []*MCNCheatReply `json:"result"` PageResult } // MCNCheatUPReply struct . type MCNCheatUPReply struct { GenerateDate xtime.Time `json:"generate_date"` FansCountCheatIncreaseDay int64 `json:"fans_count_cheat_increase_day"` MCNMID int64 `json:"mcn_mid"` MCNName string `json:"mcn_name"` SignID int64 `json:"sign_id"` FansCountCheatAccumulate int64 `json:"fans_count_cheat_accumulate"` FansCountCheatCleanedAccumulate int64 `json:"fans_count_cheat_cleaned_accumulate"` FansCountReal int64 `json:"fans_count_real"` } // MCNCheatUPListReply struct . type MCNCheatUPListReply struct { List []*MCNCheatUPReply `json:"result"` PageResult } // MCNImportUPInfoReply struct . type MCNImportUPInfoReply struct { ID int64 `json:"id"` MCNMID int64 `json:"mcn_mid"` SignID int64 `json:"sign_id"` UpMID int64 `json:"up_mid"` UpName string `json:"up_name"` StandardFansDate int64 `json:"standard_fans_date"` StandardArchiveCount int64 `json:"standard_archive_count"` StandardFansCount int64 `json:"standard_fans_count"` IsReward int8 `json:"is_reward"` JoinTime int32 `json:"join_time"` } // MCNIncreaseReply struct . type MCNIncreaseReply struct { ID int64 `json:"id"` SignID int64 `json:"sign_id"` DataType int8 `json:"data_type"` ActiveTID int64 `json:"active_tid"` GenerateDate xtime.Time `json:"generate_date"` UPCount int64 `json:"up_count"` FansCountOnlineAccumulate int64 `json:"fans_count_online_accumulate"` FansCountRealAccumulate int64 `json:"fans_count_real_accumulate"` FansCountCheatAccumulate int64 `json:"fans_count_cheat_accumulate"` FansCountIncreaseDay int64 `json:"fans_count_increase_day"` ArchiveCountAccumulate int64 `json:"archive_count_accumulate"` ArchiveCountDay int64 `json:"archive_count_day"` PlayCountAccumulate int64 `json:"play_count_accumulate"` PlayCountIncreaseDay int64 `json:"play_count_increase_day"` FansCountAccumulate int64 `json:"fans_count_accumulate"` } // MCNIncreaseListReply struct . type MCNIncreaseListReply struct { List []*MCNIncreaseReply `json:"result"` PageResult } //GetFileName get file name func (q *MCNListReply) GetFileName() string { return fmt.Sprintf("%s_%s.csv", "MCN列表", time.Now().Format(dateTimeFmt)) } //ToCsv to buffer func (q *MCNListReply) ToCsv(writer *csv.Writer) { var title = []string{ "ID", "MCN_ID", "MCN_昵称", "签约UP主数", "累计粉丝数", "累计线上涨粉数", "累计实际粉丝数", "累计作弊粉丝数", "签约周期", "付款周期", "账号状态", } writer.Write(title) if q == nil { return } for _, v := range q.List { var record []string var payString string if len(v.PayInfos) > 0 { for _, pv := range v.PayInfos { payString += fmt.Sprintf("%s-%d-%s ", pv.DueDate.Time().Format(TimeFormatDay), pv.PayValue/1000, pv.State.String()) } } record = append(record, intFormat(v.ID), intFormat(v.MCNMID), v.MCNName, intFormat(v.UPCount), intFormat(v.FansCountAccumulate), intFormat(v.FansCountOnlineAccumulate), intFormat(v.FansCountRealAccumulate), intFormat(v.FansCountCheatAccumulate), fmt.Sprintf("%s-%s", v.BeginDate.Time().Format(TimeFormatDay), v.EndDate.Time().Format(TimeFormatDay)), payString, v.State.String(), ) writer.Write(record) } } //GetFileName get file name func (q *MCNUPListReply) GetFileName() string { return fmt.Sprintf("%s_%s.csv", "MCN UP主列表", time.Now().Format(dateTimeFmt)) } //ToCsv to buffer func (q *MCNUPListReply) ToCsv(writer *csv.Writer) { var title = []string{ "ID", "UP主UID", "UP主昵称", "粉丝总量", "活跃粉丝量", "粉数增长量", "稿件量", "播放量", "分区", "账号状态", "签约周期", } writer.Write(title) if q == nil { return } for _, v := range q.List { var record []string record = append(record, intFormat(v.SignUpID), intFormat(v.UpMid), v.UpName, intFormat(v.FansCount), intFormat(v.FansCountActive), intFormat(v.FansIncreaseAccumulate), intFormat(v.ArchiveCount), intFormat(v.PlayCount), v.TpName, v.State.String(), fmt.Sprintf("%s-%s", v.BeginDate.Time().Format(TimeFormatDay), v.EndDate.Time().Format(TimeFormatDay)), ) writer.Write(record) } } // McnUpRecommendPool . type McnUpRecommendPool struct { ID int64 `json:"id"` UpMid int64 `json:"up_mid"` UpName string `json:"up_name"` FansCount int64 `json:"fans_count"` FansCountIncreaseMonth int64 `json:"fans_count_increase_month"` ArchiveCount int64 `json:"archive_count"` PlayCountAccumulate int64 `json:"play_count_accumulate"` PlayCountAverage int64 `json:"play_count_average"` ActiveTid int16 `json:"active_tid"` TpName string `json:"type_name"` LastArchiveTime xtime.Time `json:"last_archive_time"` State MCNUPRecommendState `json:"state"` Source MCNUPRecommendSource `json:"source"` GenerateTime xtime.Time `json:"generate_time"` Ctime xtime.Time `json:"ctime"` Mtime xtime.Time `json:"mtime"` } // McnUpRecommendListReply struct . type McnUpRecommendListReply struct { List []*McnUpRecommendPool `json:"result"` PageResult } //GetFileName get file name func (list *McnUpRecommendListReply) GetFileName() string { return fmt.Sprintf("%s_%s.csv", "MCN推荐池列表", time.Now().Format(dateTimeFmt)) } //ToCsv to buffer func (list *McnUpRecommendListReply) ToCsv(writer *csv.Writer) { var title = []string{ "UP主UID", "up主昵称", "粉丝量", "本月粉丝增长量", "累积播放量", "稿均播放量", "分区", "最近投稿时间", "来源", "推荐池状态", "数据更新时间", } writer.Write(title) if list == nil { return } for _, v := range list.List { var record []string record = append(record, intFormat(v.UpMid), v.UpName, intFormat(v.FansCount), intFormat(v.FansCountIncreaseMonth), intFormat(v.PlayCountAccumulate), intFormat(v.PlayCountAverage), v.TpName, v.LastArchiveTime.Time().Format(TimeFormatSec), v.Source.String(), v.State.String(), v.GenerateTime.Time().Format(TimeFormatSec), ) writer.Write(record) } } // McnGetRankUpFansReply reply type McnGetRankUpFansReply struct { Result []*RankArchiveLikeInfo `json:"result"` // 按顺序进行排名 TypeList []*TidnameInfo `json:"type_list"` } // GetFileName get file name func (list *McnGetRankUpFansReply) GetFileName() string { return fmt.Sprintf("%s_%s.csv", "top稿件列表", time.Now().Format(dateTimeFmt)) } // ToCsv to buffer func (list *McnGetRankUpFansReply) ToCsv(writer *csv.Writer) { var title = []string{ "稿件ID", "稿件标题", "UP主UID", "UP主昵称", "新增点赞数", "累积点赞数", "新增播放数", "累积播放数", "分区", "上传日期", } writer.Write(title) if list == nil { return } for _, v := range list.Result { var record []string record = append(record, intFormat(v.ArchiveID), v.ArchiveTitle, intFormat(v.Author.Mid), v.Author.Name, intFormat(v.LikesIncrease), intFormat(v.LikesAccumulate), intFormat(v.PlayIncrease), intFormat(v.PlayAccumulate), v.TidName, v.Ctime.Time().Format(TimeFormatSec), ) writer.Write(record) } } // McnGetMcnFansReply reply 粉丝分析. type McnGetMcnFansReply struct { FansOverview *dtmdl.DmConMcnFansD `json:"fans_overview"` // 粉丝概况 FansSex *dtmdl.DmConMcnFansSexW `json:"fans_sex"` // 粉丝性别 FansAge *dtmdl.DmConMcnFansAgeW `json:"fans_age"` // 粉丝年龄 FansPlayWay *dtmdl.DmConMcnFansPlayWayW `json:"fans_play_way"` // 粉丝观看途径 FansArea []*dtmdl.DmConMcnFansAreaW `json:"fans_area"` // 粉丝地区分布 FansType []*dtmdl.DmConMcnFansTypeW `json:"fans_type"` // 粉丝倾向分布 FansTag []*dtmdl.DmConMcnFansTagW `json:"fans_tag"` // 粉丝标签地图分布 } // McnUpPermissionApply . type McnUpPermissionApply struct { ID int64 `json:"id"` McnMid int64 `json:"mcn_mid"` UpMid int64 `json:"up_mid"` McnName string `json:"mcn_name"` UpName string `json:"up_name"` SignID int64 `json:"sign_id"` FansCount int64 `json:"fans_count"` UpAuthLink string `json:"up_auth_link"` ActiveTID int16 `json:"active_tid"` TypeName string `json:"type_name"` RejectReason string `json:"reject_reason"` RejectTime xtime.Time `json:"reject_time"` State MCNUPPermissionState `json:"state"` Ctime xtime.Time `json:"ctime"` Mtime xtime.Time `json:"mtime"` AdminID int64 `json:"admin_id"` AdminName string `json:"admin_name"` OldPermits *Permits `json:"old_permits"` NewPermits *Permits `json:"new_permits"` NewPermission uint32 `json:"-"` OldPermission uint32 `json:"-"` } // AttrPermitVal get Permission all. func (n *McnUpPermissionApply) AttrPermitVal() { n.OldPermits, n.NewPermits = &Permits{}, &Permits{} n.OldPermits.SetAttrPermitVal(n.OldPermission) n.NewPermits.SetAttrPermitVal(n.NewPermission) } // McnUpPermitApplyListReply struct . type McnUpPermitApplyListReply struct { List []*McnUpPermissionApply `json:"result"` PageResult }