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 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 = 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 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 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 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 queryWrapper = new QueryWrapper<>(); queryWrapper.eq("account", account); LoginFailRecord record = this.getOne(queryWrapper); if (record == null) { return 0; } return record.getFailCount(); } }