3.自动任务和JasperReport

一.自动任务

1.自动任务的应用

1、注册网站会员,生日当天发送短信

2、银行、信用卡中心发送短信账单、邮件账单

3、应用于企业查询,将大量数据汇总成临时数据以供查询(重点)

2.Quartz框架

在这里插入图片描述

2.1引入依赖

 <!--定时任务-->
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.2.3</version>
        </dependency>

2.2 applicationContext-task.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:task="http://www.springframework.org/schema/task"
       xsi:schemaLocation="
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
		http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">


    <!--1.将定时任务类交给spring容器-->
    <bean id="myTask" class="cn.itcast.web.task.MyTask"></bean>

    <!--2.配置jobDetal : 配置定时执行的类和方法-->
    <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="myTask"></property>
        <property name="targetMethod" value="excute"></property>
    </bean>

    <!--3.配置trigger: (触发器)配置时间以及jobdetal关系 -->
    <bean id="tigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <!--cron表达式-->
        <property name="cronExpression" value="0/5 * * * * ? *"></property>
        <property name="jobDetail" ref="jobDetail"></property>
    </bean>

    <!--4.配置定时任务管理器-->
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="tigger"></ref>
            </list>
        </property>
    </bean>
</beans>

2.3 编写自动任务类

package cn.itcast.web.task;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author cyy
 * @date 2020/3/26 13:16
 */
public class MyTask {
//每隔5s打印一次当前时间
    public void excute(){
        System.out.println("当前时间:"+
                new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
    }
}

2.4 Cron表达式

cron 七子表达式

             秒             分           时         日        月            周              年
			0-59      	   0-59         0-23       1-31      1-12           1-7           1970-2099	
																		 周-1 (1)
			1,3,4,7,24	     *            *		    *		    *			  ?		

常用的符号
星号 任意
? (忽略)任意(日 和 周 同时只能出现一个* 和一个?)
年的配置(可以省略)
m/n 从M开始,每间隔N执行
m-n 从M开始,到N执行 ,整数执行
q,w,e,r,t,y 指定时间
L=Last
m#n 第n个m


“0 0 12 * * ?” 每天12点执行一次
“0 15 10 ? * *” 每天10点15执行一次
“0 15 10 * * ? 2005” 2005年每天10点15执行一次
“0 * 14 * * ?” 每天14点执行一次
“0 0/5 14 * * ?” 每天14点从0分开始,每隔5分钟执行一次
“0 0/5 14,18 * * ?” 每天14点到14点59从0分开始,每隔5分钟执行一次,18点到18点59分,每隔5分钟执行一次
“0 0-5 14 * * ?” 每天14点从0分开始到5分,每1分钟执行
“0 10 14,18 ? * *” 每天14点10分执行,并且每天的18点10分执行
“0 15 10 ? * MON-FRI” 每周一到周五10点15执行一次


L=Last
"0 15 10 L * ? " 每月最后一天的上午10点15分

“0 15 10 ? * 6L” 每月最后一个周五的上午10点15分

m#n:第n个m
“0 15 10 ? * 6#3” 每月第三个周五10点15分


统计:每季度末统计数据

每季度末的上午10点15分
0 15 10 L 3,6,9,12 ? *
0 15 10 L 3/3 ? *

每季度初的上午10点15分
0 15 10 1 1/3 ? *

二.JasperReport

1.JasperReport的执行阶段

三个执行阶段:

  • 设计阶段(通过Jasper工具)
  • 编译阶段(通过Jasper工具)
  • 输出阶段(通过Java代码)

2.执行流程

在这里插入图片描述

3.在jasper里面创建工程

输入工程名称 创建

选模板 进行创建
在这里插入图片描述
保存
在这里插入图片描述
右击编译
在这里插入图片描述

编译完成将文件复制到idea
在这里插入图片描述
Map填充数据
在这里插入图片描述
list 填充数据
在这里插入图片描述

4.代码实现生成PDF

4.1 引入依赖

<!--jasperreports 坐标-->
<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports</artifactId>
    <version>6.5.0</version>
</dependency>
<dependency>
    <groupId>org.olap4j</groupId>
    <artifactId>olap4j</artifactId>
    <version>1.2.0</version>
</dependency>
<dependency>
    <groupId>com.lowagie</groupId>
    <artifactId>itext</artifactId>
    <version>2.1.7</version>
</dependency>

4.2 map填充数据的controller

package cn.itcast.web.controller.cargo;

import cn.itcast.web.controller.BaseController;
import net.sf.jasperreports.engine.*;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.HashMap;
import java.util.Map;

/**
 * @author cyy
 * @date 2020/3/26 14:05
 */
@RequestMapping(value = "/cargo/export")
@Controller
public class PdfController extends BaseController {

