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.

156 lines
6.1 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. // 获取当前用户的 executor
  53. Integer executor = Integer.valueOf(admin.getAccount());
  54. // 解析语言代码
  55. String languageCode = parseLanguageCode(lang);
  56. // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体
  57. if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
  58. List<Messages> messages = messageService.getMessage(markets, status.getStatus(), executor);
  59. for (Messages message : messages) {
  60. convertTranslatedFieldsToChinese(message, languageCode);
  61. }
  62. }
  63. // 权限校验逻辑
  64. if (markets.contains("9") || markets.contains("9999")) {
  65. markets = null;
  66. }
  67. List<Messages> messages = messageService.getMessage(markets, status.getStatus(), executor);
  68. // 对返回结果进行多语言转换
  69. translateMessages(messages, lang);
  70. return Result.success(messages);
  71. }
  72. @PostMapping("/update")
  73. public Result update(@RequestBody IdRequest idRequest, @RequestHeader(defaultValue = "zh_CN") String lang) throws Exception {
  74. try {
  75. Integer id = idRequest.getId();
  76. messageService.update(id);
  77. return Result.success();
  78. }
  79. catch (Exception e) {
  80. String errorMsg = languageTranslationUtil.translate("更新失败", lang);
  81. return Result.error(errorMsg);
  82. }
  83. }
  84. /**
  85. * 转换消息列表的多语言字段
  86. */
  87. private void translateMessages(List<com.example.demo.domain.vo.coin.Messages> messages, String lang) {
  88. if (messages != null && !messages.isEmpty()) {
  89. for (com.example.demo.domain.vo.coin.Messages message : messages) {
  90. // 翻译标题
  91. if (message.getTitle() != null && !message.getTitle().isEmpty()) {
  92. message.setTitle(languageTranslationUtil.translate(message.getTitle(), lang));
  93. }
  94. // 翻译描述
  95. if (message.getDesc() != null && !message.getDesc().isEmpty()) {
  96. message.setDesc(languageTranslationUtil.translate(message.getDesc(), lang));
  97. }
  98. // 翻译市场名称
  99. if (message.getMarketName() != null && !message.getMarketName().isEmpty()) {
  100. message.setMarketName(languageTranslationUtil.translate(message.getMarketName(), lang));
  101. }
  102. }
  103. }
  104. }
  105. /**
  106. * 解析语言代码
  107. */
  108. private String parseLanguageCode(String langHeader) {
  109. if (langHeader == null || langHeader.isEmpty()) {
  110. return "zh";
  111. }
  112. // 处理类似 "en-US" 或 "zh-TW" 的情况
  113. if (langHeader.contains("-")) {
  114. String[] parts = langHeader.split("-");
  115. // 特殊处理中文繁体
  116. if ("zh".equalsIgnoreCase(parts[0]) && "TW".equalsIgnoreCase(parts[1])) {
  117. return "zh_TW";
  118. }
  119. return parts[0].toLowerCase();
  120. }
  121. return langHeader.toLowerCase();
  122. }
  123. /**
  124. * 将查询条件中的翻译字段转换为中文简体
  125. */
  126. private void convertTranslatedFieldsToChinese(Messages messages, String languageCode) {
  127. if (messages != null) {
  128. // 翻译标题
  129. if (messages.getTitle() != null && !messages.getTitle().isEmpty()) {
  130. messages.setTitle(languageTranslationUtil.translate(messages.getTitle(), languageCode));
  131. }
  132. // 翻译描述
  133. if (messages.getDesc() != null && !messages.getDesc().isEmpty()) {
  134. messages.setDesc(languageTranslationUtil.translate(messages.getDesc(), languageCode));
  135. }
  136. // 翻译市场名称
  137. if (messages.getMarketName() != null && !messages.getMarketName().isEmpty()) {
  138. messages.setMarketName(languageTranslationUtil.translate(messages.getMarketName(), languageCode));
  139. }
  140. }
  141. }
  142. }