Просмотр исходного кода

管理后台-操作日志列表

dengsixing 3 лет назад
Родитель
Сommit
9a7d4e0507

+ 17 - 10
4dkankan-center-manage/src/main/java/com/fdkankan/manage/controller/OperLogController.java

@@ -6,6 +6,10 @@ import com.fdkankan.manage.bean.MenuBean;
 import com.fdkankan.manage.entity.Agent;
 import com.fdkankan.manage.entity.OperLog;
 import com.fdkankan.manage.service.IAgentService;
+import com.fdkankan.manage.service.OperLogService;
+import com.fdkankan.manage.vo.OperLogPageParamVO;
+import com.fdkankan.mongodb.base.BaseRequestMongo;
+import com.fdkankan.mongodb.base.MongoPageResult;
 import com.fdkankan.redis.constant.RedisKey;
 import com.fdkankan.redis.util.RedisUtil;
 import java.util.List;
@@ -16,6 +20,7 @@ import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.domain.Sort.Direction;
 import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -43,18 +48,20 @@ public class OperLogController {
     @Autowired
     RedisUtil redisUtil;
 
-    @GetMapping("/pageOperLog")
-    public ResultData pageOperLog(){
+    @Autowired
+    private OperLogService operLogService;
+
+    /**
+     * 操作日志列表
+     * @param param
+     * @return
+     */
+    @PostMapping("/pageOperLog")
+    public ResultData pageOperLog(@RequestBody OperLogPageParamVO param){
 
-        Pageable pageable_new = PageRequest
-            .of(1, 3, Sort.by(Direction.DESC, "requestTime"));
-        Sort sort = pageable_new.getSort();
-        Query query = new Query();
-        query.skip(0).limit(3);
-        query.with(sort);
-        List<OperLog> operLogs = mongoTemplate.find(query, OperLog.class);
+        MongoPageResult mongoPageResult = operLogService.pageOperLog(param);
 
-        return ResultData.ok(operLogs);
+        return ResultData.ok(mongoPageResult);
 
     }
 

+ 4 - 8
4dkankan-center-manage/src/main/java/com/fdkankan/manage/entity/OperLog.java

@@ -1,5 +1,8 @@
 package com.fdkankan.manage.entity;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fdkankan.mongodb.base.BaseMongoEntity;
+import java.io.Serializable;
 import java.util.Date;
 import java.util.Map;
 import lombok.Builder;
@@ -13,11 +16,8 @@ import org.springframework.data.mongodb.core.mapping.Field;
  */
 @Data
 @Document("OperLog")
-@Builder
-public class OperLog {
+public class OperLog extends BaseMongoEntity{
 
-    @Id
-    private String id;
 
     /**
      * 用户id
@@ -60,8 +60,4 @@ public class OperLog {
     @Field("browser")
     private String browser;
 
-    /**请求时间*/
-    @Field("requestTime")
-    private Date requestTime;
-
 }

+ 185 - 185
4dkankan-center-manage/src/main/java/com/fdkankan/manage/interceptor/VisitLogInterceptor.java

@@ -1,185 +1,185 @@
-package com.fdkankan.manage.interceptor;
-
-import cn.hutool.core.util.StrUtil;
-import cn.hutool.extra.servlet.ServletUtil;
-import cn.hutool.http.ContentType;
-import cn.hutool.http.useragent.UserAgent;
-import cn.hutool.http.useragent.UserAgentUtil;
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.fdkankan.common.util.JwtUtil;
-import com.fdkankan.manage.bean.MenuBean;
-import com.fdkankan.manage.entity.OperLog;
-import com.fdkankan.redis.constant.RedisKey;
-import com.fdkankan.redis.util.RedisUtil;
-import io.jsonwebtoken.Claims;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.Map;
-import java.util.Objects;
-import javax.servlet.http.HttpServletRequest;
-import lombok.extern.slf4j.Slf4j;
-import org.aspectj.lang.JoinPoint;
-import org.aspectj.lang.ProceedingJoinPoint;
-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.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.data.mongodb.core.MongoTemplate;
-import org.springframework.stereotype.Component;
-import org.springframework.web.context.request.RequestContextHolder;
-import org.springframework.web.context.request.ServletRequestAttributes;
-import org.springframework.web.multipart.MultipartFile;
-
-@Component
-@Aspect
-@Slf4j
-public class VisitLogInterceptor {
-
-	@Autowired
-	private RedisUtil redisUtil;
-
-	@Autowired
-	private MongoTemplate mongoTemplate;
-
-	@Value("${server.servlet.context-path:null}")
-	private String contextPath;
-
-	// 切入点表达式
-	@Pointcut("execution(public * com.fdkankan.manage.controller..*.*(..))")
-	public void privilege() {
-	}
-
-	@Around("privilege()")
-	public Object around(ProceedingJoinPoint pjp) throws Throwable {
-
-		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
-
-		//获取客户端ip
-		String clientIP = ServletUtil.getClientIP(request);
-
-		//获取uri
-		String uri = request.getRequestURI();
-		if(StrUtil.isNotEmpty(contextPath)){
-			uri = uri.replaceFirst(contextPath, "");
-		}
-
-		//获取请求方式
-		String method = request.getMethod();
-
-		//获取浏览器信息
-		String browser = this.getBrowser(request);
-
-		//获取参数
-		String params = this.getParams(pjp, request);
-
-		//获取操作路径
-		String requestPath = null;
-//		this.getRequestPath(uri);
-
-		//放行
-		Object result = pjp.proceed();
-
-		//获取用户信息 如果已登录,从token中获取用户信息,如果是登录接口,查询数据库获取用户信息
-		Map<String, Object> userInfo = this.getUserInfo(request, uri, result);
-		Long userId = (Long)userInfo.get("userId");
-		String userName = (String)userInfo.get("userName");
-		String nickName = (String)userInfo.get("nickName");
-
-		//写入mongodb
-		OperLog operLog = OperLog.builder()
-			.userId(userId)
-			.userName(userName)
-			.nickName(nickName)
-			.requestPath(requestPath)
-			.uri(uri)
-			.method(method)
-			.params(params)
-			.ip(clientIP)
-			.browser(browser)
-			.requestTime(Calendar.getInstance().getTime())
-			.build();
-		mongoTemplate.insert(operLog);
-
-		return result;
-	}
-
-	private String getRequestPath(String uri){
-		String hget = redisUtil.hget(RedisKey.MANAGE_MENU, uri);
-		MenuBean menuBean = JSON.parseObject(hget, MenuBean.class);
-		LinkedList<String> menuList = new LinkedList<>();
-		this.getRequestPathHandler(menuList, menuBean);
-		StringBuilder sb = new StringBuilder();
-		menuList.stream().forEach(str->sb.append("->").append(str));
-		return sb.substring(2);
-	}
-
-	private void getRequestPathHandler(LinkedList list, MenuBean menuBean){
-		list.addFirst("[" + menuBean.getName() + "]");
-		if(Objects.isNull(menuBean.getParent())){
-			return;
-		}
-		this.getRequestPathHandler(list, menuBean.getParent());
-	}
-
-	private Map<String, Object> getUserInfo(HttpServletRequest request, String uri, Object result){
-		String token = null;
-		boolean isLogin = uri.endsWith("login");
-		if(isLogin){
-			String resultStr = JSON.toJSONString(result);
-			JSONObject jsonObject = JSON.parseObject(resultStr);
-			JSONObject data = jsonObject.getJSONObject("data");
-			token = data.getString("token");
-		}else{
-			token = request.getHeader("token");
-		}
-		Claims claims = JwtUtil.parseJWT(token);
-		Integer userId = (Integer) claims.get("userId");
-		String userName = (String)claims.get("userName");
-		String nickName = (String)claims.get("nickName");
-		Map<String, Object> userInfo = new HashMap<>();
-		userInfo.put("userId", Long.valueOf(userId));
-		userInfo.put("userName", userName);
-		userInfo.put("nickName", nickName);
-		return userInfo;
-	}
-
-	private String getParams(JoinPoint pjp, HttpServletRequest request){
-
-		// 获取参数名称
-		String[] parameterNamesArgs = ((MethodSignature) pjp.getSignature()).getParameterNames();
-		//获取请求参数值
-		Object[] args = pjp.getArgs();
-
-		Map<String, Object> paramMap = new HashMap<>();
-		String contentType = request.getContentType();
-		if(ContentType.JSON.getValue().equals(contentType)){
-			Arrays.stream(args).forEach(arg->paramMap.putAll((Map)arg));
-			return JSON.toJSONString(paramMap);
-		}else{
-			for (int i = 0; i < args.length; i++) {
-				if(args[i] instanceof MultipartFile){
-					paramMap.put(parameterNamesArgs[i], ((MultipartFile) args[i]).getOriginalFilename());
-					continue;
-				}
-				paramMap.put(parameterNamesArgs[i], args[i]);
-			}
-		}
-		return JSON.toJSONString(paramMap);
-	}
-
-	private String getBrowser(HttpServletRequest request){
-		String userAgentStr = request.getHeader("User-Agent");
-		UserAgent userAgent = UserAgentUtil.parse(userAgentStr);
-		String browserType = userAgent.getBrowser().toString();
-		String browserVersion = userAgent.getVersion();
-		String browserFormat =  "%s(版本%s)";
-		return  String.format(browserFormat, browserType, browserVersion);
-	}
-
-}
-
+//package com.fdkankan.manage.interceptor;
+//
+//import cn.hutool.core.util.StrUtil;
+//import cn.hutool.extra.servlet.ServletUtil;
+//import cn.hutool.http.ContentType;
+//import cn.hutool.http.useragent.UserAgent;
+//import cn.hutool.http.useragent.UserAgentUtil;
+//import com.alibaba.fastjson.JSON;
+//import com.alibaba.fastjson.JSONObject;
+//import com.fdkankan.common.util.JwtUtil;
+//import com.fdkankan.manage.bean.MenuBean;
+//import com.fdkankan.manage.entity.OperLog;
+//import com.fdkankan.redis.constant.RedisKey;
+//import com.fdkankan.redis.util.RedisUtil;
+//import io.jsonwebtoken.Claims;
+//import java.util.Arrays;
+//import java.util.Calendar;
+//import java.util.Date;
+//import java.util.HashMap;
+//import java.util.LinkedList;
+//import java.util.Map;
+//import java.util.Objects;
+//import javax.servlet.http.HttpServletRequest;
+//import lombok.extern.slf4j.Slf4j;
+//import org.aspectj.lang.JoinPoint;
+//import org.aspectj.lang.ProceedingJoinPoint;
+//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.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.beans.factory.annotation.Value;
+//import org.springframework.data.mongodb.core.MongoTemplate;
+//import org.springframework.stereotype.Component;
+//import org.springframework.web.context.request.RequestContextHolder;
+//import org.springframework.web.context.request.ServletRequestAttributes;
+//import org.springframework.web.multipart.MultipartFile;
+//
+//@Component
+//@Aspect
+//@Slf4j
+//public class VisitLogInterceptor {
+//
+//	@Autowired
+//	private RedisUtil redisUtil;
+//
+//	@Autowired
+//	private MongoTemplate mongoTemplate;
+//
+//	@Value("${server.servlet.context-path:null}")
+//	private String contextPath;
+//
+//	// 切入点表达式
+//	@Pointcut("execution(public * com.fdkankan.manage.controller..*.*(..))")
+//	public void privilege() {
+//	}
+//
+//	@Around("privilege()")
+//	public Object around(ProceedingJoinPoint pjp) throws Throwable {
+//
+//		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+//
+//		//获取客户端ip
+//		String clientIP = ServletUtil.getClientIP(request);
+//
+//		//获取uri
+//		String uri = request.getRequestURI();
+//		if(StrUtil.isNotEmpty(contextPath)){
+//			uri = uri.replaceFirst(contextPath, "");
+//		}
+//
+//		//获取请求方式
+//		String method = request.getMethod();
+//
+//		//获取浏览器信息
+//		String browser = this.getBrowser(request);
+//
+//		//获取参数
+//		String params = this.getParams(pjp, request);
+//
+//		//获取操作路径
+//		String requestPath = null;
+////		this.getRequestPath(uri);
+//
+//		//放行
+//		Object result = pjp.proceed();
+//
+//		//获取用户信息 如果已登录,从token中获取用户信息,如果是登录接口,查询数据库获取用户信息
+//		Map<String, Object> userInfo = this.getUserInfo(request, uri, result);
+//		Long userId = (Long)userInfo.get("userId");
+//		String userName = (String)userInfo.get("userName");
+//		String nickName = (String)userInfo.get("nickName");
+//
+//		//写入mongodb
+//		OperLog operLog = new OperLog();
+//		operLog.setUserId(userId);
+//		operLog.setUserName(userName);
+//		operLog.setNickName(nickName);
+//		operLog.setRequestPath(requestPath);
+//		operLog.setUri(uri);
+//		operLog.setMethod(method);
+//		operLog.setParams(params);
+//		operLog.setIp(clientIP);
+//		operLog.setBrowser(browser);
+//		operLog.setCreateTime(Calendar.getInstance().getTime());
+//		mongoTemplate.insert(operLog);
+//
+//		return result;
+//	}
+//
+//	private String getRequestPath(String uri){
+//		String hget = redisUtil.hget(RedisKey.MANAGE_MENU, uri);
+//		MenuBean menuBean = JSON.parseObject(hget, MenuBean.class);
+//		LinkedList<String> menuList = new LinkedList<>();
+//		this.getRequestPathHandler(menuList, menuBean);
+//		StringBuilder sb = new StringBuilder();
+//		menuList.stream().forEach(str->sb.append("->").append(str));
+//		return sb.substring(2);
+//	}
+//
+//	private void getRequestPathHandler(LinkedList list, MenuBean menuBean){
+//		list.addFirst("[" + menuBean.getName() + "]");
+//		if(Objects.isNull(menuBean.getParent())){
+//			return;
+//		}
+//		this.getRequestPathHandler(list, menuBean.getParent());
+//	}
+//
+//	private Map<String, Object> getUserInfo(HttpServletRequest request, String uri, Object result){
+//		String token = null;
+//		boolean isLogin = uri.endsWith("login");
+//		if(isLogin){
+//			String resultStr = JSON.toJSONString(result);
+//			JSONObject jsonObject = JSON.parseObject(resultStr);
+//			JSONObject data = jsonObject.getJSONObject("data");
+//			token = data.getString("token");
+//		}else{
+//			token = request.getHeader("token");
+//		}
+//		Claims claims = JwtUtil.parseJWT(token);
+//		Integer userId = (Integer) claims.get("userId");
+//		String userName = (String)claims.get("userName");
+//		String nickName = (String)claims.get("nickName");
+//		Map<String, Object> userInfo = new HashMap<>();
+//		userInfo.put("userId", Long.valueOf(userId));
+//		userInfo.put("userName", userName);
+//		userInfo.put("nickName", nickName);
+//		return userInfo;
+//	}
+//
+//	private String getParams(JoinPoint pjp, HttpServletRequest request){
+//
+//		// 获取参数名称
+//		String[] parameterNamesArgs = ((MethodSignature) pjp.getSignature()).getParameterNames();
+//		//获取请求参数值
+//		Object[] args = pjp.getArgs();
+//
+//		Map<String, Object> paramMap = new HashMap<>();
+//		String contentType = request.getContentType();
+//		if(ContentType.JSON.getValue().equals(contentType)){
+////			Arrays.stream(args).forEach(arg->paramMap.putAll((Map)arg));
+//			return JSON.toJSONString(args[0]);
+//		}else{
+//			for (int i = 0; i < args.length; i++) {
+//				if(args[i] instanceof MultipartFile){
+//					paramMap.put(parameterNamesArgs[i], ((MultipartFile) args[i]).getOriginalFilename());
+//					continue;
+//				}
+//				paramMap.put(parameterNamesArgs[i], args[i]);
+//			}
+//		}
+//		return JSON.toJSONString(paramMap);
+//	}
+//
+//	private String getBrowser(HttpServletRequest request){
+//		String userAgentStr = request.getHeader("User-Agent");
+//		UserAgent userAgent = UserAgentUtil.parse(userAgentStr);
+//		String browserType = userAgent.getBrowser().toString();
+//		String browserVersion = userAgent.getVersion();
+//		String browserFormat =  "%s(版本%s)";
+//		return  String.format(browserFormat, browserType, browserVersion);
+//	}
+//
+//}
+//

+ 21 - 0
4dkankan-center-manage/src/main/java/com/fdkankan/manage/service/OperLogService.java

@@ -0,0 +1,21 @@
+package com.fdkankan.manage.service;
+
+import com.fdkankan.manage.entity.OperLog;
+import com.fdkankan.manage.vo.OperLogPageParamVO;
+import com.fdkankan.mongodb.base.MongoPageResult;
+import com.fdkankan.mongodb.service.MongodbBaseService;
+import java.util.List;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/5/30
+ **/
+public interface OperLogService extends MongodbBaseService<OperLog> {
+
+    MongoPageResult pageOperLog(OperLogPageParamVO param);
+
+}

+ 57 - 0
4dkankan-center-manage/src/main/java/com/fdkankan/manage/service/impl/OperLogServiceImpl.java

@@ -0,0 +1,57 @@
+package com.fdkankan.manage.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.fdkankan.manage.entity.OperLog;
+import com.fdkankan.manage.service.OperLogService;
+import com.fdkankan.manage.vo.OperLogPageParamVO;
+import com.fdkankan.mongodb.base.MongoPageResult;
+import com.fdkankan.mongodb.service.impl.MongodbBaseServiceImpl;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/5/30
+ **/
+@Service
+public class OperLogServiceImpl extends MongodbBaseServiceImpl<OperLog> implements OperLogService {
+
+    @Override
+    public MongoPageResult pageOperLog(OperLogPageParamVO param) {
+
+        Query query = new Query();
+        if(StrUtil.isNotEmpty(param.getNickName())){
+            query.addCriteria(Criteria.where("nickName").is(param.getNickName()));
+        }
+        if(StrUtil.isNotEmpty(param.getUserName())){
+            query.addCriteria(Criteria.where("userName").is(param.getUserName()));
+        }
+        Criteria createTimeCri = null;
+        if(Objects.nonNull(param.getStartTime()) || Objects.nonNull(param.getEndTime())){
+            createTimeCri = Criteria.where("createTime");
+            query.addCriteria(createTimeCri);
+        }
+        if(Objects.nonNull(param.getStartTime())){
+            createTimeCri.gte(param.getStartTime());
+        }
+
+        if(Objects.nonNull(param.getEndTime())){
+            createTimeCri.lte(param.getEndTime());
+        }
+
+        //默认按操作时间降序排序
+        param.setOrderBy("createTime");
+
+        MongoPageResult<OperLog> operLogMongoPageResult = this.pageQuery(param, query);
+        return operLogMongoPageResult;
+    }
+}

+ 33 - 0
4dkankan-center-manage/src/main/java/com/fdkankan/manage/vo/OperLogPageParamVO.java

@@ -0,0 +1,33 @@
+package com.fdkankan.manage.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fdkankan.mongodb.base.BaseRequestMongo;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/5/31
+ **/
+@Data
+public class OperLogPageParamVO extends BaseRequestMongo {
+
+    private String nickName;
+
+    private String userName;
+
+    @JsonFormat(
+        pattern = "yyyy-MM-dd HH:mm"
+    )
+    private Date startTime;
+
+    @JsonFormat(
+        pattern = "yyyy-MM-dd HH:mm"
+    )
+    private Date endTime;
+
+}