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.
347 lines
8.6 KiB
Go
347 lines
8.6 KiB
Go
package containers
|
|
|
|
import (
|
|
"joybuywork/internal/app"
|
|
"joybuywork/internal/consts"
|
|
"joybuywork/internal/repository/cache"
|
|
"joybuywork/internal/repository/dbcheck"
|
|
"joybuywork/internal/repository/finder"
|
|
"joybuywork/internal/repository/model"
|
|
"joybuywork/internal/repository/mtype"
|
|
"joybuywork/internal/utils/logic"
|
|
pb "joybuywork/proto/go_proto/w_fission"
|
|
"joybuywork/proto/go_proto/workerr"
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
type FissionTemplateInfo struct {
|
|
logic.Logic
|
|
Req *pb.TemplateInfoReq
|
|
Res *pb.TemplateInfoRes
|
|
}
|
|
|
|
func (s *FissionTemplateInfo) Run() error {
|
|
return logic.Run(s)
|
|
}
|
|
|
|
func (s *FissionTemplateInfo) Exec() (err error) {
|
|
temp, group, err := s.temp()
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
temp, err = s.switchTemp(temp)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
err = s.lang(temp, group)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
s.fixReward()
|
|
|
|
return
|
|
}
|
|
|
|
func (s *FissionTemplateInfo) temp() (temp *model.FissionTemp, group *model.FissionTempGroup, err error) {
|
|
temp, err = finder.FissionTemp(s.Ctx, s.Req.GetId(), s.Req.GetHashId())
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
if temp == nil || temp.IsDel == mtype.Yes {
|
|
err = workerr.NotFound("template not found")
|
|
return
|
|
}
|
|
|
|
group, err = cache.NewFissionTempGroup(s.Ctx).FindById(temp.GroupID)
|
|
if err != nil {
|
|
err = s.BE().CacheError(err)
|
|
return
|
|
}
|
|
|
|
s.Res.TempGroupMark = group.Mark
|
|
|
|
return
|
|
}
|
|
|
|
func (s *FissionTemplateInfo) switchTemp(temp *model.FissionTemp) (*model.FissionTemp, error) {
|
|
langType := mtype.MarkToLangType[s.Req.GetLang()]
|
|
|
|
if langType == 0 || langType == temp.LangType {
|
|
return temp, nil
|
|
}
|
|
|
|
m := s.GetDao().FissionTemp
|
|
info, err := m.WithContext(s.Ctx).Where(m.GroupID.Eq(temp.GroupID), m.LangType.Eq(langType)).Take()
|
|
if err = dbcheck.DbError(err); err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return nil, err
|
|
}
|
|
|
|
if info == nil {
|
|
return temp, nil
|
|
}
|
|
|
|
return info, nil
|
|
}
|
|
|
|
func (s *FissionTemplateInfo) lang(temp *model.FissionTemp, group *model.FissionTempGroup) (err error) {
|
|
textMap, err := s._groupTextMap(group, mtype.FissionLangTypeToMark[temp.LangType])
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
customText, err := s._text(temp.ID)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
for k, v := range customText {
|
|
textMap[k] = v
|
|
}
|
|
|
|
s.Res.Lang = make([]*pb.TemplateInfoRes_KV, 0, len(textMap))
|
|
for _, v := range textMap {
|
|
s.Res.Lang = append(s.Res.Lang, &pb.TemplateInfoRes_KV{
|
|
Key: v.Key,
|
|
Value: v.Value,
|
|
Desc: v.Desc,
|
|
})
|
|
}
|
|
|
|
imgMap, err := s._commonImg(temp.LangType)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
customImg, err := s._img(temp.ID)
|
|
for k, v := range customImg {
|
|
imgMap[k] = v
|
|
}
|
|
|
|
s.Res.Image = make([]*pb.TemplateInfoRes_KV, 0, len(imgMap))
|
|
for _, v := range imgMap {
|
|
s.Res.Image = append(s.Res.Image, &pb.TemplateInfoRes_KV{
|
|
Key: v.Key,
|
|
Value: v.Value,
|
|
Desc: v.Desc,
|
|
})
|
|
}
|
|
|
|
s.Res.Id = temp.ID
|
|
s.Res.HashId = temp.HashID
|
|
s.Res.LangType = int32(temp.LangType)
|
|
s.Res.TextType = int32(temp.TextType)
|
|
|
|
return
|
|
}
|
|
|
|
func (s *FissionTemplateInfo) _groupTextMap(group *model.FissionTempGroup, mark string) (textMap map[string]*mtype.LangKv, err error) {
|
|
textMap = make(map[string]*mtype.LangKv)
|
|
|
|
m := s.GetDao().FissionTempGroupLang
|
|
|
|
var lms []string
|
|
list, err := m.WithContext(s.Ctx).Where(m.GroupID.Eq(group.ID)).Find()
|
|
for _, v := range list {
|
|
lms = append(lms, v.LangMark)
|
|
}
|
|
|
|
var partLkv []*mtype.LangKv
|
|
if group.LangParts != "" {
|
|
parts := strings.Split(group.LangParts, ",")
|
|
moduleM := s.GetDao().FissionLangModule
|
|
var partList []*model.FissionLangModule
|
|
partList, err = moduleM.WithContext(s.Ctx).Where(moduleM.Mark.In(parts...)).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
for _, v := range partList {
|
|
for _, kv := range v.GetParts() {
|
|
partLkv = append(partLkv, kv)
|
|
lms = append(lms, kv.Value)
|
|
}
|
|
}
|
|
}
|
|
|
|
langM := s.GetDao().Lang
|
|
langList, err := langM.WithContext(s.Ctx).Where(langM.LangMark.In(lms...), langM.Mark.Eq(mark)).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
var mtMap = make(map[string]string)
|
|
for _, lang := range langList {
|
|
mtMap[lang.LangMark] = lang.LangText
|
|
}
|
|
|
|
for _, v := range list {
|
|
textMap[v.Mark] = &mtype.LangKv{
|
|
Key: v.Mark,
|
|
Value: mtMap[v.LangMark],
|
|
Desc: v.Desc,
|
|
}
|
|
}
|
|
|
|
for _, v := range partLkv {
|
|
textMap[v.Key] = &mtype.LangKv{
|
|
Key: v.Key,
|
|
Value: mtMap[v.Value],
|
|
Desc: v.Desc,
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s *FissionTemplateInfo) _text(tempId int64) (textMap map[string]*mtype.LangKv, err error) {
|
|
textMap = make(map[string]*mtype.LangKv)
|
|
|
|
langM := s.GetDao().FissionTempLang
|
|
lang, err := langM.WithContext(s.Ctx).Where(langM.TempID.Eq(tempId)).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
for _, v := range lang {
|
|
textMap[v.Mark] = &mtype.LangKv{
|
|
Key: v.Mark,
|
|
Value: v.Val,
|
|
Desc: v.Desc,
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
func (s *FissionTemplateInfo) _commonImg(langType int8) (imgMap map[string]*mtype.LangKv, err error) {
|
|
|
|
if langType == mtype.FissionLangTypeZh {
|
|
|
|
return map[string]*mtype.LangKv{
|
|
consts.TempInfoImgAndroidBtnKey: {
|
|
Key: consts.TempInfoImgAndroidBtnKey,
|
|
Value: fmt.Sprintf(consts.TempInfoImgAndroidBtnValue, ""),
|
|
Desc: consts.TempInfoImgAndroidBtnDesc,
|
|
},
|
|
consts.TempInfoImgIosBtnKey: {
|
|
Key: consts.TempInfoImgIosBtnKey,
|
|
Value: fmt.Sprintf(consts.TempInfoImgIosBtnValue, ""),
|
|
Desc: consts.TempInfoImgIosBtnDesc,
|
|
},
|
|
consts.TempInfoImgAndroidBtnWhiteKey: {
|
|
Key: consts.TempInfoImgAndroidBtnWhiteKey,
|
|
Value: fmt.Sprintf(consts.TempInfoImgAndroidBtnWhiteValue, ""),
|
|
Desc: consts.TempInfoImgAndroidBtnWhiteDesc,
|
|
},
|
|
consts.TempInfoImgIosBtnWhiteKey: {
|
|
Key: consts.TempInfoImgIosBtnWhiteKey,
|
|
Value: fmt.Sprintf(consts.TempInfoImgIosBtnWhiteValue, ""),
|
|
Desc: consts.TempInfoImgIosBtnWhiteDesc,
|
|
},
|
|
consts.TempInfoImgWechatBrowserKey: {
|
|
Key: consts.TempInfoImgWechatBrowserKey,
|
|
Value: fmt.Sprintf(consts.TempInfoImgWechatBrowserValue, ""),
|
|
Desc: consts.TempInfoImgWechatBrowserDesc,
|
|
},
|
|
consts.TempInfoImgWechatLineKey: {
|
|
Key: consts.TempInfoImgWechatLineKey,
|
|
Value: fmt.Sprintf(consts.TempInfoImgWechatLineValue, ""),
|
|
Desc: consts.TempInfoImgWechatLineDesc,
|
|
},
|
|
consts.TempInfoImgDefaultKey: {
|
|
Key: consts.TempInfoImgDefaultKey,
|
|
Value: consts.TempInfoImgDefaultValue,
|
|
Desc: consts.TempInfoImgDefaultDesc,
|
|
},
|
|
}, nil
|
|
|
|
}
|
|
|
|
return map[string]*mtype.LangKv{
|
|
consts.TempInfoImgAndroidBtnKey: {
|
|
Key: consts.TempInfoImgAndroidBtnKey,
|
|
Value: fmt.Sprintf(consts.TempInfoImgAndroidBtnValue, "_en"),
|
|
Desc: consts.TempInfoImgAndroidBtnDesc,
|
|
},
|
|
consts.TempInfoImgIosBtnKey: {
|
|
Key: consts.TempInfoImgIosBtnKey,
|
|
Value: fmt.Sprintf(consts.TempInfoImgIosBtnValue, "_en"),
|
|
Desc: consts.TempInfoImgIosBtnDesc,
|
|
},
|
|
consts.TempInfoImgAndroidBtnWhiteKey: {
|
|
Key: consts.TempInfoImgAndroidBtnWhiteKey,
|
|
Value: fmt.Sprintf(consts.TempInfoImgAndroidBtnWhiteValue, "_en"),
|
|
Desc: consts.TempInfoImgAndroidBtnWhiteDesc,
|
|
},
|
|
consts.TempInfoImgIosBtnWhiteKey: {
|
|
Key: consts.TempInfoImgIosBtnWhiteKey,
|
|
Value: fmt.Sprintf(consts.TempInfoImgIosBtnWhiteValue, "_en"),
|
|
Desc: consts.TempInfoImgIosBtnWhiteDesc,
|
|
},
|
|
consts.TempInfoImgWechatBrowserKey: {
|
|
Key: consts.TempInfoImgWechatBrowserKey,
|
|
Value: fmt.Sprintf(consts.TempInfoImgWechatBrowserValue, "_en"),
|
|
Desc: consts.TempInfoImgWechatBrowserDesc,
|
|
},
|
|
consts.TempInfoImgWechatLineKey: {
|
|
Key: consts.TempInfoImgWechatLineKey,
|
|
Value: fmt.Sprintf(consts.TempInfoImgWechatLineValue, "_en"),
|
|
Desc: consts.TempInfoImgWechatLineDesc,
|
|
},
|
|
consts.TempInfoImgDefaultKey: {
|
|
Key: consts.TempInfoImgDefaultKey,
|
|
Value: consts.TempInfoImgDefaultValue,
|
|
Desc: consts.TempInfoImgDefaultDesc,
|
|
},
|
|
}, nil
|
|
}
|
|
|
|
func (s *FissionTemplateInfo) _img(tempId int64) (imgMap map[string]*mtype.LangKv, err error) {
|
|
imgMap = make(map[string]*mtype.LangKv)
|
|
|
|
imageM := s.GetDao().FissionTempImage
|
|
img, err := imageM.WithContext(s.Ctx).Where(imageM.TempID.Eq(tempId)).Find()
|
|
if err != nil {
|
|
err = s.BE().MysqlError(err)
|
|
return
|
|
}
|
|
|
|
for _, v := range img {
|
|
imgMap[v.Mark] = &mtype.LangKv{
|
|
Key: v.Mark,
|
|
Value: v.Val,
|
|
Desc: v.Desc,
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s *FissionTemplateInfo) fixReward() {
|
|
s.Res.FixRewards = make([]*pb.TemplateInfoRes_FixReward, 0, len(app.FissionFixRewards))
|
|
for _, reward := range app.FissionFixRewards {
|
|
one := &pb.TemplateInfoRes_FixReward{
|
|
Id: reward.Id,
|
|
Langs: make([]*pb.TemplateInfoRes_Lang, 0, len(reward.Langs)),
|
|
}
|
|
for _, lang := range reward.Langs {
|
|
one.Langs = append(one.Langs, &pb.TemplateInfoRes_Lang{
|
|
Title: lang.Title,
|
|
ImgUrl: lang.ImgUrl,
|
|
LangMark: lang.Mark,
|
|
})
|
|
}
|
|
s.Res.FixRewards = append(s.Res.FixRewards, one)
|
|
}
|
|
return
|
|
}
|