SpringBladex + Avue实现Excel表格导入数据并上传至数据库

一、前端

1.在<template>中加入导入按钮、导入时的对话框

2.在data中引入参数 

3.在method中引入相关方法

4.从auth微服务中引入getToken方法

二、后台

 1.创建excel文件夹,创建

①excel表格对应的实体类OpenCgDetectorInfoExcel

②调用import所需的设置(工具)OpenCgDetectorInfoImportListener

 2.Excel对应的实体类及工具类内容如下(其中id为雪花id,在Excel模板中并没有出现该字段,由于使用雪花id必须使用Mybatis封装的insert,所以此处需要手动插入雪花id,方法见后面)

/**
 * Excel导入火焰探头模型实体类
 */
@Data
@ColumnWidth(25)
@HeadRowHeight(20)
@ContentRowHeight(18)
public class FireDetectorInfoExcel implements Serializable {
	private static final long serialVersionUID = 1L;

	@ColumnWidth(15)
	@ExcelProperty("id")
	private Long id;

	@ColumnWidth(15)
	@ExcelProperty("项目编号")
	private String projectId;

	@ColumnWidth(15)
	@ExcelProperty("探头库类型")
	private Integer belongType;

	@ColumnWidth(15)
	@ExcelProperty("探头名称")
	private String probeName;

	@ColumnWidth(15)
	@ExcelProperty("探头描述")
	private String probeDescribe;

	@ColumnWidth(15)
	@ExcelProperty("品牌")
	private String probeBrand;

	@ColumnWidth(15)
	@ExcelProperty("型号")
	private String probModel;

	@ColumnWidth(15)
	@ExcelProperty("最大距离")
	private Double maxDistance;

	@ColumnWidth(15)
	@ExcelProperty("边缘效率")
	private Double edgeEffect;

	@ColumnWidth(15)
	@ExcelProperty("上仰角度")
	private Double upAngle;

	@ColumnWidth(15)
	@ExcelProperty("上仰满量程角度")
	private Double upFullAngle;

	@ColumnWidth(15)
	@ExcelProperty("俯视角度")
	private Double downAngle;

	@ColumnWidth(15)
	@ExcelProperty("俯视满量程角度")
	private Double downFullAngle;

	@ColumnWidth(15)
	@ExcelProperty("水平角度")
	private Double levelAngle;

	@ColumnWidth(15)
	@ExcelProperty("水平满量程角度")
	private Double levelFullAngle;
}

@Data
@RequiredArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class OpenCgDetectorInfoImportListener extends AnalysisEventListener<OpenCgDetectorInfoExcel> {

	/**
	 * 默认每隔3000条存储数据库
	 */
	private int batchCount = 3000;
	/**
	 * 缓存的数据列表
	 */
	private List<OpenCgDetectorInfoExcel> list = new ArrayList<>();
	/**
	 * 用户service
	 */
	private final IOpenCgDetectorInfoService openCgDetectorInfoService;
	@Override
	public void invoke(OpenCgDetectorInfoExcel data, AnalysisContext context) {
		list.add(data);
		// 达到BATCH_COUNT,则调用importer方法入库,防止数据几万条数据在内存,容易OOM
		if (list.size() >= batchCount) {
			// 调用importer方法
			openCgDetectorInfoService.importOpenCgDetectorInfo(list);
			// 存储完成清理list
			list.clear();
		}
	}

	@Override
	public void doAfterAllAnalysed(AnalysisContext analysisContext) {
		// 调用importer方法
		openCgDetectorInfoService.importOpenCgDetectorInfo(list);
		// 存储完成清理list
		list.clear();
	}
}

3.controller层加入方法(url需要与前端页面中的action的值对应)

	/**
	 * excel导入开路式可燃气体探头模型
	 */
	@PostMapping("import-opencgdetectorinfo")
	@ApiOperationSupport(order = 12)
	@ApiOperation(value = "导入开路式可燃气体探头模型", notes = "传入excel")
	public R importOpenCgDetectorInfo(MultipartFile file, Integer isCovered) {
		String filename = file.getOriginalFilename();
		if (StringUtils.isEmpty(filename)) {
			throw new RuntimeException("请上传文件!");
		}
		if ((!StringUtils.endsWithIgnoreCase(filename, ".xls") && !StringUtils.endsWithIgnoreCase(filename, ".xlsx"))) {
			throw new RuntimeException("请上传正确的excel文件!");
		}
		InputStream inputStream;
		try {
			OpenCgDetectorInfoImportListener importListener = new OpenCgDetectorInfoImportListener(openCgDetectorInfoService);
			inputStream = new BufferedInputStream(file.getInputStream());
			ExcelReaderBuilder builder = EasyExcel.read(inputStream, OpenCgDetectorInfoExcel.class, importListener);
			builder.doReadAll();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return R.success("操作成功");
	}

4.service层

 5.Impl

	/**
	 * Excel导入开路式可燃气体探头模型
	 * @param data
	 */
	@Override
	public void importOpenCgDetectorInfo(List<OpenCgDetectorInfoExcel> data) {
        private OpenCgDetectorInfoMapper openCgDetectorInfoMapper;
		//遍历data,为每个对象手动插入雪花id
		for(OpenCgDetectorInfoExcel excel : data ){
			IdentifierGenerator identifierGenerator=new DefaultIdentifierGenerator();
			excel.setId((long)identifierGenerator.nextId(new Object()));
		}
		openCgDetectorInfoMapper.importOpenCgDetectorInfo(data);
	}

6.mapper

 7.xml文件

    <!--    Excel导入开路式可燃气体探头模型-->
    <insert id="importOpenCgDetectorInfo" parameterType="java.util.ArrayList">
        insert into `fgdm_open_cg_detector_info`(id,project_id,belong_type,probe_name,probe_num,probe_factory,com_medium,space_type,jz_diameter,real_coefficient,real_diameter,alarm_level_one,alarm_level_two,max_distance,probe_describe) values
        <foreach collection="list" index="index" separator="," item="item">
            (#{item.id},#{item.projectId},#{item.belongType},#{item.probeName},#{item.probeNum},#{item.probeFactory},#{item.comMedium},#{item.spaceType},#{item.jzDiameter},#{item.realCoefficient},#{item.realDiameter},#{item.alarmLevelOne},#{item.alarmLevelTwo},#{item.maxDistance},#{item.probeDescribe})
        </foreach>

    </insert>

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值