diff --git a/internal/dao/internal/epic_hero_info.go b/internal/dao/internal/epic_hero_info.go index bc9c5fd..d2c35c6 100644 --- a/internal/dao/internal/epic_hero_info.go +++ b/internal/dao/internal/epic_hero_info.go @@ -37,6 +37,7 @@ type EpicHeroInfoColumns struct { HeadImgUrl string // 配置编号 Attribute string // 配置编号 Remark string // 配置编号 + RawJson string // 原始json } // epicHeroInfoColumns holds the columns for the table epic_hero_info. @@ -57,6 +58,7 @@ var epicHeroInfoColumns = EpicHeroInfoColumns{ HeadImgUrl: "head_img_url", Attribute: "attribute", Remark: "remark", + RawJson: "raw_json", } // NewEpicHeroInfoDao creates and returns a new DAO object for table data access. diff --git a/internal/logic/cron/third_party_sync.go b/internal/logic/cron/third_party_sync.go index 5697e79..a2d2418 100644 --- a/internal/logic/cron/third_party_sync.go +++ b/internal/logic/cron/third_party_sync.go @@ -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 } diff --git a/internal/logic/hero/hero.go b/internal/logic/hero/hero.go index 0da5d87..4fb4087 100644 --- a/internal/logic/hero/hero.go +++ b/internal/logic/hero/hero.go @@ -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 字段 diff --git a/internal/model/do/epic_hero_info.go b/internal/model/do/epic_hero_info.go index 666fc4c..2bc87d9 100644 --- a/internal/model/do/epic_hero_info.go +++ b/internal/model/do/epic_hero_info.go @@ -28,4 +28,5 @@ type EpicHeroInfo struct { HeadImgUrl interface{} // 配置编号 Attribute interface{} // 配置编号 Remark interface{} // 配置编号 + RawJson interface{} // 原始json } diff --git a/internal/model/entity/epic_hero_info.go b/internal/model/entity/epic_hero_info.go index fc2b31d..ae9b441 100644 --- a/internal/model/entity/epic_hero_info.go +++ b/internal/model/entity/epic_hero_info.go @@ -10,20 +10,21 @@ import ( // EpicHeroInfo is the golang structure for table epic_hero_info. type EpicHeroInfo struct { - Id int64 `json:"id" orm:"id" description:"文件编号"` // 文件编号 - HeroName string `json:"heroName" orm:"hero_name" description:"配置编号"` // 配置编号 - HeroCode string `json:"heroCode" orm:"hero_code" description:"文件名"` // 文件名 - HeroAttrLv60 string `json:"heroAttrLv60" orm:"hero_attr_lv60" description:"文件路径"` // 文件路径 - Creator string `json:"creator" orm:"creator" description:"创建者"` // 创建者 - CreateTime *gtime.Time `json:"createTime" orm:"create_time" description:"创建时间"` // 创建时间 - Updater string `json:"updater" orm:"updater" description:"更新者"` // 更新者 - UpdateTime *gtime.Time `json:"updateTime" orm:"update_time" description:"更新时间"` // 更新时间 - Deleted bool `json:"deleted" orm:"deleted" description:"是否删除"` // 是否删除 - NickName string `json:"nickName" orm:"nick_name" description:"配置编号"` // 配置编号 - Rarity string `json:"rarity" orm:"rarity" description:"配置编号"` // 配置编号 - Role string `json:"role" orm:"role" description:"配置编号"` // 配置编号 - Zodiac string `json:"zodiac" orm:"zodiac" description:"配置编号"` // 配置编号 - HeadImgUrl string `json:"headImgUrl" orm:"head_img_url" description:"配置编号"` // 配置编号 - Attribute string `json:"attribute" orm:"attribute" description:"配置编号"` // 配置编号 - Remark string `json:"remark" orm:"remark" description:"配置编号"` // 配置编号 + Id int64 `json:"id" orm:"id" description:"文件编号"` // 文件编号 + HeroName string `json:"heroName" orm:"hero_name" description:"配置编号"` // 配置编号 + HeroCode string `json:"heroCode" orm:"hero_code" description:"文件名"` // 文件名 + HeroAttrLv60 string `json:"heroAttrLv60" orm:"hero_attr_lv60" description:"文件路径"` // 文件路径 + Creator string `json:"creator" orm:"creator" description:"创建者"` // 创建者 + CreateTime *gtime.Time `json:"createTime" orm:"create_time" description:"创建时间"` // 创建时间 + Updater string `json:"updater" orm:"updater" description:"更新者"` // 更新者 + UpdateTime *gtime.Time `json:"updateTime" orm:"update_time" description:"更新时间"` // 更新时间 + Deleted bool `json:"deleted" orm:"deleted" description:"是否删除"` // 是否删除 + NickName string `json:"nickName" orm:"nick_name" description:"配置编号"` // 配置编号 + Rarity string `json:"rarity" orm:"rarity" description:"配置编号"` // 配置编号 + Role string `json:"role" orm:"role" description:"配置编号"` // 配置编号 + Zodiac string `json:"zodiac" orm:"zodiac" description:"配置编号"` // 配置编号 + HeadImgUrl string `json:"headImgUrl" orm:"head_img_url" description:"配置编号"` // 配置编号 + Attribute string `json:"attribute" orm:"attribute" description:"配置编号"` // 配置编号 + Remark string `json:"remark" orm:"remark" description:"配置编号"` // 配置编号 + RawJson string `json:"rawJson" orm:"raw_json" description:"原始json"` // 原始json } diff --git a/utility/.gitkeep b/internal/util/.gitkeep similarity index 100% rename from utility/.gitkeep rename to internal/util/.gitkeep diff --git a/internal/util/cache.go b/internal/util/cache.go new file mode 100644 index 0000000..164557f --- /dev/null +++ b/internal/util/cache.go @@ -0,0 +1,28 @@ +package util + +import ( + "context" + "github.com/gogf/gf/v2/frame/g" + "github.com/gogf/gf/v2/os/gcache" +) + +var RedisCache = func() *gcache.Cache { + cache := gcache.New() + cache.SetAdapter(gcache.NewAdapterRedis(g.Redis())) + return cache +}() + +// Info 全局Info日志 +func Info(ctx context.Context, args ...interface{}) { + g.Log().Info(ctx, args...) +} + +// Debug 全局Debug日志 +func Debug(ctx context.Context, args ...interface{}) { + g.Log().Debug(ctx, args...) +} + +// Error 全局Error日志 +func Error(ctx context.Context, args ...interface{}) { + g.Log().Error(ctx, args...) +} diff --git a/internal/util/i18n.go b/internal/util/i18n.go new file mode 100644 index 0000000..93b7e12 --- /dev/null +++ b/internal/util/i18n.go @@ -0,0 +1,610 @@ +package util + +// I18nEnToZh 英文->中文映射表 +var I18nEnToZh = map[string]string{ + // ... 这里粘贴你的完整映射 ... + "A Little Queen's Huge Crown": "小小女王的巨大王冠", + "A Song for Everybody": "献给你和这个世界的歌曲", + "A Symbol of Unity": "团结的象征", + "Abyssal Crown": "深渊王冠", + "Achates": "雅卡泰丝", + "Adamant Shield": "金刚石盾牌", + "Adin": "艾庭", + "Adlay": "亚迪赖", + "Adventurer Ras": "冒险家拉斯", + "Ainos": "艾诺斯", + "Ains": "艾因兹", + "Air-to-Surface Missile: MISHA": "空地导弹:美莎 ", + "Aither": "埃德勒", + "Alabastron": "雪花石膏瓶", + "Alencia": "艾莲西雅", + "Alencinox's Wrath": "艾莲西诺克斯的逆鳞", + "Alexa": "雅莉莎", + "Alexa's Basket": "雅莉莎的提篮", + "All-Rounder Wanda": "疑难杂症专家汪达", + "Alsacian Spear": "艾尔赛斯之矛", + "Ambitious Tywin": "野心分子泰温", + "Ambrote": "安布罗泰", + "Ancient Dragon's Legacy": "古龙遗产", + "Ancient Sheath": "古代剑鞘", + "Andre's Crossbow": "安德烈斯之弩", + "Angel of Light Angelica": "光之天使安洁莉卡", + "Angelic Montmorancy": "守护天使蒙茉朗西", + "Angelica": "安洁莉卡", + "Anti-Magic Mask": "抗魔面具", + "Apocalypse Ravi": "末日萝菲", + "Aqua Rose": "水玫瑰", + "Aramintha": "雅拉敏塔", + "Arbiter Vildred": "执行官维德瑞", + "Archdemon's Shadow": "魔神的暗影", + "Armin": "亚敏", + "Arowell": "雅洛薇", + "Ascending Axe": "参天斧", + "Assassin Cartuja": "杀手卡尔图哈", + "Assassin Cidd": "杀手席德", + "Assassin Coli": "杀手可丽", + "Atma's Portal": "亚特玛的传送门", + "Aurius": "亚乌利斯", + "Auxiliary Lots": "辅助型拉兹", + "Azalea": "亚洁理亚", + "Azure Comet": "青光彗星", + "Abyssal Yufine": "深渊优芬妮", + "Amiki": "雅蜜琪", + "Baal & Sezan": "巴尔&塞尚", + "Baiken": "梅喧", + "Barthez's Orbuculum": "巴泰斯的水晶球", + "Basar": "巴萨尔", + "Bask": "巴思克", + "Bastion of Hope": "希望的堡垒", + "Bastion of Perlutia": "波鲁迪亚的堡垒", + "Batisse": "巴托斯", + "Belian": "伯里安", + "Bellona": "维尔萝娜", + "Benevolent Romann": "仁慈的洛曼", + "Biting Wind Star": "寒风飞镖", + "Black Hand of the Goddess": "女神的黑手", + "Blaze Dingo": "烈火汀果", + "Blessings of Camaraderie": "友情祝福", + "Blood Blade Karin": "血剑卡琳", + "Blood Moon Haste": "赤月贵族海斯特", + "Blood-Seared Moon": "血染之月", + "Bloodbead Dagger": "血诛短剑", + "Bloodstone": "血玉髓", + "Bloody Rose": "血玫瑰", + "Bloody Warhammer": "血腥战锤", + "Bomb Model Kanna": "爆击型卡农", + "Border Coin": "孤注一掷", + "Briar Witch Iseria": "灰光森林的伊赛丽亚", + "Broken Will of the Priest": "残破的祭司长意志", + "Butcher Corps Inquisitor": "屠杀部队员", + "Butterfly Mandolin": "蝴蝶的曼陀林", + "Blooming Lidica": "花园丽迪卡", + "Byblis": "维波里丝", + "Beguiling Wings": "迷惑羽翼", + "Camilla": "卡蜜拉", + "Captain Rikoris": "先锋队长里科黎司", + "Card of Small Miracles": "小小奇迹贺年卡", + "Carmainerose": "卡麦萝兹", + "Carrot": "卡萝", + "Cartuja": "卡尔图哈", + "Cecilia": "赛西莉亚", + "Celeste": "赛雷斯特", + "Celestial Mercedes": "外太空的玫勒赛德丝", + "Celestial Spear": "天空之矛", + "Celestine": "天青石", + "Celine": "瑟琳", + "Cerise": "赛瑞丝", + "Cermia": "洁若米亚", + "Challenger Dominiel": "挑战者多米妮尔", + "Champion Zerato": "终结者杰拉图", + "Champion's Trophy": "优胜者奖杯", + "Chaos Inquisitor": "混沌教屠杀追击者", + "Chaos Sect Axe": "混沌教巨斧大将军", + "Charles": "查尔斯", + "Charlotte": "夏绿蒂", + "Chatty": "柴迪", + "Chloe": "克萝爱", + "Choux": "小泡芙", + "Christy": "克莉丝媞", + "Church of Ilryos Axe": "伊利欧斯教斧兵", + "Cidd": "席德", + "Circus Fantasia": "奇幻马戏团", + "Clarissa": "克莱莉莎", + "Closer Charles": "末日指挥官查尔斯", + "Coli": "可丽", + "Command Model Laika": "指挥型莱伊卡", + "Commander Lorina": "指挥官萝里娜", + "Conqueror Lilias": "支配者莉莉亚斯", + "Corvus": "科尔布思", + "Cradle of Life": "生命摇篮", + "Creation & Destruction": "创造之福&破坏之颂", + "Crescent Moon Rin": "新月舞姬铃儿", + "Crimson Armin": "红焰亚敏", + "Crimson Moon of Nightmares": "红色噩梦之月", + "Crimson Seed": "红焰种子", + "Crown of Glory": "荣耀之冠", + "Crozet": "克罗泽", + "Cruel Mischief": "残酷的玩笑", + "Cursed Compass": "诅咒的罗盘", + "Claudia": "克劳蒂亚", + "Dark Corvus": "黑暗的科尔布思", + "Daydream Joker": "白日梦小丑", + "Days of Destiny": "命中注定的相遇", + "Deadly Sword": "必杀大剑", + "Demon's Pistol": "恶魔手枪", + "Desert Jewel Basar": "沙漠宝石巴萨尔", + "Designer Lilibet": "设计师莉莉贝", + "Destina": "戴丝蒂娜", + "Devil's Brand": "恶魔烙印", + "Diene": "迪埃妮", + "Dignus Orb": "尊严宝珠", + "Dingo": "汀果", + "Dizzy": "蒂姬", + "Doctor's Bag": "急救包", + "Doll Maker Pearlhorizon": "制偶师波萝莱珍", + "Dominiel": "多米妮尔", + "Doris": "朵莉思", + "Double-Edged Decrescent": "双刃下弦月", + "Draco Plate": "龙族板甲", + "Dream Scroll": "梦之卷轴", + "Durandal": "杜兰月", + "Dust Devil": "尘埃恶魔", + "Dux Noctis": "暗夜指挥者", + "Dragon King Sharun": "龙王莎伦", + "Eaton": "伊顿", + "Eda": "艾妲", + "Egg of Delusion": "迷惑之蛋", + "El's Fist": "艾尔之拳", + "Elbris Ritual Sword": "埃布利斯的宝剑", + "Elena": "艾蕾娜", + "Elf's Bow": "妖精之弓", + "Elphelt": "爱尔菲特", + "Elson": "艾尔森", + "Elyha's Knife": "埃里哈刀", + "Emilia": "爱蜜莉雅", + "Enhanced Gauntlet": "强化拳套", + "Enott": "艾诺特", + "Envoy's Pipe": "死神烟斗", + "Ervalen": "艾尔巴伦", + "Eternus": "埃特诺斯", + "Etica's Scepter": "艾帝嘉权杖", + "Exorcist's Tonfa": "斗鬼的拐棍", + "Elvira": "艾碧拉", + "Eternal Wanderer Ludwig": "永劫漂流者鲁特比", + "Ezra": "艾自拉", + "Fairy Tale for a Nightmare": "噩梦童话", + "Fairy's Grimoire": "妖精的魔法书", + "Fairytale Tenebria": "童话泰妮布里雅", + "Faithless Lidica": "无神论者丽迪卡", + "Falconer Kluri": "鹰猎人可露莉", + "Fallen Cecilia": "堕落的赛西莉亚", + "Fighter Maya": "战斗型玛雅", + "Firm Shield": "坚定之盾", + "Flan": "芙兰", + "Flawless Garments": "天衣无缝", + "Flower Shower": "洒花", + "Forest Totem": "绿林图腾", + "Free Spirit Tieria": "永恒不变的黛莉亚", + "Furious": "尤贝乌斯", + "Fumyr": "芙米尔", + "General Purrgis": "大将法济斯", + "Glenn": "格伦", + "Gloomyrain": "格鲁美兰", + "Goblin's Lamp": "鬼怪明灯", + "Godmother": "教母", + "Golden Cocoa Cookie": "黄金可可豆饼干", + "Grail of Blood": "鲜血圣杯", + "Great Chief Khawana": "大族长卡瓦娜", + "Guardian Ice Crystals": "守护的冰封碎片", + "Guide to a Decision": "选择的指标", + "Guider Aither": "求道者埃德勒", + "Guiding Light": "引导之光", + "Gunther": "坤特", + "Haste": "海斯特", + "Hataan": "哈坦", + "Hazel": "海兹", + "Helen": "海伦", + "Helga": "赫尔嘉", + "Hell Cutter": "地狱切割机", + "Hilag Lance": "锡拉革骑士长矛", + "Holiday Yufine": "度假风优芬妮", + "Holy Sacrifice": "神圣牺牲", + "Hurado": "修拉杜", + "Ian": "伊安", + "Idol's Cheer": "歌姬助阵", + "Iela Violin": "依埃萝小提琴", + "Ilynav": "伊莉娜芙", + "Inferno Khawazu": "烈焰的卡瓦朱", + "Infinity Basket": "无限提篮", + "Iron Fan": "铁扇", + "Iseria": "伊赛丽亚", + "Jecht": "杰克托", + "Jena": "捷娜", + "Judge Kise": "审判者绮世", + "Judith": "茱迪丝", + "Junkyard Dog": "Junkyard Dog", + "Justice for All": "为众人的正义", + "Kal'adra": "嘉拉特拉", + "Karin": "卡琳", + "Kawerik": "卡威利", + "Kayron": "凯隆", + "Ken": "肯恩", + "Khawana": "卡瓦娜", + "Khawazu": "卡瓦朱", + "Kikirat v2": "奇奇拉特V.2", + "Kiris": "奇丽丝", + "Kise": "绮世", + "Kitty Clarissa": "猫咪克莱莉莎", + "Kizuna AI": "绊爱", + "Kluri": "可露莉", + "Knowledge Seed": "知识种子", + "Krau": "克劳乌", + "Kane": "该隐", + "Labyrinth Cube": "迷宫的方块", + "Landy": "兰蒂", + "Last Rider Krau": "最后的骑士克劳乌", + "Last Teatime": "最后的下午茶", + "Lena": "雷娜", + "Leo": "雷欧", + "Lidica": "丽迪卡", + "Lilias": "莉莉亚斯", + "Lilibet": "莉莉贝", + "Little Queen Charlotte": "年轻的女王夏绿蒂", + "Lorina": "萝里娜", + "Lots": "拉兹", + "Love Potion": "爱情灵丹", + "Lucy": "露西", + "Ludwig": "鲁特比", + "Luluca": "璐璐卡", + "Luna": "露娜", + "Leah": "蕾娅", + "Magaraha's Tome": "玛姬拉哈的魔法古书", + "Magic Scholar Doris": "魔法学者朵莉思", + "Maid Chloe": "仆人克萝爱", + "Manica of Control": "控制的护臂", + "Manifu": "玛尼普", + "Martial Artist Ken": "武斗家肯恩", + "Mascot Hazel": "吉祥物海兹", + "Maya": "玛雅", + "Mediator Kawerik": "协调者卡威利", + "Melany": "玫拉妮", + "Melissa": "梅丽莎", + "Mercedes": "玫勒赛德丝", + "Mercenary Helga": "自由自在的佣兵赫尔嘉", + "Merciless Glutton": "无情的大食客", + "Midnight Bloom": "月夜之花", + "Mighty Scout": "侦查兵玛伊堤", + "Mighty Yaksha": "金刚夜叉", + "Milim": "蜜莉姆", + "Mirsa": "米勒莎", + "Mistychain": "美丝缇彩", + "Montmorancy": "蒙茉朗西", + "Moonlight Dreamblade": "皎月梦夜", + "Moonlight's Vestige": "月光之痕", + "Mort": "魔勒", + "Ms. Confille": "Miss Confile", + "Mucacha": "穆卡察", + "Mui": "缪伊", + "Muse Rima": "缪斯黎玛", + "Necro & Undine": "恶魔&天使", + "Nemunas": "尼姆拉斯", + "New Year Cookies": "蕴含幸福的岁末饼干", + "Noble Oath": "高洁的誓言", + "Oath Key": "誓约钥匙", + "Official Levulin Beach Volleyball": "里柏林沙滩排球指定用球", + "One Year of Gratitude": "心存感谢的一年", + "Operator Sigret": "操作员赛珂兰特", + "Otherworldly Machinery": "异界的机械", + "Otillie": "奥缇莉尔", + "Old Gardening Shears": "老旧园艺剪刀", + "Pavel": "帕贝尔", + "Pearlhorizon": "波萝莱珍", + "Penelope": "潘尼罗佩", + "Politis": "佛里蒂丝", + "Portrait of the Saviors": "救援者们的画像", + "Proof of Valor": "勇猛证据", + "Prophetic Candlestick": "预视的烛台", + "Pure White Trust": "纯白的信赖", + "Purrgis": "法济斯", + "Pyllis": "费莉丝", + "Radiant Forever": "灿烂的永恒", + "Rainbow Scale": "人鱼公主的鳞片", + "Ram": "拉姆", + "Ran": "岚", + "Ranon's Memorandum": "拉农的备忘录", + "Ras": "拉斯", + "Ravi": "萝菲", + "Ray": "雷伊", + "Reingar's Special Drink": "雷茵格尔特调饮料", + "Rem": "雷姆", + "Remnant Violet": "残影的菲奥雷托", + "Requiemroar": "雷奎姆洛", + "Researcher Carrot": "研究者卡萝", + "Resolute Soldier Series": "坚毅的战士", + "Rhianna & Luciella": "里安娜&路西艾拉", + "Righteous Thief Roozid": "义贼鲁兹德", + "Rikoris": "里科黎司", + "Rima": "黎玛", + "Rimuru": "利姆路", + "Rin": "铃儿", + "Rise of a Monarch": "王的诞生", + "Roaming Warrior Leo": "流浪勇士雷欧", + "Roana": "罗安纳", + "Rod of Amaryllis": "孤挺花之杖", + "Romann": "洛曼", + "Roozid": "鲁兹德", + "Rosa Hargana": "罗沙哈勒戈纳", + "Rose": "萝季", + "Ruby Essence": "红玉精髓", + "Ruele of Light": "光之瑞儿", + "Sage Baal & Sezan": "贤者巴尔&塞尚", + "Samsara Prayer Beads": "循环念珠", + "Santa Muerte": "死亡圣神", + "Sashe Ithanes": "香袋伊妲涅斯", + "Schuri": "修里", + "Seaside Bellona": "海边的维尔萝娜", + "Secret Art - Storm Sword": "秘笈:雷天一剑", + "Senya": "赛娜", + "Sepulcrum": "塞弗克鲁姆", + "Serila": "塞丽拉", + "Severed Horn Wand": "被截断的犄角手杖", + "Sez": "赛兹", + "Shadow Knight Pyllis": "黑骑士费莉丝", + "Shadow Rose": "暗影萝季", + "Shepherd of the Hollow": "无为的引导者", + "Shepherds of Chaos": "混沌的引导者们", + "Shimadra Staff": "席玛德拉的手杖", + "Shooting Star Achates": "流星雅卡泰丝", + "Shuna": "朱菜", + "Sigret": "赛珂兰特", + "Sigurd Scythe": "席格勒赛斯", + "Silk": "席可", + "Silver Blade Aramintha": "白银刀刃的雅拉敏塔", + "Silver Rain": "银光骤雨", + "Sinful Angelica": "罪戾的安洁莉卡", + "Sira-Ren": "席拉-莲", + "Snow Crystal": "白雪水晶", + "Sol": "索尔", + "Solitaria of the Snow": "雪国的苏莉塔妮亚", + "Song of Stars": "星辰之歌", + "Sonia": "苏尼娅", + "Spear of a New Dawn": "开辟之枪", + "Specimen Sez": "实验体赛兹", + "Specter Tenebria": "幻影的泰妮布里雅", + "Spirit Eye Celine": "灵眼的瑟琳", + "Spirit's Breath": "精灵气息", + "Spooky Solayu Stories": "奇闻轶事录", + "Staff of Wisdom": "智慧的手杖", + "Star of the Deep Sea": "深海漂浮之星", + "Star Piercer": "破星者", + "Steadfast Gatekeeper": "坚定的看守者", + "Stella Harpa": "星之竖琴", + "Strak Gauntlet": "史特雷克拳套", + "Straze": "史瑞杰思", + "Succubus Mirror": "魅魔之镜", + "Summertime Iseria": "南国的伊赛丽亚", + "Super Duper Water Gun Shooter": "至尊水枪", + "Surin": "苏琳", + "Sven": "史宾", + "Sword of Ezera": "伊杰拉的圣剑", + "Sword of Holy Light": "圣光之剑", + "Sword of Judgment": "审判之剑", + "Sword of Summer Twilight": "夏夜闪刀", + "Sword of the Morning": "黎明剑", + "Sword of the Sun": "太阳之剑", + "Sword of Winter Shadow": "冬晷切刀", + "Silvertide Christy": "银波克莉丝媞", + "Seductive Flower": "诱惑之花", + "Tagehel's Ancient Book": "塔克赫尔古书", + "Tamarinne": "塔玛林尔", + "Taranor Guard": "塔拉诺尔禁卫队员", + "Taranor Royal Guard": "塔拉诺尔王宫士兵", + "Tear of the Desert": "沙漠之泪", + "Tempest Surin": "风云苏琳", + "Tenebria": "泰妮布里雅", + "The Guardian Star's Blessing": "守护星的祝福", + "Tieria": "黛莉亚", + "Time Matter": "时间的物质", + "Timeless Anchor": "永劫之锚", + "To a New World": "致崭新的时代", + "Top Model Luluca": "最强模特儿璐璐卡", + "Torn Sleeve": "撕裂的右衣袖", + "Touch of Rekos": "列科斯的救援", + "Troublemaker Crozet": "不法之徒克罗泽", + "Twilight Calamity": "落日之灾", + "Tywin": "泰温", + "Tyrant's Descent": "暴君的血统", + "Uberius's Tooth": "尤贝里乌斯的臼齿", + "Unfading Memories": "不凋零的回忆", + "Unseen Observer": "隐形的观察者", + "Upgraded Dragon Knuckles": "改良型龙指虎", + "Umbral Keystones": "暗影源石", + "Venus Orb": "金星宝珠", + "Victorious Flag": "胜战旗帜", + "Vildred": "维德瑞", + "Violet Talisman": "紫色护身符", + "Violet": "菲奥雷托", + "Vivian": "薇薇安", + "Wall of Order": "秩序护墙", + "Wanda": "汪达", + "Wanderer Silk": "流浪者席可", + "War Horn": "进攻号角", + "Watcher Schuri": "注视者修里", + "Water's Origin": "波涛的祈愿", + "Wild Angara": "野生安卡拉", + "Wind Rider": "乘风者", + "Wings of Light and Shadow": "明暗双翼", + "Wondrous Potion Vial": "灵药的试管", + "XIII. Death": "XIII. Death", + "XIV. Temperance": "XIV. Temperance", + "XVI. The Tower": "XVI. The Tower", + "XVIII. The Moon": "XVIII. The Moon", + "Yufine": "优芬妮", + "Yuna": "尤娜", + "Zahhak": "札哈克", + "Zealot Carmainerose": "传道者卡麦萝兹", + "Zeno": "杰诺", + "Zerato": "杰拉图", + "An Offer You Can't Refuse": "无法拒绝的提议", + "Benimaru's Tachi": "红丸之刀", + "Blazing Full Moon Trophy": "燃烧的满月奖杯", + "Brilliant Confidence": "闪耀的自信", + "Cutie Pando": "小可爱胖嘟", + "Fan of Light and Dark": "昏明之扇", + "Fullmetals Automail": "钢铁机械铠", + "Glo-Wings 21": "光辉羽翼21", + "Goblet of Oath": "誓言之杯", + "Golden Rose": "金玫瑰", + "Ignition Cloth Gloves": "发火布手套", + "Indestructible Gaiters": "金刚绑腿", + "Jack-O's Symbol": "洁克·欧的象征", + "Magic for Friends": "为了朋友的魔法", + "Mature Sunglasses": "成熟的墨镜", + "Nostalgic Music Box": "悲恋音乐盒", + "Prayer of Solitude": "孤独祈祷", + "Prelude to a New Era": "新时代的序幕", + "Records of Unity": "团结的记录", + "Sacred Tree Branch": "神木树枝", + "Scroll of Shadows": "暗影之书", + "Seal of Capture": "束缚之印", + "Sharpshooters Handgun": "神枪手的手枪", + "Sole Consolation": "唯一的慰藉", + "Spatiotemporal Fan": "时空折扇", + "Spear of Purification": "破邪之矛", + "Sphere of Inferno": "焚灭之球", + "Sphere of Sadism": "嗜虐之球", + "Sword of Autumn Eclipse": "秋端染刀", + "Sword of Cycling Seasons": "循环之剑", + "Aria": "艾莉雅", + "Abigail": "雅碧凯", + "Ainos 2.0": "艾诺斯 2.0", + "Amid": "雅咪德", + "Architect Laika": "策划者莱伊卡", + "Arunka": "亚露嘉", + "Astromancer Elena": "星辰的神谕艾蕾娜", + "Bad Cat Armin": "坏猫猫亚敏", + "Beehoo": "雨修", + "Benimaru": "红丸", + "Brieg": "布里克", + "Commander Pavel": "司令官帕贝尔", + "Death Dealer Ray": "死亡探究者雷伊", + "Edward Elric": "爱德华·艾力克", + "Eligos": "艾利戈斯", + "Hasol": "夏率", + "Holy Flame Adin": "圣炎的艾庭", + "Hwayoung": "和英", + "Infinite Horizon Achates": "未知可能性雅卡泰丝", + "Jack-O": "洁克·欧", + "Januta": "扎怒塔", + "Juni": "珠妮", + "Last Piece Karin": "最后的碎片卡琳", + "Lethe": "丽希", + "Lilka": "莉珈", + "Lionheart Cermia": "狮心王洁若米亚", + "Lone Crescent Bellona": "一轮孤月维尔萝娜", + "Lua": "路雅", + "Moon Bunny Dominiel": "月兔多米尼尔", + "Muwi": "武蔚", + "Navy Captain Landy": "海军上校兰蒂", + "Ocean Breeze Luluca": "海洋香气璐璐卡", + "Orte": "奥乐缇", + "Peacemaker Furious": "平衡的尤贝乌斯", + "Peira": "沛伊拉", + "Pirate Captain Flan": "海盗船长芙兰", + "Requiem Roana": "镇魂萝安纳", + "Riza Hawkeye": "莉莎·霍克爱", + "Roy Mustang": "罗伊·马斯坦古", + "Savior Adin": "救援者艾庭", + "Serene Purity Adin": "清玄的艾庭", + "Sharun": "莎伦", + "Shepherd Jena": "引导者捷娜", + "Summer Break Charlotte": "暑假夏绿蒂", + "Summer's Disciple Alexa": "夏日学生雅莉莎", + "Suthan": "斯坦", + "Sylvan Sage Vivian": "森之贤者薇薇安", + "Taeyou": "太悟", + "Talaz": "达拉士", + "Talia": "达黎儿", + "Twisted Eidolon Kayron": "扭曲亡灵凯隆", + "Unbound Knight Arowell": "自由骑士雅洛薇", + "Verdant Adin": "新绿的艾庭", + "Veronica": "贝洛妮卡", + "Vigilante Leader Glenn": "自卫队队长格伦", + "Yoonryoung": "尹凌", + "Yulha": "律荷", + "Zio": "智武", + "Midnight Gala Lilias": "夜宴莉莉亚斯", + "Urban Shadow Choux": "都市暗影小泡芙", + "Hostess of the Banquet": "宴会之主", + "Nahkwol": "落月", + "ae-GISELLE": "ae-GISELLE", + "ae-KARINA": "ae-KARINA", + "ae-NINGNING": "ae-NINGNING", + "ae-WINTER": "ae-WINTER", + "Laia": "莱雅", + "Elegiac Candles": "慰灵烛光", + "_comment_1": "角色神器结束", + + "scales": "天秤座", + "lion": "狮子座", + "waterbearer": "水瓶座", + "archer": "射手座", + "crab": "巨蟹座", + "twins": "双子座", + "bull": "金牛座", + "fish": "双鱼座", + "maiden": "处女座", + "goat": "摩羯座", + "scorpion": "天蝎座", + "ram": "白羊座", + + "knight": "骑士", + "warrior": "战士", + "assassin": "潜行者", + "mage": "魔导士", + "ranger": "射手", + "manauser": "精灵师", + + "fire": "火", + "wind": "木", + "ice": "水", + "dark": "暗", + "light": "光", + + "cp": "战斗力", + "atk": "战斗力", + "hp": "战斗力", + "spd": "战斗力", + "def": "战斗力", + "chc": "战斗力", + "chd": "战斗力", + "dac": "战斗力", + "eff": "战斗力", + "efr": "", + // ... 其余映射请粘贴完整 ... +} + +// I18nZhToEn 中文->英文映射表(自动生成) +var I18nZhToEn = func() map[string]string { + m := make(map[string]string, len(I18nEnToZh)) + for k, v := range I18nEnToZh { + m[v] = k + } + return m +}() + +// En2Zh 英文转中文 +func En2Zh(s string) string { + if v, ok := I18nEnToZh[s]; ok { + return v + } + return s +} + +// Zh2En 中文转英文 +func Zh2En(s string) string { + if v, ok := I18nZhToEn[s]; ok { + return v + } + return s +} diff --git a/utility/cache.go b/utility/cache.go deleted file mode 100644 index d6e23ec..0000000 --- a/utility/cache.go +++ /dev/null @@ -1,12 +0,0 @@ -package utility - -import ( - "github.com/gogf/gf/v2/frame/g" - "github.com/gogf/gf/v2/os/gcache" -) - -var RedisCache = func() *gcache.Cache { - cache := gcache.New() - cache.SetAdapter(gcache.NewAdapterRedis(g.Redis())) - return cache -}()