提交 39baadf9 authored 作者: hzh's avatar hzh

用户导入实现

上级 66927bb6
...@@ -91,7 +91,7 @@ public class SysUserController extends BaseController { ...@@ -91,7 +91,7 @@ public class SysUserController extends BaseController {
@SaCheckPermission("system:user:import") @SaCheckPermission("system:user:import")
@PostMapping(value = "/importData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) @PostMapping(value = "/importData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<Void> importData(@RequestPart("file") MultipartFile file, boolean updateSupport) throws Exception { public R<Void> importData(@RequestPart("file") MultipartFile file, boolean updateSupport) throws Exception {
ExcelResult<SysUserImportVo> result = ExcelUtil.importExcel(file.getInputStream(), SysUserImportVo.class, new SysUserImportListener(updateSupport)); ExcelResult<SysUserImportVo> result = ExcelUtil.importExcel(file.getInputStream(), SysUserImportVo.class, new SysUserImportListener(false));
return R.ok(result.getAnalysis()); return R.ok(result.getAnalysis());
} }
......
...@@ -2,6 +2,7 @@ package org.dromara.system.listener; ...@@ -2,6 +2,7 @@ package org.dromara.system.listener;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.digest.BCrypt; import cn.hutool.crypto.digest.BCrypt;
import cn.hutool.http.HtmlUtil; import cn.hutool.http.HtmlUtil;
import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.context.AnalysisContext;
...@@ -12,17 +13,19 @@ import lombok.extern.slf4j.Slf4j; ...@@ -12,17 +13,19 @@ import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.ValidatorUtils; import org.dromara.common.core.utils.ValidatorUtils;
import org.dromara.common.excel.core.ExcelListener; import org.dromara.common.excel.core.ExcelListener;
import org.dromara.common.excel.core.ExcelResult; import org.dromara.common.excel.core.ExcelResult;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.controller.system.SysUserController;
import org.dromara.system.domain.bo.SysUserBo; import org.dromara.system.domain.bo.SysUserBo;
import org.dromara.system.domain.vo.SysUserImportVo; import org.dromara.system.domain.vo.SysUserImportVo;
import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.domain.vo.SysUserVo;
import org.dromara.system.service.ISysConfigService; import org.dromara.system.service.*;
import org.dromara.system.service.ISysUserService;
import java.util.List; import java.util.List;
import java.util.Objects;
/** /**
* 系统用户自定义导入 * 系统用户自定义导入
...@@ -33,6 +36,10 @@ import java.util.List; ...@@ -33,6 +36,10 @@ import java.util.List;
public class SysUserImportListener extends AnalysisEventListener<SysUserImportVo> implements ExcelListener<SysUserImportVo> { public class SysUserImportListener extends AnalysisEventListener<SysUserImportVo> implements ExcelListener<SysUserImportVo> {
private final ISysUserService userService; private final ISysUserService userService;
private final SysUserController sysUserController;
private final ISysDeptService sysDeptService;
private final ISysPostService sysPostService;
private final ISysRoleService sysRoleService;
private final String password; private final String password;
...@@ -48,6 +55,10 @@ public class SysUserImportListener extends AnalysisEventListener<SysUserImportVo ...@@ -48,6 +55,10 @@ public class SysUserImportListener extends AnalysisEventListener<SysUserImportVo
public SysUserImportListener(Boolean isUpdateSupport) { public SysUserImportListener(Boolean isUpdateSupport) {
String initPassword = SpringUtils.getBean(ISysConfigService.class).selectConfigByKey("sys.user.initPassword"); String initPassword = SpringUtils.getBean(ISysConfigService.class).selectConfigByKey("sys.user.initPassword");
this.userService = SpringUtils.getBean(ISysUserService.class); this.userService = SpringUtils.getBean(ISysUserService.class);
this.sysUserController = SpringUtils.getBean(SysUserController.class);
this.sysDeptService = SpringUtils.getBean(ISysDeptService.class);
this.sysPostService = SpringUtils.getBean(ISysPostService.class);
this.sysRoleService = SpringUtils.getBean(ISysRoleService.class);
this.password = BCrypt.hashpw(initPassword); this.password = BCrypt.hashpw(initPassword);
this.isUpdateSupport = isUpdateSupport; this.isUpdateSupport = isUpdateSupport;
this.operUserId = LoginHelper.getUserId(); this.operUserId = LoginHelper.getUserId();
...@@ -63,7 +74,20 @@ public class SysUserImportListener extends AnalysisEventListener<SysUserImportVo ...@@ -63,7 +74,20 @@ public class SysUserImportListener extends AnalysisEventListener<SysUserImportVo
ValidatorUtils.validate(user); ValidatorUtils.validate(user);
user.setPassword(password); user.setPassword(password);
user.setCreateBy(operUserId); user.setCreateBy(operUserId);
userService.insertUser(user); //设置部门
if (StringUtils.isNotEmpty(userVo.getDeptName())) {
Long deptId = sysDeptService.selectDeptIdByName(StrUtil.split(userVo.getDeptName(), "/"));
user.setDeptId(deptId);
}
//设置岗位
if (Objects.nonNull(user.getDeptId()) && StringUtils.isNotEmpty(userVo.getPostName())) {
user.setPostIds(sysPostService.selectPostIdsByDeptIdAndName(user.getDeptId(), StrUtil.split(userVo.getPostName(), "/")).toArray(Long[]::new));
}
//设置角色
if (StringUtils.isNotEmpty(userVo.getRoleName())) {
user.setRoleIds(sysRoleService.selectRoleIdsByNameList(StrUtil.split(userVo.getRoleName(), "/")).toArray(Long[]::new));
}
sysUserController.add(user);
successNum++; successNum++;
successMsg.append("<br/>").append(successNum).append("、账号 ").append(user.getUserName()).append(" 导入成功"); successMsg.append("<br/>").append(successNum).append("、账号 ").append(user.getUserName()).append(" 导入成功");
} else if (isUpdateSupport) { } else if (isUpdateSupport) {
......
...@@ -143,8 +143,17 @@ public interface ISysDeptService { ...@@ -143,8 +143,17 @@ public interface ISysDeptService {
/** /**
* 首页部门详情 * 首页部门详情
*
* @param deptId 部门id * @param deptId 部门id
* @return * @return
*/ */
SysDeptDetailVo deptDetailIndex(Long deptId); SysDeptDetailVo deptDetailIndex(Long deptId);
/**
* 根据部门名称获取部门id
*
* @param deptNameList 部门名称
* @return 部门id
*/
Long selectDeptIdByName(List<String> deptNameList);
} }
...@@ -119,4 +119,13 @@ public interface ISysPostService { ...@@ -119,4 +119,13 @@ public interface ISysPostService {
* @return 结果 * @return 结果
*/ */
int updatePost(SysPostBo bo); int updatePost(SysPostBo bo);
/**
* 获取岗位id集合
*
* @param deptId 部门id
* @param postNameList 岗位名称集合
* @return 岗位id集合
*/
List<Long> selectPostIdsByDeptIdAndName(Long deptId, List<String> postNameList);
} }
...@@ -195,6 +195,18 @@ public interface ISysRoleService { ...@@ -195,6 +195,18 @@ public interface ISysRoleService {
*/ */
int insertAuthUsers(Long roleId, Long[] userIds); int insertAuthUsers(Long roleId, Long[] userIds);
/**
* 根据角色清理在线用户
*
* @param roleId 角色id
*/
void cleanOnlineUserByRole(Long roleId); void cleanOnlineUserByRole(Long roleId);
/**
* 获取角色Ids
*
* @param roleNameList 角色名称
* @return 角色ids
*/
List<Long> selectRoleIdsByNameList(List<String> roleNameList);
} }
...@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; ...@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.dromara.common.core.constant.CacheNames; import org.dromara.common.core.constant.CacheNames;
import org.dromara.common.core.constant.UserConstants; import org.dromara.common.core.constant.UserConstants;
...@@ -41,6 +42,7 @@ import java.util.stream.Collectors; ...@@ -41,6 +42,7 @@ import java.util.stream.Collectors;
*/ */
@RequiredArgsConstructor @RequiredArgsConstructor
@Service @Service
@Slf4j
public class SysDeptServiceImpl implements ISysDeptService { public class SysDeptServiceImpl implements ISysDeptService {
private final SysDeptMapper baseMapper; private final SysDeptMapper baseMapper;
...@@ -381,4 +383,36 @@ public class SysDeptServiceImpl implements ISysDeptService { ...@@ -381,4 +383,36 @@ public class SysDeptServiceImpl implements ISysDeptService {
detail.setUserList(users); detail.setUserList(users);
return detail; return detail;
} }
@Override
public Long selectDeptIdByName(List<String> deptNameList) {
if (CollectionUtils.isEmpty(deptNameList)) {
return null;
}
Long parentId = 0L;
Long deptId = null;
SysDeptBo bo = new SysDeptBo();
bo.setStatus(UserConstants.DEPT_NORMAL);
LambdaQueryWrapper<SysDept> lqw = buildQueryWrapper(bo);
lqw.select(SysDept::getDeptId, SysDept::getParentId, SysDept::getDeptName);
List<SysDeptVo> depts = baseMapper.selectDeptList(lqw);
// 逐级查询部门ID
for (String deptName : deptNameList) {
// 根据当前父ID和部门名称查询部门
Long finalDeptId = deptId;
SysDeptVo dept = StreamUtils.findFirst(depts, d -> Objects.equals(finalDeptId, d.getParentId()) && StringUtils.equals(deptName, d.getDeptName()));
if (dept == null) {
// 部门不存在,返回null或抛出异常
log.warn("部门不存在: parentId={}, deptName={}", parentId, deptName);
return null;
}
// 更新父ID为当前部门ID,继续查询下一级
parentId = dept.getDeptId();
deptId = dept.getDeptId();
}
return deptId;
}
} }
...@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; ...@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import org.dromara.common.core.constant.UserConstants; import org.dromara.common.core.constant.UserConstants;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.MapstructUtils;
...@@ -27,6 +28,8 @@ import org.springframework.stereotype.Service; ...@@ -27,6 +28,8 @@ import org.springframework.stereotype.Service;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -241,4 +244,15 @@ public class SysPostServiceImpl implements ISysPostService { ...@@ -241,4 +244,15 @@ public class SysPostServiceImpl implements ISysPostService {
SysPost post = MapstructUtils.convert(bo, SysPost.class); SysPost post = MapstructUtils.convert(bo, SysPost.class);
return baseMapper.updateById(post); return baseMapper.updateById(post);
} }
@Override
public List<Long> selectPostIdsByDeptIdAndName(Long deptId, List<String> postNameList) {
if (Objects.isNull(deptId) || CollectionUtils.isEmpty(postNameList)) {
return List.of();
}
List<SysPost> postList = baseMapper.selectList(new LambdaQueryWrapper<SysPost>().eq(SysPost::getDeptId, deptId));
return postNameList.stream().map(pn -> Optional.ofNullable(StreamUtils.findFirst(postList, p -> StringUtils.equals(p.getPostName(), pn))).map(SysPost::getDeptId).orElse(null))
.filter(Objects::nonNull).collect(Collectors.toList());
}
} }
...@@ -39,6 +39,7 @@ import org.springframework.stereotype.Service; ...@@ -39,6 +39,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
/** /**
* 角色 业务层处理 * 角色 业务层处理
...@@ -517,4 +518,14 @@ public class SysRoleServiceImpl implements ISysRoleService { ...@@ -517,4 +518,14 @@ public class SysRoleServiceImpl implements ISysRoleService {
} }
}); });
} }
@Override
public List<Long> selectRoleIdsByNameList(List<String> roleNameList) {
if (org.apache.commons.collections4.CollectionUtils.isEmpty(roleNameList)) {
return List.of();
}
List<SysRole> roleList = baseMapper.selectList(new LambdaQueryWrapper<SysRole>().select(SysRole::getRoleId, SysRole::getRoleName));
return roleNameList.stream().map(rn -> Optional.ofNullable(StreamUtils.findFirst(roleList, r -> Objects.equals(r.getRoleName(), rn))).map(SysRole::getRoleId).orElse(null))
.filter(Objects::nonNull).collect(Collectors.toList());
}
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论