From 48bef1c8e51a2d8ac9c10197e1b5f2a1457d8692 Mon Sep 17 00:00:00 2001 From: 935090232@qq.com <ak473600000> Date: Wed, 02 Dec 2020 23:31:22 +0800 Subject: [PATCH] 人次统计 --- zq-erp/src/main/java/com/matrix/system/hiveErp/analysUtil/StatisticsTimeUtil.java | 3 zq-erp/src/main/java/com/matrix/system/hiveErp/dao/TjVipSumDao.java | 3 zq-erp/src/main/resources/templates/views/admin/hive-erp/analysis/customerFlow.html | 96 ++++++++++++----------- zq-erp/src/main/resources/mybatis/mapper/hive/TjVipSumDao.xml | 20 ++++ zq-erp/src/main/resources/static/css/style.min.css | 2 zq-erp/src/main/java/com/matrix/system/hiveErp/action/DataAnalysisCustomer.java | 60 ++++++++++++-- zq-erp/src/main/java/com/matrix/system/hiveErp/analysUtil/Caculate.java | 10 ++ 7 files changed, 133 insertions(+), 61 deletions(-) diff --git a/zq-erp/src/main/java/com/matrix/system/hiveErp/action/DataAnalysisCustomer.java b/zq-erp/src/main/java/com/matrix/system/hiveErp/action/DataAnalysisCustomer.java index 6703ad4..401caeb 100644 --- a/zq-erp/src/main/java/com/matrix/system/hiveErp/action/DataAnalysisCustomer.java +++ b/zq-erp/src/main/java/com/matrix/system/hiveErp/action/DataAnalysisCustomer.java @@ -6,10 +6,9 @@ import com.matrix.system.common.bean.SysUsers; import com.matrix.system.hive.bean.SysShopInfo; import com.matrix.system.hive.dao.SysShopInfoDao; -import com.matrix.system.hiveErp.analysUtil.SeriesVo; -import com.matrix.system.hiveErp.analysUtil.StatisticsParamVo; +import com.matrix.system.hiveErp.analysUtil.*; import com.matrix.system.hiveErp.dao.TjVipSumDao; -import com.matrix.system.hiveErp.analysUtil.StatisticsTimeUtil; +import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -41,9 +40,50 @@ * @param statisticsParam * @return */ - @RequestMapping(value = "customerHeadCompare") - public @ResponseBody AjaxResult vipVisitCompare(StatisticsParamVo statisticsParam) { + @RequestMapping(value = "/customerHeadCompare") + public @ResponseBody AjaxResult customerHeadCompare(StatisticsParamVo statisticsParam) { + return getAnalysisResult(statisticsParam, new Caculate() { + @Override + public Map<String, Integer> exec(List<StatisticsTimeDaoParam> timeSpaceParam, Long shopId) { + //从员工业绩统计表中,按时间段,门店的维度统计人头数 + return tjVipSumDao.customerHeadCompare(timeSpaceParam,shopId); + } + }); + } + /** + * 会员人次统计 + * 业务说明: + * 一个会员在一天进店一次或者多次即为一个人次 + * @param statisticsParam + * @return + */ + @RequestMapping(value = "/customerEnterCountCompare") + public @ResponseBody AjaxResult customerEnterCountCompare(StatisticsParamVo statisticsParam) { + return getAnalysisResult(statisticsParam, new Caculate() { + @Override + public Map<String, Integer> exec(List<StatisticsTimeDaoParam> timeSpaceParam, Long shopId) { + //从员工业绩统计表中,按时间段,门店的维度统计人次 + return tjVipSumDao.customerEnterCountCompare(timeSpaceParam,shopId); + } + }); + } + + + + + + /** + * 按店铺查询数据通用格式执行方法,支持时、日、月、年维度 + * 如: A店铺 B店铺 + * 2020-01-01 12 13 + * 2020-02-02 10 11 + * @param statisticsParam 时间条件 + * @param caculate 循环调用caculate计算该店的数据 + * 查询的数据需满足 只有一个门店只有一行 列名称为 t0,t1,t2 + * @return + */ + private AjaxResult getAnalysisResult(StatisticsParamVo statisticsParam, Caculate caculate) { AjaxResult result = new AjaxResult(); //根据计算横坐标 @@ -62,16 +102,16 @@ int i=0; //按门店统计数据 + List<StatisticsTimeDaoParam> timeSpaceParam = StatisticsTimeUtil.buidParam(xAxis); for(SysShopInfo shop: shops){ legendData[i++]=shop.getShopName(); - + //数据项内容 SeriesVo storeInfoSeries=new SeriesVo(); storeInfoSeries.setName(shop.getShopName()); - - //从员工业绩统计表中,按时间段,门店的维度统计人头数 - Map<String, Integer> yAxisMap = tjVipSumDao.countVisitByTime(StatisticsTimeUtil.buidParam(xAxis),shop.getId()); - + //调用计算器获取数据库统计的结果 + Map<String, Integer> yAxisMap = caculate.exec(timeSpaceParam,shop.getId()); + //把统计结果转成数组格式 storeInfoSeries.setData(StatisticsTimeUtil.getSeries(yAxisMap)); series.add(storeInfoSeries); diff --git a/zq-erp/src/main/java/com/matrix/system/hiveErp/analysUtil/Caculate.java b/zq-erp/src/main/java/com/matrix/system/hiveErp/analysUtil/Caculate.java new file mode 100644 index 0000000..27e6cdf --- /dev/null +++ b/zq-erp/src/main/java/com/matrix/system/hiveErp/analysUtil/Caculate.java @@ -0,0 +1,10 @@ +package com.matrix.system.hiveErp.analysUtil; + +import java.util.List; +import java.util.Map; +/** + * 明细数值计算器 + */ +public interface Caculate { + public Map<String, Integer> exec(List<StatisticsTimeDaoParam> timeSpaceParam , Long shopId); +} diff --git a/zq-erp/src/main/java/com/matrix/system/hiveErp/analysUtil/StatisticsTimeUtil.java b/zq-erp/src/main/java/com/matrix/system/hiveErp/analysUtil/StatisticsTimeUtil.java index c749166..ce53cac 100644 --- a/zq-erp/src/main/java/com/matrix/system/hiveErp/analysUtil/StatisticsTimeUtil.java +++ b/zq-erp/src/main/java/com/matrix/system/hiveErp/analysUtil/StatisticsTimeUtil.java @@ -14,6 +14,9 @@ */ public class StatisticsTimeUtil { + + + /** * 获取map中的值为数组 * @param yAxisMap diff --git a/zq-erp/src/main/java/com/matrix/system/hiveErp/dao/TjVipSumDao.java b/zq-erp/src/main/java/com/matrix/system/hiveErp/dao/TjVipSumDao.java index e653d6e..404d626 100644 --- a/zq-erp/src/main/java/com/matrix/system/hiveErp/dao/TjVipSumDao.java +++ b/zq-erp/src/main/java/com/matrix/system/hiveErp/dao/TjVipSumDao.java @@ -11,6 +11,7 @@ public interface TjVipSumDao { - Map<String,Integer> countVisitByTime(@Param("list") List<StatisticsTimeDaoParam> daoParams, @Param("shopId") Long shopId); + Map<String,Integer> customerHeadCompare(@Param("list") List<StatisticsTimeDaoParam> daoParams, @Param("shopId") Long shopId); + Map<String, Integer> customerEnterCountCompare(@Param("list") List<StatisticsTimeDaoParam> timeSpaceParam, @Param("shopId") Long shopId); } \ No newline at end of file diff --git a/zq-erp/src/main/resources/mybatis/mapper/hive/TjVipSumDao.xml b/zq-erp/src/main/resources/mybatis/mapper/hive/TjVipSumDao.xml index 6c5c06f..4910f53 100644 --- a/zq-erp/src/main/resources/mybatis/mapper/hive/TjVipSumDao.xml +++ b/zq-erp/src/main/resources/mybatis/mapper/hive/TjVipSumDao.xml @@ -7,7 +7,7 @@ <!-- 人头数统计 --> - <select id="countVisitByTime" resultType="java.util.TreeMap"> + <select id="customerHeadCompare" resultType="java.util.TreeMap"> select <foreach collection="list" index="index" item="item" separator="," > ( @@ -16,7 +16,6 @@ <if test="shopId !=null and shopId !=0 " > and SHOP_ID = #{shopId} </if> - ) t ) as t${index} @@ -24,5 +23,22 @@ from area where id=1 </select> + <!-- 人次统计 --> + <select id="customerEnterCountCompare" resultType="java.util.TreeMap"> + select + <foreach collection="list" index="index" item="item" separator="," > + ( + SELECT count(*) from ( + SELECT DISTINCT vip_id ,date_format(datatime,'%Y-%m-%d') from achieve_new where <![CDATA[datatime > #{item.beginTime} and datatime < #{item.endTime} ]]> + <if test="shopId !=null and shopId !=0 " > + and SHOP_ID = #{shopId} + </if> + ) t + ) as t${index} + + </foreach> + from area where id=1 + </select> + </mapper> diff --git a/zq-erp/src/main/resources/static/css/style.min.css b/zq-erp/src/main/resources/static/css/style.min.css index a2c6aed..555222b 100644 --- a/zq-erp/src/main/resources/static/css/style.min.css +++ b/zq-erp/src/main/resources/static/css/style.min.css @@ -7128,7 +7128,7 @@ } .echarts { - height: 240px + height: 400px } .checkbox-inline, .checkbox-inline+.checkbox-inline, .radio-inline, diff --git a/zq-erp/src/main/resources/templates/views/admin/hive-erp/analysis/customerFlow.html b/zq-erp/src/main/resources/templates/views/admin/hive-erp/analysis/customerFlow.html index 623c959..ccf9076 100644 --- a/zq-erp/src/main/resources/templates/views/admin/hive-erp/analysis/customerFlow.html +++ b/zq-erp/src/main/resources/templates/views/admin/hive-erp/analysis/customerFlow.html @@ -12,7 +12,12 @@ <script type="text/javascript" th:src="@{/js/plugin/jquery-2.1.4.min.js}"></script> <script type="text/javascript" th:src="@{/js/systools/MBase.js}"></script> + <style> + .echarts { + height: 400px + } + </style> </head> <body class=" container-fluid"> @@ -55,30 +60,17 @@ <div class="row chartsBox " style="margin-top: 40px"> <div class=" col-md-12"> + <div class="echarts" id="echarts-line-chart1"></div> + </div> + </div> + + + <div class="row chartsBox " style="margin-top: 40px"> + <div class=" col-md-12"> <div class="echarts" id="echarts-line-chart2"></div> </div> </div> - <!-- <div class="row chartsBox " style="margin-top: 40px"> - <div class=" col-md-12" id="table"> - <table class="table table-striped" > - <thead> - <tr> - <th>时间</th> - <th v-for="name in legend" >{{name}}</th> - </tr> - </thead> - <tbody> - <tr v-for="(item,index) in xAxis"> - <td>{{item}}</td> - - <td v-for="data in series[index].data" >{{data}}</td> - </tr> - </tbody> - </table> - </div> - </div> ---> </div> <script type="text/javascript" th:src="@{/js/systools/MJsBase.js}"></script> @@ -88,7 +80,7 @@ <script type="text/javascript" th:src="@{/plugin/StringUtil.js}"></script> <script type="text/javascript" th:src="@{/plugin/moment.min.js}"></script> <script type="text/javascript" th:src="@{/js/systools/ChartsUtils.js}"></script> -<script type="text/javascript" th:src="@{/js/plugin/vue.js}"></script> + <script> @@ -98,11 +90,14 @@ // 基于准备好的dom,初始化echarts实例 + var myChart1 = echarts.init(document.getElementById('echarts-line-chart1'), 'macarons'); var myChart2 = echarts.init(document.getElementById('echarts-line-chart2'), 'macarons'); - myChart2.on('click', function (params) { + /* + 点击事件 + myChart1.on('click', function (params) { console.log(params); }); - +*/ // 指定图表的配置项和数据 function getption(title) { return { @@ -138,12 +133,6 @@ yAxis: { type: 'value' }, - series: [{ - name: '人头数', - type: 'line', - smooth: true, - data: [1,2] - }], dataZoom: [ { id: 'dataZoomX', @@ -153,8 +142,8 @@ } ], animation: true, - animationDuration: 1000, - animationDurationUpdate: 1000, + animationDuration: 500, + animationDurationUpdate: 500, animationEasing: 'linear', animationEasingUpdate: 'linear', } @@ -166,7 +155,7 @@ //加载数据 function loadData() { //加载门店客流对比 - myChart2.showLoading(); + myChart1.showLoading(); $.AjaxProxy({ p: MForm.toJson("#serchform"), c: false, @@ -181,28 +170,41 @@ option.xAxis.data = map.xAxis; console.log(option); // 使用刚指定的配置项和数据显示图表。 + myChart1.setOption(option); + myChart1.hideLoading(); + + }); + } + + var chartsUtils1 = new ChartsUtils(loadData); + chartsUtils1.setDataPackTimeValue(); + chartsUtils1.loadChartData(); + + //加载数据2 + function loadData2() { + //加载门店客流对比 + myChart2.showLoading(); + $.AjaxProxy({ + p: MForm.toJson("#serchform"), + c: false, + }).invoke(basePath+"/admin/analysis/customerEnterCountCompare", + function (loj) { + var map = loj.getValue("mapInfo"); + var option = getption("门店人次对比"); + option.series = map.series; + option.legend.data = map.legendData; + option.xAxis.data = map.xAxis; + // 使用刚指定的配置项和数据显示图表。 myChart2.setOption(option); myChart2.hideLoading(); }); } - var ChartsUtils = new ChartsUtils(loadData); - ChartsUtils.setDataPackTimeValue(); - ChartsUtils.loadChartData(); + var chartsUtils2 = new ChartsUtils(loadData2); + chartsUtils2.setDataPackTimeValue(); + chartsUtils2.loadChartData(); - - function buildTable(map){ - console.log(buildTable,map); - var app = new Vue({ - el: '#table', - data: { - series : map.series, - legend : map.legendData, - xAxis : map.xAxis - } - } ); - } -- Gitblit v1.9.1