销售趋势分析折线图

销售趋势分析曲线图

1.思路 :dao -service -web -前端

2.技术:HighCharts

1.dao

//1.dao层查询出按照年的各个月份的销售额(关联的字段是:
//month(orders),sum(ordedetail))
//并且将数据获取的给设置成map集合
public List<Map<String, Object>> getSumMoney(int year) {
		String hql = "select new Map(month(o.createtime) as month, sum(od.money) as y) "
				+ "from Orderdetail od, Orders o "
				+ "where od.orders = o "
				+ "and o.type=‘2‘ and od.state=‘1‘ "
				+ "and year(o.createtime)=? "
				+ "group by month(o.createtime)";

		return (List<Map<String, Object>>) this.getHibernateTemplate().find(hql, year);
	}

  

2.service

//2.service层对数据进行处理
@Override
    public List<Map<String, Object>> trendReport(int year) {
        //result 部分月份的数据: 有些月份是没有数据,没有数据的月份是不会在result里面
        List<Map<String,Object>> result = reportDao.getSumMoney(year);
        //[{"month":6,"y":1045.4}]
        //把存在的数据转成map<Integer,Double>, key=月份, value=数值
        //定义一个map来接收转换后数据
        Map<Integer,Object> existsMonthDataMap = new HashMap<Integer, Object>();
        for(Map<String,Object> existMap : result){
            //exitsMap=> {"month":6,"y":1045.4}
            existsMonthDataMap.put((Integer)existMap.get("month"), existMap.get("y"));
        }
        //existsMonthDataMap => {"6":"1045.4"}, {"7":"9527"}
        //[{"month":6,"y":1045.4}]
        List<Map<String, Object>> returnList = new ArrayList<Map<String, Object>>();

        //********  补月份的数据     ****************
        for(int i = 1; i<=12; i++){
            Map<String,Object> data = new HashMap<String,Object>();
            //如果存在月份的数据
            if(null != existsMonthDataMap.get(i)){
                data.put("month", i);
                data.put("y", existsMonthDataMap.get(i));
            }else{
                data.put("month", i);
                data.put("y", 0);
            }
            //把每个月份的数据加到list中
            returnList.add(data);
        }

        return returnList;
    }

3.web层

//3.action写回到前端
/**
	 * 销售趋势
	 */
	public void trendReport(){
		List<Map<String, Object>> report = reportBiz.trendReport(year);
		write(JSON.toJSONString(report));
	}

  

4.1前端 report_trend.js

$(function(){
    //加载表格数据
    $(‘#grid‘).datagrid({
        url:‘report_trendReport‘,
        columns:[[
                  {field:‘month‘,title:‘月份‘,width:100},
                  {field:‘y‘,title:‘销售额‘,width:100}
        ]],
        singleSelect: true,
        onLoadSuccess:function(data){
            showChart(data.rows);
        }
    });

    //点击查询按钮
    $(‘#btnSearch‘).bind(‘click‘,function(){
        //把表单数据转换成json对象
        var formData = $(‘#searchForm‘).serializeJSON();
        $(‘#grid‘).datagrid(‘load‘,formData);
    });
});

/**
 * 展示图
 * @param data
 */
function showChart(data){
    var monthData = new Array();
    for(var i = 1; i <=12; i++){
        monthData.push(i + "月");
    }
    $(‘#trendChart‘).highcharts({
        title: {
            text: $(‘#year‘).combobox(‘getValue‘) + ‘年销售趋势分析‘,
            x: -20 //center
        },
        subtitle: {
            text: ‘Source: www.itheima.com‘,
            x: -20
        },
        xAxis: {
            categories: monthData
        },
        yAxis: {
            title: {
                text: ‘元  (¥)‘
            },
            plotLines: [{
                value: 0,
                width: 1,
                color: ‘#808080‘
            }]
        },
        tooltip: {
            valuePrefix: ‘¥‘
        },
        legend: {
            layout: ‘vertical‘,
            align: ‘center‘,
            verticalAlign: ‘bottom‘,
            borderWidth: 0
        },
        series: [{
            name: ‘销售额‘,
            data: data
        }]
    });
}

4.2html

<link rel="stylesheet" type="text/css" href="ui/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="ui/themes/icon.css">
<script type="text/javascript" src="ui/jquery.min.js"></script>
<script type="text/javascript" src="ui/jquery.easyui.min.js"></script>
<script type="text/javascript" src="ui/locale/easyui-lang-zh_CN.js"></script>
<script type="text/javascript" src="ui/jquery.serializejson.min.js"></script>
<script type="text/javascript" src="ui/highcharts.js"></script>
<script type="text/javascript" src="js/report_trend.js"></script>

</head>
<body class="easyui-layout">
    <div data-options="region:‘center‘,title:‘销售趋势表‘"
        style="padding: 4px; background-color: #eee">
        <div style="height: 2px;"></div>
        <form id="searchForm">
            年份<input class="easyui-combobox"  name="year" id="year"
                data-options="url:‘json/year.json‘,valueField:‘year‘, textField:‘year‘" />
            <button type="button" id="btnSearch">查询</button>
        </form>
        <div style="height: 2px;"></div>
        <table id="grid"></table>
    </div>
    <div data-options="region:‘east‘,iconCls:‘icon-reload‘,title:‘销售统计图‘,spilt:true"
        style="width: 600px;" id="trendChart"></div>

