package com.flow.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.flow.mapper.CompanyMapper;
|
import com.flow.mapper.LoginFailRecordMapper;
|
import com.flow.mapper.ManagerMapper;
|
import com.flow.pojo.Company;
|
import com.flow.pojo.LoginFailRecord;
|
import com.flow.pojo.Manager;
|
import com.flow.service.LoginFailRecordService;
|
import com.flow.util.DESUtil;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import java.util.Date;
|
import java.util.List;
|
|
@Service
|
public class LoginFailRecordServiceImpl extends ServiceImpl<LoginFailRecordMapper, LoginFailRecord> implements LoginFailRecordService {
|
@Autowired
|
CompanyMapper companyMapper;
|
|
@Autowired
|
ManagerMapper managerMapper;
|
private static final int MAX_FAIL_COUNT = 5; // 最大失败次数
|
|
@Override
|
public void recordLoginFail(String account) throws Exception {
|
String phone = null;
|
QueryWrapper queryWrapper1 = new QueryWrapper();
|
|
queryWrapper1.eq("companyabbName", account);
|
|
// queryWrapper.eq("loginPhone", compan.getLoginphone());
|
|
|
// Company company1 = new Company();
|
// QueryWrapper queryWrapper = new QueryWrapper();
|
queryWrapper1.eq("none", 0);
|
List<Company> company = this.companyMapper.selectList(queryWrapper1);
|
if (company.size()>0){
|
phone= DESUtil.decrypt(company.get(0).getLoginphone(), DESUtil.key);
|
}else{
|
QueryWrapper queryWrapper2 = new QueryWrapper();
|
|
queryWrapper2.eq("name",account);
|
Manager manager = managerMapper.selectOne(queryWrapper2);
|
phone=manager.getPhone();
|
|
|
}
|
|
QueryWrapper<LoginFailRecord> queryWrapper = new QueryWrapper<>();
|
queryWrapper.eq("phone", phone);
|
|
LoginFailRecord record = this.getOne(queryWrapper);
|
|
if (record == null) {
|
// 创建新记录
|
record = new LoginFailRecord(account);
|
record.setFailCount(1);
|
record.setPhone(phone);
|
this.save(record);
|
} else {
|
// 更新现有记录
|
record.setFailCount(record.getFailCount() + 1);
|
record.setUpdateTime(new Date());
|
|
// 如果达到最大失败次数,锁定账号
|
if (record.getFailCount() >= MAX_FAIL_COUNT) {
|
record.setIsLocked(true);
|
record.setLockTime(new Date());
|
}
|
|
this.updateById(record);
|
}
|
}
|
|
@Override
|
public boolean isAccountLocked(String account) {
|
QueryWrapper<LoginFailRecord> queryWrapper = new QueryWrapper<>();
|
queryWrapper.eq("account", account);
|
|
LoginFailRecord record = this.getOne(queryWrapper);
|
|
if (record == null) {
|
return false;
|
}
|
|
return record.getIsLocked() != null && record.getIsLocked();
|
}
|
|
@Override
|
public void unlockAccount(String account) {
|
QueryWrapper<LoginFailRecord> queryWrapper = new QueryWrapper<>();
|
queryWrapper.eq("phone", account);
|
|
LoginFailRecord record = this.getOne(queryWrapper);
|
|
if (record != null) {
|
record.setFailCount(0);
|
record.setIsLocked(false);
|
record.setLockTime(null);
|
record.setUpdateTime(new Date());
|
this.updateById(record);
|
}
|
}
|
|
@Override
|
public int getFailCount(String account) {
|
QueryWrapper<LoginFailRecord> queryWrapper = new QueryWrapper<>();
|
queryWrapper.eq("account", account);
|
|
LoginFailRecord record = this.getOne(queryWrapper);
|
|
if (record == null) {
|
return 0;
|
}
|
|
return record.getFailCount();
|
}
|
}
|