111
k94314517
2023-09-05 85e514c685f2862cfe641b3eadb4412a09af2062
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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
package doumeemes.service.system.impl;
 
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import doumeemes.core.model.PageData;
import doumeemes.core.model.PageWrap;
import doumeemes.core.utils.Utils;
import doumeemes.dao.business.model.Company;
import doumeemes.dao.business.model.CompanyUser;
import doumeemes.dao.ext.dto.ActivityLoginDTO;
import doumeemes.dao.ext.vo.ActivityLoginVO;
import doumeemes.dao.ext.vo.StagingLoginVO;
import doumeemes.dao.system.SystemLoginLogMapper;
import doumeemes.dao.system.dto.QuerySystemLoginLogDTO;
import doumeemes.dao.system.join.SystemLoginLogJoinMapper;
import doumeemes.dao.system.model.SystemLoginLog;
import doumeemes.dao.system.model.SystemTraceLog;
import doumeemes.service.system.SystemLoginLogService;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
 
import java.util.List;
 
/**
 * 登录日志Service实现
 * @author Eva.Caesar Liu
 * @date 2022/04/18 18:12
 */
@Service
public class SystemLoginLogServiceImpl implements SystemLoginLogService {
 
    @Autowired
    private SystemLoginLogMapper systemLoginLogMapper;
    @Autowired
    private SystemLoginLogJoinMapper systemLoginLogJoinMapper;
 
    @Override
    public Integer create(SystemLoginLog systemLoginLog) {
        systemLoginLogMapper.insert(systemLoginLog);
        return systemLoginLog.getId();
    }
 
    @Override
    public void deleteById(Integer id) {
        systemLoginLogMapper.deleteById(id);
    }
 
    @Override
    public void delete(SystemLoginLog systemLoginLog) {
        UpdateWrapper<SystemLoginLog> deleteWrapper = new UpdateWrapper<>(systemLoginLog);
        systemLoginLogMapper.delete(deleteWrapper);
    }
 
    @Override
    public void deleteByIdInBatch(List<Integer> ids) {
        if (CollectionUtils.isEmpty(ids)) return;
        systemLoginLogMapper.deleteBatchIds(ids);
    }
 
    @Override
    public void updateById(SystemLoginLog systemLoginLog) {
        systemLoginLogMapper.updateById(systemLoginLog);
    }
 
    @Override
    public void updateByIdInBatch(List<SystemLoginLog> systemLoginLogs) {
        if (CollectionUtils.isEmpty(systemLoginLogs)) return;
        for (SystemLoginLog systemLoginLog: systemLoginLogs) {
            this.updateById(systemLoginLog);
        }
    }
 
    @Override
    public SystemLoginLog findById(Integer id) {
        return systemLoginLogMapper.selectById(id);
    }
 
    @Override
    public SystemLoginLog findOne(SystemLoginLog systemLoginLog) {
        Wrapper<SystemLoginLog> wrapper = new QueryWrapper<>(systemLoginLog);
        return systemLoginLogMapper.selectOne(wrapper);
    }
 
    @Override
    public List<SystemLoginLog> findList(SystemLoginLog systemLoginLog) {
        Wrapper<SystemLoginLog> wrapper = new QueryWrapper<>(systemLoginLog);
        return systemLoginLogMapper.selectList(wrapper);
    }
 
    @Override
    public PageData<SystemLoginLog> findPage(PageWrap<QuerySystemLoginLogDTO> pageWrap) {
        IPage<SystemLoginLog> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
 
        MPJLambdaWrapper<SystemLoginLog> mpjLambdaWrapper = new MPJLambdaWrapper<>();
        mpjLambdaWrapper.selectAll(SystemLoginLog.class);
        mpjLambdaWrapper.leftJoin(Company.class,Company::getId,SystemLoginLog::getCompanyId);
        mpjLambdaWrapper.leftJoin(CompanyUser.class,CompanyUser::getId,SystemLoginLog::getCompanyUserId);
        mpjLambdaWrapper.selectAs(Company::getName, SystemLoginLog::getCompanyName);
        mpjLambdaWrapper.selectAs(CompanyUser::getName, SystemLoginLog::getCompanyUserName);
        // 登录用户名
        if (StringUtils.isNotBlank(pageWrap.getModel().getLoginUsername())) {
            mpjLambdaWrapper.like(SystemLoginLog::getLoginUsername, pageWrap.getModel().getLoginUsername());
        }
        // 登录IP
        if (StringUtils.isNotBlank(pageWrap.getModel().getIp())) {
            mpjLambdaWrapper.eq(SystemLoginLog::getIp, pageWrap.getModel().getIp());
        }
        if ( pageWrap.getModel().getOrgin() !=null) {
            mpjLambdaWrapper.eq(SystemLoginLog::getOrgin, pageWrap.getModel().getOrgin());
        }
        // 服务器IP
        if (StringUtils.isNotBlank(pageWrap.getModel().getServerIp())) {
            mpjLambdaWrapper.eq(SystemLoginLog::getServerIp, pageWrap.getModel().getServerIp());
        }
        // 登录状态
        if (pageWrap.getModel().getSuccess() != null) {
            mpjLambdaWrapper.eq(SystemLoginLog::getSuccess, pageWrap.getModel().getSuccess());
        }
        // 登录开始时间
        if (pageWrap.getModel().getStartTime() != null) {
            mpjLambdaWrapper.ge(SystemLoginLog::getLoginTime, pageWrap.getModel().getStartTime());
        }
        // 登录结束时间
        if (pageWrap.getModel().getStartTime() != null) {
            mpjLambdaWrapper.lt(SystemLoginLog::getLoginTime, pageWrap.getModel().getEndTime());
        }
 
        mpjLambdaWrapper.orderByDesc(SystemLoginLog::getLoginTime);
        return PageData.from(systemLoginLogJoinMapper.selectJoinPage(page, SystemLoginLog.class,mpjLambdaWrapper));
    }
 
