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

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<String> userMarkets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));
List<String> markets = marketService.getMarketIds(userMarkets);
// 解析语言代码
String languageCode = parseLanguageCode(lang);
// 如果不是中文环境,将查询条件中的翻译文本转换为中文简体
if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
List<com.example.demo.domain.vo.coin.Messages> messages = messageService.getMessage(markets, status.getStatus());
convertTranslatedFieldsToChinese((Messages) messages, languageCode);
}
// 权限校验逻辑
if (markets.contains("9") || markets.contains("9999")) {
markets = null;
}
List<com.example.demo.domain.vo.coin.Messages> 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<com.example.demo.domain.vo.coin.Messages> 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));
}
}
}
}