diff --git a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/vo/CpUserExcelVo.java b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/vo/CpUserExcelVo.java
new file mode 100644
index 000000000..27bb8dae9
--- /dev/null
+++ b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/vo/CpUserExcelVo.java
@@ -0,0 +1,72 @@
+package com.pig4cloud.pigx.admin.api.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.pig4cloud.pigx.common.excel.annotation.ExcelLine;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+
+/**
+ * 企业微信用户导入
+ */
+@Data
+public class CpUserExcelVo implements Serializable {
+
+ /**
+ * 导入时候回显行号
+ */
+ @ExcelLine
+ @ExcelIgnore
+ private Long lineNum;
+
+
+ @NotBlank(message = "帐号不能为空")
+ @ExcelProperty("帐号")
+ private String username;
+
+ /**
+ * 手机号
+ */
+ @NotBlank(message = "手机号不能为空")
+ @ExcelProperty("手机")
+ private String phone;
+
+
+ /**
+ * 姓名
+ */
+ @NotBlank(message = "姓名不能为空")
+ @ExcelProperty("姓名")
+ private String name;
+
+
+ /**
+ * 别名
+ */
+ @ExcelProperty("别名")
+ private String nickname;
+
+ /**
+ * 部门名称
+ */
+ @NotBlank(message = "部门不能为空")
+ @ExcelProperty("部门")
+ private String deptName;
+
+
+ @ExcelProperty("企业邮箱")
+ private String email;
+
+
+
+
+
+ /**
+ * 锁定标记
+ */
+ @ExcelProperty("激活状态,0:已激活,9:未激活")
+ private String lockFlag;
+
+}
diff --git a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/vo/DeptExcelVo.java b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/vo/DeptExcelVo.java
new file mode 100644
index 000000000..dc11ff62c
--- /dev/null
+++ b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/vo/DeptExcelVo.java
@@ -0,0 +1,45 @@
+package com.pig4cloud.pigx.admin.api.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.pig4cloud.pigx.common.excel.annotation.ExcelLine;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * 部门导入导出
+ */
+@Data
+public class DeptExcelVo implements Serializable {
+ /**
+ * 导入时候回显行号
+ */
+ @ExcelLine
+ @ExcelIgnore
+ private Long lineNum;
+
+ /**
+ * 上级部门
+ */
+ @NotBlank(message = "上级部门不能为空")
+ @ExcelProperty("上级部门")
+ private String parentName;
+
+
+ /**
+ * 部门名称
+ */
+ @NotBlank(message = "部门名称不能为空")
+ @ExcelProperty("部门名称")
+ private String name;
+
+ /**
+ * 排序
+ */
+ @ExcelProperty(value = "排序值")
+ private Integer sortOrder;
+
+}
diff --git a/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/vo/DingUserExcelVo.java b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/vo/DingUserExcelVo.java
new file mode 100644
index 000000000..2e2852808
--- /dev/null
+++ b/pigx-upms/pigx-upms-api/src/main/java/com/pig4cloud/pigx/admin/api/vo/DingUserExcelVo.java
@@ -0,0 +1,59 @@
+package com.pig4cloud.pigx.admin.api.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.pig4cloud.pigx.common.excel.annotation.ExcelLine;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+
+@Data
+public class DingUserExcelVo implements Serializable {
+
+ /**
+ * 导入时候回显行号
+ */
+ @ExcelLine
+ @ExcelIgnore
+ private Long lineNum;
+
+
+ /**
+ * 手机号
+ */
+ @NotBlank(message = "手机号不能为空")
+ @ExcelProperty("手机号")
+ private String phone;
+
+
+ /**
+ * 姓名
+ */
+ @NotBlank(message = "姓名不能为空")
+ @ExcelProperty("姓名")
+ private String name;
+
+
+ /**
+ * 部门名称
+ */
+ @NotBlank(message = "部门不能为空")
+ @ExcelProperty("部门")
+ private String deptName;
+
+
+ @ExcelProperty("邮箱")
+ private String email;
+
+
+
+
+
+ /**
+ * 锁定标记
+ */
+ @ExcelProperty("激活状态,0:是,9:否")
+ private String lockFlag;
+
+}
diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysDeptController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysDeptController.java
index 0a6551a34..9c9abd45f 100644
--- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysDeptController.java
+++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysDeptController.java
@@ -22,17 +22,24 @@ package com.pig4cloud.pigx.admin.controller;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.pig4cloud.pigx.admin.api.entity.SysDept;
import com.pig4cloud.pigx.admin.api.entity.SysDeptRelation;
+import com.pig4cloud.pigx.admin.api.vo.CpUserExcelVo;
+import com.pig4cloud.pigx.admin.api.vo.DeptExcelVo;
import com.pig4cloud.pigx.admin.service.SysDeptRelationService;
import com.pig4cloud.pigx.admin.service.SysDeptService;
import com.pig4cloud.pigx.common.core.util.R;
+import com.pig4cloud.pigx.common.excel.annotation.RequestExcel;
+import com.pig4cloud.pigx.common.excel.annotation.ResponseExcel;
import com.pig4cloud.pigx.common.log.annotation.SysLog;
import io.swagger.annotations.Api;
import lombok.AllArgsConstructor;
+import oracle.jdbc.proxy.annotation.Post;
import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.time.LocalDateTime;
+import java.util.List;
/**
*
@@ -127,4 +134,27 @@ public class SysDeptController {
relationService.list(Wrappers.lambdaQuery().eq(SysDeptRelation::getAncestor, deptId)));
}
+
+ /**
+ * 导出部门
+ * @return
+ */
+ @ResponseExcel
+ @GetMapping("/export")
+ public List export(){
+ return sysDeptService.listExcelVo();
+ }
+
+
+ /**
+ * 导入部门
+ * @param excelVOList
+ * @param bindingResult
+ * @return
+ */
+ @PostMapping("import")
+ public R importDept(@RequestExcel List excelVOList, BindingResult bindingResult){
+
+ return sysDeptService.importDept(excelVOList,bindingResult);
+ }
}
diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysUserController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysUserController.java
index 5fea5ed15..6fc2c1891 100644
--- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysUserController.java
+++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/SysUserController.java
@@ -24,6 +24,8 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pig4cloud.pigx.admin.api.dto.UserDTO;
import com.pig4cloud.pigx.admin.api.entity.SysUser;
+import com.pig4cloud.pigx.admin.api.vo.CpUserExcelVo;
+import com.pig4cloud.pigx.admin.api.vo.DingUserExcelVo;
import com.pig4cloud.pigx.admin.api.vo.UserExcelVO;
import com.pig4cloud.pigx.admin.service.SysUserService;
import com.pig4cloud.pigx.common.core.exception.ErrorCodes;
@@ -213,6 +215,24 @@ public class SysUserController {
return userService.importUser(excelVOList, bindingResult);
}
+
+ /**
+ * 导入钉钉用户
+ * @param excelVOList
+ * @param bindingResult
+ * @return
+ */
+ @PostMapping("/importDingUser")
+ public R importDingUser(@RequestExcel List excelVOList, BindingResult bindingResult){
+ return userService.importDingUser(excelVOList,bindingResult);
+ }
+
+
+ @PostMapping("/importCpUser")
+ public R importCpUser(@RequestExcel List excelVOList, BindingResult bindingResult){
+ return userService.importCpUser(excelVOList,bindingResult);
+ }
+
/**
* 锁定指定用户
* @param username 用户名
diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/SysDeptService.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/SysDeptService.java
index a10f225f2..4ff719379 100644
--- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/SysDeptService.java
+++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/SysDeptService.java
@@ -22,6 +22,9 @@ package com.pig4cloud.pigx.admin.service;
import cn.hutool.core.lang.tree.Tree;
import com.baomidou.mybatisplus.extension.service.IService;
import com.pig4cloud.pigx.admin.api.entity.SysDept;
+import com.pig4cloud.pigx.admin.api.vo.DeptExcelVo;
+import com.pig4cloud.pigx.common.core.util.R;
+import org.springframework.validation.BindingResult;
import java.util.List;
@@ -63,4 +66,7 @@ public interface SysDeptService extends IService {
*/
Boolean updateDeptById(SysDept sysDept);
+ List listExcelVo();
+
+ R importDept(List excelVOList, BindingResult bindingResult);
}
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 25aa52c26..55cfdf642 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,6 +25,8 @@ 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.CpUserExcelVo;
+import com.pig4cloud.pigx.admin.api.vo.DingUserExcelVo;
import com.pig4cloud.pigx.admin.api.vo.UserExcelVO;
import com.pig4cloud.pigx.admin.api.vo.UserVO;
import com.pig4cloud.pigx.common.core.util.R;
@@ -124,4 +126,7 @@ public interface SysUserService extends IService {
*/
R lockUser(String username);
+ R importDingUser(List excelVOList, BindingResult bindingResult);
+
+ R importCpUser(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 506766ac8..934f21fd7 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
@@ -28,20 +28,25 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.pig4cloud.pigx.admin.api.entity.SysDept;
import com.pig4cloud.pigx.admin.api.entity.SysDeptRelation;
+import com.pig4cloud.pigx.admin.api.vo.CpUserExcelVo;
+import com.pig4cloud.pigx.admin.api.vo.DeptExcelVo;
import com.pig4cloud.pigx.admin.mapper.SysDeptMapper;
import com.pig4cloud.pigx.admin.service.SysDeptRelationService;
import com.pig4cloud.pigx.admin.service.SysDeptService;
+import com.pig4cloud.pigx.common.core.exception.ErrorCodes;
+import com.pig4cloud.pigx.common.core.util.MsgUtils;
+import com.pig4cloud.pigx.common.core.util.R;
import com.pig4cloud.pigx.common.data.datascope.DataScope;
+import com.pig4cloud.pigx.common.excel.vo.ErrorMessage;
import lombok.AllArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.BindingResult;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.stream.Collectors;
+import java.util.stream.Stream;
/**
*
@@ -114,6 +119,62 @@ public class SysDeptServiceImpl extends ServiceImpl impl
return Boolean.TRUE;
}
+ /**
+ * 导出部门
+ * @return
+ */
+ @Override
+ public List listExcelVo() {
+ List list = this.list();
+ List deptExcelVos = list.stream().map(item -> {
+ DeptExcelVo deptExcelVo = new DeptExcelVo();
+ deptExcelVo.setName(item.getName());
+ Optional first = this.list().stream().filter(it -> item.getParentId().equals(it.getDeptId()))
+ .map(SysDept::getName).findFirst();
+ deptExcelVo.setParentName(first.orElse("跟部门"));
+ deptExcelVo.setSortOrder(item.getSortOrder());
+ return deptExcelVo;
+ }).collect(Collectors.toList());
+ return deptExcelVos;
+ }
+
+ @Override
+ public R importDept(List excelVOList, BindingResult bindingResult) {
+ List errorMessageList = (List) bindingResult.getTarget();
+
+ List deptList = this.list();
+ for (DeptExcelVo item: excelVOList){
+ Set errorMsg = new HashSet<>();
+ boolean exsitUsername = deptList.stream()
+ .anyMatch(sysDept -> item.getName().equals(sysDept.getName()));
+ if (exsitUsername) {
+ errorMsg.add("部门名称已经存在");
+ }
+ SysDept one = this.getOne(Wrappers.lambdaQuery().eq(SysDept::getName, item.getParentName()));
+ if(item.getParentName().equals("跟部门")){
+ one = new SysDept();
+ one.setDeptId(0L);
+ }
+ if (one == null) {
+ errorMsg.add("上级部门不存在");
+ }
+ if (CollUtil.isEmpty(errorMsg)) {
+ SysDept sysDept = new SysDept();
+ sysDept.setName(item.getName());
+ sysDept.setParentId(one.getDeptId());
+ sysDept.setSortOrder(item.getSortOrder());
+ this.saveDept(sysDept);
+ }else{
+ // 数据不合法情况
+ errorMessageList.add(new ErrorMessage(item.getLineNum(), errorMsg));
+ }
+ }
+ if (CollUtil.isNotEmpty(errorMessageList)) {
+ return R.failed(errorMessageList);
+ }
+ return R.ok(null, "部门导入成功");
+ }
+
/**
* 查询全部部门树
* @return 树 部门名称
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 7a61c3f7c..d8f41a115 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
@@ -29,6 +29,8 @@ 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.CpUserExcelVo;
+import com.pig4cloud.pigx.admin.api.vo.DingUserExcelVo;
import com.pig4cloud.pigx.admin.api.vo.UserExcelVO;
import com.pig4cloud.pigx.admin.api.vo.UserVO;
import com.pig4cloud.pigx.admin.mapper.SysUserMapper;
@@ -396,4 +398,119 @@ public class SysUserServiceImpl extends ServiceImpl impl
return R.ok();
}
+
+ @Override
+ public R importDingUser(List excelVOList, BindingResult bindingResult) {
+ List errorMessageList = (List) bindingResult.getTarget();
+ // 个性化校验逻辑
+ List userList = this.list();
+ List deptList = sysDeptService.list();
+
+ for (DingUserExcelVo item: excelVOList){
+ Set errorMsg = new HashSet<>();
+ boolean exsitUser = userList.stream()
+ .anyMatch(sysUser -> item.getName().equals(sysUser.getName()));
+ if (exsitUser) {
+ errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_USER_USERNAME_EXISTING, item.getName()));
+ }
+ // 删除手机号中的 +86 前缀
+ String phone = item.getPhone().split("-")[1];
+ boolean exsitPhone = userList.stream()
+ .anyMatch(sysUser -> phone.equals(sysUser.getPhone()));
+ if (exsitPhone) {
+ errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_USER_PHONE_EXISTING, item.getPhone()));
+ }
+ String deptName = item.getDeptName().split(",")[0];
+ // 判断输入的部门名称列表是否合法
+ Optional deptOptional = deptList.stream()
+ .filter(dept -> deptName.equals(dept.getName())).findFirst();
+ if (!deptOptional.isPresent()) {
+ errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_DEPT_DEPTNAME_INEXISTENCE, item.getDeptName()));
+ }
+
+ // 数据合法情况
+ if (CollUtil.isEmpty(errorMsg)) {
+ UserDTO userDTO = new UserDTO();
+ userDTO.setName(item.getName());
+ // 批量导入初始密码为手机号
+ userDTO.setPassword(phone);
+ userDTO.setUsername(phone);
+ userDTO.setPhone(phone);
+ userDTO.setDeptId(deptOptional.get().getDeptId());
+ userDTO.setDelFlag(item.getLockFlag());
+ userDTO.setEmail(item.getEmail());
+ this.saveUser(userDTO);
+ }
+ else {
+ // 数据不合法情况
+ errorMessageList.add(new ErrorMessage(item.getLineNum(), errorMsg));
+ }
+ }
+ if (CollUtil.isNotEmpty(errorMessageList)) {
+ return R.failed(errorMessageList);
+ }
+ return R.ok(null, MsgUtils.getMessage(ErrorCodes.SYS_USER_IMPORT_SUCCEED));
+ }
+
+ /**
+ * 企业微信用户导入
+ * @param excelVOList
+ * @param bindingResult
+ * @return
+ */
+ @Override
+ public R importCpUser(List excelVOList, BindingResult bindingResult) {
+ List errorMessageList = (List) bindingResult.getTarget();
+
+ // 个性化校验逻辑
+ List userList = this.list();
+ List deptList = sysDeptService.list();
+
+ for (CpUserExcelVo item: excelVOList){
+ Set errorMsg = new HashSet<>();
+ boolean exsitUsername = userList.stream()
+ .anyMatch(sysUser -> item.getUsername().equals(sysUser.getUsername()));
+ if (exsitUsername) {
+ errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_USER_USERNAME_EXISTING, item.getUsername()));
+ }
+ boolean exsitPhone = userList.stream()
+ .anyMatch(sysUser -> item.getPhone().equals(sysUser.getPhone()));
+ if (exsitPhone) {
+ errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_USER_PHONE_EXISTING, item.getPhone()));
+ }
+ // 多部门获取第一个 到部门获取自己点
+ String[] deptNameList = item.getDeptName().split(";")[0].split("/");
+ String deptName = deptNameList[deptNameList.length-1];
+ // 判断输入的部门名称列表是否合法
+ Optional deptOptional = deptList.stream()
+ .filter(dept -> deptName.equals(dept.getName())).findFirst();
+ if (!deptOptional.isPresent()) {
+ errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_DEPT_DEPTNAME_INEXISTENCE, deptName));
+ }
+
+ // 数据合法情况
+ if (CollUtil.isEmpty(errorMsg)) {
+ UserDTO userDTO = new UserDTO();
+ userDTO.setName(item.getName());
+ // 批量导入初始密码为手机号
+ userDTO.setPassword(item.getPhone());
+ userDTO.setUsername(item.getUsername());
+ userDTO.setPhone(item.getPhone());
+ userDTO.setDeptId(deptOptional.get().getDeptId());
+ userDTO.setDelFlag(item.getLockFlag());
+ userDTO.setEmail(item.getEmail());
+ userDTO.setNickname(item.getNickname());
+ this.saveUser(userDTO);
+ }
+ else {
+ // 数据不合法情况
+ errorMessageList.add(new ErrorMessage(item.getLineNum(), errorMsg));
+ }
+ }
+ if (CollUtil.isNotEmpty(errorMessageList)) {
+ return R.failed(errorMessageList);
+ }
+ return R.ok(null, MsgUtils.getMessage(ErrorCodes.SYS_USER_IMPORT_SUCCEED));
+ }
+
}
diff --git a/pom.xml b/pom.xml
index 41c26b9bb..b337666d1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -40,7 +40,7 @@
0.0.34
0.4.0
2.2.5
- 2.7.7
+ 2.7.9
1.2.7
3.6.4
2.0.0