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.
213 lines
5.4 KiB
213 lines
5.4 KiB
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 |
|
}
|
|
|