From 0ae49f37de67633d3724193b083b3ed645580916 Mon Sep 17 00:00:00 2001
From: 孔祥富 <kongxf@daryun.com>
Date: 星期六, 27 二月 2021 18:05:28 +0800
Subject: [PATCH] 用户管理导入

---
 febs-common/febs-common-core/src/main/java/cc/mrbird/febs/common/core/entity/system/SystemUser.java         |   34 ++++++++---------
 febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/service/impl/UserServiceImpl.java |   10 +++-
 febs-server/febs-server-job/src/main/resources/bootstrap.yml                                                |    4 +-
 febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/controller/UserController.java    |   68 ++++++++++++++++++++++++++++++++--
 4 files changed, 89 insertions(+), 27 deletions(-)

diff --git a/febs-common/febs-common-core/src/main/java/cc/mrbird/febs/common/core/entity/system/SystemUser.java b/febs-common/febs-common-core/src/main/java/cc/mrbird/febs/common/core/entity/system/SystemUser.java
index 88fde0a..2b5d425 100644
--- a/febs-common/febs-common-core/src/main/java/cc/mrbird/febs/common/core/entity/system/SystemUser.java
+++ b/febs-common/febs-common-core/src/main/java/cc/mrbird/febs/common/core/entity/system/SystemUser.java
@@ -58,15 +58,25 @@
      */
     @TableId(value = "USER_ID", type = IdType.AUTO)
     private Long userId;
-
+    /**
+     * 部门名称
+     */
+    @TableField(exist = false)
+    @ExcelField(value = "部门(护卫点)")
+    private String deptName;
     /**
      * 用户名
      */
     @TableField("USERNAME")
     @Size(min = 4, max = 10, message = "{range}")
-    @ExcelField(value = "用户名")
+    @ExcelField(value = "用户名",comment = "提示:必填,只能填写用户名")
     private String username;
-
+    /**
+     * 头像
+     */
+    @TableField("nickName")
+    @ExcelField(value = "员工姓名",comment = "提示:必填,只能填写员工姓名")
+    private String nickName;
     /**
      * 密码
      */
@@ -100,6 +110,7 @@
      * 身份證號
      */
     @TableField("certificateNumb")
+    @ExcelField(value = "身份证号",comment = "提示:必填,只能填写身份证")
     private String certificateNumb;
 
     /**
@@ -114,28 +125,24 @@
      * 创建时间
      */
     @TableField("CREATE_TIME")
-    @ExcelField(value = "创建时间", writeConverter = TimeConverter.class)
     private Date createTime;
 
     /**
      * 修改时间
      */
     @TableField("MODIFY_TIME")
-    @ExcelField(value = "修改时间", writeConverter = TimeConverter.class)
     private Date modifyTime;
 
     /**
      * 最近访问时间
      */
     @TableField("LAST_LOGIN_TIME")
-    @ExcelField(value = "最近访问时间", writeConverter = TimeConverter.class)
     private Date lastLoginTime;
 
     /**
      * 性别 0男 1女 2 保密
      */
     @TableField("SSEX")
-    @ExcelField(value = "性别", writeConverterExp = "0=男,1=女,2=保密")
     private String sex;
 
     /**
@@ -144,25 +151,16 @@
     @TableField("AVATAR")
     private String avatar;
 
-    /**
-     * 头像
-     */
-    @TableField("nickName")
-    private String nickName;
+
 
     /**
      * 描述
      */
     @TableField("DESCRIPTION")
     @Size(max = 100, message = "{noMoreThan}")
-    @ExcelField(value = "个人描述")
     private String description;
 
-    /**
-     * 部门名称
-     */
-    @TableField(exist = false)
-    private String deptName;
+
 
     @TableField(exist = false)
     private String createTimeFrom;
diff --git a/febs-server/febs-server-job/src/main/resources/bootstrap.yml b/febs-server/febs-server-job/src/main/resources/bootstrap.yml
index 18ec524..d9e8aef 100644
--- a/febs-server/febs-server-job/src/main/resources/bootstrap.yml
+++ b/febs-server/febs-server-job/src/main/resources/bootstrap.yml
@@ -4,12 +4,12 @@
   cloud:
     nacos:
       config:
-        server-addr: ${nacos.url}:8848
+        server-addr: localhost:8001
         group: DEFAULT_GROUP
         prefix: febs-server-job
         file-extension: yaml
       discovery:
-        server-addr: ${nacos.url}:8848
+        server-addr: localhost:8001
 
 logging:
   level:
diff --git a/febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/controller/UserController.java b/febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/controller/UserController.java
index e309c09..6661fa2 100644
--- a/febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/controller/UserController.java
+++ b/febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/controller/UserController.java
@@ -3,29 +3,43 @@
 import cc.mrbird.febs.common.core.entity.FebsResponse;
 import cc.mrbird.febs.common.core.entity.QueryRequest;
 import cc.mrbird.febs.common.core.entity.constant.StringConstant;
