导入功能

导入代码

 /**
     * 用户导入,R是一个异常处理类
     * @param file
     * @return
     */
   @ApiOperation("人员导入")
    @PostMapping("/userFileImport")
    public R<List<Map<String, Object>>> userFileImport(@RequestBody MultipartFile file,@RequestHeader("token") String token) {
       R<List<Map<String, Object>>> result = new R<>();
       List<Map<String, Object>> errorList = new ArrayList<>();//接收错误信息
       try {
           // 读取文件
           InputStream in = file.getInputStream();
           @SuppressWarnings("resource")
           XSSFSheet xssfSheet = new XSSFWorkbook(in).getSheetAt(0);
           if (xssfSheet == null) {
               result.setCode(REnum.PARAMETER.getCode());//错误代码
               result.setMsg("导入数据为空");//错误描述
               return result;
           }
           if (xssfSheet.getLastRowNum() > 10000) {
               result.setCode(REnum.PARAMETER.getCode());
               result.setMsg("单次导入数据不能超过10000条");
               return result;
           }
           // 需要判断的list
           List<String> primeval = new ArrayList<>();
           primeval.add("姓名");
           primeval.add("登录账号");
           primeval.add("所属机构");
           primeval.add("指挥调度系统权限");
           // 存在的列
           Map<String, Integer> existColumn = new HashMap<String, Integer>();

           // 计算多少列
           XSSFRow xssfRow = xssfSheet.getRow(0);

           int column = 0;
           String columnValue = xssfRow.getCell(column).toString();
           while (columnValue != null) {
               columnValue = columnValue.replace(" ", "");
               for (int i = 0; i < primeval.size(); i++) {
                   if (primeval.contains(columnValue) && primeval.get(i).equals(columnValue)) {
                       existColumn.put(columnValue, column - 1);
                       break;
                   }
               }
               Object value = xssfRow.getCell(column++);
               columnValue = value == null ? null : value.toString();
           }
           // 判断是否缺少列 并且 加上标识
           @SuppressWarnings({"unchecked", "rawtypes"})
           List<String> mapList = new ArrayList(existColumn.keySet());

           for (int i = 0; i < primeval.size(); i++) {
               if (!mapList.contains(primeval.get(i))) {
                   result.setCode(REnum.PARAMETER.getCode());
                   result.setMsg("Excel表格不正确,缺少: " + mapList.get(i) + " 列,请填写正确后重新再试.");
                   return result;
               }
           }

           List<User> list = new ArrayList<>();
//            UserInfoVO userInfoVO = null;
           // Read the Row
           Date timeReportDate = new Date();
           for (int rowNum = 1; rowNum <= xssfSheet.getLastRowNum(); rowNum++) {
               xssfRow = xssfSheet.getRow(rowNum);
               if (xssfRow == null) {
                   continue;
               }
               // 列
               String userName = xssfRow.getCell(existColumn.get("姓名")).toString();
               String loginUser = xssfRow.getCell(existColumn.get("登录账号")).toString();
               String orgName = xssfRow.getCell(existColumn.get("所属机构")).toString();
               String commandAuth = xssfRow.getCell(existColumn.get("指挥调度系统权限")).toString();

               //根据所属单位Id查找企业单位信息
               QueryWrapper<Organization> qw = new QueryWrapper<>();//mybatis plus的条件判断
               //查找机构信息
               /*   qw = new QueryWrapper<>();*/
               qw.lambda().eq(Organization::getName, orgName);
               Organization organizationVO = organizationService.getOne(qw);
               if (organizationVO != null) {
                   if (userService.count(new QueryWrapper<User>().lambda().eq(User::getOrganizationId, organizationVO.getId())) > 0) {
                       Map<String, Object> map = new HashMap<>();
                       map.put("userName", userName);
                       map.put("loginUser", loginUser);
                       map.put("orgName", orgName);
                       map.put("commandAuth", commandAuth);
                       map.put("msg", "该机构已有账号");
                       errorList.add(map);//将错误信息保存,然后返回
                       continue;
                   }
                   QueryWrapper<User>   qw1 = new QueryWrapper<User>();
                   qw1.lambda().eq(User::getUserName, loginUser);// 登录账号
                   User userInfoVO = userService.getOne(qw1);
                   Date intiDate = new Date();
                   int locked;
                   if (userInfoVO != null) {
                       //已有账号进行覆盖
                       userInfoVO.setNickName(userName);//覆盖名字
                       if(commandAuth.equals("开启")){
                           locked=0;
                       }else{
                           locked=1;
                       }
                       userInfoVO.setLocked(locked);//覆盖权限
                       userInfoVO.setOrganizationId(organizationVO.getId());//覆盖机构
                       userInfoVO.setTimeUpdate(LocalDateTime.now());//修改时间
                       userService.updateById(userInfoVO);
                   } else {
                       //新增账号
                       User info= new User();
                       info.setNickName(userName);//姓名
                       if(commandAuth.equals("开启")){
                           locked=0;
                       }else{
                           locked=1;
                       }
                       info.setLocked(locked);
                       info.setUserName(loginUser);//账号
                       info.setOrganizationId(organizationVO.getId());
                       info.setTimeCreate(LocalDateTime.now());
                       info.setTimeUpdate(LocalDateTime.now());
                       Role r=roleService.getOne(new QueryWrapper<Role>().lambda().eq(Role::getRoleName,"普通警员"));
                       info.setRoleId(r.getId());
                       info.setUserCreate(JWTUtils.getUid(token).longValue());
                       info.setPassword(Md5Util.md5DigestAsHex("666666"));
                       userService.save(info);
                       /*   signService.initSign(SignOwner.sys_user, String.valueOf(info.getId()), info.getPassword());*/
                   }
               } else {
                   Map<String, Object> map = new HashMap<>();
                   map.put("userName", userName);
                   map.put("loginUser", loginUser);
                   map.put("orgName", orgName);
                   map.put("commandAuth", commandAuth);
                   map.put("msg", "所属机构不存在");
                   errorList.add(map);
                   continue;
               }
           }
       } catch (Exception ex) {
           // 手动开启事务回滚
           TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
           result.setCode(REnum.PARAMETER.getCode());
           result.setMsg("导入失败");
           return result;
       }
       result.setData(errorList);
       return result;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_45416651/article/details/107844030