205 lines
4.3 KiB
Go
205 lines
4.3 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"time"
|
|
|
|
"go-common/library/log"
|
|
xtime "go-common/library/time"
|
|
)
|
|
|
|
var (
|
|
_upLevel = map[int]string{
|
|
0: "光腚激大励",
|
|
1: "奶瓶激大励",
|
|
2: "幼稚园激大励",
|
|
3: "小学生激大励",
|
|
4: "中学生激大励",
|
|
5: "社会人激大励",
|
|
6: "筋肉激大励",
|
|
}
|
|
|
|
_downshiftUps = map[int64]bool{
|
|
148834382: true,
|
|
3647169: true,
|
|
100238104: true,
|
|
42932619: true,
|
|
331782289: true,
|
|
40305856: true,
|
|
19419058: true,
|
|
4397552: true,
|
|
234891605: true,
|
|
310562646: true,
|
|
11793131: true,
|
|
316737962: true,
|
|
5326066: true,
|
|
669622: true,
|
|
312663583: true,
|
|
34028169: true,
|
|
288220100: true,
|
|
344838590: true,
|
|
25729281: true,
|
|
96506011: true,
|
|
312508662: true,
|
|
8888364: true,
|
|
238674714: true,
|
|
337061658: true,
|
|
321230684: true,
|
|
337376429: true,
|
|
85738972: true,
|
|
10094840: true,
|
|
291595967: true,
|
|
300676862: true,
|
|
298484242: true,
|
|
40426408: true,
|
|
2336206: true,
|
|
78839625: true,
|
|
291682397: true,
|
|
300576557: true,
|
|
61086273: true,
|
|
318078497: true,
|
|
291051169: true,
|
|
27174089: true,
|
|
274284147: true,
|
|
306198844: true,
|
|
}
|
|
)
|
|
|
|
// UpYear up year
|
|
func (s *Service) UpYear(c context.Context, mid int64) (data interface{}, err error) {
|
|
redisKey := fmt.Sprintf("growup-up-year:%d", mid)
|
|
res, err := s.dao.GetIncomeCache(c, redisKey)
|
|
if err != nil {
|
|
log.Error("s.dao.GetIncomeCache error(%v)", err)
|
|
return
|
|
}
|
|
if res != nil {
|
|
data = res["data"]
|
|
return
|
|
}
|
|
|
|
data, err = s.upYear(c, mid)
|
|
if err != nil {
|
|
log.Error("s.upYear error(%v)", err)
|
|
return
|
|
}
|
|
|
|
err = s.dao.SetIncomeCache(c, redisKey, map[string]interface{}{"data": data})
|
|
if err != nil {
|
|
log.Error("s.dao.SetIncomeCache error(%v)", err)
|
|
}
|
|
return
|
|
}
|
|
|
|
func (s *Service) upYear(c context.Context, mid int64) (data interface{}, err error) {
|
|
up := new(struct {
|
|
Name string `json:"name"`
|
|
Face string `json:"face"`
|
|
IsJoin bool `json:"is_join"`
|
|
SignedAt xtime.Time `json:"signed_at"`
|
|
FirstTime xtime.Time `json:"first_time"`
|
|
HasIncome bool `json:"has_income"`
|
|
Title string `json:"title"`
|
|
Level int `json:"level"`
|
|
TagIncome []int64 `json:"tag_income"`
|
|
})
|
|
defer func() {
|
|
data = up
|
|
}()
|
|
|
|
// has signed
|
|
up.SignedAt, err = s.getUpFirstSignedAt(c, mid)
|
|
if err != nil {
|
|
log.Error("s.dao.getUpFirstSignedAt error(%v)", err)
|
|
return
|
|
}
|
|
if up.SignedAt == 0 {
|
|
up.IsJoin = false
|
|
return
|
|
}
|
|
up.IsJoin = true
|
|
// first income
|
|
up.FirstTime, err = s.dao.GetFirstUpIncome(c, mid)
|
|
if err != nil {
|
|
log.Error("s.dao.GetFirstUpIncome error(%v)", err)
|
|
return
|
|
}
|
|
if up.FirstTime != 0 {
|
|
up.HasIncome = true
|
|
}
|
|
|
|
earliestTime := xtime.Time(time.Date(2018, 2, 1, 0, 0, 0, 0, time.Local).Unix())
|
|
if up.SignedAt < earliestTime {
|
|
up.SignedAt = earliestTime
|
|
}
|
|
if up.FirstTime < earliestTime {
|
|
up.FirstTime = earliestTime
|
|
}
|
|
|
|
// tag income
|
|
var totalIncome int64
|
|
up.TagIncome, totalIncome, err = s.dao.GetUpYearTag(c, mid)
|
|
if err != nil {
|
|
log.Error("s.dao.GetUpYearTag error(%v)", err)
|
|
return
|
|
}
|
|
|
|
upInfos, err := s.dao.AccountInfos(c, []int64{mid})
|
|
if err != nil {
|
|
log.Error("s.dao.AccountInfos error(%v)", err)
|
|
return
|
|
}
|
|
if info, ok := upInfos[mid]; ok {
|
|
up.Name = info.Nickname
|
|
up.Face = info.Face
|
|
}
|
|
|
|
switch {
|
|
case totalIncome == 0:
|
|
up.Level = 0
|
|
case totalIncome > 0 && totalIncome <= 10000:
|
|
up.Level = 1
|
|
case totalIncome > 10000 && totalIncome <= 100000:
|
|
up.Level = 2
|
|
case totalIncome > 100000 && totalIncome <= 1000000:
|
|
up.Level = 3
|
|
case totalIncome > 1000000 && totalIncome <= 5000000:
|
|
up.Level = 4
|
|
case totalIncome > 5000000 && totalIncome <= 10000000:
|
|
up.Level = 5
|
|
case totalIncome > 10000000:
|
|
up.Level = 6
|
|
}
|
|
if up.Level > 0 && _downshiftUps[mid] {
|
|
up.Level--
|
|
}
|
|
up.Title = _upLevel[up.Level]
|
|
return
|
|
}
|
|
|
|
func (s *Service) getUpFirstSignedAt(c context.Context, mid int64) (signedAt xtime.Time, err error) {
|
|
video, err := s.dao.GetUpSignedAt(c, "up_info_video", mid)
|
|
if err != nil {
|
|
return
|
|
}
|
|
signedAt = video
|
|
|
|
column, err := s.dao.GetUpSignedAt(c, "up_info_column", mid)
|
|
if err != nil {
|
|
return
|
|
}
|
|
if column != 0 && (signedAt > column || signedAt == 0) {
|
|
signedAt = column
|
|
}
|
|
|
|
bgm, err := s.dao.GetUpSignedAt(c, "up_info_bgm", mid)
|
|
if err != nil {
|
|
return
|
|
}
|
|
if bgm != 0 && (signedAt > bgm || signedAt == 0) {
|
|
signedAt = bgm
|
|
}
|
|
return
|
|
}
|