123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- package card
- import (
- "encoding/json"
- "strconv"
- "go-common/app/interface/main/app-card/model/card/ai"
- "go-common/app/interface/main/app-channel/model"
- "go-common/app/interface/main/app-channel/model/recommend"
- "go-common/library/log"
- )
- type Card struct {
- ID int64 `json:"-"`
- Title string `json:"-"`
- ChannelID int64 `json:"-"`
- Type string `json:"-"`
- Value int64 `json:"-"`
- Reason string `json:"-"`
- ReasonType int8 `json:"-"`
- Pos int `json:"-"`
- FromType string `json:"-"`
- }
- type CardPlat struct {
- CardID int64 `json:"-"`
- Plat int8 `json:"-"`
- Condition string `json:"-"`
- Build int `json:"-"`
- }
- type UpCard struct {
- ID int64 `json:"id,omitempty"`
- Type string `json:"type,omitempty"`
- Title string `json:"title,omitempty"`
- RcmdReason string `json:"rcmd_reason,omitempty"`
- Content json.RawMessage `json:"content,omitempty"`
- Data *recommend.Item `json:"data,omitempty"`
- }
- type UpContent struct {
- CType string `json:"ctype,omitempty"`
- CValue interface{} `json:"cvalue,omitempty"`
- }
- type ChannelSingle struct {
- AID interface{} `json:"aid,omitempty"`
- ChannelID interface{} `json:"channel_id,omitempty"`
- }
- func (c *UpCard) Change() {
- data := []*UpContent{}
- if err := json.Unmarshal(c.Content, &data); err != nil {
- log.Error("json.Unmarshal(%s) error(%v)", c.Content, err)
- return
- }
- upItem := make([]*recommend.Item, 0, len(data))
- for _, d := range data {
- switch d.CType {
- case "mid", "channel_id":
- var (
- value int64
- err error
- )
- switch v := d.CValue.(type) {
- case float64:
- value = int64(v)
- case string:
- if value, err = strconv.ParseInt(v, 10, 64); err != nil {
- continue
- }
- }
- item := &recommend.Item{ID: value}
- upItem = append(upItem, item)
- }
- }
- if len(upItem) < 3 {
- return
- }
- // TODO rcmd_reason
- c.Data = &recommend.Item{Goto: model.GotoSubscribe, ID: c.ID, Config: &recommend.Config{Title: c.RcmdReason}, Items: upItem}
- }
- func (c *UpCard) ChannelSingleChange() {
- data := &ChannelSingle{}
- if err := json.Unmarshal(c.Content, &data); err != nil {
- log.Error("json.Unmarshal(%s) error(%v)", c.Content, err)
- return
- }
- var (
- aid, channelid int64
- err error
- )
- switch v := data.AID.(type) {
- case float64:
- aid = int64(v)
- case string:
- if aid, err = strconv.ParseInt(v, 10, 64); err != nil {
- return
- }
- }
- switch v := data.ChannelID.(type) {
- case float64:
- channelid = int64(v)
- case string:
- if channelid, err = strconv.ParseInt(v, 10, 64); err != nil {
- return
- }
- }
- c.Data = &recommend.Item{Goto: model.GotoChannelRcmd, ID: aid, Config: &recommend.Config{Title: c.Title}, TagID: channelid}
- }
- func (c *Card) CardToAiChange() (a *ai.Item) {
- a = &ai.Item{
- Goto: c.Type,
- ID: c.Value,
- RcmdReason: c.fromRcmdReason(),
- }
- return
- }
- func (c *Card) fromRcmdReason() (a *ai.RcmdReason) {
- var content string
- switch c.ReasonType {
- case 0:
- content = ""
- case 1:
- content = "编辑精选"
- case 2:
- content = "热门推荐"
- case 3:
- content = c.Reason
- }
- if content != "" {
- a = &ai.RcmdReason{ID: 1, Content: content, BgColor: "yellow", IconLocation: "left_top"}
- }
- return
- }
|