Browse Source

12月1日现金管理多语言配置

wangguorui/feature-20251125171605-现金管理多语言配置
wangguorui 1 month ago
parent
commit
33af852ebd
  1. 104
      src/main/java/com/example/demo/Util/LanguageTranslationUtil.java
  2. 46
      src/main/java/com/example/demo/controller/coin/AdminController.java
  3. 113
      src/main/java/com/example/demo/controller/coin/AuditController.java
  4. 45
      src/main/java/com/example/demo/controller/coin/ConsumeController.java
  5. 85
      src/main/java/com/example/demo/controller/coin/GeneralController.java
  6. 58
      src/main/java/com/example/demo/controller/coin/GoldDetailController.java
  7. 45
      src/main/java/com/example/demo/controller/coin/MarketController.java
  8. 30
      src/main/java/com/example/demo/controller/coin/MenuController.java
  9. 56
      src/main/java/com/example/demo/controller/coin/RateController.java
  10. 64
      src/main/java/com/example/demo/controller/coin/RechargeController.java
  11. 71
      src/main/java/com/example/demo/controller/coin/RefundController.java
  12. 153
      src/main/java/com/example/demo/controller/coin/TranslationController.java
  13. 27
      src/main/java/com/example/demo/controller/coin/UserController.java
  14. 127
      src/main/java/com/example/demo/controller/coin/WorkbenchController.java
  15. 11
      src/main/java/com/example/demo/domain/DTO/TranslationQueryRequest.java
  16. 25
      src/main/java/com/example/demo/domain/entity/Translation.java
  17. 1
      src/main/java/com/example/demo/domain/vo/coin/ConsumeUser.java
  18. 1
      src/main/java/com/example/demo/domain/vo/coin/GoldDetail.java
  19. 1
      src/main/java/com/example/demo/domain/vo/coin/RefundAudit.java
  20. 1
      src/main/java/com/example/demo/domain/vo/coin/RefundUser.java
  21. 42
      src/main/java/com/example/demo/mapper/coin/TranslationMapper.java
  22. 36
      src/main/java/com/example/demo/service/coin/TranslationService.java
  23. 2
      src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java
  24. 97
      src/main/java/com/example/demo/serviceImpl/coin/TranslationServiceImpl.java
  25. 106
      src/main/resources/mapper/TranslationMapper.xml

104
src/main/java/com/example/demo/Util/LanguageTranslationUtil.java

@ -0,0 +1,104 @@
package com.example.demo.Util;
import com.example.demo.domain.entity.Translation;
import com.example.demo.service.coin.TranslationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* 多语言转换工具类
*/
@Component
public class LanguageTranslationUtil {
@Autowired
private TranslationService translationService;
// 缓存翻译数据提高性能
private final Map<String, Translation> translationCache = new ConcurrentHashMap<>();
/**
* 根据中文简体获取指定语言的翻译
*
* @param chineseSimplified 中文简体内容
* @param language 目标语言 (en/th/zh_TW/ms/vi)
* @return 对应语言的翻译内容
*/
public String translate(String chineseSimplified, String language) {
System.out.println("Translate request - Text: " + chineseSimplified + ", Language: " + language);
Translation translation = findTranslationByChinese(chineseSimplified);
if (translation == null) {
System.out.println("No translation found for: " + chineseSimplified);
return chineseSimplified;
}
String result;
switch (language.toLowerCase()) {
case "en":
result = translation.getEnglish() != null ? translation.getEnglish() : chineseSimplified;
break;
case "th":
result = translation.getThai() != null ? translation.getThai() : chineseSimplified;
break;
case "zh_tw":
result = translation.getChineseTraditional() != null ? translation.getChineseTraditional() : chineseSimplified;
break;
case "ms":
result = translation.getMalay() != null ? translation.getMalay() : chineseSimplified;
break;
case "vi":
result = translation.getVietnamese() != null ? translation.getVietnamese() : chineseSimplified;
break;
default:
result = chineseSimplified;
}
System.out.println("Translation result: " + result);
return result;
}
/**
* 根据中文简体查找翻译对象
*
* @param chineseSimplified 中文简体内容
* @return 翻译对象
*/
private Translation findTranslationByChinese(String chineseSimplified) {
// 先从缓存中查找
if (translationCache.containsKey(chineseSimplified)) {
return translationCache.get(chineseSimplified);
}
// 从数据库中精确查找
Translation translation = translationService.findByChineseSimplified(chineseSimplified);
if (translation != null) {
translationCache.put(chineseSimplified, translation);
return translation;
}
return null;
}
/**
* 刷新整个缓存当翻译数据有更新时调用
*/
public void refreshAllCache() {
translationCache.clear();
}
/**
* 从缓存中移除指定的翻译条目
* @param chineseSimplified 简体中文原文
*/
public void removeFromCache(String chineseSimplified) {
if (chineseSimplified != null) {
translationCache.remove(chineseSimplified);
}
}
}

46
src/main/java/com/example/demo/controller/coin/AdminController.java

