Search in sources :

Example 1 with I18nData

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));
}
Also used : I18nData(com.hccake.ballcat.i18n.model.entity.I18nData)

Example 2 with I18nData

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;
}
Also used : I18nMessage(com.hccake.ballcat.common.i18n.I18nMessage) I18nData(com.hccake.ballcat.i18n.model.entity.I18nData)

Example 3 with I18nData

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);
}
Also used : I18nData(com.hccake.ballcat.i18n.model.entity.I18nData)

Example 4 with I18nData

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);
    }
}
Also used : ArrayList(java.util.ArrayList) I18nDataDTO(com.hccake.ballcat.i18n.model.dto.I18nDataDTO) I18nData(com.hccake.ballcat.i18n.model.entity.I18nData) HashSet(java.util.HashSet) CacheDel(com.hccake.ballcat.common.redis.core.annotation.CacheDel)

Example 5 with I18nData

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, "新增国际化信息失败");
}
Also used : ArrayList(java.util.ArrayList) I18nData(com.hccake.ballcat.i18n.model.entity.I18nData) I18nDataCreateDTO(com.hccake.ballcat.i18n.model.dto.I18nDataCreateDTO) CreateOperationLogging(com.hccake.ballcat.common.log.operation.annotation.CreateOperationLogging) Operation(io.swagger.v3.oas.annotations.Operation) PreAuthorize(org.springframework.security.access.prepost.PreAuthorize)

Aggregations

I18nData (com.hccake.ballcat.i18n.model.entity.I18nData)5 ArrayList (java.util.ArrayList)2 I18nMessage (com.hccake.ballcat.common.i18n.I18nMessage)1 CreateOperationLogging (com.hccake.ballcat.common.log.operation.annotation.CreateOperationLogging)1 CacheDel (com.hccake.ballcat.common.redis.core.annotation.CacheDel)1 I18nDataCreateDTO (com.hccake.ballcat.i18n.model.dto.I18nDataCreateDTO)1 I18nDataDTO (com.hccake.ballcat.i18n.model.dto.I18nDataDTO)1 Operation (io.swagger.v3.oas.annotations.Operation)1 HashSet (java.util.HashSet)1 PreAuthorize (org.springframework.security.access.prepost.PreAuthorize)1