wangys 6 سال پیش
والد
کامیت
a67552103b

+ 56 - 0
efunbox-base/efunbox-base-api/src/main/java/cn/efunbox/manage/base/entity/OperationLog.java

@@ -0,0 +1,56 @@
+package cn.efunbox.manage.base.entity;
+
+import lombok.Data;
+import lombok.ToString;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * OperationLog
+ * Created by xusq on 2017/11/22.
+ */
+@Data
+@ToString
+@Entity
+@Table(name="operation_log")
+@DynamicInsert
+@DynamicUpdate
+public class OperationLog implements Serializable {
+
+
+    @Id
+    @Column(name = "id")
+    private Long id;
+
+    @Column(name="user_id")
+    private String userId;
+
+    @Column(name="user_name")
+    private String userName;
+
+    @Column(name="ip")
+    private String ip;
+
+    @Column(name="request_url")
+    private String requestUrl;
+
+    @Column(name="param_json")
+    private String paramJson;
+
+    @Column(name="return_data")
+    private String returnData;
+
+    @Column(name="method_name")
+    private String methodName;
+
+    @Column(name = "gmt_created")
+    @Temporal(TemporalType.TIMESTAMP)
+    private Date gmtCreated;
+
+
+
+}

+ 11 - 0
efunbox-base/efunbox-base-api/src/main/java/cn/efunbox/manage/base/repository/OperationLogRepository.java

@@ -0,0 +1,11 @@
+package cn.efunbox.manage.base.repository;
+
+import cn.efunbox.manage.base.entity.OperationLog;
+import cn.efunbox.manage.common.data.BasicRepository;
+import org.springframework.stereotype.Repository;
+
+
+@Repository
+public interface OperationLogRepository extends BasicRepository<OperationLog> {
+
+}

+ 62 - 0
efunbox-base/efunbox-base-api/src/main/java/cn/efunbox/manage/base/service/OperationLogService.java

@@ -0,0 +1,62 @@
+package cn.efunbox.manage.base.service;
+
+import cn.efunbox.manage.base.entity.OperationLog;
+import cn.efunbox.manage.base.repository.OperationLogRepository;
+import cn.efunbox.manage.common.entity.page.OnePage;
+import cn.efunbox.manage.common.enums.BaseOrderEnum;
+import cn.efunbox.manage.common.helper.SortHelper;
+import cn.efunbox.manage.common.result.ApiCode;
+import cn.efunbox.manage.common.result.ApiResult;
+import com.alibaba.fastjson.JSON;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * OperationLogService
+ * Created by xusq on 2017/11/22.
+ */
+@Slf4j
+@Service
+public class OperationLogService {
+
+    @Autowired
+    OperationLogRepository operationLogRepository;
+
+    public ApiResult<OperationLog> saveOpertionLog(OperationLog operationLog){
+
+        if (Objects.isNull(operationLog)) {
+            return ApiResult.error(ApiCode.PARAMETER_ERROR);
+        }
+
+        operationLog = operationLogRepository.save(operationLog);
+
+        if (Objects.isNull(operationLog)) {
+            return ApiResult.error(ApiCode.DATA_ERROR);
+        }
+
+        return ApiResult.ok(operationLog);
+    }
+
+
+    public ApiResult findPage(OperationLog operationLog, Integer pageSize, Integer pageNum, LinkedHashMap<String, BaseOrderEnum> sort) {
+        log.debug("日志 findPage  : baseUser={}  pageSize={}  pageNum={} sortMap={}", JSON.toJSONString(operationLog), pageSize, pageNum, JSON.toJSONString(sort));
+        //设置分页参数
+        Long count = operationLogRepository.count(operationLog);
+        OnePage page = new OnePage(count, pageNum, pageSize);
+        //如果查询结果为空不用继续下面的调用了
+        if (count == 0) {
+            return ApiResult.ok(page);
+        }
+        //查询 Page的List结果
+        List<OperationLog> data = operationLogRepository.find(operationLog, page.getStart(), page.getPageSize(), SortHelper.sortMap2Sort(sort));
+        //set结果集
+        page.setList(data);
+        return ApiResult.ok(page);
+    }
+
+}

+ 61 - 0
efunbox-base/efunbox-base-web/src/main/java/cn/efunbox/manage/base/assist/aspect/OperationLogAspect.java

