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/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> transResult = new ArrayList<>(); + Map hashMap = new HashMap<>(); + hashMap.put("src", data.getString("origin")); + hashMap.put("dst", data.getString("result")); + transResult.add(hashMap); + translationVo.setTransResult(transResult); + return translationVo; + }else + return new TranslationVo(); + } +} diff --git a/xjs-business/xjs-business-warning/src/main/java/com/xjs/controller/ApiWarningController.java b/xjs-business/xjs-business-warning/src/main/java/com/xjs/controller/ApiWarningController.java index 68765155..504c2f87 100644 --- a/xjs-business/xjs-business-warning/src/main/java/com/xjs/controller/ApiWarningController.java +++ b/xjs-business/xjs-business-warning/src/main/java/com/xjs/controller/ApiWarningController.java @@ -86,6 +86,7 @@ public class ApiWarningController extends BaseController { public TableDataInfo list(ApiWarning apiWarning) { startPage(); List list = apiWarningService.list(new QueryWrapper() + .orderByDesc("create_time") .like(Objects.nonNull(apiWarning.getApiName()),"api_name", apiWarning.getApiName())); return getDataTable(list); }