package jnpf.base.mapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.google.common.collect.ImmutableList; import jnpf.base.entity.BaseLangEntity; import jnpf.base.model.language.BaseLangForm; import jnpf.constant.MsgCode; import jnpf.exception.DataException; import jnpf.util.*; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; import java.util.*; import java.util.stream.Collectors; /** * @author JNPF开发平台组 * @version v5.0.0 * @copyright 引迈信息技术有限公司 * @date 2024/6/20 10:02:18 */ public interface BaseLangMapper extends SuperMapper { default void create(BaseLangForm form) { List byEnode = this.getByEnodeLang(form.getEnCode(), null); if (CollectionUtils.isNotEmpty(byEnode)) { throw new DataException(MsgCode.SYS051.get()); } Map map = form.getMap(); boolean atLeastOne = false; if (MapUtils.isNotEmpty(map)) { atLeastOne = map.values().stream().anyMatch(v -> v != null && !v.trim().isEmpty()); } if (!atLeastOne) { throw new DataException(MsgCode.SYS052.get()); } String groupId = RandomUtil.uuId(); for (String key : map.keySet()) { BaseLangEntity entity = JsonUtil.getJsonToBean(form, BaseLangEntity.class); entity.setGroupId(groupId); entity.setLanguage(key); entity.setFullName(map.get(key)); saveEntity(entity); } } default void update(BaseLangForm form) { List langList = getByGroupId(form.getId()); if (CollectionUtils.isEmpty(langList)) { throw new DataException(MsgCode.FA002.get()); } List byEnodeLang = getByEnodeLang(form.getEnCode(), null); List hasLang = byEnodeLang.stream().filter(t -> !t.getGroupId().equals(form.getId())).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(hasLang)) { throw new DataException(MsgCode.SYS051.get()); } Map map = form.getMap(); boolean atLeastOne = false; if (MapUtils.isNotEmpty(map)) { atLeastOne = map.values().stream().anyMatch(v -> v != null && !v.trim().isEmpty()); } if (!atLeastOne) { throw new DataException(MsgCode.SYS052.get()); } List keyList = new ArrayList<>(map.keySet()); String groupId = ""; List deleteList = new ArrayList<>(); for (BaseLangEntity t : langList) { if (!keyList.contains(t.getLanguage())) { deleteList.add(t); } groupId = t.getGroupId(); } //删除移除的 if (CollectionUtils.isNotEmpty(deleteList)) { this.deleteByIds(deleteList.stream().map(BaseLangEntity::getId).collect(Collectors.toList())); } for (String key : keyList) { BaseLangEntity entity = langList.stream().filter(t -> key.equals(t.getLanguage())).findFirst().orElse(new BaseLangEntity()); if (StringUtil.isNotEmpty(entity.getId())) { entity.setEnCode(form.getEnCode()); entity.setType(form.getType()); entity.setFullName(map.get(key)); entity.setLastModifyTime(DateUtil.getNowDate()); entity.setLastModifyUserId(UserProvider.getUser().getUserId()); this.updateById(entity); } else { entity.setId(RandomUtil.uuId()); entity.setGroupId(groupId); entity.setEnCode(form.getEnCode()); entity.setType(form.getType()); entity.setLanguage(key); entity.setFullName(map.get(key)); entity.setCreatorTime(new Date()); entity.setCreatorUserId(UserProvider.getUser().getUserId()); this.insert(entity); } } } default BaseLangForm getInfo(String groupId) { List byEnodeLang = getByGroupId(groupId); BaseLangForm form = new BaseLangForm(); form.setId(groupId); LinkedHashMap map = new LinkedHashMap<>(); for (BaseLangEntity entity : byEnodeLang) { form.setEnCode(entity.getEnCode()); form.setType(entity.getType()); map.put(entity.getLanguage(), entity.getFullName()); } form.setMap(map); return form; } default void delete(String groupId) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().select(BaseLangEntity::getId); queryWrapper.lambda().eq(BaseLangEntity::getGroupId, groupId); this.deleteByIds(this.selectList(queryWrapper)); } default void saveEntity(BaseLangEntity entity) { entity.setId(RandomUtil.uuId()); entity.setCreatorTime(new Date()); entity.setCreatorUserId(UserProvider.getUser().getUserId()); this.insert(entity); } /** * 根据翻译标记和语种获取数据 * * @param enCode * @param language * @return */ default List getByEnodeLang(String enCode, String language) { QueryWrapper queryWrapper = new QueryWrapper<>(); if (StringUtil.isNotEmpty(enCode)) { queryWrapper.lambda().eq(BaseLangEntity::getEnCode, enCode); } if (StringUtil.isNotEmpty(language)) { queryWrapper.lambda().eq(BaseLangEntity::getLanguage, language); } return this.selectList(queryWrapper); } /** * 根据翻译标记id获取数据 * * @param groupId * @return */ default List getByGroupId(String groupId) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(BaseLangEntity::getGroupId, groupId); queryWrapper.lambda().orderByAsc(BaseLangEntity::getSortCode).orderByAsc(BaseLangEntity::getCreatorTime); return this.selectList(queryWrapper); } default List getServerLang(Locale locale) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(BaseLangEntity::getLanguage, locale.toLanguageTag()); List type = ImmutableList.of(0, 1); queryWrapper.lambda().in(BaseLangEntity::getType, type); return this.selectList(queryWrapper); } }