提交 6144810e authored 作者: hzh's avatar hzh

导入修改

上级 0562fbe6
......@@ -44,7 +44,7 @@ public class DropDownOptions {
/**
* 分隔符
*/
private static final String DELIMITER = "_";
public static final String DELIMITER = "_";
/**
* 创建只有一级的下拉选
......
......@@ -93,7 +93,7 @@ public class SysUserController extends BaseController {
@SaCheckPermission("system:user:import")
@PostMapping(value = "/importData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<Void> importData(@RequestPart("file") MultipartFile file, boolean updateSupport) throws Exception {
ExcelResult<SysUserImportVo> result = ExcelUtil.importExcel(file.getInputStream(), SysUserImportVo.class, new SysUserImportListener(false));
ExcelResult<SysUserImportVo> result = ExcelUtil.importExcel(file.getInputStream(), SysUserImportVo.class, new SysUserImportListener(false, deptService.selectDeptList("/")));
return R.ok(result.getAnalysis());
}
......@@ -108,30 +108,9 @@ public class SysUserController extends BaseController {
// @org.jetbrains.annotations.NotNull
// private List<DropDownOptions> getDropDownOptions() {
// SysDeptBo sysDeptBo = new SysDeptBo();
// sysDeptBo.setStatus(UserConstants.DEPT_NORMAL);
// //获取部门列表
// List<SysDeptVo> deptList = deptService.selectDeptList(sysDeptBo);
// deptList.forEach(d -> {
// //设置名称
// Long parentId = d.getParentId();
// List<String> nameList = new ArrayList<>();
// nameList.add(d.getDeptName());
// while (parentId != 0L) {
// Long finalParentId = parentId;
// SysDeptVo sdv = StreamUtils.findFirst(deptList, dept -> Objects.equals(dept.getDeptId(), finalParentId));
// if (sdv != null) {
// nameList.add(sdv.getDeptName());
// parentId = sdv.getParentId();
// } else {
// parentId = 0L;
// }
// }
// Collections.reverse(nameList);
// String name = StrUtil.join("-", nameList);
// d.setDeptName(name);
// });
// List<DemoDept> deptDataList = StreamUtils.toList(deptList, dept -> new DemoDept().setId(dept.getDeptId()).setName(dept.getDeptName()).setDeptId(dept.getDeptId()));
// // 获取部门列表
// List<SysDeptVo> deptList = deptService.selectDeptList(DropDownOptions.DELIMITER);
// List<DemoDept> deptDataList = StreamUtils.toList(deptList, p -> new DemoDept().setId(p.getDeptId()).setName(p.getDeptName()).setDeptId(p.getDeptId()));
// //获取角色列表
// List<SysRoleVo> roleList = getInfo(null).getData().getRoles();
// //获取职位列表
......
......@@ -20,12 +20,14 @@ import org.dromara.common.excel.core.ExcelResult;
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.vo.SysDeptVo;
import org.dromara.system.domain.vo.SysUserImportVo;
import org.dromara.system.domain.vo.SysUserVo;
import org.dromara.system.service.*;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
/**
* 系统用户自定义导入
......@@ -46,13 +48,14 @@ public class SysUserImportListener extends AnalysisEventListener<SysUserImportVo
private final Boolean isUpdateSupport;
private final Long operUserId;
private final List<SysDeptVo> deptList;
private int successNum = 0;
private int failureNum = 0;
private final StringBuilder successMsg = new StringBuilder();
private final StringBuilder failureMsg = new StringBuilder();
public SysUserImportListener(Boolean isUpdateSupport) {
public SysUserImportListener(Boolean isUpdateSupport, List<SysDeptVo> deptList) {
String initPassword = SpringUtils.getBean(ISysConfigService.class).selectConfigByKey("sys.user.initPassword");
this.userService = SpringUtils.getBean(ISysUserService.class);
this.sysUserController = SpringUtils.getBean(SysUserController.class);
......@@ -62,6 +65,7 @@ public class SysUserImportListener extends AnalysisEventListener<SysUserImportVo
this.password = BCrypt.hashpw(initPassword);
this.isUpdateSupport = isUpdateSupport;
this.operUserId = LoginHelper.getUserId();
this.deptList = deptList;
}
@Override
......@@ -76,7 +80,7 @@ public class SysUserImportListener extends AnalysisEventListener<SysUserImportVo
user.setCreateBy(operUserId);
//设置部门
if (StringUtils.isNotEmpty(userVo.getDeptName())) {
Long deptId = sysDeptService.selectDeptIdByName(StrUtil.split(userVo.getDeptName(), "/"));
Long deptId = Optional.ofNullable(StreamUtils.findFirst(deptList, d -> Objects.equals(d.getDeptName(), userVo.getDeptName()))).map(SysDeptVo::getDeptId).orElse(null);
user.setDeptId(deptId);
}
//设置岗位
......
......@@ -22,6 +22,14 @@ public interface ISysDeptService {
*/
List<SysDeptVo> selectDeptList(SysDeptBo dept);
/**
* 获取数据
*
* @param split 分割符
* @return 部门信息集合
*/
List<SysDeptVo> selectDeptList(String split);
/**
* 查询部门树结构信息
*
......
......@@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.tree.Tree;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
......@@ -15,6 +16,7 @@ import org.dromara.common.core.constant.CacheNames;
import org.dromara.common.core.constant.UserConstants;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.*;
import org.dromara.common.excel.core.DropDownOptions;
import org.dromara.common.mybatis.helper.DataBaseHelper;
import org.dromara.common.redis.utils.CacheUtils;
import org.dromara.common.satoken.utils.LoginHelper;
......@@ -29,10 +31,7 @@ import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.stream.Collectors;
/**
......@@ -63,6 +62,42 @@ public class SysDeptServiceImpl implements ISysDeptService {
return baseMapper.selectDeptList(lqw);
}
@Override
public List<SysDeptVo> selectDeptList(String split) {
SysDeptBo dept = new SysDeptBo();
dept.setStatus(UserConstants.DEPT_NORMAL);
LambdaQueryWrapper<SysDept> lqw = buildQueryWrapper(dept);
List<SysDeptVo> deptList = baseMapper.selectDeptList(lqw);
// 构建部门ID到部门对象的映射,提高查找效率
Map<Long, SysDeptVo> deptMap = deptList.stream()
.collect(Collectors.toMap(SysDeptVo::getDeptId, d -> d));
return StreamUtils.toList(deptList, d -> {
List<String> nameList = new ArrayList<>();
Long currentId = d.getDeptId();
// 自底向上收集部门名称
while (currentId != null && currentId != 0L) {
SysDeptVo currentDept = deptMap.get(currentId);
if (currentDept == null) {
break;
}
nameList.add(currentDept.getDeptName());
currentId = currentDept.getParentId();
}
// 如果没有找到任何部门,使用原始名称
if (nameList.isEmpty()) {
nameList.add(dept.getDeptName());
} else {
// 反转列表以获得正确的层级顺序
Collections.reverse(nameList);
}
// 拼接层级名称
String fullName = StrUtil.join(DropDownOptions.DELIMITER, nameList);
SysDeptVo sd = BeanUtil.copyProperties(d, SysDeptVo.class);
sd.setDeptName(fullName);
return sd;
});
}
/**
* 查询部门树结构信息
*
......
......@@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
......@@ -32,11 +31,9 @@ import org.dromara.server.api.RemoteServerService;
import org.dromara.server.api.domain.RemoteUser;
import org.dromara.system.domain.*;
import org.dromara.system.domain.bo.SysUserBo;
import org.dromara.system.domain.vo.SysPostVo;
import org.dromara.system.domain.vo.SysRoleVo;
import org.dromara.system.domain.vo.SysUserExportVo;
import org.dromara.system.domain.vo.SysUserVo;
import org.dromara.system.domain.vo.*;
import org.dromara.system.mapper.*;
import org.dromara.system.service.ISysDeptService;
import org.dromara.system.service.ISysUserService;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
......@@ -63,6 +60,7 @@ public class SysUserServiceImpl implements ISysUserService {
private final SysUserRoleMapper userRoleMapper;
private final SysUserPostMapper userPostMapper;
private final SysTenantMapper sysTenantMapper;
private final ISysDeptService sysDeptService;
@DubboReference
private RemoteServerService remoteServerService;
......@@ -90,17 +88,7 @@ public class SysUserServiceImpl implements ISysUserService {
if (CollectionUtils.isNotEmpty(list)) {
List<Long> userIds = StreamUtils.toList(list, SysUserExportVo::getUserId);
//获取部门信息
List<Long> deptIdList = list.stream().map(SysUserExportVo::getDeptId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
List<SysDept> deptList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(deptIdList)) {
List<SysDept> sysDeptList = deptMapper.selectByIds(deptIdList);
deptIdList = sysDeptList.stream().flatMap(s -> {
List<Long> deptIds = StrUtil.split(s.getAncestors(), ',', -1, true, Convert::toLong);
deptIds.add(s.getDeptId());
return deptIds.stream();
}).distinct().collect(Collectors.toList());
deptList = deptMapper.selectByIds(deptIdList);
}
List<SysDeptVo> deptList = sysDeptService.selectDeptList("/");
//获取岗位信息
List<SysUserPost> supList = userPostMapper.selectList(new LambdaQueryWrapper<SysUserPost>().in(SysUserPost::getUserId, userIds));
List<SysPost> postList = new ArrayList<>();
......@@ -115,23 +103,13 @@ public class SysUserServiceImpl implements ISysUserService {
List<Long> roleIds = StreamUtils.toList(surList, SysUserRole::getRoleId);
roleList = roleMapper.selectByIds(roleIds);
}
List<SysDept> finalDeptList = deptList;
List<SysPost> finalPostList = postList;
List<SysRole> finalRoleList = roleList;
for (SysUserExportVo export : list) {
//设置部门信息
if (ObjectUtil.isNotNull(export.getDeptId())) {
SysDept sd = StreamUtils.findFirst(deptList, d -> Objects.equals(d.getDeptId(), export.getDeptId()));
if (ObjectUtil.isNotNull(sd)) {
List<Long> deptIds = StrUtil.split(sd.getAncestors(), ',', -1, true, Convert::toLong);
deptIds.add(sd.getDeptId());
export.setDeptName(deptIds.stream().map(deptId -> {
if (Objects.equals(deptId, 0L)) {
return null;
}
return Optional.ofNullable(StreamUtils.findFirst(finalDeptList, d -> Objects.equals(d.getDeptId(), deptId))).map(SysDept::getDeptName).orElse(null);
}).filter(Objects::nonNull).collect(Collectors.joining("/")));
}
export.setDeptName(Optional.ofNullable(StreamUtils.findFirst(deptList, d -> Objects.equals(d.getDeptId(), export.getDeptId()))).map(SysDeptVo::getDeptName).orElse(null));
}
//设置岗位信息
List<SysUserPost> posts = StreamUtils.filter(supList, sup -> Objects.equals(sup.getUserId(), export.getUserId()));
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论