From 71c4e9ea55529bf8f851789313edfc7ab0889d14 Mon Sep 17 00:00:00 2001 From: 935090232@qq.com <ak473600000> Date: Wed, 02 Dec 2020 21:11:31 +0800 Subject: [PATCH] 人头统计代码优化 --- zq-erp/src/main/java/com/matrix/system/hiveErp/analysUtil/StatisticsTimeUtil.java | 179 +++++++++++++++++++++++++ /dev/null | 106 --------------- zq-erp/src/main/java/com/matrix/system/hiveErp/analysUtil/StatisticsTimeDaoParam.java | 2 zq-erp/src/main/java/com/matrix/system/hiveErp/dao/TjVipSumDao.java | 2 zq-erp/src/main/resources/templates/views/admin/hive-erp/analysis/customerFlow.html | 2 zq-erp/src/main/java/com/matrix/system/hiveErp/analysUtil/StatisticsParamVo.java | 25 ++ zq-erp/src/main/java/com/matrix/system/hiveErp/action/DataAnalysisCustomer.java | 91 +++++++++++++ zq-erp/src/main/java/com/matrix/system/hiveErp/analysUtil/SeriesVo.java | 2 8 files changed, 293 insertions(+), 116 deletions(-) diff --git a/zq-erp/src/main/java/com/matrix/system/hiveErp/action/CustomerAnalysis.java b/zq-erp/src/main/java/com/matrix/system/hiveErp/action/CustomerAnalysis.java deleted file mode 100644 index 19d19ad..0000000 --- a/zq-erp/src/main/java/com/matrix/system/hiveErp/action/CustomerAnalysis.java +++ /dev/null @@ -1,155 +0,0 @@ -package com.matrix.system.hiveErp.action; - -import com.matrix.core.constance.MatrixConstance; -import com.matrix.core.pojo.AjaxResult; -import com.matrix.core.tools.DateUtil; -import com.matrix.core.tools.WebUtil; -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.hive.service.SysShopInfoService; -import com.matrix.system.hiveErp.Vo.SeriesVo; -import com.matrix.system.hiveErp.Vo.StatisticsParamVo; -import com.matrix.system.hiveErp.Vo.StatisticsTimeDaoParam; -import com.matrix.system.hiveErp.dao.TjVipSumDao; -import com.matrix.system.hiveErp.util.StatisticsTimeUtil; -import org.apache.commons.collections.MapUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.util.*; - -@Controller -@RequestMapping(value = "admin/analysis") -public class CustomerAnalysis { - - @Autowired - TjVipSumDao tjVipSumDao; - - @Autowired - SysShopInfoDao shopInfoDao; - - - /** - * 到店次数趋势统计 - * - * @return - - @RequestMapping(value = "/vipVisitTendency") - public @ResponseBody - AjaxResult vipVisit(StatisticsParamVo statisticsParam) { - AjaxResult result = new AjaxResult(); - //计算横坐标 - List<Date> xAxis = StatisticsTimeUtil.getTimeSpace(statisticsParam.getBeginTime(), statisticsParam.getEndTime(), statisticsParam.getStatisticsUnit()); - Map<String, Integer> yAxisMap = tjVipSumDao.countVisitByTime(buidParam(xAxis),null); - Integer[] series= getSeries(yAxisMap); - - //构造返回对象 - Map<Object,Object> data=new HashMap<>(); - data.put("series",series); - data.put("xAxis", getFormartDateList(xAxis,statisticsParam)); - result.setMapInfo(data); - result.setStatus(AjaxResult.STATUS_SUCCESS); - return result; - } - */ - - - @RequestMapping(value = "vipVisitCompare") - public @ResponseBody AjaxResult vipVisitCompare(StatisticsParamVo statisticsParam) { - SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); - AjaxResult result = new AjaxResult(); - //计算横坐标 - List<Date> xAxis = StatisticsTimeUtil.getTimeSpace(statisticsParam.getBeginTime(), statisticsParam.getEndTime(), statisticsParam.getStatisticsUnit()); - - //获取所有门店 - List<SysShopInfo> shops= shopInfoDao.selectShopInfo(user.getCompanyId()); - List<SeriesVo> series=new ArrayList<>(); - String[] legendData=new String[shops.size()]; - int i=0; - for(SysShopInfo shop: shops){ - legendData[i++]=shop.getShopName(); - SeriesVo storeInfoSeries=new SeriesVo(); - storeInfoSeries.setName(shop.getShopName()); - Map<String, Integer> yAxisMap = tjVipSumDao.countVisitByTime(buidParam(xAxis),shop.getId()); - storeInfoSeries.setData(getSeries(yAxisMap)); - series.add(storeInfoSeries); - } - //构造返回对象 - Map<Object,Object> data=new HashMap<>(); - data.put("legendData",legendData); - data.put("series",series); - data.put("xAxis", getFormartDateList(xAxis,statisticsParam)); - result.setMapInfo(data); - result.setStatus(AjaxResult.STATUS_SUCCESS); - return result; - } - - /** - * 获取map中的值为数组 - * @param yAxisMap - * @return - */ - private Integer[] getSeries(Map<String, Integer> yAxisMap) { - if (MapUtils.isNotEmpty(yAxisMap)) { - Integer[] seroes = new Integer[yAxisMap.size()-1]; - for (int index=0; index<yAxisMap.size()-1 ; index++) { - if(index<seroes.length){ - seroes[index]=Integer.parseInt(yAxisMap.get("t"+index)+""); - } - } - return seroes; - } else { - return new Integer[0]; - } - } - - - private String[] getFormartDateList(List<Date> xAxis,StatisticsParamVo statisticsParam) { - String[] dates=new String[xAxis.size()]; - String dataFmt=""; - switch (statisticsParam.getStatisticsUnit()){ - case "时": - dataFmt= DateUtil.DATE_FORMAT_HH; - break; - case "日": - dataFmt=DateUtil.DATE_FORMAT_DD; - break; - case "月": - dataFmt=DateUtil.MONTH; - break; - case "年": - dataFmt=DateUtil.YEAR; - break; - - } - for(int i=0 ; i<dates.length; i++ ){ - dates[i]= DateUtil.dateToString(xAxis.get(i),dataFmt); - } - return dates; - } - - - /** - * 构建查询参数,带时间范围 - * @param xAxis - * @return - */ - private List<StatisticsTimeDaoParam> buidParam(List<Date> xAxis) { - List<StatisticsTimeDaoParam> daoParams = new ArrayList<>(); - for(int i=0 ;i<xAxis.size(); i++){ - StatisticsTimeDaoParam param= new StatisticsTimeDaoParam(); - param.setBeginTime(xAxis.get(i)); - if(i+1<xAxis.size()){ - param.setEndTime(xAxis.get(i+1)); - } - daoParams.add(param); - } - return daoParams; - } - - - -} 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 new file mode 100644 index 0000000..6703ad4 --- /dev/null +++ b/zq-erp/src/main/java/com/matrix/system/hiveErp/action/DataAnalysisCustomer.java @@ -0,0 +1,91 @@ +package com.matrix.system.hiveErp.action; + +import com.matrix.core.constance.MatrixConstance; +import com.matrix.core.pojo.AjaxResult; +import com.matrix.core.tools.WebUtil; +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.dao.TjVipSumDao; +import com.matrix.system.hiveErp.analysUtil.StatisticsTimeUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.*; + +/** + * 会员数据分析 + * @author jyy + */ +@Controller +@RequestMapping(value = "admin/analysis") +public class DataAnalysisCustomer { + + @Autowired + TjVipSumDao tjVipSumDao; + + @Autowired + SysShopInfoDao shopInfoDao; + + + + /** + * 会员人头数统计 + * 业务说明: + * 人头指门店所有进店客户的总人数,同一个人在一段时间内无论进店几次都视为一次进店 + * 比如:张三1个月来了3次做护理,李四来2次做护理,杨欢来2次做护理,但是只统计客户名字,那人头就是3个 + * @param statisticsParam + * @return + */ + @RequestMapping(value = "customerHeadCompare") + public @ResponseBody AjaxResult vipVisitCompare(StatisticsParamVo statisticsParam) { + + AjaxResult result = new AjaxResult(); + + //根据计算横坐标 + List<Date> xAxis = StatisticsTimeUtil.getTimeSpace(statisticsParam.getBeginTime(), statisticsParam.getEndTime(), statisticsParam.getStatisticsUnit()); + + //获取所有门店 + SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); + List<SysShopInfo> shops= shopInfoDao.selectShopInfo(user.getCompanyId()); + + //定义数据项内容 + List<SeriesVo> series=new ArrayList<>(); + + //定义数据主体 + String[] legendData=new String[shops.size()]; + + int i=0; + + //按门店统计数据 + 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()); + + storeInfoSeries.setData(StatisticsTimeUtil.getSeries(yAxisMap)); + series.add(storeInfoSeries); + + } + //构造返回对象 + Map<Object,Object> data=new HashMap<>(); + data.put("legendData",legendData); + data.put("series",series); + data.put("xAxis", StatisticsTimeUtil.getFormartDateList(xAxis,statisticsParam)); + result.setMapInfo(data); + result.setStatus(AjaxResult.STATUS_SUCCESS); + return result; + } + + + +} diff --git a/zq-erp/src/main/java/com/matrix/system/hiveErp/Vo/SeriesVo.java b/zq-erp/src/main/java/com/matrix/system/hiveErp/analysUtil/SeriesVo.java similarity index 94% rename from zq-erp/src/main/java/com/matrix/system/hiveErp/Vo/SeriesVo.java rename to zq-erp/src/main/java/com/matrix/system/hiveErp/analysUtil/SeriesVo.java index 47289ed..cfbb8a1 100644 --- a/zq-erp/src/main/java/com/matrix/system/hiveErp/Vo/SeriesVo.java +++ b/zq-erp/src/main/java/com/matrix/system/hiveErp/analysUtil/SeriesVo.java @@ -1,4 +1,4 @@ -package com.matrix.system.hiveErp.Vo; +package com.matrix.system.hiveErp.analysUtil; /** * echart 图表参数 diff --git a/zq-erp/src/main/java/com/matrix/system/hiveErp/Vo/StatisticsParamVo.java b/zq-erp/src/main/java/com/matrix/system/hiveErp/analysUtil/StatisticsParamVo.java similarity index 81% rename from zq-erp/src/main/java/com/matrix/system/hiveErp/Vo/StatisticsParamVo.java rename to zq-erp/src/main/java/com/matrix/system/hiveErp/analysUtil/StatisticsParamVo.java index c193876..dba0746 100644 --- a/zq-erp/src/main/java/com/matrix/system/hiveErp/Vo/StatisticsParamVo.java +++ b/zq-erp/src/main/java/com/matrix/system/hiveErp/analysUtil/StatisticsParamVo.java @@ -1,19 +1,32 @@ -package com.matrix.system.hiveErp.Vo; +package com.matrix.system.hiveErp.analysUtil; /** * 统计查询条件 + * @author jyy */ public class StatisticsParamVo { - //开始时间 + /** + * 开始时间 + */ private String beginTime; - //结束时间 + + /** + *结束时间 + */ private String endTime; - //统计单位 + /** + *统计单位 + */ private String statisticsUnit; - //对比单位 + + /** + *对比单位 + */ private String contrastUnit; - //门店 + /** + * 门店id + */ private String shopId; public String getBeginTime() { diff --git a/zq-erp/src/main/java/com/matrix/system/hiveErp/Vo/StatisticsTimeDaoParam.java b/zq-erp/src/main/java/com/matrix/system/hiveErp/analysUtil/StatisticsTimeDaoParam.java similarity index 90% rename from zq-erp/src/main/java/com/matrix/system/hiveErp/Vo/StatisticsTimeDaoParam.java rename to zq-erp/src/main/java/com/matrix/system/hiveErp/analysUtil/StatisticsTimeDaoParam.java index 78271ae..863b8fc 100644 --- a/zq-erp/src/main/java/com/matrix/system/hiveErp/Vo/StatisticsTimeDaoParam.java +++ b/zq-erp/src/main/java/com/matrix/system/hiveErp/analysUtil/StatisticsTimeDaoParam.java @@ -1,4 +1,4 @@ -package com.matrix.system.hiveErp.Vo; +package com.matrix.system.hiveErp.analysUtil; import java.util.Date; 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 new file mode 100644 index 0000000..c749166 --- /dev/null +++ b/zq-erp/src/main/java/com/matrix/system/hiveErp/analysUtil/StatisticsTimeUtil.java @@ -0,0 +1,179 @@ +package com.matrix.system.hiveErp.analysUtil; + +import com.matrix.core.tools.DateUtil; +import org.apache.commons.collections.MapUtils; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * 统计分析时间工具 + * @author jyy + */ +public class StatisticsTimeUtil { + + /** + * 获取map中的值为数组 + * @param yAxisMap + * @return + */ + public static Integer[] getSeries(Map<String, Integer> yAxisMap) { + if (MapUtils.isNotEmpty(yAxisMap)) { + Integer[] seroes = new Integer[yAxisMap.size()-1]; + for (int index=0; index<yAxisMap.size()-1 ; index++) { + if(index<seroes.length){ + seroes[index]=Integer.parseInt(yAxisMap.get("t"+index)+""); + } + } + return seroes; + } else { + return new Integer[0]; + } + } + + + + /** + * + * @param xAxis + * @param statisticsParam + * @return + */ + public static String[] getFormartDateList(List<Date> xAxis, StatisticsParamVo statisticsParam) { + String[] dates=new String[xAxis.size()]; + String dataFmt=""; + switch (statisticsParam.getStatisticsUnit()){ + case "时": + dataFmt= DateUtil.DATE_FORMAT_HH; + break; + case "日": + dataFmt=DateUtil.DATE_FORMAT_DD; + break; + case "月": + dataFmt=DateUtil.MONTH; + break; + case "年": + dataFmt=DateUtil.YEAR; + break; + + } + for(int i=0 ; i<dates.length; i++ ){ + dates[i]= DateUtil.dateToString(xAxis.get(i),dataFmt); + } + return dates; + } + + + /** + * 构建查询参数,带时间范围 + * @param xAxis + * @return + */ + public static List<StatisticsTimeDaoParam> buidParam(List<Date> xAxis) { + List<StatisticsTimeDaoParam> daoParams = new ArrayList<>(); + for(int i=0 ;i<xAxis.size(); i++){ + StatisticsTimeDaoParam param= new StatisticsTimeDaoParam(); + param.setBeginTime(xAxis.get(i)); + if(i+1<xAxis.size()){ + param.setEndTime(xAxis.get(i+1)); + } + daoParams.add(param); + } + return daoParams; + } + + + + /** + * 通过统计单位获取时间段中,有多小段 + * @param beginTime + * @param endTime + * @param statisticsUnit + * @return + */ + public static List<Date> getTimeSpace(String beginTime, String endTime, String statisticsUnit) { + + + List<Date> result=new ArrayList<>(); + switch (statisticsUnit){ + case "时": + return getTimeSpaceByHours(beginTime,endTime); + case "日": + return getTimeSpaceByDay(beginTime,endTime); + case "月": + return getTimeSpaceByMonth(beginTime,endTime); + + case "年": + return getTimeSpaceByYear(beginTime,endTime); + default: + return result; + } + + } + + + + private static List<Date> getTimeSpaceByYear(String beginTime, String endTime){ + List<Date> tims=new ArrayList(); + Date begin= DateUtil.stringToDate(beginTime,DateUtil.YEAR); + Date end= DateUtil.stringToDate(endTime,DateUtil.YEAR); + tims.add(begin); + while(DateUtil.isAffterDate(begin,end)){ + + begin=DateUtil.getDateAfterYear(begin,1); + tims.add(begin); + } + return tims; + } + + + private static List<Date> getTimeSpaceByMonth(String beginTime, String endTime){ + List<Date> tims=new ArrayList(); + Date begin= DateUtil.stringToDate(beginTime,DateUtil.MONTH); + Date end= DateUtil.stringToDate(endTime,DateUtil.MONTH); + tims.add(begin); + while(DateUtil.isAffterDate(begin,end)){ + + begin=DateUtil.getDateAfterMonth(begin,1); + tims.add(begin); + } + return tims; + } + + + private static List<Date> getTimeSpaceByDay(String beginTime, String endTime){ + List<Date> tims=new ArrayList(); + Date begin= DateUtil.stringToDate(beginTime,DateUtil.DATE_FORMAT_DD); + Date end= DateUtil.stringToDate(endTime,DateUtil.DATE_FORMAT_DD); + tims.add(begin); + while(DateUtil.isAffterDate(begin,end)){ + begin=DateUtil.getDateAfter(begin,1); + tims.add(begin); + } + return tims; + } + + + + + private static List<Date> getTimeSpaceByHours(String beginTime, String endTime){ + List<Date> tims=new ArrayList(); + Date begin= DateUtil.stringToDate(beginTime,DateUtil.DATE_FORMAT_HH); + Date end= DateUtil.stringToDate(endTime,DateUtil.DATE_FORMAT_HH); + tims.add(begin); + while(DateUtil.isAffterDate(begin,end)){ + begin=DateUtil.getDateAfterHours(begin,1); + tims.add(begin); + } + return tims; + } + + public static void main(String[] args) { + List<Date> tims= getTimeSpaceByYear("2014","2019"); + for (Date time: tims) { + System.out.println(time.toLocaleString()); + } + } +} 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 dcd7a22..e653d6e 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 @@ -1,7 +1,7 @@ package com.matrix.system.hiveErp.dao; -import com.matrix.system.hiveErp.Vo.StatisticsTimeDaoParam; +import com.matrix.system.hiveErp.analysUtil.StatisticsTimeDaoParam; import org.apache.ibatis.annotations.Param; import java.util.List; diff --git a/zq-erp/src/main/java/com/matrix/system/hiveErp/util/StatisticsTimeUtil.java b/zq-erp/src/main/java/com/matrix/system/hiveErp/util/StatisticsTimeUtil.java deleted file mode 100644 index 7fb661f..0000000 --- a/zq-erp/src/main/java/com/matrix/system/hiveErp/util/StatisticsTimeUtil.java +++ /dev/null @@ -1,106 +0,0 @@ -package com.matrix.system.hiveErp.util; - -import com.matrix.core.tools.DateUtil; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; -import java.util.List; - -public class StatisticsTimeUtil { - - /** - * 通过统计单位获取时间段中,有多小段 - * @param beginTime - * @param endTime - * @param statisticsUnit - * @return - */ - public static List<Date> getTimeSpace(String beginTime, String endTime, String statisticsUnit) { - - - List<Date> result=new ArrayList<>(); - switch (statisticsUnit){ - case "时": - return getTimeSpaceByHours(beginTime,endTime); - case "日": - return getTimeSpaceByDay(beginTime,endTime); - case "月": - return getTimeSpaceByMonth(beginTime,endTime); - - case "年": - return getTimeSpaceByYear(beginTime,endTime); - - default: - return result; - - } - - - - } - - - - private static List<Date> getTimeSpaceByYear(String beginTime, String endTime){ - List<Date> tims=new ArrayList(); - Date begin= DateUtil.stringToDate(beginTime,DateUtil.YEAR); - Date end= DateUtil.stringToDate(endTime,DateUtil.YEAR); - tims.add(begin); - while(DateUtil.isAffterDate(begin,end)){ - - begin=DateUtil.getDateAfterYear(begin,1); - tims.add(begin); - } - return tims; - } - - - private static List<Date> getTimeSpaceByMonth(String beginTime, String endTime){ - List<Date> tims=new ArrayList(); - Date begin= DateUtil.stringToDate(beginTime,DateUtil.MONTH); - Date end= DateUtil.stringToDate(endTime,DateUtil.MONTH); - tims.add(begin); - while(DateUtil.isAffterDate(begin,end)){ - - begin=DateUtil.getDateAfterMonth(begin,1); - tims.add(begin); - } - return tims; - } - - - private static List<Date> getTimeSpaceByDay(String beginTime, String endTime){ - List<Date> tims=new ArrayList(); - Date begin= DateUtil.stringToDate(beginTime,DateUtil.DATE_FORMAT_DD); - Date end= DateUtil.stringToDate(endTime,DateUtil.DATE_FORMAT_DD); - tims.add(begin); - while(DateUtil.isAffterDate(begin,end)){ - begin=DateUtil.getDateAfter(begin,1); - tims.add(begin); - } - return tims; - } - - - - - private static List<Date> getTimeSpaceByHours(String beginTime, String endTime){ - List<Date> tims=new ArrayList(); - Date begin= DateUtil.stringToDate(beginTime,DateUtil.DATE_FORMAT_HH); - Date end= DateUtil.stringToDate(endTime,DateUtil.DATE_FORMAT_HH); - tims.add(begin); - while(DateUtil.isAffterDate(begin,end)){ - begin=DateUtil.getDateAfterHours(begin,1); - tims.add(begin); - } - return tims; - } - - public static void main(String[] args) { - List<Date> tims= getTimeSpaceByYear("2014","2019"); - for (Date time: tims) { - System.out.println(time.toLocaleString()); - } - } -} 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 57e1e13..623c959 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 @@ -170,7 +170,7 @@ $.AjaxProxy({ p: MForm.toJson("#serchform"), c: false, - }).invoke(basePath+"/admin/analysis/vipVisitCompare", + }).invoke(basePath+"/admin/analysis/customerHeadCompare", function (loj) { var map = loj.getValue("mapInfo"); console.log(map); -- Gitblit v1.9.1