From 62eca9b2a80194d98971b8b2dc45566330ad887f Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Wed, 3 Apr 2019 16:51:19 +0800 Subject: [PATCH] =?UTF-8?q?[=E6=95=B0=E6=8D=AE=E6=8A=A5=E8=A1=A8][?= =?UTF-8?q?=E6=95=B4=E7=90=86]:=E6=95=B4=E7=90=86code=EF=BC=8C=E8=B0=83?= =?UTF-8?q?=E8=AF=95=E8=BD=A6=E6=B5=81=E7=9B=B8=E5=85=B3=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/WxChartDataController.java | 7 +- .../java/com/iformall/common/ErrorCode.java | 1 + .../java/com/iformall/enums/EnumChart.java | 2 +- .../service/impl/WxChartServiceImpl.java | 3348 ++++++++++------- 4 files changed, 1911 insertions(+), 1447 deletions(-) diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/WxChartDataController.java b/mallinkAdmin/src/main/java/com/iformall/controller/WxChartDataController.java index dc9583545..092b39106 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/WxChartDataController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/WxChartDataController.java @@ -36,9 +36,12 @@ public class WxChartDataController extends BaseController { }) @SystemControllerLog(description = "报表-图表") public ResultData queryData(@RequestParam Map params) { - logger.debug("[" + getIpAddr() + "] WxChartDataController::queryData"); + String chart = params.get("chart"); + logger.info("[" + getIpAddr() + "] WxChartDataController::queryData chart: " + chart); params.put("tenantId",super.getTenantId()); - return wxChartDataService.queryData(params); + ResultData data = wxChartDataService.queryData(params); + logger.info("[" + getIpAddr() + "] WxChartDataController::queryData chart: " + chart + " end"); + return data; } } diff --git a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java index a5e9b084a..f80624783 100644 --- a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java +++ b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java @@ -26,6 +26,7 @@ public enum ErrorCode{ SYS_NUMBER_FORMAT_ERROR(1011, "数字转化异常"), SYS_EXTEND_JSON_ERROR(1012, "JSON格式异常"), SYS_REPEAT_SUBMIT_EXCEPTION(1013, "请勿重复操作"), + REPORT_TYPE_UNKNOWN(1014, "不支持的报表类型"), /** * 数据库 diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumChart.java b/mallinkService/src/main/java/com/iformall/enums/EnumChart.java index ac74c6d6d..8a5313bbd 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumChart.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumChart.java @@ -13,7 +13,7 @@ public enum EnumChart { HYYHSJ(6, "活跃用户数据"), XSSJ(7, "销售数据"), JDSJ(8, "解单数据"), - JRCNCLL(9, "今日场内车流量"), + JRCNCLL(9, "今日场内车流量"), // 合并至历史车流量 JRYBCPL(10, "今日已绑车牌量"), SSCLL(11, "实时车流量"), LSCLL(12, "历史车流量"), diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxChartServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxChartServiceImpl.java index 4f4546088..fef5fffec 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxChartServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxChartServiceImpl.java @@ -3,6 +3,7 @@ package com.iformall.service.impl; import com.alibaba.fastjson.JSON; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; +import com.iformall.common.ErrorCode; import com.iformall.common.ResultData; import com.iformall.domain.dto.WxCUserBasicInfoDto; import com.iformall.domain.po.*; @@ -78,1614 +79,2073 @@ public class WxChartServiceImpl implements WxChartDataService { } //出租率 - HashMap datamap = new HashMap<>(); if (chart.equals(EnumChart.CZL.getCode())) { - WxShop wxShop = new WxShop(); - wxShop.setTenantId(tenantId); - wxShop.setStatus(EnumShopStatus.RENT.getCode()); - List yczlist = wxShopMapper.findList(wxShop); - wxShop.setStatus(EnumShopStatus.NOT_RENT.getCode()); - List wczlist = wxShopMapper.findList(wxShop); - //出租与未出租 - int yczsize = yczlist.size(); - int wczsize = wczlist.size(); - int size = yczsize + wczsize; - if (size == 0) { - datamap.put("yczsl", 0); - datamap.put("wczsl", 0); - datamap.put("yczl", 0); - datamap.put("wczl", 0); - } else { - datamap.put("yczsl", yczsize); - datamap.put("wczsl", wczsize); - double yczld = ((double) yczsize / size) * 100; - double dczl = new BigDecimal(yczld).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); - double wczld = ((double) wczsize / size) * 100; - double wczl = new BigDecimal(wczld).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); - datamap.put("yczl", dczl); - datamap.put("wczl", wczl); - } - return new ResultData(datamap); + return getRentRate(tenantId); } //租金收缴率 if (chart.equals(EnumChart.ZJSJL.getCode())) { - //租金 - Map params = new HashMap<>(); - params.put("tenantId", tenantId); - params.put("startdate", startdate + " 00:00:00"); - params.put("enddate", enddate + " 23:59:59"); - Map payinfo = wxBillRentMapper.queryPayInfo(params); - if (payinfo != null) { - BigDecimal receivepay = (BigDecimal) payinfo.get("receivepay"); - BigDecimal pay = (BigDecimal) payinfo.get("pay"); - if (receivepay.doubleValue() > 0) { - BigDecimal divide = pay.divide(receivepay, 2, BigDecimal.ROUND_HALF_UP); - double zjcjl = divide.multiply(new BigDecimal(100)).doubleValue(); - datamap.put("ysje", receivepay); - datamap.put("ssje", pay); - datamap.put("zjsjl", zjcjl); - } else { - datamap.put("ysje", 0); - datamap.put("ssje", 0); - datamap.put("zjsjl", 0); - } - } else { - datamap.put("ysje", 0); - datamap.put("ssje", 0); - datamap.put("zjsjl", 0); - } - return new ResultData(datamap); + return getRentMoneyRate(tenantId, startdate, enddate); } //昨日报单率 if (chart.equals(EnumChart.ZRBDL.getCode())) { - WxMerchant wxMerchant = new WxMerchant(); - wxMerchant.setTenantId(tenantId); - wxMerchant.setStatus(1); - List merchants = wxMerchantMapper.findList(wxMerchant); - WxMerchantTradeDaily wxMerchantTradeDaily = new WxMerchantTradeDaily(); - wxMerchantTradeDaily.setTenantId(tenantId); - String reportdate = DateUtils.getTimeBefore(1, new Date()); - wxMerchantTradeDaily.setReportDate(reportdate); - List tradelist = wxMerchantTradeDailyMapper.findList(wxMerchantTradeDaily); - int merchantsize = merchants.size(); - int tradesize = tradelist.size(); - if (merchantsize > 0 && tradesize > 0) { - double shsbld = ((double) tradesize / merchantsize) * 100; - double shsbl = new BigDecimal(shsbld).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); - datamap.put("shsbl", shsbl); - } else { - datamap.put("shsbl", 0); - } - int shsbjg = tradelist.stream().mapToInt(WxMerchantTradeDaily::getTradeAmt).sum(); - datamap.put("shsbjg", shsbjg); - return new ResultData(datamap); + return getYesterdayTradeRate(tenantId); } //车流数据 if (chart.equals(EnumChart.CLSJ.getCode())) { - HashMap params = new HashMap<>(); - params.put("tenantId", tenantId); - params.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PARK_OUT.getCode()); - startdate = DateUtils.getTimeBefore(30, new Date()); - String systemTime = DateUtils.getSystemTime("yyyy-MM-dd"); - - List tjTimeList = DateUtils.getTjTimeList(startdate, systemTime, "0"); - - params.put("startdate", startdate + " 00:00:00"); - params.put("enddate", systemTime + " 23:59:59"); - - List> historylist = wxCarCmdLogMapper.queryHistory(params); - - Map collect = historylist.stream().collect(Collectors.toMap(m -> { - return m.get("create_date"); - }, m -> { - return m.get("carcount"); - })); - - Map historymap = new LinkedHashMap<>(); - for (String date : tjTimeList) { - Object o = collect.get(date); - if (o == null) { - historymap.put(date.substring(5).replace("-", "/"), 0L); - } else { - historymap.put(date.substring(5).replace("-", "/"), o); - } - } - datamap.put("history", historymap); - return new ResultData(datamap); + return getCarMonthly(tenantId); } //券交易数据 if (chart.equals(EnumChart.QJYSJ.getCode())) { - //couponData - HashMap params = new HashMap<>(); - params.put("tenantId", tenantId); - params.put("startTime", addDay(-30)); - params.put("endTime", addDay(1)); - List couponDatalist = wxCouponOrderMapper.couponDataMap(params); - //查询券领取人数 - startdate = DateUtils.getTimeBefore(30, new Date()); - enddate = DateUtils.getTimeBefore(1, new Date()); - List tjTimeList = DateUtils.getTjTimeList(startdate, enddate, "0"); - List tjList = tjTimeList.stream().map(d -> d.substring(5).replace("-", "/")).collect(Collectors.toList()); - List couponTempDatalist = new LinkedList<>(); - for (String tj : tjList) { - Optional first = couponDatalist.stream().filter(c -> c.getCreateTime().equals(tj)).findFirst(); - if (!first.isPresent()) { - MarkingCouponDataReportVo markingCouponDataReportVo = new MarkingCouponDataReportVo(); - markingCouponDataReportVo.setCreateTime(tj); - markingCouponDataReportVo.setCouponCount(0); - markingCouponDataReportVo.setCouponUserCount(0); - markingCouponDataReportVo.setVerifyCount(0); - markingCouponDataReportVo.setVerifyUserCount(0); - couponTempDatalist.add(markingCouponDataReportVo); - continue; - } - couponTempDatalist.add(first.get()); - } - datamap.put("couponDataMap", couponTempDatalist); - return new ResultData(datamap); + return getCouponSaleAnalysis(tenantId); } //活跃用户数据 if (chart.equals(EnumChart.HYYHSJ.getCode())) { - HashMap params = new HashMap<>(); - Calendar c = Calendar.getInstance(); - c.add(Calendar.DAY_OF_YEAR, -1); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - Date endTime = c.getTime(); - c.add(Calendar.DAY_OF_YEAR, -30); - Date startTime = c.getTime(); - params.put("startTime", startTime); - params.put("endTime", endTime); - params.put("tenantId", tenantId); - List list = wxUserVisitMapper.touchUsersReportList(params); - Map dateMap = new HashMap<>(); - for (TouchUsersReportVo vo : list) { - dateMap.put(vo.getxTime(), vo); - } - List monthVos = new ArrayList<>();//每月uv - for (int i = 29, sortNum = 0; i >= 0; i--) { - c.clear(); - c.setTime(endTime); - c.add(Calendar.DAY_OF_YEAR, -i); - String dayStr = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); - UserStructureVo vo = new UserStructureVo(); - vo.setName(new SimpleDateFormat("MM/dd").format(c.getTime())); - vo.setSortNum(sortNum++); - if (dateMap.get(dayStr) != null) { - TouchUsersReportVo rv = dateMap.get(dayStr); - Long l = new Long((long) rv.getUv()); - vo.setCount(l); - } else { - vo.setCount(0); - } - monthVos.add(vo); - } - datamap.put("monthVos", monthVos);//月活跃数列表 - return new ResultData(datamap); + // TODO getActiveMemberAnalysis + return getActiveMemberTrade(tenantId); } //销售数据 if (chart.equals(EnumChart.XSSJ.getCode())) { - Calendar c = Calendar.getInstance(); - Date sTime = c.getTime(); - c.add(Calendar.DAY_OF_YEAR, 1); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - Date eTime = c.getTime();//明天0点 - c.add(Calendar.DAY_OF_YEAR, -30);//三十天前 - List datas = wxCouponOrderMapper.queryPriceTotalGroup(tenantId, sTime, eTime); - List monthVos = new ArrayList<>();//周消费金额 - Map dataMap = new HashMap<>(); - for (CUserDateAmountVo v : datas) { - dataMap.put(v.getxTime(), v.getPrice()); - } - for (int i = 29, sortNum = 0; i >= 0; i--) { - c.clear(); - c.setTime(sTime); - c.add(Calendar.DAY_OF_YEAR, -i); - String dateStr = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); - UserStructureVo vo = new UserStructureVo(); - vo.setName(new SimpleDateFormat("MM/dd").format(c.getTime())); - vo.setSortNum(sortNum++); - if (datamap.get(dateStr) != null) { - int price = dataMap.get(dateStr); - vo.setPrice(price); - } else { - vo.setPrice(0); - } - monthVos.add(vo); - } - datamap.put("monthVos", monthVos);//一月金额列表 - return new ResultData(datamap); + return getSaleAnalysis(tenantId); } //解单数据 if (chart.equals(EnumChart.JDSJ.getCode())) { - WxMerchantTradeDaily wxMerchantTradeDaily = new WxMerchantTradeDaily(); - wxMerchantTradeDaily.setTenantId(tenantId); - - List recordList = wxMerchantTradeDailyMapper.findTotalListOfMonth(wxMerchantTradeDaily); - Map recordMap = recordList.stream().collect(Collectors.toMap(WxMerchantTradeDaily::getReportDate, r -> r)); - - List tradeList = new ArrayList<>(); - Calendar cal = Calendar.getInstance(); - SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat fmtv = new SimpleDateFormat("MM/dd"); - cal.setTime(new Date()); - for (int i = 0; i < 30; i++) { - cal.add(Calendar.DAY_OF_YEAR, -1); - WxMerchantTradeDaily trade = recordMap.get(fmt.format(cal.getTime())); - if (trade != null) { - trade.setReportDate(fmtv.format(cal.getTime())); - tradeList.add(trade); - } else { - trade = new WxMerchantTradeDaily(); - trade.setTradeAmt(0); - trade.setReportDate(fmtv.format(cal.getTime())); - tradeList.add(trade); - } - } - Collections.reverse(tradeList); - return new ResultData(tradeList); - } - //今日场内车流量 - if (chart.equals(EnumChart.JRCNCLL.getCode())) { - HashMap params = new HashMap<>(); - params.put("tenantId", tenantId); - params.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PARK_OUT.getCode()); - startdate = DateUtils.getTimeBefore(7, new Date()); - String systemTime = DateUtils.getSystemTime("yyyy-MM-dd"); - List tjTimeList = DateUtils.getTjTimeList(startdate, systemTime, "0"); - params.put("startdate", startdate + " 00:00:00"); - params.put("enddate", systemTime + " 23:59:59"); - List> historylist = wxCarCmdLogMapper.queryHistory(params); - Map collect = historylist.stream().collect(Collectors.toMap(m -> { - return m.get("create_date"); - }, m -> { - return m.get("carcount"); - })); - Map historymap = new LinkedHashMap<>(); - for (String date : tjTimeList) { - Object o = collect.get(date); - if (o == null) { - historymap.put(date.substring(5).replace("-", "/"), 0L); - } else { - historymap.put(date.substring(5).replace("-", "/"), o); - } - } - datamap.put("history", historymap); - //今日车流量 - long todaycar = (long) historymap.get(DateUtils.getSystemTime("MM/dd")); - datamap.put("todaycar", todaycar); - //环比 - String yesterday = DateUtils.getTimeBefore(1, new Date()); - long yesterdaycar = (long) historymap.get(yesterday.substring(5).replace("-", "/")); - if (yesterdaycar > 0) { - double hbd = (double) (todaycar - yesterdaycar) / yesterdaycar * 100; - double hb = new BigDecimal(hbd).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); - datamap.put("hb", hb + "%"); - } else { - datamap.put("hb", "--"); - } - //上周同期 - String lastweek = DateUtils.getTimeBefore(7, new Date()); - long last = (long) historymap.get(lastweek.substring(5).replace("-", "/")); - if (last > 0) { - double lasthbd = (double) (todaycar - last) / last * 100; - double lasthb = new BigDecimal(lasthbd).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); - datamap.put("lasthb", lasthb + "%"); - } else { - datamap.put("lasthb", "--"); - } - return new ResultData(datamap); - + return getMerchantTradeMonthly(tenantId); } + + ///// --- 车流 -- START //今日已绑车牌量 if (chart.equals(EnumChart.JRYBCPL.getCode())) { - String yesterday = DateUtils.getTimeBefore(1, new Date()); - String lastweek = DateUtils.getTimeBefore(7, new Date()); - //绑定车牌 - Map carParams = new HashMap<>(); - carParams.put("tenantId", tenantId); - carParams.put("startdate", DateUtils.getSystemTime("yyyy-MM-dd 00:00:00")); - carParams.put("enddate", DateUtils.getSystemTime("yyyy-MM-dd HH:mm:ss")); - long todaybindcar = wxCUserCarMapper.queryCarCount(carParams); - carParams.put("startdate", yesterday + " 00:00:00"); - carParams.put("enddate", yesterday + " 23:59:59"); - long yesterdaybindcar = wxCUserCarMapper.queryCarCount(carParams); - carParams.put("startdate", lastweek + " 00:00:00"); - carParams.put("enddate", lastweek + " 23:59:59"); - long lastweekbindcar = wxCUserCarMapper.queryCarCount(carParams); - datamap.put("todaybindcar", todaybindcar); - if (yesterdaybindcar > 0) { - double yesterdaybinddhb = (double) (todaybindcar - yesterdaybindcar) / yesterdaybindcar * 100; - double yesterdaybindhb = new BigDecimal(yesterdaybinddhb).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); - datamap.put("yesterdaybindhb", yesterdaybindhb + "%"); - } else { - datamap.put("yesterdaybindhb", "--"); - } - if (lastweekbindcar > 0) { - double lastweekbinddhb = (double) (todaybindcar - lastweekbindcar) / lastweekbindcar * 100; - double lastweekbindhb = new BigDecimal(lastweekbinddhb).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); - datamap.put("lastweekbindhb", lastweekbindhb + "%"); - } else { - datamap.put("lastweekbindhb", "--"); - } - return new ResultData(datamap); + return getBindCarAnalysis(tenantId); } //实时车流量 if (chart.equals(EnumChart.SSCLL.getCode())) { - String systemTime = DateUtils.getSystemTime("yyyy-MM-dd"); - String yesterday = DateUtils.getTimeBefore(1, new Date()); - String lastweek = DateUtils.getTimeBefore(7, new Date()); - HashMap params = new HashMap<>(); - params.put("tenantId", tenantId); - params.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PARK_OUT.getCode()); - params.put("startdate", systemTime + " 05:00:00"); - params.put("enddate", DateUtils.getSystemTime("yyyy-MM-dd HH:mm:ss")); - List> todayCarlist = wxCarCmdLogMapper.queryTodayCar(params); - Map todaycollect = todayCarlist.stream().collect(Collectors.toMap(m -> { - return m.get("create_time"); - }, m -> { - return m.get("carcount"); - })); - Calendar instance = Calendar.getInstance(); - instance.add(Calendar.HOUR_OF_DAY, 1); - int hour = instance.get(Calendar.HOUR_OF_DAY); - TreeMap hourMap = new TreeMap<>(); - int startHour = 6; - int endHour = 24; - for (int i = startHour; i < endHour; i++) { - if (i <= hour) { - hourMap.put(i < 10 ? "0" + i + ":00" : i + ":00", 0); - } else { - hourMap.put(i < 10 ? "0" + i + ":00" : i + ":00", ""); - } - } - hourMap.putAll(todaycollect); - datamap.put("todaycardata", hourMap); - params.put("startdate", yesterday + " 05:00:00"); - params.put("enddate", yesterday + " 22:59:59"); - List> yesterdayCarlist = wxCarCmdLogMapper.queryTodayCar(params); - Map yesterdaycollect = yesterdayCarlist.stream().collect(Collectors.toMap(m -> { - return m.get("create_time"); - }, m -> { - return m.get("carcount"); - })); - TreeMap yesterdaytreemap = getTimeTreeMap(); - yesterdaytreemap.putAll(yesterdaycollect); - - datamap.put("yesterdaycardata", yesterdaytreemap); - - params.put("startdate", lastweek + " 05:00:00"); - params.put("enddate", lastweek + " 22:59:59"); - List> lastdayCarlist = wxCarCmdLogMapper.queryTodayCar(params); - Map lastdaycollect = lastdayCarlist.stream().collect(Collectors.toMap(m -> { - return m.get("create_time"); - }, m -> { - return m.get("carcount"); - })); - TreeMap lastdaytreemap = getTimeTreeMap(); - lastdaytreemap.putAll(lastdaycollect); - datamap.put("lastdaycardata", lastdaytreemap); - - return new ResultData(datamap); - - } - //历史车流量 + return getCarDataCurrent(tenantId); + } + // 历史车流量+今日车流量 + 上周同期 if (chart.equals(EnumChart.LSCLL.getCode())) { - HashMap params = new HashMap<>(); - params.put("tenantId", tenantId); - params.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PARK_OUT.getCode()); - startdate = DateUtils.getTimeBefore(30, new Date()); - String systemTime = DateUtils.getSystemTime("yyyy-MM-dd"); - - List tjTimeList = DateUtils.getTjTimeList(startdate, systemTime, "0"); - - params.put("startdate", startdate + " 00:00:00"); - params.put("enddate", systemTime + " 23:59:59"); - - List> historylist = wxCarCmdLogMapper.queryHistory(params); - - Map collect = historylist.stream().collect(Collectors.toMap(m -> { - return m.get("create_date"); - }, m -> { - return m.get("carcount"); - })); - - Map historymap = new LinkedHashMap<>(); - for (String date : tjTimeList) { - Object o = collect.get(date); - if (o == null) { - historymap.put(date.substring(5).replace("-", "/"), 0L); - } else { - historymap.put(date.substring(5).replace("-", "/"), o); - } - } - datamap.put("history", historymap); - return new ResultData(datamap); - + return getCarHistoryAndTodayAndHB(tenantId); } //近一周新增停车会员 if (chart.equals(EnumChart.JYZXXZTCHY.getCode())) { - String oneWeekStartdate = DateUtils.getTimeBefore(7, new Date()); - String oneWeekEndDate = DateUtils.getTimeBefore(1, new Date()); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - WxCUserBasicInfoDto wxCUserBasicInfoDto = new WxCUserBasicInfoDto(); - wxCUserBasicInfoDto.setTenantId(tenantId); - try { - wxCUserBasicInfoDto.setStartTime(sdf.parse(oneWeekStartdate)); - wxCUserBasicInfoDto.setEndTime(sdf.parse(oneWeekEndDate)); - } catch (Exception e) { - e.printStackTrace(); - } - datamap.put("oneWeekNewCarUserCount", wxCUserCarMapper.countUser(wxCUserBasicInfoDto)); - //停车会员总数 - wxCUserBasicInfoDto = new WxCUserBasicInfoDto(); - wxCUserBasicInfoDto.setTenantId(tenantId); - datamap.put("newCarUserSumCount", wxCUserCarMapper.countUser(wxCUserBasicInfoDto)); - - return new ResultData(datamap); + return getCarNewMemberCount(tenantId); } //近一周线上缴费车辆 if (chart.equals(EnumChart.JYZXSJFCL.getCode())) { - HashMap weekParams = new HashMap<>(); - weekParams.put("tenantId", tenantId); - String oneWeekStartdate = DateUtils.getTimeBefore(7, new Date()); - String oneWeekEndDate = DateUtils.getTimeBefore(1, new Date()); - weekParams.put("startdate", oneWeekStartdate + " 00:00:00"); - weekParams.put("enddate", oneWeekEndDate + " 23:59:59"); - weekParams.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PAY_MANUAL.getCode()); - datamap.put("oneWeekCarPayCount", wxCarCmdLogMapper.queryWeekCarPayCount(weekParams)); - return new ResultData(datamap); + return getCarPayCarCountInWeek(tenantId); } //近一周线上缴费金额 if (chart.equals(EnumChart.JYZXSJFJE.getCode())) { - HashMap weekParams = new HashMap<>(); - weekParams.put("tenantId", tenantId); - String oneWeekStartdate = DateUtils.getTimeBefore(7, new Date()); - String oneWeekEndDate = DateUtils.getTimeBefore(1, new Date()); - weekParams.put("startdate", oneWeekStartdate + " 00:00:00"); - weekParams.put("enddate", oneWeekEndDate + " 23:59:59"); - weekParams.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PAY_MANUAL.getCode()); - List> weekCarPayHistoryList = wxCarCmdLogMapper.queryWeekCarPay(weekParams); - Map weekCollect = weekCarPayHistoryList.stream().collect(Collectors.toMap(m -> { - return (String) m.get("create_time"); - }, m -> { - return m.get("fee"); - })); - List days = DateUtils.getTjTimeList(oneWeekStartdate, oneWeekEndDate, "0"); - - TreeMap weekMap = new TreeMap<>(); - for (String date : days) { - weekMap.put(date.substring(5, date.length()).replace("-", "/"), "0"); - } - for (String key : weekCollect.keySet()) { - weekMap.put(key, weekCollect.get(key)); - } - datamap.put("oneWeekCarPayFeeCount", weekMap); - return new ResultData(datamap); + return getCarPayCountInWeek(tenantId); } //近一周新增会员数 if (chart.equals(EnumChart.JYZXZHYS.getCode())) { - HashMap weekParams = new HashMap<>(); - weekParams.put("tenantId", tenantId); - String oneWeekStartdate = DateUtils.getTimeBefore(7, new Date()); - String oneWeekEndDate = DateUtils.getTimeBefore(1, new Date()); - weekParams.put("startdate", oneWeekStartdate + " 00:00:00"); - weekParams.put("enddate", oneWeekEndDate + " 23:59:59"); - weekParams.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PAY_MANUAL.getCode()); - List> carCountHistory = wxCUserCarMapper.queryCarCountHistory(weekParams); - Map weekCarCollect = carCountHistory.stream().collect(Collectors.toMap(m -> { - return (String) m.get("create_time"); - }, m -> { - return m.get("count"); - })); - List days = DateUtils.getTjTimeList(oneWeekStartdate, oneWeekEndDate, "0"); - TreeMap weekCarMap = new TreeMap<>(); - for (String date : days) { - weekCarMap.put(date.substring(5, date.length()).replace("-", "/"), "0"); - } - for (String key : weekCarCollect.keySet()) { - weekCarMap.put(key, weekCarCollect.get(key)); - } - datamap.put("oneWeekNewCarUserHistory", weekCarMap); + return getCarNewMemberCountInWeek(tenantId); } + //// --- 车流 -- END //昨日触达用户 if (chart.equals(EnumChart.ZRCDYH.getCode())) { - //查询UV PV - HashMap params = new HashMap<>(); - params.put("tenantId", tenantId); - params.put("startTime", addDay(-1)); - params.put("endTime", addDay(1)); - List wxUserVisitList = wxUserVisitMapper.touchUsersReportData(params); - TouchUsersReportVo touchUsersReportVo = new TouchUsersReportVo(); - if (!wxUserVisitList.isEmpty()) { - touchUsersReportVo = wxUserVisitList.get(0); - } else { - touchUsersReportVo.setPv(0); - touchUsersReportVo.setUv(0); - touchUsersReportVo.setCouponCount(0); - touchUsersReportVo.setUserCount(0); - touchUsersReportVo.setVerifyCount(0); - touchUsersReportVo.setVerifyUserCount(0); - touchUsersReportVo.setxTime(DateUtils.getSystemTime("MM/dd")); - } - datamap.put("yesterday", touchUsersReportVo); - return new ResultData(datamap); + return getTodayTouchUser(tenantId); } //今日券交易数据 if (chart.equals(EnumChart.JRQJYSJ.getCode())) { - //今日领取券数 - //查询coupon order表 - int todayCouponCount = wxCouponOrderMapper.findCountByDateLimit(tenantId, addDay(0), addDay(1)); - int yesterdayCount = wxCouponOrderMapper.findCountByDateLimit(tenantId, addDay(-1), addDay(0)); - int lastWeekCount = wxCouponOrderMapper.findCountByDateLimit(tenantId, addDay(-7), addDay(-6)); - NumberFormat nf = NumberFormat.getPercentInstance(); - nf.setMinimumFractionDigits(2);//控制保留小数点后几位,2:表示保留2位小数点 - String couponUpDay = "--"; - if (yesterdayCount != 0) { - couponUpDay = nf.format((todayCouponCount - yesterdayCount) / (float) yesterdayCount); - } - String couponUpWeek = "--"; - if (lastWeekCount != 0) { - couponUpWeek = nf.format((todayCouponCount - lastWeekCount) / (float) lastWeekCount); - } - datamap.put("couponUpDay", couponUpDay);//比昨日提升 - datamap.put("couponUpWeek", couponUpWeek);//比上周提升 - datamap.put("todayCouponCount", todayCouponCount);//今日领取数 - return new ResultData(datamap); + return getTodayCouponCount(tenantId); } //今日场景营销 if (chart.equals(EnumChart.JRCJYX.getCode())) { - int todaySceneCount = wxCouponActionLogMapper.getCountByDateLimit(tenantId, addDay(0), addDay(1)); - int yesterdayCount = wxCouponActionLogMapper.getCountByDateLimit(tenantId, addDay(-1), addDay(0)); - int lastWeekCount = wxCouponActionLogMapper.getCountByDateLimit(tenantId, addDay(-7), addDay(-6)); - NumberFormat nf = NumberFormat.getPercentInstance(); - nf.setMinimumFractionDigits(2);//控制保留小数点后几位,2:表示保留2位小数点 - String sceneDownDay = "--"; - if (yesterdayCount != 0) { - sceneDownDay = nf.format((yesterdayCount - todaySceneCount) / (float) yesterdayCount); - } - String sceneUpWeek = "--"; - if (lastWeekCount != 0) { - sceneUpWeek = nf.format((todaySceneCount - lastWeekCount) / (float) lastWeekCount); - } - datamap.put("sceneDownDay", sceneDownDay);//比昨日下降 - datamap.put("sceneUpWeek", sceneUpWeek);//比上周提升 - datamap.put("todaySceneCount", todaySceneCount);//今日领取数 - return new ResultData(datamap); + return getSaleSceneCount(tenantId); } //触达用户数 if (chart.equals(EnumChart.CDYHS.getCode())) { - //查询UV PV - HashMap params = new HashMap<>(); - params.put("tenantId", tenantId); - params.put("startTime", addDay(-30)); - params.put("endTime", addDay(1)); - List wxUserVisitList = wxUserVisitMapper.touchUsersReportData(params); - startdate = DateUtils.getTimeBefore(30, new Date()); - enddate = DateUtils.getTimeBefore(1, new Date()); - List tjTimeList = DateUtils.getTjTimeList(startdate, enddate, "0"); - List tjList = tjTimeList.stream().map(d -> d.substring(5).replace("-", "/")).collect(Collectors.toList()); - List tempDatalist = new LinkedList<>(); - for (String tj : tjList) { - Optional first = wxUserVisitList.stream().filter(c -> c.getxTime().equals(tj)).findFirst(); - if (!first.isPresent()) { - TouchUsersReportVo touchUsersReportVo = new TouchUsersReportVo(); - touchUsersReportVo.setPv(0); - touchUsersReportVo.setUv(0); - touchUsersReportVo.setCouponCount(0); - touchUsersReportVo.setUserCount(0); - touchUsersReportVo.setVerifyCount(0); - touchUsersReportVo.setVerifyUserCount(0); - touchUsersReportVo.setxTime(tj); - tempDatalist.add(touchUsersReportVo); - continue; - } - tempDatalist.add(first.get()); - } - return new ResultData(tempDatalist); + return getTouchUserCount(tenantId); } //场景营销数据 if (chart.equals(EnumChart.CJYXSJ.getCode())) { - - HashMap params = new HashMap<>(); - params.put("tenantId", tenantId); - params.put("startTime", addDay(-30)); - params.put("endTime", addDay(1)); - //停车发券数 停车发券被核销数 核销发券数 核销发券被核销数 - List list = wxCouponActionLogMapper.sceneDataMap(params); - - //停车发券被核销数 - HashMap params1 = new HashMap<>(); - params1.put("tenantId", tenantId); - params1.put("startTime", addDay(-30)); - params1.put("endTime", addDay(1)); - params1.put("channelType", EnumCouponSendSendType.CAR_STOP.getCode());//停车 - List list1 = wxCouponActionLogMapper.sceneDataMapJoinCouponOrder(params1); - Map parkCountMap = list1.stream().collect(Collectors.toMap(MarkingSceneDataReportVo::getXTime, p -> p.getTempCount())); - - //核销发券被核销数 - HashMap params2 = new HashMap<>(); - params2.put("tenantId", tenantId); - params2.put("startTime", addDay(-30)); - params2.put("endTime", addDay(1)); - params2.put("channelType", EnumCouponSendSendType.COUPON_VERIFY.getCode());//核销 - List list2 = wxCouponActionLogMapper.sceneDataMapJoinCouponOrder(params2); - Map verifyCountMap = list2.stream().collect(Collectors.toMap(MarkingSceneDataReportVo::getXTime, p -> p.getTempCount())); - - // B端刷卡支付被核销数 - HashMap params3 = new HashMap<>(); - params3.put("tenantId", tenantId); - params3.put("startTime", addDay(-30)); - params3.put("endTime", addDay(1)); - params3.put("channelType", EnumCouponSendSendType.B_MICROPAY.getCode());//B端刷卡支付 - List list3 = wxCouponActionLogMapper.sceneDataMapJoinCouponOrder(params3); - Map microPayCountMap = list3.stream().collect(Collectors.toMap(MarkingSceneDataReportVo::getXTime, p -> p.getTempCount())); - - // 购买发券被核销数 - HashMap params4 = new HashMap<>(); - params3.put("tenantId", tenantId); - params3.put("startTime", addDay(-30)); - params3.put("endTime", addDay(1)); - params3.put("channelType", EnumCouponSendSendType.C_ORDER.getCode());//买券 - List list4 = wxCouponActionLogMapper.sceneDataMapJoinCouponOrder(params4); - Map OrderCountMap = list4.stream().collect(Collectors.toMap(MarkingSceneDataReportVo::getXTime, p -> p.getTempCount())); - - for (MarkingSceneDataReportVo vo : list) { - vo.setParkCount(parkCountMap.get(vo.getXTime()) == null ? 0 : parkCountMap.get(vo.getXTime())); - vo.setVerifyCount(verifyCountMap.get(vo.getXTime()) == null ? 0 : verifyCountMap.get(vo.getXTime())); - vo.setMicroPayCount(microPayCountMap.get(vo.getXTime()) == null ? 0 : microPayCountMap.get(vo.getXTime())); - vo.setOrderCount(OrderCountMap.get(vo.getXTime()) == null ? 0 : OrderCountMap.get(vo.getXTime())); - } - - startdate = DateUtils.getTimeBefore(30, new Date()); - enddate = DateUtils.getTimeBefore(1, new Date()); - List tjTimeList = DateUtils.getTjTimeList(startdate, enddate, "0"); - List tjList = tjTimeList.stream().map(d -> d.substring(5).replace("-", "/")).collect(Collectors.toList()); - List tempDatalist = new LinkedList<>(); - - for (String tj : tjList) { - Optional first = list.stream().filter(c -> c.getXTime().equals(tj)).findFirst(); - - MarkingSceneDataReportVo msdVo; - if (!first.isPresent()) { - msdVo = new MarkingSceneDataReportVo(); - msdVo.setXTime(tj); - msdVo.setCarCount(0); - msdVo.setParkCount(0); - msdVo.setVerifyCount(0); - msdVo.setMicroPayCount(0); - msdVo.setOrderCount(0); - msdVo.setTempCount(0); - msdVo.setParkSendCount(0); - msdVo.setVerifySendCount(0); - msdVo.setMicroPaySendCount(0); - msdVo.setOrderSendCount(0); - msdVo.setTotal(0); - } else { - msdVo = first.get(); - msdVo.setTotal(msdVo.getParkSendCount() + - msdVo.getVerifySendCount() + - msdVo.getMicroPaySendCount() + - msdVo.getOrderSendCount()); - } - tempDatalist.add(msdVo); - } - datamap.put("sceneDataMap", tempDatalist); - return new ResultData(datamap); + return getSceneData(tenantId); } //新增用户 if (chart.equals(EnumChart.XZYH.getCode())) { - WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); - dto.setTenantId(tenantId); - long allCount = wxCUserMapper.findCount(dto);//总数 - Calendar c = Calendar.getInstance(); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - Date today = c.getTime(); - c.setTime(today); - c.add(Calendar.DAY_OF_YEAR, -1); - dto.setStartTime(c.getTime()); - c.add(Calendar.DAY_OF_YEAR, 1); - dto.setEndTime(c.getTime()); - long todayCount = wxCUserMapper.findCount(dto); - datamap.put("allCount", allCount);//会员总数 - datamap.put("todayCount", todayCount);//今日新增会员数 - return new ResultData(datamap); + return getNewUserCount(tenantId); } //活跃用户 if (chart.equals(EnumChart.HYYH.getCode())) { - HashMap params = new HashMap<>(); - Calendar c = Calendar.getInstance(); - c.add(Calendar.DAY_OF_YEAR, -1); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - Date endTime = c.getTime(); - c.add(Calendar.DAY_OF_YEAR, -30); - Date startTime = c.getTime(); - params.put("startTime", startTime); - params.put("endTime", endTime); - params.put("tenantId", tenantId); - List list = wxUserVisitMapper.touchUsersReportList(params); - String yesterday = DateUtils.getTimeBefore(1, new Date()); - List collect = list.parallelStream().filter(x -> x.getxTime().equals(yesterday)).collect(Collectors.toList()); - int yesterdayCount = 0; - if (!collect.isEmpty()) { - yesterdayCount = collect.get(0).getUv(); - } - Integer thisMonthCount = list.parallelStream().collect(Collectors.summingInt(u -> u.getUv())); - datamap.put("yesterdayCount", yesterdayCount);//昨日活跃数 - datamap.put("thisMonthCount", thisMonthCount);//近一个月活跃数 - return new ResultData(datamap); + return getActiveMemberCount(tenantId); } //线上交易 if (chart.equals(EnumChart.XSJY.getCode())) { - Calendar c = Calendar.getInstance(); - c.add(Calendar.DAY_OF_YEAR, 1); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - Date endTime = c.getTime();//明天0点 - c.add(Calendar.DAY_OF_YEAR, -30); - Date startTime = c.getTime(); - int thisMonthCount = wxCouponOrderMapper.queryPriceTotal(tenantId, startTime, endTime);//月消费金额 - c.clear(); - c.add(Calendar.DAY_OF_YEAR, -1); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - startTime = c.getTime(); - int todayCount = wxCouponOrderMapper.queryPriceTotal(tenantId, startTime, endTime);//月消费金额 - DecimalFormat df = new DecimalFormat("0.00"); - datamap.put("todayCount", df.format((float) todayCount / 100));//今日消费金额 - String thisMonthCountStr = df.format((float) thisMonthCount / 100); - datamap.put("thisMonthCount", thisMonthCountStr);//近一个月消费金额数 - return new ResultData(datamap); + return getOnlineOrderCount(tenantId); } //近一周新增用户数 if (chart.equals(EnumChart.JYZXZYHS.getCode())) { - WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); - dto.setTenantId(tenantId); - Calendar c = Calendar.getInstance(); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - Date today = c.getTime(); - List weekVos = new ArrayList<>();//周会员数 - for (int i = 7, sortNum = 0; i >= 0; i--) { - c.clear(); - c.setTime(today); - c.add(Calendar.DAY_OF_YEAR, -i); - dto.setStartTime(c.getTime()); - c.add(Calendar.DAY_OF_YEAR, 1); - dto.setEndTime(c.getTime()); - long count = wxCUserMapper.findCount(dto); - UserStructureVo vo = new UserStructureVo(); - vo.setName(new SimpleDateFormat("MM/dd").format(dto.getStartTime())); - vo.setSortNum(sortNum++); - vo.setCount(count); - weekVos.add(vo); - } - datamap.put("weekVos", weekVos);//月用户增加数列表 - return new ResultData(datamap); - + return getNewMemberInWeek(tenantId); } //近一周活跃用户数 if (chart.equals(EnumChart.JYZHYYHS.getCode())) { - HashMap params = new HashMap<>(); - Calendar c = Calendar.getInstance(); - c.add(Calendar.DAY_OF_YEAR, -1); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - Date endTime = c.getTime(); - c.add(Calendar.DAY_OF_YEAR, -7); - Date startTime = c.getTime(); - params.put("startTime", startTime); - params.put("endTime", endTime); - params.put("tenantId", tenantId); - List list = wxUserVisitMapper.touchUsersReportList(params); - Map dateMap = new HashMap<>(); - for (TouchUsersReportVo vo : list) { - dateMap.put(vo.getxTime(), vo); - } - List weekVos = new ArrayList<>();//每周uv - for (int i = 7, sortNum = 0; i >= 0; i--) { - c.clear(); - c.setTime(endTime); - c.add(Calendar.DAY_OF_YEAR, -i); - String dayStr = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); - UserStructureVo vo = new UserStructureVo(); - vo.setName(new SimpleDateFormat("MM/dd").format(c.getTime())); - vo.setSortNum(sortNum++); - if (dateMap.get(dayStr) != null) { - TouchUsersReportVo rv = dateMap.get(dayStr); - Long l = new Long((long) rv.getUv()); - vo.setCount(l); - } else { - vo.setCount(0); - } - weekVos.add(vo); - } - datamap.put("weekVos", weekVos);//周活跃数列表 - return new ResultData(datamap); - + return getActiveMemberCountInWeek(tenantId); } //近一周线上交易金额(元) if (chart.equals(EnumChart.JYZXSJYJE.getCode())) { - Calendar c = Calendar.getInstance(); - Date today = c.getTime(); - c.add(Calendar.DAY_OF_YEAR, 1); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - Date endTime = c.getTime();//明天0点 - c.add(Calendar.DAY_OF_YEAR, -30);//三十天前 - c.clear(); - c.setTime(endTime); - Date eTime = c.getTime(); - c.add(Calendar.DAY_OF_YEAR, -7); - Date sTime = c.getTime(); - List datas = wxCouponOrderMapper.queryPriceTotalGroup(tenantId, sTime, eTime); - Map dataMap = new HashMap<>(); - for (CUserDateAmountVo v : datas) { - dataMap.put(v.getxTime(), v.getPrice()); - } - List weekVos = new ArrayList<>();//周消费金额 - for (int i = 7, sortNum = 0; i >= 0; i--) { - c.clear(); - c.setTime(today); - c.add(Calendar.DAY_OF_YEAR, -i); - String dateStr = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); - UserStructureVo vo = new UserStructureVo(); - vo.setName(new SimpleDateFormat("MM/dd").format(c.getTime())); - vo.setSortNum(sortNum++); - if (dataMap.get(dateStr) != null) { - int price = dataMap.get(dateStr); - vo.setPrice(price); - } else { - vo.setPrice(0); - } - weekVos.add(vo); - } - datamap.put("weekVos", weekVos);//一周金额列表 - return new ResultData(datamap); + return getWeekMoneyData(tenantId); } //新增用户趋势 if (chart.equals(EnumChart.XZYHQS.getCode())) { - WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); - dto.setTenantId(tenantId); - Calendar c = Calendar.getInstance(); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - Date today = c.getTime(); - List monthVos = new ArrayList<>();//会员数 - for (int i = 29, sortNum = 0; i >= 0; i--) { - c.clear(); - c.setTime(today); - c.add(Calendar.DAY_OF_YEAR, -i); - dto.setStartTime(c.getTime()); - c.add(Calendar.DAY_OF_YEAR, 1); - dto.setEndTime(c.getTime()); - long count = wxCUserMapper.findCount(dto); - UserStructureVo vo = new UserStructureVo(); - vo.setName(new SimpleDateFormat("MM/dd").format(dto.getStartTime())); - vo.setSortNum(sortNum++); - vo.setCount(count); - monthVos.add(vo); - } - datamap.put("monthVos", monthVos);//月用户增加数列表 - return new ResultData(datamap); + return getNewMemberTradeMonthly(tenantId); } //活跃用户趋势 if (chart.equals(EnumChart.HYYHQS.getCode())) { - HashMap params = new HashMap<>(); - Calendar c = Calendar.getInstance(); - c.add(Calendar.DAY_OF_YEAR, -1); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - Date endTime = c.getTime(); - c.add(Calendar.DAY_OF_YEAR, -30); - Date startTime = c.getTime(); - params.put("startTime", startTime); - params.put("endTime", endTime); - params.put("tenantId", tenantId); - List list = wxUserVisitMapper.touchUsersReportList(params); - Map dateMap = new HashMap<>(); - for (TouchUsersReportVo vo : list) { - dateMap.put(vo.getxTime(), vo); - } - List monthVos = new ArrayList<>();//每月uv - for (int i = 29, sortNum = 0; i >= 0; i--) { - c.clear(); - c.setTime(endTime); - c.add(Calendar.DAY_OF_YEAR, -i); - String dayStr = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); - UserStructureVo vo = new UserStructureVo(); - vo.setName(new SimpleDateFormat("MM/dd").format(c.getTime())); - vo.setSortNum(sortNum++); - if (dateMap.get(dayStr) != null) { - TouchUsersReportVo rv = dateMap.get(dayStr); - Long l = new Long((long) rv.getUv()); - vo.setCount(l); - } else { - vo.setCount(0); - } - monthVos.add(vo); - } - datamap.put("monthVos", monthVos);//月活跃数列表 - return new ResultData(datamap); + return getActiveMemberTrade(tenantId); } //线上交易趋势 if (chart.equals(EnumChart.XSJYQS.getCode())) { - Calendar c = Calendar.getInstance(); - Date today = c.getTime(); - c.add(Calendar.DAY_OF_YEAR, 1); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - Date eTime = c.getTime();//明天0点 - c.add(Calendar.DAY_OF_YEAR, -30);//三十天前 - Date sTime = c.getTime(); - List datas = wxCouponOrderMapper.queryPriceTotalGroup(tenantId, sTime, eTime); - Map dataMap = new HashMap<>(); - for (CUserDateAmountVo v : datas) { - dataMap.put(v.getxTime(), v.getPrice()); - } - List monthVos = new ArrayList<>(); - for (int i = 29, sortNum = 0; i >= 0; i--) { - c.clear(); - c.setTime(today); - c.add(Calendar.DAY_OF_YEAR, -i); - String dateStr = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); - UserStructureVo vo = new UserStructureVo(); - vo.setName(new SimpleDateFormat("MM/dd").format(c.getTime())); - vo.setSortNum(sortNum++); - if (dataMap.get(dateStr) != null) { - int price = dataMap.get(dateStr); - vo.setPrice(price); - } else { - vo.setPrice(0); - } - monthVos.add(vo); - } - datamap.put("monthVos", monthVos);//一月金额列表 - return new ResultData(datamap); + return getOnlineTrade(tenantId); } //微信用户总数 if (chart.equals(EnumChart.WXYHZS.getCode())) { - WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); - dto.setTenantId(tenantId); - //微信用户数据 - long wxallCount = wxCUserMapper.findCount(dto);//总量 - Calendar c = Calendar.getInstance(); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - Date today = c.getTime(); - dto.setStartTime(today); - dto.setEndTime(null); - long wxtodayCount = wxCUserMapper.findCount(dto);//今天新增 - datamap.put("wxallCount", wxallCount);//累计会员总数 - datamap.put("wxtodayCount", wxtodayCount);//今日新增会员数 - return new ResultData(datamap); + return getMemeberWechatTotal(tenantId); } //会员总数 if (chart.equals(EnumChart.HYZS.getCode())) { - WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); - dto.setTenantId(tenantId); - long allCount = wxCUserBasicInfoMapper.findCount(dto);//总量 - Calendar c = Calendar.getInstance(); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - Date today = c.getTime(); - dto.setStartTime(today); - dto.setEndTime(null); - long todayCount = wxCUserBasicInfoMapper.findCount(dto);//今天新增 - datamap.put("allCount", allCount);//累计会员总数 - datamap.put("todayCount", todayCount);//今日新增会员数 - return new ResultData(datamap); + return getMemberTotalCount(tenantId); } //微信用户累计趋势 if (chart.equals(EnumChart.WXYHLJQS.getCode())) { - final int daysBefore = 29; - WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); - dto.setTenantId(tenantId); - Calendar c = Calendar.getInstance(); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - Date today = c.getTime(); - List wxnewCountVos = new ArrayList<>();//每日新增会员数 - int j = 1; - for (int i = daysBefore; i >= 0; i--) { - c.clear(); - c.setTime(today); - c.add(Calendar.DAY_OF_YEAR, -i); - dto.setStartTime(c.getTime()); - c.add(Calendar.DAY_OF_YEAR, 1); - dto.setEndTime(c.getTime()); - long count = wxCUserMapper.findCount(dto); - UserStructureVo vo = new UserStructureVo(); - vo.setSortNum(j); - j++; - vo.setName(new SimpleDateFormat("MM/dd").format(dto.getStartTime())); - vo.setCount(count); - wxnewCountVos.add(vo); - } - List wxallCountVos = new ArrayList<>();//累计会员数 - c.clear(); - c.setTime(today); - c.add(Calendar.DAY_OF_YEAR, -daysBefore); - dto.setEndTime(c.getTime()); - dto.setStartTime(null); - long firstDay = wxCUserMapper.findCount(dto);//统计的第一天总数 - int i = 0; - long sumCount = 0; - for (UserStructureVo v : wxnewCountVos) { - UserStructureVo vo = new UserStructureVo(); - sumCount += v.getCount(); - vo.setCount(firstDay + sumCount); - vo.setName(v.getName()); - vo.setSortNum(i + 1); - wxallCountVos.add(vo); - i++; - } - datamap.put("wxallCountVos", wxallCountVos);//累计会员列表( 日期和数量list) - return new ResultData(datamap); + return getMemberWechatJoinTrade(tenantId); } //会员累计趋势 if (chart.equals(EnumChart.HYLJQS.getCode())) { - WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); - dto.setTenantId(tenantId); - final int daysBefore = 29; - Calendar c = Calendar.getInstance(); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - Date today = c.getTime(); - List newCountVos = new ArrayList<>();//每日新增会员数 - int j = 1; - for (int i = daysBefore; i >= 0; i--) { - c.clear(); - c.setTime(today); - c.add(Calendar.DAY_OF_YEAR, -i); - dto.setStartTime(c.getTime()); - c.add(Calendar.DAY_OF_YEAR, 1); - dto.setEndTime(c.getTime()); - long count = wxCUserBasicInfoMapper.findCount(dto); - UserStructureVo vo = new UserStructureVo(); - vo.setSortNum(j); - j++; - vo.setName(new SimpleDateFormat("MM/dd").format(dto.getStartTime())); - vo.setCount(count); - newCountVos.add(vo); - } - List allCountVos = new ArrayList<>();//累计会员数 - c.clear(); - c.setTime(today); - c.add(Calendar.DAY_OF_YEAR, -daysBefore); - dto.setEndTime(c.getTime()); - dto.setStartTime(null); - long firstDay = wxCUserBasicInfoMapper.findCount(dto);//统计的第一天总数 - int i = 0; - long sumCount = 0; - for (UserStructureVo v : newCountVos) { - UserStructureVo vo = new UserStructureVo(); - sumCount += v.getCount(); - vo.setCount(firstDay + sumCount); - vo.setName(v.getName()); - vo.setSortNum(i + 1); - allCountVos.add(vo); - i++; - } - datamap.put("allCountVos", allCountVos);//累计会员列表( 日期和数量list) - return new ResultData(datamap); - + return getMemberJoinTrade(tenantId); } //微信用户新增趋势 if (chart.equals(EnumChart.WXYHXZQS.getCode())) { - final int daysBefore = 29; - WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); - dto.setTenantId(tenantId); - Calendar c = Calendar.getInstance(); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - Date today = c.getTime(); - List wxnewCountVos = new ArrayList<>();//每日新增会员数 - int j = 1; - for (int i = daysBefore; i >= 0; i--) { - c.clear(); - c.setTime(today); - c.add(Calendar.DAY_OF_YEAR, -i); - dto.setStartTime(c.getTime()); - c.add(Calendar.DAY_OF_YEAR, 1); - dto.setEndTime(c.getTime()); - long count = wxCUserMapper.findCount(dto); - UserStructureVo vo = new UserStructureVo(); - vo.setSortNum(j); - j++; - vo.setName(new SimpleDateFormat("MM/dd").format(dto.getStartTime())); - vo.setCount(count); - wxnewCountVos.add(vo); - } - datamap.put("wxnewCountVos", wxnewCountVos);//新增会员列表(日期和数量list) - return new ResultData(datamap); + return getWechatMemberTrade(tenantId); } //会员新增趋势 if (chart.equals(EnumChart.HYXZQS.getCode())) { - WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); - dto.setTenantId(tenantId); - final int daysBefore = 29; - Calendar c = Calendar.getInstance(); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - Date today = c.getTime(); - List newCountVos = new ArrayList<>();//每日新增会员数 - int j = 1; - for (int i = daysBefore; i >= 0; i--) { - c.clear(); - c.setTime(today); - c.add(Calendar.DAY_OF_YEAR, -i); - dto.setStartTime(c.getTime()); - c.add(Calendar.DAY_OF_YEAR, 1); - dto.setEndTime(c.getTime()); - long count = wxCUserBasicInfoMapper.findCount(dto); - UserStructureVo vo = new UserStructureVo(); - vo.setSortNum(j); - j++; - vo.setName(new SimpleDateFormat("MM/dd").format(dto.getStartTime())); - vo.setCount(count); - newCountVos.add(vo); - } - datamap.put("newCountVos", newCountVos);//新增会员列表(日期和数量list) - return new ResultData(datamap); + return getNewMemberTrade(tenantId); } //拓客渠道 if (chart.equals(EnumChart.TKQD.getCode())) { - List channelStructureList = new ArrayList<>(); - WxCUser wxCUser = new WxCUser(); - wxCUser.setTenantId(tenantId); - List channels = wxUserChannelMapper.findDistinctChannel(); - for (WxUserChannel w : channels) { - WxUserChannel c = new WxUserChannel(); - c.setChannelName(w.getChannelName()); - PageInfo page = PageHelper.startPage(1, 1000).doSelectPageInfo(() -> wxUserChannelMapper.findList(c)); - if (page.getSize() > 0) { - List sceneList = new ArrayList<>(); - for (WxUserChannel uc : page.getList()) { - List scene = new ArrayList<>(); - scene.add(uc.getSceneAddress()); - wxCUser.setSceneList(scene); - sceneList.add(uc.getSceneAddress()); - } - wxCUser.setSceneList(sceneList); - WxUserChannel channelStructure = new WxUserChannel(); - channelStructure.setChannelName(w.getChannelName()); - channelStructure.setCount(wxCUserMapper.countByChannel(wxCUser)); - channelStructureList.add(channelStructure); - } - } - datamap.put("channelList", channelStructureList); - return new ResultData(datamap); + return getFromChannelAnalysis(tenantId); } //场景排名 if (chart.equals(EnumChart.CJPM.getCode())) { - List senceStructureList = new ArrayList<>(); - WxCUser wxCUser = new WxCUser(); - wxCUser.setTenantId(tenantId); - List channels = wxUserChannelMapper.findDistinctChannel(); - for (WxUserChannel w : channels) { - WxUserChannel c = new WxUserChannel(); - c.setChannelName(w.getChannelName()); - PageInfo page = PageHelper.startPage(1, 1000).doSelectPageInfo(() -> wxUserChannelMapper.findList(c)); - if (page.getSize() > 0) { - for (WxUserChannel uc : page.getList()) { - List scene = new ArrayList<>(); - scene.add(uc.getSceneAddress()); - wxCUser.setSceneList(scene); - WxUserChannel senceStructure = new WxUserChannel(); - senceStructure.setDescription(uc.getDescription()); - senceStructure.setCount(wxCUserMapper.countByChannel(wxCUser)); - senceStructureList.add(senceStructure); - } - } - } - Collections.sort(senceStructureList, (s1, s2) -> ((int) (s2.getCount() - s1.getCount()))); - datamap.put("senceList", senceStructureList.subList(0, 10)); - return new ResultData(datamap); + return getSceneAnalysis(tenantId); } //会员性别比例 if (chart.equals(EnumChart.HYXBBL.getCode())) { - WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); - dto.setTenantId(tenantId); - dto.setStartTime(DateUtils.stringToDate(startdate + " 00:00:00")); - dto.setEndTime(DateUtils.stringToDate(enddate + " 23:59:59")); - long all = wxCUserBasicInfoMapper.findCount(dto); - List vos = new ArrayList<>(); - Calendar c = Calendar.getInstance(); - for (EnumAgeInfo a : EnumAgeInfo.values()) { - c.clear(); - c.setTime(new Date()); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - long count = getCountByAge(a, c, dto); - vos.add(getVo(count, all, a.getDesc(), a.getSortNum())); - } - return new ResultData(datamap); + return getMemberSexRate(tenantId, startdate, enddate); } //会员绑定车牌率 if (chart.equals(EnumChart.HYBDCPL.getCode())) { - WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); - dto.setTenantId(tenantId); - dto.setStartTime(DateUtils.stringToDate(startdate + " 00:00:00")); - dto.setEndTime(DateUtils.stringToDate(enddate + " 23:59:59")); - long total = wxCUserBasicInfoMapper.findCount(dto); - long userCountWithCar = wxCUserCarMapper.countUser(dto); - Map userWithCar = new HashMap(); - userWithCar.put("title", "已绑定车牌"); - userWithCar.put("count", userCountWithCar); - long userCountWithoutCar = total - userCountWithCar; - Map userWithoutCar = new HashMap(); - userWithoutCar.put("title", "未绑定车牌"); - userWithoutCar.put("count", userCountWithoutCar); - NumberFormat nf = NumberFormat.getPercentInstance(); - nf.setMinimumFractionDigits(2); - if (userCountWithoutCar + userCountWithCar > 0) { - userWithCar.put("percentage", nf.format(userCountWithCar / new Double(userCountWithoutCar + userCountWithCar).doubleValue())); - userWithoutCar.put("percentage", nf.format(userCountWithoutCar / new Double(userCountWithoutCar + userCountWithCar).doubleValue())); - } else { - userWithCar.put("percentage", "--"); - userWithoutCar.put("percentage", "--"); - } - List list = new ArrayList<>(); - list.add(userWithCar); - list.add(userWithoutCar); - return new ResultData(list); + return getMemberBindCar(tenantId, startdate, enddate); } //会员年龄层次 if (chart.equals(EnumChart.HYNLCC.getCode())) { - WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); - dto.setTenantId(tenantId); - dto.setStartTime(DateUtils.stringToDate(startdate + " 00:00:00")); - dto.setEndTime(DateUtils.stringToDate(enddate + " 23:59:59")); - long all = wxCUserBasicInfoMapper.findCount(dto); - List vos = new ArrayList<>(); - Calendar c = Calendar.getInstance(); - for (EnumAgeInfo a : EnumAgeInfo.values()) { - c.clear(); - c.setTime(new Date()); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - long count = getCountByAge(a, c, dto); - vos.add(getVo(count, all, a.getDesc(), a.getSortNum())); - } - return new ResultData(datamap); - + return getMemberAgeAnalysis(tenantId, startdate, enddate); } //会员成长值 if (chart.equals(EnumChart.HYCZZ.getCode())) { - WxLevelConfig wxLevelConfig = new WxLevelConfig(); - wxLevelConfig.setTenantId(tenantId); - wxLevelConfig.setSortColumns(WxLevelConfig.Field.Points_ASC); - List levelList = wxLevelConfigMapper.findList(wxLevelConfig); - - for (int i = 0; i < levelList.size(); i++) { - - WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); - dto.setTenantId(tenantId); - dto.setStartTime(DateUtils.stringToDate(startdate + " 00:00:00")); - dto.setEndTime(DateUtils.stringToDate(enddate + " 23:59:59")); - if (i + 1 < levelList.size()) { - dto.setLevelStartScore(levelList.get(i).getPoints()); - dto.setLevelEndScore(levelList.get(i + 1).getPoints()); - } else { - dto.setLevelStartScore(levelList.get(i).getPoints()); - } - - long all = wxCUserBasicInfoMapper.findCountByScore(dto); - - levelList.get(i).setCount(all); - } - WxLevelConfig other = new WxLevelConfig(); - //没有等级的会员 - other.setLevel("无"); - WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); - other.setCount(wxCUserBasicInfoMapper.findCount(dto) - - levelList.stream().map(WxLevelConfig::getCount).reduce(Long::sum).orElse(0L)); - levelList.add(other); - return new ResultData(levelList); + return getMemberGrowthAnalysis(tenantId, startdate, enddate); } //会员手机品牌 if (chart.equals(EnumChart.HYSJPP.getCode())) { - WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); - dto.setTenantId(tenantId); - Date startTime = DateUtils.stringToDate(startdate + " 00:00:00"); - Date endTime = DateUtils.stringToDate(enddate + " 23:59:59"); - dto.setStartTime(startTime); - dto.setEndTime(endTime); - long total = wxCUserBasicInfoMapper.findCount(dto); - List tagList = new ArrayList<>(); - EnumTag[] tags = {EnumTag.ID_49, - EnumTag.ID_50, - EnumTag.ID_51, - EnumTag.ID_52, - EnumTag.ID_53, - EnumTag.ID_54}; - for (int i = 0; i < tags.length; i++) { - WxTags tag = new WxTags(); - tag.setName(tags[i].getMessage()); - tag.setCount(wxCUserTagsMapper.countUser(JSON.toJSONString(tags[i].getCode()), tenantId, startTime, endTime)); - tagList.add(tag); - total -= tag.getCount(); - } - - WxTags tag = new WxTags(); - tag.setName("暂未获取"); - tag.setCount(total); - tagList.add(tag); - return new ResultData(tagList); + return getMobileBrandAnalysis(tenantId, startdate, enddate); } //会员活跃度 if (chart.equals(EnumChart.HYHYD.getCode())) { - WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); - dto.setTenantId(tenantId); - Date startTime = DateUtils.stringToDate(startdate + " 00:00:00"); - Date endTime = DateUtils.stringToDate(enddate + " 23:59:59"); - dto.setStartTime(startTime); - dto.setEndTime(endTime); - long total = wxCUserBasicInfoMapper.findCount(dto); - List tagList = new ArrayList<>(); - EnumTag[] tags = { - EnumTag.ID_112, - EnumTag.ID_111, - EnumTag.ID_110 - }; - for (int i = 0; i < tags.length; i++) { - WxTags tag = new WxTags(); - tag.setName(tags[i].getMessage()); - tag.setCount(wxCUserTagsMapper.countUser(JSON.toJSONString(tags[i].getCode()), tenantId, startTime, endTime)); - tagList.add(tag); - total -= tag.getCount(); - } - WxTags tag = new WxTags(); - tag.setName("休眠"); - tag.setCount(total); - tagList.add(tag); - return new ResultData(tagList); + return getMemActivity(tenantId, startdate, enddate); } //卡营销数据 if (chart.equals(EnumChart.SALE_CARD.getCode())) { - WxCoupon wxCoupon = new WxCoupon(); - - //默认时间本月第一天,截止到当天 - if (StringUtils.isEmpty(paramsMap.get("startdate"))) { - Calendar c = Calendar.getInstance(); - c.add(Calendar.MONTH, 0); - c.set(Calendar.DAY_OF_MONTH,1); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - wxCoupon.setStartdate(c.getTime()); - }else{ - Date startTime = DateUtils.stringToDate(startdate); - wxCoupon.setStartdate(startTime); - } - if (StringUtils.isEmpty(paramsMap.get("enddate"))) { - wxCoupon.setEnddate(new Date()); - }else{ - Date endTime = DateUtils.stringToDate(enddate, "yyyy-MM-dd HH:mm:ss"); - wxCoupon.setEnddate(endTime); - } + return getSaleCardAnalysis(paramsMap, startdate, enddate); + } - Map result = new HashedMap(); - List saleMoneyList = wxCouponService.findSaleMoneyByDate(wxCoupon); - List paymentList = wxCouponService.findPaymentByDate(wxCoupon); - Map saleMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); - Map payMentMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); + //券营销数据 + if (chart.equals(EnumChart.SALE_COUPON.getCode())) { + return getSaleCouponAnalysis(paramsMap, startdate, enddate); + } - for (WxCouponStatisVo coupon:saleMoneyList){ - saleMap.put(coupon.getXtime(),coupon.getXcount()); - } - for (WxCouponStatisVo coupon:paymentList){ - payMentMap.put(coupon.getXtime(),coupon.getXcount()); - } - result.put("saleHistory",saleMap); - result.put("paymentHistory",payMentMap); - result.put("saleCardCount",wxCouponService.findSaleCardCount(wxCoupon)); - result.put("tranCount",wxCouponService.findTranCardCount(wxCoupon)); - result.put("subsidyCount",wxCouponService.findSubsidyMoney(wxCoupon)); - return new ResultData(result); + //砍价营销数据 + if (chart.equals(EnumChart.SALE_PRESS.getCode())) { + return getSalePressAnalysis(paramsMap, tenantId, startdate, enddate); } - //卷营销数据 - if (chart.equals(EnumChart.SALE_COUPON.getCode())) { - WxCoupon wxCoupon = new WxCoupon(); - Map result = new HashedMap(); - - //默认时间本月第一天,截止到当天 - if (StringUtils.isEmpty(paramsMap.get("startdate"))) { - Calendar c = Calendar.getInstance(); - c.add(Calendar.MONTH, 0); - c.set(Calendar.DAY_OF_MONTH,1); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - wxCoupon.setStartdate(c.getTime()); - }else{ - Date startTime = DateUtils.stringToDate(startdate); - wxCoupon.setStartdate(startTime); - } - if (StringUtils.isEmpty(paramsMap.get("enddate"))) { - wxCoupon.setEnddate(new Date()); - }else{ - Date endTime = DateUtils.stringToDate(enddate, "yyyy-MM-dd HH:mm:ss"); - wxCoupon.setEnddate(endTime); + //拼团营销数据 + if (chart.equals(EnumChart.SALE_GROUP.getCode())) { + return getSaleGroupAnalysis(paramsMap, tenantId, startdate); + } + + return new ResultData(ErrorCode.REPORT_TYPE_UNKNOWN); + } + + /** + * 解单数据 - 月 + * @param tenantId + * @return + */ + private ResultData getMerchantTradeMonthly(String tenantId) { + WxMerchantTradeDaily wxMerchantTradeDaily = new WxMerchantTradeDaily(); + wxMerchantTradeDaily.setTenantId(tenantId); + + List recordList = wxMerchantTradeDailyMapper.findTotalListOfMonth(wxMerchantTradeDaily); + Map recordMap = recordList.stream().collect(Collectors.toMap(WxMerchantTradeDaily::getReportDate, r -> r)); + + List tradeList = new ArrayList<>(); + Calendar cal = Calendar.getInstance(); + SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat fmtv = new SimpleDateFormat("MM/dd"); + cal.setTime(new Date()); + for (int i = 0; i < 30; i++) { + cal.add(Calendar.DAY_OF_YEAR, -1); + WxMerchantTradeDaily trade = recordMap.get(fmt.format(cal.getTime())); + if (trade != null) { + trade.setReportDate(fmtv.format(cal.getTime())); + tradeList.add(trade); + } else { + trade = new WxMerchantTradeDaily(); + trade.setTradeAmt(0); + trade.setReportDate(fmtv.format(cal.getTime())); + tradeList.add(trade); } - List orderCountList = wxCouponService.findCouponOrderCount(wxCoupon); - List paymentCountList = wxCouponService.findCouponPaymentCount(wxCoupon); - List priceCouponSaleCountList = wxCouponService.priceCouponSaleCount(wxCoupon); - List priceCouponPaymentCountList = wxCouponService.priceCouponPaymentCount(wxCoupon); - - Map orderCountMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); - Map paymentCountMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); - Map priceCouponSaleCountMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); - Map priceCouponPaymentCountMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); - - for (WxCouponStatisVo coupon:orderCountList){ - orderCountMap.put(coupon.getXtime(),coupon.getXcount()); + } + Collections.reverse(tradeList); + return new ResultData(tradeList); + } + + /** + * 今日已绑车牌量 + * @param tenantId + * @return + */ + private ResultData getBindCarAnalysis(String tenantId) { + HashMap datamap = new HashMap<>(); + String yesterday = DateUtils.getTimeBefore(1, new Date()); + String lastweek = DateUtils.getTimeBefore(7, new Date()); + //绑定车牌 + Map carParams = new HashMap<>(); + carParams.put("tenantId", tenantId); + carParams.put("startdate", DateUtils.getSystemTime("yyyy-MM-dd 00:00:00")); + carParams.put("enddate", DateUtils.getSystemTime("yyyy-MM-dd HH:mm:ss")); + long todaybindcar = wxCUserCarMapper.queryCarCount(carParams); + carParams.put("startdate", yesterday + " 00:00:00"); + carParams.put("enddate", yesterday + " 23:59:59"); + long yesterdaybindcar = wxCUserCarMapper.queryCarCount(carParams); + carParams.put("startdate", lastweek + " 00:00:00"); + carParams.put("enddate", lastweek + " 23:59:59"); + long lastweekbindcar = wxCUserCarMapper.queryCarCount(carParams); + datamap.put("todaybindcar", todaybindcar); + if (yesterdaybindcar > 0) { + double yesterdaybinddhb = (double) (todaybindcar - yesterdaybindcar) / yesterdaybindcar * 100; + double yesterdaybindhb = new BigDecimal(yesterdaybinddhb).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + datamap.put("yesterdaybindhb", yesterdaybindhb + "%"); + } else { + datamap.put("yesterdaybindhb", "--"); + } + if (lastweekbindcar > 0) { + double lastweekbinddhb = (double) (todaybindcar - lastweekbindcar) / lastweekbindcar * 100; + double lastweekbindhb = new BigDecimal(lastweekbinddhb).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + datamap.put("lastweekbindhb", lastweekbindhb + "%"); + } else { + datamap.put("lastweekbindhb", "--"); + } + return new ResultData(datamap); + } + + /** + * 实时车流量 + * @param tenantId + * @return + */ + private ResultData getCarDataCurrent(String tenantId) { + HashMap datamap = new HashMap<>(); + String systemTime = DateUtils.getSystemTime("yyyy-MM-dd"); + String yesterday = DateUtils.getTimeBefore(1, new Date()); + String lastweek = DateUtils.getTimeBefore(7, new Date()); + HashMap params = new HashMap<>(); + params.put("tenantId", tenantId); + params.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PARK_IN.getCode()); + params.put("startdate", systemTime + " 05:00:00"); + params.put("enddate", DateUtils.getSystemTime("yyyy-MM-dd HH:mm:ss")); + List> todayCarlist = wxCarCmdLogMapper.queryTodayCar(params); + Map todaycollect = todayCarlist.stream().collect(Collectors.toMap(m -> { + return m.get("create_time"); + }, m -> { + return m.get("carcount"); + })); + List hourList = new ArrayList<>(); + Calendar instance = Calendar.getInstance(); + instance.add(Calendar.HOUR_OF_DAY, 1); + int hour = instance.get(Calendar.HOUR_OF_DAY); + int startHour = 6; + int endHour = 24; + for (int i = startHour; i < endHour; i++) { + hourList.add(i < 10 ? "0" + i + ":00" : i + ":00"); + } + List todayCarList = new ArrayList<>(); + for (int i = startHour; i < endHour; i++) { + if(i> yesterdayCarlist = wxCarCmdLogMapper.queryTodayCar(params); + Map yesterdaycollect = yesterdayCarlist.stream().collect(Collectors.toMap(m -> { + return m.get("create_time"); + }, m -> { + return m.get("carcount"); + })); + List yesterdayCarList = new ArrayList<>(); + for (int i = startHour; i < endHour; i++) { + yesterdayCarList.add(yesterdaycollect.get((Object) hourList.get(i-startHour))); + } + datamap.put("yesterdaycardata", yesterdayCarList); + + params.put("startdate", lastweek + " 05:00:00"); + params.put("enddate", lastweek + " 22:59:59"); + List> lastdayCarlist = wxCarCmdLogMapper.queryTodayCar(params); + Map lastweekdaycollect = lastdayCarlist.stream().collect(Collectors.toMap(m -> { + return m.get("create_time"); + }, m -> { + return m.get("carcount"); + })); + List lastweekdayCarList = new ArrayList<>(); + for (int i = startHour; i < endHour; i++) { + lastweekdayCarList.add(lastweekdaycollect.get((Object) hourList.get(i-startHour))); + } + datamap.put("lastdaycardata", lastweekdayCarList); + + return new ResultData(datamap); + } + + /** + * 历史车流量 + 今日车流量 + 上周同期 + * @param tenantId + * @return + */ + private ResultData getCarHistoryAndTodayAndHB(String tenantId) { + String startdate; + HashMap datamap = new HashMap<>(); + HashMap params = new HashMap<>(); + params.put("tenantId", tenantId); + params.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PARK_IN.getCode()); + startdate = DateUtils.getTimeBefore(30, new Date()); + String systemTime = DateUtils.getSystemTime("yyyy-MM-dd"); + + List tjTimeList = DateUtils.getTjTimeList(startdate, systemTime, "0"); + + params.put("startdate", startdate + " 00:00:00"); + params.put("enddate", systemTime + " 23:59:59"); + + List> historylist = wxCarCmdLogMapper.queryHistory(params); + + Map collect = historylist.stream().collect(Collectors.toMap(m -> { + return m.get("create_date"); + }, m -> { + return m.get("carcount"); + })); + + List timeList = new ArrayList<>(); + List valList = new ArrayList<>(); + for (String date : tjTimeList) { + Object o = collect.get(date); + timeList.add(date.substring(5).replace("-", "/")); + if (o == null) { + valList.add(0L); + } else { + valList.add(o); } - for (WxCouponStatisVo coupon:priceCouponSaleCountList){ - priceCouponSaleCountMap.put(coupon.getXtime(),coupon.getXcount()); + } + Map map = new HashMap(); + map.put("index", timeList); + map.put("val", valList); + datamap.put("history", map); + + //今日车流量 + long todaycar = ((Long) valList.get(valList.size()-1)).longValue(); + datamap.put("todaycar", todaycar); + //环比 + long yesterdaycar = (long) ((Long) valList.get(valList.size()-2)).longValue(); + if (yesterdaycar > 0) { + double hbd = (double) (todaycar - yesterdaycar) / yesterdaycar * 100; + double hb = new BigDecimal(hbd).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + datamap.put("hb", hb + "%"); + } else { + datamap.put("hb", "--"); + } + //上周同期 + long lastweekcar = ((Long) valList.get(valList.size()-8)).longValue(); + if (lastweekcar > 0) { + double lasthbd = (double) (todaycar - lastweekcar) / lastweekcar * 100; + double lasthb = new BigDecimal(lasthbd).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + datamap.put("lasthb", lasthb + "%"); + } else { + datamap.put("lasthb", "--"); + } + // 周入场数量 + long carWeekCount = 0L; + for(int i=0;i<7;i++) { + carWeekCount += ((Long)valList.get(valList.size()-1-i)).longValue(); + } + datamap.put("carWeekCount", carWeekCount); + return new ResultData(datamap); + } + + /** + * 近一周线上缴费车辆 + * @param tenantId + * @return + */ + private ResultData getCarPayCarCountInWeek(String tenantId) { + HashMap datamap = new HashMap<>(); + HashMap weekParams = new HashMap<>(); + weekParams.put("tenantId", tenantId); + String oneWeekStartdate = DateUtils.getTimeBefore(7, new Date()); + String oneWeekEndDate = DateUtils.getTimeBefore(1, new Date()); + weekParams.put("startdate", oneWeekStartdate + " 00:00:00"); + weekParams.put("enddate", oneWeekEndDate + " 23:59:59"); + weekParams.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PAY_MANUAL.getCode()); + datamap.put("oneWeekCarPayCount", wxCarCmdLogMapper.queryWeekCarPayCount(weekParams)); + return new ResultData(datamap); + } + + /** + * 近一周线上缴费金额 + * @param tenantId + * @return + */ + private ResultData getCarPayCountInWeek(String tenantId) { + HashMap datamap = new HashMap<>(); + HashMap weekParams = new HashMap<>(); + weekParams.put("tenantId", tenantId); + String oneWeekStartdate = DateUtils.getTimeBefore(7, new Date()); + String oneWeekEndDate = DateUtils.getTimeBefore(1, new Date()); + weekParams.put("startdate", oneWeekStartdate + " 00:00:00"); + weekParams.put("enddate", oneWeekEndDate + " 23:59:59"); + weekParams.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PAY_MANUAL.getCode()); + List> weekCarPayHistoryList = wxCarCmdLogMapper.queryWeekCarPay(weekParams); + Map weekCollect = weekCarPayHistoryList.stream().collect(Collectors.toMap(m -> { + return (String) m.get("create_time"); + }, m -> { + return m.get("fee"); + })); + List days = DateUtils.getTjTimeList(oneWeekStartdate, oneWeekEndDate, "0"); + List timeList = new ArrayList<>(); + List valList = new ArrayList<>(); + for (String date : days) { + Object o = weekCollect.get(date); + timeList.add(date.substring(5, date.length()).replace("-", "/")); + if (o == null) { + valList.add(0L); + } else { + valList.add(o); } - for (WxCouponStatisVo coupon:priceCouponPaymentCountList){ - priceCouponPaymentCountMap.put(coupon.getXtime(),coupon.getXcount()); + } + + Map map = new HashMap(); + map.put("index", timeList); + map.put("val", valList); + datamap.put("oneWeekCarPayFeeCount", map); + return new ResultData(datamap); + } + + /** + * 车流 - 近一周新增停车会员 + * @param tenantId + * @return + */ + private ResultData getCarNewMemberCount(String tenantId) { + HashMap datamap = new HashMap<>(); + String oneWeekStartdate = DateUtils.getTimeBefore(7, new Date()); + String oneWeekEndDate = DateUtils.getTimeBefore(1, new Date()); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + WxCUserBasicInfoDto wxCUserBasicInfoDto = new WxCUserBasicInfoDto(); + wxCUserBasicInfoDto.setTenantId(tenantId); + try { + wxCUserBasicInfoDto.setStartTime(sdf.parse(oneWeekStartdate)); + wxCUserBasicInfoDto.setEndTime(sdf.parse(oneWeekEndDate)); + } catch (Exception e) { + e.printStackTrace(); + } + datamap.put("oneWeekNewCarUserCount", wxCUserCarMapper.countUser(wxCUserBasicInfoDto)); + //停车会员总数 + wxCUserBasicInfoDto = new WxCUserBasicInfoDto(); + wxCUserBasicInfoDto.setTenantId(tenantId); + datamap.put("newCarUserSumCount", wxCUserCarMapper.countUser(wxCUserBasicInfoDto)); + + return new ResultData(datamap); + } + + /** + * 车流 - 近一周新增会员数 + * @param tenantId + * @return + */ + private ResultData getCarNewMemberCountInWeek(String tenantId) { + HashMap datamap = new HashMap<>(); + HashMap weekParams = new HashMap<>(); + weekParams.put("tenantId", tenantId); + String oneWeekStartdate = DateUtils.getTimeBefore(7, new Date()); + String oneWeekEndDate = DateUtils.getTimeBefore(1, new Date()); + weekParams.put("startdate", oneWeekStartdate + " 00:00:00"); + weekParams.put("enddate", oneWeekEndDate + " 23:59:59"); + weekParams.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PAY_MANUAL.getCode()); + List> carCountHistory = wxCUserCarMapper.queryCarCountHistory(weekParams); + Map weekCarCollect = carCountHistory.stream().collect(Collectors.toMap(m -> { + return (String) m.get("create_time"); + }, m -> { + return m.get("count"); + })); + List days = DateUtils.getTjTimeList(oneWeekStartdate, oneWeekEndDate, "0"); + List timeList = new ArrayList<>(); + List valList = new ArrayList<>(); + for (String date : days) { + Object o = weekCarCollect.get(date); + timeList.add(date.substring(5, date.length()).replace("-", "/")); + if (o == null) { + valList.add(0L); + } else { + valList.add(o); } - result.put("orderCountList",orderCountMap); - result.put("paymentCountList",paymentCountMap); - result.put("priceCouponSaleCountList",priceCouponSaleCountMap); - result.put("priceCouponPaymentCountList",priceCouponPaymentCountMap); + } + + Map map = new HashMap(); + map.put("index", timeList); + map.put("val", valList); + datamap.put("oneWeekNewCarUserHistory", map); + return new ResultData(datamap); + } - result.put("sumPriceSaleMoney",wxCouponService.findSumPriceSaleMoney(wxCoupon)); - result.put("sumPricePayMent",wxCouponService.findSumPricePayMent(wxCoupon)); - result.put("sumSubsidyMoney",wxCouponService.findSumSubsidyMoney(wxCoupon)); - return new ResultData(result); + /** + * 今日券交易数据 + * @param tenantId + * @return + */ + private ResultData getTodayTouchUser(String tenantId) { + HashMap datamap = new HashMap<>(); + //查询UV PV + HashMap params = new HashMap<>(); + params.put("tenantId", tenantId); + params.put("startTime", addDay(-1)); + params.put("endTime", addDay(1)); + List wxUserVisitList = wxUserVisitMapper.touchUsersReportData(params); + TouchUsersReportVo touchUsersReportVo = new TouchUsersReportVo(); + if (!wxUserVisitList.isEmpty()) { + touchUsersReportVo = wxUserVisitList.get(0); + } else { + touchUsersReportVo.setPv(0); + touchUsersReportVo.setUv(0); + touchUsersReportVo.setCouponCount(0); + touchUsersReportVo.setUserCount(0); + touchUsersReportVo.setVerifyCount(0); + touchUsersReportVo.setVerifyUserCount(0); + touchUsersReportVo.setxTime(DateUtils.getSystemTime("MM/dd")); } + datamap.put("yesterday", touchUsersReportVo); + return new ResultData(datamap); + } - //砍价营销数据 - if (chart.equals(EnumChart.SALE_PRESS.getCode())) { - WxCoupon wxCoupon = new WxCoupon(); - Map result = new HashedMap(); - - //默认时间本月第一天,截止到当天 - if (StringUtils.isEmpty(paramsMap.get("startdate"))) { - Calendar c = Calendar.getInstance(); - c.add(Calendar.MONTH, 0); - c.set(Calendar.DAY_OF_MONTH,1); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - wxCoupon.setStartdate(c.getTime()); - }else{ - Date startTime = DateUtils.stringToDate(startdate); - wxCoupon.setStartdate(startTime); + /** + * 今日券交易数据 + * @param tenantId + * @return + */ + private ResultData getTodayCouponCount(String tenantId) { + HashMap datamap = new HashMap<>(); + //今日领取券数 + //查询coupon order表 + int todayCouponCount = wxCouponOrderMapper.findCountByDateLimit(tenantId, addDay(0), addDay(1)); + int yesterdayCount = wxCouponOrderMapper.findCountByDateLimit(tenantId, addDay(-1), addDay(0)); + int lastWeekCount = wxCouponOrderMapper.findCountByDateLimit(tenantId, addDay(-7), addDay(-6)); + NumberFormat nf = NumberFormat.getPercentInstance(); + nf.setMinimumFractionDigits(2);//控制保留小数点后几位,2:表示保留2位小数点 + String couponUpDay = "--"; + if (yesterdayCount != 0) { + couponUpDay = nf.format((todayCouponCount - yesterdayCount) / (float) yesterdayCount); + } + String couponUpWeek = "--"; + if (lastWeekCount != 0) { + couponUpWeek = nf.format((todayCouponCount - lastWeekCount) / (float) lastWeekCount); + } + datamap.put("couponUpDay", couponUpDay);//比昨日提升 + datamap.put("couponUpWeek", couponUpWeek);//比上周提升 + datamap.put("todayCouponCount", todayCouponCount);//今日领取数 + return new ResultData(datamap); + } + + /** + * 今日场景营销 + * @param tenantId + * @return + */ + private ResultData getSaleSceneCount(String tenantId) { + HashMap datamap = new HashMap<>(); + int todaySceneCount = wxCouponActionLogMapper.getCountByDateLimit(tenantId, addDay(0), addDay(1)); + int yesterdayCount = wxCouponActionLogMapper.getCountByDateLimit(tenantId, addDay(-1), addDay(0)); + int lastWeekCount = wxCouponActionLogMapper.getCountByDateLimit(tenantId, addDay(-7), addDay(-6)); + NumberFormat nf = NumberFormat.getPercentInstance(); + nf.setMinimumFractionDigits(2);//控制保留小数点后几位,2:表示保留2位小数点 + String sceneDownDay = "--"; + if (yesterdayCount != 0) { + sceneDownDay = nf.format((yesterdayCount - todaySceneCount) / (float) yesterdayCount); + } + String sceneUpWeek = "--"; + if (lastWeekCount != 0) { + sceneUpWeek = nf.format((todaySceneCount - lastWeekCount) / (float) lastWeekCount); + } + datamap.put("sceneDownDay", sceneDownDay);//比昨日下降 + datamap.put("sceneUpWeek", sceneUpWeek);//比上周提升 + datamap.put("todaySceneCount", todaySceneCount);//今日领取数 + return new ResultData(datamap); + } + + /** + * 触达用户数 + * @param tenantId + * @return + */ + private ResultData getTouchUserCount(String tenantId) { + String startdate; + String enddate;//查询UV PV + HashMap params = new HashMap<>(); + params.put("tenantId", tenantId); + params.put("startTime", addDay(-30)); + params.put("endTime", addDay(1)); + List wxUserVisitList = wxUserVisitMapper.touchUsersReportData(params); + startdate = DateUtils.getTimeBefore(30, new Date()); + enddate = DateUtils.getTimeBefore(1, new Date()); + List tjTimeList = DateUtils.getTjTimeList(startdate, enddate, "0"); + List tjList = tjTimeList.stream().map(d -> d.substring(5).replace("-", "/")).collect(Collectors.toList()); + List tempDatalist = new LinkedList<>(); + for (String tj : tjList) { + Optional first = wxUserVisitList.stream().filter(c -> c.getxTime().equals(tj)).findFirst(); + if (!first.isPresent()) { + TouchUsersReportVo touchUsersReportVo = new TouchUsersReportVo(); + touchUsersReportVo.setPv(0); + touchUsersReportVo.setUv(0); + touchUsersReportVo.setCouponCount(0); + touchUsersReportVo.setUserCount(0); + touchUsersReportVo.setVerifyCount(0); + touchUsersReportVo.setVerifyUserCount(0); + touchUsersReportVo.setxTime(tj); + tempDatalist.add(touchUsersReportVo); + continue; } - if (StringUtils.isEmpty(paramsMap.get("enddate"))) { - wxCoupon.setEnddate(new Date()); - }else{ - Date endTime = DateUtils.stringToDate(enddate, "yyyy-MM-dd HH:mm:ss"); - wxCoupon.setEnddate(endTime); + tempDatalist.add(first.get()); + } + return new ResultData(tempDatalist); + } + + /** + * 场景营销数据 + * @param tenantId + * @return + */ + private ResultData getSceneData(String tenantId) { + String startdate; + String enddate; + HashMap datamap = new HashMap<>(); + + HashMap params = new HashMap<>(); + params.put("tenantId", tenantId); + params.put("startTime", addDay(-30)); + params.put("endTime", addDay(1)); + //停车发券数 停车发券被核销数 核销发券数 核销发券被核销数 + List list = wxCouponActionLogMapper.sceneDataMap(params); + + //停车发券被核销数 + HashMap params1 = new HashMap<>(); + params1.put("tenantId", tenantId); + params1.put("startTime", addDay(-30)); + params1.put("endTime", addDay(1)); + params1.put("channelType", EnumCouponSendSendType.CAR_STOP.getCode());//停车 + List list1 = wxCouponActionLogMapper.sceneDataMapJoinCouponOrder(params1); + Map parkCountMap = list1.stream().collect(Collectors.toMap(MarkingSceneDataReportVo::getXTime, p -> p.getTempCount())); + + //核销发券被核销数 + HashMap params2 = new HashMap<>(); + params2.put("tenantId", tenantId); + params2.put("startTime", addDay(-30)); + params2.put("endTime", addDay(1)); + params2.put("channelType", EnumCouponSendSendType.COUPON_VERIFY.getCode());//核销 + List list2 = wxCouponActionLogMapper.sceneDataMapJoinCouponOrder(params2); + Map verifyCountMap = list2.stream().collect(Collectors.toMap(MarkingSceneDataReportVo::getXTime, p -> p.getTempCount())); + + // B端刷卡支付被核销数 + HashMap params3 = new HashMap<>(); + params3.put("tenantId", tenantId); + params3.put("startTime", addDay(-30)); + params3.put("endTime", addDay(1)); + params3.put("channelType", EnumCouponSendSendType.B_MICROPAY.getCode());//B端刷卡支付 + List list3 = wxCouponActionLogMapper.sceneDataMapJoinCouponOrder(params3); + Map microPayCountMap = list3.stream().collect(Collectors.toMap(MarkingSceneDataReportVo::getXTime, p -> p.getTempCount())); + + // 购买发券被核销数 + HashMap params4 = new HashMap<>(); + params3.put("tenantId", tenantId); + params3.put("startTime", addDay(-30)); + params3.put("endTime", addDay(1)); + params3.put("channelType", EnumCouponSendSendType.C_ORDER.getCode());//买券 + List list4 = wxCouponActionLogMapper.sceneDataMapJoinCouponOrder(params4); + Map OrderCountMap = list4.stream().collect(Collectors.toMap(MarkingSceneDataReportVo::getXTime, p -> p.getTempCount())); + + for (MarkingSceneDataReportVo vo : list) { + vo.setParkCount(parkCountMap.get(vo.getXTime()) == null ? 0 : parkCountMap.get(vo.getXTime())); + vo.setVerifyCount(verifyCountMap.get(vo.getXTime()) == null ? 0 : verifyCountMap.get(vo.getXTime())); + vo.setMicroPayCount(microPayCountMap.get(vo.getXTime()) == null ? 0 : microPayCountMap.get(vo.getXTime())); + vo.setOrderCount(OrderCountMap.get(vo.getXTime()) == null ? 0 : OrderCountMap.get(vo.getXTime())); + } + + startdate = DateUtils.getTimeBefore(30, new Date()); + enddate = DateUtils.getTimeBefore(1, new Date()); + List tjTimeList = DateUtils.getTjTimeList(startdate, enddate, "0"); + List tjList = tjTimeList.stream().map(d -> d.substring(5).replace("-", "/")).collect(Collectors.toList()); + List tempDatalist = new LinkedList<>(); + + for (String tj : tjList) { + Optional first = list.stream().filter(c -> c.getXTime().equals(tj)).findFirst(); + + MarkingSceneDataReportVo msdVo; + if (!first.isPresent()) { + msdVo = new MarkingSceneDataReportVo(); + msdVo.setXTime(tj); + msdVo.setCarCount(0); + msdVo.setParkCount(0); + msdVo.setVerifyCount(0); + msdVo.setMicroPayCount(0); + msdVo.setOrderCount(0); + msdVo.setTempCount(0); + msdVo.setParkSendCount(0); + msdVo.setVerifySendCount(0); + msdVo.setMicroPaySendCount(0); + msdVo.setOrderSendCount(0); + msdVo.setTotal(0); + } else { + msdVo = first.get(); + msdVo.setTotal(msdVo.getParkSendCount() + + msdVo.getVerifySendCount() + + msdVo.getMicroPaySendCount() + + msdVo.getOrderSendCount()); } - List pressSendHistory = wxCouponService.pressSendHistory(wxCoupon); - List pressSuccHistory = wxCouponService.pressSuccHistory(wxCoupon); - List pressPaymentHistory = wxCouponService.pressPaymentHistory(wxCoupon); + tempDatalist.add(msdVo); + } + datamap.put("sceneDataMap", tempDatalist); + return new ResultData(datamap); + } - Map pressSendHistoryMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); - Map pressSuccHistoryMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); - Map pressPaymentHistoryMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); + /** + * 活跃用户 + * @param tenantId + * @return + */ + private ResultData getNewUserCount(String tenantId) { + HashMap datamap = new HashMap<>(); + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + long allCount = wxCUserMapper.findCount(dto);//总数 + Calendar c = Calendar.getInstance(); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date today = c.getTime(); + c.setTime(today); + c.add(Calendar.DAY_OF_YEAR, -1); + dto.setStartTime(c.getTime()); + c.add(Calendar.DAY_OF_YEAR, 1); + dto.setEndTime(c.getTime()); + long todayCount = wxCUserMapper.findCount(dto); + datamap.put("allCount", allCount);//会员总数 + datamap.put("todayCount", todayCount);//今日新增会员数 + return new ResultData(datamap); + } - for (WxCouponStatisVo coupon:pressSendHistory){ - pressSendHistoryMap.put(coupon.getXtime(),coupon.getXcount()); + /** + * 活跃用户 + * @param tenantId + * @return + */ + private ResultData getActiveMemberCount(String tenantId) { + HashMap datamap = new HashMap<>(); + HashMap params = new HashMap<>(); + Calendar c = Calendar.getInstance(); + c.add(Calendar.DAY_OF_YEAR, -1); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date endTime = c.getTime(); + c.add(Calendar.DAY_OF_YEAR, -30); + Date startTime = c.getTime(); + params.put("startTime", startTime); + params.put("endTime", endTime); + params.put("tenantId", tenantId); + List list = wxUserVisitMapper.touchUsersReportList(params); + String yesterday = DateUtils.getTimeBefore(1, new Date()); + List collect = list.parallelStream().filter(x -> x.getxTime().equals(yesterday)).collect(Collectors.toList()); + int yesterdayCount = 0; + if (!collect.isEmpty()) { + yesterdayCount = collect.get(0).getUv(); + } + Integer thisMonthCount = list.parallelStream().collect(Collectors.summingInt(u -> u.getUv())); + datamap.put("yesterdayCount", yesterdayCount);//昨日活跃数 + datamap.put("thisMonthCount", thisMonthCount);//近一个月活跃数 + return new ResultData(datamap); + } + + /** + * 线上交易 + * @param tenantId + * @return + */ + private ResultData getOnlineOrderCount(String tenantId) { + HashMap datamap = new HashMap<>(); + Calendar c = Calendar.getInstance(); + c.add(Calendar.DAY_OF_YEAR, 1); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date endTime = c.getTime();//明天0点 + c.add(Calendar.DAY_OF_YEAR, -30); + Date startTime = c.getTime(); + int thisMonthCount = wxCouponOrderMapper.queryPriceTotal(tenantId, startTime, endTime);//月消费金额 + c.clear(); + c.add(Calendar.DAY_OF_YEAR, -1); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + startTime = c.getTime(); + int todayCount = wxCouponOrderMapper.queryPriceTotal(tenantId, startTime, endTime);//月消费金额 + DecimalFormat df = new DecimalFormat("0.00"); + datamap.put("todayCount", df.format((float) todayCount / 100));//今日消费金额 + String thisMonthCountStr = df.format((float) thisMonthCount / 100); + datamap.put("thisMonthCount", thisMonthCountStr);//近一个月消费金额数 + return new ResultData(datamap); + } + + private ResultData getNewMemberInWeek(String tenantId) { + return getNewMemberCount(tenantId, 7, "weekVos"); + } + + private ResultData getNewMemberCount(String tenantId, int days, String returnName) { + HashMap datamap = new HashMap<>(); + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + Calendar c = Calendar.getInstance(); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date today = c.getTime(); + List weekVos = new ArrayList<>();//周会员数 + for (int i = days, sortNum = 0; i >= 0; i--) { + c.clear(); + c.setTime(today); + c.add(Calendar.DAY_OF_YEAR, -i); + dto.setStartTime(c.getTime()); + c.add(Calendar.DAY_OF_YEAR, 1); + dto.setEndTime(c.getTime()); + long count = wxCUserMapper.findCount(dto); + UserStructureVo vo = new UserStructureVo(); + vo.setName(new SimpleDateFormat("MM/dd").format(dto.getStartTime())); + vo.setSortNum(sortNum++); + vo.setCount(count); + weekVos.add(vo); + } + datamap.put(returnName, weekVos);//月用户增加数列表 + return new ResultData(datamap); + } + + /** + * 近一周活跃用户数 + * @param tenantId + * @return + */ + private ResultData getActiveMemberCountInWeek(String tenantId) { + HashMap datamap = new HashMap<>(); + HashMap params = new HashMap<>(); + Calendar c = Calendar.getInstance(); + c.add(Calendar.DAY_OF_YEAR, -1); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date endTime = c.getTime(); + c.add(Calendar.DAY_OF_YEAR, -7); + Date startTime = c.getTime(); + params.put("startTime", startTime); + params.put("endTime", endTime); + params.put("tenantId", tenantId); + List list = wxUserVisitMapper.touchUsersReportList(params); + Map dateMap = new HashMap<>(); + for (TouchUsersReportVo vo : list) { + dateMap.put(vo.getxTime(), vo); + } + List weekVos = new ArrayList<>();//每周uv + for (int i = 7, sortNum = 0; i >= 0; i--) { + c.clear(); + c.setTime(endTime); + c.add(Calendar.DAY_OF_YEAR, -i); + String dayStr = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); + UserStructureVo vo = new UserStructureVo(); + vo.setName(new SimpleDateFormat("MM/dd").format(c.getTime())); + vo.setSortNum(sortNum++); + if (dateMap.get(dayStr) != null) { + TouchUsersReportVo rv = dateMap.get(dayStr); + Long l = new Long((long) rv.getUv()); + vo.setCount(l); + } else { + vo.setCount(0); } - for (WxCouponStatisVo coupon:pressSuccHistory){ - pressSuccHistoryMap.put(coupon.getXtime(),coupon.getXcount()); + weekVos.add(vo); + } + datamap.put("weekVos", weekVos);//周活跃数列表 + return new ResultData(datamap); + } + + /** + * 近一周线上交易金额(元) + * @param tenantId + * @return + */ + private ResultData getWeekMoneyData(String tenantId) { + HashMap datamap = new HashMap<>(); + Calendar c = Calendar.getInstance(); + Date today = c.getTime(); + c.add(Calendar.DAY_OF_YEAR, 1); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date endTime = c.getTime();//明天0点 + c.add(Calendar.DAY_OF_YEAR, -30);//三十天前 + c.clear(); + c.setTime(endTime); + Date eTime = c.getTime(); + c.add(Calendar.DAY_OF_YEAR, -7); + Date sTime = c.getTime(); + List datas = wxCouponOrderMapper.queryPriceTotalGroup(tenantId, sTime, eTime); + Map dataMap = new HashMap<>(); + for (CUserDateAmountVo v : datas) { + dataMap.put(v.getxTime(), v.getPrice()); + } + List weekVos = new ArrayList<>();//周消费金额 + for (int i = 7, sortNum = 0; i >= 0; i--) { + c.clear(); + c.setTime(today); + c.add(Calendar.DAY_OF_YEAR, -i); + String dateStr = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); + UserStructureVo vo = new UserStructureVo(); + vo.setName(new SimpleDateFormat("MM/dd").format(c.getTime())); + vo.setSortNum(sortNum++); + if (dataMap.get(dateStr) != null) { + int price = dataMap.get(dateStr); + vo.setPrice(price); + } else { + vo.setPrice(0); } - for (WxCouponStatisVo coupon:pressPaymentHistory){ - pressPaymentHistoryMap.put(coupon.getXtime(),coupon.getXcount()); + weekVos.add(vo); + } + datamap.put("weekVos", weekVos);//一周金额列表 + return new ResultData(datamap); + } + + /** + * 销售数据 + * @param tenantId + * @return + */ + private ResultData getSaleAnalysis(String tenantId) { + HashMap datamap = new HashMap<>(); + Calendar c = Calendar.getInstance(); + Date sTime = c.getTime(); + c.add(Calendar.DAY_OF_YEAR, 1); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date eTime = c.getTime();//明天0点 + c.add(Calendar.DAY_OF_YEAR, -30);//三十天前 + List datas = wxCouponOrderMapper.queryPriceTotalGroup(tenantId, sTime, eTime); + List monthVos = new ArrayList<>();//周消费金额 + Map dataMap = new HashMap<>(); + for (CUserDateAmountVo v : datas) { + dataMap.put(v.getxTime(), v.getPrice()); + } + for (int i = 29, sortNum = 0; i >= 0; i--) { + c.clear(); + c.setTime(sTime); + c.add(Calendar.DAY_OF_YEAR, -i); + String dateStr = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); + UserStructureVo vo = new UserStructureVo(); + vo.setName(new SimpleDateFormat("MM/dd").format(c.getTime())); + vo.setSortNum(sortNum++); + if (datamap.get(dateStr) != null) { + int price = dataMap.get(dateStr); + vo.setPrice(price); + } else { + vo.setPrice(0); } - result.put("pressSendHistory",pressSendHistoryMap); - result.put("pressSuccHistory",pressSuccHistoryMap); - result.put("pressPaymentHistory",pressPaymentHistoryMap); + monthVos.add(vo); + } + datamap.put("monthVos", monthVos);//一月金额列表 + return new ResultData(datamap); + } - wxCoupon.setTenantId(tenantId); - result.put("pressSuccRate",wxCouponService.pressSuccRate(wxCoupon)); - result.put("sumJoin",wxCouponService.sumJoin(wxCoupon)); - return new ResultData(result); + private ResultData getActiveMemberAnalysis(String tenantId) { + HashMap datamap = new HashMap<>(); + HashMap params = new HashMap<>(); + Calendar c = Calendar.getInstance(); + c.add(Calendar.DAY_OF_YEAR, -1); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date endTime = c.getTime(); + c.add(Calendar.DAY_OF_YEAR, -30); + Date startTime = c.getTime(); + params.put("startTime", startTime); + params.put("endTime", endTime); + params.put("tenantId", tenantId); + List list = wxUserVisitMapper.touchUsersReportList(params); + Map dateMap = new HashMap<>(); + for (TouchUsersReportVo vo : list) { + dateMap.put(vo.getxTime(), vo); + } + List monthVos = new ArrayList<>();//每月uv + for (int i = 29, sortNum = 0; i >= 0; i--) { + c.clear(); + c.setTime(endTime); + c.add(Calendar.DAY_OF_YEAR, -i); + String dayStr = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); + UserStructureVo vo = new UserStructureVo(); + vo.setName(new SimpleDateFormat("MM/dd").format(c.getTime())); + vo.setSortNum(sortNum++); + if (dateMap.get(dayStr) != null) { + TouchUsersReportVo rv = dateMap.get(dayStr); + Long l = new Long((long) rv.getUv()); + vo.setCount(l); + } else { + vo.setCount(0); + } + monthVos.add(vo); } + datamap.put("monthVos", monthVos);//月活跃数列表 + return new ResultData(datamap); + } - //拼团营销数据 - if (chart.equals(EnumChart.SALE_GROUP.getCode())) { - Map params = new HashMap<>(); - params.put("tenantId", tenantId); - //默认时间本月第一天,截止到当天 - Map result = new HashMap<>(); - Date startTime = new Date(); - Date endTime = startTime; - if (StringUtils.isEmpty(paramsMap.get("startdate"))) { - Calendar c = Calendar.getInstance(); - c.add(Calendar.MONTH, 0); - c.set(Calendar.DAY_OF_MONTH, 1); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - startTime = c.getTime(); - params.put("startdate", startTime); + /** + * 新增用户趋势 + * @param tenantId + * @return + */ + private ResultData getNewMemberTradeMonthly(String tenantId) { + return getNewMemberCount(tenantId, 29, "monthVos"); + } + + /** + * 活跃用户趋势 + * @param tenantId + * @return + */ + private ResultData getActiveMemberTrade(String tenantId) { + HashMap datamap = new HashMap<>(); + HashMap params = new HashMap<>(); + Calendar c = Calendar.getInstance(); + c.add(Calendar.DAY_OF_YEAR, -1); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date endTime = c.getTime(); + c.add(Calendar.DAY_OF_YEAR, -30); + Date startTime = c.getTime(); + params.put("startTime", startTime); + params.put("endTime", endTime); + params.put("tenantId", tenantId); + List list = wxUserVisitMapper.touchUsersReportList(params); + Map dateMap = new HashMap<>(); + for (TouchUsersReportVo vo : list) { + dateMap.put(vo.getxTime(), vo); + } + List monthVos = new ArrayList<>();//每月uv + for (int i = 29, sortNum = 0; i >= 0; i--) { + c.clear(); + c.setTime(endTime); + c.add(Calendar.DAY_OF_YEAR, -i); + String dayStr = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); + UserStructureVo vo = new UserStructureVo(); + vo.setName(new SimpleDateFormat("MM/dd").format(c.getTime())); + vo.setSortNum(sortNum++); + if (dateMap.get(dayStr) != null) { + TouchUsersReportVo rv = dateMap.get(dayStr); + Long l = new Long((long) rv.getUv()); + vo.setCount(l); } else { - startTime = DateUtils.stringToDate(startdate + " 00:00:00"); - params.put("startdate", startTime); + vo.setCount(0); } - if (StringUtils.isEmpty(paramsMap.get("enddate"))) { - params.put("enddate", endTime); + monthVos.add(vo); + } + datamap.put("monthVos", monthVos);//月活跃数列表 + return new ResultData(datamap); + } + + /** + * 线上交易趋势 + * @param tenantId + * @return + */ + private ResultData getOnlineTrade(String tenantId) { + HashMap datamap = new HashMap<>(); + Calendar c = Calendar.getInstance(); + Date today = c.getTime(); + c.add(Calendar.DAY_OF_YEAR, 1); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date eTime = c.getTime();//明天0点 + c.add(Calendar.DAY_OF_YEAR, -30);//三十天前 + Date sTime = c.getTime(); + List datas = wxCouponOrderMapper.queryPriceTotalGroup(tenantId, sTime, eTime); + Map dataMap = new HashMap<>(); + for (CUserDateAmountVo v : datas) { + dataMap.put(v.getxTime(), v.getPrice()); + } + List monthVos = new ArrayList<>(); + for (int i = 29, sortNum = 0; i >= 0; i--) { + c.clear(); + c.setTime(today); + c.add(Calendar.DAY_OF_YEAR, -i); + String dateStr = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); + UserStructureVo vo = new UserStructureVo(); + vo.setName(new SimpleDateFormat("MM/dd").format(c.getTime())); + vo.setSortNum(sortNum++); + if (dataMap.get(dateStr) != null) { + int price = dataMap.get(dateStr); + vo.setPrice(price); } else { - endTime = DateUtils.stringToDate(paramsMap.get("enddate") + " 23:59:59", "yyyy-MM-dd HH:mm:ss"); - params.put("enddate", paramsMap.get("enddate") + " 23:59:59"); + vo.setPrice(0); } - List> successlist = wxOrderGroupMapper.queryOrderGroupSuccessCountAndTime(params); - List> verifyList = wxOrderGroupMapper.queryOrderGroupVerifyCountAndTime(params); - - Map successMap = getDateMap(startTime, endTime); - Map verifyMap = getDateMap(startTime, endTime); - - long successCount = wxOrderGroupMapper.queryOrderGroupSuccessCount(params); - long groupCount = wxOrderGroupMapper.queryOrderGroupCount(params); - long peopleCount = wxOrderGroupMapper.queryOrderGroupPeopleCount(params); - double transferRatio = 0; - if (groupCount > 0) { - double transfer = (double) successCount / groupCount * 100; - transferRatio = new BigDecimal(transfer).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + monthVos.add(vo); + } + datamap.put("monthVos", monthVos);//一月金额列表 + return new ResultData(datamap); + } + + /** + * 微信用户总数 + * @param tenantId + * @return + */ + private ResultData getMemeberWechatTotal(String tenantId) { + HashMap datamap = new HashMap<>(); + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + //微信用户数据 + long wxallCount = wxCUserMapper.findCount(dto);//总量 + Calendar c = Calendar.getInstance(); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date today = c.getTime(); + dto.setStartTime(today); + dto.setEndTime(null); + long wxtodayCount = wxCUserMapper.findCount(dto);//今天新增 + datamap.put("wxallCount", wxallCount);//累计会员总数 + datamap.put("wxtodayCount", wxtodayCount);//今日新增会员数 + return new ResultData(datamap); + } + + /** + * 会员总数 + * @param tenantId + * @return + */ + private ResultData getMemberTotalCount(String tenantId) { + HashMap datamap = new HashMap<>(); + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + long allCount = wxCUserBasicInfoMapper.findCount(dto);//总量 + Calendar c = Calendar.getInstance(); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date today = c.getTime(); + dto.setStartTime(today); + dto.setEndTime(null); + long todayCount = wxCUserBasicInfoMapper.findCount(dto);//今天新增 + datamap.put("allCount", allCount);//累计会员总数 + datamap.put("todayCount", todayCount);//今日新增会员数 + return new ResultData(datamap); + } + + /** + * 微信用户累计趋势 + * @param tenantId + * @return + */ + private ResultData getMemberWechatJoinTrade(String tenantId) { + HashMap datamap = new HashMap<>(); + final int daysBefore = 29; + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + Calendar c = Calendar.getInstance(); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date today = c.getTime(); + List wxnewCountVos = new ArrayList<>();//每日新增会员数 + int j = 1; + for (int i = daysBefore; i >= 0; i--) { + c.clear(); + c.setTime(today); + c.add(Calendar.DAY_OF_YEAR, -i); + dto.setStartTime(c.getTime()); + c.add(Calendar.DAY_OF_YEAR, 1); + dto.setEndTime(c.getTime()); + long count = wxCUserMapper.findCount(dto); + UserStructureVo vo = new UserStructureVo(); + vo.setSortNum(j); + j++; + vo.setName(new SimpleDateFormat("MM/dd").format(dto.getStartTime())); + vo.setCount(count); + wxnewCountVos.add(vo); + } + List wxallCountVos = new ArrayList<>();//累计会员数 + c.clear(); + c.setTime(today); + c.add(Calendar.DAY_OF_YEAR, -daysBefore); + dto.setEndTime(c.getTime()); + dto.setStartTime(null); + long firstDay = wxCUserMapper.findCount(dto);//统计的第一天总数 + int i = 0; + long sumCount = 0; + for (UserStructureVo v : wxnewCountVos) { + UserStructureVo vo = new UserStructureVo(); + sumCount += v.getCount(); + vo.setCount(firstDay + sumCount); + vo.setName(v.getName()); + vo.setSortNum(i + 1); + wxallCountVos.add(vo); + i++; + } + datamap.put("wxallCountVos", wxallCountVos);//累计会员列表( 日期和数量list) + return new ResultData(datamap); + } + + /** + * 券交易数据 + * @param tenantId + * @return + */ + private ResultData getCouponSaleAnalysis(String tenantId) { + String startdate; + String enddate; + HashMap datamap = new HashMap<>(); + //couponData + HashMap params = new HashMap<>(); + params.put("tenantId", tenantId); + params.put("startTime", addDay(-30)); + params.put("endTime", addDay(1)); + List couponDatalist = wxCouponOrderMapper.couponDataMap(params); + //查询券领取人数 + startdate = DateUtils.getTimeBefore(30, new Date()); + enddate = DateUtils.getTimeBefore(1, new Date()); + List tjTimeList = DateUtils.getTjTimeList(startdate, enddate, "0"); + List tjList = tjTimeList.stream().map(d -> d.substring(5).replace("-", "/")).collect(Collectors.toList()); + List couponTempDatalist = new LinkedList<>(); + for (String tj : tjList) { + Optional first = couponDatalist.stream().filter(c -> c.getCreateTime().equals(tj)).findFirst(); + if (!first.isPresent()) { + MarkingCouponDataReportVo markingCouponDataReportVo = new MarkingCouponDataReportVo(); + markingCouponDataReportVo.setCreateTime(tj); + markingCouponDataReportVo.setCouponCount(0); + markingCouponDataReportVo.setCouponUserCount(0); + markingCouponDataReportVo.setVerifyCount(0); + markingCouponDataReportVo.setVerifyUserCount(0); + couponTempDatalist.add(markingCouponDataReportVo); + continue; + } + couponTempDatalist.add(first.get()); + } + datamap.put("couponDataMap", couponTempDatalist); + return new ResultData(datamap); + } + + /** + * 会员累计趋势 + * @param tenantId + * @return + */ + private ResultData getMemberJoinTrade(String tenantId) { + HashMap datamap = new HashMap<>(); + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + final int daysBefore = 29; + Calendar c = Calendar.getInstance(); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date today = c.getTime(); + List newCountVos = new ArrayList<>();//每日新增会员数 + int j = 1; + for (int i = daysBefore; i >= 0; i--) { + c.clear(); + c.setTime(today); + c.add(Calendar.DAY_OF_YEAR, -i); + dto.setStartTime(c.getTime()); + c.add(Calendar.DAY_OF_YEAR, 1); + dto.setEndTime(c.getTime()); + long count = wxCUserBasicInfoMapper.findCount(dto); + UserStructureVo vo = new UserStructureVo(); + vo.setSortNum(j); + j++; + vo.setName(new SimpleDateFormat("MM/dd").format(dto.getStartTime())); + vo.setCount(count); + newCountVos.add(vo); + } + List allCountVos = new ArrayList<>();//累计会员数 + c.clear(); + c.setTime(today); + c.add(Calendar.DAY_OF_YEAR, -daysBefore); + dto.setEndTime(c.getTime()); + dto.setStartTime(null); + long firstDay = wxCUserBasicInfoMapper.findCount(dto);//统计的第一天总数 + int i = 0; + long sumCount = 0; + for (UserStructureVo v : newCountVos) { + UserStructureVo vo = new UserStructureVo(); + sumCount += v.getCount(); + vo.setCount(firstDay + sumCount); + vo.setName(v.getName()); + vo.setSortNum(i + 1); + allCountVos.add(vo); + i++; + } + datamap.put("allCountVos", allCountVos);//累计会员列表( 日期和数量list) + return new ResultData(datamap); + } + + /** + * 微信用户新增趋势 + * @param tenantId + * @return + */ + private ResultData getWechatMemberTrade(String tenantId) { + HashMap datamap = new HashMap<>(); + final int daysBefore = 29; + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + Calendar c = Calendar.getInstance(); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date today = c.getTime(); + List wxnewCountVos = new ArrayList<>();//每日新增会员数 + int j = 1; + for (int i = daysBefore; i >= 0; i--) { + c.clear(); + c.setTime(today); + c.add(Calendar.DAY_OF_YEAR, -i); + dto.setStartTime(c.getTime()); + c.add(Calendar.DAY_OF_YEAR, 1); + dto.setEndTime(c.getTime()); + long count = wxCUserMapper.findCount(dto); + UserStructureVo vo = new UserStructureVo(); + vo.setSortNum(j); + j++; + vo.setName(new SimpleDateFormat("MM/dd").format(dto.getStartTime())); + vo.setCount(count); + wxnewCountVos.add(vo); + } + datamap.put("wxnewCountVos", wxnewCountVos);//新增会员列表(日期和数量list) + return new ResultData(datamap); + } + + /** + * 拓客渠道 + * @param tenantId + * @return + */ + private ResultData getFromChannelAnalysis(String tenantId) { + HashMap datamap = new HashMap<>(); + List channelStructureList = new ArrayList<>(); + WxCUser wxCUser = new WxCUser(); + wxCUser.setTenantId(tenantId); + List channels = wxUserChannelMapper.findDistinctChannel(); + for (WxUserChannel w : channels) { + WxUserChannel c = new WxUserChannel(); + c.setChannelName(w.getChannelName()); + PageInfo page = PageHelper.startPage(1, 1000).doSelectPageInfo(() -> wxUserChannelMapper.findList(c)); + if (page.getSize() > 0) { + List sceneList = new ArrayList<>(); + for (WxUserChannel uc : page.getList()) { + List scene = new ArrayList<>(); + scene.add(uc.getSceneAddress()); + wxCUser.setSceneList(scene); + sceneList.add(uc.getSceneAddress()); + } + wxCUser.setSceneList(sceneList); + WxUserChannel channelStructure = new WxUserChannel(); + channelStructure.setChannelName(w.getChannelName()); + channelStructure.setCount(wxCUserMapper.countByChannel(wxCUser)); + channelStructureList.add(channelStructure); } + } + datamap.put("channelList", channelStructureList); + return new ResultData(datamap); + } - Map successListMap = successlist.parallelStream().collect(Collectors.toMap(x -> { - return x.get("time").toString(); - }, x -> { - return x.get("total").toString(); - })); + /** + * 会员新增趋势 + * @param tenantId + * @return + */ + private ResultData getNewMemberTrade(String tenantId) { + HashMap datamap = new HashMap<>(); + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + final int daysBefore = 29; + Calendar c = Calendar.getInstance(); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + Date today = c.getTime(); + List newCountVos = new ArrayList<>();//每日新增会员数 + int j = 1; + for (int i = daysBefore; i >= 0; i--) { + c.clear(); + c.setTime(today); + c.add(Calendar.DAY_OF_YEAR, -i); + dto.setStartTime(c.getTime()); + c.add(Calendar.DAY_OF_YEAR, 1); + dto.setEndTime(c.getTime()); + long count = wxCUserBasicInfoMapper.findCount(dto); + UserStructureVo vo = new UserStructureVo(); + vo.setSortNum(j); + j++; + vo.setName(new SimpleDateFormat("MM/dd").format(dto.getStartTime())); + vo.setCount(count); + newCountVos.add(vo); + } + datamap.put("newCountVos", newCountVos);//新增会员列表(日期和数量list) + return new ResultData(datamap); + } - Map verifyListMap = verifyList.parallelStream().collect(Collectors.toMap(x -> { - return x.get("time").toString(); - }, x -> { - return x.get("total").toString(); - })); + /** + * 场景排名 + * @param tenantId + * @return + */ + private ResultData getSceneAnalysis(String tenantId) { + HashMap datamap = new HashMap<>(); + List senceStructureList = new ArrayList<>(); + WxCUser wxCUser = new WxCUser(); + wxCUser.setTenantId(tenantId); + List channels = wxUserChannelMapper.findDistinctChannel(); + for (WxUserChannel w : channels) { + WxUserChannel c = new WxUserChannel(); + c.setChannelName(w.getChannelName()); + PageInfo page = PageHelper.startPage(1, 1000).doSelectPageInfo(() -> wxUserChannelMapper.findList(c)); + if (page.getSize() > 0) { + for (WxUserChannel uc : page.getList()) { + List scene = new ArrayList<>(); + scene.add(uc.getSceneAddress()); + wxCUser.setSceneList(scene); + WxUserChannel senceStructure = new WxUserChannel(); + senceStructure.setDescription(uc.getDescription()); + senceStructure.setCount(wxCUserMapper.countByChannel(wxCUser)); + senceStructureList.add(senceStructure); + } + } + } + Collections.sort(senceStructureList, (s1, s2) -> ((int) (s2.getCount() - s1.getCount()))); + datamap.put("senceList", senceStructureList.subList(0, 10)); + return new ResultData(datamap); + } - successMap.putAll(successListMap); - verifyMap.putAll(verifyListMap); + /** + * 会员性别比例 TODO + * @param tenantId + * @param startdate + * @param enddate + * @return + */ + private ResultData getMemberSexRate(String tenantId, String startdate, String enddate) { + HashMap datamap = new HashMap<>(); + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + dto.setStartTime(DateUtils.stringToDate(startdate + " 00:00:00")); + dto.setEndTime(DateUtils.stringToDate(enddate + " 23:59:59")); + long all = wxCUserBasicInfoMapper.findCount(dto); + List vos = new ArrayList<>(); + Calendar c = Calendar.getInstance(); + for (EnumAgeInfo a : EnumAgeInfo.values()) { + c.clear(); + c.setTime(new Date()); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + long count = getCountByAge(a, c, dto); + vos.add(getVo(count, all, a.getDesc(), a.getSortNum())); + } + return new ResultData(datamap); + } - result.put("successList", successMap); - result.put("verifyList", verifyMap); + /** + * 会员绑定车牌率 + * @param tenantId + * @param startdate + * @param enddate + * @return + */ + private ResultData getMemberBindCar(String tenantId, String startdate, String enddate) { + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + dto.setStartTime(DateUtils.stringToDate(startdate + " 00:00:00")); + dto.setEndTime(DateUtils.stringToDate(enddate + " 23:59:59")); + long total = wxCUserBasicInfoMapper.findCount(dto); + long userCountWithCar = wxCUserCarMapper.countUser(dto); + Map userWithCar = new HashMap(); + userWithCar.put("title", "已绑定车牌"); + userWithCar.put("count", userCountWithCar); + long userCountWithoutCar = total - userCountWithCar; + Map userWithoutCar = new HashMap(); + userWithoutCar.put("title", "未绑定车牌"); + userWithoutCar.put("count", userCountWithoutCar); + NumberFormat nf = NumberFormat.getPercentInstance(); + nf.setMinimumFractionDigits(2); + if (userCountWithoutCar + userCountWithCar > 0) { + userWithCar.put("percentage", nf.format(userCountWithCar / new Double(userCountWithoutCar + userCountWithCar).doubleValue())); + userWithoutCar.put("percentage", nf.format(userCountWithoutCar / new Double(userCountWithoutCar + userCountWithCar).doubleValue())); + } else { + userWithCar.put("percentage", "--"); + userWithoutCar.put("percentage", "--"); + } + List list = new ArrayList<>(); + list.add(userWithCar); + list.add(userWithoutCar); + return new ResultData(list); + } - result.put("successCount", successCount); - result.put("groupCount", groupCount); - result.put("peopleCount", peopleCount); - result.put("transferRatio", transferRatio); + /** + * 会员年龄层次 + * @param tenantId + * @param startdate + * @param enddate + * @return + */ + private ResultData getMemberAgeAnalysis(String tenantId, String startdate, String enddate) { + HashMap datamap = new HashMap<>(); + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + dto.setStartTime(DateUtils.stringToDate(startdate + " 00:00:00")); + dto.setEndTime(DateUtils.stringToDate(enddate + " 23:59:59")); + long all = wxCUserBasicInfoMapper.findCount(dto); + List vos = new ArrayList<>(); + Calendar c = Calendar.getInstance(); + for (EnumAgeInfo a : EnumAgeInfo.values()) { + c.clear(); + c.setTime(new Date()); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + long count = getCountByAge(a, c, dto); + vos.add(getVo(count, all, a.getDesc(), a.getSortNum())); + } + return new ResultData(datamap); + } + + /** + * 会员成长值 + * @param tenantId + * @param startdate + * @param enddate + * @return + */ + private ResultData getMemberGrowthAnalysis(String tenantId, String startdate, String enddate) { + WxLevelConfig wxLevelConfig = new WxLevelConfig(); + wxLevelConfig.setTenantId(tenantId); + wxLevelConfig.setSortColumns(WxLevelConfig.Field.Points_ASC); + List levelList = wxLevelConfigMapper.findList(wxLevelConfig); + + for (int i = 0; i < levelList.size(); i++) { + + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + dto.setStartTime(DateUtils.stringToDate(startdate + " 00:00:00")); + dto.setEndTime(DateUtils.stringToDate(enddate + " 23:59:59")); + if (i + 1 < levelList.size()) { + dto.setLevelStartScore(levelList.get(i).getPoints()); + dto.setLevelEndScore(levelList.get(i + 1).getPoints()); + } else { + dto.setLevelStartScore(levelList.get(i).getPoints()); + } + + long all = wxCUserBasicInfoMapper.findCountByScore(dto); + + levelList.get(i).setCount(all); + } + WxLevelConfig other = new WxLevelConfig(); + //没有等级的会员 + other.setLevel("无"); + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + other.setCount(wxCUserBasicInfoMapper.findCount(dto) + - levelList.stream().map(WxLevelConfig::getCount).reduce(Long::sum).orElse(0L)); + levelList.add(other); + return new ResultData(levelList); + } + + /** + * 会员手机品牌 + * @param tenantId + * @param startdate + * @param enddate + * @return + */ + private ResultData getMobileBrandAnalysis(String tenantId, String startdate, String enddate) { + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + Date startTime = DateUtils.stringToDate(startdate + " 00:00:00"); + Date endTime = DateUtils.stringToDate(enddate + " 23:59:59"); + dto.setStartTime(startTime); + dto.setEndTime(endTime); + long total = wxCUserBasicInfoMapper.findCount(dto); + List tagList = new ArrayList<>(); + EnumTag[] tags = {EnumTag.ID_49, + EnumTag.ID_50, + EnumTag.ID_51, + EnumTag.ID_52, + EnumTag.ID_53, + EnumTag.ID_54}; + for (int i = 0; i < tags.length; i++) { + WxTags tag = new WxTags(); + tag.setName(tags[i].getMessage()); + tag.setCount(wxCUserTagsMapper.countUser(JSON.toJSONString(tags[i].getCode()), tenantId, startTime, endTime)); + tagList.add(tag); + total -= tag.getCount(); + } + + WxTags tag = new WxTags(); + tag.setName("暂未获取"); + tag.setCount(total); + tagList.add(tag); + return new ResultData(tagList); + } + + /** + * 会员活跃度 + * @param tenantId + * @param startdate + * @param enddate + * @return + */ + private ResultData getMemActivity(String tenantId, String startdate, String enddate) { + WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); + dto.setTenantId(tenantId); + Date startTime = DateUtils.stringToDate(startdate + " 00:00:00"); + Date endTime = DateUtils.stringToDate(enddate + " 23:59:59"); + dto.setStartTime(startTime); + dto.setEndTime(endTime); + long total = wxCUserBasicInfoMapper.findCount(dto); + List tagList = new ArrayList<>(); + EnumTag[] tags = { + EnumTag.ID_112, + EnumTag.ID_111, + EnumTag.ID_110 + }; + for (int i = 0; i < tags.length; i++) { + WxTags tag = new WxTags(); + tag.setName(tags[i].getMessage()); + tag.setCount(wxCUserTagsMapper.countUser(JSON.toJSONString(tags[i].getCode()), tenantId, startTime, endTime)); + tagList.add(tag); + total -= tag.getCount(); + } + WxTags tag = new WxTags(); + tag.setName("休眠"); + tag.setCount(total); + tagList.add(tag); + return new ResultData(tagList); + } + + /** + * 卡营销数据 + * @param paramsMap + * @param startdate + * @param enddate + * @return + */ + private ResultData getSaleCardAnalysis(Map paramsMap, String startdate, String enddate) { + WxCoupon wxCoupon = new WxCoupon(); + + //默认时间本月第一天,截止到当天 + if (StringUtils.isEmpty(paramsMap.get("startdate"))) { + Calendar c = Calendar.getInstance(); + c.add(Calendar.MONTH, 0); + c.set(Calendar.DAY_OF_MONTH,1); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + wxCoupon.setStartdate(c.getTime()); + }else{ + Date startTime = DateUtils.stringToDate(startdate); + wxCoupon.setStartdate(startTime); + } + if (StringUtils.isEmpty(paramsMap.get("enddate"))) { + wxCoupon.setEnddate(new Date()); + }else{ + Date endTime = DateUtils.stringToDate(enddate, "yyyy-MM-dd HH:mm:ss"); + wxCoupon.setEnddate(endTime); + } + + Map result = new HashedMap(); + List saleMoneyList = wxCouponService.findSaleMoneyByDate(wxCoupon); + List paymentList = wxCouponService.findPaymentByDate(wxCoupon); + Map saleMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); + Map payMentMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); + + for (WxCouponStatisVo coupon:saleMoneyList){ + saleMap.put(coupon.getXtime(),coupon.getXcount()); + } + for (WxCouponStatisVo coupon:paymentList){ + payMentMap.put(coupon.getXtime(),coupon.getXcount()); + } + result.put("saleHistory",saleMap); + result.put("paymentHistory",payMentMap); + result.put("saleCardCount",wxCouponService.findSaleCardCount(wxCoupon)); + result.put("tranCount",wxCouponService.findTranCardCount(wxCoupon)); + result.put("subsidyCount",wxCouponService.findSubsidyMoney(wxCoupon)); + return new ResultData(result); + } + + /** + * 券营销数据 + * @param paramsMap + * @param startdate + * @param enddate + * @return + */ + private ResultData getSaleCouponAnalysis(Map paramsMap, String startdate, String enddate) { + WxCoupon wxCoupon = new WxCoupon(); + Map result = new HashedMap(); + + //默认时间本月第一天,截止到当天 + if (StringUtils.isEmpty(paramsMap.get("startdate"))) { + Calendar c = Calendar.getInstance(); + c.add(Calendar.MONTH, 0); + c.set(Calendar.DAY_OF_MONTH,1); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + wxCoupon.setStartdate(c.getTime()); + }else{ + Date startTime = DateUtils.stringToDate(startdate); + wxCoupon.setStartdate(startTime); + } + if (StringUtils.isEmpty(paramsMap.get("enddate"))) { + wxCoupon.setEnddate(new Date()); + }else{ + Date endTime = DateUtils.stringToDate(enddate, "yyyy-MM-dd HH:mm:ss"); + wxCoupon.setEnddate(endTime); + } + List orderCountList = wxCouponService.findCouponOrderCount(wxCoupon); + List paymentCountList = wxCouponService.findCouponPaymentCount(wxCoupon); + List priceCouponSaleCountList = wxCouponService.priceCouponSaleCount(wxCoupon); + List priceCouponPaymentCountList = wxCouponService.priceCouponPaymentCount(wxCoupon); + + Map orderCountMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); + Map paymentCountMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); + Map priceCouponSaleCountMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); + Map priceCouponPaymentCountMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); + + for (WxCouponStatisVo coupon:orderCountList){ + orderCountMap.put(coupon.getXtime(),coupon.getXcount()); + } + for (WxCouponStatisVo coupon:paymentCountList){ + paymentCountMap.put(coupon.getXtime(),coupon.getXcount()); + } + for (WxCouponStatisVo coupon:priceCouponSaleCountList){ + priceCouponSaleCountMap.put(coupon.getXtime(),coupon.getXcount()); + } + for (WxCouponStatisVo coupon:priceCouponPaymentCountList){ + priceCouponPaymentCountMap.put(coupon.getXtime(),coupon.getXcount()); + } + result.put("orderCountList",orderCountMap); + result.put("paymentCountList",paymentCountMap); + result.put("priceCouponSaleCountList",priceCouponSaleCountMap); + result.put("priceCouponPaymentCountList",priceCouponPaymentCountMap); + + result.put("sumPriceSaleMoney",wxCouponService.findSumPriceSaleMoney(wxCoupon)); + result.put("sumPricePayMent",wxCouponService.findSumPricePayMent(wxCoupon)); + result.put("sumSubsidyMoney",wxCouponService.findSumSubsidyMoney(wxCoupon)); + return new ResultData(result); + } + + /** + * 砍价营销数据 + * @param paramsMap + * @param tenantId + * @param startdate + * @param enddate + * @return + */ + private ResultData getSalePressAnalysis(Map paramsMap, String tenantId, String startdate, String enddate) { + WxCoupon wxCoupon = new WxCoupon(); + Map result = new HashedMap(); + + //默认时间本月第一天,截止到当天 + if (StringUtils.isEmpty(paramsMap.get("startdate"))) { + Calendar c = Calendar.getInstance(); + c.add(Calendar.MONTH, 0); + c.set(Calendar.DAY_OF_MONTH,1); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + wxCoupon.setStartdate(c.getTime()); + }else{ + Date startTime = DateUtils.stringToDate(startdate); + wxCoupon.setStartdate(startTime); + } + if (StringUtils.isEmpty(paramsMap.get("enddate"))) { + wxCoupon.setEnddate(new Date()); + }else{ + Date endTime = DateUtils.stringToDate(enddate, "yyyy-MM-dd HH:mm:ss"); + wxCoupon.setEnddate(endTime); + } + List pressSendHistory = wxCouponService.pressSendHistory(wxCoupon); + List pressSuccHistory = wxCouponService.pressSuccHistory(wxCoupon); + List pressPaymentHistory = wxCouponService.pressPaymentHistory(wxCoupon); + + Map pressSendHistoryMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); + Map pressSuccHistoryMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); + Map pressPaymentHistoryMap = getDateMap(wxCoupon.getStartdate(),wxCoupon.getEnddate()); + + for (WxCouponStatisVo coupon:pressSendHistory){ + pressSendHistoryMap.put(coupon.getXtime(),coupon.getXcount()); + } + for (WxCouponStatisVo coupon:pressSuccHistory){ + pressSuccHistoryMap.put(coupon.getXtime(),coupon.getXcount()); + } + for (WxCouponStatisVo coupon:pressPaymentHistory){ + pressPaymentHistoryMap.put(coupon.getXtime(),coupon.getXcount()); + } + result.put("pressSendHistory",pressSendHistoryMap); + result.put("pressSuccHistory",pressSuccHistoryMap); + result.put("pressPaymentHistory",pressPaymentHistoryMap); + + wxCoupon.setTenantId(tenantId); + result.put("pressSuccRate",wxCouponService.pressSuccRate(wxCoupon)); + result.put("sumJoin",wxCouponService.sumJoin(wxCoupon)); + return new ResultData(result); + } + + /** + * 拼团营销数据 + * @param paramsMap + * @param tenantId + * @param startdate + * @return + */ + private ResultData getSaleGroupAnalysis(Map paramsMap, String tenantId, String startdate) { + Map params = new HashMap<>(); + params.put("tenantId", tenantId); + //默认时间本月第一天,截止到当天 + Map result = new HashMap<>(); + Date startTime = new Date(); + Date endTime = startTime; + if (StringUtils.isEmpty(paramsMap.get("startdate"))) { + Calendar c = Calendar.getInstance(); + c.add(Calendar.MONTH, 0); + c.set(Calendar.DAY_OF_MONTH, 1); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + startTime = c.getTime(); + params.put("startdate", startTime); + } else { + startTime = DateUtils.stringToDate(startdate + " 00:00:00"); + params.put("startdate", startTime); + } + if (StringUtils.isEmpty(paramsMap.get("enddate"))) { + params.put("enddate", endTime); + } else { + endTime = DateUtils.stringToDate(paramsMap.get("enddate") + " 23:59:59", "yyyy-MM-dd HH:mm:ss"); + params.put("enddate", paramsMap.get("enddate") + " 23:59:59"); + } + List> successlist = wxOrderGroupMapper.queryOrderGroupSuccessCountAndTime(params); + List> verifyList = wxOrderGroupMapper.queryOrderGroupVerifyCountAndTime(params); + + Map successMap = getDateMap(startTime, endTime); + Map verifyMap = getDateMap(startTime, endTime); + + long successCount = wxOrderGroupMapper.queryOrderGroupSuccessCount(params); + long groupCount = wxOrderGroupMapper.queryOrderGroupCount(params); + long peopleCount = wxOrderGroupMapper.queryOrderGroupPeopleCount(params); + double transferRatio = 0; + if (groupCount > 0) { + double transfer = (double) successCount / groupCount * 100; + transferRatio = new BigDecimal(transfer).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + } + + Map successListMap = successlist.parallelStream().collect(Collectors.toMap(x -> { + return x.get("time").toString(); + }, x -> { + return x.get("total").toString(); + })); + + Map verifyListMap = verifyList.parallelStream().collect(Collectors.toMap(x -> { + return x.get("time").toString(); + }, x -> { + return x.get("total").toString(); + })); + + successMap.putAll(successListMap); + verifyMap.putAll(verifyListMap); + + result.put("successList", successMap); + result.put("verifyList", verifyMap); - return new ResultData(result); + result.put("successCount", successCount); + result.put("groupCount", groupCount); + result.put("peopleCount", peopleCount); + result.put("transferRatio", transferRatio); + + return new ResultData(result); + } + + /** + * 车流数据 + * @param tenantId + * @return + */ + private ResultData getCarMonthly(String tenantId) { + String startdate; + HashMap datamap = new HashMap<>(); + HashMap params = new HashMap<>(); + params.put("tenantId", tenantId); + params.put("cmdType", EnumCarCmd.CAR_ETCP_CALLBACK_PARK_IN.getCode()); + startdate = DateUtils.getTimeBefore(30, new Date()); + String systemTime = DateUtils.getSystemTime("yyyy-MM-dd"); + + List tjTimeList = DateUtils.getTjTimeList(startdate, systemTime, "0"); + + params.put("startdate", startdate + " 00:00:00"); + params.put("enddate", systemTime + " 23:59:59"); + + List> historylist = wxCarCmdLogMapper.queryHistory(params); + + Map collect = historylist.stream().collect(Collectors.toMap(m -> { + return m.get("create_date"); + }, m -> { + return m.get("carcount"); + })); + + Map historymap = new LinkedHashMap<>(); + for (String date : tjTimeList) { + Object o = collect.get(date); + if (o == null) { + historymap.put(date.substring(5).replace("-", "/"), 0L); + } else { + historymap.put(date.substring(5).replace("-", "/"), o); + } } + datamap.put("history", historymap); + return new ResultData(datamap); + } + /** + * 昨日解单率 + * @param tenantId + * @return + */ + private ResultData getYesterdayTradeRate(String tenantId) { + HashMap datamap = new HashMap<>(); + WxMerchant wxMerchant = new WxMerchant(); + wxMerchant.setTenantId(tenantId); + wxMerchant.setStatus(1); + List merchants = wxMerchantMapper.findList(wxMerchant); + WxMerchantTradeDaily wxMerchantTradeDaily = new WxMerchantTradeDaily(); + wxMerchantTradeDaily.setTenantId(tenantId); + String reportdate = DateUtils.getTimeBefore(1, new Date()); + wxMerchantTradeDaily.setReportDate(reportdate); + List tradelist = wxMerchantTradeDailyMapper.findList(wxMerchantTradeDaily); + int merchantsize = merchants.size(); + int tradesize = tradelist.size(); + if (merchantsize > 0 && tradesize > 0) { + double shsbld = ((double) tradesize / merchantsize) * 100; + double shsbl = new BigDecimal(shsbld).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + datamap.put("shsbl", shsbl); + } else { + datamap.put("shsbl", 0); + } + int shsbjg = tradelist.stream().mapToInt(WxMerchantTradeDaily::getTradeAmt).sum(); + datamap.put("shsbjg", shsbjg); + return new ResultData(datamap); + } + /** + * 出租率 + * @param tenantId + */ + private ResultData getRentRate(String tenantId) { + HashMap datamap = new HashMap<>(); + WxShop wxShop = new WxShop(); + wxShop.setTenantId(tenantId); + wxShop.setStatus(EnumShopStatus.RENT.getCode()); + List yczlist = wxShopMapper.findList(wxShop); + wxShop.setStatus(EnumShopStatus.NOT_RENT.getCode()); + List wczlist = wxShopMapper.findList(wxShop); + //出租与未出租 + int yczsize = yczlist.size(); + int wczsize = wczlist.size(); + int size = yczsize + wczsize; + if (size == 0) { + datamap.put("yczsl", 0); + datamap.put("wczsl", 0); + datamap.put("yczl", 0); + datamap.put("wczl", 0); + } else { + datamap.put("yczsl", yczsize); + datamap.put("wczsl", wczsize); + double yczld = ((double) yczsize / size) * 100; + double dczl = new BigDecimal(yczld).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + double wczld = ((double) wczsize / size) * 100; + double wczl = new BigDecimal(wczld).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + datamap.put("yczl", dczl); + datamap.put("wczl", wczl); + } + return new ResultData(datamap); + } + + /** + * 租金收缴率 + * @param tenantId + * @param startdate + * @param enddate + * @return + */ + private ResultData getRentMoneyRate(String tenantId, String startdate, String enddate) { + HashMap datamap = new HashMap<>(); + //租金 + Map params = new HashMap<>(); + params.put("tenantId", tenantId); + params.put("startdate", startdate + " 00:00:00"); + params.put("enddate", enddate + " 23:59:59"); + Map payinfo = wxBillRentMapper.queryPayInfo(params); + if (payinfo != null) { + BigDecimal receivepay = (BigDecimal) payinfo.get("receivepay"); + BigDecimal pay = (BigDecimal) payinfo.get("pay"); + if (receivepay.doubleValue() > 0) { + BigDecimal divide = pay.divide(receivepay, 2, BigDecimal.ROUND_HALF_UP); + double zjcjl = divide.multiply(new BigDecimal(100)).doubleValue(); + datamap.put("ysje", receivepay); + datamap.put("ssje", pay); + datamap.put("zjsjl", zjcjl); + } else { + datamap.put("ysje", 0); + datamap.put("ssje", 0); + datamap.put("zjsjl", 0); + } + } else { + datamap.put("ysje", 0); + datamap.put("ssje", 0); + datamap.put("zjsjl", 0); + } return new ResultData(datamap); }