当前位置: 首页 > news >正文

升鲜宝生鲜配送供应链管理系统---PMS--商品品牌多语言存储与 Redis 缓存同步实现

升鲜宝生鲜配送供应链管理系统---PMS--商品品牌多语言存储与 Redis 缓存同步实现

商品品牌多语言存储与 Redis 缓存同步实现文档

本设计文档说明商品品牌(pms_brand)在支持多语言环境下的数据存储、翻译同步及 Redis 缓存方案,
涵盖数据结构、DTO、服务实现、Redis Key 结构与数据流示意。

一、DTO 设计
① RequestBrandDTO

@Data
public class RequestBrandDTO implements Serializable {
private Long id;
private String brandCode;
private String brandImage;
private String brandIndex;
private Integer sortCode;
private Integer isIcon;
private Integer iconSort;
private Integer enabled;
private List sysDynamicTranslationList = new ArrayList<>();
}

② RequestSysDynamicTranslationDTO

@Data
public class RequestSysDynamicTranslationDTO implements Serializable {
private String languageCode;
private String fieldName;
private String fieldValue;
}

二、Service 实现(新增 / 修改)
1️⃣ 新增品牌(Add)

@Transactional
@Override
public void addBrand(RequestBrandDTO req, Long userId) {
String defaultLang = redisTemplate.opsForValue().get("sys:lang:default");
String defaultName = req.getSysDynamicTranslationList().stream()
.filter(t -> defaultLang.equalsIgnoreCase(t.getLanguageCode()))
.map(RequestSysDynamicTranslationDTO::getFieldValue)
.findFirst()
.orElse("未命名品牌");

PmsBrandEntity brand = new PmsBrandEntity();
brand.setBrandCode(req.getBrandCode());
brand.setBrandName(defaultName);
brand.setBrandImage(req.getBrandImage());
brand.setBrandIndex(req.getBrandIndex());
brand.setSortCode(req.getSortCode());
brand.setIsIcon(req.getIsIcon());
brand.setIconSort(req.getIconSort());
brand.setEnabled(req.getEnabled());
brand.setCreator(userId);
brand.setCreateDate(System.currentTimeMillis());
this.save(brand);String brandKey = "pms:brand:" + brand.getId();
redisTemplate.opsForHash().putAll(brandKey, BeanUtil.beanToMap(brand));for (RequestSysDynamicTranslationDTO t : req.getSysDynamicTranslationList()) {SysDynamicTranslationEntity entity = new SysDynamicTranslationEntity();entity.setEntityType("product_brand");entity.setEntityId(brand.getId());entity.setLanguageCode(t.getLanguageCode());entity.setFieldName(t.getFieldName());entity.setFieldValue(t.getFieldValue());entity.setCreator(userId);entity.setCreateDate(System.currentTimeMillis());translationDao.insert(entity);String i18nKey = "i18n:product_brand:" + brand.getId() + ":" + t.getLanguageCode();redisTemplate.opsForHash().put(i18nKey, t.getFieldName(), t.getFieldValue());
}redisTemplate.opsForList().rightPush("pms:brand:list:enabled", String.valueOf(brand.getId()));

}

2️⃣ 修改品牌(Update)

@Transactional
@Override
public void updateBrand(RequestBrandDTO req, Long userId) {
PmsBrandEntity brand = this.getById(req.getId());
if (brand == null) {
throw new RuntimeException("品牌不存在");
}

String defaultLang = redisTemplate.opsForValue().get("sys:lang:default");
String defaultName = req.getSysDynamicTranslationList().stream().filter(t -> defaultLang.equalsIgnoreCase(t.getLanguageCode())).map(RequestSysDynamicTranslationDTO::getFieldValue).findFirst().orElse(brand.getBrandName());brand.setBrandCode(req.getBrandCode());
brand.setBrandName(defaultName);
brand.setBrandImage(req.getBrandImage());
brand.setBrandIndex(req.getBrandIndex());
brand.setSortCode(req.getSortCode());
brand.setIsIcon(req.getIsIcon());
brand.setIconSort(req.getIconSort());
brand.setEnabled(req.getEnabled());
brand.setUpdater(userId);
brand.setUpdateDate(System.currentTimeMillis());
this.updateById(brand);String brandKey = "pms:brand:" + brand.getId();
redisTemplate.delete(brandKey);
redisTemplate.opsForHash().putAll(brandKey, BeanUtil.beanToMap(brand));for (RequestSysDynamicTranslationDTO t : req.getSysDynamicTranslationList()) {SysDynamicTranslationEntity exist = translationDao.findOne("product_brand", brand.getId(), t.getLanguageCode(), t.getFieldName());if (exist == null) {SysDynamicTranslationEntity entity = new SysDynamicTranslationEntity();entity.setEntityType("product_brand");entity.setEntityId(brand.getId());entity.setLanguageCode(t.getLanguageCode());entity.setFieldName(t.getFieldName());entity.setFieldValue(t.getFieldValue());entity.setCreator(userId);entity.setCreateDate(System.currentTimeMillis());translationDao.insert(entity);} else {exist.setFieldValue(t.getFieldValue());exist.setUpdater(userId);exist.setUpdateDate(System.currentTimeMillis());translationDao.updateById(exist);}String i18nKey = "i18n:product_brand:" + brand.getId() + ":" + t.getLanguageCode();redisTemplate.opsForHash().put(i18nKey, t.getFieldName(), t.getFieldValue());
}

}

