SSM杰信商务平台项目day09

重点内容第九天 图形报表~让微软都羡慕的报表

1.Java要实现图形报表都有什么方式?

jFreeChart 纯java API,利用生成一张图片。
excel 图形报表,poi不能直接操作图形报表控件。变相解决,先做一个excel模板,插入好图表控件,然后利用poi动态设置它的数据。用户

打开excel,图表直接展现。
第三方的报表软件,可视化开发。开发效率极高。
可视化布局界面,配置数据源即可。(SQL的结果集)。收费。数巨报表(10w,每年服务费1w)。做一个应用程序,(C/S程序),IE上安装插件。兼容性。

amCharts FLASH,只需要构建数据xml。

1)需要swf控件,例如饼形通用
2)setting.xml 不通用的
3)data.xml、data.txt,xml格式更加直观,不通用的

SSM杰信商务平台项目day09_第1张图片

sqlDao查询结果集的封装,通用

SSM杰信商务平台项目day09_第2张图片

工作原理
amCharts只需要一次配置,公用flash,改造index.html,访问公用的swfobject.js和公用的flash swf原来文件。样式文件访问本地的,这样可以方便修改配置颜色,坐标,显示样式等。数据data.xml文件。将从数据库中读取的数据拼接成xml节点,写入到这个文本的文件中。转向jStat.jsp统一转向对应的forward参数目录下的index.html。(注意:html浏览器默认都有缓存,在做index.html要去掉缓存)

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache, must-revalidate">
<meta http-equiv="expires" content="Wed, 26 Feb 1997 08:21:57 GMT">

2.jFreeChart、excel、amCharts PK比较

jFreeChart 纯java api,缺点:图形非常粗糙,它实际是利用jFreeChart api生成的图片,表现力差,专门的api需要记忆。

a)生产厂家销售情况-饼形图

需求:
生产厂家销售情况,厂家+销售

SELECT
    f.factory_name,cp.sumnum
FROM
(SELECT factory_id,factory_name FROM factory_c WHERE state=1) f
LEFT JOIN 
(
SELECT factory_id,SUM(cnumber) AS sumnum FROM contract_product_c
GROUP BY factory_id
) cp
ON f.factory_id=cp.factory_id
WHERE cp.sumnum IS NOT null

SSM杰信商务平台项目day09_第3张图片

SSM杰信商务平台项目day09_第4张图片

SSM杰信商务平台项目day09_第5张图片

b)产品销售排行-柱状图

需求:
产品销售情况,畅销的产品的前10名,产品+销售

SELECT product_no,SUM(cnumber) AS sumnum FROM contract_product_c
GROUP BY product_no ORDER BY sumnum DESC
LIMIT 10

SSM杰信商务平台项目day09_第6张图片

SSM杰信商务平台项目day09_第7张图片

SSM杰信商务平台项目day09_第8张图片

c)系统访问压力图-曲线图

需求:系统访问压力图
记录用户登陆系统,就记录一条

SSM杰信商务平台项目day09_第9张图片

统计每天登陆系统的次数

SELECT SUBSTRING(login_time,1,10),COUNT(login_time) FROM login_log_p
GROUP BY SUBSTRING(login_time,1,10)

统计24小时系统访问的次数
当数据不够时,利用临时表凑数据

SELECT
    t.a1,IFNULL(p.countnum,0) AS countnum
FROM
(SELECT a1 FROM online_t)  t
LEFT JOIN
(
SELECT SUBSTRING(login_time,12,2) AS a1,COUNT(login_time) AS countnum FROM login_log_p
GROUP BY SUBSTRING(login_time,12,2)
) p
ON t.a1=p.a1

SSM杰信商务平台项目day09_第10张图片

SSM杰信商务平台项目day09_第11张图片

SSM杰信商务平台项目day09_第12张图片

总结:
图形报表业界已经相当成熟,提出公用,称作报表引擎。

3.系统的监控,系统想知道系统的访问瓶颈在哪里?

需求
系统瓶颈是指,访问最长时间,写数据操作,写磁盘文件操作。都比较耗时,用户体验不好。

1)找出系统这些操作慢的地方,
2)分析原因
3)优化,用户使用频繁模块,对其优化

实现一个性能监控的程序

a)早期使用继承方式

记录开始时间,记录结束时间,结束时间-开始时间=耗时
写到日志文件中,写到数据库中