</body>
</html>
时间: 2024-12-05 03:53:20

销售趋势分析折线图的相关文章

使用andbase开发框架实现绘制折线图

在Android中,当有绘制折线图的需求时,大多数人使用的AChartEngine,来进行折线图的绘制.AChartEngine图表引擎确实可以实现折线图的功能,除此之外,我们还可以使用andbase开发框架里面的图表模块,实现图标的绘制.前面文章介绍了使用andbase开发框架实现侧滑栏效果,今天,我们学习如何实现折线的绘制. 首先,我们还是看一下效果图 我们模拟的是一家公司12个月中,两项不同业务的销售额变化,可以看到,效果还是非常不错的. 下面,我们开始介绍如何使用andbase实现这个效

利用Jpgraph创建折线图

在企业运营中,经常需要对各种数据进行统计,利用图表动态分析不同的数据表中的数据,可以使数据显示的更加直观. 例:应用Jpgraph技术绘制包含两种图书销售走势的折线图. 为了能够使用Jpgraph的功能,首先在程序中导入Jpgraph类库,然后创建两个数组分别表示两种图书的年度销售情况,创建Graph类的对象,并用创建的数组作为参数创建两个LinePlot类的对象.设置统计图的标题.刻度.背景色和折线颜色等参数,并将两个LinePlot对象添加到统计图对象中. 过程如下: (1)在程序中导入Jp

JFreeChart在Struts2中实现折线图统计

在Struts2中,用JFreeChart实现折线图统计 前段时间学习了一下JFreeChart,现在来整理一下自己所作的实例. 下面分别用两种方式来实现: 一种是以java应用程序的方式,一种是以web项目程序的方式 需要加入的jar包有:  jcommon-1.0.17.jar . jfreechart-1.0.14.jar(前两个是JFreeChart中所带的,在下载的JFreeChart的lib目录下) . struts2-jfreechart-plugin-2.3.16.3.jar(这

JFreeChart在Struts2中实现3D折线图统计

在Struts2中,用JFreeChart实现3D折线图统计 前段时间学习了一下JFreeChart,现在来整理一下自己所作的实例. 下面分别用两种方式来实现: 一种是以java应用程序的方式,一种是以web项目程序的方式 需要加入的jar包有:  jcommon-1.0.17.jar . jfreechart-1.0.14.jar(前两个是JFreeChart中所带的,在下载的JFreeChart的lib目录下) . struts2-jfreechart-plugin-2.3.16.3.jar

ASP.NET MVC中使用highcharts 生成简单的折线图

? ? 直接上步骤: ? 生成一个options,选项包含了一些基本的配置,如标题,坐标刻度,serial等: 配置X轴显示的Category数据,为一个数组: 配置Y轴显示的数据,也为一个数据: 用生成option构建一个Hightcharts对象,即可以自动画出一个折线图了: ? ? 1.配置BundleConfig ? bundles.Add(new ScriptBundle("~/bundles/jquery").Include("~/Scripts/jquery-{

EXCEL完成一个柱形图与折线图组合图表

EXCEL2016与EXCEL2013版本中新增的推荐的图表功能,可以帮助我们快速选择合适的图表.而我们今天要讲的就是其中一个典型的实例组合图表.我们先看一下我们要用的数据与完成的效果. 第一步:我们把光标定在EXCEL数据中,然后通过插入选项卡里面的推荐的图表命令,会弹出如下图对话框,然后我们选择所有图表中的-组合,EXCEL会自动将里面的数据进行图表类型选择 在这里最关键的是增长率,默认选择的是折线图,我们可以为其改为带标记的堆积折线图.特别提示:一定要勾选次坐标轴,肯定有同学会问为什么呢,

用canvas绘制折线图

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>用canvas绘制折线图</title> 6 </head> 7 <body> 8 <canvas id="cv"></canvas> 9 </body> 1

iOS:使用贝塞尔曲线绘制图表(折线图、柱状图、饼状图)

1.介绍: UIBezierPath :画贝塞尔曲线的path类 UIBezierPath定义 : 贝赛尔曲线的每一个顶点都有两个控制点,用于控制在该顶点两侧的曲线的弧度. 曲线的定义有四个点:起始点.终止点(也称锚点)以及两个相互分离的中间点. 滑动两个中间点,贝塞尔曲线的形状会发生变化. UIBezierPath :对象是CGPathRef数据类型的封装,可以方便的让我们画出 矩形 . 椭圆 或者 直线和曲线的组合形状 初始化方法: + (instancetype)bezierPath; /

Python中使用matplotlib 如何绘制折线图?

本文和大家分享的主要是python开发中matplotlib 绘制折线图相关内容,一起来看看吧,希望对大家学习和使用这部分内容有所帮助. matplotlib 1.安装matplotlib ① linux系统安装 # 安装matplotlib模块 $ sudo apt-get install python3-matplotlib# 如果是python2.7 执行如下命令 $ sudo apt-get install python-matplotlib# 如果你安装较新的Python,安装模块一乐