孔祥富
2021-02-27 0ae49f37de67633d3724193b083b3ed645580916
用户管理导入
4个文件已修改
112 ■■■■ 已修改文件
febs-common/febs-common-core/src/main/java/cc/mrbird/febs/common/core/entity/system/SystemUser.java 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
febs-server/febs-server-job/src/main/resources/bootstrap.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/controller/UserController.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/service/impl/UserServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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;
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:
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);
    }
}
febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/service/impl/UserServiceImpl.java
@@ -84,11 +84,15 @@
        save(user);
        // 保存用户角色
        String[] roles = StringUtils.splitByWholeSeparatorPreserveAllTokens(user.getRoleId(), StringConstant.COMMA);
        if(roles!=null){
        setUserRoles(user, roles);
        // 保存用户数据权限关联关系
        }
        String[] deptIds = StringUtils.splitByWholeSeparatorPreserveAllTokens(user.getDeptIds(), StringConstant.COMMA);
        if(deptIds!=null){
            // 保存用户数据权限关联关系
        setUserDataPermissions(user, deptIds);
    }
    }
    @Override
    @Transactional(rollbackFor = Exception.class)