From 3e9ee267a42c4abebe1e6ecb79ed317cbeeaab53 Mon Sep 17 00:00:00 2001
From: xjs <1294405880@qq.com>
Date: Sat, 8 Jan 2022 00:22:51 +0800
Subject: [PATCH] =?UTF-8?q?=E8=AF=B4=E6=98=8E=EF=BC=9A1=E3=80=81=E7=BF=BB?=
=?UTF-8?q?=E8=AF=91=E6=A8=A1=E5=9D=97=E9=9B=86=E6=88=90roll=E7=BF=BB?=
=?UTF-8?q?=E8=AF=91api=20=20=20=20=20=202=E3=80=81roll=E5=AE=9E=E7=8E=B0?=
=?UTF-8?q?=E7=BF=BB=E8=AF=91=E5=B7=A5=E5=8E=82=EF=BC=8Crpc=E9=9A=8F?=
=?UTF-8?q?=E6=9C=BA=E8=B0=83=E7=94=A8=20=20=20=20=20=203=E3=80=81?=
=?UTF-8?q?=E4=BF=AE=E6=94=B9api=E6=97=A5=E5=BF=97=E8=BF=94=E5=9B=9E?=
=?UTF-8?q?=E5=92=8C=E8=AF=B7=E6=B1=82json=E6=A0=BC=E5=BC=8F=E5=8C=96=20?=
=?UTF-8?q?=20=20=20=20=204=E3=80=81=E5=89=8D=E7=AB=AF=E7=BB=86=E8=8A=82?=
=?UTF-8?q?=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../business/warning/apiwarning/index.vue | 1 +
ruoyi-ui/src/views/login.vue | 2 +-
ruoyi-ui/src/views/register.vue | 2 +-
.../java/com/xjs/config/RollProperties.java | 29 ++++++++++
.../main/java/com/xjs/consts/ApiConst.java | 4 ++
.../com/xjs/consts/TranslationTypeConst.java | 2 +-
.../java/com/xjs/common/aop/ApiLogAspect.java | 51 +++++++++--------
.../client/RollTranslationFeignClient.java | 27 +++++++++
.../factory/RollTranslationFeignFactory.java | 27 +++++++++
.../controller/TranslationController.java | 11 +++-
.../qo/translation/RollTranslationQo.java | 36 ++++++++++++
.../factory/impl/RollTranslationFactory.java | 56 +++++++++++++++++++
.../xjs/controller/ApiWarningController.java | 1 +
13 files changed, 219 insertions(+), 30 deletions(-)
create mode 100644 xjs-business/xjs-business-common/src/main/java/com/xjs/config/RollProperties.java
create mode 100644 xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/RollTranslationFeignClient.java
create mode 100644 xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/factory/RollTranslationFeignFactory.java
create mode 100644 xjs-business/xjs-business-openapi/src/main/java/com/xjs/translation/domain/qo/translation/RollTranslationQo.java
create mode 100644 xjs-business/xjs-business-openapi/src/main/java/com/xjs/translation/factory/impl/RollTranslationFactory.java
diff --git a/ruoyi-ui/src/views/business/warning/apiwarning/index.vue b/ruoyi-ui/src/views/business/warning/apiwarning/index.vue
index a310966c..8b25e49f 100644
--- a/ruoyi-ui/src/views/business/warning/apiwarning/index.vue
+++ b/ruoyi-ui/src/views/business/warning/apiwarning/index.vue
@@ -51,6 +51,7 @@
+
diff --git a/ruoyi-ui/src/views/login.vue b/ruoyi-ui/src/views/login.vue
index d14151f4..e0d3dd96 100644
--- a/ruoyi-ui/src/views/login.vue
+++ b/ruoyi-ui/src/views/login.vue
@@ -56,7 +56,7 @@
diff --git a/ruoyi-ui/src/views/register.vue b/ruoyi-ui/src/views/register.vue
index 2551af8f..03bcb3f2 100644
--- a/ruoyi-ui/src/views/register.vue
+++ b/ruoyi-ui/src/views/register.vue
@@ -61,7 +61,7 @@
diff --git a/xjs-business/xjs-business-common/src/main/java/com/xjs/config/RollProperties.java b/xjs-business/xjs-business-common/src/main/java/com/xjs/config/RollProperties.java
new file mode 100644
index 00000000..ab34b8ab
--- /dev/null
+++ b/xjs-business/xjs-business-common/src/main/java/com/xjs/config/RollProperties.java
@@ -0,0 +1,29 @@
+package com.xjs.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * roll平台密钥
+ * @author xiejs
+ * @since 2022-01-07
+ */
+@Component
+@ConfigurationProperties("roll.open")
+@Data
+public class RollProperties {
+
+ /**
+ * 应用id
+ */
+ private String app_id;
+
+
+ /**
+ * 应用密钥
+ */
+ private String app_secret;
+}
+
+
diff --git a/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/ApiConst.java b/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/ApiConst.java
index cdef28f8..ce79ad3e 100644
--- a/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/ApiConst.java
+++ b/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/ApiConst.java
@@ -13,6 +13,8 @@ public class ApiConst {
public static final String BAIDU_FY= "百度翻译";
+ public static final String ROLL_FY= "ROLL翻译";
+
public static final String TIANXING_PYQ= "天行-朋友圈";
public static final String TIANXING_WYY= "天行-网易云";
@@ -36,6 +38,8 @@ public class ApiConst {
public static final String YOUDAO_FY_URL= "http://fanyi.youdao.com/translate";
+ public static final String ROLL_FY_URL= "https://www.mxnzp.com/api/convert/translate";
+
public static final String TIANXING_PYQ_URL= "http://api.tianapi.com/pyqwenan/index";
public static final String TIANXING_WYY_URL= "http://api.tianapi.com/hotreview/index";
diff --git a/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/TranslationTypeConst.java b/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/TranslationTypeConst.java
index aa8c5235..553425ae 100644
--- a/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/TranslationTypeConst.java
+++ b/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/TranslationTypeConst.java
@@ -8,5 +8,5 @@ package com.xjs.consts;
public interface TranslationTypeConst {
Integer BAIDU = 1;
Integer YOUDAO = 2;
- Integer GOOGLE = 3;
+ Integer ROLL = 3;
}
diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/aop/ApiLogAspect.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/aop/ApiLogAspect.java
index e0671551..6206ec31 100644
--- a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/aop/ApiLogAspect.java
+++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/aop/ApiLogAspect.java
@@ -3,6 +3,7 @@ package com.xjs.common.aop;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
+import com.alibaba.fastjson.JSON;
import com.ruoyi.common.core.domain.R;
import com.xjs.business.warning.RemoteWarningCRUDFeign;
import com.xjs.business.warning.domain.ApiRecord;
@@ -26,7 +27,7 @@ import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.Date;
import java.util.List;
-import java.util.Optional;
+import java.util.Objects;
import static com.xjs.consts.ApiWarnHandleConst.NO;
@@ -105,11 +106,12 @@ public class ApiLogAspect {
Object[] args = joinPoint.getArgs();//请求体
StringBuilder builder = new StringBuilder();
for (Object arg : args) {
- builder.append(arg);
+ String json = JSON.toJSONString(arg);
+ builder.append(json);
}
entity.setMethod(apiLog.method());
entity.setRequest(builder.toString());
- entity.setResponse(Optional.ofNullable(jsonResult).toString());
+ entity.setResponse(jsonResult.toString());
if (e != null) {
entity.setIsSuccess(StatusEnum.ERROR);
}else {
@@ -170,29 +172,30 @@ public class ApiLogAspect {
haveApiRecord.setUpdateTime(null);
remoteWarningCRUDFeign.updateApiRecordForRPC(haveApiRecord);
//判断接口请求是否超过阈值
- if (haveApiRecord.getDayCount() > haveApiRecord.getLimitCount()) {
- //把记录添加到预警表中
- ApiWarning apiWarning = new ApiWarning();
- apiWarning.setLimitValue(String.valueOf(haveApiRecord.getLimitCount()));
- apiWarning.setRealValue(String.valueOf(haveApiRecord.getDayCount()));
- apiWarning.setApiName(haveApiRecord.getApiName());
- apiWarning.setHandle(NO);
- apiWarning.setWarningLevel(WarnLevelEnum.NOEMAL.getMessage());
- if(haveApiRecord.getDayCount()>haveApiRecord.getLimitCount()*2 &&
- haveApiRecord.getDayCount() < haveApiRecord.getLimitCount() * 3){
- apiWarning.setWarningLevel(WarnLevelEnum.WARNING.getMessage());
- } else if (haveApiRecord.getDayCount() > haveApiRecord.getLimitCount() * 3) {
- apiWarning.setWarningLevel(WarnLevelEnum.DANGER.getMessage());
+ if(Objects.nonNull(haveApiRecord.getLimitCount())){
+ if (haveApiRecord.getDayCount() > haveApiRecord.getLimitCount()) {
+ //把记录添加到预警表中
+ ApiWarning apiWarning = new ApiWarning();
+ apiWarning.setLimitValue(String.valueOf(haveApiRecord.getLimitCount()));
+ apiWarning.setRealValue(String.valueOf(haveApiRecord.getDayCount()));
+ apiWarning.setApiName(haveApiRecord.getApiName());
+ apiWarning.setHandle(NO);
+ apiWarning.setWarningLevel(WarnLevelEnum.NOEMAL.getMessage());
+ if(haveApiRecord.getDayCount()>haveApiRecord.getLimitCount()*2 &&
+ haveApiRecord.getDayCount() < haveApiRecord.getLimitCount() * 3){
+ apiWarning.setWarningLevel(WarnLevelEnum.WARNING.getMessage());
+ } else if (haveApiRecord.getDayCount() > haveApiRecord.getLimitCount() * 3) {
+ apiWarning.setWarningLevel(WarnLevelEnum.DANGER.getMessage());
+ }
+ apiWarning.setWarningType(WarnTypeEnum.API.getType());
+ String message = String.format(WarnTypeEnum.API.getMessage(),
+ haveApiRecord.getLimitCount(), haveApiRecord.getDayCount());
+ apiWarning.setWarningMessage(message);
+ remoteWarningCRUDFeign.saveApiWarningForRPC(apiWarning);
+
+ // todo websocket实现即时推送到客户端
}
- apiWarning.setWarningType(WarnTypeEnum.API.getType());
- String message = String.format(WarnTypeEnum.API.getMessage(),
- haveApiRecord.getLimitCount(), haveApiRecord.getDayCount());
- apiWarning.setWarningMessage(message);
- remoteWarningCRUDFeign.saveApiWarningForRPC(apiWarning);
-
- // todo websocket实现即时推送到客户端
}
-
}
}
}
diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/RollTranslationFeignClient.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/RollTranslationFeignClient.java
new file mode 100644
index 00000000..b264f490
--- /dev/null
+++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/RollTranslationFeignClient.java
@@ -0,0 +1,27 @@
+package com.xjs.common.client;
+
+import com.alibaba.fastjson.JSONObject;
+import com.xjs.common.aop.ApiLog;
+import com.xjs.common.client.factory.RollTranslationFeignFactory;
+import com.xjs.translation.domain.qo.translation.RollTranslationQo;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.cloud.openfeign.SpringQueryMap;
+import org.springframework.web.bind.annotation.GetMapping;
+
+import static com.xjs.consts.ApiConst.ROLL_FY;
+import static com.xjs.consts.ApiConst.ROLL_FY_URL;
+
+/**
+ * roll翻译接口api远程调用feign
+ * @author xiejs
+ * @since 2022-01-07
+ */
+@FeignClient(name = "rollTranslation", url = ROLL_FY_URL, fallbackFactory = RollTranslationFeignFactory.class)
+public interface RollTranslationFeignClient {
+
+ @GetMapping
+ @ApiLog(name = ROLL_FY,
+ url = ROLL_FY_URL,
+ method = "Get")
+ JSONObject translationApi(@SpringQueryMap RollTranslationQo qo);
+}
diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/factory/RollTranslationFeignFactory.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/factory/RollTranslationFeignFactory.java
new file mode 100644
index 00000000..3e03cb14
--- /dev/null
+++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/factory/RollTranslationFeignFactory.java
@@ -0,0 +1,27 @@
+package com.xjs.common.client.factory;
+
+import com.alibaba.fastjson.JSONObject;
+import com.ruoyi.common.core.domain.R;
+import com.xjs.common.client.RollTranslationFeignClient;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.cloud.openfeign.FallbackFactory;
+import org.springframework.stereotype.Component;
+
+/**
+ * roll翻译降级
+ * @author xiejs
+ * @since 2022-01-07
+ */
+@Log4j2
+@Component
+public class RollTranslationFeignFactory implements FallbackFactory {
+ @Override
+ public RollTranslationFeignClient create(Throwable cause) {
+ log.error("api模块roll翻译服务调用失败:{},执行降级处理", cause.getMessage());
+ return qo -> {
+ JSONObject jsonObject = new JSONObject();
+ jsonObject.put("error", R.FAIL);
+ return jsonObject;
+ };
+ }
+}
diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/translation/controller/TranslationController.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/translation/controller/TranslationController.java
index 7e478007..16a61b8d 100644
--- a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/translation/controller/TranslationController.java
+++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/translation/controller/TranslationController.java
@@ -18,8 +18,7 @@ import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
-import static com.xjs.consts.TranslationTypeConst.BAIDU;
-import static com.xjs.consts.TranslationTypeConst.YOUDAO;
+import static com.xjs.consts.TranslationTypeConst.*;
/**
* @author xiejs
@@ -36,6 +35,8 @@ public class TranslationController {
private TranslationFactory youDaoTranslationFactory;
@Autowired
private TranslationFactory baiDuTranslationFactory;
+ @Autowired
+ private TranslationFactory rollTranslationFactory;
@PostMapping
@ApiOperation("翻译接口")
@@ -50,6 +51,9 @@ public class TranslationController {
if (YOUDAO.equals(translationQo.getTranslationType())) {
translationVo = youDaoTranslationFactory.translationApi(translationQo);
}
+ if (ROLL.equals(translationQo.getTranslationType())) {
+ translationVo = rollTranslationFactory.translationApi(translationQo);
+ }
return AjaxResult.success(translationVo);
}
@@ -75,13 +79,14 @@ public class TranslationController {
/**
* 封装随机调用api
*
- * @return 文案工厂
+ * @return 翻译工厂
*/
private TranslationFactory randomApi() {
ArrayList factories = new ArrayList<>();
//添加了新接口只需要在这add接口进去
factories.add(youDaoTranslationFactory);
factories.add(baiDuTranslationFactory);
+ factories.add(rollTranslationFactory);
//--------add----------------------------;-
//随机调用集合中的接口
return RandomUtil.randomEle(factories);
diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/translation/domain/qo/translation/RollTranslationQo.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/translation/domain/qo/translation/RollTranslationQo.java
new file mode 100644
index 00000000..ff157eec
--- /dev/null
+++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/translation/domain/qo/translation/RollTranslationQo.java
@@ -0,0 +1,36 @@
+package com.xjs.translation.domain.qo.translation;
+
+import lombok.Data;
+
+/**
+ * @author xiejs
+ * @since 2022-01-07
+ */
+@Data
+public class RollTranslationQo {
+ /**
+ * 翻译内容
+ */
+ private String content;
+
+ /**
+ * 翻译源语言
+ */
+ private String from = "auto";
+
+ /**
+ * 翻译目标语言
+ */
+ private String to ="auto";
+
+ /**
+ * 应用id
+ */
+ private String app_id;
+
+
+ /**
+ * 应用密钥
+ */
+ private String app_secret;
+}
diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/translation/factory/impl/RollTranslationFactory.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/translation/factory/impl/RollTranslationFactory.java
new file mode 100644
index 00000000..d32a89ae
--- /dev/null
+++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/translation/factory/impl/RollTranslationFactory.java
@@ -0,0 +1,56 @@
+package com.xjs.translation.factory.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.xjs.common.client.RollTranslationFeignClient;
+import com.xjs.config.RollProperties;
+import com.xjs.exception.ApiException;
+import com.xjs.translation.domain.qo.translation.RollTranslationQo;
+import com.xjs.translation.domain.qo.translation.TranslationQo;
+import com.xjs.translation.domain.vo.translation.TranslationVo;
+import com.xjs.translation.factory.TranslationFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * roll翻译平台工厂实现
+ *
+ * @author xiejs
+ * @since 2022-01-07
+ */
+@Component
+public class RollTranslationFactory implements TranslationFactory {
+ @Autowired
+ private RollProperties rollProperties;
+ @Autowired
+ private RollTranslationFeignClient rollTranslationFeignClient;
+
+ @Override
+ public TranslationVo translationApi(TranslationQo translationQo) {
+ RollTranslationQo rollTranslationQo = new RollTranslationQo();
+ rollTranslationQo.setApp_id(rollProperties.getApp_id());
+ rollTranslationQo.setApp_secret(rollProperties.getApp_secret());
+ rollTranslationQo.setContent(translationQo.getQ());
+ JSONObject translationApi = rollTranslationFeignClient.translationApi(rollTranslationQo);
+ if (translationApi.containsKey("error")) {
+ throw new ApiException("ROLL翻译接口调用异常");
+ }
+ if (translationApi.getInteger("code") == 1) {
+ JSONObject data = translationApi.getJSONObject("data");
+ TranslationVo translationVo = new TranslationVo();
+ translationVo.setFrom(data.getString("originLanguage"));
+ translationVo.setTo(data.getString("resultLanguage"));
+ ArrayList