    @RequestMapping(value = "/exportPdf")
    public void exportPdf(String id) throws Exception {

        //1、设置路径查找jasper文件
        String path ="D:\\Install\\Java\\work\\demo\\export_parent\\export_web_manager\\src\\main\\webapp\\jasper\\test03.jasper";
        //2、通过路径创建jrprint
        //   JasperFillManager:path:指的是jasper文件的路径
        //                      map:用map的形式填充jasper里数据
        //                      DataSource:用list的形式填充jasper里的表格
        Map map = new HashMap();
        map.put("username","xx");
        map.put("age",18);
        map.put("deptname","zz");
        map.put("companyname","yy");

        JasperPrint jasperPrint = JasperFillManager.fillReport(path,map, new JREmptyDataSource());
        //3、jrprint作为一个参数,通过exporter生成PDF

        JasperExportManager.exportReportToPdfStream(jasperPrint,response.getOutputStream());
    }
}

4.3 list填充数据的controller

package cn.itcast.web.controller.cargo;

import cn.itcast.web.controller.BaseController;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author cyy
 * @date 2020/3/26 14:05
 */
@RequestMapping(value = "/cargo/export")
@Controller
public class PdfController extends BaseController {

    @RequestMapping(value = "/exportPdf")
    public void exportPdf(String id) throws Exception {

        //1、设置路径查找jasper文件
        String path ="D:\\Install\\Java\\work\\demo\\export_parent\\export_web_manager\\src\\main\\webapp\\jasper\\test04.jasper";
        //2、通过路径创建jrprint
        //   JasperFillManager:path:指的是jasper文件的路径
        //                      map:用map的形式填充jasper里数据
        //                      DataSource:用list的形式填充jasper里的表格
      /*  Map map = new HashMap();
        map.put("username","xx");
        map.put("age",18);
        map.put("deptname","zz");
        map.put("companyname","yy");*/
      //听过list集合填充数据
        List<Map> list = new ArrayList<Map>();
        for (int i = 0; i <5 ; i++) {
            Map map = new HashMap();
            map.put("username","傻逼");
            map.put("age",1);
            list.add(map);
        }
        JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(list);
        JasperPrint jasperPrint = JasperFillManager.fillReport(path,new HashMap<String, Object>(), dataSource);
        //3、jrprint作为一个参数,通过exporter生成PDF

        JasperExportManager.exportReportToPdfStream(jasperPrint,response.getOutputStream());
    }
}

4.4处理中文乱码

1.配置文件

net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
net.sf.jasperreports.extension.simple.font.families.lobstertwo=stsong/fonts.xml

2.字体

5.图形汇总生成PDF

5.1创建一个group

在fields基础上
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.2controller

package cn.itcast.web.controller.cargo;

import cn.itcast.web.controller.BaseController;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author cyy
 * @date 2020/3/26 14:05
 */
@RequestMapping(value = "/cargo/export")
@Controller
public class PdfController extends BaseController {

    @RequestMapping(value = "/exportPdf")
    public void exportPdf(String id) throws Exception {

        //1、设置路径查找jasper文件
        String path ="D:\\Install\\Java\\work\\demo\\export_parent\\export_web_manager\\src\\main\\webapp\\jasper\\test05.jasper";
        //2、通过路径创建jrprint
        //   JasperFillManager:path:指的是jasper文件的路径
        //                      map:用map的形式填充jasper里数据
        //                      DataSource:用list的形式填充jasper里的表格
      /*  Map map = new HashMap();
        map.put("username","xx");
        map.put("age",18);
        map.put("deptname","zz");
        map.put("companyname","yy");*/
      //听过list集合填充数据
        List<Map> list = new ArrayList<Map>();
        for (int i = 0; i <5 ; i++) {
            Map map = new HashMap();
            map.put("deptname","en");
            map.put("username","傻逼");
            map.put("age",1);
            list.add(map);
        }

        for (int i = 0; i <5 ; i++) {
            Map map = new HashMap();
            map.put("deptname","e");
            map.put("username","xx");
            map.put("age",1);
            list.add(map);
        }
        JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(list);
        JasperPrint jasperPrint = JasperFillManager.fillReport(path,new HashMap<String, Object>(), dataSource);
        //3、jrprint作为一个参数,通过exporter生成PDF

        JasperExportManager.exportReportToPdfStream(jasperPrint,response.getOutputStream());
    }
}

6.图形格式生成PDF

6.1 jasper操作

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

6.2 controller

