123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259 |
- package task
- import (
- "sort"
- "sync"
- "time"
- "go-common/app/job/main/videoup-report/model/utils"
- )
- const (
- // UpperSuperWhite 优质>10w粉
- UpperSuperWhite = int8(1)
- // UpperSuperBlack 高危>10w粉
- UpperSuperBlack = int8(2)
- // UpperWhite 优质
- UpperWhite = int8(3)
- // UpperBigWhite 优质>1w粉
- UpperBigWhite = int8(4)
- // UpperBigNormal 普通>1w粉
- UpperBigNormal = int8(5)
- // UpperSuperNormal 普通>10w粉
- UpperSuperNormal = int8(6)
- // UpperBlack 高危
- UpperBlack = int8(7)
- // WConfMid 按照mid配置权重
- WConfMid = int8(0)
- // WConfTaskID 按照taskid配置权重
- WConfTaskID = int8(1)
- // WConfType 按照分区配置权重
- WConfType = int8(2)
- // WConfUpFrom 按照投稿来源配置权重
- WConfUpFrom = int8(3)
- //UpperTypeWhite 优质
- UpperTypeWhite int8 = 1
- //UpperTypeBlack 高危
- UpperTypeBlack int8 = 2
- //UpperTypePGC 生产组
- UpperTypePGC int8 = 3
- //UpperTypeUGCX don't know
- UpperTypeUGCX int8 = 3
- //UpperTypePolitices 时政
- UpperTypePolitices int8 = 5
- //UpperTypeEnterprise 企业
- UpperTypeEnterprise int8 = 7
- //UpperTypeSigned 签约
- UpperTypeSigned int8 = 15
- )
- var (
- // TaskCountTH 插队任务阈值
- TaskCountTH = 2000
- // SuperUpperTH 粉丝数阈值
- SuperUpperTH = int64(100000)
- // BigUpperTH 粉丝数阈值
- BigUpperTH = int64(10000)
- // WLVConf 各个权重等级具体的配置数值
- WLVConf = &WeightValueConf{
- MaxWeight: int64(200000), //最大权重值
- MinWeight: int64(-510),
- SubRelease: int64(18), //指派再释放的任务
- //特殊任务参数
- Slv1: int64(8), // 普通用户>=1W粉
- Slv2: int64(10), // 普通用户>=10W粉
- Slv3: int64(12), // 优质用户<1W粉
- Slv4: int64(15), // 优质用户>=1W粉
- Slv5: int64(18), // 优质用户>=10W粉
- Slv6: int64(6), // 高危用户>=10W粉
- Slv7: int64(0), // 其他高危
- //普通任务参数
- Nlv1: int64(3),
- Nlv2: int64(6),
- Nlv3: int64(9),
- Nlv4: int64(12),
- Nlv5: int64(0),
- Nsum9: int64(0), // 等待9分钟总和 3*0
- Nsum15: int64(6), // 等待15分钟总和 2*3
- Nsum27: int64(30), // 等待27分钟总和 6 + 4*6
- Nsum45: int64(84), // 等待45分钟总和 30 + 6*9
- //定时任务参数
- Tlv1: int64(3),
- Tlv2: int64(9),
- Tlv3: int64(21),
- Tlv4: int64(0),
- Tsum2h: int64(120),
- Tsum1h: int64(300),
- }
- )
- //WeightValueConf 可配置的权重
- type WeightValueConf struct {
- MaxWeight int64 `json:"maxweight"`
- SubRelease int64 `json:"subrelease"`
- MinWeight int64 `json:"minweight"`
- Slv1 int64 `json:"slv1"`
- Slv2 int64 `json:"slv2"`
- Slv3 int64 `json:"slv3"`
- Slv4 int64 `json:"slv4"`
- Slv5 int64 `json:"slv5"`
- Slv6 int64 `json:"slv6"`
- Slv7 int64 `json:"slv7"`
- Nlv1 int64 `json:"nlv1"`
- Nlv2 int64 `json:"nlv2"`
- Nlv3 int64 `json:"nlv3"`
- Nlv4 int64 `json:"nlv4"`
- Nlv5 int64 `json:"nlv5"`
- Nsum9 int64 `json:"-"`
- Nsum15 int64 `json:"-"`
- Nsum27 int64 `json:"-"`
- Nsum45 int64 `json:"-"`
- Tlv1 int64 `json:"tlv1"`
- Tlv2 int64 `json:"tlv2"`
- Tlv3 int64 `json:"tlv3"`
- Tlv4 int64 `json:"tlv4"`
- Tsum2h int64 `json:"-"`
- Tsum1h int64 `json:"-"`
- }
- //WeightConfig task_weight_config记录结构
- type WeightConfig struct {
- ID int64
- Mid int64
- TaskID int64
- Rule int8
- Weight int64
- Ctime time.Time
- Mtime time.Time
- UserName string
- Desc string
- }
- //WeightParams 审核任务权重的相关参数
- type WeightParams struct {
- TaskID int64 `json:"taskid"`
- Weight int64 `json:"weight"` //权重总值
- State int8 `json:"state"` //任务状态
- Mid int64 `json:"mid"`
- Special int8 `json:"special"` //特殊任务
- Ctime utils.FormatTime `json:"ctime"` //任务生成时间
- Ptime utils.FormatTime `json:"ptime"` //定时发布时间
- CfItems []*ConfigItem `json:"cfitems,omitempty"`
- Fans int64 `json:"fans"` //粉丝数
- AccFailed bool `json:"accfaild"` //账号查询是否失败
- UpGroups []int8 `json:"ugs"` //分组
- UpFrom int8 `json:"upfrom"` //来源
- TypeID int16 `json:"typeid"` //分区
- }
- // ConfigItem task weight config item
- type ConfigItem struct {
- ID int64 `json:"id"`
- Radio int8 `json:"radio"`
- CID int64 `json:"cid"` // config id 四种配置通用
- Uname string `json:"user,omitempty"`
- Rule int8 `json:"rule"`
- Weight int64 `json:"weight"`
- Mtime utils.FormatTime `json:"mtime"`
- Desc string `json:"desc,omitempty"`
- Bt utils.FormatTime `json:"et"`
- Et utils.FormatTime `json:"bt"`
- }
- //WeightLog 权重变更记录
- type WeightLog struct {
- TaskID int64 `json:"taskid"`
- Mid int64 `json:"mid"` //用户id
- Weight int64 `json:"weight"` //任务权重总和
- CWeight int64 `json:"cweight"` //配置权重
- NWeight int64 `json:"nweight"` //普通任务
- SWeight int64 `json:"sweight"` //特殊任务
- TWeight int64 `json:"tweight"` //定时任务
- Uptime utils.FormatTime `json:"uptime"` //更新时间
- CfItems []*ConfigItem `json:"cfitems,omitempty"`
- }
- // JumpList 插队同步的任务
- type JumpList struct {
- l []*WeightLog
- min int64
- count int
- mux sync.RWMutex
- }
- // NewJumpList New JumpList
- func NewJumpList() *JumpList {
- return &JumpList{
- l: []*WeightLog{},
- min: -1,
- count: 0,
- }
- }
- // PUSH 添加
- func (jl *JumpList) PUSH(item *WeightLog) {
- jl.mux.Lock()
- defer jl.mux.Unlock()
- if jl.count == TaskCountTH { //队列满了
- if item.Weight > jl.min { //剔除最小的
- jl.l = jl.l[1:jl.count]
- jl.min = jl.l[0].Weight
- jl.count--
- } else {
- return
- }
- }
- inx := sort.SearchInts(jl.List(), int(item.Weight))
- switch {
- case inx == 0: //头部
- jl.l = append([]*WeightLog{item}, jl.l...)
- jl.min = item.Weight
- case inx == jl.count: //尾部
- jl.l = append(jl.l, item)
- default:
- rear := append([]*WeightLog{}, jl.l[inx:]...)
- jl.l = append(jl.l[:inx], item)
- jl.l = append(jl.l, rear...)
- }
- jl.count++
- }
- // POP 读取
- func (jl *JumpList) POP() (item *WeightLog) {
- jl.mux.Lock()
- defer jl.mux.Unlock()
- if jl.count > 1 {
- item = jl.l[jl.count-1]
- jl.l = jl.l[:jl.count-1]
- jl.count--
- jl.min = jl.l[jl.count-1].Weight
- return
- } else if jl.count == 1 {
- item = jl.l[0]
- jl.l = []*WeightLog{}
- jl.count = 0
- jl.min = -1
- return
- }
- return nil
- }
- // Reset 重置
- func (jl *JumpList) Reset() {
- jl.mux.Lock()
- defer jl.mux.Unlock()
- jl.l = []*WeightLog{}
- jl.min = -1
- jl.count = 0
- }
- // List 待更新权重的任务
- func (jl *JumpList) List() []int {
- arr := []int{}
- for _, jw := range jl.l {
- arr = append(arr, int(jw.Weight))
- }
- return arr
- }
|