+import cc.mrbird.febs.common.core.entity.system.Dept;
+import cc.mrbird.febs.common.core.entity.system.Eximport;
 import cc.mrbird.febs.common.core.entity.system.LoginLog;
 import cc.mrbird.febs.common.core.entity.system.SystemUser;
 import cc.mrbird.febs.common.core.exception.FebsException;
 import cc.mrbird.febs.common.core.utils.FebsUtil;
 import cc.mrbird.febs.server.system.annotation.ControllerEndpoint;
+import cc.mrbird.febs.server.system.service.IDeptService;
 import cc.mrbird.febs.server.system.service.ILoginLogService;
 import cc.mrbird.febs.server.system.service.IUserDataPermissionService;
 import cc.mrbird.febs.server.system.service.IUserService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.google.common.base.Stopwatch;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
 import com.wuwenze.poi.ExcelKit;
+import com.wuwenze.poi.handler.ExcelReadHandler;
+import com.wuwenze.poi.pojo.ExcelErrorField;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.beanutils.ConvertUtils;
+import org.apache.commons.beanutils.converters.DateConverter;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import javax.validation.constraints.NotBlank;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.io.IOException;
+import java.util.*;
+import java.util.stream.IntStream;
 
 /**
  * @author MrBird
@@ -36,7 +50,7 @@
 @RequiredArgsConstructor
 @RequestMapping("user")
 public class UserController {
-
+    private final IDeptService deptService;
     private final IUserService userService;
     private final IUserDataPermissionService userDataPermissionService;
     private final ILoginLogService loginLogService;
@@ -153,7 +167,53 @@
     @PreAuthorize("hasAuthority('user:export')")
     @ControllerEndpoint(operation = "导出用户数据", exceptionMessage = "导出Excel失败")
     public void export(QueryRequest queryRequest, SystemUser user, HttpServletResponse response) {
+        int count = this.userService.count();
+        queryRequest.setPageSize(count);
         List<SystemUser> users = this.userService.findUserDetailList(user, queryRequest).getRecords();
         ExcelKit.$Export(SystemUser.class, response).downXlsx(users, false);
     }
+    private static final String XLSX = ".xlsx";
+    @PostMapping("import")
+    public FebsResponse importExcels(MultipartFile file) throws IOException, FebsException {
+        if (file.isEmpty()) {
+            throw new FebsException("导入数据为空");
+        }
+        String filename = file.getOriginalFilename();
+        if (!StringUtils.endsWith(filename, XLSX)) {
+            throw new FebsException("只支持.xlsx类型文件导入");
+        }
+        Stopwatch stopwatch = Stopwatch.createStarted();
+        final List<SystemUser> data = Lists.newArrayList();
+        final List<Map<String, Object>> error = Lists.newArrayList();
+        ExcelKit.$Import(SystemUser.class).readXlsx(file.getInputStream(), new ExcelReadHandler<SystemUser>() {
+            @Override
+            public void onSuccess(int sheet, int row, SystemUser eximport) {
+                data.add(eximport);
+            }
+            @Override
+            public void onError(int sheet, int row, List<ExcelErrorField> errorFields) {
+                error.add(ImmutableMap.of("row", row, "errorFields", errorFields));
+            }
+        });
+        if (CollectionUtils.isNotEmpty(data)) {
+            for (SystemUser systemUser:data){
+                Dept one = deptService.getOne(new QueryWrapper<Dept>().eq("DEPT_NAME", systemUser.getDeptName()));
+                if(one!=null){
+                    systemUser.setDeptId(one.getDeptId());
+                }
+                this.userService.createUser(systemUser);
+            }
+        }
+        ImmutableMap<String, Object> result = ImmutableMap.of(
+                "time", stopwatch.stop().toString(),
+                "data", data,
+                "error", error
+        );
+        return new FebsResponse().data(result);
+    }
+    @PostMapping("template")
+    public void generateImportTemplate(HttpServletResponse response) {
+        List<SystemUser> list = new ArrayList<>();
+        ExcelKit.$Export(SystemUser.class, response).downXlsx(list, true);
+    }
 }
diff --git a/febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/service/impl/UserServiceImpl.java b/febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/service/impl/UserServiceImpl.java
index f3d9f42..83024dd 100644
--- a/febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/service/impl/UserServiceImpl.java
+++ b/febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/service/impl/UserServiceImpl.java
@@ -84,10 +84,14 @@
         save(user);
         // 保存用户角色
         String[] roles = StringUtils.splitByWholeSeparatorPreserveAllTokens(user.getRoleId(), StringConstant.COMMA);
-        setUserRoles(user, roles);
-        // 保存用户数据权限关联关系
+        if(roles!=null){
+            setUserRoles(user, roles);
+        }
         String[] deptIds = StringUtils.splitByWholeSeparatorPreserveAllTokens(user.getDeptIds(), StringConstant.COMMA);
-        setUserDataPermissions(user, deptIds);
+        if(deptIds!=null){
+            // 保存用户数据权限关联关系
+            setUserDataPermissions(user, deptIds);
+        }
     }
 
     @Override

--
Gitblit v1.8.0