CRM项目记录(六)


目录:

(1)crm分析导出市场活动的应用场景

(2)crm  apache-poi插件

(3)crm演示使用apache-poi生成excel文件 

(4)crm演示文件的下载

(5)crm设计导出市场活动

(6)crm实现导出市场活动Mapper层和Service层

(7)crm实现导出市场活动Controller层

(8)crm实现导出市场活动前台页面

(9)crm优化导出市场活动


(1)crm分析导出市场活动的应用场景

用户访问数据只有通过登录系统,在网络通的情况下,才能访问数据,用户想要不通过登录系统,来访问数据,想做灵活的统计分析,用户提出这种需求,用户脱离系统,来访问数据,把数据导出来,以办公文档导出来

需求:

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

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

    *每次至少选择导出一条记录

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

(2)crm  apache-poi插件

pom.xml中的依赖: 

 

(3)crm演示使用apache-poi生成excel文件 

 先写一个测试类,生成Excel文件:

 

package com.bjpowernode.crm.poi;

import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.HorizontalAlignment;

import java.io.FileOutputStream;
import java.io.OutputStream;

/**
 * 使用apache-poi生成excel文件
 */
public class CreateExcelTest {
    public static void main(String[] args) throws Exception{
        //创建HSSFWorkbook对象,对应一个excel文件
        HSSFWorkbook wb=new HSSFWorkbook();
        //使用wb创建HSSFSheet对象,对应wb文件中的一页
        HSSFSheet sheet=wb.createSheet("学生列表");
        //使用sheet创建HSSFRow对象,对应sheet中的一行
        HSSFRow row=sheet.createRow(0);//行号:从0开始,依次增加
        //使用row创建HSSFCell对象,对应row中的列
        HSSFCell cell=row.createCell(0);//列的编号:从0开始,依次增加
        cell.setCellValue("学号");
        cell=row.createCell(1);
        cell.setCellValue("姓名");
        cell=row.createCell(2);
        cell.setCellValue("年龄");

        //生成HSSFCellStyle对象   修饰样式
        HSSFCellStyle style=wb.createCellStyle();
        style.setAlignment(HorizontalAlignment.CENTER);//修饰对齐方式

        //使用sheet创建10个HSSFRow对象,对应sheet中的10行
        for(int i=1;i<=10;i++){
            row=sheet.createRow(i);//创建行

            cell=row.createCell(0);//列的编号:从0开始,依次增加
            cell.setCellValue(100+i);
            cell=row.createCell(1);
            cell.setCellValue("NAME"+i);
            cell=row.createCell(2);
            cell.setCellStyle(style);//让最后一列字体居中
            cell.setCellValue(20+i);
        }

        //调用工具函数生成excel文件   文件输出流
        OutputStream os=new FileOutputStream("D:\\AnZhuang\\Java项目\\CRM\\serverDir\\studentList.xls");//目录必须手动创建,文件如果不存在,poi会自动创建
        wb.write(os);

        //关闭资源
        os.close();
        wb.close();

        System.out.println("===========create ok==========");
    }
}

运行:

文件夹生成了excel文件:打开 

 

 

(4)crm演示文件的下载

 

 测试文件的下载,在webapp下面创建一个filedownloadtest.jsp

 向服务器发送同步请求三种方式:

1.地址栏

2.form表单

3.超链接

不新写一个controller了,让他发送到市场活动的controller中去就行了

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/";
%>
<html>
<head>
    <base href="<%=basePath%>">
    <script type="text/javascript" src="jquery/jquery-1.11.1-min.js"></script>
    <title>演示文件下载</title>
<script type="text/javascript">
    //入口函数$(function () :当页面架子啊完之后自动执行这个函数
    $(function () {
        //给"下载"按钮添加单击事件
        $("#fileDownloadBtn").click(function () {
            //发送文件下载的请求
            window.location.href="workbench/activity/fileDownload.do";
        });
    });
</script>
</head>
<body>
<input type="button" value="下载" id="fileDownloadBtn">
</body>
</html>

在ActivityController中添加:

springmvc:我们访问网页,跳转页面,返回字符串。我们访问json,对应Object 

 @ResponseBody转为json字符串
  //测试文件下载
   @RequestMapping("/workbench/activity/fileDownload.do")
    public void fileDownload(HttpServletResponse response) throws Exception{
        //1.设置响应类型
        response.setContentType("application/octet-stream;charset=UTF-8");
        //2.获取输出流
        OutputStream out=response.getOutputStream();

        //浏览器接收到响应信息之后,默认情况下,直接在显示窗口中打开响应信息;即使打不开,也会调用应用程序打开;只有实在打不开,才会激活文件下载窗口。
        //可以设置响应头信息,使浏览器接收到响应信息之后,直接激活文件下载窗口,即使能打开也不打开
        response.addHeader("Content-Disposition","attachment;filename=mystudentList.xls");

        //读取excel文件(InputStream),把输出到浏览器(OutoutStream)
        InputStream is=new FileInputStream("D:\\course\\18-CRM\\阶段资料\\serverDir\\studentList.xls");
        byte[] buff=new byte[256];
        int len=0;
        while((len=is.read(buff))!=-1){
            out.write(buff,0,len);
        }

        //关闭资源
        is.close();
        out.flush();
    }

 运行项目先登录来一下,因为用到了ActivityController:

然后访问:

 

点击下载:

 

 

打开下载的文件:

 

(5)crm设计导出市场活动

 

(6)crm实现导出市场活动Mapper层和Service层

 在ActivityMapper接口加方法:

ActivityMapper.xml:写sql语句

 

<!--查询所有的市场活动进行导出-->
  <select id="selectAllActivitys" 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接口里加一个方法:

实现类:

 

(7)crm实现导出市场活动Controller层

 

//查询所有的市场活动进行导出
    @RequestMapping("/workbench/activity/exportAllActivitys.do")
    public void exportAllActivitys(HttpServletResponse response) throws Exception{
        //调用service层方法,查询所有的市场活动
        List<Activity> activityList=activityService.queryAllActivitys();
        //创建exel文件,并且把activityList写入到excel文件中
        HSSFWorkbook wb=new HSSFWorkbook();
        HSSFSheet sheet=wb.createSheet("市场活动列表");
        HSSFRow row=sheet.createRow(0);
        HSSFCell cell=row.createCell(0);
        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("修改者");

        //遍历activityList,创建HSSFRow对象,生成所有的数据行
        if(activityList!=null && activityList.size()>0){
            Activity activity=null;
            for(int i=0;i<activityList.size();i++){
                activity=activityList.get(i);

                //每遍历出一个activity,生成一行
                row=sheet.createRow(i+1);
                //每一行创建11列,每一列的数据从activity中获取
                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());
            }
        }
        //根据wb对象生成excel文件
        OutputStream os=new FileOutputStream("D:\\AnZhuang\\Java项目\\CRM\\serverDir\\activityList.xls");
        wb.write(os);
        //关闭资源
        os.close();
        wb.close();

        //把生成的excel文件下载到客户端
        response.setContentType("application/octet-stream;charset=UTF-8");
        response.addHeader("Content-Disposition","attachment;filename=activityList.xls");
        OutputStream out=response.getOutputStream();
        InputStream is=new FileInputStream("D:\\AnZhuang\\Java项目\\CRM\\serverDir\\activityList.xls");
        byte[] buff=new byte[256];
        int len=0;
        while((len=is.read(buff))!=-1){
            out.write(buff,0,len);
        }
        is.close();

        //wb.write(out);
        //wb.close();
        out.flush();
    }

 (8)crm实现导出市场活动前台页面

 

//给"批量导出"按钮添加单击事件
			$("#exportActivityAllBtn").click(function () {
				//发送同步请求
				window.location.href="workbench/activity/exportAllActivitys.do";
			});

 

 

 

 (9)crm优化导出市场活动

上面controller中的代码:首先把数据从内存到磁盘,然后再从磁盘读取到内存,非常影响效率,下面进行优化,直接从内存到内存,不把文件先保存到磁盘,在从磁盘中读取这一过程了 

 

//查询所有的市场活动进行导出
    @RequestMapping("/workbench/activity/exportAllActivitys.do")
    public void exportAllActivitys(HttpServletResponse response) throws Exception{
        //调用service层方法,查询所有的市场活动
        List<Activity> activityList=activityService.queryAllActivitys();
        //创建exel文件,并且把activityList写入到excel文件中
        HSSFWorkbook wb=new HSSFWorkbook();
        HSSFSheet sheet=wb.createSheet("市场活动列表");
        HSSFRow row=sheet.createRow(0);
        HSSFCell cell=row.createCell(0);
        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("修改者");

        //遍历activityList,创建HSSFRow对象,生成所有的数据行
        if(activityList!=null && activityList.size()>0){
            Activity activity=null;
            for(int i=0;i<activityList.size();i++){
                activity=activityList.get(i);

                //每遍历出一个activity,生成一行
                row=sheet.createRow(i+1);
                //每一行创建11列,每一列的数据从activity中获取
                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());
            }
        }
       /* //根据wb对象生成excel文件
        OutputStream os=new FileOutputStream("D:\\AnZhuang\\Java项目\\CRM\\serverDir\\activityList.xls");
        wb.write(os);*/
        //关闭资源
        /*os.close();
        wb.close();*/

        //把生成的excel文件下载到客户端
        response.setContentType("application/octet-stream;charset=UTF-8");
        response.addHeader("Content-Disposition","attachment;filename=activityList.xls");
        OutputStream out=response.getOutputStream();
        /*InputStream is=new FileInputStream("D:\\AnZhuang\\Java项目\\CRM\\serverDir\\activityList.xls");
        byte[] buff=new byte[256];
        int len=0;
        while((len=is.read(buff))!=-1){
            out.write(buff,0,len);
        }
        is.close();*/

        wb.write(out);
        wb.close();
        out.flush();
    }

效果跟上面的导出数据是一样的

这个功能未做!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵俺第一专栏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值