销售统计饼状图

销售统计,画出饼状图(动态)

技术: Hightchart (前端)

思路:1.关联查询几张表获取数据  2.dao层将sql语句转成hql语句 3.service层   4Action 5.前端  注意配置文件

1.关联查询几张表获取数据

//操作的对象:(开始日期(创建订单的日期) orders),商品类型goodstype,销售额(sum()orderdetail); 找出关联的中间表是goods, 条件查询的是日期是orderdetail
//1.数据库实现查询
--1.关联4张表
select * from goodstype gt,goods g, orders o, orderdetail od where g.goodstypeuuid=gt.uuid
and o.uuid=od.ordersuuid and od.goodsuuid=g.uuid;
--2添加type=2,销售订单
select * from goodstype gt,goods g, orders o, orderdetail od where g.goodstypeuuid=gt.uuid
and o.uuid=od.ordersuuid and od.goodsuuid=g.uuid and type=2;
--按照商品类型分组,并且统计销售额
select gt.name , sum(od.money) from goodstype gt,goods g, orders o, orderdetail od where g.goodstypeuuid=gt.uuid
and o.uuid=od.ordersuuid and od.goodsuuid=g.uuid and type=2 group by gt.name;

  

2.dao层将sql语句转成hql语

 1 //2.创建IReporetDao和ReportDao
 2 @Override
 3     public List<Map<String,Object>> orderReport(Date startDate, Date endDate) {
 4         String hql = "select new Map(gt.name as name,sum(od.money) as y) From Goodstype gt, Orderdetail od, Orders o, Goods g "
 5                 + "where g.goodstype=gt and od.orders=o and od.goodsuuid=g.uuid "
 6                 + "and o.type=‘2‘ and od.state=‘1‘ ";
 7 //动态添加查询条件
 8         List<Date> queryParams = new ArrayList<Date>();
 9         if(null != startDate){
10             hql += "and o.createtime>=? ";
11             queryParams.add(startDate);
12         }
13         if(null != endDate){
14             hql += "and o.createtime<=? ";
15             queryParams.add(endDate);
16         }
17         hql += "group by gt.name";
18
19         return (List<Map<String,Object>>)this.getHibernateTemplate().find(hql,queryParams.toArray());
20     }
21 //2.1注意关联部分和原生 SQL 不同之处。from 后跟的是类名 (大写开头)
22 //2.2如果两个实体进行了一对多关联,关联的写法与 sql 不同
23 //2.3多的一方.一的一方属性 = 一的一方的别名
24 //2.4特别注意: 当我们的语句比较长,每换行后需要加空格
25 //3创建IreporetBiz 和ReportBiz 中orderReport方法.配置spring

3.service层

public List<Map<String, Object>> orderReport(Date startDate, Date endDate) {
		return reportDao.orderReport(startDate, endDate);
}
//4.创建orderAction中的orederReporet方法
/**
	 * 销售的报表
	 */
	public void orderReport(){
		List<Map<String, Object>> report = reportBiz.orderReport(startDate, endDate);
		write(JSON.toJSONString(report));
	}

  

4Action层

 1 public class ReportAction {
 2
 3     private Date startDate;
 4
 5     private Date endDate;
 6
 7     private IReportBiz reportBiz;
 8
 9     /**
10      * 销售统计报表
11      */
12     public void orderReport(){
13         List reportData = reportBiz.orderReport(startDate, endDate);
14         write(JSON.toJSONString(reportData));
15     }
16
17     public Date getStartDate() {
18         return startDate;
19     }
20
21     public void setStartDate(Date startDate) {
22         this.startDate = startDate;
23     }
24
25     public Date getEndDate() {
26         return endDate;
27     }
28
29     public void setEndDate(Date endDate) {
30         this.endDate = endDate;
31     }
32
33     public void setReportBiz(IReportBiz reportBiz) {
34         this.reportBiz = reportBiz;
35     }
36
37     /**
38      * 输出给前端
39      * @param mapString
40      */
41     public void write(String mapString) {
42         //返回对象
43         HttpServletResponse res = ServletActionContext.getResponse();
44         res.setContentType("text/html;charset=utf-8");
45         res.setCharacterEncoding("utf-8");
46
47         try {
48             //输出给页面
49             res.getWriter().write(mapString);
50         } catch (IOException e) {
51             // TODO Auto-generated catch block
52             e.printStackTrace();
53         }
54     }
55 }

5.配置struts和spring(略)

6.js编写(copy源码)

//6.1js 饼状图
$(function(){
	//加载表格数据
	$(‘#grid‘).datagrid({
		url:‘report_orderReport‘,
		columns:[[
		  		{field:‘name‘,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);
	});

});
function showChart(data){
	$(‘#pieChart‘).highcharts({
        chart: {
            plotBackgroundColor: null,
            plotBorderWidth: null,
            plotShadow: false,
            type: ‘pie‘
        },
        title: {
            text: ‘销售统计‘
        },
        tooltip: {
            pointFormat: ‘{series.name}: <b>{point.percentage:.1f}%</b>‘
        },
        plotOptions: {
            pie: {
                allowPointSelect: true,
                cursor: ‘pointer‘,
                dataLabels: {
                    enabled: true
                },
                showInLegend: true
            }
        },
        series: [{
            name: "比例",
            colorByPoint: true,
            data: data
        }],
        credits:{
        	text:‘www.itheima.com‘
        }
    });
}

  

