当前位置: 首页 > news >正文

销售趋势分析折线图

销售趋势分析曲线图

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>

 

 

转载于:https://www.cnblogs.com/liushisaonian/p/7091976.html

相关文章:

  • How do we build TiDB
  • hbase region split方式
  • ASP.NET MVC5+EF6+EasyUI 后台管理系统(32)-swfupload多文件上传[附源码]
  • hihocoder 1457(后缀自动机+拓扑排序)
  • Gnocchi+Aodh服务简析
  • 给wordpress导航菜单添加个性图标
  • BZOJ 3170 [Tjoi 2013]松鼠聚会
  • 面向云数据中心的现代数据管理架构
  • 分布式光伏发电及配电网的保护机制探究
  • 光伏组件价格跳水,企业的未来何去何从?
  • 从智能家居的发展看对讲企业的定位
  • 六个对CRM数据分析至关重要的特性
  • Tego与Smartrac合作开发RFID解决方案用于复杂的工业环境
  • 交通部回应共享单车新政:实名制如何确保信息安全
  • Sublime字体设置
  • 【Leetcode】101. 对称二叉树
  • 【个人向】《HTTP图解》阅后小结
  • Angular 响应式表单之下拉框
  • exports和module.exports
  • Git初体验
  • gulp 教程
  • HTTP中的ETag在移动客户端的应用
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • Javascript基础之Array数组API
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • PermissionScope Swift4 兼容问题
  • React16时代,该用什么姿势写 React ?
  • ubuntu 下nginx安装 并支持https协议
  • 反思总结然后整装待发
  • 给初学者:JavaScript 中数组操作注意点
  • 基于webpack 的 vue 多页架构
  • 普通函数和构造函数的区别
  • 删除表内多余的重复数据
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 小程序01:wepy框架整合iview webapp UI
  • Python 之网络式编程
  • ​第20课 在Android Native开发中加入新的C++类
  • ​虚拟化系列介绍(十)
  • # Java NIO(一)FileChannel
  • #考研#计算机文化知识1(局域网及网络互联)
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (1)Android开发优化---------UI优化
  • (12)目标检测_SSD基于pytorch搭建代码
  • (175)FPGA门控时钟技术
  • (2.2w字)前端单元测试之Jest详解篇
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .describe() python_Python-Win32com-Excel
  • .Net 8.0 新的变化
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .Net FrameWork总结