package org.jeecg.modules.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.constant.CacheConstant;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.system.api.ISysBaseAPI;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.system.vo.SysUserCacheInfo;
import org.jeecg.common.util.PasswordUtil;
import org.jeecg.common.util.UUIDGenerator;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.base.service.BaseCommonService;
import org.jeecg.modules.system.entity.*;
import org.jeecg.modules.system.mapper.*;
import org.jeecg.modules.system.model.SysUserSysDepartModel;
import org.jeecg.modules.system.service.ISysUserService;
import org.jeecg.modules.system.vo.SysUserDepVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
/**
*
* 用户表 服务实现类
*
*
* @Author: scott
* @Date: 2018-12-20
*/
@Service
@Slf4j
public class SysUserServiceImpl extends ServiceImpl implements ISysUserService {
@Autowired
private SysUserMapper userMapper;
@Autowired
private SysPermissionMapper sysPermissionMapper;
@Autowired
private SysUserRoleMapper sysUserRoleMapper;
@Autowired
private SysUserDepartMapper sysUserDepartMapper;
@Autowired
private ISysBaseAPI sysBaseAPI;
@Autowired
private SysDepartMapper sysDepartMapper;
@Autowired
private SysRoleMapper sysRoleMapper;
@Autowired
private SysDepartRoleUserMapper departRoleUserMapper;
@Autowired
private SysDepartRoleMapper sysDepartRoleMapper;
@Resource
private BaseCommonService baseCommonService;
@Autowired
private SysThirdAccountMapper sysThirdAccountMapper;
@Autowired
ThirdAppWechatEnterpriseServiceImpl wechatEnterpriseService;
@Autowired
ThirdAppDingtalkServiceImpl dingtalkService;
@Override
@CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true)
public Result> resetPassword(String username, String oldpassword, String newpassword, String confirmpassword) {
SysUser user = userMapper.getUserByName(username);
String passwordEncode = PasswordUtil.encrypt(username, oldpassword, user.getSalt());
if (!user.getPassword().equals(passwordEncode)) {
return Result.error("旧密码输入错误!");
}
if (oConvertUtils.isEmpty(newpassword)) {
return Result.error("新密码不允许为空!");
}
if (!newpassword.equals(confirmpassword)) {
return Result.error("两次输入密码不一致!");
}
String password = PasswordUtil.encrypt(username, newpassword, user.getSalt());
this.userMapper.update(new SysUser().setPassword(password), new LambdaQueryWrapper().eq(SysUser::getId, user.getId()));
return Result.ok("密码重置成功!");
}
@Override
@CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true)
public Result> changePassword(SysUser sysUser) {
String salt = oConvertUtils.randomGen(8);
sysUser.setSalt(salt);
String password = sysUser.getPassword();
String passwordEncode = PasswordUtil.encrypt(sysUser.getUsername(), password, salt);
sysUser.setPassword(passwordEncode);
this.userMapper.updateById(sysUser);
return Result.ok("密码修改成功!");
}
@Override
@CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true)
@Transactional(rollbackFor = Exception.class)
public boolean deleteUser(String userId) {
//1.删除用户
this.removeById(userId);
return false;
}
@Override
@CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true)
@Transactional(rollbackFor = Exception.class)
public boolean deleteBatchUsers(String userIds) {
//1.删除用户
this.removeByIds(Arrays.asList(userIds.split(",")));
return false;
}
@Override
public SysUser getUserByName(String username) {
return userMapper.getUserByName(username);
}
@Override
public SysUser getUserByRealName(String realname) {
return userMapper.getUserByRealName(realname);
}
@Override
@Transactional
public void addUserWithRole(SysUser user, String roles) {
this.save(user);
if(oConvertUtils.isNotEmpty(roles)) {
String[] arr = roles.split(",");
for (String roleId : arr) {
SysUserRole userRole = new SysUserRole(user.getId(), roleId);
sysUserRoleMapper.insert(userRole);
}
}
}
@Override
@CacheEvict(value= {CacheConstant.SYS_USERS_CACHE}, allEntries=true)
@Transactional
public void editUserWithRole(SysUser user, String roles) {
this.updateById(user);
//先删后加
sysUserRoleMapper.delete(new QueryWrapper().lambda().eq(SysUserRole::getUserId, user.getId()));
if(oConvertUtils.isNotEmpty(roles)) {
String[] arr = roles.split(",");
for (String roleId : arr) {
SysUserRole userRole = new SysUserRole(user.getId(), roleId);
sysUserRoleMapper.insert(userRole);
}
}
}
@Override
public List getRole(String username) {
return sysUserRoleMapper.getRoleByUserName(username);
}
@Override
public List getRoleName(String username) {
return sysUserRoleMapper.getRoleNameByUserName(username);
}
@Override
public List