一、添加依赖
1、service-edu模块配置依赖
<dependencies><!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.1.1</version></dependency></dependencies>
二、业务处理
1、SubjectAdminController
package com.guli.edu.controller.admin;@Api(description="课程分类管理")@CrossOrigin //跨域@RestController@RequestMapping("/eduservice/subject")public class SubjectAdminController {@Autowiredprivate SubjectService subjectService;//添加课程分类@ApiOperation(value = "Excel批量导入")@PostMapping("addSubject")public R addSubject(MultipartFile file) {//1 获取上传的excel文件 MultipartFile//返回错误提示信息subjectService.importSubjectData(file,subjectService);//判断返回集合是否为空return R.ok();}}
2、创建和Excel对应的实体类
import com.alibaba.excel.annotation.ExcelProperty;import lombok.Data;@Datapublic class ExcelSubjectData {@ExcelProperty(index = 0)private int oneSubjectName;@ExcelProperty(index = 1)private String twoSubjectName;}
3、SubjectService
(1)接口
void batchImport(MultipartFile file);
(2)实现类
//添加课程分类//poi读取excel内容@Overridepublic void importSubjectData(MultipartFile file,EduSubjectService subjectService) {try {//1 获取文件输入流InputStream inputStream = file.getInputStream();// 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭EasyExcel.read(inputStream, ExcelSubjectData.class, new SubjectExcelListener(subjectService)).sheet().doRead();}catch(Exception e) {e.printStackTrace();throw new GuliException(20002,"添加课程分类失败");}}
4、创建读取Excel监听器
import com.alibaba.excel.context.AnalysisContext;import com.alibaba.excel.event.AnalysisEventListener;import com.atguigu.eduservice.entity.EduSubject;import com.atguigu.eduservice.entity.vo.ExcelSubjectData;import com.atguigu.eduservice.service.EduSubjectService;import com.atguigu.servicebase.handler.GuliException;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;import java.util.ArrayList;import java.util.List;import java.util.Map;public class SubjectExcelListener extends AnalysisEventListener<ExcelSubjectData> {public EduSubjectService subjectService;public SubjectExcelListener() {}//创建有参数构造,传递subjectService用于操作数据库public SubjectExcelListener(EduSubjectService subjectService) {this.subjectService = subjectService;}//一行一行去读取excle内容@Overridepublic void invoke(ExcelSubjectData user, AnalysisContext analysisContext) {if(user == null) {throw new GuliException(20001,"添加失败");}//添加一级分类EduSubject existOneSubject = this.existOneSubject(subjectService,user.getOneSubjectName());if(existOneSubject == null) {//没有相同的existOneSubject = new EduSubject();existOneSubject.setTitle(user.getOneSubjectName());existOneSubject.setParentId("0");subjectService.save(existOneSubject);}//获取一级分类id值String pid = existOneSubject.getId();//添加二级分类EduSubject existTwoSubject = this.existTwoSubject(subjectService,user.getTwoSubjectName(), pid);if(existTwoSubject == null) {existTwoSubject = new EduSubject();existTwoSubject.setTitle(user.getTwoSubjectName());existTwoSubject.setParentId(pid);subjectService.save(existTwoSubject);}}//读取excel表头信息@Overridepublic void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {System.out.println("表头信息:"+headMap);}//读取完成后执行@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {}//判断一级分类是否重复private EduSubject existTwoSubject(EduSubjectService subjectService,String name,String pid) {QueryWrapper<EduSubject> wrapper = new QueryWrapper<>();wrapper.eq("title",name);wrapper.eq("parent_id",pid);EduSubject eduSubject = subjectService.getOne(wrapper);return eduSubject;}//判断一级分类是否重复private EduSubject existOneSubject(EduSubjectService subjectService,String name) {QueryWrapper<EduSubject> wrapper = new QueryWrapper<>();wrapper.eq("title",name);wrapper.eq("parent_id","0");EduSubject eduSubject = subjectService.getOne(wrapper);return eduSubject;}}
