i18n翻译
This commit is contained in:
@@ -2,14 +2,18 @@ package cron
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"epic/internal/consts"
|
||||
"epic/internal/dao"
|
||||
"epic/internal/model/dto"
|
||||
"epic/utility"
|
||||
"epic/internal/model/entity"
|
||||
"epic/internal/util"
|
||||
"fmt"
|
||||
"github.com/gogf/gf/v2/encoding/gjson"
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"github.com/gogf/gf/v2/net/gclient"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
"strconv"
|
||||
"time"
|
||||
)
|
||||
|
||||
@@ -50,7 +54,7 @@ func (t *ThirdPartyDataSync) SyncHeroData(ctx context.Context) error {
|
||||
func (t *ThirdPartyDataSync) SyncArtifactData(ctx context.Context) error {
|
||||
g.Log().Info(ctx, "开始同步神器数据...")
|
||||
|
||||
utility.RedisCache.Set(ctx, "artifacts_all11", "asd", 0)
|
||||
util.RedisCache.Set(ctx, "artifacts_all11", "asd", 0)
|
||||
|
||||
// 示例:从第三方API获取神器数据
|
||||
//artifactData, err := t.fetchArtifactDataFromAPI(ctx)
|
||||
@@ -169,8 +173,6 @@ func (t *ThirdPartyDataSync) processAndSaveArtifactData(ctx context.Context, dat
|
||||
return fmt.Errorf("解析神器数据到DTO失败: %v", err)
|
||||
}
|
||||
|
||||
g.Log().Info(ctx, "解析到", len(artifacts), "个神器数据")
|
||||
|
||||
// 批量处理数据
|
||||
for _, artifact := range artifacts {
|
||||
if err := t.saveArtifactData(ctx, artifact); err != nil {
|
||||
@@ -184,18 +186,71 @@ func (t *ThirdPartyDataSync) processAndSaveArtifactData(ctx context.Context, dat
|
||||
|
||||
// saveHeroData 保存单个英雄数据
|
||||
func (t *ThirdPartyDataSync) saveHeroData(ctx context.Context, hero *dto.ThirdPartyHeroDTO) error {
|
||||
// TODO: 实现具体的数据库保存逻辑
|
||||
// 现在 hero 是一个强类型对象,可以直接使用 hero.Code, hero.Name 等
|
||||
|
||||
// 示例:记录同步日志
|
||||
syncLog := map[string]interface{}{
|
||||
"type": "hero_sync",
|
||||
"hero_code": hero.Code,
|
||||
"sync_time": gtime.Now(),
|
||||
"status": "success",
|
||||
// 查询是否存在
|
||||
var dbHero *entity.EpicHeroInfo
|
||||
err := dao.EpicHeroInfo.Ctx(ctx).
|
||||
Where(dao.EpicHeroInfo.Columns().HeroCode, hero.Code).
|
||||
Scan(&dbHero)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
g.Log().Debug(ctx, "保存英雄数据:", syncLog)
|
||||
// 获取原始 JSON 字符串
|
||||
rawJsonBytes, err := json.Marshal(hero)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
rawJson := string(rawJsonBytes)
|
||||
|
||||
if dbHero != nil && dbHero.HeroCode != "" {
|
||||
// 查到记录
|
||||
if dbHero.RawJson == "" {
|
||||
// 只更新 rawJson 字段
|
||||
_, err = dao.EpicHeroInfo.Ctx(ctx).
|
||||
Where(dao.EpicHeroInfo.Columns().HeroCode, hero.Code).
|
||||
Data(g.Map{
|
||||
dao.EpicHeroInfo.Columns().RawJson: rawJson,
|
||||
// 可选:更新时间
|
||||
dao.EpicHeroInfo.Columns().UpdateTime: gtime.Now(),
|
||||
}).
|
||||
Update()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
g.Log().Debug(ctx, "更新英雄rawJson:", hero.Code)
|
||||
}
|
||||
// 已有 rawJson,不做处理
|
||||
} else {
|
||||
status60 := hero.CalculatedStatus["Lv60SixStarFullyAwakened"]
|
||||
status60json, _ := gjson.EncodeString(status60)
|
||||
heroJson, _ := gjson.EncodeString(hero)
|
||||
newHero := &entity.EpicHeroInfo{
|
||||
Id: 0,
|
||||
HeroName: "",
|
||||
HeroCode: hero.Code,
|
||||
HeroAttrLv60: status60json,
|
||||
Creator: "",
|
||||
CreateTime: nil,
|
||||
Updater: "",
|
||||
UpdateTime: nil,
|
||||
Deleted: false,
|
||||
NickName: "",
|
||||
Rarity: strconv.Itoa(hero.Rarity),
|
||||
Role: hero.Role,
|
||||
Zodiac: "",
|
||||
HeadImgUrl: "",
|
||||
Attribute: "",
|
||||
Remark: "",
|
||||
RawJson: heroJson,
|
||||
}
|
||||
|
||||
// 没查到,插入新记录,字段按 DO 结构体补全
|
||||
_, err = dao.EpicHeroInfo.Ctx(ctx).Data(newHero).Insert()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
g.Log().Debug(ctx, "插入新英雄:", hero.Code)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ import (
|
||||
"epic/internal/model/dto"
|
||||
"epic/internal/model/entity"
|
||||
"epic/internal/service"
|
||||
"epic/utility"
|
||||
"epic/internal/util"
|
||||
"github.com/gogf/gf/v2/encoding/gjson"
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"github.com/gogf/gf/v2/util/gconv"
|
||||
@@ -46,9 +46,9 @@ func (l *Logic) GetHeroByCode(ctx context.Context, code string) (*entity.EpicHer
|
||||
// GetHeroList 查询所有英雄信息,并按创建时间倒序排列
|
||||
func (l *Logic) GetHeroList(ctx context.Context) ([]*v1.EpicHeroVO, error) {
|
||||
|
||||
//utility.RedisCache.Set(ctx, "epic_artifact_map_key111", "122", 1000*time.Second)
|
||||
//utility.RedisCache.Set(ctx, "epic_artifact_map_key222", "6565", 0)
|
||||
//fmt.Println(utility.RedisCache.Get(ctx, "NAME"))
|
||||
//util.RedisCache.Set(ctx, "epic_artifact_map_key111", "122", 1000*time.Second)
|
||||
//util.RedisCache.Set(ctx, "epic_artifact_map_key222", "6565", 0)
|
||||
//fmt.Println(util.RedisCache.Get(ctx, "NAME"))
|
||||
|
||||
var (
|
||||
doList []*entity.EpicHeroInfo // 数据库原始结构
|
||||
@@ -117,7 +117,7 @@ func (l *Logic) GetHeroDetailByCode(ctx context.Context, code string) (*v1.HeroD
|
||||
|
||||
// 优化:先查 RedisCache,再查数据库
|
||||
cacheKey := "epic_hero_set:" + code
|
||||
jsonContent, err := utility.RedisCache.Get(ctx, cacheKey)
|
||||
jsonContent, err := util.RedisCache.Get(ctx, cacheKey)
|
||||
if err == nil && !jsonContent.IsEmpty() {
|
||||
fribbleHeroSet = &entity.FribbleHeroSet{
|
||||
HeroCode: code,
|
||||
@@ -131,7 +131,7 @@ func (l *Logic) GetHeroDetailByCode(ctx context.Context, code string) (*v1.HeroD
|
||||
return nil, err
|
||||
}
|
||||
// 写入 Redis 缓存,1小时
|
||||
utility.RedisCache.Set(ctx, cacheKey, fribbleHeroSet.JsonContent, 0)
|
||||
util.RedisCache.Set(ctx, cacheKey, fribbleHeroSet.JsonContent, 0)
|
||||
}
|
||||
|
||||
// 解析 JsonContent 字段
|
||||
|
||||
Reference in New Issue
Block a user