whycxzp
2023-12-25 27691f761b36f5843fef10814da4075e262b8ece
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
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 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());
        }
        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;
                }
            }
        }
    }
}