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
156 lines
6.1 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);
|
|
|
|
// 获取当前用户的 executor
|
|
Integer executor = Integer.valueOf(admin.getAccount());
|
|
|
|
// 解析语言代码
|
|
String languageCode = parseLanguageCode(lang);
|
|
// 如果不是中文环境,将查询条件中的翻译文本转换为中文简体
|
|
if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
|
|
List<Messages> messages = messageService.getMessage(markets, status.getStatus(), executor);
|
|
for (Messages message : messages) {
|
|
convertTranslatedFieldsToChinese(message, languageCode);
|
|
}
|
|
}
|
|
|
|
// 权限校验逻辑
|
|
if (markets.contains("9") || markets.contains("9999")) {
|
|
markets = null;
|
|
}
|
|
|
|
List<Messages> messages = messageService.getMessage(markets, status.getStatus(), executor);
|
|
// 对返回结果进行多语言转换
|
|
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));
|
|
}
|
|
}
|
|
}
|
|
}
|