三、Redis Key 结构设计

1️⃣ pms:brand:{id} → 品牌主缓存(Hash)
2️⃣ pms:brand:list:enabled → 启用品牌ID列表(List)
3️⃣ i18n:product_brand:{id}:{lang} → 品牌多语言翻译缓存(Hash)

四、数据流说明

新增 / 修改品牌数据流:
前端 RequestBrandDTO → Controller → Service
→ 保存 pms_brand 主表(默认语言)
→ 保存 sys_dynamic_translation 多语言翻译
→ 写入 Redis:

  • pms:brand:
  • i18n:product_brand:{id}:{languageCode}
    → 返回结果

五、Redis 数据示例

pms:brand:1001
├─ id = 1001
├─ brand_code = COCA
├─ brand_name = 可口可乐

i18n:product_brand:1001:zh-CN
├─ brand_name = 可口可乐

i18n:product_brand:1001:en-US
├─ brand_name = Coca-Cola

i18n:product_brand:1001:ja-JP
├─ brand_name = コカ・コーラ

六、总结

该方案实现了商品品牌的国际化多语言同步逻辑,支持前端提交多语言内容,后端统一写入数据库与缓存。
实现要点:

  1. 默认语言写入品牌主表
  2. 所有语言写入 sys_dynamic_translation
  3. Redis 双层缓存结构(品牌主缓存 + 多语言缓存)
  4. 修改品牌自动刷新翻译与缓存
http://www.jsqmd.com/news/34150/

相关文章:

  • 网站在苹果 Safari 进行适配遇到的问题
  • Python对象模型的认知陷阱:类的`__name__`属性与名字绑定的本质辨析
  • Python环境教程(三)-环境高级之uv pixi
  • 升鲜宝生鲜配送供应链管理系统---PMS 商品模块 + 动态翻译设计说明
  • 深入浅出 SPA/MPA
  • CPP 学习笔记 语法总结 - 阿源
  • 2025 11 7
  • 深入解析:大数据集群环境搭建(Ubantu)
  • Unity Shader 入门教程:从零开始编写你的第一个 Shader
  • 中电金信​​:「AI智变」这个AI自动化工厂,助力模型高质效落地
  • 实用指南:Linux内核架构浅谈2- Linux内核与硬件交互的底层逻辑:硬件抽象层的作用
  • 2025年有机纯驼奶粉加工厂权威推荐榜单:初乳配方驼乳粉/全脂羊奶粉/绵羊奶粉源头厂家精选
  • 2025年网络安全法要求下,主流项目管理工具如何选
  • 转录组基因表达差异分析全流程:以GSE65682为例
  • 英伟达DCGM说明和安装
  • 阿卡德付费文章:让每个普通人的知识,都能变成真金白银
  • Mysql杂志(三十)——索引失效情况 - 指南
  • 84用python命令查看安装了那些库
  • 84用python命令查看安装了那些库
  • 使用NIFI 同步数据库表
  • 2025年尖顶篷房生产厂家权威推荐榜单:球形篷房/多边形篷房/会展篷房源头厂家精选
  • 手把手教你在unity中实现一个视觉小说系统(一)
  • 2025 年 1688 店铺代运营品牌最新推荐排行榜,专业机构实力测评及高性价比选择指南
  • 开发快、团队小、竞争狠:小游戏项目管理的破局之道,如何在高并发项目中兼顾速度与质量?
  • 2025 东莞外贸独立站公司最新推荐榜:全链路服务商测评解析与优质品牌优选指南东莞/广州/深圳/佛山/中山/惠州外贸独立站运营公司推荐
  • 2025年深圳刑事辩护律师权威推荐榜单:医疗纠纷案/婚姻家庭案/知识产权案法律服务专家精选
  • BMS(电池管理便捷的系统)的主要作用和架构简述
  • 某场模拟赛
  • 2025-11-07
  • 2025年真空润滑脂厂家权威推荐榜单:无尘室润滑脂/位移平台润滑脂/电子显微镜润滑脂源头厂家精选