b)拦截器

配置springmvc拦截器,记录开始时间,结束时间,打日志。

c)开发步骤

1)写一个拦截器,实现一个接口HandlerInterceptor
2)实现共用的变量,安全性
3)配置springmvc拦截器配置,springmvc-servlet.xml

package cn.itcast.jk.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.core.NamedThreadLocal;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import common.Logger;

//功能:实现对所有类方法执行时间的监控
public class TimeInterceptor implements HandlerInterceptor {
    //引入log4j日志
    private static Logger log = Logger.getLogger(TimeInterceptor.class);

    //利用ThreadLocal绑定一个变量,完成线程安全
    NamedThreadLocal startTimeThreadLocal = new NamedThreadLocal("startTimeThreadLocal");

    //处理类之前,执行preHandle方法
    @Override
    public boolean preHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler) throws Exception {
        long startTime = System.currentTimeMillis();        //记录当前时间
        startTimeThreadLocal.set(startTime);                //绑定变量

        return true;
    }

    //处理类之后,执行postHandler方法
    @Override
    public void postHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        long stopTime = System.currentTimeMillis();         //记录结束时间

        log.info(String.format("%s execute %d ms."
                ,request.getRequestURI()
                , stopTime - startTimeThreadLocal.get()));

    }

    //所有的动作完成,执行一些方法
    @Override
    public void afterCompletion(HttpServletRequest request,
            HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        // TODO Auto-generated method stub

    }

}

sprimgmvc-servlet.xml中配置


    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean class="cn.itcast.jk.interceptor.TimeInterceptor"/>        
        mvc:interceptor>
    mvc:interceptors>

4.项目中使用Log4j

a)导入jar包

b)配置log4j.properties

log4j.rootLogger=DEBUG, stdout      

配置日志级别 OFF,FANIL,ERROR,WARN,INFO,DEBUG,TRACE,ALL 提供8个级别,log4j推荐开发者使用4个级别:

ERROR:错误信息,trycatch抛出异常,log.error(“”)
WARN:警告信息
INFO:提示
DEBUG:BUG很多时候,监控过程变量,调试

顺序级别,级别由低到高,高级别的信息会包含打印低级别的信息。

Stout输出地点,包括:控制台,文件,数据库

log4j.rootLogger=DEBUG, stdout

#Console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-5p - %m%n

#LogFile
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=../logs/jklog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n


log4j.logger.org.apache=INFO
log4j.logger.cn.itcast.jk=DEBUG

c)调用方法:

public class TimeInterceptor implements HandlerInterceptor {
    //引入log4j日志
    private static Logger log = Logger.getLogger(TimeInterceptor.class);

类中类似System.out.println()
        log.info(String.format("%s execute %d ms."
                ,request.getRequestURI()
                , stopTime - startTimeThreadLocal.get()));

5.POI导入

直接读取文件内容,形成SQL语句,批量插入数据库。

SSM杰信商务平台项目day09_第13张图片

导入时,excel文档它单元格有类型。

1)类型,根据不同的类型拼接不同的sql
2)模板,自己定义一个模板,让用户将数据导入。模板要设置将所有的单元格设置为文本类型,导入的数据就都是文本。
3)没有通用性,要根据具体业务做一个这样类。
4)插入SQL语句。

6.知识回顾

a)项目统计分析核心模块

软件的核心价值:
举例:了解杰信有哪些现有的产品畅销,VIP客户,什么产品滞销。指导企业经营。
为企业经营决策提供数据支持。
在基础数据中挖掘有价值的信息。再次提炼。~ 数据挖掘。

b)图表报表

1)第三方报表,用户展现效果最好,功能齐全,开发效果。收费
2)jFreeChart 古老,api繁杂,开发效率不高,生成图片
3)jReport 复杂
4)excel (企业中常采用)
5)javascript amCharts (收费)
6)amCharts Flash

c)amCharts Flash 表现力酷炫,使用最简单,

1)SQL的数据源
2)动态生成data.xml

d)图形报表常见

1)饼形图
2)柱状图
3)曲线图

课程视频内容

SSM杰信商务平台项目day09_第14张图片

SSM杰信商务平台项目day09_第15张图片

SSM杰信商务平台项目day09_第16张图片

你可能感兴趣的:(SSM杰信商务平台项目)