123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- package academy
- import (
- "context"
- "time"
- "go-common/app/interface/main/creative/conf"
- "go-common/app/interface/main/creative/dao/academy"
- "go-common/app/interface/main/creative/dao/archive"
- "go-common/app/interface/main/creative/dao/article"
- "go-common/app/interface/main/creative/dao/resource"
- acaMdl "go-common/app/interface/main/creative/model/academy"
- "go-common/app/interface/main/creative/service"
- "go-common/library/log"
- )
- //Service struct
- type Service struct {
- c *conf.Config
- aca *academy.Dao
- arc *archive.Dao
- art *article.Dao
- resource *resource.Dao
- TagsCache map[string][]*acaMdl.Tag
- TagMapCache map[int64]*acaMdl.Tag
- parentChildMapCache map[int64]*acaMdl.Tag
- ResourceMapCache map[int64]struct{}
- OccCache []*acaMdl.Occupation
- OccMapCache map[int64]*acaMdl.Occupation
- SkillCache []*acaMdl.Skill
- SkillMapCache map[int64]*acaMdl.Skill
- OfficialID int64
- EditorChoiceID int64
- NewbCourseID int64
- ResourceID int64
- //for recommend
- Seed int64
- RecommendArcs []*acaMdl.RecArchive
- //task
- p *service.Public
- //keywords
- KWsCache []interface{}
- }
- //New get service
- func New(c *conf.Config, rpcdaos *service.RPCDaos, p *service.Public) *Service {
- s := &Service{
- c: c,
- aca: academy.New(c),
- arc: rpcdaos.Arc,
- art: rpcdaos.Art,
- resource: resource.New(c),
- OccMapCache: make(map[int64]*acaMdl.Occupation),
- SkillMapCache: make(map[int64]*acaMdl.Skill),
- OfficialID: c.Academy.OfficialID,
- EditorChoiceID: c.Academy.EditorChoiceID,
- NewbCourseID: c.Academy.NewbCourseID,
- ResourceID: c.Academy.ResourceID,
- p: p,
- }
- s.loadTags()
- s.loadOccupations()
- s.loadSkills()
- s.loadResources()
- s.loadKeyWords()
- go s.loadProc()
- return s
- }
- // Ping service
- func (s *Service) Ping(c context.Context) (err error) {
- if err = s.aca.Ping(c); err != nil {
- log.Error("s.aca.Ping err(%v)", err)
- }
- return
- }
- // Close dao
- func (s *Service) Close() {
- s.aca.Close()
- }
- // loadproc
- func (s *Service) loadProc() {
- for {
- time.Sleep(3 * time.Minute)
- s.loadTags()
- s.loadOccupations()
- s.loadSkills()
- s.loadResources()
- s.loadKeyWords()
- }
- }
- //load tags
- func (s *Service) loadTags() {
- tgList, tgMap, pcMap, err := s.aca.TagList(context.Background())
- if err != nil {
- log.Error("s.aca.TagList error(%v)", err)
- return
- }
- s.TagsCache = tgList
- s.TagMapCache = tgMap
- s.parentChildMapCache = pcMap
- }
- //load occupations
- func (s *Service) loadOccupations() {
- ocs, err := s.aca.Occupations(context.Background())
- if err != nil {
- log.Error("s.aca.Occupations error(%v)", err)
- return
- }
- s.OccCache = ocs
- for _, v := range s.OccCache {
- s.OccMapCache[v.ID] = v
- }
- }
- //load skills
- func (s *Service) loadSkills() {
- sks, err := s.aca.Skills(context.Background())
- if err != nil {
- log.Error("s.aca.Skills error(%v)", err)
- return
- }
- s.SkillCache = sks
- for _, v := range s.SkillCache {
- s.SkillMapCache[v.ID] = v
- }
- }
- //load skills
- func (s *Service) loadResources() {
- res, err := s.resource.Resource(context.Background(), int(s.ResourceID))
- if err != nil {
- log.Error("loadResources ResourceID(%d) error(%v)", int(s.ResourceID), err)
- return
- }
- if res == nil {
- return
- }
- s.ResourceMapCache = res
- }
- //load keywords
- func (s *Service) loadKeyWords() {
- res, err := s.aca.Keywords(context.Background())
- if err != nil {
- return
- }
- if res == nil {
- return
- }
- s.KWsCache = acaMdl.Trees(res, "ID", "ParentID", "Children")
- }
|