Browse Source

Merge branch 'refs/heads/wangguorui/feature-20251125171605-现金管理多语言配置' into milestone-20251125-多语言

# Conflicts:
#	src/main/java/com/example/demo/controller/coin/ConsumeController.java
milestone-20251125-多语言
wangguorui 1 month ago
parent
commit
1600577d53
  1. 66
      src/main/java/com/example/demo/controller/coin/AdminController.java
  2. 114
      src/main/java/com/example/demo/controller/coin/AuditController.java
  3. 103
      src/main/java/com/example/demo/controller/coin/ConsumeController.java
  4. 96
      src/main/java/com/example/demo/controller/coin/GeneralController.java
  5. 99
      src/main/java/com/example/demo/controller/coin/GoldDetailController.java
  6. 53
      src/main/java/com/example/demo/controller/coin/MarketController.java
  7. 52
      src/main/java/com/example/demo/controller/coin/MenuController.java
  8. 96
      src/main/java/com/example/demo/controller/coin/RechargeController.java
  9. 142
      src/main/java/com/example/demo/controller/coin/RefundController.java
  10. 46
      src/main/java/com/example/demo/controller/coin/UserController.java
  11. 76
      src/main/java/com/example/demo/controller/coin/WorkbenchController.java
  12. 6
      src/main/java/com/example/demo/mapper/coin/TranslationMapper.java
  13. 3
      src/main/java/com/example/demo/service/coin/TranslationService.java
  14. 25
      src/main/java/com/example/demo/serviceImpl/coin/TranslationServiceImpl.java
  15. 21
      src/main/resources/mapper/TranslationMapper.xml

66
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);
}
}
}
}

114
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);
}
}
}
}

103
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);
// }
}
}
}

96
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<String> 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<String> 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<Rate> 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<String> 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<String> 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<String> 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<Rate> 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);
}
}
}
}
}

99
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<String> userMarkets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));
List<String> markets = marketService.getMarketIds(userMarkets);
// 校验分页参数
// 校验分页参数
if (ObjectUtils.isEmpty(page.getPageNum())) {
return Result.error("页码数为空!");
}
@ -82,10 +92,10 @@ public class GoldDetailController {
return Result.error("页大小为空!");
}
// 获取传入的市场列表
// 获取传入的市场列表
List<String> 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);
}
}
}
}

53
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<Market> 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<Market> 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);
}
}
}
}
}

52
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<MenuVo> 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<MenuVo> 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);
}
}
}
}
}

96
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);
}
}
}
}

142
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<RefundUser> pageInfo = (PageInfo<RefundUser>) 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<String> 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<RefundUser> 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<RefundUser> pageInfo = (PageInfo<RefundUser>) 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<String> 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<RefundUser> pageInfo, String lang) {

46
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) {

76
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<WorkbenchCard> 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<WorkbenchCard> 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<String> markets = workbenchService.getAdminMarket(account);
@ -94,6 +115,14 @@ public class WorkbenchController {
public ResponseEntity<List<WorkbenchRevenue>> 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<String> markets = workbenchService.getRevenueMarket(account);
@ -112,6 +141,14 @@ public class WorkbenchController {
public ResponseEntity<WorkbenchCard> 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<String> 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) {

6
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);
}

3
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);
}

25
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;
}
}

21
src/main/resources/mapper/TranslationMapper.xml

@ -103,4 +103,25 @@
<select id="findById" parameterType="int" resultType="com.example.demo.domain.entity.Translation">
SELECT * FROM translation WHERE id = #{id}
</select>
<select id="findByEnglish" parameterType="string" resultType="com.example.demo.domain.entity.Translation">
SELECT * FROM translation WHERE english = #{english}
</select>
<select id="findByThai" parameterType="string" resultType="com.example.demo.domain.entity.Translation">
SELECT * FROM translation WHERE thai = #{thai}
</select>
<select id="findByChineseTraditional" parameterType="string" resultType="com.example.demo.domain.entity.Translation">
SELECT * FROM translation WHERE chinese_traditional = #{chineseTraditional}
</select>
<select id="findByMalay" parameterType="string" resultType="com.example.demo.domain.entity.Translation">
SELECT * FROM translation WHERE malay = #{malay}
</select>
<select id="findByVietnamese" parameterType="string" resultType="com.example.demo.domain.entity.Translation">
SELECT * FROM translation WHERE vietnamese = #{vietnamese}
</select>
</mapper>
Loading…
Cancel
Save