123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 |
- package operation
- import (
- "context"
- "encoding/json"
- operMdl "go-common/app/interface/main/creative/model/operation"
- "go-common/library/ecode"
- "go-common/library/log"
- "strconv"
- "strings"
- "time"
- )
- // 0 => web+app; 1=> app; 2=> web; 100=>全平台
- const (
- remarkShowBanner = "show_banner"
- )
- // Tool get a tool down.
- func (s *Service) Tool(c context.Context, ty int8) (ops []*operMdl.Operation, err error) {
- var tyStr string
- if ty == 0 || ty == 1 { //创作中心页的tool下载
- tyStr = "icon"
- } else if ty == 2 { //投稿页的tool下载
- tyStr = "submit_icon"
- }
- if op, ok := s.toolCache[tyStr]; ok {
- ops = op
- }
- return
- }
- // WebOperations get full operations.
- func (s *Service) WebOperations(c context.Context) (ops map[string][]*operMdl.Operation, err error) {
- if s.operCache == nil {
- err = ecode.NothingFound
- return
- }
- ops = make(map[string][]*operMdl.Operation)
- for _, v := range s.operCache {
- if v.Platform == 0 || v.Platform == 2 {
- o := &operMdl.Operation{}
- o.ID = v.ID
- o.Ty = v.Ty
- o.Rank = v.Rank
- o.Pic = v.Pic
- o.Link = v.Link
- o.Content = v.Content
- o.Remark = v.Remark
- o.Note = v.Note
- o.Stime = v.Stime
- o.Etime = v.Etime
- if o.Ty == "play" || o.Ty == "collect_arc" {
- o.Ty = "board"
- }
- ops[o.Ty] = append(ops[o.Ty], o)
- }
- }
- for _, ty := range operMdl.FullTypes() {
- trimTy := strings.Trim(ty, "'")
- if _, ok := ops[trimTy]; !ok {
- ops[trimTy] = []*operMdl.Operation{}
- }
- }
- return
- }
- // AppBanner get app index flexslider; filter by platform + business + remark
- func (s *Service) AppBanner(c context.Context) (bns []*operMdl.Banner, cbns []*operMdl.BannerCreator, err error) {
- bns = make([]*operMdl.Banner, 0, len(s.operCache))
- cbns = make([]*operMdl.BannerCreator, 0, len(s.operCache))
- for _, v := range s.operCache {
- // 平台切除web平台;
- // 允许征稿启示也显示在所有APP的Banner上;
- // 必须开启remark=="show_banner"的业务校验;
- if (v.Ty != "play" && v.Ty != "collect_arc") ||
- v.Platform == 2 ||
- v.Remark != remarkShowBanner {
- continue
- }
- bn := &operMdl.Banner{}
- cbn := &operMdl.BannerCreator{}
- bn.Ty = v.Ty
- bn.Rank = v.Rank
- cbn.Ty = v.Ty
- cbn.Rank, _ = strconv.Atoi(v.Rank)
- if v.AppPic == "" {
- pics := []string{}
- if err = json.Unmarshal([]byte(v.Pic), &pics); err != nil {
- log.Error("json.Unmarshal(%v) error(%v)", string(v.Pic), err)
- }
- bn.Pic = pics[len(pics)-1]
- cbn.Pic = pics[len(pics)-1]
- } else {
- bn.Pic = v.AppPic
- cbn.Pic = v.AppPic
- }
- bn.Link = v.Link
- bn.Content = v.Content
- cbn.Link = v.Link
- cbn.Content = v.Content
- bns = append(bns, bn)
- cbns = append(cbns, cbn)
- }
- return
- }
- // CreatorOperationList get operations list.
- func (s *Service) CreatorOperationList(c context.Context, pn, ps int) (list *operMdl.BannerList, err error) {
- if s.operCache == nil {
- err = ecode.NothingFound
- return
- }
- list = &operMdl.BannerList{Pn: pn, Ps: ps}
- // notice: s.CreatorRelOperCache["play"] 已经进行合并
- play, ok := s.CreatorRelOperCache["play"]
- if !ok {
- return
- }
- bcs := make([]*operMdl.BannerCreator, 0)
- for _, v := range play {
- bc := &operMdl.BannerCreator{}
- bc.Ty = v.Ty
- bc.Rank, _ = strconv.Atoi(v.Rank)
- if v.AppPic == "" {
- pics := []string{}
- if err = json.Unmarshal([]byte(v.Pic), &pics); err != nil {
- log.Error("json.Unmarshal(%v) error(%v)", string(v.Pic), err)
- }
- bc.Pic = pics[len(pics)-1]
- } else {
- bc.Pic = v.AppPic
- }
- bc.Link = v.Link
- bc.Content = v.Content
- st, _ := time.Parse("2006-01-02 15:04:05", v.Stime)
- bc.Stime = st.Unix()
- et, _ := time.Parse("2006-01-02 15:04:05", v.Etime)
- bc.Etime = et.Unix()
- bcs = append(bcs, bc)
- }
- total := len(bcs)
- list.Total = total
- start := (pn - 1) * ps
- end := pn * ps
- if total <= start {
- list.BannerCreator = make([]*operMdl.BannerCreator, 0)
- } else if total <= end {
- list.BannerCreator = bcs[start:total]
- } else {
- list.BannerCreator = bcs[start:end]
- }
- return
- }
- // AppOperationList get operations list.
- func (s *Service) AppOperationList(c context.Context, pn, ps int, tp string) (list *operMdl.BannerList, err error) {
- tpOK := false
- for _, fullTp := range operMdl.FullTypes() {
- trimTy := strings.Trim(fullTp, "'")
- if trimTy == tp {
- tpOK = true
- break
- }
- }
- if s.allRelOperCache == nil || !tpOK {
- return
- }
- list = &operMdl.BannerList{Pn: pn, Ps: ps}
- vals := make([]*operMdl.Operation, 0)
- for _, v := range s.allRelOperCache {
- if v.Ty == tp && (v.Platform == 0 || v.Platform == 1) {
- vals = append(vals, v)
- }
- }
- if len(vals) == 0 {
- return
- }
- bcs := make([]*operMdl.BannerCreator, 0)
- for _, v := range vals {
- bc := &operMdl.BannerCreator{}
- bc.Ty = v.Ty
- bc.Rank, _ = strconv.Atoi(v.Rank)
- if v.AppPic == "" {
- pics := []string{}
- if err = json.Unmarshal([]byte(v.Pic), &pics); err != nil {
- log.Error("json.Unmarshal(%v) error(%v)", string(v.Pic), err)
- }
- bc.Pic = pics[len(pics)-1]
- } else {
- bc.Pic = v.AppPic
- }
- bc.Link = v.Link
- bc.Content = v.Content
- st, _ := time.Parse("2006-01-02 15:04:05", v.Stime)
- bc.Stime = st.Unix()
- et, _ := time.Parse("2006-01-02 15:04:05", v.Etime)
- bc.Etime = et.Unix()
- bcs = append(bcs, bc)
- }
- total := len(bcs)
- list.Total = total
- start := (pn - 1) * ps
- end := pn * ps
- if total <= start {
- list.BannerCreator = make([]*operMdl.BannerCreator, 0)
- } else if total <= end {
- list.BannerCreator = bcs[start:total]
- } else {
- list.BannerCreator = bcs[start:end]
- }
- return
- }
|