十三、市场活动:全部导出

news2024/9/29 5:32:42

功能需求:批量导出市场活动

用户在市场活动主页面,点击"批量导出"按钮,把所有市场活动生成一个excel文件,弹出文件下载的对话框;

 用户选择要保存的目录,完成导出市场活动的功能.

*导出成功之后,页面不刷新

功能分析:导出市场活动

1.给批量“导出”按钮,单击事件。点击按钮,向后台发送导出请求

2.后台controller接收请求,查询所有的市场活动

3.创建一个excel文件,把查询出来的文件写道excel文件中

4.把生成的excel文件,输出到浏览器,进行下载

文件导出插件:apache-poi插件

【技术准备】

把办公文档的所有元素封装成普通java类,通过操作这些类进行文件导出

  • HSSFRow------行
  • HSSFCell-------列
  • HSSFSheet-------页
  • HSSFWorkbook-------文件
  • HSSFCellStyle--------样式

【插件使用】

1.添加依赖

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.15</version>
        </dependency>

2.使用封装类生成excel

3.文件下载

全部导出流程图

 代码实现

一、ActivityMapper

1.ActivityMapper接口

    /**
     * 批量导出
     */
    List<Activity> selectAllActivities();
    <select id="selectAllActivities" resultMap="BaseResultMap">
        select a.id,
               u1.name as owner,
               a.name,
               a.start_date,
               a.end_date,
               a.cost,
               a.description,
               a.create_time,
               u2.name as create_by,
               a.edit_time,
               u3.name as edit_by
        from tbl_activity a
                 join tbl_user u1 on a.owner = u1.id
                 join tbl_user u2 on a.create_by = u2.id
                 left join tbl_user u3 on a.edit_by = u3.id
        order by a.create_time desc
    </select>

二、ActivityService

	/**
	 * 批量导出
	 */
	List<Activity> queryAllActivities();
	@Override
	public List<Activity> queryAllActivities() {
		return activityMapper.selectAllActivities();
	}

三、ActivityController

1.写一个下载文件的工具类HSSFUtils

/**
	 * 下载市场活动的Excel
	 * activityList 市场活动集合
	 * fileName文件名
	 */
	public static void createExcelByActivityList(List<Activity> activityList, String fileName, HttpServletResponse response) throws Exception {
		// 2.创建Excel
		// 2.1.1创建文件
		HSSFWorkbook wb = new HSSFWorkbook();
		// 2.1.2 创建表
		HSSFSheet sheet = wb.createSheet("市场活动");
		// 2.1.3 创建行和列
		HSSFRow row = sheet.createRow(0);
		HSSFCell cell = row.createCell(0);
		// 2.1.4 列的设置
		cell.setCellValue("ID");
		cell = row.createCell(1);
		cell.setCellValue("所有者");
		cell = row.createCell(2);
		cell.setCellValue("名称");
		cell = row.createCell(3);
		cell.setCellValue("开始日期");
		cell = row.createCell(4);
		cell.setCellValue("结束日期");
		cell = row.createCell(5);
		cell.setCellValue("成本");
		cell = row.createCell(6);
		cell.setCellValue("描述");
		cell = row.createCell(7);
		cell.setCellValue("创建时间");
		cell = row.createCell(8);
		cell.setCellValue("创建者");
		cell = row.createCell(9);
		cell.setCellValue("修改日期");
		cell = row.createCell(10);
		cell.setCellValue("修改者");
		if (activityList != null && activityList.size() > 0) {
			Activity activity = null;
			for (int i = 0; i < activityList.size(); i++) {
				activity = activityList.get(i);
				//生成行
				row = sheet.createRow(i + 1);
				//创建列
				cell = row.createCell(0);
				cell.setCellValue(activity.getId());
				cell = row.createCell(1);
				cell.setCellValue(activity.getOwner());
				cell = row.createCell(2);
				cell.setCellValue(activity.getName());
				cell = row.createCell(3);
				cell.setCellValue(activity.getStartDate());
				cell = row.createCell(4);
				cell.setCellValue(activity.getEndDate());
				cell = row.createCell(5);
				cell.setCellValue(activity.getCost());
				cell = row.createCell(6);
				cell.setCellValue(activity.getDescription());
				cell = row.createCell(7);
				cell.setCellValue(activity.getCreateTime());
				cell = row.createCell(8);
				cell.setCellValue(activity.getCreateBy());
				cell = row.createCell(9);
				cell.setCellValue(activity.getEditTime());
				cell = row.createCell(10);
				cell.setCellValue(activity.getEditBy());
			}
		}
		// 3 调用工具函数生成Excel文件。
		// 4 文件下载
		// 4.1 设置响应类型  excel文件是application/octet-stream二进制文件
		response.setContentType("application/octet-stream;charset=UTF-8");
		// 激活文件下载窗口 Content-Disposition不打开,attachment附件
		response.addHeader("Content-Disposition", "attachment;filename=" + fileName);
		// 4.2 获取输出流
		ServletOutputStream out = response.getOutputStream();
		wb.write(out);
		// 3.2 关闭资源
		wb.close();
		out.flush(); // 输出流缓存中的内容强制输出,但并不会关闭输出流
	}

 

	/**
	 * 批量导出
	 */
	@RequestMapping("/workbench/activity/exportAllActivities.do")
	public void exportAllActivities(HttpServletResponse response) throws Exception {
		// 1 调用service方法,查询所有的市场活动
		List<Activity> activityList = activityService.queryAllActivities();
		// 2.文件下载
		HSSFUtils.createExcelByActivityList(activityList,Contants.FILE_NAME_ACTIVITY,response);
	}

 四、前端index.jsp

