You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

122 lines
2.4 KiB
Go

package provider
import (
"context"
"joybuywork/internal/repository/cache"
"joybuywork/internal/repository/model"
"joybuywork/internal/repository/mtype"
"joybuywork/internal/utils/logic"
"joybuywork/internal/utils/merr"
"gorm.io/gen"
)
type LangTitle struct {
logic.Context
cpn *model.FissionCampaign
userLang string
lang *model.FissionCampaignLang
}
// NewLangTitle 奖品发放验证
func NewLangTitle(ctx context.Context, cpn *model.FissionCampaign, userLang string) (*LangTitle, error) {
lang := &LangTitle{
cpn: cpn,
userLang: userLang,
}
lang.BaseInit(ctx, merr.NewBE(ctx))
err := lang.setLang()
if err != nil {
return nil, err
}
return lang, nil
}
// GetCondTitle 获取任务名称文案
func (s *LangTitle) GetCondTitle(condIds ...int64) (data map[int64]string, err error) {
data = make(map[int64]string)
l := len(condIds)
if s.lang != nil {
var idMap = make(map[int64]struct{}, l)
for _, id := range condIds {
idMap[id] = struct{}{}
}
for _, cond := range s.lang.GetConds() {
if _, ok := idMap[cond.CondId]; !ok && l > 0 {
continue
}
data[cond.CondId] = cond.Desc
}
return
}
m := s.GetDao().FissionCampaignCond
var conds []gen.Condition
if l > 0 {
conds = append(conds, m.ID.In(condIds...))
} else {
conds = append(conds, m.CampaignID.Eq(s.cpn.ID), m.WithContext(s.Ctx).
Or(m.IsDel.Eq(mtype.No)).
Or(m.IsDel.Eq(mtype.Yes), m.DelUse.Eq(mtype.Yes)))
}
list, err := m.WithContext(s.Ctx).Where(conds...).Find()
if err != nil {
err = s.BE().MysqlError(err)
return
}
for _, cond := range list {
data[cond.ID] = cond.Desc
}
return
}
// GetPageTitle 获取页面标题
func (s *LangTitle) GetPageTitle() (string, error) {
if s.lang != nil {
return s.lang.PageTitle, nil
}
style, err := cache.NewCampaignStyle(s.Ctx).FindByCampaignId(s.cpn.ID)
if err != nil {
return "", s.BE().CacheError(err)
}
if style != nil {
return style.PageTitle, nil
}
oldConf, err := cache.NewCampaignConfig(s.Ctx).FindByCampaignId(s.cpn.ID)
if err != nil {
return "", s.BE().CacheError(err)
}
if oldConf != nil {
return oldConf.PageTitle, nil
}
return "", s.BE().VerifyError("not found data")
}
func (s *LangTitle) setLang() (err error) {
if s.userLang == s.cpn.GetLangMarks()[0] {
return
}
s.lang, err = cache.NewCampaignLang(s.Ctx).FindByCampaignId(s.cpn.ID, s.userLang)
if err != nil {
err = s.BE().CacheError(err)
return
}
return
}