Browse Source

12月12日现金管理多语言配置,成功导出多语言版本Excel表

huangqizheng/feature-20260106155423-红包修改
wangguorui 4 weeks ago
parent
commit
9fdf0449aa
  1. 5
      src/main/java/com/example/demo/Util/LanguageTranslationUtil.java
  2. 141
      src/main/java/com/example/demo/controller/coin/ExportController.java
  3. 412
      src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java

5
src/main/java/com/example/demo/Util/LanguageTranslationUtil.java

@ -84,8 +84,9 @@ public class LanguageTranslationUtil {
*/
private Translation findTranslationByChinese(String chineseSimplified) {
// 先从缓存中查找
if (translationCache.containsKey(chineseSimplified)) {
return translationCache.get(chineseSimplified);
Translation cached = translationCache.get(chineseSimplified);
if (cached != null) {
return cached;
}
// 从数据库中精确查找

141
src/main/java/com/example/demo/controller/coin/ExportController.java

@ -77,14 +77,6 @@ public class ExportController {
dto.setToken(token);
dto.setLang(lang); // 设置语言参数
// 解析语言代码
String languageCode = parseLanguageCode(lang);
// 如果不是中文环境将查询条件中的翻译文本转换为中文简体
if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
convertRechargeTranslatedFieldsToChinese(dto.getRechargeUser(), languageCode);
}
try {
// 尝试获取锁
if (!redisLockUtil.tryLock(lockKey, requestId, expireTime)) {
@ -109,14 +101,6 @@ public class ExportController {
dto.setToken(token);
dto.setLang(lang); // 设置语言参数
// 解析语言代码
String languageCode = parseLanguageCode(lang);
// 如果不是中文环境将查询条件中的翻译文本转换为中文简体
if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
convertRefundTranslatedFieldsToChinese(dto.getRefundUser(), languageCode);
}
try {
// 尝试获取锁
if (!redisLockUtil.tryLock(lockKey, requestId, expireTime)) {
@ -141,15 +125,13 @@ public class ExportController {
dto.setToken(token);
dto.setLang(lang); // 设置语言参数
// 解析语言代码
String languageCode = parseLanguageCode(lang);
// 如果不是中文环境将查询条件中的翻译文本转换为中文简体
if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
convertConsumeTranslatedFieldsToChinese(dto.getConsumeUser(), languageCode);
}
try {
// 尝试获取锁
if (!redisLockUtil.tryLock(lockKey, requestId, expireTime)) {
String errorMsg = languageTranslationUtil.translate("操作太频繁,请稍后重试", lang);
throw new BusinessException(errorMsg);
}
// 执行业务逻辑
return exportService.addExportConsume(dto);
} finally {
// 释放锁
@ -306,115 +288,4 @@ public class ExportController {
redisLockUtil.unlock(lockKey, requestId);
}
}
/**
* 解析语言代码
*/
private String parseLanguageCode(String langHeader) {
if (langHeader == null || langHeader.isEmpty()) {
return "zh";
}
// 处理类似 "en-US" "zh-TW" 的情况
if (langHeader.contains("-")) {
String[] parts = langHeader.split("-");
// 特殊处理中文繁体
if ("zh".equalsIgnoreCase(parts[0]) && "TW".equalsIgnoreCase(parts[1])) {
return "zh_TW";
}
return parts[0].toLowerCase();
}
return langHeader.toLowerCase();
}
/**
* 将充值查询条件中的翻译字段转换为中文简体
*/
private void convertRechargeTranslatedFieldsToChinese(RechargeUser rechargeUser, String languageCode) {
if (rechargeUser != null) {
// 转换市场名称
if (rechargeUser.getMarket() != null && !rechargeUser.getMarket().isEmpty()) {
String chineseMarket = translationService.findChineseSimplifiedByTranslation(
rechargeUser.getMarket(), languageCode);
rechargeUser.setMarket(chineseMarket);
}
// 转换汇率名称
if (rechargeUser.getRateName() != null && !rechargeUser.getRateName().isEmpty()) {
String chineseRateName = translationService.findChineseSimplifiedByTranslation(
rechargeUser.getRateName(), languageCode);
rechargeUser.setRateName(chineseRateName);
}
// 转换支付方式
if (rechargeUser.getPayModel() != null && !rechargeUser.getPayModel().isEmpty()) {
String chinesePayModel = translationService.findChineseSimplifiedByTranslation(
rechargeUser.getPayModel(), languageCode);
rechargeUser.setPayModel(chinesePayModel);
}
// 转换备注
if (rechargeUser.getRemark() != null && !rechargeUser.getRemark().isEmpty()) {
String chineseRemark = translationService.findChineseSimplifiedByTranslation(
rechargeUser.getRemark(), languageCode);
rechargeUser.setRemark(chineseRemark);
}
}
}
/**
* 将退款查询条件中的翻译字段转换为中文简体
*/
private void convertRefundTranslatedFieldsToChinese(RefundUser refundUser, String languageCode) {
if (refundUser != null) {
// 转换市场名称
if (refundUser.getMarket() != null && !refundUser.getMarket().isEmpty()) {
String chineseMarket = translationService.findChineseSimplifiedByTranslation(
refundUser.getMarket(), languageCode);
refundUser.setMarket(chineseMarket);
}
// 转换商品名称
if (refundUser.getGoodsName() != null && !refundUser.getGoodsName().isEmpty()) {
String chineseGoodsName = translationService.findChineseSimplifiedByTranslation(
refundUser.getGoodsName(), languageCode);
refundUser.setGoodsName(chineseGoodsName);
}
// 转换退款类型
if (refundUser.getRefundType() != null && !refundUser.getRefundType().isEmpty()) {
String chineseRefundType = translationService.findChineseSimplifiedByTranslation(
refundUser.getRefundType(), languageCode);
refundUser.setRefundType(chineseRefundType);
}
// 转换备注
if (refundUser.getRemark() != null && !refundUser.getRemark().isEmpty()) {
String chineseRemark = translationService.findChineseSimplifiedByTranslation(
refundUser.getRemark(), languageCode);
refundUser.setRemark(chineseRemark);
}
}
}
/**
* 将消费查询条件中的翻译字段转换为中文简体
*/
private void convertConsumeTranslatedFieldsToChinese(ConsumeUser consumeUser, String languageCode) {
if (consumeUser != null) {
// 转换商品名称
if (consumeUser.getGoodsName() != null && !consumeUser.getGoodsName().isEmpty()) {
String chineseName = translationService.findChineseSimplifiedByTranslation(
consumeUser.getGoodsName(), languageCode);
consumeUser.setGoodsName(chineseName);
}
// 转换市场名称
if (consumeUser.getMarket() != null && !consumeUser.getMarket().isEmpty()) {
String chineseMarket = translationService.findChineseSimplifiedByTranslation(
consumeUser.getMarket(), languageCode);
consumeUser.setMarket(chineseMarket);
}
}
}
}

412
src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java

@ -6,6 +6,7 @@ import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.example.demo.Util.ExcelUploadUtil;
import com.example.demo.Util.JWTUtil;
import com.example.demo.Util.LanguageTranslationUtil;
import com.example.demo.controller.bean.BeanConsumeController;
import com.example.demo.controller.bean.BeanRechargeController;
import com.example.demo.controller.cash.CashCollectionController;
@ -85,6 +86,9 @@ public class ExportExcelServiceImpl implements ExportExcelService {
private CashRefundController cashRefundController;
@Autowired
private CashCollectionController cashCollectionController;
// 注入LanguageTranslationUtil
@Autowired
private LanguageTranslationUtil languageTranslationUtil;
// 每页查询的数据量
private static final int PAGE_SIZE = 5000;
@Autowired
@ -216,7 +220,14 @@ public class ExportExcelServiceImpl implements ExportExcelService {
List<String> markets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));
refundUser.setMarkets(markets);
page.setRefundUser(refundUser);
return refundController.select(page, String.join(",", markets));
// 从请求数据中获取语言设置如果没有则使用默认值
String lang = "zh_CN";
JsonNode langNode = requestDataNode.path("lang");
if (langNode != null && !langNode.asText().isEmpty()) {
lang = langNode.asText();
}
return refundController.select(page, lang);
} catch (Exception e) {
throw new RuntimeException(e);
}
@ -420,6 +431,13 @@ public class ExportExcelServiceImpl implements ExportExcelService {
JsonNode requestDataNode = rootNode.path("requestData");
String tokenValue = requestDataNode.path("token").asText();
// 获取语言参数
String lang = "zh_CN";
JsonNode langNode = rootNode.path("lang");
if (langNode != null && !langNode.asText().isEmpty()) {
lang = langNode.asText();
}
// 2. 验证导出记录
AiEmotionExportRecordVO record = validateExportRecord(recordId);
if (record == null) return null;
@ -469,11 +487,60 @@ public class ExportExcelServiceImpl implements ExportExcelService {
// 在这里添加类型转换逻辑
if ("goldDetail".equals(exportType) && list.get(0) instanceof GoldDetail) {
fillGoldDetailTypeDescriptions((List<GoldDetail>) list);
// 添加翻译支持
translateGoldDetailList((List<GoldDetail>) list, lang);
}
// 添加退款方式转换逻辑
if ("refundUser".equals(exportType) && list.get(0) instanceof RefundUser) {
fillRefundUserModelDescriptions((List<RefundUser>) list);
// 添加翻译支持
translateRefundUserList((List<RefundUser>) list, lang);
}
// 添加充值用户翻译支持
if ("rechargeUser".equals(exportType) && list.get(0) instanceof RechargeUser) {
translateRechargeUserList((List<RechargeUser>) list, lang);
}
// 添加消费用户翻译支持
if ("consumeUser".equals(exportType) && list.get(0) instanceof ConsumeUser) {
translateConsumeUserList((List<ConsumeUser>) list, lang);
}
// 添加直播用户翻译支持
if ("liveUser".equals(exportType) && list.get(0) instanceof BeanConsumeLive) {
translateBeanConsumeLiveList((List<BeanConsumeLive>) list, lang);
}
// 添加铁粉用户翻译支持
if ("fanUser".equals(exportType) && list.get(0) instanceof BeanConsumeFan) {
translateBeanConsumeFanList((List<BeanConsumeFan>) list, lang);
}
// 添加文章用户翻译支持
if ("articleUser".equals(exportType) && list.get(0) instanceof BeanConsumeArticle) {
translateBeanConsumeArticleList((List<BeanConsumeArticle>) list, lang);
}
// 添加金豆充值翻译支持
if ("beanUser".equals(exportType) && list.get(0) instanceof BeanSystemRechargeInfo) {
translateBeanSystemRechargeInfoList((List<BeanSystemRechargeInfo>) list, lang);
}
// 添加在线充值翻译支持
if ("onlineUser".equals(exportType) && list.get(0) instanceof BeanOnlineRechargeInfo) {
translateBeanOnlineRechargeInfoList((List<BeanOnlineRechargeInfo>) list, lang);
}
// 添加财务退款翻译支持
if ("financeUser".equals(exportType) && list.get(0) instanceof CashRecordDTO) {
translateCashRecordDTOList((List<CashRecordDTO>) list, lang);
}
// 添加现金收款翻译支持
if ("cashUser".equals(exportType) && list.get(0) instanceof CashCollection) {
translateCashCollectionList((List<CashCollection>) list, lang);
}
excelWriter.write(list, writeSheet);
@ -680,4 +747,347 @@ public class ExportExcelServiceImpl implements ExportExcelService {
default: return "未知退款方式";
}
}
// 各种实体类的翻译方法
/**
* 翻译金币明细列表
*/
private void translateGoldDetailList(List<GoldDetail> list, String lang) {
if (list == null || list.isEmpty() || "zh_CN".equalsIgnoreCase(lang) || "zh".equalsIgnoreCase(lang)) {
return;
}
for (GoldDetail item : list) {
// 翻译类型描述
if (item.getTypeDesc() != null && !item.getTypeDesc().isEmpty()) {
item.setTypeDesc(languageTranslationUtil.translate(item.getTypeDesc(), lang));
}
// 翻译市场名称
if (item.getMarket() != null && !item.getMarket().isEmpty()) {
item.setMarket(languageTranslationUtil.translate(item.getMarket(), lang));
}
}
}
/**
* 翻译退款用户列表
*/
private void translateRefundUserList(List<RefundUser> list, String lang) {
if (list == null || list.isEmpty() || "zh_CN".equalsIgnoreCase(lang) || "zh".equalsIgnoreCase(lang)) {
return;
}
for (RefundUser item : list) {
// 翻译市场名称
if (item.getMarket() != null && !item.getMarket().isEmpty()) {
item.setMarket(languageTranslationUtil.translate(item.getMarket(), lang));
}
// 翻译商品名称
if (item.getGoodsName() != null && !item.getGoodsName().isEmpty()) {
item.setGoodsName(languageTranslationUtil.translate(item.getGoodsName(), lang));
}
// 翻译退款类型
if (item.getRefundType() != null && !item.getRefundType().isEmpty()) {
item.setRefundType(languageTranslationUtil.translate(item.getRefundType(), lang));
}
// 翻译退款方式描述
if (item.getRefundModelDesc() != null && !item.getRefundModelDesc().isEmpty()) {
item.setRefundModelDesc(languageTranslationUtil.translate(item.getRefundModelDesc(), lang));
}
// 翻译备注
if (item.getRemark() != null && !item.getRemark().isEmpty()) {
item.setRemark(languageTranslationUtil.translate(item.getRemark(), lang));
}
}
}
/**
* 翻译充值用户列表
*/
private void translateRechargeUserList(List<RechargeUser> list, String lang) {
if (list == null || list.isEmpty() || "zh_CN".equalsIgnoreCase(lang) || "zh".equalsIgnoreCase(lang)) {
return;
}
for (RechargeUser item : list) {
// 翻译市场名称
if (item.getMarket() != null && !item.getMarket().isEmpty()) {
item.setMarket(languageTranslationUtil.translate(item.getMarket(), lang));
}
// 翻译汇率名称
if (item.getRateName() != null && !item.getRateName().isEmpty()) {
item.setRateName(languageTranslationUtil.translate(item.getRateName(), lang));
}
// 翻译支付方式
if (item.getPayModel() != null && !item.getPayModel().isEmpty()) {
item.setPayModel(languageTranslationUtil.translate(item.getPayModel(), lang));
}
// 翻译备注
if (item.getRemark() != null && !item.getRemark().isEmpty()) {
item.setRemark(languageTranslationUtil.translate(item.getRemark(), lang));
}
}
}
/**
* 翻译消费用户列表
*/
private void translateConsumeUserList(List<ConsumeUser> list, String lang) {
if (list == null || list.isEmpty() || "zh_CN".equalsIgnoreCase(lang) || "zh".equalsIgnoreCase(lang)) {
return;
}
for (ConsumeUser item : list) {
// 翻译商品名称
if (item.getGoodsName() != null && !item.getGoodsName().isEmpty()) {
item.setGoodsName(languageTranslationUtil.translate(item.getGoodsName(), lang));
}
// 翻译市场名称
if (item.getMarket() != null && !item.getMarket().isEmpty()) {
item.setMarket(languageTranslationUtil.translate(item.getMarket(), lang));
}
// 翻译备注
if (item.getRemark() != null && !item.getRemark().isEmpty()) {
item.setRemark(languageTranslationUtil.translate(item.getRemark(), lang));
}
}
}
/**
* 翻译直播消费列表
*/
private void translateBeanConsumeLiveList(List<BeanConsumeLive> list, String lang) {
if (list == null || list.isEmpty() || "zh_CN".equalsIgnoreCase(lang) || "zh".equalsIgnoreCase(lang)) {
return;
}
for (BeanConsumeLive item : list) {
// 翻译地区/分部
if (item.getDept() != null && !item.getDept().isEmpty()) {
item.setDept(languageTranslationUtil.translate(item.getDept(), lang));
}
// 翻译礼物名称
if (item.getGift() != null && !item.getGift().isEmpty()) {
item.setGift(languageTranslationUtil.translate(item.getGift(), lang));
}
// 翻译频道名称
if (item.getLiveChannel() != null && !item.getLiveChannel().isEmpty()) {
item.setLiveChannel(languageTranslationUtil.translate(item.getLiveChannel(), lang));
}
// 翻译直播间名称
if (item.getLiveName() != null && !item.getLiveName().isEmpty()) {
item.setLiveName(languageTranslationUtil.translate(item.getLiveName(), lang));
}
}
}
/**
* 翻译铁粉消费列表
*/
private void translateBeanConsumeFanList(List<BeanConsumeFan> list, String lang) {
if (list == null || list.isEmpty() || "zh_CN".equalsIgnoreCase(lang) || "zh".equalsIgnoreCase(lang)) {
return;
}
for (BeanConsumeFan item : list) {
// 翻译地区/分部
if (item.getDept() != null && !item.getDept().isEmpty()) {
item.setDept(languageTranslationUtil.translate(item.getDept(), lang));
}
// 翻译频道名称
if (item.getChannel() != null && !item.getChannel().isEmpty()) {
item.setChannel(languageTranslationUtil.translate(item.getChannel(), lang));
}
// 翻译会员类型
if (item.getType() != null && !item.getType().isEmpty()) {
item.setType(languageTranslationUtil.translate(item.getType(), lang));
}
}
}
/**
* 翻译文章消费列表
*/
private void translateBeanConsumeArticleList(List<BeanConsumeArticle> list, String lang) {
if (list == null || list.isEmpty() || "zh_CN".equalsIgnoreCase(lang) || "zh".equalsIgnoreCase(lang)) {
return;
}
for (BeanConsumeArticle item : list) {
// 翻译地区/分部
if (item.getDept() != null && !item.getDept().isEmpty()) {
item.setDept(languageTranslationUtil.translate(item.getDept(), lang));
}
// 翻译类型
if (item.getType() != null && !item.getType().isEmpty()) {
item.setType(languageTranslationUtil.translate(item.getType(), lang));
}
// 翻译文章/视频标题
if (item.getArticleName() != null && !item.getArticleName().isEmpty()) {
item.setArticleName(languageTranslationUtil.translate(item.getArticleName(), lang));
}
}
}
/**
* 翻译金豆系统充值列表
*/
private void translateBeanSystemRechargeInfoList(List<BeanSystemRechargeInfo> list, String lang) {
if (list == null || list.isEmpty() || "zh_CN".equalsIgnoreCase(lang) || "zh".equalsIgnoreCase(lang)) {
return;
}
for (BeanSystemRechargeInfo item : list) {
// 翻译所属地区
if (item.getMarket() != null && !item.getMarket().isEmpty()) {
item.setMarket(languageTranslationUtil.translate(item.getMarket(), lang));
}
// 翻译备注
if (item.getRemark() != null && !item.getRemark().isEmpty()) {
item.setRemark(languageTranslationUtil.translate(item.getRemark(), lang));
}
}
}
/**
* 翻译金豆在线充值列表
*/
private void translateBeanOnlineRechargeInfoList(List<BeanOnlineRechargeInfo> list, String lang) {
if (list == null || list.isEmpty() || "zh_CN".equalsIgnoreCase(lang) || "zh".equalsIgnoreCase(lang)) {
return;
}
for (BeanOnlineRechargeInfo item : list) {
// 翻译所属地区
if (item.getMarket() != null && !item.getMarket().isEmpty()) {
item.setMarket(languageTranslationUtil.translate(item.getMarket(), lang));
}
// 翻译充值平台
if (item.getPlatform() != null && !item.getPlatform().isEmpty()) {
item.setPlatform(languageTranslationUtil.translate(item.getPlatform(), lang));
}
}
}
/**
* 翻译现金退款记录列表
*/
private void translateCashRecordDTOList(List<CashRecordDTO> list, String lang) {
if (list == null || list.isEmpty() || "zh_CN".equalsIgnoreCase(lang) || "zh".equalsIgnoreCase(lang)) {
return;
}
for (CashRecordDTO item : list) {
// 翻译商品名称
if (item.getGoodsName() != null && !item.getGoodsName().isEmpty()) {
item.setGoodsName(languageTranslationUtil.translate(item.getGoodsName(), lang));
}
// 翻译备注
if (item.getRemark() != null && !item.getRemark().isEmpty()) {
item.setRemark(languageTranslationUtil.translate(item.getRemark(), lang));
}
// 翻译退款理由
if (item.getRefundReason() != null && !item.getRefundReason().isEmpty()) {
item.setRefundReason(languageTranslationUtil.translate(item.getRefundReason(), lang));
}
// 翻译驳回理由
if (item.getRejectReason() != null && !item.getRejectReason().isEmpty()) {
item.setRejectReason(languageTranslationUtil.translate(item.getRejectReason(), lang));
}
// 翻译退款备注
if (item.getRefundRemark() != null && !item.getRefundRemark().isEmpty()) {
item.setRefundRemark(languageTranslationUtil.translate(item.getRefundRemark(), lang));
}
}
}
/**
* 翻译现金收款列表
*/
private void translateCashCollectionList(List<CashCollection> list, String lang) {
if (list == null || list.isEmpty() || "zh_CN".equalsIgnoreCase(lang) || "zh".equalsIgnoreCase(lang)) {
return;
}
for (CashCollection item : list) {
// 翻译所属地区名称
if (item.getMarketName() != null && !item.getMarketName().isEmpty()) {
item.setMarketName(languageTranslationUtil.translate(item.getMarketName(), lang));
}
// 翻译活动名称
if (item.getActivity() != null && !item.getActivity().isEmpty()) {
item.setActivity(languageTranslationUtil.translate(item.getActivity(), lang));
}
// 翻译商品名称
if (item.getGoodsName() != null && !item.getGoodsName().isEmpty()) {
item.setGoodsName(languageTranslationUtil.translate(item.getGoodsName(), lang));
}
// 翻译数量单位
if (item.getNumUnit() != null && !item.getNumUnit().isEmpty()) {
item.setNumUnit(languageTranslationUtil.translate(item.getNumUnit(), lang));
}
// 翻译付款币种
if (item.getPaymentCurrency() != null && !item.getPaymentCurrency().isEmpty()) {
item.setPaymentCurrency(languageTranslationUtil.translate(item.getPaymentCurrency(), lang));
}
// 翻译到账币种
if (item.getReceivedCurrency() != null && !item.getReceivedCurrency().isEmpty()) {
item.setReceivedCurrency(languageTranslationUtil.translate(item.getReceivedCurrency(), lang));
}
// 翻译支付方式
if (item.getPayType() != null && !item.getPayType().isEmpty()) {
item.setPayType(languageTranslationUtil.translate(item.getPayType(), lang));
}
// 翻译到账地区
if (item.getReceivedMarket() != null && !item.getReceivedMarket().isEmpty()) {
item.setReceivedMarket(languageTranslationUtil.translate(item.getReceivedMarket(), lang));
}
// 翻译备注
if (item.getRemark() != null && !item.getRemark().isEmpty()) {
item.setRemark(languageTranslationUtil.translate(item.getRemark(), lang));
}
// 翻译驳回理由
if (item.getRejectReason() != null && !item.getRejectReason().isEmpty()) {
item.setRejectReason(languageTranslationUtil.translate(item.getRejectReason(), lang));
}
// 翻译到账备注
if (item.getReceivedRemark() != null && !item.getReceivedRemark().isEmpty()) {
item.setReceivedRemark(languageTranslationUtil.translate(item.getReceivedRemark(), lang));
}
}
}
}
Loading…
Cancel
Save