若依导入功能,导入数据详细教程(保姆级教程)

1 篇文章 0 订阅
1 篇文章 0 订阅

引言

 这是一个非常详细的介绍,对导入功能详细的去做,这对于一些初学者在添加此功能的时候非常简单(欢迎各位大佬指出问题所在)

示例用户界面

 这是自己新添加的一个界面,想添加个导入功能的示例:

一、前端部分

1、导入的按钮

  • v-hasPermi 如果普通的界面可以不写,我的就是普通界面,整体代码下来都是没加权限的
  <el-col :span="1.5">
        <el-button
          type="info"
          icon="el-icon-upload2"
          size="mini"
          @click="handleImport"
         // v-hasPermi="['collegeManage:studentBase:import']"  v-hasPermi 是权限相关的配置,记得改一下
        >导入</el-button>
      </el-col>

2、数据导入的对话框

  • 对话框的代码是通用的,直接粘贴即可
<!-- 用户导入对话框 -->
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
  <el-upload
    ref="upload"
    :limit="1"
    accept=".xlsx, .xls"
    :headers="upload.headers"
    :action="upload.url + '?updateSupport=' + upload.updateSupport"
    :disabled="upload.isUploading"
    :on-progress="handleFileUploadProgress"
    :on-success="handleFileSuccess"
    :auto-upload="false"
    drag
  >
    <i class="el-icon-upload"></i>
    <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
    <div class="el-upload__tip text-center" slot="tip">
      <div class="el-upload__tip" slot="tip">
        <el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的用户数据
      </div>
      <span>仅允许导入xls、xlsx格式文件。</span>
      <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importTemplate">下载模板</el-link>
    </div>
  </el-upload>
  <div slot="footer" class="dialog-footer">
    <el-button type="primary" @click="submitFileForm">确 定</el-button>
    <el-button @click="upload.open = false">取 消</el-button>
  </div>
</el-dialog>

3、数据导入参数

  • getToken()方法调用前,需要先 import { getToken } from “@/utils/auth”;
  • url 要与后端部分对应上
  • /Xmbh/Xmbh/importData这个标红的可以根据自己的url进行更改

upload: {
  // 是否显示弹出层(用户导入)
  open: false,
  // 弹出层标题(用户导入)
  title: "",
  // 是否禁用上传
  isUploading: false,
  // 是否更新已经存在的用户数据
  updateSupport: 0,
  // 设置上传的请求头部
  headers: { Authorization: "Bearer " + getToken() },
  // 上传的地址
  url: process.env.VUE_APP_BASE_API + "/Xmbh/Xmbh/importData" // todo
}

4、相关方法

  • title 根据需要自行修改
  • importTemplate()中的url要与后端对应上
/** 导入按钮操作 */
handleImport() {
  this.upload.title = "编号导入"; // todo
  this.upload.open = true;
},
/** 下载模板操作 */
importTemplate() {
  this.download('Xmbh/Xmbh/importTemplate', {
  }, `stu_base_template_${new Date().getTime()}.xlsx`)  // todo
},
// 文件上传中处理
handleFileUploadProgress(event, file, fileList) {
  this.upload.isUploading = true;
},
// 文件上传成功处理
handleFileSuccess(response, file, fileList) {
  this.upload.open = false;
  this.upload.isUploading = false;
  this.$refs.upload.clearFiles();
  this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
  this.getList();
},
// 提交上传文件
submitFileForm() {
  this.$refs.upload.submit();
}

二、后端部分

1、在Controller添加导入方法,

  • updateSupport属性为是否存在则覆盖(可选)
  • 把xmbh改成自己的即可
  • 导入相应的类模块比如:import org.springframework.web.multipart.MultipartFile;(可根据编辑器提示导入相应的类)
@Log(title = "项目编号", businessType = BusinessType.IMPORT) // todo
    @PostMapping("/importData")
    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
    {
        ExcelUtil<Xmbh> util = new ExcelUtil<>(Xmbh.class); // todo
        List<Xmbh> XmbhList = util.importExcel(file.getInputStream()); // todo
        String operName = getUsername();
        String message = xmbhService.importUser(XmbhList, updateSupport, operName); // todo
        return AjaxResult.success(message);
    }

    @PostMapping("/importTemplate")
    public void importTemplate(HttpServletResponse response)
    {
        ExcelUtil<Xmbh> util = new ExcelUtil<>(Xmbh.class); // todo
        util.importTemplateExcel(response, "项目编号数据");
    }
3、在这个服务层里IXmbhservice写入

 /**
     * 导入用户数据
     *
     * @param XmbhList 用户数据列表
     * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
     * @param operName 操作用户
     * @return 结果
     */
    public String importUser(List<Xmbh> XmbhList, Boolean isUpdateSupport, String operName);

接口实现类

  • 根据编辑器提示可以导入相应的模块
  • 把项目编号改一下就行了
   /**
     * 导入
     */
    private static final Logger log = LoggerFactory.getLogger(XmbhServiceImpl.class);

    @Autowired
    protected Validator validator;

    @Override
    public String importUser(List<Xmbh> xmbhList, Boolean isUpdateSupport, String operName) {
        if (CollectionUtils.isEmpty(xmbhList)) {
            throw new ServiceException("导入项目编号数据不能为空!");
        }
        int successNum = 0;
        int failureNum = 0;
        StringBuilder successMsg = new StringBuilder();
        StringBuilder failureMsg = new StringBuilder();
        for (Xmbh xmbh : xmbhList) {
            try {
                // 验证是否存在这个项目编号
                Xmbh existingXmbh = xmbhMapper.selectXmbhByXmbhBh(xmbh.getXmbhBh());
                if (Objects.isNull(existingXmbh)) {
                    BeanValidators.validateWithException(validator, xmbh);
                    xmbh.setCreateBy(operName);
                    this.insertXmbh(xmbh);
                    successNum++;
                    successMsg.append("<br/>" + successNum + "、项目编号 " + xmbh.getXmbhBh() + " 导入成功");
                } else if (isUpdateSupport) {
                    BeanValidators.validateWithException(validator, xmbh);
                    xmbh.setUpdateBy(operName);
                    this.updateXmbh(xmbh);
                    successNum++;
                    successMsg.append("<br/>" + successNum + "、项目编号 " + xmbh.getXmbhBh() + " 更新成功");
                } else {
                    failureNum++;
                    failureMsg.append("<br/>" + failureNum + "、项目编号 " + xmbh.getXmbhBh() + " 已存在");
                }
            } catch (Exception e) {
                failureNum++;
                String msg = "<br/>" + failureNum + "、项目编号 " + xmbh.getXmbhBh() + " 导入失败:";
                failureMsg.append(msg + e.getMessage());
                log.error(() -> msg, e);

            }
        }
        if (failureNum > 0) {
            failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
            throw new ServiceException(failureMsg.toString());
        } else {
            successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
        }
        return successMsg.toString();
    }

本人很菜的,分享一下我写的导入功能和代码

导入成功

导入更新数据都没问题

  • 16
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值