给批量的按钮添加单击事件,跳转到controller层

            // 下载:全选
            $("#exportActivityAllBtn").click(function () {
                window.location.href = "workbench/activity/exportAllActivities.do";
            });

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/438475.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

打卡Android学习—Compose 布局 和 修饰符

我们将通过解释 布局 和 修饰符 的基础知识 来开始我们的旅程。我们将介绍他们是如何协同工作的&#xff0c;Compose 提供了什么开箱即用的API&#xff0c;以及如何漂亮地设计您的UI 布局——因为 Compose 中的几乎所有内容都是布局 布局是Compose UI的核心组件&#xff0c;使…

( “树” 之 BST) 669. 修剪二叉搜索树 ——【Leetcode每日一题】

二叉查找树&#xff08;BST&#xff09;&#xff1a;根节点大于等于左子树所有节点&#xff0c;小于等于右子树所有节点。 二叉查找树中序遍历有序。 669. 修剪二叉搜索树 给你二叉搜索树的根节点 root &#xff0c;同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树&…

机器学习——核函数

问&#xff1a;已知三维空间中的两个样本点分别为&#xff08;2&#xff0c;4&#xff0c;5)和(1&#xff0c;2&#xff0c;3)&#xff0c;定义核函数表达式为:试计算这两个样本点映射到十维空间后的 答&#xff1a;首先计算两个样本点的平方内积2*14*25*325 然后代入核函数表…

互联网医院软件|互联网医院系统开发|在线问诊提高医疗效率

互联网医院系统源码开发设计理念是以患者为中心&#xff0c;将医院的各个科室、医生资源进行有效的整合和调配。互联网医院系统开发是基于最新的Web技术和云计算技术所构建的一种全新的医疗信息化平台&#xff0c;可以通过网页、小程序等多种方式&#xff0c;为患者提供在线预约…

Logstash:通过 lookups 来丰富数据

如果你想了解更多关于 lookup 的内容&#xff0c;请参阅文章 “Elastic&#xff1a;开发者上手指南” 中的 “丰富数据及 lookup” 章节。在今天的文章中&#xff0c;我来总结在 Logstash 中一些常用的 lookups。如下的这些插件可以帮助你使用附加信息丰富数据&#xff0c;例如…

基于深度学习的车型识别系统(Python+清新界面+数据集)

摘要&#xff1a;基于深度学习的车型识别系统用于识别不同类型的车辆&#xff0c;应用YOLO V5算法根据不同尺寸大小区分和检测车辆&#xff0c;并统计各类型数量以辅助智能交通管理。本文详细介绍车型识别系统&#xff0c;在介绍算法原理的同时&#xff0c;给出Python的实现代码…

浏览器强缓存与协商缓存

一、强缓存 强制缓存的思想是&#xff0c;在浏览器内置数据库中缓存每次请求中 “可以被缓存” &#xff08;受到一些关键字的管控&#xff09;的静态资源如 image, css, js 文件&#xff0c; 当第二次请求被缓存过的资源时候&#xff0c;会通过校验两个字段 Expires 和 Cache-…

AAAI 2023MOVEDepth:基于单目线索和速度指导的自监督多帧深度估计

文章目录 解决的问题实施细节总结 会议/期刊&#xff1a;2023 AAAI 论文题目&#xff1a;《Crafting Monocular Cues and Velocity Guidance for Self-Supervised Multi-Frame Depth Learning》 论文链接&#xff1a;[JeffWang987/MOVEDepth: AAAI 2023]Crafting Monocular Cue…

Flutter TextField 交互实例 —— 新手礼包

