go-common/app/job/main/usersuit/service/service.go
2019-04-22 18:49:16 +08:00

101 lines
1.9 KiB
Go

package service
import (
"context"
"sync"
"go-common/app/job/main/usersuit/conf"
medalDao "go-common/app/job/main/usersuit/dao/medal"
pendantDao "go-common/app/job/main/usersuit/dao/pendant"
"go-common/library/log"
"go-common/library/queue/databus"
"github.com/robfig/cron"
)
// Service struct of service.
type Service struct {
pendantDao *pendantDao.Dao
medalDao *medalDao.Dao
// conf
c *conf.Config
accountNotifyPub *databus.Databus
vipBinLogSub *databus.Databus
notifych chan func()
// wait group
wg sync.WaitGroup
}
// New create service instance and return.
func New(c *conf.Config) (s *Service) {
s = &Service{
c: c,
pendantDao: pendantDao.New(c),
medalDao: medalDao.New(c),
accountNotifyPub: databus.New(c.Databus.AccountNotify),
vipBinLogSub: databus.New(c.Databus.VipBinLog),
notifych: make(chan func(), 10240),
}
// this is function
go s.startexpireproc()
s.wg.Add(1)
go s.notifyproc()
s.wg.Add(1)
go s.vipconsumerproc()
t := cron.New()
if len(s.c.Properties.MedalCron) != 0 {
t.AddFunc(s.c.Properties.MedalCron, s.cronUpNameplate)
}
t.Start()
return
}
func (s *Service) addNotify(f func()) {
select {
case s.notifych <- f:
default:
log.Warn("addNotify chan full")
}
}
// notifyproc nofity clear cache
func (s *Service) notifyproc() {
defer s.wg.Done()
for {
f := <-s.notifych
f()
}
}
// Close dao.
func (s *Service) Close() {
if s.pendantDao != nil {
s.pendantDao.Close()
s.medalDao.Close()
}
s.wg.Wait()
}
// Ping check server ok.
func (s *Service) Ping(c context.Context) (err error) {
if err = s.pendantDao.Ping(c); err != nil {
return
}
return
}
// PDTStatStep PDT Stat step
type PDTStatStep struct {
Start, End, Step int64
}
// PDTGHisStep PDT G his
type PDTGHisStep struct {
Start, End, Step int64
}
// PDTOHisStep Order his
type PDTOHisStep struct {
Start, End, Step int64
}