init: web_hgdjc_server
This commit is contained in:
@@ -0,0 +1,173 @@
|
||||
package translationser
|
||||
|
||||
import (
|
||||
"context"
|
||||
"sync"
|
||||
"videoweb/app/api/proto"
|
||||
"videoweb/pub/common/log"
|
||||
"videoweb/pub/common/netutil"
|
||||
"videoweb/pub/models/cfg"
|
||||
"videoweb/pub/models/translationcategorymod"
|
||||
"videoweb/pub/models/translationmod"
|
||||
"videoweb/pub/pubdef"
|
||||
|
||||
"github.com/robfig/cron/v3"
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
)
|
||||
|
||||
var (
|
||||
CacheMgr CacheInfo //
|
||||
skdCron *cron.Cron
|
||||
)
|
||||
|
||||
type CacheInfo struct {
|
||||
Lock sync.RWMutex // 读写锁
|
||||
TranslationData proto.AppTranslationInfo // 导航信息缓存
|
||||
BottomTranslationData proto.AppTranslationInfo // 底部导航信息缓存
|
||||
TranslationMap map[int64]proto.TranslationInfo
|
||||
}
|
||||
|
||||
func init() {
|
||||
skdCron = cron.New(cron.WithSeconds()) // 秒级定时任务
|
||||
CacheMgr.TranslationData = proto.AppTranslationInfo{}
|
||||
CacheMgr.BottomTranslationData = proto.AppTranslationInfo{}
|
||||
CacheMgr.TranslationMap = make(map[int64]proto.TranslationInfo)
|
||||
}
|
||||
|
||||
func Start() {
|
||||
ctx := context.Background()
|
||||
UpdateTranslationInfo(ctx)
|
||||
|
||||
_, _ = skdCron.AddFunc("0 */5 * * * ?", func() {
|
||||
UpdateTranslationInfo(ctx)
|
||||
})
|
||||
|
||||
skdCron.Start()
|
||||
}
|
||||
|
||||
func UpdateTranslationInfo(ctx context.Context) {
|
||||
filter := bson.M{cfg.FN.SysCfg.Id: 1}
|
||||
sysCfg, _ := cfg.FindOneSysCfg(context.Background(), filter)
|
||||
if sysCfg == nil {
|
||||
return
|
||||
}
|
||||
translation := proto.AppTranslationInfo{}
|
||||
bottomTranslation := proto.AppTranslationInfo{}
|
||||
wg := &sync.WaitGroup{}
|
||||
wg.Add(2)
|
||||
var translationCategoryList translationcategorymod.TranslationCategoryList
|
||||
var translationList translationmod.TranslationInfoList
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
categoryFilter := bson.M{
|
||||
translationcategorymod.FN.TranslationCategory.Status: true,
|
||||
}
|
||||
categoryOpt := &options.FindOptions{}
|
||||
categoryOpt.SetLimit(1000).SetSort(bson.M{translationcategorymod.FN.TranslationCategory.Rank: -1})
|
||||
|
||||
translationCategoryList, _ = translationcategorymod.FindManyTranslationCategorys(ctx, categoryFilter, categoryOpt)
|
||||
}()
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
translationFilter := bson.M{
|
||||
translationmod.FN.TranslationInfo.Status: true,
|
||||
}
|
||||
translationOpt := &options.FindOptions{}
|
||||
translationOpt.SetLimit(1000).SetSort(bson.M{translationmod.FN.TranslationInfo.Rank: -1})
|
||||
|
||||
translationList, _ = translationmod.FindManyTranslationInfos(ctx, translationFilter, translationOpt)
|
||||
}()
|
||||
|
||||
wg.Wait()
|
||||
|
||||
tempTranslationMap := make(map[int64]proto.TranslationInfo)
|
||||
|
||||
for _, categoryInfo := range translationCategoryList {
|
||||
|
||||
categoryTemp := proto.TranslationCategory{
|
||||
ID: categoryInfo.Id,
|
||||
Name: categoryInfo.Name,
|
||||
Icon: netutil.MergeURL(sysCfg.ImgAppCdn, categoryInfo.Icon),
|
||||
TranslationList: make([]proto.TranslationInfo, 0),
|
||||
CategoryType: categoryInfo.CategoryType,
|
||||
SeoInfo: categoryInfo.SeoInfo,
|
||||
}
|
||||
if categoryTemp.CategoryType == pubdef.TranslationTypeUrl {
|
||||
categoryTemp.UrlValue = categoryInfo.UrlValue
|
||||
} else if categoryInfo.CategoryType == pubdef.TranslationTypeSub {
|
||||
for _, translationInfo := range translationList {
|
||||
if categoryInfo.Id == translationInfo.TransCategoryId {
|
||||
translationTmp := proto.TranslationInfo{
|
||||
ID: translationInfo.Id,
|
||||
Name: translationInfo.Name,
|
||||
}
|
||||
if translationInfo.IsFriendAds {
|
||||
translationTmp.IsFriendAds = true
|
||||
// 友链广告 获取的时候添加
|
||||
// TODO:顶部暂不支持 。
|
||||
continue
|
||||
} else {
|
||||
translationTmp.UrlValue = translationInfo.Link
|
||||
}
|
||||
if translationTmp.UrlValue == "" {
|
||||
continue
|
||||
}
|
||||
tempTranslationMap[translationInfo.Id] = translationTmp
|
||||
categoryTemp.TranslationList = append(categoryTemp.TranslationList, translationTmp)
|
||||
}
|
||||
}
|
||||
} else if categoryInfo.CategoryType == pubdef.TranslationTypeBottom {
|
||||
for _, translationInfo := range translationList {
|
||||
if categoryInfo.Id == translationInfo.TransCategoryId {
|
||||
translationTmp := proto.TranslationInfo{
|
||||
ID: translationInfo.Id,
|
||||
Name: translationInfo.Name,
|
||||
}
|
||||
if translationInfo.IsFriendAds {
|
||||
translationTmp.IsFriendAds = true
|
||||
// 友链广告 获取的时候添加
|
||||
} else {
|
||||
translationTmp.UrlValue = translationInfo.Link
|
||||
}
|
||||
tempTranslationMap[translationInfo.Id] = translationTmp
|
||||
categoryTemp.TranslationList = append(categoryTemp.TranslationList, translationTmp)
|
||||
|
||||
}
|
||||
}
|
||||
bottomTranslation.CategoryList = append(bottomTranslation.CategoryList, categoryTemp)
|
||||
continue
|
||||
} else {
|
||||
continue
|
||||
}
|
||||
translation.CategoryList = append(translation.CategoryList, categoryTemp)
|
||||
}
|
||||
log.Info("", log.Any("categoryInfo.Name", translation.CategoryList))
|
||||
CacheMgr.Lock.Lock()
|
||||
defer CacheMgr.Lock.Unlock()
|
||||
CacheMgr.TranslationData = translation
|
||||
CacheMgr.BottomTranslationData = bottomTranslation
|
||||
CacheMgr.TranslationMap = tempTranslationMap
|
||||
|
||||
}
|
||||
func GetTranslationData() proto.AppTranslationInfo {
|
||||
CacheMgr.Lock.RLock()
|
||||
defer CacheMgr.Lock.RUnlock()
|
||||
|
||||
log.Info("GetTranslationData", log.Any("TranslationData", CacheMgr.TranslationData))
|
||||
return CacheMgr.TranslationData
|
||||
}
|
||||
func GetTranslationBottomList() proto.AppTranslationInfo {
|
||||
CacheMgr.Lock.RLock()
|
||||
defer CacheMgr.Lock.RUnlock()
|
||||
return CacheMgr.BottomTranslationData
|
||||
}
|
||||
|
||||
func GetTranslationInfo(id int64) *proto.TranslationInfo {
|
||||
CacheMgr.Lock.RLock()
|
||||
defer CacheMgr.Lock.RUnlock()
|
||||
if v, ok := CacheMgr.TranslationMap[id]; ok {
|
||||
return &v
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user