use of com.hccake.ballcat.i18n.model.entity.I18nData in project ballcat by ballcat-projects.
the class I18nDataMapper method updateByCodeAndLanguageTag.
/**
* 根据 code 和 languageTag 修改指定的 I18nData
* @param i18nDataDTO i18nDataDTO
* @return updated true or false
*/
default boolean updateByCodeAndLanguageTag(I18nDataDTO i18nDataDTO) {
LambdaUpdateWrapper<I18nData> wrapper = Wrappers.lambdaUpdate(I18nData.class).eq(I18nData::getCode, i18nDataDTO.getCode()).eq(I18nData::getLanguageTag, i18nDataDTO.getLanguageTag());
I18nData entity = new I18nData();
entity.setMessage(i18nDataDTO.getMessage());
entity.setRemarks(i18nDataDTO.getRemarks());
return SqlHelper.retBool(this.update(entity, wrapper));
}
use of com.hccake.ballcat.i18n.model.entity.I18nData in project ballcat by ballcat-projects.
the class CustomI18nMessageProvider method getI18nMessage.
@Override
public I18nMessage getI18nMessage(String code, Locale locale) {
String languageTag = locale.toLanguageTag();
// 缓存 key
String cacheKey = getCacheKey(code, languageTag);
I18nMessage i18nMessage = cache.get(cacheKey);
// 如果缓存没有,则查询数据库(这里数据库查询其实也加了 redis 缓存)
if (i18nMessage == null) {
I18nData i18nData = i18nDataService.getByCodeAndLanguageTag(code, languageTag);
if (i18nData != null) {
i18nMessage = converterToI18nMessage(i18nData);
// 错峰过期
int timeout = RandomUtil.randomInt(MIN_TIMEOUT, MAX_TIMEOUT);
cache.put(cacheKey, i18nMessage, timeout);
}
}
return i18nMessage;
}
use of com.hccake.ballcat.i18n.model.entity.I18nData in project ballcat by ballcat-projects.
the class I18nDataMapper method exists.
/**
* 查询已存在的 i18nData(根据 code 和 languageTag 联合唯一键)
* @param list i18nDataList
* @return List<I18nData>
*/
default List<I18nData> exists(List<I18nData> list) {
// 组装 sql
LambdaQueryWrapper<I18nData> wrapper = Wrappers.lambdaQuery(I18nData.class);
for (I18nData i18nData : list) {
wrapper.or(w -> {
String code = i18nData.getCode();
String languageTag = i18nData.getLanguageTag();
w.eq(I18nData::getCode, code).eq(I18nData::getLanguageTag, languageTag);
});
}
return this.selectList(wrapper);
}
use of com.hccake.ballcat.i18n.model.entity.I18nData in project ballcat by ballcat-projects.
the class I18nDataServiceImpl method saveOrUpdate.
@Override
@CacheDel(key = I18nRedisKeyConstants.I18N_DATA_PREFIX, multiDel = true, keyJoint = "#p0.![#this.code + ':' + #this.languageTag]")
public void saveOrUpdate(List<I18nData> list) {
// 查询已存在的数据
List<I18nData> existsI18nData = baseMapper.exists(list);
HashSet<I18nData> existsSet = new HashSet<>(existsI18nData);
// 获取对应插入和更新的列表
List<I18nDataDTO> updateList = new ArrayList<>();
List<I18nData> insertList = new ArrayList<>();
for (I18nData i18nData : list) {
if (existsSet.contains(i18nData)) {
updateList.add(I18nDataConverter.INSTANCE.poToDto(i18nData));
} else {
insertList.add(i18nData);
}
}
// 小范围事务处理,另外不影响缓存更新
i18NDataTxSupport.saveAndUpdate(insertList, updateList);
// 缓存更新
for (I18nDataDTO i18nDataDTO : updateList) {
String code = i18nDataDTO.getCode();
String languageTag = i18nDataDTO.getLanguageTag();
this.pushUpdateMessage(code, languageTag);
}
}
use of com.hccake.ballcat.i18n.model.entity.I18nData in project ballcat by ballcat-projects.
the class I18nDataController method save.
/**
* 新增国际化信息
* @param i18nDataCreateDTO 国际化信息
* @return R 通用返回体
*/
@CreateOperationLogging(msg = "新增国际化信息")
@PostMapping
@PreAuthorize("@per.hasPermission('i18n:i18n-data:add')")
@Operation(summary = "新增国际化信息", description = "新增国际化信息")
public R<Void> save(@Valid @RequestBody I18nDataCreateDTO i18nDataCreateDTO) {
// 转换为实体类列表
List<I18nData> list = new ArrayList<>();
List<I18nDataCreateDTO.LanguageText> languageTexts = i18nDataCreateDTO.getLanguageTexts();
for (I18nDataCreateDTO.LanguageText languageText : languageTexts) {
I18nData i18nData = new I18nData();
i18nData.setCode(i18nDataCreateDTO.getCode());
i18nData.setRemarks(i18nDataCreateDTO.getRemarks());
i18nData.setLanguageTag(languageText.getLanguageTag());
i18nData.setMessage(languageText.getMessage());
list.add(i18nData);
}
return i18nDataService.saveBatch(list) ? R.ok() : R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "新增国际化信息失败");
}
Aggregations