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 deleteWrapper = new UpdateWrapper<>(systemLoginLog); systemLoginLogMapper.delete(deleteWrapper); } @Override public void deleteByIdInBatch(List ids) { if (CollectionUtils.isEmpty(ids)) return; systemLoginLogMapper.deleteBatchIds(ids); } @Override public void updateById(SystemLoginLog systemLoginLog) { systemLoginLogMapper.updateById(systemLoginLog); } @Override public void updateByIdInBatch(List 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 wrapper = new QueryWrapper<>(systemLoginLog); return systemLoginLogMapper.selectOne(wrapper); } @Override public List findList(SystemLoginLog systemLoginLog) { Wrapper wrapper = new QueryWrapper<>(systemLoginLog); return systemLoginLogMapper.selectList(wrapper); } @Override public PageData findPage(PageWrap pageWrap) { IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); MPJLambdaWrapper 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 wrapper = new QueryWrapper<>(systemLoginLog); return systemLoginLogMapper.selectCount(wrapper); } @Override public StagingLoginVO getStagingLoginVO(){ StagingLoginVO stagingLoginVO = new StagingLoginVO(); //今日活跃用户:统计当天登录用户数,一个系统用户在不同的企业登录,算两个用户;一个用户在一个企业内多次登录,算一个用户 stagingLoginVO.setDayActiveUserNum( systemLoginLogMapper.selectList(new QueryWrapper() .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() .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() .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() .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() .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; } }