diff --git a/pom.xml b/pom.xml
index 7c2c26d..3ad6b55 100644
--- a/pom.xml
+++ b/pom.xml
@@ -77,7 +77,11 @@
commons-csv
1.10.0
-
+
+ org.aspectj
+ aspectjweaver
+ 1.9.6
+
io.github.ljwlgl
common-util
diff --git a/src/main/java/com/celnet/datadump/annotation/LogServiceAnnotation.java b/src/main/java/com/celnet/datadump/annotation/LogServiceAnnotation.java
new file mode 100644
index 0000000..c517801
--- /dev/null
+++ b/src/main/java/com/celnet/datadump/annotation/LogServiceAnnotation.java
@@ -0,0 +1,14 @@
+package com.celnet.datadump.annotation;
+
+import java.lang.annotation.*;
+
+@Target({ElementType.METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface LogServiceAnnotation {
+
+ /** 操作类型 **/
+ String operateType();
+ /** 操作解释 **/
+ String remark() default "";
+}
diff --git a/src/main/java/com/celnet/datadump/aspect/OperateLogAspect.java b/src/main/java/com/celnet/datadump/aspect/OperateLogAspect.java
new file mode 100644
index 0000000..149cc4c
--- /dev/null
+++ b/src/main/java/com/celnet/datadump/aspect/OperateLogAspect.java
@@ -0,0 +1,165 @@
+package com.celnet.datadump.aspect;
+
+import com.alibaba.fastjson.JSON;
+
+import com.celnet.datadump.annotation.LogServiceAnnotation;
+import com.celnet.datadump.entity.DataLog;
+import com.celnet.datadump.service.DataLogService;
+import com.google.common.collect.Lists;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.Signature;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestAttributes;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import java.lang.reflect.Method;
+import java.util.Date;
+
+
+/**
+ *
+ */
+@Aspect
+@Component
+@Order(-1)
+public class OperateLogAspect {
+ private static final Logger log = LoggerFactory.getLogger(OperateLogAspect.class);
+
+ @Autowired
+ private DataLogService dataLogService;
+
+ @Pointcut(value = "@annotation(com.celnet.datadump.annotation.LogServiceAnnotation)")
+ public void operateLogAspectPoint(){
+ }
+
+ @Around("operateLogAspectPoint()")
+ public Object around(ProceedingJoinPoint joinPoint) {
+
+ //开始时间
+ Date startTime = new Date();
+ //日志注解
+ LogServiceAnnotation logServiceAnno = null;
+
+ //request请求
+ RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
+ //捕获请求参数
+ Object[] args = joinPoint.getArgs();
+ //结果
+ Object result = null;
+ try {
+
+ //获取注解
+ logServiceAnno = getAnnotationLog(joinPoint);
+
+ //执行程序
+ result = joinPoint.proceed();
+
+ //初始化日志记录
+ DataLog dataLog = initializeOperateLog(joinPoint,args,startTime,logServiceAnno,result,null);
+
+ //保存日志
+ dataLogService.save(dataLog);
+
+ } catch (Throwable throwable) {
+
+ //初始化日志记录
+ DataLog dataLog = initializeOperateLog(joinPoint,args,startTime,logServiceAnno,null,throwable);
+
+ //保存日志
+ dataLogService.save(dataLog);
+
+ log.error("日志拦截异常:"+throwable);
+ }
+
+ return result;
+ }
+
+ /**
+ * 初始化操作日志
+ * @param joinPoint 节点
+ */
+ private DataLog initializeOperateLog(ProceedingJoinPoint joinPoint , Object[] args , Date startTime , LogServiceAnnotation logServiceAnno , Object result , Throwable throwable) {
+
+ if(logServiceAnno == null){
+ return null;
+ }
+
+ //request请求
+ RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
+ HttpServletRequest request = (HttpServletRequest) requestAttributes.resolveReference(RequestAttributes.REFERENCE_REQUEST);
+ //ip
+ String ip = request.getHeader("HTTP_X_FORWARDED_FOR");
+
+
+ //请求参数
+ Object[] arguments = new Object[args.length];
+ for (int i = 0; i < args.length; i++) {
+ if (args[i] instanceof ServletRequest || args[i] instanceof ServletResponse || args[i] instanceof MultipartFile) {
+ //ServletRequest不能序列化,从入参里排除,否则报异常:java.lang.IllegalStateException: It is illegal to call this method if the current request is not in asynchronous mode (i.e. isAsyncStarted() returns false)
+ //ServletResponse不能序列化 从入参里排除,否则报异常:java.lang.IllegalStateException: getOutputStream() has already been called for this response
+ continue;
+ }
+ arguments[i] = args[i];
+ }
+ String argStr = arguments.length <= 0 ? "" : JSON.toJSONString(arguments);
+ //响应结果
+ String resultStr = result == null ? "" : JSON.toJSONString(result);
+ //异常信息
+ String exceptionStr = throwable == null ? "" : JSON.toJSONString(throwable.getMessage());
+ //结束时间
+ Date endTime = new Date();
+
+ DataLog dataLog = new DataLog();
+ dataLog.setIp(ip);
+ dataLog.setStartTime(startTime);
+ dataLog.setEndTime(endTime);
+ if(resultStr.contains("200")){
+ dataLog.setCode("200");
+ dataLog.setStatus("成功");
+ dataLog.setMessage(resultStr);
+ } else {
+ dataLog.setCode("500");
+ dataLog.setStatus("失败");
+ dataLog.setMessage(exceptionStr);
+ }
+ dataLog.setRequestUrl(request.getRequestURI());
+ dataLog.setRequestType(logServiceAnno.operateType());
+ dataLog.setRequestData(argStr);
+ dataLog.setRequestMethod(logServiceAnno.remark());
+
+ return dataLog;
+ }
+
+
+ /**
+ * 获取注解
+ * @param joinPoint 节点
+ * @return 结果
+ */
+ private LogServiceAnnotation getAnnotationLog(ProceedingJoinPoint joinPoint) {
+ Signature signature = joinPoint.getSignature();
+ MethodSignature methodSignature = (MethodSignature) signature;
+ Method method = methodSignature.getMethod();
+ if (method != null) {
+ // 拿到自定义注解中的信息
+ LogServiceAnnotation annotation = method.getAnnotation(LogServiceAnnotation.class);
+ System.out.println("打印注解信息:"+ JSON.toJSONString(annotation));
+ return annotation;
+ }
+ return null;
+ }
+
+
+}
diff --git a/src/main/java/com/celnet/datadump/constant/OperateTypeConstant.java b/src/main/java/com/celnet/datadump/constant/OperateTypeConstant.java
new file mode 100644
index 0000000..2d88571
--- /dev/null
+++ b/src/main/java/com/celnet/datadump/constant/OperateTypeConstant.java
@@ -0,0 +1,16 @@
+package com.celnet.datadump.constant;
+
+/**
+ * 操作类型
+ */
+public class OperateTypeConstant {
+
+ //删除
+ public static final String TYPE_DELETE = "DELETE";
+ //新增
+ public static final String TYPE_INSERT = "INSERT";
+ //更新
+ public static final String TYPE_UPDATE = "UPDATE";
+ //查询
+ public static final String TYPE_SELECT = "SELECT";
+}
diff --git a/src/main/java/com/celnet/datadump/controller/JobController.java b/src/main/java/com/celnet/datadump/controller/JobController.java
index 0b66cf7..20110e8 100644
--- a/src/main/java/com/celnet/datadump/controller/JobController.java
+++ b/src/main/java/com/celnet/datadump/controller/JobController.java
@@ -1,13 +1,14 @@
package com.celnet.datadump.controller;
import com.alibaba.fastjson.JSON;
+import com.celnet.datadump.annotation.LogServiceAnnotation;
import com.celnet.datadump.entity.DataObject;
import com.celnet.datadump.global.Result;
import com.celnet.datadump.param.*;
import com.celnet.datadump.service.*;
import com.celnet.datadump.util.DataUtil;
+import com.celnet.datadump.constant.OperateTypeConstant;
import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.core.handler.annotation.XxlJob;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
@@ -201,6 +202,7 @@ public class JobController {
*/
@PostMapping("/dataImportBatchJob")
@ApiOperation("生成newSFID(大数据量)")
+ @LogServiceAnnotation(operateType = OperateTypeConstant.TYPE_INSERT, remark = "生成newSFID(大数据量)")
public ReturnT dataImportBatchJob(String paramStr) throws Exception {
log.info("dataImportBatchJob execute start ..................");
SalesforceParam param = new SalesforceParam();
@@ -227,6 +229,7 @@ public class JobController {
*/
@PostMapping("/dataUpdateBatchJob")
@ApiOperation("更新数据(大数据量)")
+ @LogServiceAnnotation(operateType = OperateTypeConstant.TYPE_UPDATE, remark = "更新数据(大数据量)")
public ReturnT dataUpdateBatchJob(String paramStr) throws Exception {
log.info("dataImportBatchJob execute start ..................");
SalesforceParam param = new SalesforceParam();
diff --git a/src/main/java/com/celnet/datadump/entity/DataLog.java b/src/main/java/com/celnet/datadump/entity/DataLog.java
index c5033fd..a6d67ff 100644
--- a/src/main/java/com/celnet/datadump/entity/DataLog.java
+++ b/src/main/java/com/celnet/datadump/entity/DataLog.java
@@ -8,7 +8,6 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
-import lombok.Value;
import java.io.Serializable;
import java.util.Date;
@@ -32,6 +31,13 @@ public class DataLog implements Serializable {
@ApiModelProperty(value = "id")
private Integer id;
+ /**
+ * 请求参数
+ */
+ @TableField("request_url")
+ @ApiModelProperty(value = "请求接口")
+ private String requestUrl;
+
/**
* 请求参数
*/
@@ -40,11 +46,11 @@ public class DataLog implements Serializable {
private String requestData;
/**
- * 请求状态
+ * 请求参数
*/
- @TableField("request_status")
- @ApiModelProperty(value = "请求状态")
- private String requestStatus;
+ @TableField("ip")
+ @ApiModelProperty(value = "请求IP")
+ private String ip;
/**
* 开始时间
@@ -77,14 +83,23 @@ public class DataLog implements Serializable {
/**
* 错误信息
*/
- @TableField("error_message")
- @ApiModelProperty(value = "错误信息")
- private String errorMessage;
+ @TableField("message")
+ @ApiModelProperty(value = "响应信息")
+ private String message;
/**
- * 是否发送邮件
+ * 请求状态
*/
- @TableField("email_flag")
- @ApiModelProperty(value = "是否发送邮件")
- private Boolean emailFlag;
+ @TableField("code")
+ @ApiModelProperty(value = "响应码")
+ private String code;
+
+ /**
+ * 请求状态
+ */
+ @TableField("status")
+ @ApiModelProperty(value = "状态")
+ private String status;
+
+
}
diff --git a/src/main/java/com/celnet/datadump/service/impl/DataImportBatchServiceImpl.java b/src/main/java/com/celnet/datadump/service/impl/DataImportBatchServiceImpl.java
index 19ea615..ba51f8e 100644
--- a/src/main/java/com/celnet/datadump/service/impl/DataImportBatchServiceImpl.java
+++ b/src/main/java/com/celnet/datadump/service/impl/DataImportBatchServiceImpl.java
@@ -36,6 +36,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
@@ -296,6 +298,8 @@ public class DataImportBatchServiceImpl implements DataImportBatchService {
sfNum = sfNum + checkInsertResults(bulkConnection, salesforceInsertJob, batchInfos, api, ids);
+// Files.delete(Paths.get(fullPath));
+
} catch (Exception e) {
log.error("manualCreatedNewId error api:{}", api, e);
throw e;
@@ -352,14 +356,13 @@ public class DataImportBatchServiceImpl implements DataImportBatchService {
index ++;
log.info("Created row with id " + id);
} else if (!insertStatus) {
- DataLog dataLog = new DataLog();
- dataLog.setRequestData("BulkInsert,api:" + api);
- dataLog.setEmailFlag(false);
- dataLog.setEndTime(new Date());
- dataLog.setStartTime(new Date());
- dataLog.setRequestType("Insert");
- dataLog.setErrorMessage(error);
- dataLogService.save(dataLog);
+// DataLog dataLog = new DataLog();
+// dataLog.setRequestData("BulkInsert,api:" + api);
+// dataLog.setEndTime(new Date());
+// dataLog.setStartTime(new Date());
+// dataLog.setRequestType("Insert");
+// dataLog.setMessage(error);
+// dataLogService.save(dataLog);
log.info("Failed with error: " + error);
}
}
@@ -557,6 +560,8 @@ public class DataImportBatchServiceImpl implements DataImportBatchService {
sfNum = sfNum + checkUpdateResults(bulkConnection, salesforceInsertJob, batchInfos,api);
+// Files.delete(Paths.get(fullPath));
+
} catch (Throwable e) {
log.info(e.getMessage());
throw e;
@@ -606,14 +611,13 @@ public class DataImportBatchServiceImpl implements DataImportBatchService {
index ++;
log.info("Update row with id " + id);
} else {
- DataLog dataLog = new DataLog();
- dataLog.setRequestData("BulkUpdate,api:" + api);
- dataLog.setEmailFlag(false);
- dataLog.setEndTime(new Date());
- dataLog.setStartTime(new Date());
- dataLog.setRequestType("Update");
- dataLog.setErrorMessage(error);
- dataLogService.save(dataLog);
+// DataLog dataLog = new DataLog();
+// dataLog.setRequestData("BulkUpdate,api:" + api);
+// dataLog.setEndTime(new Date());
+// dataLog.setStartTime(new Date());
+// dataLog.setRequestType("Update");
+// dataLog.setMessage(error);
+// dataLogService.save(dataLog);
log.info("Failed with error: " + error);
}
}
diff --git a/src/main/java/com/celnet/datadump/service/impl/DataLogServiceImpl.java b/src/main/java/com/celnet/datadump/service/impl/DataLogServiceImpl.java
index 467fb09..42d8389 100644
--- a/src/main/java/com/celnet/datadump/service/impl/DataLogServiceImpl.java
+++ b/src/main/java/com/celnet/datadump/service/impl/DataLogServiceImpl.java
@@ -6,9 +6,7 @@ import com.celnet.datadump.mapper.DataLogMapper;
import com.celnet.datadump.service.DataLogService;
import org.springframework.stereotype.Service;
-/**
- *
- */
+
@Service
public class DataLogServiceImpl extends ServiceImpl implements DataLogService {