TranslateService.java 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. package com.xy.service;
  2. import cn.hutool.core.collection.CollUtil;
  3. import cn.hutool.core.util.StrUtil;
  4. import cn.hutool.json.JSONArray;
  5. import cn.hutool.json.JSONObject;
  6. import cn.hutool.json.JSONUtil;
  7. import com.xy.annotate.RestMappingController;
  8. import com.xy.dto.TranslateDto;
  9. import com.xy.entity.SysMenu;
  10. import com.xy.service.impl.SysMenuServiceImpl;
  11. import com.xy.third.baidu.TransApi;
  12. import com.xy.utils.R;
  13. import io.swagger.annotations.Api;
  14. import io.swagger.annotations.ApiOperation;
  15. import lombok.RequiredArgsConstructor;
  16. import lombok.extern.slf4j.Slf4j;
  17. import org.springframework.cloud.client.loadbalancer.AsyncLoadBalancerAutoConfiguration;
  18. import org.springframework.scheduling.annotation.Async;
  19. import org.springframework.stereotype.Service;
  20. import org.springframework.validation.annotation.Validated;
  21. import org.springframework.web.bind.annotation.PostMapping;
  22. import org.springframework.web.bind.annotation.RequestBody;
  23. import java.util.ArrayList;
  24. import java.util.List;
  25. /**
  26. * 翻译服务
  27. */
  28. @Api(tags = "翻译服务")
  29. @Slf4j
  30. @Service
  31. @RequiredArgsConstructor
  32. @RestMappingController("/translate")
  33. public class TranslateService {
  34. private static final String APP_ID = "20240428002037687";
  35. private static final String SECURITY_KEY = "nXkFm4SaA2Wrmb42Xmky";
  36. private final SysMenuServiceImpl sysMenuService;
  37. private final AsyncLoadBalancerAutoConfiguration asyncLoadBalancerAutoConfiguration;
  38. /**
  39. * 调用百度翻译API
  40. *
  41. * @param query 待翻译的文本
  42. * @param lanSrc 原语言 zh
  43. * @param lanDst 目标语言 en
  44. * @return
  45. */
  46. public static String translate(String query, String lanSrc, String lanDst) {
  47. TransApi api = new TransApi(APP_ID, SECURITY_KEY);
  48. log.info("正在翻译文本:{}", query);
  49. JSONObject res = JSONUtil.parseObj(api.getTransResult(query, lanSrc, lanDst));
  50. JSONArray transResult = res.getJSONArray("trans_result");
  51. if (!JSONUtil.isNull(transResult)) {
  52. JSONObject jsonObject = transResult.getJSONObject(0);
  53. log.info("文本:{},翻译结果:{}", query, jsonObject.getStr("dst"));
  54. return jsonObject.getStr("dst");
  55. } else {
  56. log.info("文本:{},翻译失败:{}", query, JSONUtil.toJsonPrettyStr(res));
  57. return "-";
  58. }
  59. }
  60. @PostMapping("/menuOne")
  61. @ApiOperation("单个菜单翻译-同步返回结果")
  62. public R<String> translateMenuOne(@RequestBody @Validated TranslateDto.One one) {
  63. String content = one.getContent();
  64. String targetType = one.getTargetType();
  65. String translatedValue = translate(content, "zh", targetType);
  66. return R.ok(translatedValue);
  67. }
  68. /**
  69. * 全量菜单翻译
  70. *
  71. * @return
  72. */
  73. @PostMapping("/menuAll")
  74. @ApiOperation("菜单全量翻译-已翻译的忽略")
  75. public R<?> translateMenuAll() {
  76. translateAllMenu();
  77. return R.ok();
  78. }
  79. @Async
  80. protected void translateAllMenu() {
  81. List<SysMenu> sysMenus = sysMenuService.list();
  82. List<SysMenu> updateMenus = new ArrayList<>();
  83. for (SysMenu sysMenu : sysMenus) {
  84. String name = sysMenu.getName();
  85. String enName = sysMenu.getEnName();
  86. if (StrUtil.isEmpty(enName)) {
  87. //百度api翻译
  88. String translatedValue = translate(name, "zh", "en");
  89. sysMenu.setName(translatedValue);
  90. updateMenus.add(sysMenu);
  91. // 增加1.2秒的延迟
  92. try {
  93. Thread.sleep(1800);
  94. } catch (InterruptedException e) {
  95. Thread.currentThread().interrupt();
  96. log.error("线程中断异常", e);
  97. }
  98. }
  99. }
  100. if (CollUtil.isNotEmpty(updateMenus)) {
  101. sysMenuService.updateBatchById(updateMenus);
  102. }
  103. }
  104. }