init: web_hgdjc_server
This commit is contained in:
@@ -0,0 +1,138 @@
|
||||
package navigationser
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strings"
|
||||
"videoweb/app/api/proto"
|
||||
"videoweb/app/service/configser"
|
||||
"videoweb/pub/common/netutil"
|
||||
"videoweb/pub/common/srvdef"
|
||||
"videoweb/pub/models/translationcategorymod"
|
||||
"videoweb/pub/models/translationmod"
|
||||
"videoweb/pub/pubdef"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
)
|
||||
|
||||
const (
|
||||
headerNavigationCategoryLimit int64 = 30
|
||||
headerNavigationInfoLimit int64 = 50
|
||||
)
|
||||
|
||||
var (
|
||||
headerNavigationCategoryProjection = bson.D{
|
||||
{Key: translationcategorymod.FN.TranslationCategory.Id, Value: 1},
|
||||
{Key: translationcategorymod.FN.TranslationCategory.Name, Value: 1},
|
||||
{Key: translationcategorymod.FN.TranslationCategory.Icon, Value: 1},
|
||||
{Key: translationcategorymod.FN.TranslationCategory.CategoryType, Value: 1},
|
||||
{Key: translationcategorymod.FN.TranslationCategory.UrlValue, Value: 1},
|
||||
{Key: translationcategorymod.FN.TranslationCategory.SeoInfo.Title, Value: 1},
|
||||
{Key: translationcategorymod.FN.TranslationCategory.SeoInfo.Description, Value: 1},
|
||||
{Key: translationcategorymod.FN.TranslationCategory.SeoInfo.Keyworld, Value: 1},
|
||||
}
|
||||
headerNavigationInfoProjection = bson.D{
|
||||
{Key: translationmod.FN.TranslationInfo.Id, Value: 1},
|
||||
{Key: translationmod.FN.TranslationInfo.Name, Value: 1},
|
||||
{Key: translationmod.FN.TranslationInfo.TransCategoryId, Value: 1},
|
||||
{Key: translationmod.FN.TranslationInfo.IsFriendAds, Value: 1},
|
||||
{Key: translationmod.FN.TranslationInfo.Link, Value: 1},
|
||||
}
|
||||
)
|
||||
|
||||
// HeaderNavigation 查询头部导航配置
|
||||
func HeaderNavigation(ctx context.Context) (proto.AppTranslationInfo, *srvdef.SrvErr) {
|
||||
categoryList, err := translationcategorymod.FindManyTranslationCategorys(ctx, bson.M{
|
||||
translationcategorymod.FN.TranslationCategory.Status: true,
|
||||
translationcategorymod.FN.TranslationCategory.CategoryType: bson.M{
|
||||
"$in": []pubdef.TranslationType{
|
||||
pubdef.TranslationTypeUrl,
|
||||
pubdef.TranslationTypeSub,
|
||||
},
|
||||
},
|
||||
}, options.Find().
|
||||
SetProjection(headerNavigationCategoryProjection).
|
||||
SetSort(bson.D{
|
||||
{Key: translationcategorymod.FN.TranslationCategory.Rank, Value: -1},
|
||||
{Key: translationcategorymod.FN.TranslationCategory.Id, Value: -1},
|
||||
}).
|
||||
SetLimit(headerNavigationCategoryLimit))
|
||||
if err != nil {
|
||||
return proto.AppTranslationInfo{}, err
|
||||
}
|
||||
resp := proto.AppTranslationInfo{CategoryList: make([]proto.TranslationCategory, 0, len(categoryList))}
|
||||
if len(categoryList) == 0 {
|
||||
return resp, nil
|
||||
}
|
||||
categoryIds := make([]int64, 0, len(categoryList))
|
||||
for _, item := range categoryList {
|
||||
if item != nil && item.Id > 0 {
|
||||
categoryIds = append(categoryIds, item.Id)
|
||||
}
|
||||
}
|
||||
translationListByCategory, err := queryHeaderTranslationList(ctx, categoryIds)
|
||||
if err != nil {
|
||||
return proto.AppTranslationInfo{}, err
|
||||
}
|
||||
imgCdn := configser.GetConfigInfo().ImgCdn
|
||||
for _, item := range categoryList {
|
||||
if item == nil {
|
||||
continue
|
||||
}
|
||||
resp.CategoryList = append(resp.CategoryList, proto.TranslationCategory{
|
||||
ID: item.Id,
|
||||
Name: item.Name,
|
||||
Icon: netutil.MergeURL(imgCdn, item.Icon),
|
||||
UrlValue: item.UrlValue,
|
||||
CategoryType: item.CategoryType,
|
||||
SeoInfo: item.SeoInfo,
|
||||
TranslationList: translationListByCategory[item.Id],
|
||||
})
|
||||
}
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
// queryHeaderTranslationList 批量查询头部导航二级配置并按分类ID分组
|
||||
func queryHeaderTranslationList(ctx context.Context, categoryIds []int64) (map[int64][]proto.TranslationInfo, *srvdef.SrvErr) {
|
||||
result := make(map[int64][]proto.TranslationInfo, len(categoryIds))
|
||||
if len(categoryIds) == 0 {
|
||||
return result, nil
|
||||
}
|
||||
list, err := translationmod.FindManyTranslationInfos(ctx, bson.M{
|
||||
translationmod.FN.TranslationInfo.Status: true,
|
||||
translationmod.FN.TranslationInfo.TransCategoryId: bson.M{"$in": categoryIds},
|
||||
}, options.Find().
|
||||
SetProjection(headerNavigationInfoProjection).
|
||||
SetSort(bson.D{
|
||||
{Key: translationmod.FN.TranslationInfo.Rank, Value: -1},
|
||||
{Key: translationmod.FN.TranslationInfo.Id, Value: -1},
|
||||
}).
|
||||
SetLimit(headerNavigationInfoLimit))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, item := range list {
|
||||
if item == nil || item.IsFriendAds {
|
||||
continue
|
||||
}
|
||||
info := proto.TranslationInfo{
|
||||
ID: item.Id,
|
||||
Name: item.Name,
|
||||
TransCategoryId: item.TransCategoryId,
|
||||
UrlValue: headerTranslationURL(item),
|
||||
}
|
||||
if info.UrlValue == "" {
|
||||
continue
|
||||
}
|
||||
result[item.TransCategoryId] = append(result[item.TransCategoryId], info)
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// headerTranslationURL 解析导航明细跳转地址
|
||||
func headerTranslationURL(item *translationmod.TranslationInfo) string {
|
||||
if item == nil {
|
||||
return ""
|
||||
}
|
||||
return strings.TrimSpace(item.Link)
|
||||
}
|
||||
Reference in New Issue
Block a user