From bcbeeba42c468ac10805ec9e399e95595558e9f5 Mon Sep 17 00:00:00 2001
From: xjs <1294405880@qq.com>
Date: Sun, 26 Dec 2021 22:14:30 +0800
Subject: [PATCH] =?UTF-8?q?=E8=AF=B4=E6=98=8E=EF=BC=9A=201=E3=80=81?=
=?UTF-8?q?=E5=AE=9E=E7=8E=B0aop=E5=88=87=E5=85=A5api=E6=97=A5=E5=BF=97=20?=
=?UTF-8?q?2=E3=80=81=E5=8F=96=E6=B6=88=E7=83=AD=E9=83=A8=E7=BD=B2?=
=?UTF-8?q?=EF=BC=8C=E5=A4=A7=E5=9D=91=EF=BC=8C=E7=83=AD=E9=83=A8=E7=BD=B2?=
=?UTF-8?q?=E5=AF=BC=E8=87=B4redis=E6=8B=BF=E4=B8=8D=E5=88=B0=E5=80=BC?=
=?UTF-8?q?=EF=BC=8C=E6=9A=82=E6=97=B6=E4=B8=8D=E7=9F=A5=E9=81=93=E5=A6=82?=
=?UTF-8?q?=E4=BD=95=E8=A7=A3=E5=86=B3=EF=BC=8C=E5=85=88=E6=8A=8A=E7=83=AD?=
=?UTF-8?q?=E9=83=A8=E7=BD=B2=E5=85=B3=E4=BA=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
xjs-business/pom.xml | 6 +-
.../java/com/xjs/log/aop/ApiLogAspect.java | 73 ++++++++++-----
.../java/com/xjs/log/config/JsonConfig.java | 57 ++++++++++++
.../java/com/xjs/log/consts/ReqConst.java | 11 +++
.../main/java/com/xjs/log/domain/ApiLog.java | 88 +++----------------
.../java/com/xjs/log/mapper/ApiLogMapper.java | 15 ++--
.../translation/client/BaiduFeignClient.java | 3 +-
.../impl/BaiDuTranslationServiceImpl.java | 11 ++-
.../resources/mapper/english/ApiLogMapper.xml | 2 +-
9 files changed, 150 insertions(+), 116 deletions(-)
create mode 100644 xjs-business/xjs-business-english/src/main/java/com/xjs/log/config/JsonConfig.java
create mode 100644 xjs-business/xjs-business-english/src/main/java/com/xjs/log/consts/ReqConst.java
diff --git a/xjs-business/pom.xml b/xjs-business/pom.xml
index c80966e4..71c08350 100644
--- a/xjs-business/pom.xml
+++ b/xjs-business/pom.xml
@@ -111,11 +111,11 @@
${hutool.version}
-
-
+
+
diff --git a/xjs-business/xjs-business-english/src/main/java/com/xjs/log/aop/ApiLogAspect.java b/xjs-business/xjs-business-english/src/main/java/com/xjs/log/aop/ApiLogAspect.java
index 88b22057..dfc5bd0b 100644
--- a/xjs-business/xjs-business-english/src/main/java/com/xjs/log/aop/ApiLogAspect.java
+++ b/xjs-business/xjs-business-english/src/main/java/com/xjs/log/aop/ApiLogAspect.java
@@ -1,14 +1,18 @@
package com.xjs.log.aop;
-import com.ruoyi.common.log.annotation.Log;
+import cn.hutool.core.date.DateUtil;
+import com.xjs.log.consts.ReqConst;
+import com.xjs.log.mapper.ApiLogMapper;
+import lombok.extern.log4j.Log4j2;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
-import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.*;
-import org.aspectj.lang.reflect.SourceLocation;
import org.springframework.stereotype.Component;
-import java.lang.reflect.Method;
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.time.temporal.ChronoUnit;
+import java.util.Optional;
/**
* @author xiejs
@@ -17,45 +21,74 @@ import java.lang.reflect.Method;
*/
@Component
@Aspect
+@Log4j2
public class ApiLogAspect {
+ @Resource
+ private ApiLogMapper apiLogMapper;
+
+ /**
+ * 声明AOP签名
+ */
+ @Pointcut("@annotation(com.xjs.log.aop.ApiLog)")
+ public void pointcut() {
+ }
+
+ /**
+ * 环绕切入
+ */
+ @Around("pointcut()")
+ public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {
+ try {
+ LocalDateTime localDateTime1 = DateUtil.date().toLocalDateTime();
+ Object obj = joinPoint.proceed();
+ LocalDateTime localDateTime2 = DateUtil.date().toLocalDateTime();
+ long between = ChronoUnit.MILLIS.between(localDateTime1, localDateTime2);
+ log.info("调用接口耗费时间:{}ms", between);
+ return obj;
+ } catch (Throwable e) {
+ e.printStackTrace();
+ throw e;
+ }
+ }
+
/**
* 处理完请求后执行
*
* @param joinPoint 切点
*/
@AfterReturning(pointcut = "@annotation(apiLog)", returning = "jsonResult")
- public void doAfterReturning(JoinPoint joinPoint, ApiLog apiLog, Object jsonResult)
- {
+ public void doAfterReturning(JoinPoint joinPoint, ApiLog apiLog, Object jsonResult) {
this.handleApiLog(joinPoint, apiLog, null, jsonResult);
}
@AfterThrowing(value = "@annotation(apiLog)", throwing = "e")
- public void doAfterThrowing(JoinPoint joinPoint, ApiLog apiLog, Exception e)
- {
+ public void doAfterThrowing(JoinPoint joinPoint, ApiLog apiLog, Exception e) {
handleApiLog(joinPoint, apiLog, e, null);
}
-
-
-
-
-
private void handleApiLog(JoinPoint joinPoint, ApiLog apiLog, final Exception e, Object jsonResult) {
+ com.xjs.log.domain.ApiLog entity = new com.xjs.log.domain.ApiLog();
String name = apiLog.name();//请求名称
+ entity.setApiName(name);
String url = apiLog.url();//请求地址
+ entity.setUrl(url);
Object[] args = joinPoint.getArgs();//请求体
+ StringBuilder builder = new StringBuilder();
for (Object arg : args) {
-
+ builder.append(arg);
}
-
-
-
-
-
-
+ entity.setMethod(apiLog.method());
+ entity.setRequest(builder.toString());
+ entity.setResponse(Optional.ofNullable(jsonResult).toString());
+ if (e != null) {
+ entity.setIsSuccess(ReqConst.ERROR);
+ }else {
+ entity.setIsSuccess(ReqConst.SUCCESS);
+ }
+ apiLogMapper.insert(entity);
}
}
diff --git a/xjs-business/xjs-business-english/src/main/java/com/xjs/log/config/JsonConfig.java b/xjs-business/xjs-business-english/src/main/java/com/xjs/log/config/JsonConfig.java
new file mode 100644
index 00000000..990f4d32
--- /dev/null
+++ b/xjs-business/xjs-business-english/src/main/java/com/xjs/log/config/JsonConfig.java
@@ -0,0 +1,57 @@
+package com.xjs.log.config;
+
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.alibaba.fastjson.serializer.ValueFilter;
+import com.alibaba.fastjson.support.config.FastJsonConfig;
+import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import org.springframework.http.converter.HttpMessageConverter;
+import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author xiejs
+ * @desc 全局序列化处理配置
+ * @create 2021-12-26
+ */
+@Configuration
+public class JsonConfig {
+ @Bean
+ public HttpMessageConverters fastJsonHttpMessageConverters() {
+ FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
+ FastJsonConfig fastJsonConfig = new FastJsonConfig();
+ List list = new ArrayList<>();
+ list.add(SerializerFeature.PrettyFormat);
+ list.add(SerializerFeature.WriteMapNullValue);
+ list.add(SerializerFeature.WriteNullStringAsEmpty);
+ list.add(SerializerFeature.WriteNullListAsEmpty);
+ list.add(SerializerFeature.QuoteFieldNames);
+ list.add(SerializerFeature.WriteDateUseDateFormat);
+ list.add(SerializerFeature.DisableCircularReferenceDetect);
+ list.add(SerializerFeature.WriteBigDecimalAsPlain);
+ fastJsonConfig.setSerializerFeatures(list.toArray(new SerializerFeature[list.size()]));
+ fastConverter.setFastJsonConfig(fastJsonConfig);
+ HttpMessageConverter> converter = fastConverter;
+ fastJsonConfig.setSerializeFilters(new ValueFilter() {
+ @Override
+ public Object process(Object object, String name, Object value) {
+ if ((StringUtils.endsWith(name, "Id") || StringUtils.equals(name,"id")) && value != null
+ && value.getClass() == Long.class) {
+ return String.valueOf(value);
+ }
+ return value;
+ }
+ });
+ return new HttpMessageConverters(converter);
+ }
+}
diff --git a/xjs-business/xjs-business-english/src/main/java/com/xjs/log/consts/ReqConst.java b/xjs-business/xjs-business-english/src/main/java/com/xjs/log/consts/ReqConst.java
new file mode 100644
index 00000000..bf003882
--- /dev/null
+++ b/xjs-business/xjs-business-english/src/main/java/com/xjs/log/consts/ReqConst.java
@@ -0,0 +1,11 @@
+package com.xjs.log.consts;
+
+/**
+ * @author xiejs
+ * @desc
+ * @create 2021-12-26
+ */
+public class ReqConst {
+ public static final Integer SUCCESS = 1;
+ public static final Integer ERROR = 2;
+}
diff --git a/xjs-business/xjs-business-english/src/main/java/com/xjs/log/domain/ApiLog.java b/xjs-business/xjs-business-english/src/main/java/com/xjs/log/domain/ApiLog.java
index b7d5e020..de7a909b 100644
--- a/xjs-business/xjs-business-english/src/main/java/com/xjs/log/domain/ApiLog.java
+++ b/xjs-business/xjs-business-english/src/main/java/com/xjs/log/domain/ApiLog.java
@@ -1,5 +1,11 @@
package com.xjs.log.domain;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.core.annotation.Excel;
@@ -13,11 +19,14 @@ import java.io.Serializable;
* @author xjs
* @date 2021-12-26
*/
+@Data
+@TableName("api_log")
public class ApiLog implements Serializable
{
private static final long serialVersionUID = 1L;
- /** $column.columnComment */
+ @TableId
+ @JsonSerialize(using= ToStringSerializer.class)
private Long id;
/** 接口名称 */
@@ -43,81 +52,4 @@ public class ApiLog implements Serializable
/** 是否请求成功 */
@Excel(name = "是否请求成功")
private Integer isSuccess;
-
- public void setId(Long id)
- {
- this.id = id;
- }
-
- public Long getId()
- {
- return id;
- }
- public void setApiName(String apiName)
- {
- this.apiName = apiName;
- }
-
- public String getApiName()
- {
- return apiName;
- }
- public void setUrl(String url)
- {
- this.url = url;
- }
-
- public String getUrl()
- {
- return url;
- }
- public void setMethod(String method)
- {
- this.method = method;
- }
-
- public String getMethod()
- {
- return method;
- }
- public void setRequest(String request)
- {
- this.request = request;
- }
-
- public String getRequest()
- {
- return request;
- }
- public void setResponse(String response)
- {
- this.response = response;
- }
-
- public String getResponse()
- {
- return response;
- }
- public void setIsSuccess(Integer isSuccess)
- {
- this.isSuccess = isSuccess;
- }
-
- public Integer getIsSuccess()
- {
- return isSuccess;
- }
-
- @Override
- public String toString() {
- return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
- .append("id", getId())
- .append("apiName", getApiName())
- .append("url", getUrl())
- .append("method", getMethod())
- .append("request", getRequest())
- .append("response", getResponse())
- .append("isSuccess", getIsSuccess())
- .toString();
- }
}
diff --git a/xjs-business/xjs-business-english/src/main/java/com/xjs/log/mapper/ApiLogMapper.java b/xjs-business/xjs-business-english/src/main/java/com/xjs/log/mapper/ApiLogMapper.java
index 611afe6c..66f1f37c 100644
--- a/xjs-business/xjs-business-english/src/main/java/com/xjs/log/mapper/ApiLogMapper.java
+++ b/xjs-business/xjs-business-english/src/main/java/com/xjs/log/mapper/ApiLogMapper.java
@@ -1,19 +1,20 @@
package com.xjs.log.mapper;
import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xjs.log.domain.ApiLog;
/**
* 日志Mapper接口
- *
+ *
* @author xjs
* @date 2021-12-26
*/
-public interface ApiLogMapper
-{
+public interface ApiLogMapper extends BaseMapper {
/**
* 查询日志
- *
+ *
* @param id 日志主键
* @return 日志
*/
@@ -21,7 +22,7 @@ public interface ApiLogMapper
/**
* 查询日志列表
- *
+ *
* @param apiLog 日志
* @return 日志集合
*/
@@ -29,7 +30,7 @@ public interface ApiLogMapper
/**
* 删除日志
- *
+ *
* @param id 日志主键
* @return 结果
*/
@@ -37,7 +38,7 @@ public interface ApiLogMapper
/**
* 批量删除日志
- *
+ *
* @param ids 需要删除的数据主键集合
* @return 结果
*/
diff --git a/xjs-business/xjs-business-english/src/main/java/com/xjs/translation/client/BaiduFeignClient.java b/xjs-business/xjs-business-english/src/main/java/com/xjs/translation/client/BaiduFeignClient.java
index 62acab52..f874d353 100644
--- a/xjs-business/xjs-business-english/src/main/java/com/xjs/translation/client/BaiduFeignClient.java
+++ b/xjs-business/xjs-business-english/src/main/java/com/xjs/translation/client/BaiduFeignClient.java
@@ -1,5 +1,6 @@
package com.xjs.translation.client;
+import com.alibaba.fastjson.JSONObject;
import com.xjs.log.aop.ApiLog;
import com.xjs.translation.domain.qo.translation.BaiDuTranslationQo;
import org.springframework.cloud.openfeign.FeignClient;
@@ -17,6 +18,6 @@ public interface BaiduFeignClient {
@ApiLog(name = "baidu",
url = "http://api.fanyi.baidu.com/api/trans/vip/translate",
method = "Post")
- String translationApi(BaiDuTranslationQo qo);
+ JSONObject translationApi(BaiDuTranslationQo qo);
}
diff --git a/xjs-business/xjs-business-english/src/main/java/com/xjs/translation/service/impl/BaiDuTranslationServiceImpl.java b/xjs-business/xjs-business-english/src/main/java/com/xjs/translation/service/impl/BaiDuTranslationServiceImpl.java
index 68add587..8aeb2ed2 100644
--- a/xjs-business/xjs-business-english/src/main/java/com/xjs/translation/service/impl/BaiDuTranslationServiceImpl.java
+++ b/xjs-business/xjs-business-english/src/main/java/com/xjs/translation/service/impl/BaiDuTranslationServiceImpl.java
@@ -40,20 +40,19 @@ public class BaiDuTranslationServiceImpl implements TranslationService {
String sign = SecureUtil.md5(append);
baiDuTranslationQo.setSign(sign);
baiDuTranslationQo.setQ(translationQo.getQ());
- String translationStr = baiduFeignClient.translationApi(baiDuTranslationQo);
- JSONObject jsonObject = JSONObject.parseObject(translationStr);
+ JSONObject jsonObject = baiduFeignClient.translationApi(baiDuTranslationQo);
if(Objects.nonNull(jsonObject.getString("error_code"))){
throw new BusinessException("百度翻译接口调用异常");
}
TranslationVo translationVo = new TranslationVo();
String from = jsonObject.getString("from");
String to = jsonObject.getString("to");
- String transResultStr = jsonObject.getString("trans_result");
- JSONArray jsonArray = JSONObject.parseArray(transResultStr);
+
+ JSONArray transResult = jsonObject.getJSONArray("trans_result");
HashMap map = new HashMap<>();
List