1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- package service
- import (
- "context"
- "strconv"
- "strings"
- "time"
- "go-common/app/interface/main/player/model"
- "go-common/library/ecode"
- "go-common/library/log"
- )
- const (
- _userRandomType = "用户随机-尾号"
- )
- // Policy return policy info.
- func (s *Service) Policy(c context.Context, id, mid int64) (item *model.Pitem, err error) {
- var policy *model.Policy
- if policy, err = s.checkPolicy(id); err != nil {
- log.Error("s.getPolicy(%d) err(%v)", id, err)
- return
- }
- switch policy.Type {
- case _userRandomType:
- if item, err = s.userPolicy(mid, policy); err != nil {
- log.Error("s.userPolicy(%d) err(%v)", mid, err)
- return
- }
- }
- return
- }
- func (s *Service) checkPolicy(id int64) (policy *model.Policy, err error) {
- if id != 1 {
- err = ecode.PLayerPolicyNotExist
- return
- }
- policy = s.c.Policy
- if time.Now().Unix() < policy.StartTime.Unix() {
- err = ecode.PLayerPolicyNotStart
- return
- }
- if time.Now().Unix() > policy.EndTime.Unix() {
- err = ecode.PLayerPolicyEnded
- return
- }
- return
- }
- // 用户随机-尾号 策略方法
- func (s *Service) userPolicy(mid int64, policy *model.Policy) (res *model.Pitem, err error) {
- var itemMap = make(map[string]*model.Pitem, len(s.c.Pitem))
- for _, item := range s.c.Pitem {
- item.Ver = policy.MtimeTime.Unix()
- itemMap[item.ExtData] = item
- }
- if mid > 0 {
- utail := int(mid % 100)
- for _, item := range itemMap {
- var (
- begin int
- end int
- beginAndEnd []string
- )
- if item.ExtData == "default" {
- continue
- }
- beginAndEnd = strings.Split(item.ExtData, "-")
- if len(beginAndEnd) != 2 {
- log.Error("item.ExtData error")
- return
- }
- if begin, err = strconv.Atoi(beginAndEnd[0]); err != nil {
- log.Error("item.ExtData error")
- return
- }
- if end, err = strconv.Atoi(beginAndEnd[1]); err != nil {
- log.Error("item.ExtData error")
- return
- }
- if utail >= begin && utail < end {
- res = item
- return
- }
- }
- } else {
- res = itemMap["default"]
- }
- return
- }
|