123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- package com.xy.service;
- import cn.hutool.core.collection.CollUtil;
- import cn.hutool.core.util.StrUtil;
- import cn.hutool.json.JSONArray;
- import cn.hutool.json.JSONObject;
- import cn.hutool.json.JSONUtil;
- import com.xy.annotate.RestMappingController;
- import com.xy.dto.TranslateDto;
- import com.xy.entity.SysMenu;
- import com.xy.service.impl.SysMenuServiceImpl;
- import com.xy.third.baidu.TransApi;
- import com.xy.utils.R;
- import io.swagger.annotations.Api;
- import io.swagger.annotations.ApiOperation;
- import lombok.RequiredArgsConstructor;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.cloud.client.loadbalancer.AsyncLoadBalancerAutoConfiguration;
- import org.springframework.scheduling.annotation.Async;
- import org.springframework.stereotype.Service;
- import org.springframework.validation.annotation.Validated;
- import org.springframework.web.bind.annotation.PostMapping;
- import org.springframework.web.bind.annotation.RequestBody;
- import java.util.ArrayList;
- import java.util.List;
- /**
- * 翻译服务
- */
- @Api(tags = "翻译服务")
- @Slf4j
- @Service
- @RequiredArgsConstructor
- @RestMappingController("/translate")
- public class TranslateService {
- private static final String APP_ID = "20240428002037687";
- private static final String SECURITY_KEY = "nXkFm4SaA2Wrmb42Xmky";
- private final SysMenuServiceImpl sysMenuService;
- private final AsyncLoadBalancerAutoConfiguration asyncLoadBalancerAutoConfiguration;
- /**
- * 调用百度翻译API
- *
- * @param query 待翻译的文本
- * @param lanSrc 原语言 zh
- * @param lanDst 目标语言 en
- * @return
- */
- public static String translate(String query, String lanSrc, String lanDst) {
- TransApi api = new TransApi(APP_ID, SECURITY_KEY);
- log.info("正在翻译文本:{}", query);
- JSONObject res = JSONUtil.parseObj(api.getTransResult(query, lanSrc, lanDst));
- JSONArray transResult = res.getJSONArray("trans_result");
- if (!JSONUtil.isNull(transResult)) {
- JSONObject jsonObject = transResult.getJSONObject(0);
- log.info("文本:{},翻译结果:{}", query, jsonObject.getStr("dst"));
- return jsonObject.getStr("dst");
- } else {
- log.info("文本:{},翻译失败:{}", query, JSONUtil.toJsonPrettyStr(res));
- return "-";
- }
- }
- @PostMapping("/menuOne")
- @ApiOperation("单个菜单翻译-同步返回结果")
- public R<String> translateMenuOne(@RequestBody @Validated TranslateDto.One one) {
- String content = one.getContent();
- String targetType = one.getTargetType();
- String translatedValue = translate(content, "zh", targetType);
- return R.ok(translatedValue);
- }
- /**
- * 全量菜单翻译
- *
- * @return
- */
- @PostMapping("/menuAll")
- @ApiOperation("菜单全量翻译-已翻译的忽略")
- public R<?> translateMenuAll() {
- translateAllMenu();
- return R.ok();
- }
- @Async
- protected void translateAllMenu() {
- List<SysMenu> sysMenus = sysMenuService.list();
- List<SysMenu> updateMenus = new ArrayList<>();
- for (SysMenu sysMenu : sysMenus) {
- String name = sysMenu.getName();
- String enName = sysMenu.getEnName();
- if (StrUtil.isEmpty(enName)) {
- //百度api翻译
- String translatedValue = translate(name, "zh", "en");
- sysMenu.setName(translatedValue);
- updateMenus.add(sysMenu);
- // 增加1.2秒的延迟
- try {
- Thread.sleep(1800);
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- log.error("线程中断异常", e);
- }
- }
- }
- if (CollUtil.isNotEmpty(updateMenus)) {
- sysMenuService.updateBatchById(updateMenus);
- }
- }
- }
|