You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

151 lines
6.0 KiB

  1. package com.example.demo.controller.cash;
  2. import com.example.demo.Util.JWTUtil;
  3. import com.example.demo.Util.LanguageTranslationUtil;
  4. import com.example.demo.domain.DTO.IdRequest;
  5. import com.example.demo.domain.entity.Admin;
  6. import com.example.demo.domain.vo.cash.Status;
  7. import com.example.demo.domain.vo.coin.Messages;
  8. import com.example.demo.domain.vo.coin.Result;
  9. import com.example.demo.service.cash.MessageService;
  10. import com.example.demo.service.coin.MarketService;
  11. import com.example.demo.service.coin.TranslationService;
  12. import jakarta.servlet.http.HttpServletRequest;
  13. import lombok.RequiredArgsConstructor;
  14. import lombok.extern.slf4j.Slf4j;
  15. import org.apache.commons.lang3.StringUtils;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.web.bind.annotation.*;
  18. import org.springframework.web.context.request.RequestContextHolder;
  19. import org.springframework.web.context.request.ServletRequestAttributes;
  20. import java.util.Arrays;
  21. import java.util.List;
  22. /**
  23. * @program: GOLD
  24. * @ClassName MessageController
  25. * @description:
  26. * @author: huangqizhen
  27. * @create: 20251114 22:12
  28. * @Version 1.0
  29. **/
  30. @RestController
  31. @RequestMapping("/getMessage")
  32. @RequiredArgsConstructor
  33. @Slf4j
  34. @CrossOrigin
  35. public class MessageController {
  36. @Autowired
  37. private MessageService messageService;
  38. @Autowired
  39. private MarketService marketService;
  40. @Autowired
  41. private LanguageTranslationUtil languageTranslationUtil;
  42. @Autowired
  43. private TranslationService translationService;
  44. @PostMapping
  45. public Result getMessage(@RequestBody Status status, @RequestHeader(defaultValue = "zh_CN") String lang) throws Exception {
  46. HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
  47. String token = request.getHeader("token");
  48. // 解析 token 获取用户信息
  49. Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
  50. List<String> userMarkets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));
  51. List<String> markets = marketService.getMarketIds(userMarkets);
  52. // 解析语言代码
  53. String languageCode = parseLanguageCode(lang);
  54. // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体
  55. if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
  56. List<com.example.demo.domain.vo.coin.Messages> messages = messageService.getMessage(markets, status.getStatus());
  57. convertTranslatedFieldsToChinese((Messages) messages, languageCode);
  58. }
  59. // 权限校验逻辑
  60. if (markets.contains("9") || markets.contains("9999")) {
  61. markets = null;
  62. }
  63. List<com.example.demo.domain.vo.coin.Messages> messages = messageService.getMessage(markets, status.getStatus());
  64. // 对返回结果进行多语言转换
  65. translateMessages(messages, lang);
  66. return Result.success(messages);
  67. }
  68. @PostMapping("/update")
  69. public Result update(@RequestBody IdRequest idRequest, @RequestHeader(defaultValue = "zh_CN") String lang) throws Exception {
  70. try {
  71. Integer id = idRequest.getId();
  72. messageService.update(id);
  73. return Result.success();
  74. }
  75. catch (Exception e) {
  76. String errorMsg = languageTranslationUtil.translate("更新失败", lang);
  77. return Result.error(errorMsg);
  78. }
  79. }
  80. /**
  81. * 转换消息列表的多语言字段
  82. */
  83. private void translateMessages(List<com.example.demo.domain.vo.coin.Messages> messages, String lang) {
  84. if (messages != null && !messages.isEmpty()) {
  85. for (com.example.demo.domain.vo.coin.Messages message : messages) {
  86. // 翻译标题
  87. if (message.getTitle() != null && !message.getTitle().isEmpty()) {
  88. message.setTitle(languageTranslationUtil.translate(message.getTitle(), lang));
  89. }
  90. // 翻译描述
  91. if (message.getDesc() != null && !message.getDesc().isEmpty()) {
  92. message.setDesc(languageTranslationUtil.translate(message.getDesc(), lang));
  93. }
  94. // 翻译市场名称
  95. if (message.getMarketName() != null && !message.getMarketName().isEmpty()) {
  96. message.setMarketName(languageTranslationUtil.translate(message.getMarketName(), lang));
  97. }
  98. }
  99. }
  100. }
  101. /**
  102. * 解析语言代码
  103. */
  104. private String parseLanguageCode(String langHeader) {
  105. if (langHeader == null || langHeader.isEmpty()) {
  106. return "zh";
  107. }
  108. // 处理类似 "en-US" 或 "zh-TW" 的情况
  109. if (langHeader.contains("-")) {
  110. String[] parts = langHeader.split("-");
  111. // 特殊处理中文繁体
  112. if ("zh".equalsIgnoreCase(parts[0]) && "TW".equalsIgnoreCase(parts[1])) {
  113. return "zh_TW";
  114. }
  115. return parts[0].toLowerCase();
  116. }
  117. return langHeader.toLowerCase();
  118. }
  119. /**
  120. * 将查询条件中的翻译字段转换为中文简体
  121. */
  122. private void convertTranslatedFieldsToChinese(Messages messages, String languageCode) {
  123. if (messages != null) {
  124. // 翻译标题
  125. if (messages.getTitle() != null && !messages.getTitle().isEmpty()) {
  126. messages.setTitle(languageTranslationUtil.translate(messages.getTitle(), languageCode));
  127. }
  128. // 翻译描述
  129. if (messages.getDesc() != null && !messages.getDesc().isEmpty()) {
  130. messages.setDesc(languageTranslationUtil.translate(messages.getDesc(), languageCode));
  131. }
  132. // 翻译市场名称
  133. if (messages.getMarketName() != null && !messages.getMarketName().isEmpty()) {
  134. messages.setMarketName(languageTranslationUtil.translate(messages.getMarketName(), languageCode));
  135. }
  136. }
  137. }
  138. }