zq-erp/src/main/java/com/matrix/system/hiveErp/action/DataAnalysisCustomer.java
@@ -70,6 +70,27 @@ } /** * 到店率 * 业务说明: * 门店所有客户人次数除以人头数 * @param statisticsParam * @return */ @RequestMapping(value = "/customerEnterRateCompare") public @ResponseBody AjaxResult customerEnterRateCompare(StatisticsParamVo statisticsParam) { return getAnalysisResult(statisticsParam, new Caculate() { @Override public Map<String, Integer> exec(List<StatisticsTimeDaoParam> timeSpaceParam, Long shopId) { //从员工业绩统计表中,按时间段,门店的维度统计人次 return tjVipSumDao.customerEnterRateCompare(timeSpaceParam,shopId); } }); } zq-erp/src/main/java/com/matrix/system/hiveErp/analysUtil/SeriesVo.java
@@ -9,13 +9,13 @@ private String name; private Integer[] data; private String[] data; private String type="line"; public SeriesVo() { } public SeriesVo(String name, Integer[] data, String type) { public SeriesVo(String name, String[] data, String type) { this.name = name; this.data = data; this.type = type; @@ -29,11 +29,11 @@ this.name = name; } public Integer[] getData() { public String[] getData() { return data; } public void setData(Integer[] data) { public void setData(String[] data) { this.data = data; } zq-erp/src/main/java/com/matrix/system/hiveErp/analysUtil/StatisticsTimeUtil.java
@@ -22,17 +22,18 @@ * @param yAxisMap * @return */ public static Integer[] getSeries(Map<String, Integer> yAxisMap) { public static String[] getSeries(Map<String, Integer> yAxisMap) { if (MapUtils.isNotEmpty(yAxisMap)) { Integer[] seroes = new Integer[yAxisMap.size()-1]; String[] seroes = new String[yAxisMap.size()-1]; for (int index=0; index<yAxisMap.size()-1 ; index++) { if(index<seroes.length){ seroes[index]=Integer.parseInt(yAxisMap.get("t"+index)+""); System.out.println(yAxisMap.get("t"+index)+""); seroes[index]=yAxisMap.get("t"+index)+""; } } return seroes; } else { return new Integer[0]; return new String[0]; } } @@ -128,6 +129,9 @@ begin=DateUtil.getDateAfterYear(begin,1); tims.add(begin); } begin=DateUtil.getDateAfterYear(begin,1); tims.add(begin); return tims; } @@ -142,6 +146,8 @@ begin=DateUtil.getDateAfterMonth(begin,1); tims.add(begin); } begin=DateUtil.getDateAfterMonth(begin,1); tims.add(begin); return tims; } @@ -155,6 +161,8 @@ begin=DateUtil.getDateAfter(begin,1); tims.add(begin); } begin=DateUtil.getDateAfter(begin,1); tims.add(begin); return tims; } @@ -170,6 +178,8 @@ begin=DateUtil.getDateAfterHours(begin,1); tims.add(begin); } begin=DateUtil.getDateAfterHours(begin,1); tims.add(begin); return tims; } zq-erp/src/main/java/com/matrix/system/hiveErp/dao/TjVipSumDao.java
@@ -14,4 +14,6 @@ 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); Map<String, Integer> customerEnterRateCompare(@Param("list") List<StatisticsTimeDaoParam> timeSpaceParam, @Param("shopId") Long shopId); } zq-erp/src/main/resources/mybatis/mapper/hive/TjVipSumDao.xml
@@ -40,5 +40,33 @@ from area where id=1 </select> <!-- 到店率 --> <select id="customerEnterRateCompare" resultType="java.util.TreeMap"> select <foreach collection="list" index="index" item="item" separator="," > ifnull( ( ( 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>) a ) / ( SELECT count(*) from ( SELECT DISTINCT vip_id from achieve_new where <![CDATA[datatime > #{item.beginTime} and datatime < #{item.endTime} ]]> <if test="shopId !=null and shopId !=0 " > and SHOP_ID = #{shopId} </if>) b ) ),0 )as t${index} </foreach> from area where id=1 </select> </mapper> zq-erp/src/main/resources/templates/views/admin/hive-erp/analysis/customerFlow.html
@@ -11,6 +11,7 @@ <!-- 本框架基本脚本和样式 --> <script type="text/javascript" th:src="@{/js/plugin/jquery-2.1.4.min.js}"></script> <link rel="stylesheet" th:href="@{/plugin/element-ui/index.css}"> <script type="text/javascript" th:src="@{/js/systools/MBase.js}"></script> <style> .echarts { @@ -45,7 +46,7 @@ name="endTime" type="text" class="form-control datetimepicker" autocomplete="off" id="endTime"> </div> <div class="form-group mr-20 "> <div class="form-group mr-20 mt-20 "> <label>统计单位</label> <select name="statisticsUnit" class=" form-control " id="unitSelect" style="width: 80px"> @@ -56,20 +57,66 @@ </select> </div> </form> <!-- 搜索框部分en --> <div class="row chartsBox " style="margin-top: 40px"> <div class=" col-md-12"> <div class=" col-md-6"> <div class="panel panel-info"> <div class="panel-heading">门店人次对比分析</div> <div class="panel-body"> <div class="echarts" id="echarts-line-chart2"></div> </div> </div> </div> <div class=" col-md-6"> <div class="panel panel-info"> <div class="panel-heading">门店人头对比分析</div> <div class="panel-body"> <div class="echarts" id="echarts-line-chart1"></div> </div> </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 class=" col-md-6"> <div class="panel panel-info"> <div class="panel-heading">门店到店率对比分析</div> <div class="panel-body"> <div class="echarts" id="echarts-line-chart3"></div> </div> </div> </div> <div class=" col-md-6"> <div class="panel panel-warning"> <div class="panel-heading">数据统计说明</div> <div class="panel-body "> <div class="echarts"> <ul> <li> <h3>会员人头数</h3> <p>一段时间内某个门店所有进店客户的总人数,同一个人无论进店几次都视为一个人头数</p> </li> <li> <h3>会员人次</h3> <p>一段时间内某个门店一个会员有3天来过门店则人次为3以此类推</p> </li> <li> <h3>到店率</h3> <p>一段时间内某个门店所有客户人次数除以人头数即为到店率</p> </li> </ul> </div> </div> </div> </div> </div> </div> @@ -80,7 +127,8 @@ <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 type="text/javascript" th:src="@{/plugin/element-ui/index.js}"></script> <script> @@ -92,6 +140,7 @@ // 基于准备好的dom,初始化echarts实例 var myChart1 = echarts.init(document.getElementById('echarts-line-chart1'), 'macarons'); var myChart2 = echarts.init(document.getElementById('echarts-line-chart2'), 'macarons'); var myChart3 = echarts.init(document.getElementById('echarts-line-chart3'), 'macarons'); /* 点击事件 myChart1.on('click', function (params) { @@ -99,10 +148,10 @@ }); */ // 指定图表的配置项和数据 function getption(title) { function getption() { return { title: { text: title, text: "", padding: 20 }, legend: {}, @@ -204,7 +253,29 @@ var chartsUtils2 = new ChartsUtils(loadData2); chartsUtils2.loadChartData(); //加载数据3 function loadData3() { //加载门店到店率 myChart3.showLoading(); $.AjaxProxy({ p: MForm.toJson("#serchform"), c: false, }).invoke(basePath+"/admin/analysis/customerEnterRateCompare", function (loj) { var map = loj.getValue("mapInfo"); var option = getption("门店到店率对比"); option.series = map.series; option.legend.data = map.legendData; option.xAxis.data = map.xAxis; // 使用刚指定的配置项和数据显示图表。 myChart3.setOption(option); myChart3.hideLoading(); }); } var chartsUtils3 = new ChartsUtils(loadData3); chartsUtils3.loadChartData(); </script>