💗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注解自动关闭输入流 @Cleanup InputStream 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()); }
🌼 结语:创作不易,如果觉得博主的文章赏心悦目,还请——
点赞
👍收藏
⭐️评论
📝