    @Override
    public long count(SystemLoginLog systemLoginLog) {
        Wrapper<SystemLoginLog> wrapper = new QueryWrapper<>(systemLoginLog);
        return systemLoginLogMapper.selectCount(wrapper);
    }
 
 
    @Override
    public StagingLoginVO getStagingLoginVO(){
        StagingLoginVO stagingLoginVO = new StagingLoginVO();
        //今日活跃用户:统计当天登录用户数,一个系统用户在不同的企业登录,算两个用户;一个用户在一个企业内多次登录,算一个用户
        stagingLoginVO.setDayActiveUserNum(
            systemLoginLogMapper.selectList(new QueryWrapper<SystemLoginLog>()
                    .select(" COMPANY_USER_ID ")
                    .isNotNull(" COMPANY_ID ")
                    .isNotNull(" COMPANY_USER_ID ")
                    .apply(" LOGIN_TIME like concat(CURDATE(),'%') ")
                    .groupBy(" COMPANY_ID , COMPANY_USER_ID ")
            ).size()
        );
        //今日活跃企业:统计当天登录的企业数,一个企业的不同用户登录,算一个企业数;
        stagingLoginVO.setDayActiveCompanyNum(
                systemLoginLogMapper.selectList(new QueryWrapper<SystemLoginLog>()
                        .select(" COMPANY_ID ")
                        .isNotNull(" COMPANY_ID ")
                        .isNotNull(" COMPANY_USER_ID ")
                        .apply(" LOGIN_TIME like concat(CURDATE(),'%') ")
                        .groupBy(" COMPANY_ID ")
                ).size()
        );
        //统计本月(自然月)登录的企业数,逻辑同上;
        stagingLoginVO.setMonthActiveCompanyNum(
                systemLoginLogMapper.selectList(new QueryWrapper<SystemLoginLog>()
                        .select(" COMPANY_ID ")
                        .isNotNull(" COMPANY_ID ")
                        .isNotNull(" COMPANY_USER_ID ")
                        .apply(" LOGIN_TIME like concat(date_format(NOW(), '%Y-%m'),'%') ")
                        .groupBy(" COMPANY_ID ")
                ).size()
        );
        //本月登录2次及以上企业数:统计本月(自然月)登录2次及以上的企业数,逻辑同上;
        stagingLoginVO.setMonthTwoCompanyNum(
                systemLoginLogMapper.selectList(new QueryWrapper<SystemLoginLog>()
                        .select(" COMPANY_ID ")
                        .isNotNull(" COMPANY_ID ")
                        .isNotNull(" COMPANY_USER_ID ")
                        .apply(" LOGIN_TIME like concat(date_format(NOW(), '%Y-%m'),'%') ")
                        .groupBy(" COMPANY_ID ")
                        .having(" count(1) > 1 ")
                ).size()
        );
        //本月登录2次及以上企业数(羚羊):统计本月(自然月)登录2次及以上(登录来源于羚羊平台)的企业数,逻辑同上;
        stagingLoginVO.setMonthTwoCompanyLYNum(
                systemLoginLogMapper.selectList(new QueryWrapper<SystemLoginLog>()
                        .select(" COMPANY_ID ")
                        .isNotNull(" COMPANY_ID ")
                        .isNotNull(" COMPANY_USER_ID ")
                        .apply(" LOGIN_TIME like concat(date_format(NOW(), '%Y-%m'),'%') ")
                        .eq("ORGIN",2)
                        .groupBy(" COMPANY_ID ")
                        .having(" count(1) > 1 ")
                ).size()
        );
        return stagingLoginVO;
    }
 
 
 
}