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

前端vue:

按钮:

      </el-col>
      <el-col :span="1.5">
        <el-button
          type="primary"
          plain
          icon="el-icon-upload2"
          size="mini"
          :loading="exportLoading"
          @click="handleImport"
          v-hasPermi="['management:formulas:import']"
        >批量导入</el-button>
      </el-col>

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

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

        //判断list与数据库中的是否存在
        int index=0;
        ArrayList list1 = new ArrayList();
        //取list中的product、part_name、rubber_code
        for (Map<String, String> map : list) {
            index++;
            String product = map.get("product");
            String part_name = map.get("partName");
            String rubber_code = map.get("rubberCode");
            //判断数据库中是否存在该数据
            QueryWrapper<SlFormulas> wrapper = new QueryWrapper<>();
            wrapper.eq("product", product);
            wrapper.eq("part_name", part_name);
            wrapper.eq("rubber_code", rubber_code);
            List<SlFormulas> 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;
        }
    }

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值