|
@@ -1,17 +1,26 @@
|
|
|
package cn.iocoder.dashboard.modules.system.service.user;
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
+import cn.hutool.core.io.IoUtil;
|
|
|
+import cn.hutool.core.util.IdUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import cn.iocoder.dashboard.common.enums.CommonStatusEnum;
|
|
|
import cn.iocoder.dashboard.common.exception.ServiceException;
|
|
|
import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil;
|
|
|
import cn.iocoder.dashboard.common.pojo.PageResult;
|
|
|
-import cn.iocoder.dashboard.modules.system.controller.user.vo.user.*;
|
|
|
+import cn.iocoder.dashboard.modules.infra.service.file.InfFileService;
|
|
|
+import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserCreateReqVO;
|
|
|
+import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserExportReqVO;
|
|
|
+import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserImportExcelVO;
|
|
|
+import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserImportRespVO;
|
|
|
+import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserPageReqVO;
|
|
|
+import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserProfileUpdateReqVO;
|
|
|
+import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserUpdateReqVO;
|
|
|
import cn.iocoder.dashboard.modules.system.convert.user.SysUserConvert;
|
|
|
-import cn.iocoder.dashboard.modules.system.dal.mysql.user.SysUserMapper;
|
|
|
import cn.iocoder.dashboard.modules.system.dal.dataobject.dept.SysDeptDO;
|
|
|
import cn.iocoder.dashboard.modules.system.dal.dataobject.dept.SysPostDO;
|
|
|
import cn.iocoder.dashboard.modules.system.dal.dataobject.user.SysUserDO;
|
|
|
+import cn.iocoder.dashboard.modules.system.dal.mysql.user.SysUserMapper;
|
|
|
import cn.iocoder.dashboard.modules.system.service.dept.SysDeptService;
|
|
|
import cn.iocoder.dashboard.modules.system.service.dept.SysPostService;
|
|
|
import cn.iocoder.dashboard.modules.system.service.permission.SysPermissionService;
|
|
@@ -22,7 +31,14 @@ import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
-import java.util.*;
|
|
|
+import java.io.InputStream;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Collection;
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.LinkedHashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Set;
|
|
|
|
|
|
import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.*;
|
|
|
|
|
@@ -49,18 +65,8 @@ public class SysUserServiceImpl implements SysUserService {
|
|
|
@Resource
|
|
|
private PasswordEncoder passwordEncoder;
|
|
|
|
|
|
-// /**
|
|
|
-// * 根据条件分页查询用户列表
|
|
|
-// *
|
|
|
-// * @param user 用户信息
|
|
|
-// * @return 用户信息集合信息
|
|
|
-// */
|
|
|
-// @Override
|
|
|
-// @DataScope(deptAlias = "d", userAlias = "u")
|
|
|
-// public List<SysUser> selectUserList(SysUser user)
|
|
|
-// {
|
|
|
-// return userMapper.selectUserList(user);
|
|
|
-// }
|
|
|
+ @Resource
|
|
|
+ private InfFileService fileService;
|
|
|
|
|
|
@Override
|
|
|
public SysUserDO getUserByUserName(String username) {
|
|
@@ -108,7 +114,7 @@ public class SysUserServiceImpl implements SysUserService {
|
|
|
return Collections.emptySet();
|
|
|
}
|
|
|
Set<Long> deptIds = CollectionUtils.convertSet(deptService.listDeptsByParentIdFromCache(
|
|
|
- deptId, true), SysDeptDO::getId);
|
|
|
+ deptId, true), SysDeptDO::getId);
|
|
|
deptIds.add(deptId); // 包括自身
|
|
|
return deptIds;
|
|
|
}
|
|
@@ -117,7 +123,7 @@ public class SysUserServiceImpl implements SysUserService {
|
|
|
public Long createUser(SysUserCreateReqVO reqVO) {
|
|
|
// 校验正确性
|
|
|
this.checkCreateOrUpdate(null, reqVO.getUsername(), reqVO.getMobile(), reqVO.getEmail(),
|
|
|
- reqVO.getDeptId(), reqVO.getPostIds());
|
|
|
+ reqVO.getDeptId(), reqVO.getPostIds());
|
|
|
// 插入用户
|
|
|
SysUserDO user = SysUserConvert.INSTANCE.convert(reqVO);
|
|
|
user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 默认开启
|
|
@@ -130,12 +136,31 @@ public class SysUserServiceImpl implements SysUserService {
|
|
|
public void updateUser(SysUserUpdateReqVO reqVO) {
|
|
|
// 校验正确性
|
|
|
this.checkCreateOrUpdate(reqVO.getId(), reqVO.getUsername(), reqVO.getMobile(), reqVO.getEmail(),
|
|
|
- reqVO.getDeptId(), reqVO.getPostIds());
|
|
|
+ reqVO.getDeptId(), reqVO.getPostIds());
|
|
|
// 更新用户
|
|
|
SysUserDO updateObj = SysUserConvert.INSTANCE.convert(reqVO);
|
|
|
userMapper.updateById(updateObj);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public void updateUserProfile(SysUserProfileUpdateReqVO reqVO) {
|
|
|
+ // 校验正确性
|
|
|
+ this.checkUserExists(reqVO.getId());
|
|
|
+ this.checkEmailUnique(reqVO.getId(), reqVO.getEmail());
|
|
|
+ this.checkMobileUnique(reqVO.getId(), reqVO.getMobile());
|
|
|
+ // 校验填写密码
|
|
|
+ String encode = null;
|
|
|
+ if (this.checkOldPassword(reqVO.getId(), reqVO.getOldPassword(), reqVO.getNewPassword())) {
|
|
|
+ // 更新密码
|
|
|
+ encode = passwordEncoder.encode(reqVO.getNewPassword());
|
|
|
+ }
|
|
|
+ SysUserDO updateObj = SysUserConvert.INSTANCE.convert(reqVO);
|
|
|
+ if (StrUtil.isNotBlank(encode)) {
|
|
|
+ updateObj.setPassword(encode);
|
|
|
+ }
|
|
|
+ userMapper.updateById(updateObj);
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public void deleteUser(Long id) {
|
|
|
// 校验用户存在
|
|
@@ -278,19 +303,42 @@ public class SysUserServiceImpl implements SysUserService {
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 校验旧密码、新密码
|
|
|
+ *
|
|
|
+ * @param id 用户 id
|
|
|
+ * @param oldPassword 旧密码
|
|
|
+ * @param newPassword 新密码
|
|
|
+ * @return 校验结果
|
|
|
+ */
|
|
|
+ private boolean checkOldPassword(Long id, String oldPassword, String newPassword) {
|
|
|
+ if (id == null || StrUtil.isBlank(oldPassword) || StrUtil.isBlank(newPassword)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ SysUserDO user = userMapper.selectById(id);
|
|
|
+ if (user == null) {
|
|
|
+ throw ServiceExceptionUtil.exception(USER_NOT_EXISTS);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!passwordEncoder.matches(oldPassword, user.getPassword())) {
|
|
|
+ throw ServiceExceptionUtil.exception(USER_PASSWORD_FAILED);
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
- @Transactional // 添加事务,异常则回滚所有导入
|
|
|
+ @Transactional(rollbackFor = Exception.class) // 添加事务,异常则回滚所有导入
|
|
|
public SysUserImportRespVO importUsers(List<SysUserImportExcelVO> importUsers, boolean isUpdateSupport) {
|
|
|
if (CollUtil.isEmpty(importUsers)) {
|
|
|
throw ServiceExceptionUtil.exception(USER_IMPORT_LIST_IS_EMPTY);
|
|
|
}
|
|
|
SysUserImportRespVO respVO = SysUserImportRespVO.builder().createUsernames(new ArrayList<>())
|
|
|
- .updateUsernames(new ArrayList<>()).failureUsernames(new LinkedHashMap<>()).build();
|
|
|
+ .updateUsernames(new ArrayList<>()).failureUsernames(new LinkedHashMap<>()).build();
|
|
|
importUsers.forEach(importUser -> {
|
|
|
// 校验,判断是否有不符合的原因
|
|
|
try {
|
|
|
checkCreateOrUpdate(null, null, importUser.getMobile(), importUser.getEmail(),
|
|
|
- importUser.getDeptId(), null);
|
|
|
+ importUser.getDeptId(), null);
|
|
|
} catch (ServiceException ex) {
|
|
|
respVO.getFailureUsernames().put(importUser.getUsername(), ex.getMessage());
|
|
|
return;
|
|
@@ -316,4 +364,16 @@ public class SysUserServiceImpl implements SysUserService {
|
|
|
return respVO;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public void updateAvatar(Long id, InputStream avatarFile) {
|
|
|
+ this.checkUserExists(id);
|
|
|
+ // 存储文件
|
|
|
+ String avatar = fileService.createFile(IdUtil.fastUUID(), IoUtil.readBytes(avatarFile));
|
|
|
+ // 更新路径
|
|
|
+ SysUserDO sysUserDO = new SysUserDO();
|
|
|
+ sysUserDO.setId(id);
|
|
|
+ sysUserDO.setAvatar(avatar);
|
|
|
+ userMapper.updateById(sysUserDO);
|
|
|
+ }
|
|
|
+
|
|
|
}
|