Create & Init Project...

This commit is contained in:
2019-04-22 18:49:16 +08:00
commit fc4fa37393
25440 changed files with 4054998 additions and 0 deletions

View File

@@ -0,0 +1,36 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = [
"base_model.go",
"model.go",
"request_base.go",
],
importpath = "go-common/app/interface/main/mcn/model",
tags = ["automanaged"],
visibility = ["//visibility:public"],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [
":package-srcs",
"//app/interface/main/mcn/model/datamodel:all-srcs",
"//app/interface/main/mcn/model/mcnmodel:all-srcs",
],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,59 @@
package model
import (
"crypto/hmac"
"crypto/sha1"
"encoding/base64"
"fmt"
"hash"
"math/rand"
"net/url"
"path/filepath"
"strings"
"time"
)
// const .
const (
_template = "%s\n%s\n%s\n%d\n"
BfsEasyPath = "/bfs/mcn"
TimeFormatSec = "2006-01-02 15:04:05"
TimeFormatDay = "2006-01-02"
)
// BuildBfsURL is.
func BuildBfsURL(raw string, appkey, secret, bucket, ePath string) string {
if raw == "" {
return ""
}
ori, err := url.Parse(raw)
if err != nil {
return raw
}
if strings.HasPrefix(ori.Path, ePath) {
token := authorize(appkey, secret, "GET", bucket, filepath.Base(ori.Path), time.Now().Unix())
p := url.Values{}
p.Set("token", token)
ori.RawQuery = p.Encode()
}
if ori.Hostname() == "" {
ori.Host = fmt.Sprintf("i%d.hdslb.com", rand.Int63n(3))
ori.Scheme = "http"
}
return ori.String()
}
// Authorize returns authorization for upload file to bfs
func authorize(key, secret, method, bucket, file string, expire int64) (authorization string) {
var (
content string
mac hash.Hash
signature string
)
content = fmt.Sprintf(_template, method, bucket, file, expire)
mac = hmac.New(sha1.New, []byte(secret))
mac.Write([]byte(content))
signature = base64.StdEncoding.EncodeToString(mac.Sum(nil))
authorization = fmt.Sprintf("%s:%s:%d", key, signature, expire)
return
}

View File

@@ -0,0 +1,40 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
"go_test",
)
go_library(
name = "go_default_library",
srcs = [
"api.go",
"tables.go",
],
importpath = "go-common/app/interface/main/mcn/model/datamodel",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = ["//library/time:go_default_library"],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)
go_test(
name = "go_default_test",
srcs = ["tables_test.go"],
embed = [":go_default_library"],
tags = ["automanaged"],
)

View File

@@ -0,0 +1,38 @@
package datamodel
import (
"time"
)
// GetLastDay get data daily
func GetLastDay() time.Time {
//return time.Date(2018, 11, 18, 0, 0, 0, 0, time.Local)
now := time.Now()
return time.Date(now.Year(), now.Month(), now.Day()-1, 0, 0, 0, 0, time.Local)
}
// GetLastWeek get data weekly
func GetLastWeek() time.Time {
//return time.Date(2018, 11, 18, 0, 0, 0, 0, time.Local)
now := time.Now()
gDate := getTuesday(now)
if now.Before(gDate.Add(12 * time.Hour)) {
return gDate.AddDate(0, 0, -9)
}
return gDate.AddDate(0, 0, -2)
}
func beginningOfDay(t time.Time) time.Time {
d := time.Duration(-t.Hour()) * time.Hour
return t.Truncate(time.Hour).Add(d)
}
func getTuesday(now time.Time) time.Time {
t := beginningOfDay(now)
weekday := int(t.Weekday())
if weekday == int(time.Sunday) {
weekday = int(time.Saturday) + 1
}
d := time.Duration(-weekday+2) * 24 * time.Hour
return t.Truncate(time.Hour).Add(d)
}

View File

