package com.example.demo.controller.cash; import com.example.demo.Util.JWTUtil; import com.example.demo.Util.LanguageTranslationUtil; import com.example.demo.domain.DTO.IdRequest; import com.example.demo.domain.entity.Admin; import com.example.demo.domain.vo.cash.Status; import com.example.demo.domain.vo.coin.Messages; import com.example.demo.domain.vo.coin.Result; import com.example.demo.service.cash.MessageService; import com.example.demo.service.coin.MarketService; import com.example.demo.service.coin.TranslationService; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import java.util.Arrays; import java.util.List; /** * @program: GOLD * @ClassName MessageController * @description: * @author: huangqizhen * @create: 2025−11−14 22:12 * @Version 1.0 **/ @RestController @RequestMapping("/getMessage") @RequiredArgsConstructor @Slf4j @CrossOrigin public class MessageController { @Autowired private MessageService messageService; @Autowired private MarketService marketService; @Autowired private LanguageTranslationUtil languageTranslationUtil; @Autowired private TranslationService translationService; @PostMapping public Result getMessage(@RequestBody Status status, @RequestHeader(defaultValue = "zh_CN") String lang) throws Exception { HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String token = request.getHeader("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); // 解析语言代码 String languageCode = parseLanguageCode(lang); // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { List messages = messageService.getMessage(markets, status.getStatus()); convertTranslatedFieldsToChinese((Messages) messages, languageCode); } // 权限校验逻辑 if (markets.contains("9") || markets.contains("9999")) { markets = null; } List messages = messageService.getMessage(markets, status.getStatus()); // 对返回结果进行多语言转换 translateMessages(messages, lang); return Result.success(messages); } @PostMapping("/update") public Result update(@RequestBody IdRequest idRequest, @RequestHeader(defaultValue = "zh_CN") String lang) throws Exception { try { Integer id = idRequest.getId(); messageService.update(id); return Result.success(); } catch (Exception e) { String errorMsg = languageTranslationUtil.translate("更新失败", lang); return Result.error(errorMsg); } } /** * 转换消息列表的多语言字段 */ private void translateMessages(List messages, String lang) { if (messages != null && !messages.isEmpty()) { for (com.example.demo.domain.vo.coin.Messages message : messages) { // 翻译标题 if (message.getTitle() != null && !message.getTitle().isEmpty()) { message.setTitle(languageTranslationUtil.translate(message.getTitle(), lang)); } // 翻译描述 if (message.getDesc() != null && !message.getDesc().isEmpty()) { message.setDesc(languageTranslationUtil.translate(message.getDesc(), lang)); } // 翻译市场名称 if (message.getMarketName() != null && !message.getMarketName().isEmpty()) { message.setMarketName(languageTranslationUtil.translate(message.getMarketName(), lang)); } } } } /** * 解析语言代码 */ 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(Messages messages, String languageCode) { if (messages != null) { // 翻译标题 if (messages.getTitle() != null && !messages.getTitle().isEmpty()) { messages.setTitle(languageTranslationUtil.translate(messages.getTitle(), languageCode)); } // 翻译描述 if (messages.getDesc() != null && !messages.getDesc().isEmpty()) { messages.setDesc(languageTranslationUtil.translate(messages.getDesc(), languageCode)); } // 翻译市场名称 if (messages.getMarketName() != null && !messages.getMarketName().isEmpty()) { messages.setMarketName(languageTranslationUtil.translate(messages.getMarketName(), languageCode)); } } } }