Excel导入预览与下载

news/2024/7/21 5:06:28 标签: excel, windows

在这里插入图片描述

💗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());
    }

🌼 结语:创作不易,如果觉得博主的文章赏心悦目,还请——点赞👍收藏⭐️评论📝


在这里插入图片描述


http://www.niftyadmin.cn/n/5378247.html

相关文章

NodeJs事件循环

NodeJs事件循环 能力有限&#xff0c;暂时理解不了。 网上众说纷纭&#xff0c;而且不同的电脑、操作环境、不同的 NodeJS 版本&#xff0c;结果有可能不一样。 建议自己学习的时候别用 Windows 系统&#xff0c;实在没条件使用虚拟机或者 WSL。

华为OD机试真题-最大N个数与最小N个数的和-2024年OD统一考试(C卷)

题目描述: 给定一个数组,编写一个函数来计算它的最大N个数与最小N个数的和。你需要对数组进行去重。 说明: 数组中数字范围[0, 1000] 最大N个数与最小N个数不能有重叠,如有重叠,输入非法返回-1 输入非法返回-1 输入描述: 第一行输入M, M标识数组大小\n第二行输入M个数,标…

【天幕系列 03】深度学习领域的最新前沿:2024年的关键突破与趋势

文章目录 导言01 深度学习的基本原理和算法1.1 神经网络&#xff08;Neural Networks&#xff09;1.2 前馈神经网络&#xff08;Feedforward Neural Network&#xff09;1.3 反向传播算法&#xff08;Backpropagation&#xff09;1.4 激活函数&#xff08;Activation Function&…

【研究生复试】计算机软件工程人工智能研究生复试——资料整理(速记版)——自我介绍(英文)

1、JAVA 2、计算机网络 3、计算机体系结构 4、数据库 5、计算机租场原理 6、软件工程 7、大数据 8、英文 自我介绍 自我介绍 英文 自我介绍 英文 第一段&#xff1a; Good afternoon, dear professors, thank you for the chance to introduce myself. My name is Yan Zhen …

模型 4S(满意、服务、速度、诚意)理论

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_总纲目录。重在提升认知。以客户为中心。 1 4S(满意、服务、速度、诚意)理论的应用 1.1 4S 理论在制造业中的应用 某汽车制造企业 A 一直致力于提供高品质的汽车产品和优质的服务&#xff0c;以满足客户的需求和期…

c++STL系列——(十)Adapter

目录 栈适配器 基本特性 基本操作 实际应用 队列适配器 基本特性 基本操作 实际应用 优先队列适配器 基本特性 基本操作 实际应用 总结 引言 当提到C STL&#xff08;标准模板库&#xff09;中的适配器&#xff08;Adapter&#xff09;&#xff0c;我们通常指的是…

基于BP算法的SAR成像matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 BP算法的基本原理 4.2 BP算法的优点与局限性 5.完整工程文件 1.课题概述 基于BP算法的SAR成像。合成孔径雷达&#xff08;SAR&#xff09;是一种高分辨率的雷达系统&#xff0c;能够在各种天气和光…

视觉slam十四讲学习笔记(五)非线性优化

已经知道&#xff0c;方程中的位姿可以由变换矩阵来描述&#xff0c;然后用李代数进行优化。观测方程由相机成像模型给出&#xff0c;其中内参是随相机固定的&#xff0c;而外参则是相机的位姿。 目录 前言 一、状态估计问题 1 最大后验与最大似然 2 最小二乘的引出 二、非…