@@ -0,0 +1,286 @@
package datamodel
import (
"strconv"
"time"
xtime "go-common/library/time"
)
// LogTime
// deserialize format "2006-01-02"
// serialize format unix timestamp
type LogTime time.Time
const (
timeLayout = "2006-01-02"
timeLayoutWithQuote = `"2006-01-02"`
)
//MarshalJSON marshal logdate as timestamp
func (t *LogTime) MarshalJSON() ([]byte, error) {
var scratch [64]byte
var dst = strconv.AppendInt(scratch[:0], (*time.Time)(t).Unix(), 10)
return dst, nil
}
//UnmarshalJSON parse timestamp or something like "2006-01-02"
func (t *LogTime) UnmarshalJSON(b []byte) (err error) {
var str = string(b)
if str == "null" {
return nil
}
if len(str) == 0 {
return
}
if str[0] == '"' {
// Fractional seconds are handled implicitly by Parse.
tmp, e := time.ParseInLocation(timeLayoutWithQuote, string(b), time.Local)
if e != nil {
err = e
return
}
*t = LogTime(tmp)
} else {
// parse as timestamp
num, e := strconv.ParseInt(str, 10, 64)
if e != nil {
err = e
return
}
*t = LogTime(time.Unix(num, 0))
}
return
}
//Time export library time
func (t *LogTime) Time() xtime.Time {
return xtime.Time(time.Time(*t).Unix())
}
// see mcn_data.sql for more info
//McnStatisticBaseInfo2 new from data center
type McnStatisticBaseInfo2 struct {
DanmuAll int64 `json:"danmu_all"`
DanmuInc int64 `json:"danmu_inc"`
ReplyAll int64 `json:"reply_all"`
ReplyInc int64 `json:"reply_inc"`
ShareAll int64 `json:"share_all"`
ShareInc int64 `json:"share_inc"`
CoinAll int64 `json:"coin_all"`
CoinInc int64 `json:"coin_inc"`
FavAll int64 `json:"fav_all"`
FavInc int64 `json:"fav_inc"`
LikeAll int64 `json:"like_all"`
LikeInc int64 `json:"like_inc"`
Ctime time.Time `json:"-"`
Mtime time.Time `json:"-"`
}
//DmConMcnArchiveD 投稿数及昨日增量
type DmConMcnArchiveD struct {
McnStatisticBaseInfo2
ID int64 `json:"-"`
SignID int64 `json:"-"`
McnMid int64 `json:"-"`
LogDate LogTime `json:"log_date"`
UpAll int64 `json:"up_all"`
ArchiveAll int64 `json:"archive_all"`
ArchiveInc int64 `json:"archive_inc"`
PlayAll int64 `json:"play_all"`
PlayInc int64 `json:"play_inc"`
FansAll int64 `json:"fans_all"`
FansInc int64 `json:"fans_inc"`
}
//DmConMcnIndexIncD 播放/弹幕/评论/分享/硬币/收藏/点赞数每日增量
type DmConMcnIndexIncD struct {
ID int64 `json:"-"`
SignID int64 `json:"-"`
McnMid int64 `json:"-"`
LogDate LogTime `json:"log_date"`
Value int64 `json:"value"`
Type string `json:"-"`
Ctime time.Time `json:"-"`
Mtime time.Time `json:"-"`
}
//DmConMcnIndexSourceD mcn播放/弹幕/评论/分享/硬币/收藏/点赞来源分区
type DmConMcnIndexSourceD struct {
ID int64 `json:"-"`
SignID int64 `json:"-"`
McnMid int64 `json:"-"`
LogDate LogTime `json:"log_date"`
TypeID int64 `json:"type_id"`
Rank int64 `json:"rank"`
Value int64 `json:"value"`
Type string `json:"-"`
Ctime time.Time `json:"-"`
Mtime time.Time `json:"-"`
TypeName string `json:"type_name"`
}
//DmConMcnPlaySourceD #mcn稿件播放来源占比
type DmConMcnPlaySourceD struct {
ID int64 `json:"-"`
SignID int64 `json:"-"`
McnMid int64 `json:"-"`
LogDate LogTime `json:"log_date"`
Iphone int64 `json:"iphone"`
Android int64 `json:"android"`
Pc int64 `json:"pc"`
H5 int64 `json:"h5"`
Other int64 `json:"other"`
Ctime time.Time `json:"-"`
Mtime time.Time `json:"-"`
}
//DmConMcnFansSexW #游客/粉丝性别占比
type DmConMcnFansSexW struct {
ID int64 `json:"-"`
SignID int64 `json:"-"`
McnMid int64 `json:"-"`
LogDate LogTime `json:"log_date"`
Male int64 `json:"male"`
Female int64 `json:"female"`
Type string `json:"-"`
Ctime time.Time `json:"-"`
Mtime time.Time `json:"-"`
}
//DmConMcnFansAgeW #游客/粉丝年龄分布
type DmConMcnFansAgeW struct {
ID int64 `json:"-"`
SignID int64 `json:"-"`
McnMid int64 `json:"-"`
LogDate LogTime `json:"log_date"`
A int64 `json:"a"` //'0-16岁人数',
B int64 `json:"b"` //'16-25岁人数',
C int64 `json:"c"` //'25-40岁人数',
D int64 `json:"d"` //'40岁以上人数',
Type string `json:"-"` //'粉丝类型guest、fans',
Ctime time.Time `json:"-"`
Mtime time.Time `json:"-"`
}
//DmConMcnFansPlayWayW 游客/粉丝观看途径
type DmConMcnFansPlayWayW struct {
ID int64 `json:"-"`
SignID int64 `json:"-"`
McnMid int64 `json:"-"`
LogDate LogTime `json:"log_date"`
App int64 `json:"app"`
Pc int64 `json:"pc"`
Outside int64 `json:"outside"`
Other int64 `json:"other"`
Type string `json:"-"`
Ctime time.Time `json:"-"`
Mtime time.Time `json:"-"`
}
//DmConMcnFansAreaW #游客/粉丝地区分布
type DmConMcnFansAreaW struct {
ID int64 `json:"-"`
SignID int64 `json:"-"`
McnMid int64 `json:"-"`
LogDate LogTime `json:"log_date"`
Province string `json:"province"`
User int64 `json:"user"`
Type string `json:"-"`
Ctime time.Time `json:"-"`
Mtime time.Time `json:"-"`
}
//DmConMcnFansTypeW #游客/粉丝倾向分布
type DmConMcnFansTypeW struct {
ID int64 `json:"-"`
SignID int64 `json:"-"`
McnMid int64 `json:"-"`
LogDate LogTime `json:"log_date"`
TypeID int64 `json:"type_id"`
Play int64 `json:"play"`
Type string `json:"-"`
Ctime time.Time `json:"-"`
Mtime time.Time `json:"-"`
TypeName string `json:"type_name"`
}
//DmConMcnFansD #mcn粉丝数相关
type DmConMcnFansD struct {
ID int64 `json:"-"`
SignId int64 `json:"-"`
McnMid int64 `json:"-"`
LogDate LogTime `json:"log_date"`
FansAll int64 `json:"fans_all"`
FansInc int64 `json:"fans_inc"`
ActFans int64 `json:"act_fans"`
FansDecAll int64 `json:"fans_dec_all"`
FansDec int64 `json:"fans_dec"`
ViewFansRate float64 `json:"view_fans_rate"`
ActFansRate float64 `json:"act_fans_rate"`
ReplyFansRate float64 `json:"reply_fans_rate"`
DanmuFansRate float64 `json:"danmu_fans_rate"`
CoinFansRate float64 `json:"coin_fans_rate"`
LikeFansRate float64 `json:"like_fans_rate"`
FavFansRate float64 `json:"fav_fans_rate"`
ShareFansRate float64 `json:"share_fans_rate"`
LiveGiftFansRate float64 `json:"live_gift_fans_rate"`
LiveDanmuFansRate float64 `json:"live_danmu_fans_rate"`
Ctime time.Time `json:"-"`
Mtime time.Time `json:"-"`
}
//DmConMcnFansIncD #mcn粉丝按天增量
type DmConMcnFansIncD struct {
ID int64 `json:"-"`
SignID int64 `json:"-"`
McnMid int64 `json:"-"`
LogDate LogTime `json:"log_date"`
FansInc int64 `json:"fans_inc"`
Ctime time.Time `json:"-"`
Mtime time.Time `json:"-"`
}
//DmConMcnFansDecD #mcn粉丝按天取关数
type DmConMcnFansDecD struct {
ID int64 `json:"-"`
SignID int64 `json:"-"`
McnMid int64 `json:"-"`
LogDate LogTime `json:"log_date"`
FansDec int64 `json:"fans_dec"`
Ctime time.Time `json:"-"`
Mtime time.Time `json:"-"`
}
//DmConMcnFansAttentionWayD #mcn粉丝关注渠道
type DmConMcnFansAttentionWayD struct {
ID int64 `json:"-"`
SignID int64 `json:"-"`
McnMid int64 `json:"-"`
LogDate LogTime `json:"log_date"`
Homepage int64 `json:"homepage"`
Video int64 `json:"video"`
Article int64 `json:"article"`
Music int64 `json:"music"`
Other int64 `json:"other"`
Ctime time.Time `json:"-"`
Mtime time.Time `json:"-"`
}
// DmConMcnFansTagW #游客/粉丝标签地图分布
type DmConMcnFansTagW struct {
ID int64 `json:"-"`
SignID int64 `json:"-"`
McnMid int64 `json:"-"`
LogDate LogTime `json:"log_date"`
TagID int64 `json:"tag_id"`
Play int64 `json:"play"`
Type string `json:"-"`
Ctime time.Time `json:"-"`
Mtime time.Time `json:"-"`
TagName string `json:"tag_name"`
}

View File

@@ -0,0 +1,39 @@
package datamodel
import (
"testing"
"time"
)
type timeTestCase struct {
In []byte
Out time.Time
}
func timeHelper(tm time.Time, err error) time.Time {
return tm
}
func TestLogTime_UnmarshalJSON(t *testing.T) {
var (
testcase = []timeTestCase{
{[]byte(`"2018-11-11"`), timeHelper(time.ParseInLocation("2006-01-02", "2018-11-11", time.Local))},
{[]byte(`1542795906`), time.Unix(1542795906, 0)},
}
)
for _, testcase := range testcase {
var ltm LogTime
var err = ltm.UnmarshalJSON(testcase.In)
if err != nil {
t.Errorf("err=%v", err)
t.Fail()
continue
}
if int64(ltm.Time()) != testcase.Out.Unix() {
t.Errorf("expect=%d, get=%d", testcase.Out, ltm.Time())
t.Fail()
continue
}
}
}

View File

