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); } }