package com.whyc.service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.whyc.constant.OperationLogEnum; import com.whyc.dto.Response; import com.whyc.mapper.OperationLogMapper; import com.whyc.pojo.db_user.OperationLog; import com.whyc.pojo.db_user.UserInf; import com.whyc.util.HttpUtil; import com.whyc.util.UserUtil; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.*; @Service public class OperationLogService { @Resource private OperationLogMapper mapper; public void record(Integer type1, Integer type2, String msg, String detail) { OperationLog log = new OperationLog(); UserInf user = UserUtil.getUser(); log.setUserId(user.getUid()); log.setUserName(user.getUname()); log.setType1(type1); log.setType2(type2); log.setMsg(msg); log.setDetail(detail); log.setIp(HttpUtil.getRequest().getRemoteAddr()); log.setCreateTime(new Date()); mapper.insert(log); } public void record(Integer type1, Integer type2, String msg, String detail,String remoteIp) { OperationLog log = new OperationLog(); UserInf user = UserUtil.getUser(); log.setUserId(user.getUid()); log.setUserName(user.getUname()); log.setType1(type1); log.setType2(type2); log.setMsg(msg); log.setDetail(detail); log.setIp(remoteIp); log.setCreateTime(new Date()); mapper.insert(log); } public Response getEnumTypes() { Map> map = new HashMap<>(); OperationLogEnum[] instances = OperationLogEnum.values(); for (OperationLogEnum instance : instances) { Set type1Logs = map.keySet(); //两位数为一级,非两位数为二级 Integer type = instance.getType(); String name = instance.getName(); if(type.toString().length() == 2){ //一级 OperationLog log = new OperationLog(); log.setType1(type); log.setType1Name(name); map.put(log,new LinkedList<>()); }else{ //二级 for (OperationLog type1Log : type1Logs) { if(type.toString().startsWith(type1Log.getType1().toString())){ List type2Logs = map.get(type1Log); OperationLog type2Log = new OperationLog(); type2Log.setType2(type); type2Log.setType2Name(name); type2Logs.add(type2Log); } } } } return new Response().set(1,map); } public Response getPage(OperationLog param) { Integer pageNum = param.getPageNum(); Integer pageSize = param.getPageSize(); PageHelper.startPage(pageNum,pageSize); QueryWrapper query = Wrappers.query(); if(param.getUserName() != null){ query.eq("user_name",param.getUserName()); } if(param.getType1() != null){ query.eq("type1",param.getType1()); } if(param.getType2() != null){ query.eq("type2",param.getType2()); } if(param.getStartTime() != null) { query.ge("create_time", param.getStartTime()); } if(param.getEndTime() != null) { query.le("create_time", param.getEndTime()); } query.orderByDesc("id"); List operationLogs = mapper.selectList(query); injectTypeName(operationLogs); PageInfo pageInfo = new PageInfo<>(operationLogs); return new Response().set(1,pageInfo); } /**注入type值对应的name*/ private void injectTypeName(List operationLogs) { for (OperationLog log : operationLogs) { Integer type1 = log.getType1(); Integer type2 = log.getType2(); Map> logConstantMap = (Map>) getEnumTypes().getData(); Set type1Set = logConstantMap.keySet(); for (OperationLog temp : type1Set) { if(type1 == temp.getType1().intValue()){ //注入type1事件类型 log.setType1Name(temp.getType1Name()); //注入type2事件类型 List type2List = logConstantMap.get(temp); for (OperationLog temp2 : type2List) { if(type2 == temp2.getType2().intValue()){ log.setType2Name(temp2.getType2Name()); break; } } break; } } } } }