7.html页面

 1 <body class="easyui-layout">
 2 <div data-options="region:‘center‘,title:‘销售统计表‘" style="padding:4px;background-color:#eee">
 3         <form id="searchForm">
 4             开始日期:<input name="startDate" class="easyui-datebox">
 5             结束日期:<input name="endDate" class="easyui-datebox">
 6             <button type="button" id="btnSearch">查询</button>
 7         </form>
 8     <div style="height:4px;"></div>
 9     <table id="grid"></table>
10 </div>
11 <div data-options="region:‘east‘,title:‘销售统计图‘,split:true" style="width:600px;">
12     <div id="pieChart"></div>
13 </div>
14 </div>
时间: 2024-10-26 01:29:40

销售统计饼状图的相关文章

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

C#+JQuery+.Ashx+百度Echarts 实现全国省市地图和饼状图动态数据图形报表的统计

在目前的一个项目中,需要用到报表表现数据,这些数据有多个维度,需要同时表现出来,同时可能会有大量数据呈现的需求,经过几轮挑选,最终选择了百度的echarts作为报表基础类库.echarts功能强大,界面优美.由于客户是淘宝卖家,因此想要实现每个月全国各个省份各自购力如何,大家可以统计其他的,如果GDP 人口 等等. 百度echarts简介请参考 http://echarts.coding.io/doc/example.html 效果图如下:全部是动态数据 JS代码: <!-- Charts La

前端数据统计用做Bootstrap的一些柱状图、饼状图和折线图案例

Bootstrap,来自 Twitter,是目前最受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷. Bootstrap 使用了一些 HTML5 元素和 CSS 属性.为了让这些正常工作,您需要使用 HTML5 文档类型(Doctype). 因此,请在使用 Bootstrap 项目的开头包含下面的代码段. <!DOCTYPE html> <html> .... </html> Bootstr

AngularJS in Action读书笔记5(实战篇)——在directive中引入D3饼状图显示

前言: "宁肯像种子一样等待  也不愿像疲惫的陀螺  旋转得那样勉强" 这是前几天在查资料无意间看到的一位园友的签名,看完后又读了两遍,觉得很有味道.后来一寻根究底才知这是出资大诗人汪国真之口,出处<她>.且抛开上下文,单从这短短几句,正恰如其分的折射出有一群人,他们穿着不那么fashion,言辞不那么犀利,但是内心某一块地方像是躁动的火山,拥有无尽的动力和激情,矢志不渝种子般投身到技术研究和心得分享当中. 或许每一次的生长都是那么悄无声息,但是无数次的坚持只是为了破土那日

Echarts生成饼状图、条形图以及线形图 JS封装

1.在我们开发程序中,经常会用到生成一些报表,比方说饼状图,条形图,折线图等.不多说了,直接上封装好的代码,如下Echarts.js所示 以下代码是封装在Echarts.js文件中 /** * Created by Administrator on 2015/8/7. */ var charec; // 路径配置 require.config({ paths: { echarts: 'http://echarts.baidu.com/build/dist' } }); // 按需加载所需图表 r

highcharts饼状图使用案例

在公司由于需要对订单数据进行分析,故使用到了highcharts工具 <block name="Js"> <script type="text/javascript">//图表属性,不包含数据 var options = { chart: { renderTo:'container', plotBackgroundColor: null, plotBorderWidth: null, plotShadow: false }, credits:

arcgis api for flex之专题图制作(饼状图,柱状图等)

最近公司给我一个任务,就是利用arcgis api for flex实现在地图上点(业务数据)直接显示饼状图以及柱状图的专题图制作,而不是通过点击点显示气泡窗口的形式来实现,这个公司已经实现了. 经过一段时间的摸索,参照一些网上资源,目前大概弄出来了,里面还有待完善的地方的. 效果图如下: (1)Chart.mxml,主要的展示地图专题图效果的页面 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

使用JS charts来画图表(二)——饼状图

如上是一个饼状图: 代码如下: <html> <head> <title>部门管理</title> <script type="text/javascript" src="codebase/jscharts.js"></script> </head> <body> <div id="graph">Loading graph...</d

Android图表库MPAndroidChart(七)—饼状图可以再简单一点

Android图表库MPAndroidChart(七)-饼状图可以再简单一点 接上文,今天实现的是用的很多的,作用在统计上的饼状图,我们看下今天的效果 这个效果,我们实现,和之前一样的套路,我先来说下这个的应用场景,假设,我是一名小学老师,现在教务处让我设置一个图表,说明下我带的班级期末考试有多少人优秀,多少人及格和不及格等等,而这些呢,我已经算出来百分比了,只剩下画图了,那好,我们就来实现以下吧 一.基本实现 首先是我们的布局 <com.github.mikephil.charting.cha