@ -1,6 +1,7 @@
package com.example.demo.controller.coin;
import com.example.demo.Util.JWTUtil;
import com.example.demo.Util.LanguageTranslationUtil;
import com.example.demo.config.interfac.Log;
import com.example.demo.domain.entity.Admin;
import com.example.demo.domain.vo.coin.Password;
@ -32,6 +33,10 @@ public class AdminController {
@Autowired
private AdminMapper adminMapper;
// 注入多语言转换工具类
@Autowired
private LanguageTranslationUtil languageTranslationUtil;
@PostMapping("/test")
public void testGetAdmin() {
Admin admin = adminMapper.getAdmin("14518");
@ -59,13 +64,20 @@ public class AdminController {
@Log("查看用户信息")
@PostMapping("/userinfo")
public UserDetails getUserInfo(@RequestHeader("token") String token1) {
public UserDetails getUserInfo(@RequestHeader("token") String token1,
@RequestHeader(defaultValue = "zh_CN") String lang) {
//String token = token1.getToken();
String token = token1;
try {
return JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
UserDetails userDetails = JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
// 对用户信息进行多语言转换
if (userDetails instanceof Admin) {
Admin admin = (Admin) userDetails;
translateAdminInfo(admin, lang);
}
return userDetails;
} catch (Exception e) {
throw new RuntimeException(e);
}
@ -111,4 +123,34 @@ public class AdminController {
}
/**
* 转换管理员信息的多语言字段
*/
private void translateAdminInfo(Admin admin, String lang) {
if (admin != null) {
// 翻译市场权限信息如果markets是逗号分隔的多个市场
if (admin.getMarkets() != null && !admin.getMarkets().isEmpty()) {
String[] markets = admin.getMarkets().split(",");
StringBuilder translatedMarkets = new StringBuilder();
for (int i = 0; i < markets.length; i++) {
if (i > 0) {
translatedMarkets.append(",");
}
String translatedMarket = languageTranslationUtil.translate(markets[i].trim(), lang);
translatedMarkets.append(translatedMarket);
}
admin.setMarkets(translatedMarkets.toString());
}
// 翻译职位信息
if (admin.getPostiton() != null && !admin.getPostiton().isEmpty()) {
String translatedPosition = languageTranslationUtil.translate(admin.getPostiton(), lang);
admin.setPostiton(translatedPosition);
}
// 翻译备注
if (admin.getRemark() != null && !admin.getRemark().isEmpty()) {
String translatedRemark = languageTranslationUtil.translate(admin.getRemark(), lang);
admin.setRemark(translatedRemark);
}
}
}
}

113
src/main/java/com/example/demo/controller/coin/AuditController.java

@ -1,6 +1,7 @@
package com.example.demo.controller.coin;
import com.example.demo.Util.JWTUtil;
import com.example.demo.Util.LanguageTranslationUtil;
import com.example.demo.config.interfac.Log;
import com.example.demo.domain.entity.Admin;
import com.example.demo.service.coin.AuditService;
@ -37,19 +38,25 @@ public class AuditController {
@Autowired
private AuditService auditService;
// 注入多语言转换工具类
@Autowired
private LanguageTranslationUtil languageTranslationUtil;
//审核订单
@Log("审核订单")
@PostMapping("audit")
public ResponseEntity<Boolean> auditOrder(
@RequestBody AuditRequest request) {
boolean result = auditService.auditOrder(request.getToken(),request.getOrderCode(), request.getAuditId(), request.getAction(),request.getRejectReason());
boolean result = auditService.auditOrder(request.getToken(), request.getOrderCode(), request.getAuditId(), request.getAction(), request.getRejectReason());
return ResponseEntity.ok(result);
}
}
//多条件查询充值审核订单列表
@Log("查询充值审核订单列表")
@PostMapping("selectRecharge")
public PageInfo<RechargeAudit> searchRechargeAudit (
@RequestBody Page page) throws Exception {
public PageInfo<RechargeAudit> searchRechargeAudit(
@RequestBody Page page,
@RequestHeader(defaultValue = "zh_CN") String lang) throws Exception {
Integer pageNum = page.getPageNum();
Integer pageSize = page.getPageSize();
RechargeAudit rechargeAudit = page.getRechargeAudit();
@ -62,11 +69,18 @@ public class AuditController {
rechargeAudit.setMarkets(list);
}
return auditService.selectRechargeBy(pageNum, pageSize, rechargeAudit);
} //多条件查询退款审核订单列表
PageInfo<RechargeAudit> pageInfo = auditService.selectRechargeBy(pageNum, pageSize, rechargeAudit);
// 对结果进行多语言转换
translateRechargeAuditResults(pageInfo, lang);
return pageInfo;
}
//多条件查询退款审核订单列表
@Log("查询退款审核订单列表")
@PostMapping("selectRefund")
public PageInfo<RefundAudit> searchRefundAudit(@RequestBody Page page) throws Exception {
public PageInfo<RefundAudit> searchRefundAudit(
@RequestBody Page page,
@RequestHeader(defaultValue = "zh_CN") String lang) throws Exception {
Integer pageNum = page.getPageNum();
Integer pageSize = page.getPageSize();
RefundAudit refundAudit = page.getRefundAudit();
@ -79,8 +93,11 @@ public class AuditController {
refundAudit.setMarkets(list);
}
return auditService.selectRefundBy(pageNum, pageSize, refundAudit);
}
PageInfo<RefundAudit> pageInfo = auditService.selectRefundBy(pageNum, pageSize, refundAudit);
// 对结果进行多语言转换
translateRefundAuditResults(pageInfo, lang);
return pageInfo;
}
//充值审核合计数
@Log("充值审核合计数")
@PostMapping("sumRechargeGold")
@ -115,4 +132,80 @@ public class AuditController {
}
return auditService.sumRefundGold(pageNum, pageSize, refundAudit);
}
}
/**
* 转换充值审核结果的多语言字段
*/
private void translateRechargeAuditResults(PageInfo<RechargeAudit> pageInfo, String lang) {
if (pageInfo != null && pageInfo.getList() != null) {
for (RechargeAudit audit : pageInfo.getList()) {
// 翻译市场名称
if (audit.getMarket() != null) {
audit.setMarket(languageTranslationUtil.translate(audit.getMarket(), lang));
}
// 翻译汇率名称
if (audit.getRateName() != null) {
audit.setRateName(languageTranslationUtil.translate(audit.getRateName(), lang));
}
// 翻译支付方式
if (audit.getPayModel() != null) {
audit.setPayModel(languageTranslationUtil.translate(audit.getPayModel(), lang));
}
// 翻译活动名称
if (audit.getActivity() != null) {
audit.setActivity(languageTranslationUtil.translate(audit.getActivity(), lang));
}
// 翻译备注
if (audit.getRemark() != null) {
audit.setRemark(languageTranslationUtil.translate(audit.getRemark(), lang));
}
}
}
}
/**
* 转换退款审核结果的多语言字段
*/
private void translateRefundAuditResults(PageInfo<RefundAudit> pageInfo, String lang) {
if (pageInfo != null && pageInfo.getList() != null) {
for (RefundAudit audit : pageInfo.getList()) {
// 翻译市场名称
if (audit.getMarket() != null) {
audit.setMarket(languageTranslationUtil.translate(audit.getMarket(), lang));
}
// 翻译商品名称
if (audit.getGoodsName() != null) {
audit.setGoodsName(languageTranslationUtil.translate(audit.getGoodsName(), lang));
}
// 翻译退款方式
if (audit.getRefundModel() != null) {
// refundModel是数字需要先转换为对应的中文描述再翻译
String refundModelDesc = convertRefundModelToString(audit.getRefundModel());
audit.setRefundModelDesc(languageTranslationUtil.translate(refundModelDesc, lang));
}
// 翻译退款类型
if (audit.getRefundType() != null) {
audit.setRefundType(languageTranslationUtil.translate(audit.getRefundType(), lang));
}
// 翻译备注
if (audit.getRemark() != null) {
audit.setRemark(languageTranslationUtil.translate(audit.getRemark(), lang));
}
}
}
}
/**
* 将退款方式数字转换为中文描述
*/
private String convertRefundModelToString(Integer refundModel) {
if (refundModel == null) return "";
switch (refundModel) {
case 0:
return "全部退款";
case 1:
return "部分退款";
default:
return "未知退款方式";
}
}
}

45
src/main/java/com/example/demo/controller/coin/ConsumeController.java

@ -1,6 +1,7 @@
package com.example.demo.controller.coin;
import com.example.demo.Util.JWTUtil;
import com.example.demo.Util.LanguageTranslationUtil;
import com.example.demo.config.interfac.Log;
import com.example.demo.domain.entity.Admin;
import com.example.demo.domain.vo.coin.ConsumeUser;
@ -8,6 +9,7 @@ import com.example.demo.domain.vo.coin.Gold;
import com.example.demo.domain.vo.coin.Page;
import com.example.demo.domain.vo.coin.Result;
import com.example.demo.service.coin.ConsumeService;
import com.github.pagehelper.PageInfo;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -40,6 +42,10 @@ public class ConsumeController {
@Autowired
private ConsumeService consumeService;
// 注入多语言转换工具类
@Autowired
private LanguageTranslationUtil languageTranslationUtil;
//消耗明细
@Log("查看所有消耗明细")
@PostMapping("/selectAll")
@ -78,7 +84,7 @@ public class ConsumeController {
//消耗明细筛选
@Log("筛选查询消耗明细")
@PostMapping("/selectBy")
public Result selectBy(@RequestBody Page page) {
public Result selectBy(@RequestBody Page page, @RequestHeader(defaultValue = "zh_CN") String lang) {
try {
//页码校验
if (ObjectUtils.isEmpty(page.getPageNum())) {
@ -101,7 +107,13 @@ public class ConsumeController {
return Result.error("角色为空");
}
}
return Result.success(consumeService.selectBy(page.getPageNum(), page.getPageSize(), page.getConsumeUser()));
Result result = Result.success(consumeService.selectBy(page.getPageNum(), page.getPageSize(), page.getConsumeUser()));
// 对返回结果进行多语言转换
if (result.getCode() == 200 && result.getData() instanceof PageInfo) {
PageInfo<ConsumeUser> pageInfo = (PageInfo<ConsumeUser>) result.getData();
translateConsumeUsers(pageInfo, lang);
}
return result;
}
} catch (Exception e) {
e.printStackTrace();
@ -193,5 +205,34 @@ public class ConsumeController {
}
/**
* 转换消费用户信息的多语言字段
*/
private void translateConsumeUsers(PageInfo<ConsumeUser> pageInfo, String lang) {
if (pageInfo != null && pageInfo.getList() != null) {
for (ConsumeUser user : pageInfo.getList()) {
// 翻译市场名称
if (user.getMarket() != null) {
user.setMarket(languageTranslationUtil.translate(user.getMarket(), lang));
}
// 翻译商品名称
if (user.getGoodsName() != null) {
user.setGoodsName(languageTranslationUtil.translate(user.getGoodsName(), lang));
}
// 翻译支付平台
if (user.getPayPlatform() != null) {
user.setPayPlatform(languageTranslationUtil.translate(user.getPayPlatform(), lang));
}
// 翻译退款状态
if (user.getIsRefund() != null) {
if (user.getIsRefund() == 1) {
user.setIsRefundDesc(languageTranslationUtil.translate("已退款", lang));
} else if (user.getIsRefund() == 0) {
user.setIsRefundDesc(languageTranslationUtil.translate("正常", lang));
}
}
}
}
}
}

85
src/main/java/com/example/demo/controller/coin/GeneralController.java

@ -1,10 +1,12 @@
package com.example.demo.controller.coin;
import com.example.demo.config.interfac.Log;
import com.example.demo.domain.entity.Rate;
import com.example.demo.domain.vo.coin.AdminVo;
import com.example.demo.domain.vo.coin.Result;
import com.example.demo.domain.vo.coin.RoleVo;
import com.example.demo.service.coin.GeneralService;
import com.example.demo.Util.LanguageTranslationUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@ -29,7 +31,12 @@ public class GeneralController {
@Autowired
private GeneralService generalService;
// @Log("获取全部地区")
// 注入多语言转换工具类
@Autowired
private LanguageTranslationUtil languageTranslationUtil;
// @Log("获取全部地区")
@PostMapping("/market")
public Result getMarket()
{
@ -58,33 +65,43 @@ public class GeneralController {
List<String> list = generalService.getAllRoleMarket();
return Result.success(list);
}
// @Log("获取平台信息")
// @Log("获取平台信息")
@PostMapping("/platform")
public Result getPlatform()
public Result getPlatform(@RequestHeader(defaultValue = "zh_CN") String lang)
{
List<String> list = generalService.getPlatform();
// 对平台名称进行多语言转换
translatePlatformNames(list, lang);
return Result.success(list);
}
//获取商品名称
// @Log("获取商品名称")
// @Log("获取商品名称")
@PostMapping("/goods")
public Result getGoods()
public Result getGoods(@RequestHeader(defaultValue = "zh_CN") String lang)
{
List<String> list = generalService.getGoods();
// 对商品名称进行多语言转换
translateGoodsNames(list, lang);
return Result.success(list);
}
//获取活动名称
// @Log("获取活动名称")
// @Log("获取活动名称")
@PostMapping("/activity")
public Result getActivity()
public Result getActivity(@RequestHeader(defaultValue = "zh_CN") String lang)
{
List<String> list = generalService.getActivity();
// 对活动名称进行多语言转换
translateActivityNames(list, lang);
return Result.success(list);
}
//获取汇率
@PostMapping("/getRate")
public Result getRate()
public Result getRate(@RequestHeader(defaultValue = "zh_CN") String lang)
{
return Result.success(generalService.getRate());
List<Rate> rates = generalService.getRate();
// 对汇率名称进行多语言转换
translateRateNames(rates, lang);
return Result.success(rates);
}
//手动同步link商品表
@ -92,4 +109,54 @@ public class GeneralController {
public void syncLinkProducts(){
generalService.fullSyncProducts();
}
/**
* 转换商品名称为指定语言
*/
private void translateGoodsNames(List<String> goodsNames, String lang) {
if (goodsNames != null && !goodsNames.isEmpty()) {
for (int i = 0; i < goodsNames.size(); i++) {
String translatedName = languageTranslationUtil.translate(goodsNames.get(i), lang);
goodsNames.set(i, translatedName);
}
}
}
/**
* 转换平台名称为指定语言
*/
private void translatePlatformNames(List<String> platformNames, String lang) {
if (platformNames != null && !platformNames.isEmpty()) {
for (int i = 0; i < platformNames.size(); i++) {
String translatedName = languageTranslationUtil.translate(platformNames.get(i), lang);
platformNames.set(i, translatedName);
}
}
}
/**
* 转换活动名称为指定语言
*/
private void translateActivityNames(List<String> activityNames, String lang) {
if (activityNames != null && !activityNames.isEmpty()) {
for (int i = 0; i < activityNames.size(); i++) {
String translatedName = languageTranslationUtil.translate(activityNames.get(i), lang);
activityNames.set(i, translatedName);
}
}
}
/**
* 转换汇率名称为指定语言
*/
private void translateRateNames(List<Rate> rates, String lang) {
if (rates != null && !rates.isEmpty()) {
for (Rate rate : rates) {
if (rate.getRateName() != null) {
String translatedName = languageTranslationUtil.translate(rate.getRateName(), lang);
rate.setRateName(translatedName);
}
}
}
}
}

58
src/main/java/com/example/demo/controller/coin/GoldDetailController.java

@ -2,6 +2,7 @@ package com.example.demo.controller.coin;
import com.example.demo.Util.BusinessException;
import com.example.demo.Util.JWTUtil;
import com.example.demo.Util.LanguageTranslationUtil;
import com.example.demo.Util.RedisLockUtil;
import com.example.demo.config.interfac.Log;
import com.example.demo.domain.DTO.GoldDetailDTO;
@ -15,6 +16,7 @@ import com.example.demo.domain.vo.coin.Result;
import com.example.demo.service.coin.GoldDetailService;
import com.example.demo.service.coin.MarketService;
import com.example.demo.serviceImpl.coin.AiEmotionServiceImpl;
import com.github.pagehelper.PageInfo;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
@ -48,6 +50,9 @@ public class GoldDetailController {
@Autowired
private GoldDetailService goldDetailService;
// 注入多语言转换工具类
@Autowired
private LanguageTranslationUtil languageTranslationUtil;
@Autowired
private RedisLockUtil redisLockUtil;
@ -58,7 +63,7 @@ public class GoldDetailController {
@Log("获取金币明细")
@PostMapping("/getGoldDetail")
public Result getGoldDetail(@RequestBody Page page) throws Exception {
public Result getGoldDetail(@RequestBody Page page, @RequestHeader(defaultValue = "zh_CN") String lang) throws Exception {
// 获取当前请求对象
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
@ -100,12 +105,21 @@ public class GoldDetailController {
}
// 返回详情数据
return Result.success(goldDetailService.getGoldDetail(
Result result = Result.success(goldDetailService.getGoldDetail(
page.getPageNum(),
page.getPageSize(),
page.getGoldDetail()
));
// 对返回结果进行多语言转换
if (result.getCode() == 200 && result.getData() instanceof PageInfo) {
PageInfo<GoldDetail> pageInfo = (PageInfo<GoldDetail>) result.getData();
translateGoldDetails(pageInfo, lang);
}
return result;
}
@Log("客户金币明细金币合计数统计")
@PostMapping("/getTotal")
public Result getTotal(@RequestBody Page page) throws Exception {
@ -292,4 +306,44 @@ public class GoldDetailController {
public Result updateConsumeNum() {
return goldDetailService.updateConsumeNum();
}
/**
* 转换金币明细信息的多语言字段
*/
private void translateGoldDetails(PageInfo<GoldDetail> pageInfo, String lang) {
if (pageInfo != null && pageInfo.getList() != null) {
for (GoldDetail detail : pageInfo.getList()) {
// 翻译市场名称("所属地区")
if (detail.getMarket() != null) {
detail.setMarket(languageTranslationUtil.translate(detail.getMarket(), lang));
}
// 翻译支付平台("平台信息")
if (detail.getPayPlatform() != null) {
detail.setPayPlatform(languageTranslationUtil.translate(detail.getPayPlatform(), lang));
}
// 翻译类型("更新类型") - 需要根据type的值进行转换
if (detail.getType() != null) {
String typeDesc = convertTypeToString(detail.getType());
detail.setTypeDesc(languageTranslationUtil.translate(typeDesc, lang));
}
// 翻译商品名称("商品名称")
if (detail.getGoodsName() != null) {
detail.setGoodsName(languageTranslationUtil.translate(detail.getGoodsName(), lang));
}
}
}
}
/**
* 将类型数字转换为中文描述
*/
private String convertTypeToString(Integer type) {
if (type == null) return "";
switch (type) {
case 0: return "充值";
case 1: return "消耗";
case 2: return "退款";
default: return "未知类型";
}
}
}

45
src/main/java/com/example/demo/controller/coin/MarketController.java

@ -1,14 +1,16 @@
package com.example.demo.controller.coin;
import com.example.demo.config.interfac.Log;
import com.example.demo.domain.entity.Market;
import com.example.demo.domain.vo.coin.Result;
import com.example.demo.service.coin.MarketService;
import com.example.demo.Util.LanguageTranslationUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/market")
@ -19,10 +21,39 @@ public class MarketController {
@Autowired
private MarketService marketService;
// @Log("获取市场")
// 注入多语言转换工具类
@Autowired
private LanguageTranslationUtil languageTranslationUtil;
// @Log("获取市场")
@RequestMapping("/selectMarket")
public Result selectMarket()
{
return Result.success(marketService.selectMarket());
public Result selectMarket(@RequestHeader(defaultValue = "zh_CN") String lang) {
try {
List<Market> markets = marketService.selectMarket();
// 对市场名称进行多语言转换
translateMarketNames(markets, lang);
return Result.success(markets);
} catch (Exception e) {
log.error("获取市场列表失败", e);
return Result.error("获取市场列表失败");
}
}
/**
* 递归转换市场名称为指定语言
*/
private void translateMarketNames(List<Market> markets, String lang) {
if (markets != null) {
for (Market market : markets) {
// 将市场名称转换为目标语言
String translatedName = languageTranslationUtil.translate(market.getName(), lang);
market.setName(translatedName);
// 递归处理子市场
if (market.getChildren() != null && !market.getChildren().isEmpty()) {
translateMarketNames(market.getChildren(), lang);
}
}
}
}
}

30
src/main/java/com/example/demo/controller/coin/MenuController.java

@ -5,6 +5,7 @@ import com.example.demo.domain.vo.coin.MenuVo;
import com.example.demo.domain.vo.coin.Result;
import com.example.demo.domain.vo.coin.RoleVo;
import com.example.demo.service.coin.MenuService;
import com.example.demo.Util.LanguageTranslationUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@ -31,11 +32,17 @@ public class MenuController {
@Autowired
private MenuService menuService;
//获取权限树
// 注入多语言转换工具类
@Autowired
private LanguageTranslationUtil languageTranslationUtil;
//获取权限树
// @Log("获取权限树")
@PostMapping("/tree")
public Result getPermissionTree(@RequestBody RoleVo roleVo) {
public Result getPermissionTree(@RequestBody RoleVo roleVo, @RequestHeader(defaultValue = "zh_CN") String lang) {
List<MenuVo> permissionTree = menuService.getPermissionTree(roleVo.getId());
// 对菜单名称进行多语言转换
translateMenuNames(permissionTree, lang);
return Result.success(permissionTree);
}
@ -52,4 +59,23 @@ public class MenuController {
public Result updatePermission(@RequestBody RoleVo roleVo) {
return menuService.updatePermission(roleVo);
}
/**
* 递归转换菜单名称为指定语言
*/
private void translateMenuNames(List<MenuVo> menus, String lang) {
if (menus != null) {
for (MenuVo menu : menus) {
// 将菜单名称转换为目标语言
if (menu.getMenuName() != null) {
String translatedName = languageTranslationUtil.translate(menu.getMenuName(), lang);
menu.setMenuName(translatedName);
}
// 递归处理子菜单
if (menu.getChildren() != null && !menu.getChildren().isEmpty()) {
translateMenuNames(menu.getChildren(), lang);
}
}
}
}
}

56
src/main/java/com/example/demo/controller/coin/RateController.java

@ -1,6 +1,6 @@
package com.example.demo.controller.coin;
import com.example.demo.Util.LanguageTranslationUtil;
import com.example.demo.config.interfac.Log;
import com.example.demo.domain.entity.Rate;
import com.example.demo.domain.vo.coin.Page;
@ -17,7 +17,6 @@ import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/rate")
@RequiredArgsConstructor
@ -28,17 +27,28 @@ public class RateController {
@Autowired
private RateService rateService;
// 注入多语言转换工具类
@Autowired
private LanguageTranslationUtil languageTranslationUtil;
//货币汇率列表
@Log("获取汇率列表")
@PostMapping("/selectAll")
public Result selectAll(@RequestBody Page page){
public Result selectAll(@RequestBody Page page, @RequestHeader(defaultValue = "zh_CN") String lang){
if (ObjectUtils.isEmpty(page.getPageNum())) {
return Result.error("页码数为空!");
}
if (ObjectUtils.isEmpty(page.getPageSize())) {
return Result.error("页大小为空!");
} else {
return Result.success(rateService.selectAll(page.getPageNum(), page.getPageSize()));
Result result = Result.success(rateService.selectAll(page.getPageNum(), page.getPageSize()));
// 对返回结果进行多语言转换
if (result.getCode() == 200 && result.getData() instanceof com.github.pagehelper.PageInfo) {
com.github.pagehelper.PageInfo<com.example.demo.domain.vo.coin.RateDetail> pageInfo =
(com.github.pagehelper.PageInfo<com.example.demo.domain.vo.coin.RateDetail>) result.getData();
translateRateDetails(pageInfo, lang);
}
return result;
}
}
@ -71,17 +81,47 @@ public class RateController {
if (rate.getNum() == null || rate.getNum().equals(BigDecimal.ZERO)) {
return Result.error("汇率数值存在异常");
}else
return Result.success("编辑成功");
return Result.success("编辑成功");
}
//查询货币名称列表
@PostMapping("/listRateName")
public Result listRateName(){
public Result listRateName(@RequestHeader(defaultValue = "zh_CN") String lang){
try {
List<Rate> rate= rateService.listRateName();
return Result.success(rate);
List<Rate> rates = rateService.listRateName();
// 对返回结果进行多语言转换
translateRates(rates, lang);
return Result.success(rates);
} catch (Exception e) {
return Result.error("获取货币列表失败");
}
}
/**
* 转换汇率详情列表的多语言字段
*/
private void translateRateDetails(com.github.pagehelper.PageInfo<com.example.demo.domain.vo.coin.RateDetail> pageInfo, String lang) {
if (pageInfo != null && pageInfo.getList() != null) {
for (com.example.demo.domain.vo.coin.RateDetail rateDetail : pageInfo.getList()) {
if (rateDetail.getRateName() != null) {
String translatedName = languageTranslationUtil.translate(rateDetail.getRateName(), lang);
rateDetail.setRateName(translatedName);
}
}
}
}
/**
* 转换汇率列表的多语言字段
*/
private void translateRates(List<Rate> rates, String lang) {
if (rates != null && !rates.isEmpty()) {
for (Rate rate : rates) {
if (rate.getRateName() != null) {
String translatedName = languageTranslationUtil.translate(rate.getRateName(), lang);
rate.setRateName(translatedName);
}
}
}
}
}

64
src/main/java/com/example/demo/controller/coin/RechargeController.java

@ -1,10 +1,12 @@
package com.example.demo.controller.coin;
import com.example.demo.Util.JWTUtil;
import com.example.demo.Util.LanguageTranslationUtil;
import com.example.demo.config.interfac.Log;
import com.example.demo.domain.entity.Admin;
import com.example.demo.domain.vo.coin.*;
import com.example.demo.service.coin.RechargeService;
import com.github.pagehelper.PageInfo;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -38,10 +40,14 @@ public class RechargeController {
@Autowired
private RechargeService rechargeService;
// 注入多语言转换工具类
@Autowired
private LanguageTranslationUtil languageTranslationUtil;
//充值明细
@Log("获取全部充值明细")
@PostMapping("/selectAll")
public Result selcetAll(@RequestBody Page page) {
public Result selectAll(@RequestBody Page page, @RequestHeader(defaultValue = "zh_CN") String lang) {
try {
if (ObjectUtils.isEmpty(page.getPageNum())) {
return Result.error("页码数为空!");
@ -60,20 +66,23 @@ public class RechargeController {
else{
return Result.error("角色为空");
}
return Result.success(rechargeService.selectAll(page.getPageNum(), page.getPageSize(),page.getRechargeUser()));
Result result = Result.success(rechargeService.selectAll(page.getPageNum(), page.getPageSize(),page.getRechargeUser()));
// 对返回结果进行多语言转换
if (result.getCode() == 200 && result.getData() instanceof PageInfo) {
PageInfo<RechargeUser> pageInfo = (PageInfo<RechargeUser>) result.getData();
translateRechargeUsers(pageInfo, lang);
}
return result;
}
} catch (Exception e) {
return Result.error(e.getMessage());
}
}
//充值明细筛选
@Log("充值明细筛选")
@PostMapping("/selectBy")
public Result selcetBy(@RequestBody Page page) {
public Result selectBy(@RequestBody Page page, @RequestHeader(defaultValue = "zh_CN") String lang) {
try {
if (ObjectUtils.isEmpty(page.getPageNum())) {
return Result.error("页码数为空!");
@ -91,7 +100,13 @@ public class RechargeController {
page.getRechargeUser().setMarkets(markets);
}
}
return Result.success(rechargeService.selectBy(page.getPageNum(), page.getPageSize(), page.getRechargeUser()));
Result result = Result.success(rechargeService.selectBy(page.getPageNum(), page.getPageSize(), page.getRechargeUser()));
// 对返回结果进行多语言转换
if (result.getCode() == 200 && result.getData() instanceof PageInfo) {
PageInfo<RechargeUser> pageInfo = (PageInfo<RechargeUser>) result.getData();
translateRechargeUsers(pageInfo, lang);
}
return result;
}
} catch (Exception e) {
e.printStackTrace();
@ -132,7 +147,7 @@ public class RechargeController {
}
public Result selcet(@RequestBody Page page) {
public Result select(@RequestBody Page page) {
try {
if (ObjectUtils.isEmpty(page.getPageNum())) {
return Result.error("页码数为空!");
@ -149,4 +164,37 @@ public class RechargeController {
}
/**
* 转换充值用户信息的多语言字段
*/
private void translateRechargeUsers(PageInfo<RechargeUser> pageInfo, String lang) {
if (pageInfo != null && pageInfo.getList() != null) {
for (RechargeUser user : pageInfo.getList()) {
// 翻译市场名称
if (user.getMarket() != null) {
user.setMarket(languageTranslationUtil.translate(user.getMarket(), lang));
}
// 翻译活动名称
if (user.getActivity() != null) {
user.setActivity(languageTranslationUtil.translate(user.getActivity(), lang));
}
// 翻译汇率名称
if (user.getRateName() != null) {
user.setRateName(languageTranslationUtil.translate(user.getRateName(), lang));
}
// 翻译支付方式
if (user.getPayModel() != null) {
user.setPayModel(languageTranslationUtil.translate(user.getPayModel(), lang));
}
// 翻译支付平台
if (user.getPayPlatform() != null) {
user.setPayPlatform(languageTranslationUtil.translate(user.getPayPlatform(), lang));
}
// 翻译备注
if (user.getRemark() != null) {
user.setRemark(languageTranslationUtil.translate(user.getRemark(), lang));
}
}
}
}
}

71
src/main/java/com/example/demo/controller/coin/RefundController.java

@ -1,9 +1,11 @@
package com.example.demo.controller.coin;
import com.example.demo.Util.JWTUtil;
import com.example.demo.Util.LanguageTranslationUtil;
import com.example.demo.config.interfac.Log;
import com.example.demo.domain.entity.Admin;
import com.example.demo.service.coin.RefundService;
import com.github.pagehelper.PageInfo;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -36,6 +38,10 @@ public class RefundController {
@Autowired
private RefundService refundService;
// 注入多语言转换工具类
@Autowired
private LanguageTranslationUtil languageTranslationUtil;
//退款明细
@Log("获取全部退款明细")
@PostMapping("/selectAll")
@ -68,7 +74,7 @@ public class RefundController {
//退款筛选
@Log("退款明细筛选")
@PostMapping("/selectBy")
public Result selcetBy(@RequestBody Page page) {
public Result selcetBy(@RequestBody Page page, @RequestHeader(defaultValue = "zh_CN") String lang) {
try {
if (ObjectUtils.isEmpty(page.getPageNum())) {
return Result.error("页码数为空!");
@ -84,7 +90,13 @@ public class RefundController {
List<String> markets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));
page.getRefundUser().setMarkets(markets);
}
return Result.success(refundService.selectBy(page.getPageNum(), page.getPageSize(), page.getRefundUser()));
Result result = Result.success(refundService.selectBy(page.getPageNum(), page.getPageSize(), page.getRefundUser()));
// 对返回结果进行多语言转换
if (result.getCode() == 200 && result.getData() instanceof PageInfo) {
PageInfo<RefundUser> pageInfo = (PageInfo<RefundUser>) result.getData();
translateRefundUsers(pageInfo, lang);
}
return result;
}
} catch (Exception e) {
return Result.error("请检查筛选数据的格式");
@ -115,8 +127,10 @@ public class RefundController {
//获取退款类型
@Log("获取退款类型")
@PostMapping("/refundType")
public Result getRefundType() {
public Result getRefundType(@RequestHeader(defaultValue = "zh_CN") String lang) {
List<String> list = refundService.getRefundType();
// 对退款类型进行多语言转换
translateRefundTypes(list, lang);
return Result.success(list);
}
@ -156,4 +170,55 @@ public class RefundController {
}
}
/**
* 转换退款用户信息的多语言字段
*/
private void translateRefundUsers(PageInfo<RefundUser> pageInfo, String lang) {
if (pageInfo != null && pageInfo.getList() != null) {
for (RefundUser user : pageInfo.getList()) {
// 翻译市场名称
if (user.getMarket() != null) {
user.setMarket(languageTranslationUtil.translate(user.getMarket(), lang));
}
// 翻译商品名称
if (user.getGoodsName() != null) {
user.setGoodsName(languageTranslationUtil.translate(user.getGoodsName(), lang));
}
// 翻译退款类型
if (user.getRefundType() != null) {
user.setRefundType(languageTranslationUtil.translate(user.getRefundType(), lang));
}
// 翻译退款模型描述
if (user.getRefundModel() != null) {
String refundModelDesc = convertRefundModelToString(user.getRefundModel());
user.setRefundModelDesc(languageTranslationUtil.translate(refundModelDesc, lang));
}
}
}
}
/**
* 转换退款类型列表的多语言字段
*/
private void translateRefundTypes(List<String> refundTypes, String lang) {
if (refundTypes != null && !refundTypes.isEmpty()) {
for (int i = 0; i < refundTypes.size(); i++) {
String translatedType = languageTranslationUtil.translate(refundTypes.get(i), lang);
refundTypes.set(i, translatedType);
}
}
}
/**
* 将退款模型数字转换为中文描述
*/
private String convertRefundModelToString(Byte refundModel) {
if (refundModel == null) return "";
switch (refundModel) {
case 0: return "全部退款";
case 1: return "部分退款";
default: return "未知退款方式";
}
}
}

153
src/main/java/com/example/demo/controller/coin/TranslationController.java

@ -0,0 +1,153 @@
package com.example.demo.controller.coin;
import com.example.demo.config.interfac.Log;
import com.example.demo.domain.DTO.TranslationQueryRequest;
import com.example.demo.domain.entity.Translation;
import com.example.demo.domain.vo.coin.Result;
import com.example.demo.service.coin.TranslationService;
import com.example.demo.Util.LanguageTranslationUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/language")
@RequiredArgsConstructor
@Slf4j
@CrossOrigin
public class TranslationController {
private final TranslationService translationService;
private final LanguageTranslationUtil languageTranslationUtil;
// 查询所有翻译记录可加条件
@PostMapping("/getTranslation")
public Result getTranslations(@RequestBody TranslationQueryRequest request) {
try {
// 设置分页参数
PageHelper.startPage(request.getPageNum(), request.getPageSize());
String chineseSimplified = request.getChineseSimplified();
String languageStatus = request.getLanguageStatus();
List<Translation> translations;
if (chineseSimplified != null && !chineseSimplified.isEmpty() &&
languageStatus != null && !languageStatus.isEmpty()) {
// 同时存在模糊查询和语言状态查询
String[] parts = languageStatus.split("/");
if (parts.length != 2) {
return Result.error("languageStatus 参数格式错误,应为 'language/isTranslated'");
}
String language = parts[0];
boolean isTranslated = Boolean.parseBoolean(parts[1]);
translations = translationService.findByChineseSimplifiedAndLanguageStatus(
chineseSimplified, language, isTranslated);
} else if (chineseSimplified != null && !chineseSimplified.isEmpty()) {
// 只进行模糊查询
translations = translationService.findByChineseSimplifiedLike(chineseSimplified);
} else if (languageStatus != null && !languageStatus.isEmpty()) {
// 只进行语言状态查询
String[] parts = languageStatus.split("/");
if (parts.length != 2) {
return Result.error("languageStatus 参数格式错误,应为 'language/isTranslated'");
}
String language = parts[0];
boolean isTranslated = Boolean.parseBoolean(parts[1]);
translations = translationService.findByLanguageAndTranslationStatus(language, isTranslated);
} else {
// 查询所有
translations = translationService.findAll();
}
// 使用 PageInfo 封装分页结果
PageInfo<Translation> pageInfo = new PageInfo<>(translations);
// 构造返回数据
Map<String, Object> resultData = new HashMap<>();
resultData.put("list", pageInfo.getList());
resultData.put("total", pageInfo.getTotal());
resultData.put("pageNum", pageInfo.getPageNum());
resultData.put("pageSize", pageInfo.getPageSize());
return Result.success(resultData);
} catch (IllegalArgumentException e) {
return Result.error("参数错误:" + e.getMessage());
} catch (Exception e) {
log.error("查询翻译记录失败", e);
return Result.error("查询翻译记录失败");
}
}
// 添加新的翻译记录
@Log("添加翻译记录")
@PostMapping("/addTranslation")
public Result addTranslation(@RequestBody Translation translation) {
try {
boolean result = translationService.add(translation);
if (result) {
return Result.success("添加翻译记录成功");
} else {
return Result.error("添加翻译记录失败");
}
} catch (RuntimeException e) {
// 捕获重复插入异常
if ("简体中文已存在".equals(e.getMessage())) {
return Result.error("添加翻译记录失败:简体中文已存在");
} else {
log.error("添加翻译记录失败", e);
return Result.error("添加翻译记录失败");
}
}
}
// 更新翻译记录
@Log("更新翻译记录")
@PostMapping("/updateTranslation")
public Result updateTranslation(@RequestBody Translation translation) {
try {
boolean result = translationService.update(translation);
if (result) {
// 更新成功后刷新缓存
languageTranslationUtil.refreshAllCache();
return Result.success("更新翻译记录成功");
} else {
return Result.error("更新翻译记录失败");
}
} catch (Exception e) {
log.error("更新翻译记录失败", e);
return Result.error("更新翻译记录失败");
}
}
// 删除翻译记录
@Log("删除翻译记录")
@PostMapping("/deleteTranslation")
public Result deleteTranslation(@RequestBody Translation request) {
try {
// 先获取要删除的记录用于后续清理缓存
Translation translationToDelete = translationService.findById(request.getId());
boolean result = translationService.deleteById(request.getId());
if (result) {
// 删除成功后清理相关缓存
if (translationToDelete != null) {
languageTranslationUtil.removeFromCache(translationToDelete.getChineseSimplified());
}
return Result.success("删除翻译记录成功");
} else {
return Result.error("删除翻译记录失败");
}
} catch (Exception e) {
log.error("删除翻译记录失败", e);
return Result.error("删除翻译记录失败");
}
}
}

27
src/main/java/com/example/demo/controller/coin/UserController.java

@ -5,6 +5,7 @@ import com.example.demo.domain.entity.User;
import com.example.demo.domain.vo.coin.GoldUser;
import com.example.demo.domain.vo.coin.Result;
import com.example.demo.service.coin.UserService;
import com.example.demo.Util.LanguageTranslationUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@ -29,12 +30,22 @@ public class UserController {
@Autowired
private UserService userService;
// 注入多语言转换工具类
@Autowired
private LanguageTranslationUtil languageTranslationUtil;
//查找用户
@Log("查找客户")
@PostMapping("/selectUser")
public Result selectUser(@RequestBody GoldUser user) {
public Result selectUser(@RequestBody GoldUser user, @RequestHeader(defaultValue = "zh_CN") String lang) {
try {
return userService.selectUser(user.getJwcode().toString());
Result result = userService.selectUser(user.getJwcode().toString());
// 对返回结果进行多语言转换
if (result.getCode() == 200 && result.getData() instanceof GoldUser) {
GoldUser goldUser = (GoldUser) result.getData();
translateGoldUser(goldUser, lang);
}
return result;
} catch (Exception e) {
return Result.error("请检查输入精网号");
}
@ -83,4 +94,16 @@ public class UserController {
return Result.error("更新失败");
}
}
/**
* 转换用户信息的多语言字段
*/
private void translateGoldUser(GoldUser goldUser, String lang) {
if (goldUser != null) {
// 翻译市场名称
if (goldUser.getMarket() != null) {
goldUser.setMarket(languageTranslationUtil.translate(goldUser.getMarket(), lang));
}
}
}
}

127
src/main/java/com/example/demo/controller/coin/WorkbenchController.java

@ -1,6 +1,7 @@
package com.example.demo.controller.coin;
import com.example.demo.Util.JWTUtil;
import com.example.demo.Util.LanguageTranslationUtil;
import com.example.demo.config.interfac.Log;
import com.example.demo.domain.entity.Admin;
import com.example.demo.domain.vo.coin.WorkbenchCard;
@ -21,15 +22,6 @@ import org.springframework.web.context.request.ServletRequestAttributes;
import java.util.List;
/**
* @program: gold-java
* @ClassName WorkbenchController
* @description: 工作台相关
* @author: Ethan
* @create: 202506-17 17:13
* @Version 1.0
**/
@RestController
@RequestMapping("/workbench")
@RequiredArgsConstructor
@ -38,7 +30,7 @@ import java.util.List;
public class WorkbenchController {
@Autowired
private WorkbenchService workbenchService;
private WorkbenchService workbenchService;
@Autowired
private StatisticsService statisticsService;
@Autowired
@ -46,63 +38,136 @@ public class WorkbenchController {
@Autowired
private StatisticsMapper statisticsMapper;
/*
// 注入多语言转换工具类
@Autowired
private LanguageTranslationUtil languageTranslationUtil;
/**
获取各地区工作台卡片的数据
*/
@Log("获取工作台卡片数据")
@PostMapping("/getCard")
public ResponseEntity<WorkbenchCard> card1(@RequestBody WorkbenchCard workbench) throws Exception{
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String token = request.getHeader("token");
Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
String account = admin.getAccount();
public ResponseEntity<WorkbenchCard> card1(@RequestBody WorkbenchCard workbench,
@RequestHeader(defaultValue = "zh_CN") String lang) throws Exception {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String token = request.getHeader("token");
Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
String account = admin.getAccount();
//获取当前用户的市场列表
List<String> markets = workbenchService.getAdminMarket(account);
WorkbenchCard result;
//判断是否是总部
if (markets != null && markets.contains("总部")||markets.contains("研发部")) {
if (markets != null && (markets.contains("总部") || markets.contains("研发部"))) {
result = workbenchService.getCardCache(markets);//走缓存拿全部市场的缓存数据
} else {
result = workbenchService.getCard(markets);//不走缓存计算卡片属性
}
// 对结果进行多语言转换
translateWorkbenchCard(result, lang);
return ResponseEntity.ok(result);
}
/*
/**
获取各地区工作台图表的数据
*/
@Log("获取工作台图表数据")
@PostMapping("/getGraph")
public ResponseEntity<WorkbenchCard> graph1(@RequestBody WorkbenchCard workbench, @AuthenticationPrincipal Admin admin) {
public ResponseEntity<WorkbenchCard> graph1(@RequestBody WorkbenchCard workbench,
@AuthenticationPrincipal Admin admin,
@RequestHeader(defaultValue = "zh_CN") String lang) {
String account = admin.getAccount();
List<String> markets = workbenchService.getAdminMarket(account);
workbench.setMarkets(markets);
WorkbenchCard result = workbenchService.getGraph(workbench.getStartDate(), workbench.getEndDate(), workbench.getMarkets());
// 对结果进行多语言转换
translateWorkbenchCard(result, lang);
return ResponseEntity.ok(result);
}
//总营收
@PostMapping("/getTotalRevenue")
public ResponseEntity<List<WorkbenchRevenue>> getTotalRevenue(@RequestBody WorkbenchCard workbench,
@AuthenticationPrincipal Admin admin,
@RequestHeader(defaultValue = "zh_CN") String lang) {
String account = admin.getAccount();
List<String> markets = workbenchService.getRevenueMarket(account);
workbench.setMarkets(markets);
WorkbenchCard result =workbenchService.getGraph(workbench.getStartDate(),workbench.getEndDate(),workbench.getMarkets());
List<WorkbenchRevenue> result = workbenchService.getTotalRevenue(workbench.getStartDate(), workbench.getEndDate(), workbench.getMarkets());
// 对结果进行多语言转换
translateWorkbenchRevenue(result, lang);
return ResponseEntity.ok(result);
}
//单个地区工作台图表
@Log("获取单个地区工作台图表数据")
@PostMapping("/getSingleGraph")
public ResponseEntity<WorkbenchCard> singleGraph1(@RequestBody WorkbenchCard workbench, @AuthenticationPrincipal Admin admin) {
public ResponseEntity<WorkbenchCard> singleGraph1(@RequestBody WorkbenchCard workbench,
@AuthenticationPrincipal Admin admin,
@RequestHeader(defaultValue = "zh_CN") String lang) {
String account = admin.getAccount();
List<String> markets = workbenchService.getAdminMarket(account);
workbench.setMarkets(markets);
WorkbenchCard result =workbenchService.getSingleGraph(workbench.getStartDate(),workbench.getEndDate(),workbench.getMarkets());
WorkbenchCard result = workbenchService.getSingleGraph(workbench.getStartDate(), workbench.getEndDate(), workbench.getMarkets());
// 对结果进行多语言转换
translateWorkbenchCard(result, lang);
return ResponseEntity.ok(result);
}
//总营收
@PostMapping("/getTotalRevenue")
public ResponseEntity<List<WorkbenchRevenue>> getTotalRevenue(@RequestBody WorkbenchCard workbench, @AuthenticationPrincipal Admin admin) {
String account = admin.getAccount();
List<String> markets = workbenchService.getRevenueMarket(account);
workbench.setMarkets(markets);
List<WorkbenchRevenue> result =workbenchService.getTotalRevenue(workbench.getStartDate(),workbench.getEndDate(),workbench.getMarkets());
return ResponseEntity.ok(result);
/**
* 转换工作台卡片的多语言字段
*/
private void translateWorkbenchCard(WorkbenchCard workbenchCard, String lang) {
if (workbenchCard != null) {
// 翻译市场卡片中的市场名称
if (workbenchCard.getMarketCards() != null) {
for (com.example.demo.domain.vo.coin.WorkbenchMarketCard marketCard : workbenchCard.getMarketCards()) {
if (marketCard.getMarket() != null) {
String translatedMarket = languageTranslationUtil.translate(marketCard.getMarket(), lang);
marketCard.setMarket(translatedMarket);
}
}
}
// 翻译图表数据中的市场名称
if (workbenchCard.getMarketGraphs() != null) {
for (com.example.demo.domain.vo.coin.WorkbenchMarketGraph marketGraph : workbenchCard.getMarketGraphs()) {
if (marketGraph.getMarket() != null) {
String translatedMarket = languageTranslationUtil.translate(marketGraph.getMarket(), lang);
marketGraph.setMarket(translatedMarket);
}
}
}
// 翻译市场列表中的市场名称
if (workbenchCard.getMarkets() != null) {
for (int i = 0; i < workbenchCard.getMarkets().size(); i++) {
String translatedMarket = languageTranslationUtil.translate(workbenchCard.getMarkets().get(i), lang);
workbenchCard.getMarkets().set(i, translatedMarket);
}
}
}
}
/**
* 转换工作台营收数据的多语言字段
*/
private void translateWorkbenchRevenue(List<WorkbenchRevenue> revenueList, String lang) {
if (revenueList != null) {
for (WorkbenchRevenue revenue : revenueList) {
if (revenue.getMarket() != null) {
String translatedMarket = languageTranslationUtil.translate(revenue.getMarket(), lang);
revenue.setMarket(translatedMarket);
}
}
}
}
}

11
src/main/java/com/example/demo/domain/DTO/TranslationQueryRequest.java

@ -0,0 +1,11 @@
package com.example.demo.domain.DTO;
import lombok.Data;
@Data
public class TranslationQueryRequest {
private int pageNum = 1;
private int pageSize = 10;
private String chineseSimplified;
private String languageStatus; // format: "language/isTranslated" e.g. "en/true"
}

25
src/main/java/com/example/demo/domain/entity/Translation.java

@ -0,0 +1,25 @@
package com.example.demo.domain.entity;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* 多语言配置实体类
*/
@Data
@NoArgsConstructor
public class Translation implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String chineseSimplified; // 中文简体原文
private String english; // 英语
private String thai; // 泰语
private String chineseTraditional; // 中文繁体
private String malay; // 马来语
private String vietnamese; // 越南语
private Date configTime; // 更新时间
}

1
src/main/java/com/example/demo/domain/vo/coin/ConsumeUser.java

@ -59,6 +59,7 @@ public class ConsumeUser implements Serializable {
private String adminName; //提交人姓名
@ExcelProperty(value = "是否退款", converter = RefundConverter.class)
private Integer isRefund; //是否退款
private String isRefundDesc; // 退款状态描述用于多语言翻译
@ExcelProperty("消耗时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date createTime; // 消费时间

1
src/main/java/com/example/demo/domain/vo/coin/GoldDetail.java

@ -36,6 +36,7 @@ public class GoldDetail {
private String payPlatform; // 支付平台
@ExcelProperty("更新类型")
private Integer type; // 类型
private String typeDesc; // 类型描述用于多语言翻译
@ExcelProperty("金币数量")
private BigDecimal sumGold; // 总金币
@ExcelProperty("永久金币")

1
src/main/java/com/example/demo/domain/vo/coin/RefundAudit.java

@ -30,6 +30,7 @@ public class RefundAudit {
private String market; // 所属地区
private List<String> markets; // 所属地区
private Integer refundModel; // 退款方式-全额 部分
private String refundModelDesc; // 退款方式描述用于多语言翻译
private String goodsName; // 商品名称
private Integer rateId; // 汇率ID

1
src/main/java/com/example/demo/domain/vo/coin/RefundUser.java

@ -41,6 +41,7 @@ public class RefundUser {
private String refundType; // 退款类型
@ExcelProperty("退款方式")
private Byte refundModel; // 退款方式0全部/1部分退款
private String refundModelDesc;
@ExcelProperty("退款金币总数")
private BigDecimal sumGold; // 金币总数
@ExcelProperty("永久金币")

42
src/main/java/com/example/demo/mapper/coin/TranslationMapper.java

@ -0,0 +1,42 @@
package com.example.demo.mapper.coin;
import com.example.demo.domain.entity.Translation;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface TranslationMapper {
// 查询所有翻译记录
List<Translation> findAll();
// 插入新的翻译记录
int insert(Translation translation);
// 更新翻译记录
int update(Translation translation);
// 删除翻译记录
int deleteById(Integer id);
// 根据部分中文简体内容模糊查询翻译记录
List<Translation> findByChineseSimplifiedLike(@Param("chineseSimplified") String chineseSimplified);
// 根据中文简体内容精确查询翻译记录
Translation findByChineseSimplified(@Param("chineseSimplified") String chineseSimplified);
// 根据语言和翻译状态查询翻译记录
List<Translation> findByLanguageAndTranslationStatus(
@Param("languageColumn") String languageColumn,
@Param("isTranslated") boolean isTranslated
);
List<Translation> findByChineseSimplifiedAndLanguageStatus(
@Param("chineseSimplified") String chineseSimplified,
@Param("languageColumn") String languageColumn,
@Param("isTranslated") boolean isTranslated
);
Translation findById(Integer id);
}

36
src/main/java/com/example/demo/service/coin/TranslationService.java

@ -0,0 +1,36 @@
package com.example.demo.service.coin;
import com.example.demo.domain.entity.Translation;
import java.util.List;
public interface TranslationService {
// 查询所有翻译记录
List<Translation> findAll();
// 添加新的翻译记录
boolean add(Translation translation);
// 更新翻译记录
boolean update(Translation translation);
// 删除翻译记录
boolean deleteById(Integer id);
// 根据部分中文简体内容模糊查询翻译记录
List<Translation> findByChineseSimplifiedLike(String chineseSimplified);
// 根据中文简体内容精确查询翻译记录
Translation findByChineseSimplified(String chineseSimplified);
// 根据语言和翻译状态查询翻译记录
List<Translation> findByLanguageAndTranslationStatus(String language, boolean isTranslated);
List<Translation> findByChineseSimplifiedAndLanguageStatus(
String chineseSimplified,
String language,
boolean isTranslated
);
Translation findById(Integer id);
}

2
src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java

@ -144,7 +144,7 @@ public class ExportExcelServiceImpl implements ExportExcelService {
List<String> markets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));
rechargeUser.setMarkets(markets);
page.setRechargeUser(rechargeUser);
return rechargeController.selcet(page);
return rechargeController.select(page);
} catch (Exception e) {
throw new RuntimeException(e);
}

97
src/main/java/com/example/demo/serviceImpl/coin/TranslationServiceImpl.java

@ -0,0 +1,97 @@
package com.example.demo.serviceImpl.coin;
import com.example.demo.domain.entity.Translation;
import com.example.demo.mapper.coin.TranslationMapper;
import com.example.demo.service.coin.TranslationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class TranslationServiceImpl implements TranslationService {
@Autowired
private TranslationMapper translationMapper;
@Override
public List<Translation> findAll() {
return translationMapper.findAll();
}
@Override
public boolean add(Translation translation) {
// 使用精确匹配检查是否存在相同的 chineseSimplified
Translation existingTranslation = translationMapper.findByChineseSimplified(translation.getChineseSimplified());
if (existingTranslation != null) {
throw new RuntimeException("简体中文已存在");
}
return translationMapper.insert(translation) > 0;
}
@Override
public boolean update(Translation translation) {
return translationMapper.update(translation) > 0;
}
@Override
public boolean deleteById(Integer id) {
return translationMapper.deleteById(id) > 0;
}
@Override
public List<Translation> findByChineseSimplifiedLike(String chineseSimplified) {
return translationMapper.findByChineseSimplifiedLike(chineseSimplified);
}
@Override
public Translation findByChineseSimplified(String chineseSimplified) {
return translationMapper.findByChineseSimplified(chineseSimplified);
}
@Override
public List<Translation> findByLanguageAndTranslationStatus(String language, boolean isTranslated) {
// 语言字段映射关系
Map<String, String> languageColumnMap = new HashMap<>();
languageColumnMap.put("en", "english"); // 英语
languageColumnMap.put("th", "thai"); // 泰语
languageColumnMap.put("zh_TW", "chinese_traditional"); // 繁体中文
languageColumnMap.put("ms", "malay"); // 马来语
languageColumnMap.put("vi", "vietnamese"); // 越南语
String columnName = languageColumnMap.get(language.toLowerCase());
if (columnName == null) {
throw new IllegalArgumentException("不支持的语言类型: " + language);
}
return translationMapper.findByLanguageAndTranslationStatus(columnName, isTranslated);
}
@Override
public List<Translation> findByChineseSimplifiedAndLanguageStatus(
String chineseSimplified,
String language,
boolean isTranslated) {
// 语言字段映射关系
Map<String, String> languageColumnMap = new HashMap<>();
languageColumnMap.put("en", "english"); // 英语
languageColumnMap.put("th", "thai"); // 泰语
languageColumnMap.put("zh_TW", "chinese_traditional"); // 繁体中文
languageColumnMap.put("ms", "malay"); // 马来语
languageColumnMap.put("vi", "vietnamese"); // 越南语
String columnName = languageColumnMap.get(language.toLowerCase());
if (columnName == null) {
throw new IllegalArgumentException("不支持的语言类型: " + language);
}
return translationMapper.findByChineseSimplifiedAndLanguageStatus(
chineseSimplified, columnName, isTranslated);
}
@Override
public Translation findById(Integer id) {
return translationMapper.findById(id);
}
}

106
src/main/resources/mapper/TranslationMapper.xml

@ -0,0 +1,106 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.coin.TranslationMapper">
<resultMap id="TranslationMap" type="com.example.demo.domain.entity.Translation">
<id property="id" column="id"/>
<result property="chineseSimplified" column="chinese_simplified"/>
<result property="english" column="english"/>
<result property="thai" column="thai"/>
<result property="chineseTraditional" column="chinese_traditional"/>
<result property="malay" column="malay"/>
<result property="vietnamese" column="vietnamese"/>
<result property="configTime" column="config_time"/>
</resultMap>
<!-- 查询所有翻译记录 -->
<select id="findAll" resultMap="TranslationMap">
SELECT * FROM translation ORDER BY config_time DESC
</select>
<!-- 插入新的翻译记录 -->
<insert id="insert" parameterType="com.example.demo.domain.entity.Translation">
INSERT INTO translation (
chinese_simplified,
english,
thai,
chinese_traditional,
malay,
vietnamese,
config_time
) VALUES (
#{chineseSimplified},
#{english},
#{thai},
#{chineseTraditional},
#{malay},
#{vietnamese},
NOW()
)
</insert>
<!-- 更新翻译记录 -->
<update id="update" parameterType="com.example.demo.domain.entity.Translation">
UPDATE translation
<set>
<if test="chineseSimplified != null">chinese_simplified = #{chineseSimplified},</if>
<if test="english != null">english = #{english},</if>
<if test="thai != null">thai = #{thai},</if>
<if test="chineseTraditional != null">chinese_traditional = #{chineseTraditional},</if>
<if test="malay != null">malay = #{malay},</if>
<if test="vietnamese != null">vietnamese = #{vietnamese},</if>
config_time = NOW()
</set>
WHERE id = #{id}
</update>
<!-- 删除翻译记录 -->
<delete id="deleteById">
DELETE FROM translation WHERE id = #{id}
</delete>
<!-- 根据部分中文简体内容模糊查询翻译记录 -->
<select id="findByChineseSimplifiedLike" resultMap="TranslationMap">
SELECT * FROM translation
WHERE chinese_simplified LIKE CONCAT('%', #{chineseSimplified}, '%')
ORDER BY config_time DESC
</select>
<select id="findByChineseSimplified" parameterType="string" resultType="com.example.demo.domain.entity.Translation">
SELECT * FROM translation WHERE chinese_simplified = #{chineseSimplified}
ORDER BY config_time DESC
</select>
<select id="findByLanguageAndTranslationStatus" resultMap="TranslationMap">
SELECT * FROM translation
<where>
<choose>
<when test="isTranslated == true">
${languageColumn} IS NOT NULL AND ${languageColumn} != ''
</when>
<otherwise>
${languageColumn} IS NULL OR ${languageColumn} = ''
</otherwise>
</choose>
</where>
ORDER BY config_time DESC
</select>
<select id="findByChineseSimplifiedAndLanguageStatus" resultMap="TranslationMap">
SELECT * FROM translation
WHERE chinese_simplified LIKE CONCAT('%', #{chineseSimplified}, '%')
<choose>
<when test="isTranslated == true">
AND ${languageColumn} IS NOT NULL AND ${languageColumn} != ''
</when>
<otherwise>
AND (${languageColumn} IS NULL OR ${languageColumn} = '')
</otherwise>
</choose>
ORDER BY config_time DESC
</select>
<select id="findById" parameterType="int" resultType="com.example.demo.domain.entity.Translation">
SELECT * FROM translation WHERE id = #{id}
</select>
</mapper>
Loading…
Cancel
Save