大家好&#xff0c;我是 17。 新手礼包一共 3 篇文章&#xff0c;每篇都是描述尽量详细&#xff0c;实例讲解&#xff0c;包会&#xff01; Flutter Row 实例 —— 新手礼包Flutter TextField UI 实例 —— 新手礼包Flutter TextField 交互实例 —— 新手礼包 本篇包含所有常…

Unity打包WebGL: 导入Vue

Unity打包WebGL: 导入Vue 1. 介绍 1.1 任务 记录将Unity项目打包成WebGL&#xff0c;并集成到Vue项目中的过程。 1.2 环境 Unity:2021.3Vue: 2 2. Unity项目 2.1 UI界面 2.2 添加插件 构建WebGL项目需要添加一个.jslib文件&#xff0c;用于Unity脚本函数与JavaScript函数…

【FocalNet】学习笔记

1. 介绍 “FocalNet是map-based还是token-based模型呢&#xff1f;” FocalNet是token-based模型&#xff0c;与常见的【基于 feature map 的CNN】不同&#xff1b; 2. 模型代码 2.1 环境配置 [DINO | FocalNet-DINO] 2.1.1 配置CUDA11.1 Summary Driver: Not Selected…

FreeRTOS 时间管理

文章目录 一、FreeRTOS 延时函数1. 函数 vTaskDelay()2. 函数 prvAddCurrentTaskToDelayedList()3. 函数 vTaskDelayUntil() 二、FreeRTOS 系统时钟节拍 一、FreeRTOS 延时函数 1. 函数 vTaskDelay() 在 FreeRTOS 中延时函数也有相对模式和绝对模式&#xff0c;不过在 FreeRT…

epoll进阶

epoll除了提供select/poll那种IO事件的电平触发&#xff08;Level Triggered&#xff09;外&#xff0c;还提供了边沿触发&#xff08;Edge Triggered&#xff09;&#xff0c;这就使得用户空间程序有可能缓存IO状态&#xff0c;减少epoll_wait/epoll_pwait的调用&#xff0c;提…

经典文献阅读之--Orbeez-SLAM(单目稠密点云建图)

0. 简介 对于现在的VSLAM而言&#xff0c;现在越来越多的工作开始聚焦于如何将深度学习结合到VSLAM当中&#xff0c;而最近的这个工作就给出了一个比较合适的方法。《Orbeez-SLAM: A Real-time Monocular Visual SLAM with ORB Features and NeRF-realized Mapping》这篇文章&…

如何将模块加载到linux内核

一 顺利的情况 假设存在一个文件叫mymq.c,下该文件相同目录下的makefile如下语句&#xff1a; obj-y mymq.o 然后编译&#xff1a;编译完成了以后&#xff0c;mymq.c文件中&#xff0c;有个函数叫mymq_open,搜索这个函数在不在System.map文件中&#xff0c;如果在&#xff…

大屏使用echart开发省市地图数据,并点击省获取市地图数据

1. 本文在基础上进行改进&#xff0c;后端使用若依后端 IofTV-Screen: &#x1f525;一个基于 vue、datav、Echart 框架的物联网可视化&#xff08;大屏展示&#xff09;模板&#xff0c;提供数据动态刷新渲染、屏幕适应、数据滚动配置&#xff0c;内部图表自由替换、Mixins注入…

CDN与网络安全

DDoS攻击的影响远不止眼前所见。这些攻击不仅会造成巨大的经济损失&#xff0c;还会对受害公司或组织的声誉和形象产生严重影响。研究表明&#xff0c;受害公司至少需要10个小时才能开始解决攻击&#xff0c;而解除还需要4.5个小时。甚至在检测到攻击之前平均数小时&#xff0c…

一文详解Spring事务传播机制

背景 我们在使用Spring管理数据库事务的时候很方便&#xff0c;只需要在代理对象中引入注解Transactional 就可以开启事务了。在使用Transactional时&#xff0c;一般主要关心两个方面&#xff0c;一个是异常回滚的定义&#xff08;设置rollbackFor&#xff09;&#xff0c;另…

Python统计学:如何理解单样本t检验?

单样本的t检验 指样本的均值是否某个值存在差异。 比如一包薯片标的克重为50g&#xff0c;但每包不一定都是50g&#xff0c;那么我们可以对薯片进行随机抽样&#xff0c;检验它与50g是否有差异。 1 提出假设&#xff1a; 原假设&#xff1a;薯片的平均重量是50g&#xff1b; …

模板方法设计模式解读

目录 豆浆制作问题 模板方法模式基本介绍 基本介绍 模板方法模式的原理类图 模板方法模式解决豆浆制作问题 应用实例要求 思路分析和图解(类图) 模板方法模式的钩子方法 模板方法模式的注意事项和细节 豆浆制作问题 编写制作豆浆的程序&#xff0c;说明如下: 1) 制作豆…