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.
204 lines
4.3 KiB
204 lines
4.3 KiB
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 |
|
}
|
|
|