若依框架:批量导入excel的数据到数据库

前端vue:

按钮:

      
      
        批量导入
      

js:

    /** 批量导入按钮按钮操作 */
    handleImport(){
      this.openImport = true;
      this.reset();
      this.ImportTitle = "批量导入数据";
      this.$refs.upload.clearFiles();
    },

 //文件上传到数据库
    myImportFile(param) {
      var file = param.file;
      let formData = new FormData();
      formData.append("file", file);    //将文件保存在foemat对象中
      ImportFile(formData).then((res) => {
        this.$modal.msgSuccess("导入文件成功");
        this.openImport = false;
        this.getList();
      });
    },
    beforeUpload(file){
      if (file.type != "" || file.type != null || file.type != undefined){
        //截取文件的后缀,判断文件类型
        const FileExt = file.name.replace(/.+\./, "").toLowerCase();
        //计算文件的大小
        const isLt5M = file.size / 1024 / 1024 < 50; //这里做文件大小限制
        //如果大于50M
        if (!isLt5M) {
          this.$showMessage('上传文件大小不能超过 50MB!');
          return false;
        }
        //如果文件类型不在允许上传的范围内
        if(this.fileType.includes(FileExt)){
          return true;
        }
        else {
          this.$message.error("上传文件格式不正确!");
          return false;
        }
      }
    }
//批量导入数据
export function ImportFile(data){
  return request({
    url: '/management/formulas/import',
    method: 'post',
    data: data
  })
}

后端springboot

controller:

    /**
     * 文件导入数据库
     */
    @ApiOperation("文件导入数据库")
    @RequestMapping("/import")
    @PostMapping
    public AjaxResult handleFileImport(@RequestParam("file") MultipartFile file) {
        String fileName = file.getOriginalFilename(); // 获取文件名

        InputStream is = null;
        try {
            is = file.getInputStream();
            List studentList = slFormulasService.getListByExcel(is, fileName);// 获取解析后的List集合
            Boolean result = slFormulasService.batchImportSlFormulasInfo(studentList); // 把数据插入数据库
            if (result) {
                return AjaxResult.success("文件上传成功!");
            } else {
                return AjaxResult.success("文件上传失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return AjaxResult.error("文件上传失败:" + e.getMessage());
        }
    }

service:

 @Override
    public List getListByExcel(InputStream is, String fileName) throws Exception {
        try {
            //获取解析excel后的list集合
            List slformulasList = new ExcelUtil<>(new SlFormulas()).AnalysisExcel(is, fileName);
            return slformulasList;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return new ArrayList<>();
    }

    @Override
    public Boolean batchImportSlFormulasInfo(List list) throws Exception {
        //判断list是否重复

        //判断list与数据库中的是否存在
        int index=0;
        ArrayList list1 = new ArrayList();
        //取list中的product、part_name、rubber_code
        for (Map map : list) {
            index++;
            String product = map.get("product");
            String part_name = map.get("partName");
            String rubber_code = map.get("rubberCode");
            //判断数据库中是否存在该数据
            QueryWrapper wrapper = new QueryWrapper<>();
            wrapper.eq("product", product);
            wrapper.eq("part_name", part_name);
            wrapper.eq("rubber_code", rubber_code);
            List selectList = slFormulasMapper.selectList(wrapper);
            //判断数据库中是否存在
            if (!selectList.isEmpty()) {
                list1.add(index);
            }
        }
        if (!list1.isEmpty()){
            throw new Exception("excel中第"+list1+"行在数据库中存在");
        }
        //如果不存在,则添加数据
        int flag = slFormulasMapper.batchImportSlFormulasInfo(list);
        if (flag <= 0) {
            return false;
        }else {
            return true;
        }
    }

你可能感兴趣的:(excel,数据库,vue.js,spring,boot)