diff --git a/src/main/java/com/example/demo/controller/coin/AdminController.java b/src/main/java/com/example/demo/controller/coin/AdminController.java index 32ca95c..dd1c326 100644 --- a/src/main/java/com/example/demo/controller/coin/AdminController.java +++ b/src/main/java/com/example/demo/controller/coin/AdminController.java @@ -8,6 +8,7 @@ import com.example.demo.domain.vo.coin.Password; import com.example.demo.domain.vo.coin.Result; import com.example.demo.mapper.coin.AdminMapper; import com.example.demo.service.coin.AdminService; +import com.example.demo.service.coin.TranslationService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -37,6 +38,9 @@ public class AdminController { @Autowired private LanguageTranslationUtil languageTranslationUtil; + @Autowired + private TranslationService translationService; + @PostMapping("/test") public void testGetAdmin() { Admin admin = adminMapper.getAdmin("14518"); @@ -67,8 +71,6 @@ public class AdminController { @PostMapping("/userinfo") public UserDetails getUserInfo(@RequestHeader("token") String token1, @RequestHeader(defaultValue = "zh") String lang) { - - //String token = token1.getToken(); String token = token1; try { @@ -76,6 +78,11 @@ public class AdminController { // 对用户信息进行多语言转换 if (userDetails instanceof Admin) { Admin admin = (Admin) userDetails; + // 如果不是中文环境,先将翻译后的文本转换回中文进行处理 + String languageCode = parseLanguageCode(lang); + if (!"zh".equalsIgnoreCase(languageCode)) { + convertTranslatedFieldsToChinese(admin, languageCode); + } translateAdminInfo(admin, lang); } return userDetails; @@ -84,6 +91,7 @@ public class AdminController { } } + //获取管理员ID @Log("获取用户ID") @PostMapping("/adminId") @@ -157,4 +165,58 @@ public class AdminController { } } } + /** + * 解析语言代码 + */ + 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 convertTranslatedFieldsToChinese(Admin admin, String languageCode) { + if (admin != null) { + // 转换市场权限信息 + if (admin.getMarkets() != null && !admin.getMarkets().isEmpty()) { + String[] markets = admin.getMarkets().split(","); + StringBuilder convertedMarkets = new StringBuilder(); + for (int i = 0; i < markets.length; i++) { + if (i > 0) { + convertedMarkets.append(","); + } + String chineseMarket = translationService.findChineseSimplifiedByTranslation( + markets[i].trim(), languageCode); + convertedMarkets.append(chineseMarket); + } + admin.setMarkets(convertedMarkets.toString()); + } + + // 转换职位信息 + if (admin.getPostiton() != null && !admin.getPostiton().isEmpty()) { + String chinesePosition = translationService.findChineseSimplifiedByTranslation( + admin.getPostiton(), languageCode); + admin.setPostiton(chinesePosition); + } + + // 转换备注 + if (admin.getRemark() != null && !admin.getRemark().isEmpty()) { + String chineseRemark = translationService.findChineseSimplifiedByTranslation( + admin.getRemark(), languageCode); + admin.setRemark(chineseRemark); + } + } + } } diff --git a/src/main/java/com/example/demo/controller/coin/AuditController.java b/src/main/java/com/example/demo/controller/coin/AuditController.java index 058a89d..a923d73 100644 --- a/src/main/java/com/example/demo/controller/coin/AuditController.java +++ b/src/main/java/com/example/demo/controller/coin/AuditController.java @@ -5,6 +5,7 @@ import com.example.demo.Util.LanguageTranslationUtil; import com.example.demo.config.interfac.Log; import com.example.demo.domain.entity.Admin; import com.example.demo.service.coin.AuditService; +import com.example.demo.service.coin.TranslationService; import com.github.pagehelper.PageInfo; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; @@ -42,6 +43,9 @@ public class AuditController { @Autowired private LanguageTranslationUtil languageTranslationUtil; + @Autowired + private TranslationService translationService; + //审核订单 @Log("审核订单") @PostMapping("audit") @@ -60,6 +64,15 @@ public class AuditController { Integer pageNum = page.getPageNum(); Integer pageSize = page.getPageSize(); RechargeAudit rechargeAudit = page.getRechargeAudit(); + + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertRechargeTranslatedFieldsToChinese(rechargeAudit, languageCode); + } + //解token权限 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String token = request.getHeader("token"); @@ -75,6 +88,7 @@ public class AuditController { return pageInfo; } + //多条件查询退款审核订单列表 @Log("查询退款审核订单列表") @PostMapping("selectRefund") @@ -84,6 +98,15 @@ public class AuditController { Integer pageNum = page.getPageNum(); Integer pageSize = page.getPageSize(); RefundAudit refundAudit = page.getRefundAudit(); + + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertRefundTranslatedFieldsToChinese(refundAudit, languageCode); + } + //解token权限 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String token = request.getHeader("token"); @@ -98,6 +121,7 @@ public class AuditController { translateRefundAuditResults(pageInfo, lang); return pageInfo; } + //充值审核合计数 @Log("充值审核合计数") @PostMapping("sumRechargeGold") @@ -208,4 +232,94 @@ public class AuditController { return "未知退款方式"; } } + + /** + * 解析语言代码 + */ + 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(RechargeAudit rechargeAudit, String languageCode) { + if (rechargeAudit != null) { + // 转换市场名称 + if (rechargeAudit.getMarket() != null && !rechargeAudit.getMarket().isEmpty()) { + String chineseMarket = translationService.findChineseSimplifiedByTranslation( + rechargeAudit.getMarket(), languageCode); + rechargeAudit.setMarket(chineseMarket); + } + + // 转换汇率名称 + if (rechargeAudit.getRateName() != null && !rechargeAudit.getRateName().isEmpty()) { + String chineseRateName = translationService.findChineseSimplifiedByTranslation( + rechargeAudit.getRateName(), languageCode); + rechargeAudit.setRateName(chineseRateName); + } + + // 转换支付方式 + if (rechargeAudit.getPayModel() != null && !rechargeAudit.getPayModel().isEmpty()) { + String chinesePayModel = translationService.findChineseSimplifiedByTranslation( + rechargeAudit.getPayModel(), languageCode); + rechargeAudit.setPayModel(chinesePayModel); + } + + // 转换备注 + if (rechargeAudit.getRemark() != null && !rechargeAudit.getRemark().isEmpty()) { + String chineseRemark = translationService.findChineseSimplifiedByTranslation( + rechargeAudit.getRemark(), languageCode); + rechargeAudit.setRemark(chineseRemark); + } + } + } + + /** + * 将退款审核查询条件中的翻译字段转换为中文简体 + */ + private void convertRefundTranslatedFieldsToChinese(RefundAudit refundAudit, String languageCode) { + if (refundAudit != null) { + // 转换市场名称 + if (refundAudit.getMarket() != null && !refundAudit.getMarket().isEmpty()) { + String chineseMarket = translationService.findChineseSimplifiedByTranslation( + refundAudit.getMarket(), languageCode); + refundAudit.setMarket(chineseMarket); + } + + // 转换商品名称 + if (refundAudit.getGoodsName() != null && !refundAudit.getGoodsName().isEmpty()) { + String chineseGoodsName = translationService.findChineseSimplifiedByTranslation( + refundAudit.getGoodsName(), languageCode); + refundAudit.setGoodsName(chineseGoodsName); + } + + // 转换退款类型 + if (refundAudit.getRefundType() != null && !refundAudit.getRefundType().isEmpty()) { + String chineseRefundType = translationService.findChineseSimplifiedByTranslation( + refundAudit.getRefundType(), languageCode); + refundAudit.setRefundType(chineseRefundType); + } + + // 转换备注 + if (refundAudit.getRemark() != null && !refundAudit.getRemark().isEmpty()) { + String chineseRemark = translationService.findChineseSimplifiedByTranslation( + refundAudit.getRemark(), languageCode); + refundAudit.setRemark(chineseRemark); + } + } + } + } \ No newline at end of file diff --git a/src/main/java/com/example/demo/controller/coin/ConsumeController.java b/src/main/java/com/example/demo/controller/coin/ConsumeController.java index ff146d2..4c99aa4 100644 --- a/src/main/java/com/example/demo/controller/coin/ConsumeController.java +++ b/src/main/java/com/example/demo/controller/coin/ConsumeController.java @@ -9,6 +9,7 @@ import com.example.demo.domain.vo.coin.Gold; import com.example.demo.domain.vo.coin.Page; import com.example.demo.domain.vo.coin.Result; import com.example.demo.service.coin.ConsumeService; +import com.example.demo.service.coin.TranslationService; import com.github.pagehelper.PageInfo; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; @@ -46,6 +47,9 @@ public class ConsumeController { @Autowired private LanguageTranslationUtil languageTranslationUtil; + @Autowired + private TranslationService translationService; + //消耗明细 @Log("查看所有消耗明细") @PostMapping("/selectAll") @@ -74,14 +78,12 @@ public class ConsumeController { } } catch (Exception e) { e.printStackTrace(); - return Result.error(e.getMessage()); + return Result.error("请检查筛选数据的格式"); } } - - //消耗明细筛选 @Log("筛选查询消耗明细") @PostMapping("/selectBy") public Result selectBy(@RequestBody Page page, @RequestHeader(defaultValue = "zh_CN") String lang) { @@ -94,6 +96,14 @@ public class ConsumeController { if (ObjectUtils.isEmpty(page.getPageSize())) { return Result.error("页大小为空!"); } else { + // 解析语言参数,提取语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文,则尝试将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertTranslatedFieldsToChinese(page.getConsumeUser(), languageCode); + } + //解token权限 if(page.getConsumeUser().getMarkets()==null||page.getConsumeUser().getMarkets().isEmpty()) { HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); @@ -117,11 +127,11 @@ public class ConsumeController { } } catch (Exception e) { e.printStackTrace(); - return Result.error(e.getMessage()); + return Result.error("请检查筛选数据的格式"); } - } + //消耗金币统计 @Log("消耗金币合计数统计") @PostMapping("/statsGold") @@ -143,16 +153,34 @@ public class ConsumeController { return Result.success(gold); } catch (Exception e) { e.printStackTrace(); - return Result.error(e.getMessage()); + return Result.error("请检查数据的格式"); } } //消耗金币增加 @Log("新增金币消耗") @PostMapping("/add") - public Result add(@RequestBody ConsumeUser consumeUser) { + public Result add(@RequestBody ConsumeUser consumeUser, @RequestHeader(defaultValue = "zh_CN") String lang) { try { - return consumeService.add(consumeUser); + // 解析语言参数,提取语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文,则尝试将输入的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertTranslatedFieldsToChinese(consumeUser, languageCode); + } + + Result result = consumeService.add(consumeUser); + + // 如果操作成功,对返回消息进行多语言转换 + if (result.getCode() == 200) { + String translatedMsg = languageTranslationUtil.translate("添加成功", lang); + return Result.success(translatedMsg); + } else { + // 对错误消息进行多语言转换 + String translatedErrorMsg = languageTranslationUtil.translate(result.getMsg(), lang); + return Result.error(translatedErrorMsg); + } // if(consumeUser.getJwcode().equals(94226013)) // { // return consumeService.add(consumeUser); @@ -162,7 +190,8 @@ public class ConsumeController { // } catch (Exception e) { e.printStackTrace(); - return Result.error(e.getMessage()); + String translatedErrorMsg = languageTranslationUtil.translate("请查看后端报错信息", lang); + return Result.error(translatedErrorMsg); } } @@ -200,7 +229,7 @@ public class ConsumeController { } } catch (Exception e) { e.printStackTrace(); - return Result.error(e.getMessage()); + return Result.error("请检查筛选数据的格式"); } } @@ -219,10 +248,10 @@ public class ConsumeController { if (user.getGoodsName() != null) { user.setGoodsName(languageTranslationUtil.translate(user.getGoodsName(), lang)); } - // 翻译支付平台 - if (user.getPayPlatform() != null) { - user.setPayPlatform(languageTranslationUtil.translate(user.getPayPlatform(), lang)); - } +// // 翻译支付平台 +// if (user.getPayPlatform() != null) { +// user.setPayPlatform(languageTranslationUtil.translate(user.getPayPlatform(), lang)); +// } // 翻译退款状态 if (user.getIsRefund() != null) { if (user.getIsRefund() == 1) { @@ -234,5 +263,51 @@ public class ConsumeController { } } } + /** + * 解析语言代码 + */ + private String parseLanguageCode(String langHeader) { + if (langHeader == null || langHeader.isEmpty()) { + return "zh_CN"; + } + // 处理类似 "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 convertTranslatedFieldsToChinese(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); + } + +// // 转换支付平台 +// if (consumeUser.getPayPlatform() != null && !consumeUser.getPayPlatform().isEmpty()) { +// String chinesePlatform = translationService.findChineseSimplifiedByTranslation( +// consumeUser.getPayPlatform(), languageCode); +// consumeUser.setPayPlatform(chinesePlatform); +// } + } + } } diff --git a/src/main/java/com/example/demo/controller/coin/GeneralController.java b/src/main/java/com/example/demo/controller/coin/GeneralController.java index fc765b0..cb2fbc3 100644 --- a/src/main/java/com/example/demo/controller/coin/GeneralController.java +++ b/src/main/java/com/example/demo/controller/coin/GeneralController.java @@ -7,6 +7,7 @@ import com.example.demo.domain.vo.coin.Result; import com.example.demo.domain.vo.coin.RoleVo; import com.example.demo.service.coin.GeneralService; import com.example.demo.Util.LanguageTranslationUtil; +import com.example.demo.service.coin.TranslationService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -36,6 +37,9 @@ public class GeneralController { @Autowired private LanguageTranslationUtil languageTranslationUtil; + @Autowired + private TranslationService translationService; + // @Log("获取全部地区") @PostMapping("/market") public Result getMarket() @@ -70,8 +74,8 @@ public class GeneralController { public Result getPlatform(@RequestHeader(defaultValue = "zh_CN") String lang) { List list = generalService.getPlatform(); - // 对平台名称进行多语言转换 - translatePlatformNames(list, lang); +// // 对平台名称进行多语言转换 +// translatePlatformNames(list, lang); return Result.success(list); } //获取商品名称 @@ -79,7 +83,16 @@ public class GeneralController { @PostMapping("/goods") public Result getGoods(@RequestHeader(defaultValue = "zh_CN") String lang) { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + List list = generalService.getGoods(); + + // 如果不是中文环境,先将翻译后的商品名称转换为中文简体进行处理 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertTranslatedGoodsNamesToChinese(list, languageCode); + } + // 对商品名称进行多语言转换 translateGoodsNames(list, lang); return Result.success(list); @@ -98,12 +111,22 @@ public class GeneralController { @PostMapping("/getRate") public Result getRate(@RequestHeader(defaultValue = "zh_CN") String lang) { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + List rates = generalService.getRate(); + + // 如果不是中文环境,先将翻译后的汇率名称转换为中文简体进行处理 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertTranslatedRateNamesToChinese(rates, languageCode); + } + // 对汇率名称进行多语言转换 translateRateNames(rates, lang); return Result.success(rates); } + //手动同步link商品表 @PostMapping("/syncLinkProducts") public void syncLinkProducts(){ @@ -122,17 +145,17 @@ public class GeneralController { } } - /** - * 转换平台名称为指定语言 - */ - private void translatePlatformNames(List platformNames, String lang) { - if (platformNames != null && !platformNames.isEmpty()) { - for (int i = 0; i < platformNames.size(); i++) { - String translatedName = languageTranslationUtil.translate(platformNames.get(i), lang); - platformNames.set(i, translatedName); - } - } - } +// /** +// * 转换平台名称为指定语言 +// */ +// private void translatePlatformNames(List platformNames, String lang) { +// if (platformNames != null && !platformNames.isEmpty()) { +// for (int i = 0; i < platformNames.size(); i++) { +// String translatedName = languageTranslationUtil.translate(platformNames.get(i), lang); +// platformNames.set(i, translatedName); +// } +// } +// } // /** // * 转换活动名称为指定语言 @@ -159,4 +182,51 @@ public class GeneralController { } } } + /** + * 解析语言代码 + */ + 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 convertTranslatedGoodsNamesToChinese(List goodsNames, String languageCode) { + if (goodsNames != null && !goodsNames.isEmpty()) { + for (int i = 0; i < goodsNames.size(); i++) { + String chineseName = translationService.findChineseSimplifiedByTranslation( + goodsNames.get(i), languageCode); + goodsNames.set(i, chineseName); + } + } + } + + /** + * 将翻译后的汇率名称转换为中文简体 + */ + private void convertTranslatedRateNamesToChinese(List rates, String languageCode) { + if (rates != null && !rates.isEmpty()) { + for (Rate rate : rates) { + if (rate.getRateName() != null && !rate.getRateName().isEmpty()) { + String chineseName = translationService.findChineseSimplifiedByTranslation( + rate.getRateName(), languageCode); + rate.setRateName(chineseName); + } + } + } + } + } diff --git a/src/main/java/com/example/demo/controller/coin/GoldDetailController.java b/src/main/java/com/example/demo/controller/coin/GoldDetailController.java index a259751..5a597fc 100644 --- a/src/main/java/com/example/demo/controller/coin/GoldDetailController.java +++ b/src/main/java/com/example/demo/controller/coin/GoldDetailController.java @@ -15,6 +15,7 @@ import com.example.demo.domain.vo.coin.Page; import com.example.demo.domain.vo.coin.Result; import com.example.demo.service.coin.GoldDetailService; import com.example.demo.service.coin.MarketService; +import com.example.demo.service.coin.TranslationService; import com.example.demo.serviceImpl.coin.AiEmotionServiceImpl; import com.github.pagehelper.PageInfo; import jakarta.servlet.http.HttpServletRequest; @@ -60,21 +61,30 @@ public class GoldDetailController { private AiEmotionServiceImpl aiEmotionServiceImpl; @Autowired MarketService marketService; - + @Autowired + private TranslationService translationService; @Log("获取金币明细") @PostMapping("/getGoldDetail") public Result getGoldDetail(@RequestBody Page page, @RequestHeader(defaultValue = "zh_CN") String lang) throws Exception { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertGoldDetailTranslatedFieldsToChinese(page.getGoldDetail(), languageCode); + } + // 获取当前请求对象 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String token = request.getHeader("token"); -// 解析 token 获取用户信息 + // 解析 token 获取用户信息 Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class); List userMarkets = Arrays.asList(StringUtils.split(admin.getMarkets(), ",")); List markets = marketService.getMarketIds(userMarkets); -// 校验分页参数 + // 校验分页参数 if (ObjectUtils.isEmpty(page.getPageNum())) { return Result.error("页码数为空!"); } @@ -82,10 +92,10 @@ public class GoldDetailController { return Result.error("页大小为空!"); } -// 获取传入的市场列表 + // 获取传入的市场列表 List requestedMarkets = page.getGoldDetail() != null ? page.getGoldDetail().getMarkets() : null; -// 权限校验逻辑 + // 权限校验逻辑 if (markets.contains("9") || markets.contains("9999")) { // 特权市场:9 或 9999,跳过权限校验,直接放行传入的 markets // 如果业务需要,也可以在这里做空值处理 @@ -104,7 +114,7 @@ public class GoldDetailController { // 校验通过,保持 requestedMarkets 不变 } -// 返回详情数据 + // 返回详情数据 Result result = Result.success(goldDetailService.getGoldDetail( page.getPageNum(), page.getPageSize(), @@ -120,6 +130,7 @@ public class GoldDetailController { return result; } + @Log("客户金币明细金币合计数统计") @PostMapping("/getTotal") public Result getTotal(@RequestBody Page page) throws Exception { @@ -198,6 +209,14 @@ public class GoldDetailController { @Log("获取客户金币余额记录") @PostMapping("/getGold") public Result getGold(@RequestBody Page page, @RequestHeader(defaultValue = "zh_CN") String lang) throws Exception { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertUserTranslatedFieldsToChinese(page.getUser(), languageCode); + } + // 获取当前请求对象 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String token = request.getHeader("token"); @@ -248,6 +267,7 @@ public class GoldDetailController { return result; } + @PostMapping("/export") public Result export(@Valid @RequestBody GoldDetailDTO dto) { String lockKey = "export:lock:" + dto.getToken(); // 锁的 Key(可按用户/业务区分) @@ -326,10 +346,10 @@ public class GoldDetailController { if (detail.getMarket() != null) { detail.setMarket(languageTranslationUtil.translate(detail.getMarket(), lang)); } - // 翻译支付平台("平台信息") - if (detail.getPayPlatform() != null) { - detail.setPayPlatform(languageTranslationUtil.translate(detail.getPayPlatform(), lang)); - } +// // 翻译支付平台("平台信息") +// if (detail.getPayPlatform() != null) { +// detail.setPayPlatform(languageTranslationUtil.translate(detail.getPayPlatform(), lang)); +// } // 翻译类型("更新类型") - 需要根据type的值进行转换 if (detail.getType() != null) { String typeDesc = convertTypeToString(detail.getType()); @@ -368,5 +388,64 @@ public class GoldDetailController { } } } + /** + * 解析语言代码 + */ + 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 convertGoldDetailTranslatedFieldsToChinese(GoldDetail goldDetail, String languageCode) { + if (goldDetail != null) { + // 转换市场名称 + if (goldDetail.getMarket() != null && !goldDetail.getMarket().isEmpty()) { + String chineseMarket = translationService.findChineseSimplifiedByTranslation( + goldDetail.getMarket(), languageCode); + goldDetail.setMarket(chineseMarket); + } + + // 转换商品名称 + if (goldDetail.getGoodsName() != null && !goldDetail.getGoodsName().isEmpty()) { + String chineseGoodsName = translationService.findChineseSimplifiedByTranslation( + goldDetail.getGoodsName(), languageCode); + goldDetail.setGoodsName(chineseGoodsName); + } + // 转换支付平台 + if (goldDetail.getPayPlatform() != null && !goldDetail.getPayPlatform().isEmpty()) { + String chinesePayPlatform = translationService.findChineseSimplifiedByTranslation( + goldDetail.getPayPlatform(), languageCode); + goldDetail.setPayPlatform(chinesePayPlatform); + } + } + } + + /** + * 将用户查询条件中的翻译字段转换为中文简体 + */ + private void convertUserTranslatedFieldsToChinese(User user, String languageCode) { + if (user != null) { + // 转换市场名称 + if (user.getMarket() != null && !user.getMarket().isEmpty()) { + String chineseMarket = translationService.findChineseSimplifiedByTranslation( + user.getMarket(), languageCode); + user.setMarket(chineseMarket); + } + } + } } diff --git a/src/main/java/com/example/demo/controller/coin/MarketController.java b/src/main/java/com/example/demo/controller/coin/MarketController.java index 127f19d..c060c0c 100644 --- a/src/main/java/com/example/demo/controller/coin/MarketController.java +++ b/src/main/java/com/example/demo/controller/coin/MarketController.java @@ -5,6 +5,7 @@ import com.example.demo.domain.entity.Market; import com.example.demo.domain.vo.coin.Result; import com.example.demo.service.coin.MarketService; import com.example.demo.Util.LanguageTranslationUtil; +import com.example.demo.service.coin.TranslationService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -24,12 +25,22 @@ public class MarketController { // 注入多语言转换工具类 @Autowired private LanguageTranslationUtil languageTranslationUtil; - + @Autowired + private TranslationService translationService; // @Log("获取市场") @RequestMapping("/selectMarket") public Result selectMarket(@RequestHeader(defaultValue = "zh_CN") String lang) { try { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + List markets = marketService.selectMarket(); + + // 如果不是中文环境,先将翻译后的市场名称转换为中文简体进行处理 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertTranslatedMarketNamesToChinese(markets, languageCode); + } + // 对市场名称进行多语言转换 translateMarketNames(markets, lang); return Result.success(markets); @@ -39,6 +50,7 @@ public class MarketController { } } + /** * 递归转换市场名称为指定语言 */ @@ -56,4 +68,43 @@ public class MarketController { } } } + /** + * 解析语言代码 + */ + 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 convertTranslatedMarketNamesToChinese(List markets, String languageCode) { + if (markets != null) { + for (Market market : markets) { + if (market.getName() != null && !market.getName().isEmpty()) { + String chineseName = translationService.findChineseSimplifiedByTranslation( + market.getName(), languageCode); + market.setName(chineseName); + } + + // 递归处理子市场 + if (market.getChildren() != null && !market.getChildren().isEmpty()) { + convertTranslatedMarketNamesToChinese(market.getChildren(), languageCode); + } + } + } + } + } \ No newline at end of file diff --git a/src/main/java/com/example/demo/controller/coin/MenuController.java b/src/main/java/com/example/demo/controller/coin/MenuController.java index bd7d186..34d0105 100644 --- a/src/main/java/com/example/demo/controller/coin/MenuController.java +++ b/src/main/java/com/example/demo/controller/coin/MenuController.java @@ -6,6 +6,7 @@ import com.example.demo.domain.vo.coin.Result; import com.example.demo.domain.vo.coin.RoleVo; import com.example.demo.service.coin.MenuService; import com.example.demo.Util.LanguageTranslationUtil; +import com.example.demo.service.coin.TranslationService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -35,17 +36,28 @@ public class MenuController { // 注入多语言转换工具类 @Autowired private LanguageTranslationUtil languageTranslationUtil; - + @Autowired + private TranslationService translationService; //获取权限树 // @Log("获取权限树") @PostMapping("/tree") public Result getPermissionTree(@RequestBody RoleVo roleVo, @RequestHeader(defaultValue = "zh_CN") String lang) { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + List permissionTree = menuService.getPermissionTree(roleVo.getId()); + + // 如果不是中文环境,先将翻译后的菜单名称转换为中文简体进行处理 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertTranslatedMenuNamesToChinese(permissionTree, languageCode); + } + // 对菜单名称进行多语言转换 translateMenuNames(permissionTree, lang); return Result.success(permissionTree); } + //新增权限 @Log("新增权限") @PostMapping("/add") @@ -78,4 +90,42 @@ public class MenuController { } } } + /** + * 解析语言代码 + */ + 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 convertTranslatedMenuNamesToChinese(List menus, String languageCode) { + if (menus != null) { + for (MenuVo menu : menus) { + if (menu.getMenuName() != null && !menu.getMenuName().isEmpty()) { + String chineseName = translationService.findChineseSimplifiedByTranslation( + menu.getMenuName(), languageCode); + menu.setMenuName(chineseName); + } + + // 递归处理子菜单 + if (menu.getChildren() != null && !menu.getChildren().isEmpty()) { + convertTranslatedMenuNamesToChinese(menu.getChildren(), languageCode); + } + } + } + } } diff --git a/src/main/java/com/example/demo/controller/coin/RechargeController.java b/src/main/java/com/example/demo/controller/coin/RechargeController.java index bba0c34..4864c0a 100644 --- a/src/main/java/com/example/demo/controller/coin/RechargeController.java +++ b/src/main/java/com/example/demo/controller/coin/RechargeController.java @@ -6,6 +6,7 @@ import com.example.demo.config.interfac.Log; import com.example.demo.domain.entity.Admin; import com.example.demo.domain.vo.coin.*; import com.example.demo.service.coin.RechargeService; +import com.example.demo.service.coin.TranslationService; import com.github.pagehelper.PageInfo; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; @@ -43,7 +44,8 @@ public class RechargeController { // 注入多语言转换工具类 @Autowired private LanguageTranslationUtil languageTranslationUtil; - + @Autowired + private TranslationService translationService; //充值明细 @Log("获取全部充值明细") @PostMapping("/selectAll") @@ -55,6 +57,14 @@ public class RechargeController { if (ObjectUtils.isEmpty(page.getPageSize())) { return Result.error("页大小为空!"); } else { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertRechargeTranslatedFieldsToChinese(page.getRechargeUser(), languageCode); + } + //解token权限 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String token = request.getHeader("token"); @@ -90,6 +100,14 @@ public class RechargeController { if (ObjectUtils.isEmpty(page.getPageSize())) { return Result.error("页大小为空!"); } else { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertRechargeTranslatedFieldsToChinese(page.getRechargeUser(), languageCode); + } + //解token权限 if(page.getRechargeUser().getMarkets()==null||page.getRechargeUser().getMarkets().isEmpty()){ HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); @@ -186,10 +204,10 @@ public class RechargeController { if (user.getPayModel() != null) { user.setPayModel(languageTranslationUtil.translate(user.getPayModel(), lang)); } - // 翻译支付平台 - if (user.getPayPlatform() != null) { - user.setPayPlatform(languageTranslationUtil.translate(user.getPayPlatform(), lang)); - } +// // 翻译支付平台 +// if (user.getPayPlatform() != null) { +// user.setPayPlatform(languageTranslationUtil.translate(user.getPayPlatform(), lang)); +// } // 翻译备注 if (user.getRemark() != null) { user.setRemark(languageTranslationUtil.translate(user.getRemark(), lang)); @@ -197,4 +215,72 @@ public class RechargeController { } } } + /** + * 解析语言代码 + */ + 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.getActivity() != null && !rechargeUser.getActivity().isEmpty()) { + String chineseActivity = translationService.findChineseSimplifiedByTranslation( + rechargeUser.getActivity(), languageCode); + rechargeUser.setActivity(chineseActivity); + } + + // 转换汇率名称 + 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.getPayPlatform() != null && !rechargeUser.getPayPlatform().isEmpty()) { + String chinesePayPlatform = translationService.findChineseSimplifiedByTranslation( + rechargeUser.getPayPlatform(), languageCode); + rechargeUser.setPayPlatform(chinesePayPlatform); + } + + // 转换备注 + if (rechargeUser.getRemark() != null && !rechargeUser.getRemark().isEmpty()) { + String chineseRemark = translationService.findChineseSimplifiedByTranslation( + rechargeUser.getRemark(), languageCode); + rechargeUser.setRemark(chineseRemark); + } + } + } + } diff --git a/src/main/java/com/example/demo/controller/coin/RefundController.java b/src/main/java/com/example/demo/controller/coin/RefundController.java index f5c195e..e77f690 100644 --- a/src/main/java/com/example/demo/controller/coin/RefundController.java +++ b/src/main/java/com/example/demo/controller/coin/RefundController.java @@ -5,6 +5,7 @@ import com.example.demo.Util.LanguageTranslationUtil; import com.example.demo.config.interfac.Log; import com.example.demo.domain.entity.Admin; import com.example.demo.service.coin.RefundService; +import com.example.demo.service.coin.TranslationService; import com.github.pagehelper.PageInfo; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; @@ -38,6 +39,10 @@ public class RefundController { @Autowired private RefundService refundService; + // 注入 TranslationService + @Autowired + private TranslationService translationService; + // 注入多语言转换工具类 @Autowired private LanguageTranslationUtil languageTranslationUtil; @@ -47,6 +52,14 @@ public class RefundController { @PostMapping("/selectAll") public Result selectAll(@RequestBody Page page, @RequestHeader(defaultValue = "zh") String lang) { try { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertRefundTranslatedFieldsToChinese(page.getRefundUser(), languageCode); + } + if (ObjectUtils.isEmpty(page.getPageNum())) { String errorMsg = languageTranslationUtil.translate("页码数为空!", lang); return Result.error(errorMsg); @@ -66,7 +79,15 @@ public class RefundController { String errorMsg = languageTranslationUtil.translate("角色为空", lang); return Result.error(errorMsg); } - return Result.success(refundService.selectAll(page.getPageNum(), page.getPageSize(), page.getRefundUser())); + Result result = Result.success(refundService.selectAll(page.getPageNum(), page.getPageSize(), page.getRefundUser())); + + // 对返回结果进行多语言转换 + if (result.getCode() == 200 && result.getData() instanceof PageInfo) { + PageInfo pageInfo = (PageInfo) result.getData(); + translateRefundUsers(pageInfo, lang); + } + + return result; } } catch (Exception e) { String errorMsg = languageTranslationUtil.translate("请检查筛选数据的格式", lang); @@ -80,6 +101,14 @@ public class RefundController { @PostMapping("/selectBy") public Result selectBy(@RequestBody Page page, @RequestHeader(defaultValue = "zh") String lang) { try { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertRefundTranslatedFieldsToChinese(page.getRefundUser(), languageCode); + } + if (ObjectUtils.isEmpty(page.getPageNum())) { String errorMsg = languageTranslationUtil.translate("页码数为空!", lang); return Result.error(errorMsg); @@ -116,6 +145,14 @@ public class RefundController { @PostMapping("/statsGold") public Result statsGold(@RequestBody RefundUser refundUser, @RequestHeader(defaultValue = "zh") String lang) { try { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertRefundTranslatedFieldsToChinese(refundUser, languageCode); + } + //解token权限 if(refundUser.getMarkets()==null||refundUser.getMarkets().isEmpty()) { HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); @@ -136,7 +173,16 @@ public class RefundController { @Log("获取退款类型") @PostMapping("/refundType") public Result getRefundType(@RequestHeader(defaultValue = "zh") String lang) { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + List list = refundService.getRefundType(lang); + + // 如果不是中文环境,先将翻译后的退款类型转换为中文简体进行处理 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertTranslatedRefundTypesToChinese(list, languageCode); + } + // 对退款类型进行多语言转换 translateRefundTypes(list, lang); return Result.success(list); @@ -146,6 +192,14 @@ public class RefundController { // @Log("筛选商品") @PostMapping("/selectGoods") public Result getSelectGoods(@RequestBody RefundUser refundUser, @RequestHeader(defaultValue = "zh") String lang) { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertRefundTranslatedFieldsToChinese(refundUser, languageCode); + } + List list = refundService.selectGoods(refundUser, lang); return Result.success(list); } @@ -155,6 +209,14 @@ public class RefundController { @PostMapping("/add") public Result add(@RequestBody RefundUser refundUser, @RequestHeader(defaultValue = "zh") String lang) { try { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertRefundTranslatedFieldsToChinese(refundUser, languageCode); + } + return refundService.add(refundUser, lang); } catch (Exception e) { e.printStackTrace(); @@ -165,6 +227,14 @@ public class RefundController { public Result select(@RequestBody Page page, @RequestHeader(defaultValue = "zh") String lang) { try { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertRefundTranslatedFieldsToChinese(page.getRefundUser(), languageCode); + } + if (ObjectUtils.isEmpty(page.getPageNum())) { String errorMsg = languageTranslationUtil.translate("页码数为空!", lang); return Result.error(errorMsg); @@ -173,7 +243,15 @@ public class RefundController { String errorMsg = languageTranslationUtil.translate("页大小为空!", lang); return Result.error(errorMsg); } else { - return Result.success(refundService.selectBy(page.getPageNum(), page.getPageSize(), page.getRefundUser())); + Result result = Result.success(refundService.selectBy(page.getPageNum(), page.getPageSize(), page.getRefundUser())); + + // 对返回结果进行多语言转换 + if (result.getCode() == 200 && result.getData() instanceof PageInfo) { + PageInfo pageInfo = (PageInfo) result.getData(); + translateRefundUsers(pageInfo, lang); + } + + return result; } } catch (Exception e) { e.printStackTrace(); @@ -184,6 +262,66 @@ public class RefundController { } /** + * 解析语言代码 + */ + 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 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); + } + } + } + + /** + * 将翻译后的退款类型转换为中文简体 + */ + private void convertTranslatedRefundTypesToChinese(List refundTypes, String languageCode) { + if (refundTypes != null && !refundTypes.isEmpty()) { + for (int i = 0; i < refundTypes.size(); i++) { + String chineseType = translationService.findChineseSimplifiedByTranslation( + refundTypes.get(i), languageCode); + refundTypes.set(i, chineseType); + } + } + } + + /** * 转换退款用户信息的多语言字段 */ private void translateRefundUsers(PageInfo pageInfo, String lang) { diff --git a/src/main/java/com/example/demo/controller/coin/UserController.java b/src/main/java/com/example/demo/controller/coin/UserController.java index 66b915b..f31f245 100644 --- a/src/main/java/com/example/demo/controller/coin/UserController.java +++ b/src/main/java/com/example/demo/controller/coin/UserController.java @@ -5,6 +5,7 @@ import com.example.demo.domain.entity.User; import com.example.demo.domain.vo.coin.GoldUser; import com.example.demo.domain.vo.coin.Result; import com.example.demo.service.coin.UserService; +import com.example.demo.service.coin.TranslationService; import com.example.demo.Util.LanguageTranslationUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -30,6 +31,10 @@ public class UserController { @Autowired private UserService userService; + // 注入 TranslationService + @Autowired + private TranslationService translationService; + // 注入多语言转换工具类 @Autowired private LanguageTranslationUtil languageTranslationUtil; @@ -39,6 +44,14 @@ public class UserController { @PostMapping("/selectUser") public Result selectUser(@RequestBody GoldUser user, @RequestHeader(defaultValue = "zh_CN") String lang) { try { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertTranslatedFieldsToChinese(user, languageCode); + } + Result result = userService.selectUser(user.getJwcode().toString()); // 对返回结果进行多语言转换 if (result.getCode() == 200 && result.getData() instanceof GoldUser) { @@ -96,6 +109,39 @@ public class UserController { } /** + * 解析语言代码 + */ + 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 convertTranslatedFieldsToChinese(GoldUser user, String languageCode) { + if (user != null) { + // 转换市场名称 + if (user.getMarket() != null && !user.getMarket().isEmpty()) { + String chineseMarket = translationService.findChineseSimplifiedByTranslation( + user.getMarket(), languageCode); + user.setMarket(chineseMarket); + } + } + } + + /** * 转换用户信息的多语言字段 */ private void translateGoldUser(GoldUser goldUser, String lang) { diff --git a/src/main/java/com/example/demo/controller/coin/WorkbenchController.java b/src/main/java/com/example/demo/controller/coin/WorkbenchController.java index bbb9464..685fe87 100644 --- a/src/main/java/com/example/demo/controller/coin/WorkbenchController.java +++ b/src/main/java/com/example/demo/controller/coin/WorkbenchController.java @@ -10,6 +10,7 @@ import com.example.demo.mapper.coin.StatisticsMapper; import com.example.demo.service.coin.GeneralService; import com.example.demo.service.coin.StatisticsService; import com.example.demo.service.coin.WorkbenchService; +import com.example.demo.service.coin.TranslationService; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -38,17 +39,29 @@ public class WorkbenchController { @Autowired private StatisticsMapper statisticsMapper; + // 注入 TranslationService + @Autowired + private TranslationService translationService; + // 注入多语言转换工具类 @Autowired private LanguageTranslationUtil languageTranslationUtil; /** - 获取各地区工作台卡片的数据 + 获取各地区工作台卡片的数据 */ @Log("获取工作台卡片数据") @PostMapping("/getCard") public ResponseEntity card1(@RequestBody WorkbenchCard workbench, @RequestHeader(defaultValue = "zh_CN") String lang) throws Exception { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertTranslatedFieldsToChinese(workbench, languageCode); + } + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String token = request.getHeader("token"); Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class); @@ -70,13 +83,21 @@ public class WorkbenchController { } /** - 获取各地区工作台图表的数据 + 获取各地区工作台图表的数据 */ @Log("获取工作台图表数据") @PostMapping("/getGraph") public ResponseEntity graph1(@RequestBody WorkbenchCard workbench, @AuthenticationPrincipal Admin admin, @RequestHeader(defaultValue = "zh_CN") String lang) { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertTranslatedFieldsToChinese(workbench, languageCode); + } + String account = admin.getAccount(); List markets = workbenchService.getAdminMarket(account); @@ -94,6 +115,14 @@ public class WorkbenchController { public ResponseEntity> getTotalRevenue(@RequestBody WorkbenchCard workbench, @AuthenticationPrincipal Admin admin, @RequestHeader(defaultValue = "zh_CN") String lang) { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertTranslatedFieldsToChinese(workbench, languageCode); + } + String account = admin.getAccount(); List markets = workbenchService.getRevenueMarket(account); @@ -112,6 +141,14 @@ public class WorkbenchController { public ResponseEntity singleGraph1(@RequestBody WorkbenchCard workbench, @AuthenticationPrincipal Admin admin, @RequestHeader(defaultValue = "zh_CN") String lang) { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertTranslatedFieldsToChinese(workbench, languageCode); + } + String account = admin.getAccount(); List markets = workbenchService.getAdminMarket(account); @@ -123,6 +160,41 @@ public class WorkbenchController { } /** + * 解析语言代码 + */ + 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 convertTranslatedFieldsToChinese(WorkbenchCard workbenchCard, String languageCode) { + if (workbenchCard != null) { + // 转换市场列表中的市场名称 + if (workbenchCard.getMarkets() != null) { + for (int i = 0; i < workbenchCard.getMarkets().size(); i++) { + String chineseMarket = translationService.findChineseSimplifiedByTranslation( + workbenchCard.getMarkets().get(i), languageCode); + workbenchCard.getMarkets().set(i, chineseMarket); + } + } + } + } + + /** * 转换工作台卡片的多语言字段 */ private void translateWorkbenchCard(WorkbenchCard workbenchCard, String lang) { diff --git a/src/main/java/com/example/demo/mapper/coin/TranslationMapper.java b/src/main/java/com/example/demo/mapper/coin/TranslationMapper.java index ea369a6..587228a 100644 --- a/src/main/java/com/example/demo/mapper/coin/TranslationMapper.java +++ b/src/main/java/com/example/demo/mapper/coin/TranslationMapper.java @@ -39,4 +39,10 @@ public interface TranslationMapper { ); Translation findById(Integer id); + Translation findByEnglish(String english); + Translation findByThai(String thai); + Translation findByChineseTraditional(String chineseTraditional); + Translation findByMalay(String malay); + Translation findByVietnamese(String vietnamese); + } diff --git a/src/main/java/com/example/demo/service/coin/TranslationService.java b/src/main/java/com/example/demo/service/coin/TranslationService.java index 867b036..e96fc33 100644 --- a/src/main/java/com/example/demo/service/coin/TranslationService.java +++ b/src/main/java/com/example/demo/service/coin/TranslationService.java @@ -33,4 +33,7 @@ public interface TranslationService { ); Translation findById(Integer id); + + // TranslationService.java + String findChineseSimplifiedByTranslation(String translatedText, String language); } diff --git a/src/main/java/com/example/demo/serviceImpl/coin/TranslationServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/coin/TranslationServiceImpl.java index a0bfdb3..78842d9 100644 --- a/src/main/java/com/example/demo/serviceImpl/coin/TranslationServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/coin/TranslationServiceImpl.java @@ -94,4 +94,29 @@ public class TranslationServiceImpl implements TranslationService { public Translation findById(Integer id) { return translationMapper.findById(id); } + + @Override + public String findChineseSimplifiedByTranslation(String translatedText, String language) { + Translation translation = null; + switch (language.toLowerCase()) { + case "en": + translation = translationMapper.findByEnglish(translatedText); + break; + case "th": + translation = translationMapper.findByThai(translatedText); + break; + case "zh_tw": + translation = translationMapper.findByChineseTraditional(translatedText); + break; + case "ms": + translation = translationMapper.findByMalay(translatedText); + break; + case "vi": + translation = translationMapper.findByVietnamese(translatedText); + break; + default: + return translatedText; // 如果不是支持的语言,默认原样返回 + } + return translation != null ? translation.getChineseSimplified() : translatedText; + } } diff --git a/src/main/resources/mapper/TranslationMapper.xml b/src/main/resources/mapper/TranslationMapper.xml index 15ab516..a8cc4ac 100644 --- a/src/main/resources/mapper/TranslationMapper.xml +++ b/src/main/resources/mapper/TranslationMapper.xml @@ -103,4 +103,25 @@ + + + + + + + + + + +