@@ -0,0 +1,61 @@
+package cn.efunbox.manage.base.assist.aspect;
+
+import cn.efunbox.manage.base.assist.async.AsyncOperationLogHandler;
+import cn.efunbox.manage.base.entity.User;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.AfterReturning;
+import org.aspectj.lang.annotation.Aspect;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.annotation.Order;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+
+@Slf4j
+@Aspect
+@Component
+@Order(-100)
+public class OperationLogAspect {
+
+    @Autowired
+    AsyncOperationLogHandler asyncOperationLogHandler;
+    @Autowired
+    RedisTemplate redisTemplate;
+
+    @AfterReturning(value = "execution(* cn.efunbox.manage.base.controller..*.*(..))",returning = "retVal")
+    public void doAfter(JoinPoint joinPoint,Object retVal) throws Throwable {
+        // 接收到请求,记录请求内容
+        try {
+            ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+            HttpServletRequest request=attributes.getRequest();
+            if(request.getRequestURL().indexOf("/upload")!=-1){
+                log.debug("上传文件 忽略!");
+                return;
+            }
+
+            //如果是 增删改 才记录入库
+            if(request.getMethod().equals("POST")|| request.getMethod().equals("PUT")|| request.getMethod().equals("DELETE")|| request.getMethod().equals("TRACE")|| request.getMethod().equals("PATCH")){
+                String token = request.getHeader("X-Token");
+                if (StringUtils.isEmpty(token)) {
+                    log.error("user token is null !");
+                    return;
+                }
+
+                User loginUser = (User) redisTemplate.opsForValue().get(token);
+
+
+                request.setAttribute("userInfo",loginUser);
+
+                asyncOperationLogHandler.asyncHandleLog(joinPoint,request,retVal);
+            }
+        } catch (Exception e) {
+            log.error("日志记录出错!", e);
+        }
+    }
+
+}

+ 67 - 0
efunbox-base/efunbox-base-web/src/main/java/cn/efunbox/manage/base/assist/async/AsyncOperationLogHandler.java

@@ -0,0 +1,67 @@
+package cn.efunbox.manage.base.assist.async;
+
+import cn.efunbox.manage.base.entity.OperationLog;
+import cn.efunbox.manage.base.entity.User;
+import cn.efunbox.manage.base.service.OperationLogService;
+import cn.efunbox.manage.common.utils.IpUtils;
+import com.alibaba.fastjson.JSON;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.JoinPoint;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.AsyncResult;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Objects;
+import java.util.concurrent.Future;
+
+
+@Slf4j
+@Component
+public class AsyncOperationLogHandler {
+
+    @Autowired
+    OperationLogService operationLogService;
+
+
+    @Async("threadPoolAsyncTaskExecutor")
+    public void asyncHandleLog(JoinPoint joinPoint, HttpServletRequest request,Object retVal) {
+
+        User loginUser = (User) request.getAttribute("userInfo");
+
+        //如果用户不为空
+        if(Objects.nonNull(loginUser)) {
+            OperationLog operationLog = new OperationLog();
+            try {
+                //设置操作用户 信息
+                operationLog.setUserName(loginUser.getNickName());
+                operationLog.setUserId(loginUser.getId()+"");
+                //设置 ip
+                operationLog.setIp(IpUtils.getIp(request));
+                //设置 商户类型
+                operationLog.setMethodName(joinPoint.getSignature().getName());
+                operationLog.setRequestUrl(request.getRequestURI());
+                operationLog.setParamJson(JSON.toJSONString(joinPoint.getArgs()));
+                operationLog.setReturnData(JSON.toJSONString(retVal));
+                operationLogService.saveOpertionLog(operationLog);
+            } catch (Exception e) {
+                log.error("URL : {} 记录操作日志信息失败  message :{} ", request.getRequestURI(), e);
+            }
+        }
+        log.info("用户:{} 完成日志切面 url:{}",loginUser.getNickName(),request.getRequestURI());
+    }
+
+    @Async
+    public Future<String> asyncMethodWithReturnType() {
+        log.error("Execute method asynchronously " + Thread.currentThread().getName());
+        try {
+            Thread.sleep(5000);
+            return new AsyncResult<>("hello world !!!!");
+        } catch (final InterruptedException e) {
+
+        }
+
+        return null;
+    }
+}

+ 51 - 0
efunbox-base/efunbox-base-web/src/main/java/cn/efunbox/manage/base/controller/UserController.java

@@ -0,0 +1,51 @@
+package cn.efunbox.manage.base.controller;
+
+import cn.efunbox.manage.base.entity.User;
+import cn.efunbox.manage.base.service.UserService;
+import cn.efunbox.manage.common.entity.page.OnePage;
+import cn.efunbox.manage.common.result.ApiResult;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * UserController
+ * Created by xusq on 2018/6/4.
+ */
+@Slf4j
+@RestController
+@RequestMapping("/user")
+public class UserController {
+
+
+    @Autowired
+    UserService userService;
+
+    @GetMapping("/list")
+    public ApiResult<OnePage<User>> listForCms(User user, Integer pageNo, Integer pageSize){
+
+        return userService.list(user, pageNo, pageSize);
+
+    }
+
+    @PostMapping()
+    public ApiResult save(User user){
+        return userService.saveUser(user);
+
+    }
+    @PutMapping()
+    public ApiResult update(User user){
+        return userService.updateUser(user);
+
+    }
+    @DeleteMapping()
+    public ApiResult delete(String userId){
+        List<String> ids = new ArrayList<>();
+        ids.add(userId);
+        return userService.deleteUserByIds(ids);
+
+    }
+}