diff --git a/nflg-mobilebroken-admin/pom.xml b/nflg-mobilebroken-admin/pom.xml index c8932790..81c719a7 100644 --- a/nflg-mobilebroken-admin/pom.xml +++ b/nflg-mobilebroken-admin/pom.xml @@ -125,6 +125,16 @@ poi-ooxml 5.2.3 + + com.aliyun + alimt20181012 + 1.4.0 + + + com.aliyun + tea-openapi + 0.3.8 + diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TestController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TestController.java index 77bdb3c3..72ba40ee 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TestController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TestController.java @@ -1,13 +1,11 @@ package com.nflg.mobilebroken.admin.controller; import com.nflg.mobilebroken.admin.service.DeviceQRCodeService; +import com.nflg.mobilebroken.admin.service.ITranslate; import com.nflg.mobilebroken.common.pojo.ApiResult; import com.nflg.mobilebroken.common.util.VUtils; import com.nflg.mobilebroken.repository.service.ITicketCallService; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; @@ -26,6 +24,9 @@ public class TestController extends ControllerBase{ @Resource private ITicketCallService ticketCallService; + @Resource + private ITranslate translate; + /** * 显示二维码 * @param deviceNo 设备编号 @@ -52,4 +53,14 @@ public class TestController extends ControllerBase{ public ApiResult test(@RequestParam Integer userId){ return ApiResult.success(ticketCallService.isInCall(userId)); } + + /** + * 翻译为日语 + * @param text 要翻译的文本 + * @return 翻译结果 + */ + @PostMapping("translate") + public ApiResult translate(@RequestBody String text){ + return ApiResult.success(translate.translateWord(text, "auto", "ja", "html")); + } } diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TranslateController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TranslateController.java new file mode 100644 index 00000000..09f6e28b --- /dev/null +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TranslateController.java @@ -0,0 +1,33 @@ +package com.nflg.mobilebroken.admin.controller; + +import com.nflg.mobilebroken.admin.service.ITranslate; +import com.nflg.mobilebroken.common.pojo.ApiResult; +import com.nflg.mobilebroken.common.pojo.request.TranslateWordRequest; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.validation.Valid; + +/** + * 翻译相关 + */ +@RestController +@RequestMapping("/translate") +public class TranslateController extends ControllerBase{ + + @Resource + private ITranslate translate; + + /** + * 文字翻译 + * @param request 请求参数 + * @return 翻译结果 + */ + @PostMapping("word") + public ApiResult translateWord(@Valid @RequestBody TranslateWordRequest request){ + return ApiResult.success(translate.translateWord(request.getText(), "auto", request.getTargetLanguage(), "html")); + } +} diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/ITranslate.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/ITranslate.java new file mode 100644 index 00000000..7a771724 --- /dev/null +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/ITranslate.java @@ -0,0 +1,6 @@ +package com.nflg.mobilebroken.admin.service; + +public interface ITranslate { + + String translateWord(String text,String sourceLanguage,String targetLanguage,String formatType); +} diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/impl/AliYunTranslate.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/impl/AliYunTranslate.java new file mode 100644 index 00000000..91069a9b --- /dev/null +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/impl/AliYunTranslate.java @@ -0,0 +1,76 @@ +package com.nflg.mobilebroken.admin.service.impl; + +import cn.hutool.json.JSONUtil; +import com.aliyun.alimt20181012.models.TranslateGeneralResponse; +import com.aliyun.credentials.Client; +import com.aliyun.credentials.models.Config; +import com.aliyun.tea.TeaException; +import com.nflg.mobilebroken.admin.service.ITranslate; +import com.nflg.mobilebroken.common.constant.STATE; +import com.nflg.mobilebroken.common.exception.NflgException; +import com.nflg.mobilebroken.common.util.VUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.stereotype.Service; + +import javax.annotation.PostConstruct; + +@Service +@ConditionalOnProperty(name = "translate.platform", havingValue = "aliyun") +@Slf4j +public class AliYunTranslate implements ITranslate { + + @Value("${translate.aliyun.accessKeyId}") + private String accessKeyId; + + @Value("${translate.aliyun.accessKeySecret}") + private String accessKeySecret; + + @Value("${translate.aliyun.endpoint}") + private String endpoint; + + private com.aliyun.alimt20181012.Client client; + + @PostConstruct + public void init() throws Exception { + Config credentialConfig = new Config(); + credentialConfig.type="access_key"; + credentialConfig.accessKeyId=accessKeyId; + credentialConfig.accessKeySecret=accessKeySecret; + Client credentialClient = new Client(credentialConfig); + com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config() + .setCredential(credentialClient); + // Endpoint 请参考 https://api.aliyun.com/product/alimt + config.endpoint = endpoint; + client=new com.aliyun.alimt20181012.Client(config); + } + + @Override + public String translateWord(String text, String sourceLanguage, String targetLanguage, String formatType) { + com.aliyun.alimt20181012.models.TranslateGeneralRequest request = new com.aliyun.alimt20181012.models.TranslateGeneralRequest() + .setTargetLanguage(targetLanguage) + .setSourceLanguage(sourceLanguage) + .setFormatType(formatType) + .setSourceText(text); + log.info("翻译,请求参数:{}", JSONUtil.toJsonStr(request)); + try { + // 复制代码运行请自行打印 API 的返回值 + TranslateGeneralResponse response = client.translateGeneralWithOptions(request, new com.aliyun.teautil.models.RuntimeOptions()); + VUtils.trueThrowBusinessError(response.statusCode != 200).throwMessage("翻译失败:"+response.getBody().getMessage()); + log.info("翻译,响应,识别到的原始语言:{},字数:{},翻译结果:{}" + , response.getBody().getData().getDetectedLanguage() + ,response.getBody().getData().getWordCount() + ,JSONUtil.toJsonStr(response.getBody().getData().getTranslated())); + return response.body.getData().getTranslated(); + } catch (Exception ex) { + TeaException error = new TeaException(ex.getMessage(), ex); + // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 + // 错误 message + log.error("翻译异常:{}", error.getMessage()); + // 诊断地址 + log.error("诊断地址:{}", error.getData().get("Recommend")); + throw new NflgException(STATE.BusinessError, "翻译失败:" + error.getMessage()); + } + } +} diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/TranslateWordRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/TranslateWordRequest.java new file mode 100644 index 00000000..73fcc197 --- /dev/null +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/TranslateWordRequest.java @@ -0,0 +1,21 @@ +package com.nflg.mobilebroken.common.pojo.request; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +@Data +public class TranslateWordRequest { + + /** + * 翻译目标语言 + */ + @NotBlank + private String targetLanguage; + + /** + * 需要翻译的内容,支持html格式 + */ + @NotBlank + private String text; +}