|
@@ -1,23 +1,99 @@
|
|
|
package cn.kdan.compdf.service.impl;
|
|
|
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
+import cn.kdan.compdf.base.R;
|
|
|
+import cn.kdan.compdf.config.JwtConfig;
|
|
|
+import cn.kdan.compdf.dto.ChangePasswordDTO;
|
|
|
+import cn.kdan.compdf.dto.LoginDTO;
|
|
|
+import cn.kdan.compdf.dto.LoginUserDTO;
|
|
|
import cn.kdan.compdf.entity.BackgroundUser;
|
|
|
+import cn.kdan.compdf.enums.AuthEnum;
|
|
|
+import cn.kdan.compdf.exception.BusinessException;
|
|
|
import cn.kdan.compdf.mapper.BackgroundUserMapper;
|
|
|
import cn.kdan.compdf.service.BackgroundUserService;
|
|
|
+import cn.kdan.compdf.utils.MD5Util;
|
|
|
+import cn.kdan.compdf.utils.TokenUtil;
|
|
|
+import cn.kdan.compdf.vo.LoginVO;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.data.redis.core.StringRedisTemplate;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.util.Date;
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
+
|
|
|
/**
|
|
|
* @author comPDF-Kit WPH 2022-10-09
|
|
|
*/
|
|
|
@Service
|
|
|
public class BackgroundUserServiceImpl extends ServiceImpl<BackgroundUserMapper, BackgroundUser> implements BackgroundUserService {
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private StringRedisTemplate redisTemplate;
|
|
|
+
|
|
|
@Override
|
|
|
public IPage<BackgroundUser> page(BackgroundUser query) {
|
|
|
return this.page(new Page<>(query.getPage(), query.getSize()), Wrappers.query(query));
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public R<LoginVO> login(LoginDTO loginDTO) {
|
|
|
+ BackgroundUser backgroundUser = this.baseMapper.selectOne(new LambdaQueryWrapper<BackgroundUser>().eq(BackgroundUser::getUsername, loginDTO.getUsername()));
|
|
|
+ if (null == backgroundUser) {
|
|
|
+ throw new BusinessException("账号不存在");
|
|
|
+ }
|
|
|
+ //转换成MD5密码
|
|
|
+ String md5Password = MD5Util.MD5Encode(loginDTO.getPassword());
|
|
|
+ if (!md5Password.equals(backgroundUser.getPassword())) {
|
|
|
+ throw new BusinessException("密码错误");
|
|
|
+ }
|
|
|
+ String token = JwtConfig.generateJwt(LoginUserDTO
|
|
|
+ .builder()
|
|
|
+ .id(backgroundUser.getId())
|
|
|
+ .username(backgroundUser.getUsername())
|
|
|
+ .fullName(backgroundUser.getFullName())
|
|
|
+ .teanatId(backgroundUser.getTenantId())
|
|
|
+ .build());
|
|
|
+
|
|
|
+ redisTemplate.opsForValue().set(AuthEnum.USER_TOKEN_REDIS + backgroundUser.getUsername(), token,2, TimeUnit.HOURS);
|
|
|
+
|
|
|
+ //更新登录用户的登陆时间
|
|
|
+ if (backgroundUser.getFirstLoginTime() == null) {
|
|
|
+ backgroundUser.setFirstLoginTime(new Date());
|
|
|
+ }
|
|
|
+ backgroundUser.setLastLoginTime(new Date());
|
|
|
+ baseMapper.updateById(backgroundUser);
|
|
|
+
|
|
|
+ LoginVO loginVO = new LoginVO();
|
|
|
+ loginVO.setId(backgroundUser.getId());
|
|
|
+ loginVO.setUsername(backgroundUser.getUsername());
|
|
|
+ loginVO.setToken(token);
|
|
|
+ return R.ok(loginVO);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void logout() {
|
|
|
+ redisTemplate.delete(AuthEnum.USER_TOKEN_REDIS + TokenUtil.getRequestHeader().getUsername());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void changePassword(ChangePasswordDTO changePasswordDTO) {
|
|
|
+ //
|
|
|
+ LoginUserDTO requestHeader = TokenUtil.getRequestHeader();
|
|
|
+ BackgroundUser backgroundUser = this.baseMapper.selectOne(new LambdaQueryWrapper<BackgroundUser>().eq(BackgroundUser::getId, requestHeader.getId()));
|
|
|
+ //转换成MD5密码
|
|
|
+ String oldPassword = MD5Util.MD5Encode(changePasswordDTO.getOldPassword());
|
|
|
+ if (!oldPassword.equals(backgroundUser.getPassword())) {
|
|
|
+ throw new BusinessException("原密码错误");
|
|
|
+ }
|
|
|
+ //转换成MD5密码
|
|
|
+ String newPassword = MD5Util.MD5Encode(changePasswordDTO.getNewPassword());
|
|
|
+ backgroundUser.setPassword(newPassword);
|
|
|
+ baseMapper.updateById(backgroundUser);
|
|
|
+ redisTemplate.delete(AuthEnum.USER_TOKEN_REDIS + backgroundUser.getUsername());
|
|
|
+ }
|
|
|
}
|