        //1、设置路径查找jasper文件
        String path ="D:\\Install\\Java\\work\\demo\\export_parent\\export_web_manager\\src\\main\\webapp\\jasper\\test06.jasper";
        //2、通过路径创建jrprint
        //   JasperFillManager:path:指的是jasper文件的路径
        //                      map:用map的形式填充jasper里数据
        //                      DataSource:用list的形式填充jasper里的表格
      /*  Map map = new HashMap();
        map.put("username","xx");
        map.put("age",18);
        map.put("deptname","zz");
        map.put("companyname","yy");*/
      //听过list集合填充数据
        List<Map> list = new ArrayList<Map>();
        for (int i = 0; i <5 ; i++) {
            Map map = new HashMap();
            map.put("name","en");
            map.put("value",i);
            list.add(map);
        }


        JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(list);
        JasperPrint jasperPrint = JasperFillManager.fillReport(path,new HashMap<String, Object>(), dataSource);
        //3、jrprint作为一个参数,通过exporter生成PDF

        JasperExportManager.exportReportToPdfStream(jasperPrint,response.getOutputStream());

三.报运单生成PDF

1.beansUtils工具类

package cn.itcast.common.utils;

import org.springframework.cglib.beans.BeanMap;

import java.util.HashMap;
import java.util.Map;

public class BeanMapUtils {

    /**
     * 将对象属性转化为map结合
     */
    public static <T> Map<String, Object> beanToMap(T bean) {
        Map<String, Object> map = new HashMap<String, Object>();
        if (bean != null) {
            BeanMap beanMap = BeanMap.create(bean);
            for (Object key : beanMap.keySet()) {
                map.put(key+"", beanMap.get(key));
            }
        }
        return map;
    }

    /**
     * 将map集合中的数据转化为指定对象的同名属性中
     */
    public static <T> T mapToBean(Map<String, Object> map,Class<T> clazz) throws Exception {
        T bean = clazz.newInstance();
        BeanMap beanMap = BeanMap.create(bean);
        beanMap.putAll(map);
        return bean;
    }
}

2.controller

package cn.itcast.web.controller.cargo;

import cn.itcast.common.utils.BeanMapUtils;
import cn.itcast.domain.cargo.Export;
import cn.itcast.domain.cargo.ExportProduct;
import cn.itcast.domain.cargo.ExportProductExample;
import cn.itcast.domain.cargo.ExtCproductExample;
import cn.itcast.service.cargo.ExportProductService;
import cn.itcast.service.cargo.ExportService;
import cn.itcast.web.controller.BaseController;
import com.alibaba.dubbo.config.annotation.Reference;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author cyy
 * @date 2020/3/26 14:05
 */
@RequestMapping(value = "/cargo/export")
@Controller
public class PdfController extends BaseController {

    @Reference
    private ExportService exportService;
    @Reference
    private ExportProductService exportProductService;

    @RequestMapping(value = "/exportPdf")
    public void exportPdf(String id) throws Exception {

        //1、设置路径查找jasper文件
        String path ="D:\\Install\\Java\\work\\demo\\export_parent\\export_web_manager\\src\\main\\webapp\\jasper\\export.jasper";
//       查询订单的实体类
        Export export = exportService.findById(id);
    
        Map<String, Object> map = BeanMapUtils.beanToMap(export);
        ExportProductExample example =new ExportProductExample();
        ExportProductExample.Criteria criteria = example.createCriteria();
        criteria.andExportIdEqualTo(export.getId());
        List<ExportProduct> exportProducts = exportProductService.findAll(example);

        JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(exportProducts);
        //2、通过路径创建jrprint
        //   JasperFillManager:path:指的是jasper文件的路径
        //                      map:用map的形式填充jasper里数据
        //                      DataSource:用list的形式填充jasper里的表格

        JasperPrint jasperPrint = JasperFillManager.fillReport(path,map, dataSource);
        //3、jrprint作为一个参数,通过exporter生成PDF

        JasperExportManager.exportReportToPdfStream(jasperPrint,response.getOutputStream());
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值