) bindingResult.getTarget();
+
+ return userService.importUser(excelVOList, bindingResult);
+ }
+
}
diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/mapper/SysUserMapper.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/mapper/SysUserMapper.java
index 233f94f3b..98562c5b8 100644
--- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/mapper/SysUserMapper.java
+++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/mapper/SysUserMapper.java
@@ -29,6 +29,8 @@ import com.pig4cloud.pigx.common.data.datascope.PigxBaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
+import java.util.List;
+
/**
*
* 用户表 Mapper 接口
@@ -63,4 +65,12 @@ public interface SysUserMapper extends PigxBaseMapper {
*/
UserVO getUserVoById(Integer id);
+ /**
+ * 查询用户列表
+ * @param userDTO 查询条件
+ * @param dataScope 数据权限声明
+ * @return
+ */
+ List selectVoListByScope(@Param("query") UserDTO userDTO, DataScope dataScope);
+
}
diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/SysUserService.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/SysUserService.java
index 62462338a..3133e71ad 100644
--- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/SysUserService.java
+++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/SysUserService.java
@@ -25,8 +25,10 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.pig4cloud.pigx.admin.api.dto.UserDTO;
import com.pig4cloud.pigx.admin.api.dto.UserInfo;
import com.pig4cloud.pigx.admin.api.entity.SysUser;
+import com.pig4cloud.pigx.admin.api.vo.UserExcelVO;
import com.pig4cloud.pigx.admin.api.vo.UserVO;
import com.pig4cloud.pigx.common.core.util.R;
+import org.springframework.validation.BindingResult;
import java.util.List;
@@ -93,4 +95,19 @@ public interface SysUserService extends IService {
*/
Boolean saveUser(UserDTO userDto);
+ /**
+ * 查询全部的用户
+ * @param userDTO 查询条件
+ * @return list
+ */
+ List listUser(UserDTO userDTO);
+
+ /**
+ * excel 导入用户
+ * @param excelVOList excel 列表数据
+ * @param bindingResult 错误数据
+ * @return ok fail
+ */
+ R importUser(List excelVOList, BindingResult bindingResult);
+
}
diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysDeptServiceImpl.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysDeptServiceImpl.java
index d0ba0d59f..14c595c31 100644
--- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysDeptServiceImpl.java
+++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysDeptServiceImpl.java
@@ -60,7 +60,6 @@ public class SysDeptServiceImpl extends ServiceImpl impl
/**
* 添加信息部门
- *
* @param dept 部门
* @return
*/
@@ -76,7 +75,6 @@ public class SysDeptServiceImpl extends ServiceImpl impl
/**
* 删除部门
- *
* @param id 部门 ID
* @return 成功、失败
*/
@@ -99,7 +97,6 @@ public class SysDeptServiceImpl extends ServiceImpl impl
/**
* 更新部门
- *
* @param sysDept 部门信息
* @return 成功、失败
*/
@@ -118,7 +115,6 @@ public class SysDeptServiceImpl extends ServiceImpl impl
/**
* 查询全部部门树
- *
* @return 树
*/
@Override
diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysUserServiceImpl.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysUserServiceImpl.java
index 1ae965dee..993daaa9d 100644
--- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysUserServiceImpl.java
+++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysUserServiceImpl.java
@@ -19,6 +19,7 @@
package com.pig4cloud.pigx.admin.service.impl;
+import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -28,6 +29,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.pig4cloud.pigx.admin.api.dto.UserDTO;
import com.pig4cloud.pigx.admin.api.dto.UserInfo;
import com.pig4cloud.pigx.admin.api.entity.*;
+import com.pig4cloud.pigx.admin.api.vo.UserExcelVO;
import com.pig4cloud.pigx.admin.api.vo.UserVO;
import com.pig4cloud.pigx.admin.mapper.SysUserMapper;
import com.pig4cloud.pigx.admin.service.*;
@@ -35,6 +37,7 @@ import com.pig4cloud.pigx.common.core.constant.CacheConstants;
import com.pig4cloud.pigx.common.core.constant.CommonConstants;
import com.pig4cloud.pigx.common.core.util.R;
import com.pig4cloud.pigx.common.data.datascope.DataScope;
+import com.pig4cloud.plugin.excel.vo.ErrorMessage;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
@@ -43,10 +46,12 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.BindingResult;
import java.time.LocalDateTime;
import java.util.HashSet;
import java.util.List;
+import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
@@ -212,4 +217,105 @@ public class SysUserServiceImpl extends ServiceImpl impl
return this.list(Wrappers.query().lambda().eq(SysUser::getDeptId, parentId));
}
+ /**
+ * 查询全部的用户
+ * @param userDTO 查询条件
+ * @return list
+ */
+ @Override
+ public List listUser(UserDTO userDTO) {
+ // 根据数据权限查询全部的用户信息
+ List voList = baseMapper.selectVoListByScope(userDTO, new DataScope());
+ // 转换成execl 对象输出
+ List userExcelVOList = voList.stream().map(userVO -> {
+ UserExcelVO excelVO = new UserExcelVO();
+ BeanUtils.copyProperties(userVO, excelVO);
+ String roleNameList = userVO.getRoleList().stream().map(SysRole::getRoleName)
+ .collect(Collectors.joining(StrUtil.COMMA));
+ excelVO.setRoleNameList(roleNameList);
+ return excelVO;
+ }).collect(Collectors.toList());
+ return userExcelVOList;
+ }
+
+ /**
+ * excel 导入用户, 插入正确的 错误的提示行号
+ * @param excelVOList excel 列表数据
+ * @param bindingResult 错误数据
+ * @return ok fail
+ */
+ @Override
+ public R importUser(List excelVOList, BindingResult bindingResult) {
+ // 通用校验获取失败的数据
+ List errorMessageList = (List) bindingResult.getTarget();
+
+ // 个性化校验逻辑
+ List userList = this.list();
+ List deptList = sysDeptService.list();
+ List roleList = sysRoleService.list();
+
+ // 执行数据插入操作 组装 UserDto
+ for (int i = 0; i < excelVOList.size(); i++) {
+ UserExcelVO excel = excelVOList.get(i);
+ Set errorMsg = new HashSet<>();
+ // 校验用户名是否存在
+ boolean exsitUserName = userList.stream()
+ .anyMatch(sysUser -> excel.getUsername().equals(sysUser.getUsername()));
+
+ if (exsitUserName) {
+ errorMsg.add(String.format("%s 用户名已存在", excel.getUsername()));
+ }
+
+ // 判断输入的部门名称列表是否合法
+ Optional deptOptional = deptList.stream()
+ .filter(dept -> excel.getDeptName().equals(dept.getName())).findFirst();
+ if (!deptOptional.isPresent()) {
+ errorMsg.add(String.format("%s 部门名称不存在", excel.getDeptName()));
+ }
+
+ // 判断输入的角色名称列表是否合法
+ List roleNameList = StrUtil.split(excel.getRoleNameList(), StrUtil.COMMA);
+ List roleCollList = roleList.stream()
+ .filter(role -> roleNameList.stream().anyMatch(name -> role.getRoleName().equals(name)))
+ .collect(Collectors.toList());
+
+ if (roleCollList.size() != roleNameList.size()) {
+ errorMsg.add(String.format("%s 角色名称不存在", excel.getRoleNameList()));
+ }
+
+ // 数据合法情况
+ if (CollUtil.isEmpty(errorMsg)) {
+ insertExcelUser(excel, deptOptional, roleCollList);
+ }
+ else {
+ // 数据不合法情况
+ errorMessageList.add(new ErrorMessage((long) (i + 2), errorMsg));
+ }
+
+ }
+
+ if (CollUtil.isNotEmpty(errorMessageList)) {
+ return R.failed(errorMessageList);
+ }
+ return R.ok();
+ }
+
+ /**
+ * 插入excel User
+ */
+ private void insertExcelUser(UserExcelVO excel, Optional deptOptional, List roleCollList) {
+ UserDTO userDTO = new UserDTO();
+ userDTO.setUsername(excel.getUsername());
+ userDTO.setPhone(excel.getPhone());
+ // 批量导入初始密码为手机号
+ userDTO.setPassword(userDTO.getPhone());
+ // 根据部门名称查询部门ID
+ userDTO.setDeptId(deptOptional.get().getDeptId());
+ // 根据角色名称查询角色ID
+ List roleIdList = roleCollList.stream().map(SysRole::getRoleId).collect(Collectors.toList());
+ userDTO.setRole(roleIdList);
+ // 插入用户
+ this.saveUser(userDTO);
+ }
+
}
diff --git a/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysUserMapper.xml b/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysUserMapper.xml
index 1e6dfd35c..1820f8fe0 100644
--- a/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysUserMapper.xml
+++ b/pigx-upms/pigx-upms-biz/src/main/resources/mapper/SysUserMapper.xml
@@ -169,4 +169,36 @@
ORDER BY u.create_time DESC
+
+