Java导入

点击按钮导入
在这里插入图片描述

导入成功的两条数据
代码如下:

Controller层【控制器】
@RequestMapping(value = "/uploadExcel",produces = "application/json;charset=utf-8")
@ResponseBody
public JsonMsg uploadExcel(MultipartFile excelFile) throws IOException {
    JsonMsg jsonMsg=new JsonMsg();
    InputStream inputStream=null;
    String excelExt=null;
    //判断文件是否上传
    if (excelFile!=null&&excelFile.getBytes().length>0){
        inputStream=excelFile.getInputStream();
        excelExt=Tools.getFileExt(excelFile.getOriginalFilename());
    }
    //解析Xls xlsx文件
    if (inputStream!=null){
         Workbook workbook=null; //1、定义工作簿
         if (".xls".equals(excelExt)){ //2、判断后缀,决定使用解析方式
             workbook=new HSSFWorkbook(inputStream);
        }else if (".xlsx".equals(excelExt)){
            workbook=new XSSFWorkbook(inputStream);
        }else { //未知内容
           jsonMsg.setMsg("请上传Excel文件(xls、xlsx)");
            return jsonMsg;
        }
        //3、获取第一个工作表
        Sheet sheet=workbook.getSheetAt(0);
        if (sheet==null){
            jsonMsg.setMsg("上传Excel文件中不存在工作表,请检查");
            return jsonMsg;
        }
        //4、判断是否有数据
        //获取表格中最后一行的行号
        int lastRowNum=sheet.getLastRowNum();
        if (lastRowNum<2){//0行是说明 1行是标题
            jsonMsg.setMsg("请录入数据");
            return jsonMsg;
        }
        //5、循环读取数据
        List<SysUser> saveUsers=new ArrayList<>();//存放导入的用户数据
        List<String> strErrorInfo=new ArrayList<>();//存放转换过程中的错误信息
        //查询出所有的用户信息,用于比较用户名是否存在(根据项目实际情况,吐过用户较少,这种方式更快,如果用户太多(几万级以上)直接通过name去数据库查询更快)
        List<SysUser> dbSysUsers=this.userService.selectAll();
        List<H5SelectVo> dbSysPosition=this.positionService.selectPositionForH5Select();//所有的职位表,用于匹配
        List<H5SelectVo> dbSysRole=this.roleService.selectRoleForH5Select();//所有的角色用于匹配
        List<TreeSelectVo> dbSysDepartment=this.departmentService.selectForTreeSelectN();//所有的部门,等级存放,方便查找
        //出生日期格式化
        SimpleDateFormat birthdayFormat=new SimpleDateFormat("yyyy-MM-dd");
        for (int i=2;i<= lastRowNum;i++){
            Row thisRow=sheet.getRow(i);//读取行
            //读取列
            String strIndex=thisRow.getCell(0)==null?"":thisRow.getCell(0).toString();
            String userName=thisRow.getCell(1)==null?"":thisRow.getCell(1).toString();//用户名
            String userPassword=thisRow.getCell(2)==null?"":thisRow.getCell(2).toString();//密码
            String realName=thisRow.getCell(3)==null?"":thisRow.getCell(3).toString();//真实名字
            String strDepartment=thisRow.getCell(4)==null?"":thisRow.getCell(4).toString();//部门
            String strPosition=thisRow.getCell(5)==null?"":thisRow.getCell(5).toString();//职位
            String strRole=thisRow.getCell(6)==null?"":thisRow.getCell(6).toString();//角色
            String strGender=thisRow.getCell(7)==null?"":thisRow.getCell(7).toString();//性别
            String strBirthday=thisRow.getCell(8)==null?"":thisRow.getCell(8).toString();//生日
            String strEmail=thisRow.getCell(9)==null?"":thisRow.getCell(9).toString();//邮箱
            String strMobile=thisRow.getCell(10)==null?"":thisRow.getCell(10).toString();//手机号
            String strQQ=thisRow.getCell(11)==null?"":thisRow.getCell(11).toString();//qq
            String strWechat=thisRow.getCell(12)==null?"":thisRow.getCell(12).toString();//微信
            String strUserStatus=thisRow.getCell(13)==null?"":thisRow.getCell(13).toString();//状态
            String strRemark=thisRow.getCell(14)==null?"":thisRow.getCell(14).toString();//备注
            //数据转换匹配 验证
            boolean isError=false;
            SysUser saveUser=new SysUser();
	    userName=userName.trim();  //用户名
            //查找是否存在数据库中
            for (SysUser item:dbSysUsers) {
                if (item.getUserName().trim().equals(userName)){
                    //存在记录错误
                    strErrorInfo.add("第"+strIndex+"条数据:用户名"+userName+"已经存在于系统中");
                    isError=true;
                    break;
                }
            }
            if (isError)continue;
            //查找是否存在 之前的用户中
            for (SysUser item:saveUsers) {
                if (item.getUserName().trim().equals(userName)){
                    //存在,记录错误
                    strErrorInfo.add("第"+strIndex+"条数据:用户名"+userName+"已经存在于本次导入的用户中");
                    isError=true;
                    break;
                }
            }
            if (isError) continue;
            saveUser.setUserName(userName);
            //密码
            if (Tools.isNotNull(userPassword)&&userName.length()>=6){
                Random random=new Random();
                //生成一个随机的8位数作为盐
                String salt= String.valueOf(random.nextInt(90000000)+10000000);
                //对输入的密码+盐 取MD5值
                userPassword=MD5Util.getMD5(userPassword+salt);
                saveUser.setUserPassword(userPassword);
                saveUser.setSalt(salt);
            }else{
                strErrorInfo.add("第"+strIndex+"条数据 【"+userName+"】未输入密码或密码不足6位");
                continue;
            }
            //真实姓名
            if (Tools.isNotNull(realName)){
                saveUser.setRealName(realName.trim());
            }else {
                strErrorInfo.add("第"+strIndex+"条数据【"+userName+"】未输入真实姓名");
                continue;
            }
            //部门  部门按照“集团-广州总公司-研发部”的格式填写
            if (Tools.isNotNull(strDepartment)){
                String[] strDepartments=strDepartment.split("-");
                List<String> listDepartments= Arrays.asList(strDepartments);//字符串 数组转list
                // Arrays.asList()生产的list的add、remove方法是报异常,这是由Arrays.asList()
                // 返回的是Arrays的内部类 ArrayList,而不是 java.util.ArrayList
                listDepartments=new ArrayList<>(listDepartments);
                if (listDepartments.size()>0){
                    //调用的是树形下拉的数据,最外层是“根”
                    int departmentId=findDepartmentByName(dbSysDepartment,listDepartments);
                    if (departmentId>0){
                        saveUser.setDepartmentId(departmentId);
                    }else{
                        strErrorInfo.add("第"+strIndex+"条数据 【"+userName+"】未匹配到输入的部门名称");
                        continue;
                    }
                }else{
                    strErrorInfo.add("第"+strIndex+"条数据 【"+userName+"】部门输入格式有误");
                    continue;
                }
            }else {
                strErrorInfo.add("第"+strIndex+"条数据 【"+userName+"】未输入部门信息");
                continue;
            }
            //职位
            if (Tools.isNotNull(strPosition)){
                int positionId=0;
                for (H5SelectVo position:dbSysPosition) {
                    if (position.getText().trim().equals(strPosition.trim())){
                        positionId=Integer.parseInt(position.getValue());
                        break;
                    }
                }
                if (positionId>0){
                    saveUser.setPositionId(positionId);
                }else {
                    strErrorInfo.add("第"+strIndex+"条数据【"+userName+"】未匹配到输入的职位名称");
                    continue;
                }
            }else{
                strErrorInfo.add("第"+strIndex+"条数据【"+userName+"】未输入职位信息");
                continue;
            }
            //角色
            if (Tools.isNotNull(strRole)){
                int roleId=0;
                for (H5SelectVo role:dbSysRole) {
                    if (role.getText().equals(strRole.trim())) {
                        roleId = Integer.parseInt(role.getValue());
                        break;
                    }
                }
                    if (roleId > 0) {
                        saveUser.setRoleId(roleId);
                    } else {
                        strErrorInfo.add("第" + strIndex + "条数据 【" + userName + "】未匹配到输入角色名称");
                        continue;
                    }
            }else{
                strErrorInfo.add("第"+strIndex+"条数据【"+userName+"】未输入角色信息");
                continue;
            }
            //性别
            if (Tools.isNotNull(strGender)){
                if ("男".equals(strGender.trim())){
                    saveUser.setGender((byte) 1);//男
                }else if ("女".equals(strGender.trim())){
                    saveUser.setGender((byte) 2);//女
                }else {
                    saveUser.setGender((byte) 0);//未知;
                }
            }else {
                saveUser.setGender((byte) 0);//未知;
            }
            //出生日期
            if (Tools.isNotNull(strBirthday)){
                try {
                    Date birthday=birthdayFormat.parse(strBirthday.trim());
                    saveUser.setBirthday(birthday);
                } catch (ParseException e) {
                    e.printStackTrace();
                    strErrorInfo.add("第"+strIndex+"条数据【"+userName+"】输入出生日期的格式有误");
                    continue;
                }
            }
            //Email 未做格式校验
            if (Tools.isNotNull(strEmail)){
                saveUser.setEmail(strEmail.trim());
            }
            //手机号码
            if(Tools.isNotNull(strMobile)&&strMobile.trim().length()==11){
                saveUser.setMobile(strMobile);
            }else {
                strErrorInfo.add("第"+strIndex+"条数据【"+userName+"】未输入手机号或者手机号格式不正确");
                continue;
            }
            //QQ
            if (Tools.isNotNull(strQQ)){
                saveUser.setQq(strQQ.trim());
            }
            //微信
            if (Tools.isNotNull(strWechat)){
                saveUser.setWechat(strWechat.trim());
            }
            //状态(0禁用 1启用)
            if (Tools.isNotNull(strUserStatus)){
                if ("启用".equals(strUserStatus.trim())){
                    saveUser.setUserStatus((byte) 1);
                }else if ("禁用".equals(strUserStatus.trim())){
                    saveUser.setUserStatus((byte) 0);
                }else{
                    strErrorInfo.add("第"+strIndex+"条数据【"+userName+"】输入的用户状态不正确");
                    continue;
                }
            }else {
                strErrorInfo.add("第"+strIndex+"条数据【"+userName+"】未输入用户状态");
                continue;
            }
            //备注
            if (Tools.isNotNull(strRemark)){
                saveUser.setRemark(strRemark.trim());
            }
            //添加到集合中
            saveUsers.add(saveUser);
        }
        //判断是否出现错误
        if (strErrorInfo.size()>0){
            //有错误
            String msg=String.join("<br>",strErrorInfo);
            jsonMsg.setMsg("数据匹配出现错误:<br>"+msg);
        }else {
            try {
                //无错误 调用数据保存
                if (this.userService.saveUpload(saveUsers)){
                    //成功
                    jsonMsg.setState(true);
                    jsonMsg.setMsg("导入成功");
                }else{
                    jsonMsg.setMsg("导入失败:保存数据是发生错误,为了您的数据安全,数据已经回退到了导入前!");
                }
            }catch (RuntimeException e){
                e.printStackTrace();
                jsonMsg.setMsg("导入数据异常");
            }
        }
    }else {
        jsonMsg.setMsg("请上传文件");
    }
    return jsonMsg;
}
private int findDepartmentByName(List<TreeSelectVo> dbDepartment,List<String> listDepartments){
    String strDepartmentByName=listDepartments.get(0);//获取名称中的第一个
    for (TreeSelectVo itemE:dbDepartment) {
        if(itemE.getName().trim().equals(strDepartmentByName.trim())){
            //查询到
            listDepartments.remove(0);//查找到的第一个name移除
            //判断是否还需要查找下一级 部门名称
            if (listDepartments.size()>0){
                //如果有就继续在子部门中查询下一个名称
                return findDepartmentByName(itemE.getChildren(),listDepartments);
            }else {
                //如果没有就直接返回查找到的id
                return itemE.getId();
            }
        }else{
          return 0; //未找到
        }
    }
    return 0;
}
`

```java
Jsp层
    var uploadInst=upload.render({
        elem:'#btnUploadExcel',//绑定元素
        url:'${ctx}/user/uploadExcel',//上传接口
        accept:'file',//普通文件
        exts:'xls|xlsx',//只允许上传excel文件
        field:'excelFile',//设定文件域的字段名
        before:function (){
            layerIndex=layer.load();//在上传前打开加载层
        },
        done:function (jsonMsg){
            layer.close(layerIndex);//关闭加载层
            //上传完毕回调
            if (jsonMsg.state){
                layer.msg(jsonMsg.msg,{icon:1});
                table.reload('tabUser',{});//表格的重载
            }else {//失败
                layer.msg(jsonMsg.msg,{icon:2});
            }
        },
        error:function (){
            //请求异常回调
            layer.msg("上传失败",{icon:2});
        }
    })
});
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值