Files
go-common/app/interface/main/growup/service/up_year.go
2019-04-22 18:49:16 +08:00

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
}