💗wei_shuo的个人主页
💫wei_shuo的学习社区
🌐Hello World !
Excel导入预览与下载
preview
- Controller
@PostMapping("preview")@ApiOperation("上传拒付预警预览")public Result<List<ResChargebackWarnPreview>> preview(@RequestParam(name = "file", required = false) MultipartFile file) {return Result.succ(chargebackWarnService.analysisUploadFile(file, true).getList());}
- Service
@PostMapping("preview") @ApiOperation("上传拒付预警预览") public Result<List<ResChargebackWarnPreview>> preview(@RequestParam(name = "file", required = false) MultipartFile file) {// 上传拒付预警预览的API接口// 接收一个名为"file"的可选的MultipartFile类型的请求参数return Result.succ(chargebackWarnService.analysisUploadFile(file, true).getList()); }public ResChargebackWarnUpload analysisUploadFile(MultipartFile file, boolean isPreview) {// 解析上传的文件并进行拒付预警分析// 返回一个ResChargebackWarnUpload对象// 创建一个用于拼接错误信息的StringJoiner对象StringJoiner joiner = new StringJoiner("<br/>");// 创建一个ResChargebackWarnUpload对象ResChargebackWarnUpload res = new ResChargebackWarnUpload();// 创建一个空的TransactionChargebackWarn列表,用于存储拒付预警数据List<TransactionChargebackWarn> chargebackWarns = new ArrayList<>();// 创建用于存储预览成功和预览错误数据的列表List<ResChargebackWarnPreview> previewSuccess = new ArrayList<>();List<ResChargebackWarnPreview> previewError = new ArrayList<>();// 创建一个ChargebackWarnFile列表,用于存储解析后的文件数据List<ChargebackWarnFile> list;try {// 使用Lombok的@Cleanup注解自动关闭输入流@CleanupInputStream inputStream = file.getInputStream();// 获取上传文件的原始文件名,并转换为小写String filename = file.getOriginalFilename().toLowerCase();// 检查文件名是否包含"拒付"关键字,如果不包含则抛出异常if (!(filename.contains("拒付"))) {throw new ManageException("请传入正确的 拒付 文件上传模板");}// 解析上传的拒付预警文件,将其转换为ChargebackWarnFile对象列表list = analysisChargebackWarnFile(ChargebackWarnFile.class, inputStream);// 遍历ChargebackWarnFile对象列表for (ChargebackWarnFile bean : list) {ResChargebackWarnPreview preview;// 如果当前数据存在错误,则将错误信息添加到joiner中,并创建一个ResChargebackWarnPreview对象添加到previewError列表中if (bean.isError()) {joiner.add(bean.getIndex() + ": " + bean.getErrorMessage());preview = new ResChargebackWarnPreview(bean.getIndex(), bean.getErrorMessage());previewError.add(preview);} else {// 如果当前数据没有错误,则根据数据的不同情况进行处理,并创建一个TransactionChargebackWarn对象添加到chargebackWarns列表中// 同时创建一个ResChargebackWarnPreview对象添加到previewSuccess列表中// ...}}// 根据isPreview参数判断是否执行导入操作if (!isPreview) {// 如果不是预览操作,检查是否存在预览错误数据,如果存在则抛出异常if (!previewError.isEmpty()) {throw new ManageException("该文件内包含错误数据,不可进行导入");}// 执行导入操作,将chargebackWarns列表中的数据保存到数据库中// ...}} catch (IOException e) {e.printStackTrace();}// 设置ResChargebackWarnUpload对象的属性值res.setChargebackWarns(chargebackWarns);// 根据预览错误数据是否为空,设置ResChargebackWarnUpload对象的其他属性值if (!previewError.isEmpty()) {res.setList(previewError);res.setPreviewTotal(previewError.size());} else {res.setList(previewSuccess);res.setPreviewTotal(previewSuccess.size());}res.setMessage(joiner.toString());return res; }public <T extends ChargebackWarnFile> List<ChargebackWarnFile> analysisChargebackWarnFile(Class<T> clazz, InputStream is) {// 解析拒付预警文件并转换为ChargebackWarnFile对象列表// 返回ChargebackWarnFile对象列表// 使用ExcelTools工具类将Excel文件转换为指定类型的对象列表List<T> list = ExcelTools.excelToList(clazz, is);// 创建一个ChargebackWarnFile列表,用于存储解析后的文件数据List<ChargebackWarnFile> files = new ArrayList<>();// 遍历ChargebackWarnFile对象列表for (int i = 0; i < list.size(); i++) {int index = i + 1;T bean = list.get(i);try {// 对当前数据进行各种验证和处理// ...// 将验证通过的数据封装为ChargebackWarnFile对象,并添加到files列表中// ...} catch (Exception e) {// 如果验证或处理过程中出现异常,则创建一个带有错误信息的ChargebackWarnFile对象,并添加到files列表中files.add(new ChargebackWarnFile(index, e.getMessage()));}}return files; }
download
- Controller
@GetMapping("download")@ApiOperation("拒付预警列表下载")public void download(@Validated ChargebackWarnQuery query) {try {ExcelTools.download(httpServletResponse, ChargebackWarnDownload.class, chargebackWarnService.listChargebackWarnDownload(query), "ChargebackWarns");} catch (IOException e) {throw new RuntimeException(e);}}
- Service
public List<ChargebackWarnDownload> listChargebackWarnDownload(ChargebackWarnQuery query) {List<TransactionChargebackWarn> list = transactionChargebackWarnRepo.list(MSearchTools.createQueryWrapper(TransactionChargebackWarn.class, query));return list.stream().map(ChargebackWarnDownload::orderOf).collect(Collectors.toList());}
🌼 结语:创作不易,如果觉得博主的文章赏心悦目,还请——
点赞
👍收藏
⭐️评论
📝