@@ -0,0 +1,56 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
"go_test",
)
go_library(
name = "go_default_library",
srcs = [
"cmd.go",
"creative.go",
"mcncache.go",
"reply.go",
"req.go",
"tables.go",
"upcheck.go",
],
importpath = "go-common/app/interface/main/mcn/model/mcnmodel",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/admin/main/mcn/model:go_default_library",
"//app/interface/main/mcn/model:go_default_library",
"//app/interface/main/mcn/model/datamodel:go_default_library",
"//app/interface/main/mcn/tool/validate:go_default_library",
"//app/service/main/archive/api:go_default_library",
"//library/time:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)
go_test(
name = "go_default_test",
srcs = ["reply_test.go"],
embed = [":go_default_library"],
tags = ["automanaged"],
deps = [
"//app/admin/main/mcn/model:go_default_library",
"//app/interface/main/mcn/model:go_default_library",
],
)

View File

@@ -0,0 +1,10 @@
package mcnmodel
//EmptyCmd empty cmd
type EmptyCmd struct {
}
//CmdReloadRank reload rank
type CmdReloadRank struct {
SignID int64 `form:"sign_id"`
}

View File

@@ -0,0 +1,89 @@
package mcnmodel
// CreativeCommonReq common creative
type CreativeCommonReq struct {
UpMid int64 `form:"mid" validate:"required"`
McnMid int64
}
// AidCommonReq common aid
type AidCommonReq struct {
CreativeCommonReq
Aid int64 `form:"aid" validate:"required"`
}
// DataCommonReq request params
type DataCommonReq struct {
CreativeCommonReq
Type int8 `form:"type" validate:"required"`
}
// ArchivesReq request params
type ArchivesReq struct {
CreativeCommonReq
Pn int64 `form:"pn"`
Ps int64 `form:"ps"`
Order string `form:"order"`
TID int64 `form:"tid"`
KeyWord string `form:"keyword"`
Status string `form:"status" validate:"required"`
Coop int16 `form:"coop"`
}
// ArchiveHistoryListReq request params
type ArchiveHistoryListReq = AidCommonReq
// ArchiveVideosReq request params
type ArchiveVideosReq = AidCommonReq
// DataArchiveReq request params
type DataArchiveReq = AidCommonReq
// DataVideoQuitReq request params
type DataVideoQuitReq struct {
CreativeCommonReq
Cid int64 `form:"cid" validate:"required"`
}
// DanmuDistriReq .
type DanmuDistriReq struct {
CreativeCommonReq
Aid int64 `form:"aid" validate:"required"`
Cid int64 `form:"cid" validate:"required"`
}
// DataBaseReq request params
type DataBaseReq = CreativeCommonReq
// DataTrendReq request params
type DataTrendReq = CreativeCommonReq
// DataActionReq request params
type DataActionReq = CreativeCommonReq
// DataFanReq request params
type DataFanReq = CreativeCommonReq
// DataPandectReq request params
type DataPandectReq = DataCommonReq
// DataSurveyReq request params
type DataSurveyReq = DataCommonReq
// DataPlaySourceReq request params
type DataPlaySourceReq = CreativeCommonReq
// DataPlayAnalysisReq request params
type DataPlayAnalysisReq struct {
CreativeCommonReq
Copyright int8 `form:"copyright"`
}
// DataArticleRankReq request params
type DataArticleRankReq = DataCommonReq

View File

@@ -0,0 +1,14 @@
package mcnmodel
import "time"
// PublicationPriceCache .
type PublicationPriceCache struct {
ModifyTime time.Time `json:"mtime"`
}
// UpPermissionCache .
type UpPermissionCache struct {
IsNull bool `json:"is_null"` // 缓存用来标记
Permission uint32 `json:"permission"`
}

View File

@@ -0,0 +1,488 @@
package mcnmodel
import (
"sort"
mcnadminmodel "go-common/app/admin/main/mcn/model"
"go-common/app/interface/main/mcn/model"
"go-common/app/interface/main/mcn/model/datamodel"
arcgrpc "go-common/app/service/main/archive/api"
"go-common/library/time"
)
// McnGetStateReply .
type McnGetStateReply struct {
State int8 `json:"state"`
RejectReason string `json:"reject_reason"`
}
// CommonReply reply with nothing, base struct
type CommonReply struct{}
//Sorter can sort
type Sorter interface {
Sort()
}
// McnGetBindReply .
type McnGetBindReply struct {
BindID int64 `json:"bind_id" gorm:"column:bind_id"`
CompanyName string `json:"company_name" gorm:"column:company_name"`
McnMid uint32 `json:"mcn_mid" gorm:"column:mcn_mid"`
McnName string `json:"mcn_name"`
UpAuthLink string `json:"up_auth_link" gorm:"column:up_auth_link"`
OldPerm uint32 `json:"-" gorm:"column:old_permission"`
NewPerm uint32 `json:"-" gorm:"column:new_permission"`
OldPermission mcnadminmodel.Permits `json:"old_permission"`
NewPermission mcnadminmodel.Permits `json:"new_permission"`
}
//Finish call this before send
func (s *McnGetBindReply) Finish() {
s.OldPermission.SetAttrPermitVal(s.OldPerm)
s.NewPermission.SetAttrPermitVal(s.NewPerm)
}
// McnGetDataSummaryReply .
type McnGetDataSummaryReply struct {
datamodel.McnStatisticBaseInfo2
IsNull bool `json:"is_null"` // 缓存用来标记
UpCount int64 `json:"up_count"`
UpCountDiff int64 `json:"-"`
FansCountAccumulate int64 `json:"fans_count_accumulate"`
FansCountDiff int64 `json:"fans_count_diff"`
PlayCountAccumulate int64 `json:"play_count_accumulate"`
PlayCountDiff int64 `json:"play_count_diff"`
ArchiveCountAccumulate int64 `json:"archive_count_accumulate"`
ArchiveCountDiff int64 `json:"archive_count_diff"`
GenerateDate time.Time `json:"generate_date"`
}
// CopyFrom .
func (m *McnGetDataSummaryReply) CopyFrom(v *McnDataSummary) {
if v == nil {
return
}
m.UpCount = int64(v.UpCount)
m.FansCountAccumulate = int64(v.FansCountAccumulate)
m.PlayCountAccumulate = int64(v.PlayCountAccumulate)
m.ArchiveCountAccumulate = int64(v.ArchiveCountAccumulate)
m.GenerateDate = v.GenerateDate
}
//CopyFromDmConMcnArchiveD .
func (m *McnGetDataSummaryReply) CopyFromDmConMcnArchiveD(v *datamodel.DmConMcnArchiveD) {
if v == nil {
return
}
m.UpCount = v.UpAll
// m.UpCountDiff 不再使用了。
m.ArchiveCountAccumulate = v.ArchiveAll
m.ArchiveCountDiff = v.ArchiveInc
m.PlayCountAccumulate = v.PlayAll
m.PlayCountDiff = v.PlayInc
m.FansCountAccumulate = v.FansAll
m.FansCountDiff = v.FansInc
m.McnStatisticBaseInfo2 = v.McnStatisticBaseInfo2
m.GenerateDate = v.LogDate.Time()
}
// CalcDiff .
func (m *McnGetDataSummaryReply) CalcDiff(lastDay *McnDataSummary) {
if lastDay == nil {
return
}
m.UpCountDiff = m.UpCount - int64(lastDay.UpCount)
m.FansCountDiff = m.FansCountAccumulate - int64(lastDay.FansCountAccumulate)
m.PlayCountDiff = m.PlayCountAccumulate - int64(lastDay.PlayCountAccumulate)
m.ArchiveCountDiff = m.ArchiveCountAccumulate - int64(lastDay.ArchiveCountAccumulate)
}
// McnUpDataInfo mcn data
type McnUpDataInfo struct {
McnDataUp
ActiveTid int16 `json:"active_tid"`
TidName string `json:"tid_name"`
BeginDate time.Time `json:"begin_date" gorm:"column:begin_date"`
EndDate time.Time `json:"end_date" gorm:"column:end_date"`
State int8 `json:"state" gorm:"column:state"`
Name string `json:"name"`
Permission uint32 `gorm:"column:permission" json:"-"`
PublicationPrice int64 `gorm:"column:publication_price" json:"publication_price"` // 单位1/1000 元
Permits mcnadminmodel.Permits `json:"permits"`
}
// HideData if state is not right, hide the data
func (m *McnUpDataInfo) HideData(hideDate bool) {
m.FansIncreaseMonth = 0
m.PlayCount = 0
m.ArchiveCount = 0
m.FansIncreaseAccumulate = 0
m.FansCount = 0
m.FansCountActive = 0
if hideDate {
m.BeginDate = 0
m.EndDate = 0
}
}
//Finish call finish before send out
func (m *McnUpDataInfo) Finish() {
m.Permits.SetAttrPermitVal(m.Permission)
}
// McnBindUpApplyReply .
type McnBindUpApplyReply struct {
BindID int64 `json:"bind_id"`
}
// McnGetUpListReply list
type McnGetUpListReply struct {
Result []*McnUpDataInfo `json:"result"`
model.PageResult
}
//Finish call finish before send out
func (m *McnGetUpListReply) Finish() {
for _, v := range m.Result {
v.Finish()
}
}
// McnExistReply exist
type McnExistReply struct {
Exist int `json:"exist"`
}
// McnGetAccountReply reply
type McnGetAccountReply struct {
Mid int64 `json:"mid"`
Name string `json:"name"`
}
// McnGetMcnOldInfoReply req
type McnGetMcnOldInfoReply struct {
CompanyName string `json:"company_name"`
CompanyLicenseID string `json:"company_license_id"`
ContactName string `json:"contact_name"`
ContactTitle string `json:"contact_title"`
ContactIdcard string `json:"contact_idcard"`
ContactPhone string `json:"contact_phone"`
}
// Copy .
func (m *McnGetMcnOldInfoReply) Copy(v *McnSign) {
if v == nil {
return
}
m.CompanyName = v.CompanyName
m.CompanyLicenseID = v.CompanyLicenseID
m.ContactName = v.ContactName
m.ContactTitle = v.ContactTitle
m.ContactIdcard = v.ContactIdcard
m.ContactPhone = v.ContactPhone
}
// RankDataInterface 用来取排行用的数据
type RankDataInterface interface {
GetTid() int16
GetDataType() DataType
GetValue() int64
}
// RankDataBase 基本排行信息
type RankDataBase struct {
Tid int16 `json:"tid"`
DataType DataType `json:"data_type"`
}
// GetTid .
func (r *RankDataBase) GetTid() int16 {
return r.Tid
}
// GetDataType .
func (r *RankDataBase) GetDataType() DataType {
return r.DataType
}
// RankUpFansInfo reply info
type RankUpFansInfo struct {
RankDataBase
Mid int64 `json:"mid"`
UpFaceLink string `json:"up_face_link"`
Name string `json:"name"`
FansIncrease int64 `json:"fans_increase"`
FansAccumulate int64 `json:"fans_accumulate"`
TidName string `json:"tid_name"`
}
// GetValue .
func (r *RankUpFansInfo) GetValue() int64 {
return r.FansIncrease
}
// Copy copy from rank up .
func (r *RankUpFansInfo) Copy(v *McnRankUpFan) {
if v == nil {
return
}
r.DataType = v.DataType
r.Tid = v.ActiveTid
r.Mid = v.UpMid
r.FansIncrease = v.Value1
r.FansAccumulate = v.Value2
}
// McnGetRankUpFansReply reply
type McnGetRankUpFansReply struct {
Result []RankDataInterface `json:"result"` // 按顺序进行排名
TypeList []*TidnameInfo `json:"type_list"`
}
// RankArchiveLikeInfo archive like rank info
type RankArchiveLikeInfo struct {
RankDataBase
ArchiveID int64 `json:"archive_id"` // 稿件ID
ArchiveTitle string `json:"archive_title"`
Pic string `json:"pic"` // 封面
TidName string `json:"tid_name"`
LikesIncrease int64 `json:"likes_increase"`
LikesAccumulate int64 `json:"likes_accumulate"`
PlayIncrease int64 `json:"play_increase"`
Ctime time.Time `json:"ctime"`
Author arcgrpc.Author `json:"author"` // up主信息
Stat arcgrpc.Stat `json:"stat"` // 统计信息
}
// GetValue .
func (r *RankArchiveLikeInfo) GetValue() int64 {
return r.LikesIncrease
}
// CopyFromDB .
func (r *RankArchiveLikeInfo) CopyFromDB(v *McnRankArchiveLike) {
if v == nil {
return
}
r.ArchiveID = v.ArchiveID
r.LikesIncrease = v.LikeCount
r.Tid = v.Tid
r.DataType = v.DataType
r.PlayIncrease = v.PlayIncr
}
// CopyFromArchive copy from archive info from archive service
func (r *RankArchiveLikeInfo) CopyFromArchive(v *arcgrpc.Arc) {
if v == nil {
return
}
r.ArchiveTitle = v.Title
r.Pic = v.Pic
r.Ctime = v.Ctime
r.TidName = v.TypeName
r.Author = v.Author
r.Stat = v.Stat
r.Tid = int16(v.TypeID)
r.LikesAccumulate = int64(v.Stat.Like)
}
// TidnameInfo tid name
type TidnameInfo struct {
Tid int16 `json:"tid"`
Name string `json:"name"`
}
// McnGetRecommendPoolInfo recomend info
type McnGetRecommendPoolInfo struct {
UpMid int64 `json:"up_mid"`
FansCount int64 `json:"fans_count"`
FansCountIncreaseMonth int64 `json:"fans_count_increase_month"`
ArchiveCount int64 `json:"archive_count"`
ActiveTid int16 `json:"active_tid"`
UpName string `json:"up_name"`
TidName string `json:"tid_name"`
}
// Copy copy from db
func (m *McnGetRecommendPoolInfo) Copy(v *McnUpRecommendPool) {
if v == nil {
return
}
m.UpMid = v.UpMid
m.FansCount = v.FansCount
m.FansCountIncreaseMonth = v.FansCountIncreaseMonth
m.ArchiveCount = v.ArchiveCount
m.ActiveTid = v.ActiveTid
}
// McnGetRecommendPoolReply result
type McnGetRecommendPoolReply struct {
model.PageResult
Result []*McnGetRecommendPoolInfo `json:"result"`
}
// McnGetRecommendPoolTidListReply result
type McnGetRecommendPoolTidListReply struct {
Result []*TidnameInfo `json:"result"`
}
// --------------------------- 三期需求
// McnGetIndexIncReply 播放/弹幕/评论/分享/硬币/收藏/点赞数每日增量
type McnGetIndexIncReply struct {
Result []*datamodel.DmConMcnIndexIncD `json:"result"`
}
//McnGetIndexSourceReply 播放/弹幕/评论/分享/硬币/收藏/点赞来源分区
type McnGetIndexSourceReply struct {
Result []*datamodel.DmConMcnIndexSourceD `json:"result"`
}
//Sort sort
func (s *McnGetIndexSourceReply) Sort() {
sort.Slice(s.Result, func(i, j int) bool {
return s.Result[i].Value > s.Result[j].Value
})
}
//McnGetPlaySourceReply #mcn稿件播放来源占比
type McnGetPlaySourceReply struct {
datamodel.DmConMcnPlaySourceD
}
// McnGetMcnFansReply mcn粉丝基本数据
type McnGetMcnFansReply struct {
datamodel.DmConMcnFansD
}
//McnGetMcnFansIncReply mcn粉丝按天增量
type McnGetMcnFansIncReply struct {
Result []*datamodel.DmConMcnFansIncD `json:"result"`
}
//McnGetMcnFansDecReply mcn粉丝按天取关数
type McnGetMcnFansDecReply struct {
Result []*datamodel.DmConMcnFansDecD `json:"result"`
}
//McnGetMcnFansAttentionWayReply mcn粉丝关注渠道
type McnGetMcnFansAttentionWayReply struct {
datamodel.DmConMcnFansAttentionWayD
}
// McnGetBaseFansAttrReply # mcn 性别占比 + 观众年龄 + 观看途径
type McnGetBaseFansAttrReply struct {
FansSex *datamodel.DmConMcnFansSexW `json:"fans_sex"`
FansAge *datamodel.DmConMcnFansAgeW `json:"fans_age"`
FansPlayWay *datamodel.DmConMcnFansPlayWayW `json:"fans_play_way"`
}
// McnGetFansAreaReply 游客/粉丝地区分布
type McnGetFansAreaReply struct {
Result []*datamodel.DmConMcnFansAreaW `json:"result"`
}
//Sort sort.
func (s *McnGetFansAreaReply) Sort() {
sort.Slice(s.Result, func(i, j int) bool {
return s.Result[i].User > s.Result[j].User
})
}
// McnGetFansTypeReply 游客/粉丝倾向分布
type McnGetFansTypeReply struct {
Result []*datamodel.DmConMcnFansTypeW `json:"result"`
}
//Sort sort.
func (s *McnGetFansTypeReply) Sort() {
sort.Slice(s.Result, func(i, j int) bool {
return s.Result[i].Play > s.Result[j].Play
})
}
// McnGetFansTagReply 游客/粉丝标签地图分布
type McnGetFansTagReply struct {
Result []*datamodel.DmConMcnFansTagW `json:"result"`
}
// ----------------------------- 4期需求
//McnChangePermitReply .
type McnChangePermitReply = McnBindUpApplyReply
//McnGetUpPermitReply 4.2
type McnGetUpPermitReply struct {
Old *mcnadminmodel.Permits `json:"old"`
New *mcnadminmodel.Permits `json:"new"`
ContractLink string `json:"contract_link"`
}
// McnPublicationPriceChangeReply 4.4
type McnPublicationPriceChangeReply = CommonReply
// McnBaseInfoReply .
type McnBaseInfoReply struct {
ID int64 `json:"id"`
McnMid int64 `json:"mcn_mid"`
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"`
ContactIdcard string `json:"contact_idcard"`
ContactPhone string `json:"contact_phone"`
BeginDate time.Time `json:"begin_date"`
EndDate time.Time `json:"end_date"`
RejectReason string `json:"reject_reason"`
RejectTime time.Time `json:"reject_time"`
State model.MCNSignState `json:"state"`
Permission uint32 `json:"permission"`
Ctime time.Time `json:"ctime"`
Mtime time.Time `json:"mtime"`
SignPayInfo []*SignPayInfoReply `json:"sign_pay_info"`
Permits *mcnadminmodel.Permits `json:"permits"` // 权限集合
}
// SignPayInfoReply .
type SignPayInfoReply struct {
State mcnadminmodel.MCNPayState `json:"-"`
DueDate time.Time `json:"due_date"`
PayValue int64 `json:"pay_value"` // thousand bit
}
// AttrPermitVal get Permission all.
func (m *McnBaseInfoReply) AttrPermitVal() {
m.Permits = &mcnadminmodel.Permits{}
m.Permits.SetAttrPermitVal(m.Permission)
}
// CopyFromMcnInfo .
func (m *McnBaseInfoReply) CopyFromMcnInfo(v *McnSign) {
if v == nil {
return
}
m.ID = v.ID
m.McnMid = v.McnMid
m.CompanyName = v.CompanyName
m.CompanyLicenseID = v.CompanyLicenseID
m.CompanyLicenseLink = v.CompanyLicenseLink
m.ContractLink = v.ContractLink
m.ContactName = v.ContactName
m.ContactTitle = v.ContactTitle
m.ContactIdcard = v.ContactIdcard
m.ContactPhone = v.ContactPhone
m.BeginDate = v.BeginDate
m.EndDate = v.EndDate
m.RejectReason = v.RejectReason
m.RejectTime = v.RejectTime
m.State = v.State
m.Permission = v.Permission
m.Ctime = v.Ctime
m.Mtime = v.Mtime
m.AttrPermitVal()
}

View File

@@ -0,0 +1,50 @@
package mcnmodel
import (
"encoding/json"
"fmt"
model2 "go-common/app/admin/main/mcn/model"
"go-common/app/interface/main/mcn/model"
"testing"
)
type replyCommon struct {
Message string `json:"message"`
Code int `json:"code"`
Data interface{} `json:"data"`
}
func createReply(data interface{}) *replyCommon {
return &replyCommon{
Message: "",
Code: 0,
Data: data,
}
}
func printReply(data interface{}) {
var r = createReply(data)
var result, _ = json.MarshalIndent(r, "", " ")
fmt.Printf(string(result) + "\n")
}
// var now = xtime.Time(time.Now().Unix())
func TestPrintMcnUpDataInfo(t *testing.T) {
var r = McnGetUpListReply{
Result: []*McnUpDataInfo{{}},
PageResult: model.PageResult{},
}
defer func() {}()
printReply(r)
}
func TestPrintMcnGetUpPermitReply(t *testing.T) {
var r = McnGetUpPermitReply{
Old: &model2.Permits{},
New: &model2.Permits{},
ContractLink: "http://xxx.xx/adi.pdf",
}
defer func() {}()
printReply(r)
}

View File

@@ -0,0 +1,260 @@
package mcnmodel
import (
mcnadminmodel "go-common/app/admin/main/mcn/model"
"go-common/app/interface/main/mcn/model"
"go-common/app/interface/main/mcn/tool/validate"
"go-common/library/time"
)
//CookieMidInterface cookie set interface, set mid from cookie to arg
type CookieMidInterface interface {
SetMid(midFromCookie int64)
}
//McnCommonReq common mcn
type McnCommonReq struct {
McnCheatReq
SignID int64 `form:"sign_id"`
McnMid int64
}
//CheatInterface cheat interface
type CheatInterface interface {
// Cheat return true if cheated, false if not cheated
Cheat() bool
}
//McnCheatReq cheat
type McnCheatReq struct {
TMcnMid int64 `form:"t_mcn_mid"`
}
//Cheat .
func (m *McnCommonReq) Cheat() bool {
if m.TMcnMid == 0 {
return false
}
m.SetMid(m.TMcnMid)
return true
}
//SetMid set mid
func (m *McnCommonReq) SetMid(midFromCookie int64) {
m.McnMid = midFromCookie
}
//UpCommonReq common up
type UpCommonReq struct {
UpMid int64
}
//SetMid set mid
func (m *UpCommonReq) SetMid(midFromCookie int64) {
m.UpMid = midFromCookie
}
//GetStateReq get state
type GetStateReq struct {
McnCommonReq
}
//McnApplyReq apply req
type McnApplyReq struct {
McnCommonReq
CompanyName string `form:"company_name"`
CompanyLicenseID string `form:"company_license_id"`
ContactName string `form:"contact_name"`
ContactTitle string `form:"contact_title"`
ContactIdcard string `form:"contact_idcard" validate:"idcheck"`
ContactPhone string `form:"contact_phone" validate:"phonecheck"`
CompanyLicenseLink string `form:"company_license_link" validate:"httpcheck"`
ContractLink string `form:"contract_link" validate:"httpcheck"`
}
//CopyTo .
func (m *McnApplyReq) CopyTo(v *McnSign) {
if v == nil {
return
}
v.McnMid = m.McnMid
v.CompanyName = m.CompanyName
v.CompanyLicenseID = m.CompanyLicenseID
v.ContactName = m.ContactName
v.ContactTitle = m.ContactTitle
v.ContactIdcard = m.ContactIdcard
v.ContactPhone = m.ContactPhone
v.CompanyLicenseLink = m.CompanyLicenseLink
v.ContractLink = m.ContractLink
}
//McnBindUpApplyReq .
type McnBindUpApplyReq struct {
McnCommonReq
UpMid int64 `form:"up_mid"`
BeginDate time.Time `form:"begin_date"`
EndDate time.Time `form:"end_date"`
ContractLink string `form:"contract_link"` // 手动检查http格式
UpAuthLink string `form:"up_auth_link"` // 手动检查http格式
UpType int8 `form:"up_type"` // 用户类型0为站内1为站外
SiteLink string `form:"site_link"` //up主站外账号链接, 如果up type为1该项必填
mcnadminmodel.Permits
PublicationPrice int64 `form:"publication_price"` // 单位1/1000 元
}
//IsSiteInfoOk 检查站外up主信息是否OK如果不是站外Up主直接返回ok
func (m *McnBindUpApplyReq) IsSiteInfoOk() bool {
if m.UpType == 0 {
return true
}
return validate.RegHTTPCheck.MatchString(m.SiteLink)
}
//CopyTo .
func (m *McnBindUpApplyReq) CopyTo(v *McnUp) {
v.UpMid = m.UpMid
v.McnMid = m.McnMid
v.BeginDate = m.BeginDate
v.EndDate = m.EndDate
v.ContractLink = m.ContractLink
v.UpAuthLink = m.UpAuthLink
v.UpType = m.UpType
v.SiteLink = m.SiteLink
v.Permission = uint32(m.GetAttrPermitVal())
v.PublicationPrice = m.PublicationPrice
}
//McnUpConfirmReq .
type McnUpConfirmReq struct {
UpCommonReq
BindID int64 `form:"bind_id"`
Choice bool `form:"choice"`
}
//McnUpGetBindReq .
type McnUpGetBindReq struct {
UpCommonReq
BindID int64 `form:"bind_id"`
}
// McnGetDataSummaryReq req
type McnGetDataSummaryReq = McnCommonReq
//McnGetUpListReq req
type McnGetUpListReq struct {
McnCommonReq
UpMid int64 `form:"up_mid"`
model.PageArg
}
//McnGetAccountReq req
type McnGetAccountReq struct {
Mid int64 `form:"mid"`
}
// McnGetMcnOldInfoReq req
type McnGetMcnOldInfoReq struct {
McnCommonReq
}
// McnGetRankReq req to 获取排行
type McnGetRankReq struct {
McnCommonReq
Tid int16 `form:"tid"` // 分区
DataType DataType `form:"data_type"`
}
// McnGetRecommendPoolReq get recommend pool
type McnGetRecommendPoolReq struct {
McnCommonReq
model.PageArg
Tid int16 `form:"tid"`
OrderField string `form:"order_field"`
Sort string `form:"sort"`
}
// McnGetRecommendPoolTidListReq common req
type McnGetRecommendPoolTidListReq = McnCommonReq
// ------inner request
// McnGetRankAPIReq req to 获取排行
type McnGetRankAPIReq struct {
SignID int64 `form:"sign_id"`
Tid int16 `form:"tid"` // 分区
DataType DataType `form:"data_type"`
}
// 播放/弹幕/评论/分享/硬币/收藏/点赞数
const (
ActionTypePlay = "play" //播放
ActionTypeDanmu = "danmu" //弹幕
ActionTypeReply = "reply" //评论
ActionTypeShare = "share" //分享
ActionTypeCoin = "coin" //硬币
ActionTypeFav = "fav" //收藏
ActionTypeLike = "like" //点赞数
)
const (
// UserTypeGuest .
UserTypeGuest = "guest" // 游客
// UserTypeFans .
UserTypeFans = "fans" // 粉丝
)
//McnGetIndexIncReq 增量趋势
type McnGetIndexIncReq struct {
McnCommonReq
Type string `form:"type"`
}
//McnGetIndexSourceReq 来源分区
type McnGetIndexSourceReq = McnGetIndexIncReq
//McnGetPlaySourceReq 稿件播放来源占比
type McnGetPlaySourceReq struct {
McnCommonReq
}
//McnGetMcnFansReq mcn
type McnGetMcnFansReq = McnCommonReq
//McnGetMcnFansIncReq mcn粉丝按天关注数
type McnGetMcnFansIncReq = McnCommonReq
//McnGetMcnFansDecReq mcn粉丝按天取关数
type McnGetMcnFansDecReq = McnCommonReq
//McnGetMcnFansAttentionWayReq mcn粉丝关注渠道
type McnGetMcnFansAttentionWayReq = McnCommonReq
// McnGetBaseFansAttrReq mcn 游客和粉丝基本数据请求
type McnGetBaseFansAttrReq struct {
McnCommonReq
UserType string `form:"user_type"`
}
// McnGetFansAreaReq mcn 地区分布请求
type McnGetFansAreaReq = McnGetBaseFansAttrReq
// McnGetFansTypeReq mcn 游客/粉丝倾向分布请求
type McnGetFansTypeReq = McnGetBaseFansAttrReq
// McnGetFansTagReq mcn 游客/粉丝标签地图分布请求
type McnGetFansTagReq = McnGetBaseFansAttrReq
//McnChangePermitReq change permit
type McnChangePermitReq struct {
McnCommonReq
UpMid int64 `form:"up_mid"`
mcnadminmodel.Permits
UpAuthLink string `form:"up_auth_link" validate:"httpcheck"`
}
//McnPublicationPriceChangeReq change publication price
type McnPublicationPriceChangeReq struct {
McnCommonReq
Price int64 `form:"price"`
UpMid int64 `form:"up_mid"`
}

View File

@@ -0,0 +1,312 @@
package mcnmodel
import (
"go-common/app/interface/main/mcn/model"
"go-common/library/time"
)
// go get github.com/abice/go-enum
// go:generate go-enum -f=tables.go
// table names
const (
//TableNameMcnUp up
TableNameMcnUp = "mcn_up"
//TableNameMcnSign sign
TableNameMcnSign = "mcn_sign"
//TableNameMcnDataSummary data summary
TableNameMcnDataSummary = "mcn_data_summary"
//TableNameMcnDataUp data up
TableNameMcnDataUp = "mcn_data_up"
//TableNameUpBaseInfo up base info
TableNameUpBaseInfo = "up_base_info"
//TableNameMcnRankUpFan rank for up fans
TableNameMcnRankUpFan = "mcn_rank_up_fans"
//TableNameMcnRankArchiveLike rank for archive likes
TableNameMcnRankArchiveLike = "mcn_rank_archive_likes"
//TableNameMcnUpRecommendPool up recomment pool
TableNameMcnUpRecommendPool = "mcn_up_recommend_pool"
TableMcnUpPermissionApply = "mcn_up_permission_apply"
)
// DataType 数据类型1累计2昨日3上周4上月
/* ENUM(
Accumulate = 1
Day = 2
Week = 3
Month = 4
ActiveFans = 5
)*/
const (
// DataTypeAccumulate is a DataType of type Accumulate
DataTypeAccumulate DataType = 1
// DataTypeDay is a DataType of type Day
DataTypeDay DataType = 2
// DataTypeWeek is a DataType of type Week
DataTypeWeek DataType = 3
// DataTypeMonth is a DataType of type Month
DataTypeMonth DataType = 4
// DataTypeActiveFans active fans
DataTypeActiveFans DataType = 5
)
const (
// McnDataTypeDay is a McnDataType of type Day
McnDataTypeDay McnDataType = 1
// McnDataTypeMonth is a McnDataType of type Month
McnDataTypeMonth McnDataType = 2
)
// DataType .
type DataType int8
// McnUp up table
type McnUp struct {
ID int64 `json:"id" gorm:"column:id"`
SignID int64 `json:"sign_id" gorm:"column:sign_id"`
McnMid int64 `json:"mcn_mid" gorm:"column:mcn_mid"`
UpMid int64 `json:"up_mid" gorm:"column:up_mid"`
BeginDate time.Time `json:"begin_date" gorm:"column:begin_date"`
EndDate time.Time `json:"end_date" gorm:"column:end_date"`
ContractLink string `json:"contract_link" gorm:"column:contract_link"`
UpAuthLink string `json:"up_auth_link" gorm:"column:up_auth_link"`
RejectReason string `json:"reject_reason" gorm:"column:reject_reason"`
RejectTime string `json:"reject_time" gorm:"column:reject_time"`
State model.MCNUPState `json:"state" gorm:"column:state"`
UpType int8 `json:"up_type" gorm:"column:up_type"` // 用户类型0为站内1为站外
SiteLink string `json:"site_link" gorm:"column:site_link"` //up主站外账号链接, 如果up type为1该项必填
StateChangeTime time.Time `json:"state_change_time" gorm:"column:state_change_time"`
ConfirmTime time.Time `json:"confirm_time" gorm:"column:confirm_time"`
Ctime time.Time `json:"ctime" gorm:"column:ctime"`
Mtime time.Time `json:"mtime" gorm:"column:mtime"`
Permission uint32 `gorm:"column:permission" json:"permission"`
PublicationPrice int64 `gorm:"column:publication_price" json:"publication_price"` // 单位1/1000 元
}
// TableName .
func (s *McnUp) TableName() string {
return TableNameMcnUp
}
// IsBindable check if up canbe bind to other
func (s *McnUp) IsBindable() bool {
return isUpBindable(s.State)
}
// IsBeingBindedWithMcn check this up is in the middle of being binded with mcn,
func (s *McnUp) IsBeingBindedWithMcn(mcn *McnSign) bool {
if mcn == nil {
return false
}
if s.SignID == mcn.ID &&
(s.State == model.MCNUPStateOnReview || s.State == model.MCNUPStateNoAuthorize) {
return true
}
return false
}
// McnSign mcn sign table
type McnSign struct {
ID int64 `json:"id" gorm:"column:id"`
McnMid int64 `json:"mcn_mid" gorm:"column:mcn_mid"`
CompanyName string `json:"company_name" gorm:"column:company_name"`
CompanyLicenseID string `json:"company_license_id" gorm:"column:company_license_id"`
CompanyLicenseLink string `json:"company_license_link" gorm:"column:company_license_link"`
ContractLink string `json:"contract_link" gorm:"column:contract_link"`
ContactName string `json:"contact_name" gorm:"column:contact_name"`
ContactTitle string `json:"contact_title" gorm:"column:contact_title"`
ContactIdcard string `json:"contact_idcard" gorm:"column:contact_idcard"`
ContactPhone string `json:"contact_phone" gorm:"column:contact_phone"`
BeginDate time.Time `json:"begin_date" gorm:"column:begin_date"`
EndDate time.Time `json:"end_date" gorm:"column:end_date"`
RejectReason string `json:"reject_reason" gorm:"column:reject_reason"`
RejectTime time.Time `json:"reject_time" gorm:"column:reject_time"`
State model.MCNSignState `json:"state" gorm:"column:state"`
Ctime time.Time `json:"ctime" gorm:"column:ctime"`
Mtime time.Time `json:"mtime" gorm:"column:mtime"`
Permission uint32 `json:"permission" gorm:"column:permission"`
}
// TableName table name
func (s *McnSign) TableName() string {
return TableNameMcnSign
}
// McnDataType .
/* ENUM(
Day = 1
Month = 2
)*/
type McnDataType int8
// McnDataSummary table
type McnDataSummary struct {
ID int64 `json:"id" gorm:"column:id"`
McnMid int64 `json:"mcn_mid" gorm:"column:mcn_mid"`
SignID int64 `json:"sign_id" gorm:"column:sign_id"`
UpCount int64 `json:"up_count" gorm:"column:up_count"`
FansCountAccumulate int64 `json:"fans_count_accumulate" gorm:"column:fans_count_accumulate"`
FansCountOnline int64 `json:"fans_count_online" gorm:"column:fans_count_online"`
FansCountReal int64 `json:"fans_count_real" gorm:"column:fans_count_real"`
FansCountCheatAccumulate int64 `json:"fans_count_cheat_accumulate" gorm:"column:fans_count_cheat_accumulate"`
FansCountIncreaseDay int64 `json:"fans_count_increase_day" gorm:"column:fans_count_increase_day"`
PlayCountAccumulate int64 `json:"play_count_accumulate" gorm:"column:play_count_accumulate"`
PlayCountIncreaseDay int64 `json:"play_count_increase_day" gorm:"column:play_count_increase_day"`
ArchiveCountAccumulate int64 `json:"archive_count_accumulate" gorm:"column:archive_count_accumulate"`
ActiveTid int64 `json:"active_tid" gorm:"column:active_tid"`
GenerateDate time.Time `json:"generate_date" gorm:"column:generate_date"`
DataType McnDataType `json:"data_type" gorm:"column:data_type"`
Ctime time.Time `json:"ctime" gorm:"column:ctime"`
Mtime time.Time `json:"mtime" gorm:"column:mtime"`
}
// TableName table name
func (s *McnDataSummary) TableName() string {
return TableNameMcnDataSummary
}
// McnDataUp table name
type McnDataUp struct {
ID int64 `json:"id" gorm:"column:id"`
McnMid int64 `json:"mcn_mid" gorm:"column:mcn_mid"`
SignID int64 `json:"sign_id" gorm:"column:sign_id"`
UpMid int64 `json:"up_mid" gorm:"column:up_mid"`
DataType DataType `json:"data_type" gorm:"column:data_type"`
FansIncreaseAccumulate int32 `json:"fans_increase_accumulate" gorm:"column:fans_increase_accumulate"`
ArchiveCount int32 `json:"archive_count" gorm:"column:archive_count"`
PlayCount int64 `json:"play_count" gorm:"column:play_count"`
FansIncreaseMonth int64 `json:"fans_increase_month" gorm:"column:fans_increase_month"`
FansCount int64 `json:"fans_count" gorm:"column:fans_count"`
FansCountActive int64 `json:"fans_count_active" gorm:"column:fans_count_active"`
GenerateDate time.Time `json:"generate_date" gorm:"column:generate_date"`
Ctime time.Time `json:"ctime" gorm:"column:ctime"`
Mtime time.Time `json:"mtime" gorm:"column:mtime"`
}
// TableName table name
func (s *McnDataUp) TableName() string {
return TableNameMcnDataUp
}
// UpBaseInfo struct
type UpBaseInfo struct {
ID uint32 `gorm:"column:id"`
Mid int64 `gorm:"column:mid"`
ActiveTid int64 `gorm:"column:active_tid"`
ArticleCountAccumulate int `gorm:"column:article_count_accumulate"`
Activity int `gorm:"column:activity"`
FansCount int `gorm:"column:fans_count"`
}
// TableName .
func (s *UpBaseInfo) TableName() string {
return TableNameUpBaseInfo
}
// McnRankUpFan .
type McnRankUpFan struct {
ID int64 `json:"id" gorm:"column:id"`
McnMid int64 `json:"mcn_mid" gorm:"column:mcn_mid"`
SignID int64 `json:"sign_id" gorm:"column:sign_id"`
UpMid int64 `json:"up_mid" gorm:"column:up_mid"`
Value1 int64 `json:"value1" gorm:"column:value1"`
Value2 int64 `json:"value2" gorm:"column:value2"`
ActiveTid int16 `json:"active_tid" gorm:"column:active_tid"`
DataType DataType `json:"data_type" gorm:"column:data_type"`
GenerateDate time.Time `json:"generate_date" gorm:"column:generate_date"`
Ctime time.Time `json:"ctime" gorm:"column:ctime"`
Mtime time.Time `json:"mtime" gorm:"column:mtime"`
}
// TableName .
func (s *McnRankUpFan) TableName() string {
return TableNameMcnRankUpFan
}
// McnRankArchiveLike .
type McnRankArchiveLike struct {
ID int64 `json:"id" gorm:"column:id"`
McnMid int64 `json:"mcn_mid" gorm:"column:mcn_mid"`
SignID int64 `json:"sign_id" gorm:"column:sign_id"`
UpMid int64 `json:"up_mid" gorm:"column:up_mid"`
ArchiveID int64 `json:"archive_id" gorm:"column:avid"`
LikeCount int64 `json:"like_count" gorm:"column:like_count"`
PlayIncr int64 `json:"play_incr" gorm:"column:play_incr" `
DataType DataType `json:"data_type" gorm:"column:data_type"`
Tid int16 `json:"tid" gorm:"column:tid"`
GenerateDate time.Time `json:"generate_date" gorm:"column:generate_date"`
Ctime time.Time `json:"ctime" gorm:"column:ctime"`
Mtime time.Time `json:"mtime" gorm:"column:mtime"`
}
// TableName .
func (s *McnRankArchiveLike) TableName() string {
return TableNameMcnRankArchiveLike
}
// McnUpRecommendPool 推荐池 struct
type McnUpRecommendPool struct {
ID int64 `gorm:"column:id" json:"id"`
UpMid int64 `gorm:"column:up_mid" json:"up_mid"`
FansCount int64 `gorm:"column:fans_count" json:"fans_count"`
FansCountIncreaseMonth int64 `gorm:"column:fans_count_increase_month" json:"fans_count_increase_month"`
ArchiveCount int64 `gorm:"column:archive_count" json:"archive_count"`
PlayCountAccumulate int64 `gorm:"column:play_count_accumulate" json:"play_count_accumulate"`
PlayCountAverage int64 `gorm:"column:play_count_average" json:"play_count_average"`
ActiveTid int16 `gorm:"column:active_tid" json:"active_tid"`
LastArchiveTime time.Time `gorm:"column:last_archive_time" json:"last_archive_time"`
State uint8 `gorm:"column:state" json:"state"`
Source int64 `gorm:"column:source" json:"source"`
GenerateTime time.Time `gorm:"column:generate_time" json:"generate_time"`
Ctime time.Time `gorm:"column:ctime" json:"ctime"`
Mtime time.Time `gorm:"column:mtime" json:"mtime"`
}
// TableName table name.
func (s *McnUpRecommendPool) TableName() string {
return TableNameMcnUpRecommendPool
}
// MCNUPRecommendState 推荐状态
// MCNUPRecommendState .
type MCNUPRecommendState int8
// const .
const (
// MCNUPRecommendStateUnKnown 未知状态
MCNUPRecommendStateUnKnown MCNUPRecommendState = 0
// MCNUPRecommendStateOff 未推荐
MCNUPRecommendStateOff MCNUPRecommendState = 1
// MCNUPRecommendStateOn 推荐中
MCNUPRecommendStateOn MCNUPRecommendState = 2
// MCNUPRecommendStateBan 禁止推荐
MCNUPRecommendStateBan MCNUPRecommendState = 3
// MCNUPRecommendStateDel 移除中
MCNUPRecommendStateDel MCNUPRecommendState = 100
)
// MCNUPRecommendSource
// type MCNUPRecommendSource mcnadminmodel.MCNUPRecommendSource
//McnUpPermissionApply permission
type McnUpPermissionApply struct {
ID int64 `gorm:"column:id" json:"id"`
McnMid int64 `gorm:"column:mcn_mid" json:"mcn_mid"`
UpMid int64 `gorm:"column:up_mid" json:"up_mid"`
SignID int64 `gorm:"column:sign_id" json:"sign_id"`
NewPermission uint32 `gorm:"column:new_permission" json:"new_permission"`
OldPermission uint32 `gorm:"column:old_permission" json:"old_permission"`
RejectReason string `gorm:"-" json:"reject_reason"`
RejectTime time.Time `gorm:"-" json:"reject_time"`
State int8 `gorm:"column:state" json:"state"`
Ctime time.Time `gorm:"column:ctime" json:"ctime"`
Mtime time.Time `gorm:"column:mtime" json:"mtime"`
AdminID int64 `gorm:"-" json:"-"`
AdminName string `gorm:"-" json:"-"`
UpAuthLink string `gorm:"column:up_auth_link" json:"up_auth_link"`
}
// TableName table name.
func (s *McnUpPermissionApply) TableName() string {
return TableMcnUpPermissionApply
}

View File

@@ -0,0 +1,14 @@
package mcnmodel
import "go-common/app/interface/main/mcn/model"
//isUpBindable
// up主为未绑定已驳回已解除已申请的up主可被申请up主拒绝后可重复申请
// 审核中,已签约,已冻结不可被申请
func isUpBindable(state model.MCNUPState) bool {
switch state {
case model.MCNUPStateOnBlock, model.MCNUPStateOnCooling, model.MCNUPStateOnSign, model.MCNUPStateOnReview, model.MCNUPStateOnPreOpen:
return false
}
return true
}

View File

@@ -0,0 +1,57 @@
package model
// MCNSignState .
type MCNSignState int8
// const .
const (
// MCNSignStateNoApply 未申请
MCNSignStateNoApply MCNSignState = 0
// MCNSignStateOnReview 待审核
MCNSignStateOnReview MCNSignState = 1
// MCNSignStateOnReject 已驳回
MCNSignStateOnReject MCNSignState = 2
// MCNSignStateOnSign 已签约
MCNSignStateOnSign MCNSignState = 10
// MCNSignStateOnCooling 冷却中
MCNSignStateOnCooling MCNSignState = 11
// MCNSignStateOnExpire 已到期
MCNSignStateOnExpire MCNSignState = 12
// MCNSignStateOnBlock 封禁
MCNSignStateOnBlock MCNSignState = 13
// MCNSignStateOnClear 清退
MCNSignStateOnClear MCNSignState = 14
// MCNSignStateOnPreOpen 待开启
MCNSignStateOnPreOpen MCNSignState = 15
// MCNSignStateOnDelete 移除
MCNSignStateOnDelete MCNSignState = 100
)
// MCNUPState .
type MCNUPState int8
// const .
const (
// MCNUPStateNoAuthorize 未授权
MCNUPStateNoAuthorize MCNUPState = 0
// MCNUPStateOnRefuse 已拒绝
MCNUPStateOnRefuse MCNUPState = 1
// MCNUPStateOnReview 审核中
MCNUPStateOnReview MCNUPState = 2
// MCNUPStateOnReject 已驳回
MCNUPStateOnReject MCNUPState = 3
// MCNUPStateOnSign 已签约
MCNUPStateOnSign MCNUPState = 10
// MCNUPStateOnCooling 已冻结
MCNUPStateOnCooling MCNUPState = 11
// MCNUPStateOnExpire 已到期
MCNUPStateOnExpire MCNUPState = 12
// MCNUPStateOnBlock 封禁
MCNUPStateOnBlock MCNUPState = 13
// MCNUPStateOnClear 已解约
MCNUPStateOnClear MCNUPState = 14
// MCNUPStateOnPreOpen 待开启
MCNUPStateOnPreOpen MCNUPState = 15
// MCNUPStateOnDelete 删除
MCNUPStateOnDelete MCNUPState = 100
)

View File

@@ -0,0 +1,72 @@
package model
import (
"math"
)
const (
// dateFmt = "20060102"
// dateTimeFmt = "20060102_150405"
)
func round(num float64) int {
return int(num + math.Copysign(0.5, num))
}
//ToFixed fix float precision
func ToFixed(num float64, precision int) float64 {
output := math.Pow(10, float64(precision))
return float64(round(num*output)) / output // since go 1.9 doesn't have a math.Round function...
}
// floatFormat format float to string
// func floatFormat(f float64) string {
// return strconv.FormatFloat(f, 'f', 2, 64)
// }
// intFormat format int to string
// func intFormat(i int64) string {
// return strconv.Itoa(int(i))
// }
//PageArg page arg
type PageArg struct {
Page int `form:"page"`
Size int `form:"size"`
}
//PageResult page result
type PageResult struct {
Page int `json:"page"`
TotalCount int `json:"total_count"`
}
//CheckPageValidation check the page validte, return limit offset
func (arg *PageArg) CheckPageValidation() (limit, offset int) {
if arg.Page < 1 {
arg.Page = 1
}
if arg.Size > 1000 || arg.Size <= 0 {
arg.Size = 10
}
limit = arg.Size
offset = (arg.Page - 1) * limit
return
}
//ToPageResult cast to page result
func (arg *PageArg) ToPageResult(total int) (res PageResult) {
res.TotalCount = total
res.Page = arg.Page
return
}
//ExportArg export arg
type ExportArg struct {
Export string `form:"export"`
}
//ExportFormat export format
func (e *ExportArg) ExportFormat() string {
return e.Export
}