From 23855599412c4d61b38d78f0f3abd3430a48b5b1 Mon Sep 17 00:00:00 2001 From: zhangherong <571457620@qq.com> Date: 星期三, 25 六月 2025 11:51:38 +0800 Subject: [PATCH] Merge branch 'mdc_hyjs_master' --- lxzn-boot-base-core/src/main/java/org/jeecg/common/util/TranslateDictTextUtils.java | 202 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 202 insertions(+), 0 deletions(-) diff --git a/lxzn-boot-base-core/src/main/java/org/jeecg/common/util/TranslateDictTextUtils.java b/lxzn-boot-base-core/src/main/java/org/jeecg/common/util/TranslateDictTextUtils.java new file mode 100644 index 0000000..623abf2 --- /dev/null +++ b/lxzn-boot-base-core/src/main/java/org/jeecg/common/util/TranslateDictTextUtils.java @@ -0,0 +1,202 @@ +package org.jeecg.common.util; + +import cn.hutool.core.collection.CollectionUtil; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.jeecg.common.api.CommonAPI; +import org.jeecg.common.constant.CommonConstant; +import org.jeecg.common.system.vo.DictModel; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; + +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +@Component +@Slf4j +public class TranslateDictTextUtils { + + @Lazy + @Autowired + private CommonAPI commonApi; + @Autowired + private RedisTemplate redisTemplate; + + public void translateField(String field, String value, JSONObject item, String dictCode) { + if (StringUtils.isBlank(value)) { + item.put(field + CommonConstant.DICT_TEXT_SUFFIX, null); + return; + } + // 瀛楀吀鏁版嵁鍒楄〃锛� key = 瀛楀吀code锛寁alue=鏁版嵁鍒楄〃 + Map<String, List<String>> dataListMap = new HashMap<>(5); + dataListMap.put(dictCode, this.listAddAllDeduplicate(new ArrayList<>(), Arrays.asList(value.split(",")))); + //step.2 璋冪敤缈昏瘧鏂规硶锛屼竴娆℃�х炕璇� + Map<String, List<DictModel>> translText = this.translateAllDict(dataListMap); + //缈昏瘧 + List<DictModel> dictModels = translText.get(dictCode); + if (CollectionUtil.isEmpty(dictModels)) { + item.put(field + CommonConstant.DICT_TEXT_SUFFIX, null); + return; + } + String textValue = this.translDictText(dictModels, value); + item.put(field + CommonConstant.DICT_TEXT_SUFFIX, textValue); + } + + /** + * 瀛楀吀鍊兼浛鎹㈡枃鏈� + * + * @param dictModels + * @param values + * @return + */ + private String translDictText(List<DictModel> dictModels, String values) { + List<String> result = new ArrayList<>(); + + // 鍏佽澶氫釜閫楀彿鍒嗛殧锛屽厑璁镐紶鏁扮粍瀵硅薄 + String[] splitVal = values.split(","); + for (String val : splitVal) { + String dictText = val; + for (DictModel dict : dictModels) { + if (val.equals(dict.getValue())) { + dictText = dict.getText(); + break; + } + } + if(StringUtils.isNotBlank(dictText)) { + result.add(dictText); + } + } + if(CollectionUtil.isEmpty(result)) { + return ""; + } + return String.join(",", result); + } + + /** + * list 鍘婚噸娣诲姞 + */ + private List<String> listAddAllDeduplicate(List<String> dataList, List<String> addList) { + // 绛涢�夊嚭dataList涓病鏈夌殑鏁版嵁 + List<String> filterList = addList.stream().filter(i -> !dataList.contains(i)).collect(Collectors.toList()); + dataList.addAll(filterList); + return dataList; + } + + /** + * 涓�娆℃�ф妸鎵�鏈夌殑瀛楀吀閮界炕璇戜簡 + * 1. 鎵�鏈夌殑鏅�氭暟鎹瓧鍏哥殑鎵�鏈夋暟鎹彧鎵ц涓�娆QL + * 2. 琛ㄥ瓧鍏哥浉鍚岀殑鎵�鏈夋暟鎹彧鎵ц涓�娆QL + * + * @param dataListMap + * @return + */ + private Map<String, List<DictModel>> translateAllDict(Map<String, List<String>> dataListMap) { + // 缈昏瘧鍚庣殑瀛楀吀鏂囨湰锛宬ey=dictCode + Map<String, List<DictModel>> translText = new HashMap<>(5); + // 闇�瑕佺炕璇戠殑鏁版嵁锛堟湁浜涘彲浠ヤ粠redis缂撳瓨涓幏鍙栵紝灏变笉璧版暟鎹簱鏌ヨ锛� + List<String> needTranslData = new ArrayList<>(); + //step.1 鍏堥�氳繃redis涓幏鍙栫紦瀛樺瓧鍏告暟鎹� + for (String dictCode : dataListMap.keySet()) { + List<String> dataList = dataListMap.get(dictCode); + if (dataList.size() == 0) { + continue; + } + // 琛ㄥ瓧鍏搁渶瑕佺炕璇戠殑鏁版嵁 + List<String> needTranslDataTable = new ArrayList<>(); + for (String s : dataList) { + String data = s.trim(); + if (data.length() == 0) { + continue; //璺宠繃寰幆 + } + if (dictCode.contains(",")) { + String keyString = String.format("sys:cache:dictTable::SimpleKey [%s,%s]", dictCode, data); + if (redisTemplate.hasKey(keyString)) { + try { + String text = oConvertUtils.getString(redisTemplate.opsForValue().get(keyString)); + List<DictModel> list = translText.computeIfAbsent(dictCode, k -> new ArrayList<>()); + list.add(new DictModel(data, text)); + } catch (Exception e) { + log.warn(e.getMessage()); + } + } else if (!needTranslDataTable.contains(data)) { + // 鍘婚噸娣诲姞 + needTranslDataTable.add(data); + } + } else { + String keyString = String.format("sys:cache:dict::%s:%s", dictCode, data); + if (redisTemplate.hasKey(keyString)) { + try { + String text = oConvertUtils.getString(redisTemplate.opsForValue().get(keyString)); + List<DictModel> list = translText.computeIfAbsent(dictCode, k -> new ArrayList<>()); + list.add(new DictModel(data, text)); + } catch (Exception e) { + log.warn(e.getMessage()); + } + } else if (!needTranslData.contains(data)) { + // 鍘婚噸娣诲姞 + needTranslData.add(data); + } + } + + } + //step.2 璋冪敤鏁版嵁搴撶炕璇戣〃瀛楀吀 + if (needTranslDataTable.size() > 0) { + String[] arr = dictCode.split(","); + String table = arr[0], text = arr[1], code = arr[2]; + String values = String.join(",", needTranslDataTable); + log.debug("translateDictFromTableByKeys.dictCode:" + dictCode); + log.debug("translateDictFromTableByKeys.values:" + values); + List<DictModel> texts = commonApi.translateDictFromTableByKeys(table, text, code, values); + log.debug("translateDictFromTableByKeys.result:" + texts); + List<DictModel> list = translText.computeIfAbsent(dictCode, k -> new ArrayList<>()); + list.addAll(texts); + + // 鍋� redis 缂撳瓨 + for (DictModel dict : texts) { + String redisKey = String.format("sys:cache:dictTable::SimpleKey [%s,%s]", dictCode, dict.getValue()); + try { + // update-begin-author:taoyan date:20211012 for: 瀛楀吀琛ㄧ炕璇戞敞瑙g紦瀛樻湭鏇存柊 issues/3061 + // 淇濈暀5鍒嗛挓 + redisTemplate.opsForValue().set(redisKey, dict.getText(), 300, TimeUnit.SECONDS); + // update-end-author:taoyan date:20211012 for: 瀛楀吀琛ㄧ炕璇戞敞瑙g紦瀛樻湭鏇存柊 issues/3061 + } catch (Exception e) { + log.warn(e.getMessage(), e); + } + } + } + } + + //step.3 璋冪敤鏁版嵁搴撹繘琛岀炕璇戞櫘閫氬瓧鍏� + if (needTranslData.size() > 0) { + List<String> dictCodeList = Arrays.asList(dataListMap.keySet().toArray(new String[]{})); + // 灏嗕笉鍖呭惈閫楀彿鐨勫瓧鍏竎ode绛涢�夊嚭鏉ワ紝鍥犱负甯﹂�楀彿鐨勬槸琛ㄥ瓧鍏革紝鑰屼笉鏄櫘閫氱殑鏁版嵁瀛楀吀 + List<String> filterDictCodes = dictCodeList.stream().filter(key -> !key.contains(",")).collect(Collectors.toList()); + String dictCodes = String.join(",", filterDictCodes); + String values = String.join(",", needTranslData); + log.debug("translateManyDict.dictCodes:" + dictCodes); + log.debug("translateManyDict.values:" + values); + Map<String, List<DictModel>> manyDict = commonApi.translateManyDict(dictCodes, values); + log.debug("translateManyDict.result:" + manyDict); + for (String dictCode : manyDict.keySet()) { + List<DictModel> list = translText.computeIfAbsent(dictCode, k -> new ArrayList<>()); + List<DictModel> newList = manyDict.get(dictCode); + list.addAll(newList); + + // 鍋� redis 缂撳瓨 + for (DictModel dict : newList) { + String redisKey = String.format("sys:cache:dict::%s:%s", dictCode, dict.getValue()); + try { + redisTemplate.opsForValue().set(redisKey, dict.getText()); + } catch (Exception e) { + log.warn(e.getMessage(), e); + } + } + } + } + return translText; + } +} -- Gitblit v1.9.3