whycxzp
2025-05-26 ed735ec485585cc26bb0a3cfefae320d2eaa2b9e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
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<OperationLog, List<OperationLog>> map = new HashMap<>();
        OperationLogEnum[] instances = OperationLogEnum.values();
        for (OperationLogEnum instance : instances) {
            Set<OperationLog> 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<OperationLog> 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<OperationLog> 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<OperationLog> operationLogs = mapper.selectList(query);
        injectTypeName(operationLogs);
        PageInfo<OperationLog> pageInfo = new PageInfo<>(operationLogs);
        return new Response().set(1,pageInfo);
    }
 
    /**注入type值对应的name*/
    private void injectTypeName(List<OperationLog> operationLogs) {
        for (OperationLog log : operationLogs) {
            Integer type1 = log.getType1();
            Integer type2 = log.getType2();
 
            Map<OperationLog, List<OperationLog>> logConstantMap = (Map<OperationLog, List<OperationLog>>) getEnumTypes().getData();
            Set<OperationLog> type1Set = logConstantMap.keySet();
 
            for (OperationLog temp : type1Set) {
                if(type1 == temp.getType1().intValue()){
                    //注入type1事件类型
                    log.setType1Name(temp.getType1Name());
                    //注入type2事件类型
                    List<OperationLog> type2List = logConstantMap.get(temp);
                    for (OperationLog temp2 : type2List) {
                        if(type2 == temp2.getType2().intValue()){
                            log.setType2Name(temp2.getType2Name());
                            break;
                        }
                    }
                    break;
                }
            }
        }
    }
}