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.
168 lines
4.0 KiB
168 lines
4.0 KiB
package operation |
|
|
|
import ( |
|
"context" |
|
"go-common/app/interface/main/creative/conf" |
|
"go-common/app/interface/main/creative/dao/creative" |
|
operMdl "go-common/app/interface/main/creative/model/operation" |
|
"go-common/app/interface/main/creative/service" |
|
"go-common/library/log" |
|
"time" |
|
) |
|
|
|
//Service struct |
|
type Service struct { |
|
c *conf.Config |
|
creative *creative.Dao |
|
NoticeStr string |
|
CreativeStr string |
|
// cache |
|
operCache []*operMdl.Operation |
|
allRelOperCache []*operMdl.Operation |
|
toolCache map[string][]*operMdl.Operation |
|
WebRelOperCache map[string][]*operMdl.Operation |
|
CreatorRelOperCache map[string][]*operMdl.Operation |
|
} |
|
|
|
//New get service |
|
func New(c *conf.Config, rpcdaos *service.RPCDaos) *Service { |
|
s := &Service{ |
|
c: c, |
|
creative: creative.New(c), |
|
} |
|
s.loadOper() |
|
s.loadTool() |
|
s.loadRelOper() |
|
go s.loadproc() |
|
return s |
|
} |
|
|
|
func (s *Service) loadOper() { |
|
var ( |
|
op []*operMdl.Operation |
|
creative *operMdl.Operation |
|
notice *operMdl.Operation |
|
err error |
|
) |
|
op, err = s.creative.Operations(context.TODO(), operMdl.FullTypes()) |
|
if err != nil { |
|
log.Error("s.oper.Operations error(%v)", err) |
|
return |
|
} |
|
log.Warn("loadOper fulltypes (%+v)", op) |
|
s.operCache = op |
|
// generate rank 最小的 creative and notice str |
|
for _, v := range op { |
|
if v.Ty == "creative" && (v.Platform == 0 || v.Platform == 1) { |
|
if creative == nil || (v.Rank < creative.Rank) { |
|
creative = v |
|
} |
|
} |
|
if v.Ty == "notice" && (v.Platform == 0 || v.Platform == 1) { |
|
if notice == nil || (v.Rank < notice.Rank) { |
|
notice = v |
|
} |
|
} |
|
} |
|
log.Warn("loadOper CreativeStr(%+v) | NoticeStr(%+v)", creative, notice) |
|
if creative != nil { |
|
s.CreativeStr = creative.Content |
|
} else { |
|
s.CreativeStr = "" |
|
} |
|
if notice != nil { |
|
s.NoticeStr = notice.Content |
|
} else { |
|
s.NoticeStr = "" |
|
} |
|
} |
|
|
|
func (s *Service) loadRelOper() { |
|
var ( |
|
op []*operMdl.Operation |
|
err error |
|
) |
|
op, err = s.creative.AllOperByTypeSQL(context.TODO(), []string{"'play'", "'notice'", "'collect_arc'"}) |
|
if err != nil { |
|
log.Error("s.oper.AllOperByTypeSQL error(%v)", err) |
|
return |
|
} |
|
s.allRelOperCache = op |
|
tmpWebRelOperCache := make(map[string][]*operMdl.Operation) |
|
tmpCreatorRelOperCache := make(map[string][]*operMdl.Operation) |
|
for _, v := range op { |
|
vs := &operMdl.Operation{ |
|
ID: v.ID, |
|
Ty: v.Ty, |
|
Rank: v.Rank, |
|
Pic: v.Pic, |
|
Link: v.Link, |
|
Content: v.Content, |
|
Remark: v.Remark, |
|
Note: v.Note, |
|
Stime: v.Stime, |
|
Etime: v.Etime, |
|
AppPic: v.AppPic, |
|
Platform: v.Platform, |
|
} |
|
// 合并 collect_arc + play => play, for Web + Creator |
|
if vs.Ty == "collect_arc" { |
|
vs.Ty = "play" |
|
} |
|
if v.Platform == 0 { //all platform |
|
tmpWebRelOperCache[vs.Ty] = append(tmpWebRelOperCache[vs.Ty], vs) |
|
tmpCreatorRelOperCache[vs.Ty] = append(tmpCreatorRelOperCache[vs.Ty], vs) |
|
} else if v.Platform == 1 { //app |
|
tmpCreatorRelOperCache[vs.Ty] = append(tmpCreatorRelOperCache[vs.Ty], vs) |
|
} else if v.Platform == 2 { //web |
|
tmpWebRelOperCache[vs.Ty] = append(tmpWebRelOperCache[vs.Ty], vs) |
|
} |
|
} |
|
s.WebRelOperCache = tmpWebRelOperCache |
|
s.CreatorRelOperCache = tmpCreatorRelOperCache |
|
} |
|
|
|
func (s *Service) loadTool() { |
|
var ( |
|
icon []*operMdl.Operation |
|
sicon []*operMdl.Operation |
|
err error |
|
) |
|
icon, err = s.creative.Tool(context.TODO(), "icon") |
|
if err != nil { |
|
log.Error("s.oper.Tool(%s) error(%v)", "icon", err) |
|
return |
|
} |
|
sicon, err = s.creative.Tool(context.TODO(), "submit_icon") |
|
if err != nil { |
|
log.Error("s.oper.Tool(%s) error(%v)", "submit_icon", err) |
|
return |
|
} |
|
var tmp = map[string][]*operMdl.Operation{} |
|
tmp["icon"] = icon |
|
tmp["submit_icon"] = sicon |
|
s.toolCache = tmp |
|
} |
|
|
|
// loadproc |
|
func (s *Service) loadproc() { |
|
for { |
|
time.Sleep(1 * time.Minute) |
|
s.loadOper() |
|
s.loadTool() |
|
s.loadRelOper() |
|
} |
|
} |
|
|
|
// Ping service |
|
func (s *Service) Ping(c context.Context) (err error) { |
|
if err = s.creative.Ping(c); err != nil { |
|
log.Error("s.operationDao.PingDb err(%v)", err) |
|
} |
|
return |
|
} |
|
|
|
// Close dao |
|
func (s *Service) Close() { |
|
s.creative.Close() |
|
}
|
|
|