package com.iden.bms.service; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.iden.bms.params.ModifyPasswordParams; import com.iden.common.cache.RedisKeyConstant; import com.iden.common.cache.RedisUtil; import com.iden.common.entity.*; import com.iden.common.enums.UserRoleEnum; import com.iden.common.enums.ValidStatusEnum; import com.iden.common.exception.BDException; import com.iden.common.service.*; import com.iden.common.util.MyBeanUtils; import com.iden.common.vo.PageReqVO; import com.iden.common.vo.UserLoginedConvertVO; import com.iden.common.vo.SysUserVO; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * * @author makejava * @since 2021-05-21 00:08:38 */ @Service public class SysUserService { @Resource private IdenSysUserService idenSysUserService; @Resource RedisUtil redisUtil; public UserLoginedConvertVO getLoginUser(String username, String password, String securityCode) throws BDException { if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password) || StringUtils.isEmpty(securityCode)) { throw new BDException("登录参数不能为空"); } String securityCodeRedis = (String)redisUtil.hget(RedisKeyConstant.LOGIN_VALIDATE_CODE,username); if (!securityCode.equalsIgnoreCase(securityCodeRedis)){ throw new BDException("验证码不正确"); } UserLoginedConvertVO userLoginedConvertVO = null; QueryWrapper userQueryWrapper = new QueryWrapper<>(); userQueryWrapper.lambda().eq(IdenSysUser::getUsername,username); IdenSysUser user = this.idenSysUserService.getOne(userQueryWrapper); if (user != null) { userLoginedConvertVO = new UserLoginedConvertVO(); BeanUtil.copyProperties(user, userLoginedConvertVO); String md5Password = DigestUtils.md5Hex(password); if (!md5Password.equalsIgnoreCase(user.getPassword())) { throw new BDException("用户名或密码错误"); } if (ValidStatusEnum.INVALID.getValue().equals(user.getValidStatus())) { throw new BDException("用户已经停用"); } } return userLoginedConvertVO; } /** * 查询系统用户列表 * @return */ public IPage listSysUser(String nickname, String username, UserLoginedConvertVO loginUser, PageReqVO pageReqVo) { IPage page = new Page<>(pageReqVo.getCurrent(), pageReqVo.getPageSize()); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().like(StrUtil.isNotEmpty(nickname),IdenSysUser::getNickname,nickname) .eq(StrUtil.isNotEmpty(username),IdenSysUser::getUsername,username) .orderByAsc(IdenSysUser::getUsername); IPage pageRes = this.idenSysUserService.page(page, queryWrapper); IPage results = new Page<>(pageRes.getCurrent(),pageRes.getSize(),pageRes.getTotal()); if(CollUtil.isNotEmpty(pageRes.getRecords())){ List list = new ArrayList<>(); pageRes.getRecords().forEach(item -> { SysUserVO resVO = new SysUserVO(); BeanUtils.copyProperties(item,resVO); resVO.setValidStatusName(ValidStatusEnum.getValueToName(resVO.getValidStatus())); list.add(resVO); }); results.setRecords(list); } return results; } /** * 删除系统用户 * @param id * @return */ public boolean deleteById(Long id){ return this.idenSysUserService.removeById(id); } /** * 详情 * @param id * @return */ public SysUserVO getSysUserById(Long id){ IdenSysUser idenSysUser = this.idenSysUserService.getById(id); if (idenSysUser!=null){ SysUserVO resVO = new SysUserVO(); BeanUtil.copyProperties(idenSysUser,resVO); resVO.setValidStatusName(ValidStatusEnum.getValueToName(resVO.getValidStatus())); return resVO; } return null; } /** * 保存系统用户 * @param vo */ @Transactional(rollbackFor = Exception.class) public int createSysUser(SysUserVO vo, UserLoginedConvertVO loginUser){ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(IdenSysUser::getUsername,vo.getUsername()); if(idenSysUserService.count(queryWrapper) > 0){ return 1; } //保存系统用户 IdenSysUser idenSysUser = new IdenSysUser(); BeanUtil.copyProperties(vo,idenSysUser); idenSysUser.setCreateTime(new Date()); idenSysUser.setRole(UserRoleEnum.HIGH.getValue()); this.idenSysUserService.save(idenSysUser); return 0; } /** * 修改系统用户 * @param vo */ @Transactional(rollbackFor = Exception.class) public void updateSysUser(SysUserVO vo){ //保存系统用户 IdenSysUser idenSysUser = this.idenSysUserService.getById(vo.getId()); MyBeanUtils.copyProperties(vo,idenSysUser); idenSysUser.setModifyTime(new Date()); this.idenSysUserService.updateById(idenSysUser); } /** * 启用停用角色 * @param vo */ @Transactional(rollbackFor = Exception.class) public void invalidSysUser(SysUserVO vo) throws BDException { IdenSysUser idenSysUser = new IdenSysUser(); BeanUtil.copyProperties(vo, idenSysUser); if(!this.idenSysUserService.updateById(idenSysUser)){ throw new BDException("操作失败!"); } } /** * 重置用户密码 * @param */ @Transactional(rollbackFor = Exception.class) public boolean resetPassword(Long id){ UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.lambda().eq(IdenSysUser::getId,id) .set(IdenSysUser::getPassword, DigestUtils.md5Hex("123456")) .set(IdenSysUser::getModifyTime, new Date()); return idenSysUserService.update(updateWrapper); } /** * 修改密码 * @param parmas */ @Transactional(rollbackFor = Exception.class) public boolean modifyPassword(Long id, ModifyPasswordParams parmas){ IdenSysUser idenSysUser = this.idenSysUserService.getById(id); if(!idenSysUser.getPassword().equals(DigestUtils.md5Hex(parmas.getCurrPassword()))){ return false; } UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.lambda().eq(IdenSysUser::getId,id) .set(IdenSysUser::getPassword, DigestUtils.md5Hex(parmas.getNewPassword())) .set(IdenSysUser::getModifyTime, new Date()); return this.idenSysUserService.update(updateWrapper); } }