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.
114 lines
2.7 KiB
114 lines
2.7 KiB
package ad |
|
|
|
import ( |
|
"context" |
|
"sort" |
|
"strings" |
|
"time" |
|
|
|
"go-common/app/interface/main/creative/conf" |
|
gD "go-common/app/interface/main/creative/dao/game" |
|
porderD "go-common/app/interface/main/creative/dao/porder" |
|
gM "go-common/app/interface/main/creative/model/game" |
|
porderM "go-common/app/interface/main/creative/model/porder" |
|
"go-common/app/interface/main/creative/service" |
|
"go-common/library/log" |
|
) |
|
|
|
//Service struct. |
|
type Service struct { |
|
c *conf.Config |
|
game *gD.Dao |
|
porder *porderD.Dao |
|
industryList []*porderM.Config |
|
showList []*porderM.Config |
|
} |
|
|
|
//New get service. |
|
func New(c *conf.Config, rpcdaos *service.RPCDaos) *Service { |
|
s := &Service{ |
|
c: c, |
|
game: gD.New(c), |
|
porder: porderD.New(c), |
|
industryList: []*porderM.Config{}, |
|
showList: []*porderM.Config{}, |
|
} |
|
s.loadPorderConfigList() |
|
go s.loadproc() |
|
return s |
|
} |
|
|
|
// GameList fn |
|
func (s *Service) GameList(c context.Context, keywordStr, letterStr string, pn, ps int, ip string) (glist *gM.ListWithPager, err error) { |
|
list, err := s.game.List(context.TODO(), keywordStr, ip) |
|
if err != nil || len(list) == 0 { |
|
return |
|
} |
|
res := []*gM.ListItem{} |
|
if len(letterStr) > 0 { |
|
letterStr = strings.ToUpper(string(letterStr[0])) |
|
for _, ele := range list { |
|
if ele.Letter == letterStr { |
|
res = append(res, ele) |
|
} |
|
} |
|
} else { |
|
res = list |
|
} |
|
sort.Slice(res, func(i, j int) bool { return res[i].GameBaseID > res[j].GameBaseID }) |
|
total := len(res) |
|
start := (pn - 1) * ps |
|
end := pn * ps |
|
glist = &gM.ListWithPager{ |
|
Pn: pn, |
|
Ps: ps, |
|
Total: total, |
|
} |
|
if total <= start { |
|
glist.List = make([]*gM.ListItem, 0) |
|
} else if total <= end { |
|
glist.List = res[start:total] |
|
} else { |
|
glist.List = res[start:end] |
|
} |
|
return |
|
} |
|
|
|
// IndustryList fn |
|
func (s *Service) IndustryList(c context.Context) (list []*porderM.Config, err error) { |
|
list = s.industryList |
|
return |
|
} |
|
|
|
// ShowList fn |
|
func (s *Service) ShowList(c context.Context) (list []*porderM.Config, err error) { |
|
list = s.showList |
|
return |
|
} |
|
|
|
func (s *Service) loadproc() { |
|
//for wait rpc client connect |
|
time.Sleep(time.Duration(2 * time.Second)) |
|
for { |
|
s.loadPorderConfigList() |
|
time.Sleep(time.Duration(2 * time.Minute)) |
|
} |
|
} |
|
|
|
func (s *Service) loadPorderConfigList() { |
|
list, err := s.porder.ListConfig(context.TODO()) |
|
if err != nil || list == nil || len(list) == 0 { |
|
return |
|
} |
|
s.industryList = []*porderM.Config{} |
|
s.showList = []*porderM.Config{} |
|
for _, v := range list { |
|
if v.Tp == porderM.ConfigTypeIndustry { |
|
s.industryList = append(s.industryList, v) |
|
} |
|
if v.Tp == porderM.ConfigTypeShow { |
|
s.showList = append(s.showList, v) |
|
} |
|
} |
|
log.Info("ListConfig (%d)|(%d)", len(s.showList), len(s.industryList)) |
|
}
|
|
|