BeanUtil
把NoticeExcel
转换成了Notice
,性能层面可以放心,它与new完再set相差无几,要注意的就是两个bean的字段需要保持一致,才可以转换成功。List<Notice> noticeList = new ArrayList<>();
Notice notice = BeanUtil.copy(noticeExcel, Notice.class);
noticeList.add(notice);
noticeService.saveBatch(noticeList)
AnalysisEventListener
,指定类型。这样调用API读取的时候,就会将数据写入监听器从而实现我们的业务逻辑AnalysisEventListener
,只需要编写最简的导入逻辑便可NoticeImporter
,并迁移上一节相关代码private final INoticeService service;
@Override
public void save(List data) {
data.forEach(noticeExcel -> {
String category = DictCache.getKey("notice", noticeExcel.getCategoryName());
noticeExcel.setCategory(Func.toInt(category));
Notice notice = BeanUtil.copy(noticeExcel, Notice.class);
service.save(notice);
});
}
}
~~~

6. 改造readNotice
方法,传入NoticeImporter
~~~java
@PostMapping("write-notice")
public R writeNotice(MultipartFile file) {
NoticeImporter importer = new NoticeImporter(noticeService);
ExcelUtil.save(file, importer, NoticeExcel.class);
return R.success("操作成功");
}
~~~
7. 重启服务,调用postman查看结果,发现数据导入成功,业务也完全解耦


8. 在导入的数据中,发现create_user、create_dept、update_user三个字段为空,是因为我们一开始对其进行了接口放行,没有传递token,所以未获取到。现在加上token再次调用接口查看返回结果,发现正确无误

