diff --git a/src/main/java/com/example/demo/Export/ExportService.java b/src/main/java/com/example/demo/Export/ExportService.java index 4a6e057..3822248 100644 --- a/src/main/java/com/example/demo/Export/ExportService.java +++ b/src/main/java/com/example/demo/Export/ExportService.java @@ -36,4 +36,7 @@ public interface ExportService { Result addExportPerformance(PerformanceDTO dto); Result addExportFundDTO(FundDTO dto); + + // 用户钱包明细导出 + Result addExportUserWallet(UserWalletDTO dto); } diff --git a/src/main/java/com/example/demo/Export/ExportServiceImpl.java b/src/main/java/com/example/demo/Export/ExportServiceImpl.java index ce3c536..b694259 100644 --- a/src/main/java/com/example/demo/Export/ExportServiceImpl.java +++ b/src/main/java/com/example/demo/Export/ExportServiceImpl.java @@ -144,11 +144,16 @@ public class ExportServiceImpl implements ExportService { performanceDTO.setUrl(""); performanceDTO.setFileName(generateFileName("业绩归属明细", adminName, lang)); performanceDTO.setDataNum(0); - }else if (dto instanceof FundDTO fundDTO){ + } else if (dto instanceof FundDTO fundDTO){ fundDTO.setAccount(Integer.valueOf(account)); fundDTO.setUrl(""); fundDTO.setFileName(generateFileName("资金明细", adminName, lang)); fundDTO.setDataNum(0); + } else if(dto instanceof UserWalletDTO userWalletDTO){ + userWalletDTO.setAccount(Integer.valueOf(account)); + userWalletDTO.setUrl(""); + userWalletDTO.setFileName(generateFileName("用户钱包明细", adminName, lang)); + userWalletDTO.setDataNum(0); } } @@ -276,6 +281,16 @@ public class ExportServiceImpl implements ExportService { fundDTO.getFileName(), fundDTO.getDataNum() ); + }else if (dto instanceof UserWalletDTO userWalletDTO){ + goldDetailMapper.insertExportRecord( + idHolder, + account, + userWalletDTO.getType(), + userWalletDTO.getState(), + userWalletDTO.getUrl(), + userWalletDTO.getFileName(), + userWalletDTO.getDataNum() + ); } } @@ -313,6 +328,21 @@ public class ExportServiceImpl implements ExportService { requestData.put(requestDataKey, performanceDTO); }else if (dto instanceof FundDTO fundDTO){ requestData.put(requestDataKey, fundDTO.getFundsDTO()); + }else if (dto instanceof UserWalletDTO userWalletDTO){ + // 特殊处理:优先使用 userWalletRecordVO,如果为空则尝试从其他字段获取 + if (userWalletDTO.getUserWalletRecordVO() != null) { + requestData.put("userWalletRecordVO", userWalletDTO.getUserWalletRecordVO()); + } else if (userWalletDTO.getUserWalletRecord() != null) { + // 如果前端传的是 userWalletRecord,转换为 VO + com.example.demo.domain.entity.UserWalletRecord record = userWalletDTO.getUserWalletRecord(); + com.example.demo.domain.vo.cash.UserWalletRecordVO vo = new com.example.demo.domain.vo.cash.UserWalletRecordVO(); + vo.setJwcode(record.getJwcode()); + vo.setWalletId(record.getWalletId()); + requestData.put("userWalletRecordVO", vo); + } else { + // 都为空,放一个空的 VO 对象 + requestData.put("userWalletRecordVO", new com.example.demo.domain.vo.cash.UserWalletRecordVO()); + } } exportData.put("requestData", requestData); @@ -390,4 +420,10 @@ public class ExportServiceImpl implements ExportService { public Result addExportFundDTO(FundDTO dto) { return addExport(dto, "资金流水明细", "fund:queue:export_queue", "fundsDTO", dto.getLang()); } + + @Override + public Result addExportUserWallet(UserWalletDTO dto) { + return addExport(dto, "用户钱包明细", "user_wallet_record:queue:export_queue", "userWalletRecordVO", dto.getLang()); + } + } diff --git a/src/main/java/com/example/demo/Util/ExcelHeaderTranslator.java b/src/main/java/com/example/demo/Util/ExcelHeaderTranslator.java index d77697f..af336f4 100644 --- a/src/main/java/com/example/demo/Util/ExcelHeaderTranslator.java +++ b/src/main/java/com/example/demo/Util/ExcelHeaderTranslator.java @@ -592,6 +592,43 @@ public class ExcelHeaderTranslator { } /** + * 获取用户钱包明细的 Excel 表头映射 + * 返回 Map<字段名,中文表头> + */ + public Map getUserWalletHeaders(String lang) { + Map headers = new LinkedHashMap<>(); + + // 定义所有表头的原始中文名称(对应 UserWalletRecordVO 类的字段) + headers.put("jwcode", "精网号"); + headers.put("userName", "姓名"); + headers.put("marketName", "所属地区"); + headers.put("walletName", "钱包名称"); + headers.put("typeText", "交易类型"); + headers.put("amount", "交易金额"); + headers.put("orderCode", "订单号"); + headers.put("description", "交易说明"); + headers.put("statusText", "状态"); + headers.put("createTime", "创建时间"); + + // 如果需要翻译,则翻译表头 + if (!isChineseLanguage(lang)) { + return translateHeaders(headers, lang); + } + + return headers; + } + + /** + * 获取用户钱包明细表头顺序 + */ + public List getUserWalletColumnOrder() { + return Arrays.asList( + "jwcode", "userName", "marketName", "walletName", "typeText", "amount", + "orderCode", "description", "statusText", "createTime" + ); + } + + /** * 翻译表头 */ private Map translateHeaders(Map headers, String lang) { diff --git a/src/main/java/com/example/demo/controller/coin/ExportController.java b/src/main/java/com/example/demo/controller/coin/ExportController.java index 18cf473..2bc6d8a 100644 --- a/src/main/java/com/example/demo/controller/coin/ExportController.java +++ b/src/main/java/com/example/demo/controller/coin/ExportController.java @@ -9,10 +9,7 @@ import com.example.demo.domain.entity.Admin; import com.example.demo.domain.entity.Export; import com.example.demo.domain.DTO.CashDTO; import com.example.demo.domain.vo.bean.*; -import com.example.demo.domain.vo.cash.CashCollection; -import com.example.demo.domain.vo.cash.CashRecordDTO; -import com.example.demo.domain.vo.cash.FundsDTO; -import com.example.demo.domain.vo.cash.PerformanceVO; +import com.example.demo.domain.vo.cash.*; import com.example.demo.domain.vo.coin.*; import com.example.demo.service.coin.ExportExcelService; import com.example.demo.Export.ExportService; @@ -57,7 +54,7 @@ public class ExportController { @PostMapping("/export") public Result export(@Valid @RequestBody Export export, @RequestHeader("token") String token) throws Exception { try { - UserDetails token1= JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class); + UserDetails token1 = JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class); export.setAccount(Integer.valueOf(token1.getUsername())); return Result.success(exportExcelService.getExcel(export)); } catch (Exception e) { @@ -75,20 +72,10 @@ public class ExportController { String token = request.getHeader("token"); 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)) { - String errorMsg = languageTranslationUtil.translate("操作太频繁,请稍后重试", lang); - throw new BusinessException(errorMsg); + throw new BusinessException("操作太频繁,请稍后重试"); } // 执行业务逻辑 return exportService.addExportRecharge(dto); @@ -107,20 +94,10 @@ public class ExportController { String token = request.getHeader("token"); 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)) { - String errorMsg = languageTranslationUtil.translate("操作太频繁,请稍后重试", lang); - throw new BusinessException(errorMsg); + throw new BusinessException("操作太频繁,请稍后重试"); } // 执行业务逻辑 return exportService.addExportRefund(dto); @@ -139,20 +116,10 @@ public class ExportController { String token = request.getHeader("token"); 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); + throw new BusinessException("操作太频繁,请稍后重试"); } // 执行业务逻辑 return exportService.addExportConsume(dto); @@ -168,20 +135,10 @@ public class ExportController { String requestId = UUID.randomUUID().toString(); long expireTime = 5000; dto.setLang(lang); // 设置语言参数 - - // 解析语言代码 - String languageCode = parseLanguageCode(lang); - - // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 - if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { - convertLiveTranslatedFieldsToChinese(dto.getBeanConsumeLive(), languageCode); - } - try { // 尝试获取锁 if (!redisLockUtil.tryLock(lockKey, requestId, expireTime)) { - String errorMsg = languageTranslationUtil.translate("操作太频繁,请稍后重试", lang); - throw new BusinessException(errorMsg); + throw new BusinessException("操作太频繁,请稍后重试"); } // 执行业务逻辑 return exportService.addExportLive(dto); @@ -192,25 +149,15 @@ public class ExportController { } @PostMapping("/exportFan") - public Result export(@Valid @RequestBody FanDTO dto, @RequestHeader(defaultValue = "zh_CN") String lang){ + public Result export(@Valid @RequestBody FanDTO dto, @RequestHeader(defaultValue = "zh_CN") String lang) { String lockKey = "export:lock:" + dto.getToken(); String requestId = UUID.randomUUID().toString(); long expireTime = 5000; dto.setLang(lang); // 设置语言参数 - - // 解析语言代码 - String languageCode = parseLanguageCode(lang); - - // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 - if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { - convertFanTranslatedFieldsToChinese(dto.getBeanConsumeFan(), languageCode); - } - try { // 尝试获取锁 if (!redisLockUtil.tryLock(lockKey, requestId, expireTime)) { - String errorMsg = languageTranslationUtil.translate("操作太频繁,请稍后重试", lang); - throw new BusinessException(errorMsg); + throw new BusinessException("操作太频繁,请稍后重试"); } // 执行业务逻辑 return exportService.addExportFan(dto); @@ -221,25 +168,15 @@ public class ExportController { } @PostMapping("/exportArticle") - public Result export(@Valid @RequestBody ArticleDTO dto, @RequestHeader(defaultValue = "zh_CN") String lang){ + public Result export(@Valid @RequestBody ArticleDTO dto, @RequestHeader(defaultValue = "zh_CN") String lang) { String lockKey = "export:lock:" + dto.getToken(); String requestId = UUID.randomUUID().toString(); long expireTime = 5000; dto.setLang(lang); // 设置语言参数 - - // 解析语言代码 - String languageCode = parseLanguageCode(lang); - - // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 - if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { - convertArticleTranslatedFieldsToChinese(dto.getBeanConsumeArticle(), languageCode); - } - try { // 尝试获取锁 if (!redisLockUtil.tryLock(lockKey, requestId, expireTime)) { - String errorMsg = languageTranslationUtil.translate("操作太频繁,请稍后重试", lang); - throw new BusinessException(errorMsg); + throw new BusinessException("操作太频繁,请稍后重试"); } // 执行业务逻辑 return exportService.addExportArticle(dto); @@ -250,25 +187,15 @@ public class ExportController { } @PostMapping("/exportBean") - public Result export(@Valid @RequestBody BeanRechargeDTO dto, @RequestHeader(defaultValue = "zh_CN") String lang){ + public Result export(@Valid @RequestBody BeanRechargeDTO dto, @RequestHeader(defaultValue = "zh_CN") String lang) { String lockKey = "export:lock:" + dto.getToken(); String requestId = UUID.randomUUID().toString(); long expireTime = 5000; dto.setLang(lang); // 设置语言参数 - - // 解析语言代码 - String languageCode = parseLanguageCode(lang); - - // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 - if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { - convertBeanTranslatedFieldsToChinese(dto.getBeanSystemRechargeInfo(), languageCode); - } - try { // 尝试获取锁 if (!redisLockUtil.tryLock(lockKey, requestId, expireTime)) { - String errorMsg = languageTranslationUtil.translate("操作太频繁,请稍后重试", lang); - throw new BusinessException(errorMsg); + throw new BusinessException("操作太频繁,请稍后重试"); } // 执行业务逻辑 return exportService.addExportBean(dto); @@ -279,25 +206,15 @@ public class ExportController { } @PostMapping("/exportol") - public Result exportol(@Valid @RequestBody OnlineDTO dto, @RequestHeader(defaultValue = "zh_CN") String lang) throws Exception { + public Result exportol(@Valid @RequestBody OnlineDTO dto, @RequestHeader(defaultValue = "zh_CN") String lang) { String lockKey = "export:lock:" + dto.getToken(); String requestId = UUID.randomUUID().toString(); long expireTime = 5000; dto.setLang(lang); // 设置语言参数 - - // 解析语言代码 - String languageCode = parseLanguageCode(lang); - - // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 - if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { - convertOnlineTranslatedFieldsToChinese(dto.getBeanOnlineRechargeInfo(), languageCode); - } - try { // 尝试获取锁 if (!redisLockUtil.tryLock(lockKey, requestId, expireTime)) { - String errorMsg = languageTranslationUtil.translate("操作太频繁,请稍后重试", lang); - throw new BusinessException(errorMsg); + throw new BusinessException("操作太频繁,请稍后重试"); } // 执行业务逻辑 return exportService.addExportOnline(dto); @@ -316,20 +233,10 @@ public class ExportController { String requestId = UUID.randomUUID().toString(); long expireTime = 5000; dto.setLang(lang); // 设置语言参数 - - // 解析语言代码 - String languageCode = parseLanguageCode(lang); - - // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 - if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { - convertFinanceTranslatedFieldsToChinese(dto.getCashRecordDTO(), languageCode); - } - try { // 尝试获取锁 if (!redisLockUtil.tryLock(lockKey, requestId, expireTime)) { - String errorMsg = languageTranslationUtil.translate("操作太频繁,请稍后重试", lang); - throw new BusinessException(errorMsg); + throw new BusinessException("操作太频繁,请稍后重试"); } // 执行业务逻辑 return exportService.addExportFinance(dto); @@ -345,24 +252,14 @@ public class ExportController { String requestId = UUID.randomUUID().toString(); long expireTime = 5000; dto.setLang(lang); // 设置语言参数 - - // 解析语言代码 - String languageCode = parseLanguageCode(lang); - - // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 - if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { - convertCashTranslatedFieldsToChinese(dto.getCashCollection(), languageCode); - } - try { // 尝试获取锁 if (!redisLockUtil.tryLock(lockKey, requestId, expireTime)) { - String errorMsg = languageTranslationUtil.translate("操作太频繁,请稍后重试", lang); - throw new BusinessException(errorMsg); + throw new BusinessException("操作太频繁,请稍后重试"); } // 执行业务逻辑 return exportService.addExportCash(dto); - }finally { + } finally { // 释放锁 redisLockUtil.unlock(lockKey, requestId); } @@ -374,20 +271,10 @@ public class ExportController { String requestId = UUID.randomUUID().toString(); long expireTime = 5000; page.getPerformanceDTO().setLang(lang);// 设置语言参数 - - // 解析语言代码 - String languageCode = parseLanguageCode(lang); - - // 如果非中文环境,将查询条件中的翻译文本转换为中文简体 - if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { - convertPerformanceTranslatedFieldsToChinese(page.getPerformanceDTO().getPerformanceVO(), languageCode); - } - try { // 尝试获取锁 if (!redisLockUtil.tryLock(lockKey, requestId, expireTime)) { - String errorMsg = languageTranslationUtil.translate("操作太频繁,请稍后重试", lang); - throw new BusinessException(errorMsg); + throw new BusinessException("操作太频繁,请稍后重试"); } // 执行业务逻辑 return exportService.addExportPerformance(page.getPerformanceDTO()); @@ -396,6 +283,7 @@ public class ExportController { redisLockUtil.unlock(lockKey, requestId); } } + /** * 资金导出 */ @@ -405,20 +293,10 @@ public class ExportController { String requestId = UUID.randomUUID().toString(); long expireTime = 5000; dto.setLang(lang);// 设置语言参数 - - // 解析语言代码 - String languageCode = parseLanguageCode(lang); - - // 如果非中文环境,将查询条件中的翻译文本转换为中文简体 - if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { - convertFundsTranslatedFieldsToChinese(dto.getFundsDTO(), languageCode); - } - try { // 尝试获取锁 if (!redisLockUtil.tryLock(lockKey, requestId, expireTime)) { - String errorMsg = languageTranslationUtil.translate("操作太频繁,请稍后重试", lang); - throw new BusinessException(errorMsg); + throw new BusinessException("操作太频繁,请稍后重试"); } // 执行业务逻辑 return exportService.addExportFundDTO(dto); @@ -428,417 +306,25 @@ public class ExportController { } } - - /** - * 解析语言代码 - */ - 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); - } - } - } - - /** - * 将直播查询条件中的翻译字段转换为中文简体 - */ - private void convertLiveTranslatedFieldsToChinese(BeanConsumeLive beanConsumeLive, String languageCode) { - if (beanConsumeLive != null) { - //转换地区 - if (beanConsumeLive.getDept() != null && !beanConsumeLive.getDept().isEmpty()) { - String chineseDept = translationService.findChineseSimplifiedByTranslation( - beanConsumeLive.getDept(), languageCode); - beanConsumeLive.setDept(chineseDept); - } - - //转换礼物名称 - if (beanConsumeLive.getGift() != null && !beanConsumeLive.getGift().isEmpty()) { - String chineseGift = translationService.findChineseSimplifiedByTranslation( - beanConsumeLive.getGift(), languageCode); - beanConsumeLive.setGift(chineseGift); - } - - //转换直播频道 - if (beanConsumeLive.getLiveChannel() != null && !beanConsumeLive.getLiveChannel().isEmpty()) { - String chineseChannel = translationService.findChineseSimplifiedByTranslation( - beanConsumeLive.getLiveChannel(), languageCode); - beanConsumeLive.setLiveChannel(chineseChannel); - } - - //转换直播名称 - if (beanConsumeLive.getLiveName() != null && !beanConsumeLive.getLiveName().isEmpty()) { - String chineseName = translationService.findChineseSimplifiedByTranslation( - beanConsumeLive.getLiveName(), languageCode); - beanConsumeLive.setLiveName(chineseName); - } - } - } - - /** - * 将粉丝查询条件中的翻译字段转换为中文简体 - */ - private void convertFanTranslatedFieldsToChinese(BeanConsumeFan beanConsumeFan, String languageCode) { - if (beanConsumeFan != null) { - // 转换地区 - if (beanConsumeFan.getDept() != null && !beanConsumeFan.getDept().isEmpty()) { - String chineseDept = translationService.findChineseSimplifiedByTranslation( - beanConsumeFan.getDept(), languageCode); - beanConsumeFan.setDept(chineseDept); - } - - // 转换频道 - if (beanConsumeFan.getChannel() != null && !beanConsumeFan.getChannel().isEmpty()) { - String chineseChannel = translationService.findChineseSimplifiedByTranslation( - beanConsumeFan.getChannel(), languageCode); - beanConsumeFan.setChannel(chineseChannel); - } - - // 转换会员类型 - if (beanConsumeFan.getTypeDesc() != null && !beanConsumeFan.getTypeDesc().isEmpty()) { - String chineseType = translationService.findChineseSimplifiedByTranslation( - beanConsumeFan.getTypeDesc(), languageCode); - beanConsumeFan.setTypeDesc(chineseType); - } - } - } - - /** - * 将文章查询条件中的翻译字段转换为中文简体 - */ - private void convertArticleTranslatedFieldsToChinese(BeanConsumeArticle beanConsumeArticle, String languageCode) { - if (beanConsumeArticle != null) { - // 转换文章名称 - if (beanConsumeArticle.getArticleName() != null && !beanConsumeArticle.getArticleName().isEmpty()) { - String chineseName = translationService.findChineseSimplifiedByTranslation( - beanConsumeArticle.getArticleName(), languageCode); - beanConsumeArticle.setArticleName(chineseName); - } - - // 转换地区 - if (beanConsumeArticle.getDept() != null && !beanConsumeArticle.getDept().isEmpty()) { - String chineseDept = translationService.findChineseSimplifiedByTranslation( - beanConsumeArticle.getDept(), languageCode); - beanConsumeArticle.setDept(chineseDept); - } - - // 转换类型 - if (beanConsumeArticle.getTypeDesc() != null && !beanConsumeArticle.getTypeDesc().isEmpty()) { - String chineseType = translationService.findChineseSimplifiedByTranslation( - beanConsumeArticle.getTypeDesc(), languageCode); - beanConsumeArticle.setTypeDesc(chineseType); - } - } - } - - /** - * 将金豆充值查询条件中的翻译字段转换为中文简体 - */ - private void convertBeanTranslatedFieldsToChinese(BeanSystemRechargeInfo beanSystemRechargeInfo, String languageCode) { - if (beanSystemRechargeInfo != null) { - // 转换市场 - if (beanSystemRechargeInfo.getMarket() != null && !beanSystemRechargeInfo.getMarket().isEmpty()) { - String chineseMarket = translationService.findChineseSimplifiedByTranslation( - beanSystemRechargeInfo.getMarket(), languageCode); - beanSystemRechargeInfo.setMarket(chineseMarket); - } - - // 转换备注 - if (beanSystemRechargeInfo.getRemark() != null && !beanSystemRechargeInfo.getRemark().isEmpty()) { - String chineseRemark = translationService.findChineseSimplifiedByTranslation( - beanSystemRechargeInfo.getRemark(), languageCode); - beanSystemRechargeInfo.setRemark(chineseRemark); - } - } - } - - /** - * 将导出查询条件中的翻译字段转换为中文简体 - */ - private void convertOnlineTranslatedFieldsToChinese(BeanOnlineRechargeInfo beanOnlineRechargeInfo, String languageCode) { - if (beanOnlineRechargeInfo != null) { - // 转换市场 - if (beanOnlineRechargeInfo.getMarket() != null && !beanOnlineRechargeInfo.getMarket().isEmpty()) { - String chineseMarket = translationService.findChineseSimplifiedByTranslation( - beanOnlineRechargeInfo.getMarket(), languageCode); - beanOnlineRechargeInfo.setMarket(chineseMarket); - } - - // 转换充值平台 - if (beanOnlineRechargeInfo.getPlatformDesc() != null && !beanOnlineRechargeInfo.getPlatformDesc().isEmpty()) { - String chinesePlatform = translationService.findChineseSimplifiedByTranslation( - beanOnlineRechargeInfo.getPlatformDesc(), languageCode); - beanOnlineRechargeInfo.setPlatformDesc(chinesePlatform); - } - } - } - /** - * 将负责人导出查询条件中的翻译字段转换为中文简体 + * 用户钱包明细导出 */ - private void convertFinanceTranslatedFieldsToChinese(CashRecordDTO cashRecordDTO, String languageCode) { - if (cashRecordDTO != null) { - // 转换商品名称 - if (cashRecordDTO.getGoodsName() != null && !cashRecordDTO.getGoodsName().isEmpty()) { - String chineseGoodsName = translationService.findChineseSimplifiedByTranslation( - cashRecordDTO.getGoodsName(), languageCode); - cashRecordDTO.setGoodsName(chineseGoodsName); - } - - // 转换备注 - if (cashRecordDTO.getRemark() != null && !cashRecordDTO.getRemark().isEmpty()) { - String chineseRemark = translationService.findChineseSimplifiedByTranslation( - cashRecordDTO.getRemark(), languageCode); - cashRecordDTO.setRemark(chineseRemark); - } - - // 转换退款理由 - if (cashRecordDTO.getRefundReason() != null && !cashRecordDTO.getRefundReason().isEmpty()) { - String chineseRefundReason = translationService.findChineseSimplifiedByTranslation( - cashRecordDTO.getRefundReason(), languageCode); - cashRecordDTO.setRefundReason(chineseRefundReason); - } - - // 转换驳回理由 - if (cashRecordDTO.getRejectReason() != null && !cashRecordDTO.getRejectReason().isEmpty()) { - String chineseRejectReason = translationService.findChineseSimplifiedByTranslation( - cashRecordDTO.getRejectReason(), languageCode); - cashRecordDTO.setRejectReason(chineseRejectReason); - } - } - } - - /** - * 将现金导出查询条件中的翻译字段转换为中文简体 - */ - private void convertCashTranslatedFieldsToChinese(CashCollection cashCollection, String languageCode) { - if (cashCollection != null) { - // 转换地区 - if (cashCollection.getMarket() != null && !cashCollection.getMarket().isEmpty()) { - String chineseMarket = translationService.findChineseSimplifiedByTranslation( - cashCollection.getMarket(), languageCode); - cashCollection.setMarket(chineseMarket); - } - - // 转换活动名称 - if (cashCollection.getActivity() != null && !cashCollection.getActivity().isEmpty()) { - String chineseActivity = translationService.findChineseSimplifiedByTranslation( - cashCollection.getActivity(), languageCode); - cashCollection.setActivity(chineseActivity); - } - - // 转换商品名称 - if (cashCollection.getGoodsName() != null && !cashCollection.getGoodsName().isEmpty()) { - String chineseGoodsName = translationService.findChineseSimplifiedByTranslation( - cashCollection.getGoodsName(), languageCode); - cashCollection.setGoodsName(chineseGoodsName); - } - - // 转换单位 - if (cashCollection.getNumUnit() != null && !cashCollection.getNumUnit().isEmpty()) { - String chineseNumUnit = translationService.findChineseSimplifiedByTranslation( - cashCollection.getNumUnit(), languageCode); - cashCollection.setNumUnit(chineseNumUnit); - } - - // 转换支付方式 - if (cashCollection.getPayType() != null && !cashCollection.getPayType().isEmpty()) { - String chinesePayType = translationService.findChineseSimplifiedByTranslation( - cashCollection.getPayType(), languageCode); - cashCollection.setPayType(chinesePayType); - } - - // 转换到账地区 - if (cashCollection.getReceivedMarket() != null && !cashCollection.getReceivedMarket().isEmpty()) { - String chineseReceivedMarket = translationService.findChineseSimplifiedByTranslation( - cashCollection.getReceivedMarket(), languageCode); - cashCollection.setReceivedMarket(chineseReceivedMarket); - } - - // 转换币种 - if (cashCollection.getPaymentCurrency() != null && !cashCollection.getPaymentCurrency().isEmpty()) { - String chineseCurrency = translationService.findChineseSimplifiedByTranslation( - cashCollection.getPaymentCurrency(), languageCode); - cashCollection.setPaymentCurrency(chineseCurrency); - } - - // 转换币种 - if (cashCollection.getReceivedCurrency() != null && !cashCollection.getReceivedCurrency().isEmpty()) { - String chineseCurrency = translationService.findChineseSimplifiedByTranslation( - cashCollection.getReceivedCurrency(), languageCode); - cashCollection.setReceivedCurrency(chineseCurrency); - } - - // 转换备注 - if (cashCollection.getRemark() != null && !cashCollection.getRemark().isEmpty()) { - String chineseRemark = translationService.findChineseSimplifiedByTranslation( - cashCollection.getRemark(), languageCode); - cashCollection.setRemark(chineseRemark); - } - - // 转换拒绝理由 - if (cashCollection.getRejectReason() != null && !cashCollection.getRejectReason().isEmpty()) { - String chineseRejectReason = translationService.findChineseSimplifiedByTranslation( - cashCollection.getRejectReason(), languageCode); - cashCollection.setRejectReason(chineseRejectReason); - } - - // 转换提交人地区 - if (cashCollection.getSubmitterMarket() != null && !cashCollection.getSubmitterMarket().isEmpty()) { - String chineseMarket = translationService.findChineseSimplifiedByTranslation( - cashCollection.getSubmitterMarket(), languageCode); - cashCollection.setSubmitterMarket(chineseMarket); - } - } - } - - /** - * 将业绩归属条件中的翻译字段转换为中文简体 - */ - private void convertPerformanceTranslatedFieldsToChinese(PerformanceVO performanceVO, String languageCode) { - if (performanceVO != null) { - // 翻译地区 - if (performanceVO.getMarketName() != null && !performanceVO.getMarketName().isEmpty()) { - String chineseMarketName = translationService.findChineseSimplifiedByTranslation( - performanceVO.getMarketName(), languageCode); - performanceVO.setMarketName(chineseMarketName); - } - // 翻译付款币种 - if (performanceVO.getPaymentCurrency() != null && !performanceVO.getPaymentCurrency().isEmpty()) { - String chinesePaymentCurrency = translationService.findChineseSimplifiedByTranslation( - performanceVO.getPaymentCurrency(), languageCode); - performanceVO.setPaymentCurrency(chinesePaymentCurrency); - } - // 翻译到账币种 - if (performanceVO.getReceivedCurrency() != null && !performanceVO.getReceivedCurrency().isEmpty()) { - String chineseReceivedCurrency = translationService.findChineseSimplifiedByTranslation( - performanceVO.getReceivedCurrency(), languageCode); - performanceVO.setReceivedCurrency(chineseReceivedCurrency); + @PostMapping("/exportUserWallet") + public Result exportUserWallet(@Valid @RequestBody UserWalletDTO dto, @RequestHeader(defaultValue = "zh_CN") String lang) { + String lockKey = "export:lock:" + dto.getToken(); + String requestId = UUID.randomUUID().toString(); + long expireTime = 5000; + dto.setLang(lang);// 设置语言参数 + try { + // 尝试获取锁 + if (!redisLockUtil.tryLock(lockKey, requestId, expireTime)) { + throw new BusinessException("操作太频繁,请稍后重试"); } + // 执行业务逻辑 + return exportService.addExportUserWallet(dto); + } finally { + // 释放锁 + redisLockUtil.unlock(lockKey, requestId); } } - /** - * 将资金流水账中的翻译字段转换为中文简体 - */ - private void convertFundsTranslatedFieldsToChinese(FundsDTO fundsDTO, String languageCode) { - if (fundsDTO != null) { - // 翻译地区 - if (fundsDTO.getMarketName() != null && !fundsDTO.getMarketName().isEmpty()) { - String chineseMarketName = translationService.findChineseSimplifiedByTranslation( - fundsDTO.getMarketName(), languageCode); - fundsDTO.setMarketName(chineseMarketName); - } - // 翻译付款币种 - if (fundsDTO.getPaymentCurrencyName() != null && !fundsDTO.getPaymentCurrencyName().isEmpty()) { - String chinesePaymentCurrency = translationService.findChineseSimplifiedByTranslation( - fundsDTO.getPaymentCurrencyName(), languageCode); - fundsDTO.setPaymentCurrencyName(chinesePaymentCurrency); - } - // 翻译到账币种 - if (fundsDTO.getReceivedCurrencyName() != null && !fundsDTO.getReceivedCurrencyName().isEmpty()) { - String chineseReceivedCurrency = translationService.findChineseSimplifiedByTranslation( - fundsDTO.getReceivedCurrencyName(), languageCode); - fundsDTO.setReceivedCurrencyName(chineseReceivedCurrency); - } - } - } -} +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/domain/DTO/UserWalletDTO.java b/src/main/java/com/example/demo/domain/DTO/UserWalletDTO.java new file mode 100644 index 0000000..84166a9 --- /dev/null +++ b/src/main/java/com/example/demo/domain/DTO/UserWalletDTO.java @@ -0,0 +1,30 @@ +package com.example.demo.domain.DTO; + +import com.example.demo.domain.entity.UserWalletRecord; +import com.example.demo.domain.vo.cash.UserWalletRecordVO; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +// 用户钱包明细导出 +@Data +public class UserWalletDTO { + private String token; + private String url = ""; + private String fileName = ""; + private Integer sort = 0; + private String field = ""; + private Integer account; + private Integer type = 16; //类型 + private Integer state = 0; //状态 + private String text = ""; //关键词搜索 + private Integer dataNum = 0; + private String deptid = ""; + private String lang; + + private UserWalletRecordVO userWalletRecordVO; + private UserWalletRecord userWalletRecord; + @NotNull(message = "page不能为空") + private Integer page = 1; + @NotNull(message = "pageSize不能为空") + private Integer pageSize = 20; +} diff --git a/src/main/java/com/example/demo/domain/vo/cash/CashCollection.java b/src/main/java/com/example/demo/domain/vo/cash/CashCollection.java index 3f3ca1c..aeeb220 100644 --- a/src/main/java/com/example/demo/domain/vo/cash/CashCollection.java +++ b/src/main/java/com/example/demo/domain/vo/cash/CashCollection.java @@ -47,6 +47,7 @@ public class CashCollection implements Serializable { private String numUnit; //数量单位 个/月/年 private Integer permanentGold; // 永久金币数量 private Integer freeGold; // 免费金币数量 + @ExcelIgnore private Integer walletId; // 钱包 ID private String paymentCurrency; // 付款币种 private BigDecimal paymentAmount; // 付款金额 diff --git a/src/main/java/com/example/demo/domain/vo/cash/UserWalletRecordVO.java b/src/main/java/com/example/demo/domain/vo/cash/UserWalletRecordVO.java index 5fde2e1..b474db5 100644 --- a/src/main/java/com/example/demo/domain/vo/cash/UserWalletRecordVO.java +++ b/src/main/java/com/example/demo/domain/vo/cash/UserWalletRecordVO.java @@ -1,5 +1,7 @@ package com.example.demo.domain.vo.cash; +import com.alibaba.excel.annotation.ExcelIgnore; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -11,19 +13,25 @@ import java.util.Date; @NoArgsConstructor @AllArgsConstructor public class UserWalletRecordVO { + @ExcelIgnore private Integer id; // 明细 ID private Integer jwcode; // 精网号 private String userName; // 用户名 + @ExcelIgnore private String market; // 地区 ID private String marketName; // 地区名称 + @ExcelIgnore private Integer walletId; // 钱包 ID private String walletName; // 钱包名称 + @ExcelIgnore private Integer type; // 交易类型(0=充值,1=消耗,2=退款) + private String typeText; // 交易类型文本(多语言) private Integer amount; // 交易金额 private String orderCode; // 交易单号 private String description; // 交易说明 + @ExcelIgnore private Integer status; // 状态(0=正常,1=已退款) - private Date createTime; // 创建时间 - private String typeText; // 交易类型文本(多语言) private String statusText; // 状态文本(多语言) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date createTime; // 创建时间 } diff --git a/src/main/java/com/example/demo/domain/vo/coin/Page.java b/src/main/java/com/example/demo/domain/vo/coin/Page.java index 117dfd3..beb9597 100644 --- a/src/main/java/com/example/demo/domain/vo/coin/Page.java +++ b/src/main/java/com/example/demo/domain/vo/coin/Page.java @@ -2,6 +2,7 @@ package com.example.demo.domain.vo.coin; import com.example.demo.domain.DTO.BeanConsumeCartDTO; import com.example.demo.domain.DTO.PerformanceDTO; +import com.example.demo.domain.DTO.UserWalletDTO; import com.example.demo.domain.entity.User; import com.example.demo.domain.entity.UserWalletRecord; import com.example.demo.domain.vo.bean.*; @@ -57,5 +58,6 @@ public class Page { private PerformanceDTO performanceDTO;//业绩归属 private FundsDTO fundsDTO;//现金收款 private PerformanceVO performanceVO;//业绩归属 + private UserWalletDTO userWalletDTO; //用户钱包明细查询条件 private UserWalletRecord userWalletRecord; //用户钱包明细查询条件 } diff --git a/src/main/java/com/example/demo/service/coin/ExportExcelService.java b/src/main/java/com/example/demo/service/coin/ExportExcelService.java index 7bff0f2..b09081a 100644 --- a/src/main/java/com/example/demo/service/coin/ExportExcelService.java +++ b/src/main/java/com/example/demo/service/coin/ExportExcelService.java @@ -27,6 +27,7 @@ public interface ExportExcelService { Exception FanExcel(String message) throws Exception; Exception ArticleExcel(String message) throws Exception; Exception PerformanceExcel(String message) throws Exception; + Exception UserWalletRecordExcel(String message) throws Exception; List getExcel(Export export); Exception BeanExcel(String message) throws Exception; diff --git a/src/main/java/com/example/demo/service/listen/UserWalletRecordListener.java b/src/main/java/com/example/demo/service/listen/UserWalletRecordListener.java new file mode 100644 index 0000000..4479373 --- /dev/null +++ b/src/main/java/com/example/demo/service/listen/UserWalletRecordListener.java @@ -0,0 +1,27 @@ +package com.example.demo.service.listen; + +import com.example.demo.Util.RedisUtil; +import com.example.demo.service.coin.ExportExcelService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class UserWalletRecordListener extends BaseMessageListener{ + @Autowired + private ExportExcelService exportExcelService; + + protected UserWalletRecordListener(RedisUtil redisQueueUtil) { + super(redisQueueUtil,"user_wallet_record:queue:export_queue"); + } + + @Override + protected void handleMessage(String message) { + validateMessage( message); + try { + Thread.sleep(5000); + exportExcelService.UserWalletRecordExcel(message); + } catch (Exception e) { + handleException(e, message); + } + } +} diff --git a/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java index 0c926aa..b05ce99 100644 --- a/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java @@ -17,15 +17,13 @@ import com.example.demo.controller.coin.GoldDetailController; import com.example.demo.controller.coin.RechargeController; import com.example.demo.controller.coin.RefundController; import com.example.demo.domain.DTO.PerformanceDTO; +import com.example.demo.domain.DTO.UserWalletDTO; import com.example.demo.domain.entity.Admin; import com.example.demo.domain.entity.Export; import com.example.demo.domain.entity.User; import com.example.demo.domain.vo.bean.*; -import com.example.demo.domain.vo.cash.CashCollection; -import com.example.demo.domain.vo.cash.CashRecordDTO; -import com.example.demo.domain.vo.cash.FundsDTO; -import com.example.demo.domain.vo.cash.PerformanceVO; +import com.example.demo.domain.vo.cash.*; import com.example.demo.domain.vo.coin.*; import com.example.demo.mapper.coin.ExportMapper; @@ -499,6 +497,36 @@ public class ExportExcelServiceImpl implements ExportExcelService { }); } + @Transactional + @Override + public Exception UserWalletRecordExcel(String message) throws Exception { + return exportExcelGeneric(message, "userWalletRecord", page -> { + try { + JsonNode rootNode = objectMapper.readTree(message); + JsonNode requestDataNode = rootNode.path("requestData"); + JsonNode userWalletRecordVONode = requestDataNode.path("userWalletRecordVO"); + com.example.demo.domain.vo.cash.UserWalletRecordVO userWalletRecordVO = + objectMapper.treeToValue(userWalletRecordVONode, com.example.demo.domain.vo.cash.UserWalletRecordVO.class); + com.example.demo.domain.entity.UserWalletRecord userWalletRecord = new com.example.demo.domain.entity.UserWalletRecord(); + if (userWalletRecordVO != null) { + userWalletRecord.setJwcode(userWalletRecordVO.getJwcode()); + userWalletRecord.setWalletId(userWalletRecordVO.getWalletId()); + } + page.setUserWalletRecord(userWalletRecord); + + // 从请求数据中获取语言设置,如果没有则使用默认值 + String lang = "zh_CN"; + JsonNode langNode = rootNode.path("lang"); + if (langNode != null && !langNode.asText().isEmpty()) { + lang = langNode.asText(); + } + return cashCollectionController.selectWalletRecords(page, lang); + } catch (Exception e) { + throw new RuntimeException(e); + } + }); + } + @Override public List getExcel(Export export) { List list = exportMapper.getExportRecord(export.getAccount(),export.getType()); @@ -849,6 +877,26 @@ public class ExportExcelServiceImpl implements ExportExcelService { .head(head) .build(); } + // 如果是钱包明细表,添加动态表头处理器 + else if ("userWalletRecord".equals(exportType)) { + Map headers = excelHeaderTranslator.getUserWalletHeaders(lang); + List columnOrder = excelHeaderTranslator.getUserWalletColumnOrder(); + + // 构建自定义表头 + List> head = new ArrayList<>(); + for (String fieldName : columnOrder) { + String headerText = headers.get(fieldName); + if (headerText != null) { + List headItems = new ArrayList<>(); + headItems.add(headerText); + head.add(headItems); + } + } + + writeSheet = EasyExcel.writerSheet("Sheet1") + .head(head) + .build(); + } else { writeSheet = EasyExcel.writerSheet("Sheet1").build(); } @@ -964,6 +1012,11 @@ public class ExportExcelServiceImpl implements ExportExcelService { translateFundsList((List) list, lang); } + // 添加钱包明细翻译支持 + if ("userWalletRecord".equals(exportType) && list.get(0) instanceof UserWalletRecordVO) { + translateUserWalletRecordList((List) list, lang); + } + excelWriter.write(list, writeSheet); page.setPageNum(page.getPageNum() + 1); totalCount += list.size(); @@ -1116,6 +1169,8 @@ public class ExportExcelServiceImpl implements ExportExcelService { return PerformanceVO.class; case "fundUser": return FundsDTO.class; + case "userWalletRecord": + return UserWalletRecordVO.class; default: throw new IllegalArgumentException("不支持的导出类型: " + exportType); } @@ -1207,6 +1262,10 @@ public class ExportExcelServiceImpl implements ExportExcelService { String modelDesc = convertRefundModelToString(cashRecord.getRefundModel()); cashRecord.setRefundModelDesc(modelDesc); } + if (cashRecord.getStatus() != null) { + String statusDesc = getStatusDescription(cashRecord.getStatus()); + cashRecord.setStatusDesc(statusDesc); + } } } } @@ -1855,4 +1914,34 @@ public class ExportExcelServiceImpl implements ExportExcelService { } } } + /** + * 翻译钱包明细列表 + */ + private void translateUserWalletRecordList(List list, String lang) { + if (list == null || list.isEmpty() || "zh_CN".equalsIgnoreCase(lang) || "zh".equalsIgnoreCase(lang)) { + return; + } + for (UserWalletRecordVO item : list) { + // 翻译所属地区名称 + if (item.getMarketName() != null && !item.getMarketName().isEmpty()) { + item.setMarketName(languageTranslationUtil.translate(item.getMarketName(), lang)); + } + // 翻译钱包名称 + if (item.getWalletName() != null && !item.getWalletName().isEmpty()) { + item.setWalletName(languageTranslationUtil.translate(item.getWalletName(), lang)); + } + // 翻译交易类型 + if (item.getTypeText() != null && !item.getTypeText().isEmpty()) { + item.setTypeText(languageTranslationUtil.translate(item.getTypeText(), lang)); + } + // 翻译状态 + if (item.getStatusText() != null && !item.getStatusText().isEmpty()) { + item.setStatusText(languageTranslationUtil.translate(item.getStatusText(), lang)); + } + // 翻译交易说明 + if (item.getDescription() != null && !item.getDescription().isEmpty()) { + item.setDescription(languageTranslationUtil.translate(item.getDescription(), lang)); + } + } + } }