package com.estate.expert.admin.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.estate.expert.admin.domain.business.screenaccount.ScreenAccount;
|
import com.estate.expert.admin.domain.common.EntityBase;
|
import com.estate.expert.admin.domain.session.UserSession;
|
import com.estate.expert.admin.domain.session.UserSessionRepository;
|
import com.estate.expert.admin.domain.user.UserDto;
|
import com.estate.expert.admin.domain.user.UserMapper;
|
import com.estate.expert.admin.domain.user.UserRepository;
|
import com.estate.expert.admin.domain.user.UserState;
|
import com.estate.expert.admin.domain.common.response.UserLoginResponse;
|
import com.estate.expert.admin.enums.BizResultCode;
|
import com.estate.expert.admin.service.LoginService;
|
import com.estate.expert.admin.service.ScreenAccountService;
|
import com.estate.expert.admin.service.screen.ScreenService;
|
import com.estate.expert.admin.utils.MD5Utils;
|
import com.estate.expert.admin.utils.UUIDGenerator;
|
import com.estate.expert.common.domain.Session;
|
import com.estate.expert.common.domain.SessionStatus;
|
import com.estate.expert.common.utils.PasswordUtils;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.time.LocalDateTime;
|
|
/**
|
* 登录服务实现
|
*/
|
@Service
|
public class LoginServiceImpl implements LoginService {
|
|
@Resource
|
private UserRepository userRepository;
|
|
@Resource
|
private UserMapper userMapper;
|
@Resource
|
private UserSessionRepository userSessionRepository;
|
|
@Resource
|
private ScreenAccountService screenAccountService;
|
|
|
|
public UserLoginResponse login(String mobile, String password) {
|
var user = userRepository.findByMobile(mobile);
|
BizResultCode.ACCOUNT_NOT_FOUND.check(user == null);
|
|
String passInDb = user.getPassword();
|
var checkPasswordBl = PasswordUtils.verify(password, passInDb);
|
BizResultCode.BIZ_PASSWORD_INVALID.check(!checkPasswordBl);
|
BizResultCode.ACCOUNT_FORBIDDEN.check(user.getState() == UserState.DISABLE || user.isDeleted());
|
|
Session session = new Session();
|
session.setUserId(user.getId());
|
session.setUser(user);
|
session.setLastAccessTime(LocalDateTime.now());
|
session.setToken(UUIDGenerator.generate32Uuid());
|
session.setCreateTime(LocalDateTime.now());
|
session.setClientCode("admin");
|
session.setStatus(SessionStatus.ENABLED);
|
|
UserLoginResponse response = new UserLoginResponse();
|
response.setToken(session.getToken());
|
response.setUserInfo(userMapper.toDto(user));
|
|
// 将session保存到数据库
|
UserSession userSession = new UserSession();
|
userSession.setUser(user);
|
userSession.setToken(session.getToken());
|
userSession.setCreateTime(LocalDateTime.now());
|
userSession.setLastAccessTime(LocalDateTime.now());
|
userSession.setClientCode("admin");
|
userSession.setState(SessionStatus.ENABLED.name());
|
userSessionRepository.save(userSession);
|
|
user.setLastAccessTime(LocalDateTime.now());
|
userRepository.save(user);
|
return response;
|
|
}
|
|
public void logout(String token) {
|
UserSession session = userSessionRepository.findByTokenOrderByIdDesc(token).orElse(null);
|
if (session == null) {
|
return;
|
}
|
|
session.setState(SessionStatus.LOGOUT.name());
|
userSessionRepository.save(session);
|
}
|
|
}
|