diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/datatower/WxChartDataController.java b/mallinkAdmin/src/main/java/com/iformall/controller/datatower/WxChartDataController.java index 21416f831..79162b68b 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/datatower/WxChartDataController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/datatower/WxChartDataController.java @@ -1,9 +1,13 @@ package com.iformall.controller.datatower; import com.iformall.annotation.SystemControllerLog; +import com.iformall.common.ErrorCode; import com.iformall.common.ResultData; import com.iformall.controller.base.BaseController; +import com.iformall.domain.dto.WxCUserBasicInfoDto; import com.iformall.domain.po.base.TenantEntity; +import com.iformall.enums.EnumAppPlat; +import com.iformall.enums.EnumChartType; import com.iformall.service.WxChartDataService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -15,6 +19,8 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.util.Calendar; +import java.util.HashMap; import java.util.Map; @Api(description = "图表") @@ -79,4 +85,28 @@ public class WxChartDataController extends BaseController { return data; } + @GetMapping("queryWeekCount") + @ApiOperation("查询用户增长 总数,今日,近一周") + @SystemControllerLog(description = "会员首页-报表数据-查询用户增长") + public ResultData queryWeekCount(Integer chartType) { + logger.info("[" + getIpAddr() + "] WxChartDataController::queryWeekCount chartType: " + chartType); + EnumChartType enumChartType = EnumChartType.getEnum(chartType); + if(enumChartType == null){ + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL,"url不能为空"); + } + return wxChartDataService.queryWeekCount(enumChartType,getTenantInfo()); + } + + @GetMapping("queryMonthVos") + @ApiOperation("查询用户增长 总数,今日,近一周") + @SystemControllerLog(description = "会员首页-报表数据-查询用户增长") + public ResultData queryMonthVos(Integer chartType) { + logger.info("[" + getIpAddr() + "] WxChartDataController::queryMonthVos chartType: " + chartType); + EnumChartType enumChartType = EnumChartType.getEnum(chartType); + if(enumChartType == null){ + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL,"url不能为空"); + } + return wxChartDataService.queryMonthVos(enumChartType,getTenantInfo()); + } + } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCUserBasicInfo.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCUserBasicInfo.java index 315697fe4..b0c48ef81 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCUserBasicInfo.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCUserBasicInfo.java @@ -238,6 +238,8 @@ public class WxCUserBasicInfo extends TenantEntityWithoutFinalTenantId { } public void undateFinalTenantId(TenantEntity tenantEntity){ + setTenantId(tenantEntity.getTenantId()); + setParentTenantId(tenantEntity.getParentTenantId()); setFinalTenantId(tenantEntity.getTenantId()); if(StringUtils.isNotBlank(tenantEntity.getParentTenantId())){ setFinalTenantId(tenantEntity.getParentTenantId()); diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxChartDataMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxChartDataMapper.java index 8580e6e40..a54cc8a3a 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxChartDataMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxChartDataMapper.java @@ -9,4 +9,7 @@ public interface WxChartDataMapper extends CommonMapper List findList(WxChartDataEntity chartData); + Long findSumResult(WxChartDataEntity chartData); + + } diff --git a/mallinkService/src/main/java/com/iformall/service/WxChartDataService.java b/mallinkService/src/main/java/com/iformall/service/WxChartDataService.java index a48e968ad..73fa73887 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxChartDataService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxChartDataService.java @@ -1,11 +1,30 @@ package com.iformall.service; import com.iformall.common.ResultData; +import com.iformall.domain.po.WxChartDataEntity; +import com.iformall.domain.po.base.TenantEntity; +import com.iformall.enums.EnumChartType; import java.util.Map; public interface WxChartDataService { + /** + * 获取昨日, + * 近一周 + * @param + * @return + */ + ResultData queryWeekCount(EnumChartType chartType, TenantEntity tenantEntity); + + /** + * 获取周统计, + * 月统计 + * @param + * @return + */ + ResultData queryMonthVos(EnumChartType chartType, TenantEntity tenantEntity); + ResultData queryData(Map params); } 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 83c07ad41..75885fd39 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxChartServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxChartServiceImpl.java @@ -38,8 +38,102 @@ import java.util.stream.Collectors; @Service public class WxChartServiceImpl implements WxChartDataService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + @Autowired + WxChartDataMapper wxChartDataMapper; + + @Override + public ResultData queryWeekCount(EnumChartType chartType, TenantEntity tenantEntity) { + Date now = new Date(); + String weekStartdate = DateUtils.getTimeBefore(7, now); + String yesterdayDate = DateUtils.getTimeBefore(1, now); + WxChartDataEntity ChartDataEntity = new WxChartDataEntity(); + ChartDataEntity.updateTenantInfo(tenantEntity); + ChartDataEntity.setType(chartType.getCode()); + ChartDataEntity.setStartTime(DateUtils.stringToDate(yesterdayDate)); + Long yesterdayCount = wxChartDataMapper.findSumResult(ChartDataEntity); + ChartDataEntity.setStartTime(DateUtils.stringToDate(weekStartdate)); + Long weekCount = wxChartDataMapper.findSumResult(ChartDataEntity); + Map map = new HashMap<>(); + map.put("yesterdayCount", yesterdayCount); + map.put("weekCount", weekCount); + return new ResultData(map); + } + + @Override + public ResultData queryMonthVos(EnumChartType chartType, TenantEntity tenantEntity) { + Date now = new Date(); + String monthStartdate = DateUtils.getTimeBefore(30, now); + String yesyeweekDate = DateUtils.getTimeBefore(8, now);//计算周同比时间 + String weekStartdate = DateUtils.getTimeBefore(7, now); + String yesyesDate = DateUtils.getTimeBefore(2, now);//计算日同比时间 + String yesterdayDate = DateUtils.getTimeBefore(1, now); + List tjTimeList = DateUtils.getTjTimeList(monthStartdate, yesterdayDate, "0"); + + WxChartDataEntity ChartDataEntity = new WxChartDataEntity(); + ChartDataEntity.updateTenantInfo(tenantEntity); + ChartDataEntity.setType(chartType.getCode()); + ChartDataEntity.setStartTime(DateUtils.stringToDate(monthStartdate)); + ChartDataEntity.setEndTime(DateUtils.stringToDate(yesterdayDate)); + List list = wxChartDataMapper.findList(ChartDataEntity); + + Map collect = list.stream().collect(Collectors.toMap(m -> { + return new SimpleDateFormat("yyyy-MM-dd").format(m.getQuerytime()); + }, m -> { + return m.getResult(); + })); + + List weekVos = new ArrayList<>(); + List monthVos = new ArrayList<>(); + long yesterdayCount = 0l,yesyesCount = 0l,yesWeekCount = 0l; + for (String date : tjTimeList) { + UserStructureVo vo = new UserStructureVo(); + vo.setName(date.substring(5).replace("-", "/")); + String result = collect.get(date); + if(StringUtils.isBlank(result)){ + vo.setCount(0l); + }else{ + vo.setCount(Long.parseLong(result)); + } + if(weekStartdate.equals(date) || (DateUtils.stringToDate(weekStartdate).before(DateUtils.stringToDate(date)))){ + weekVos.add(vo); + } + if(yesterdayDate.equals(date)){//昨日 + yesterdayCount = vo.getCount(); + } + if(yesyesDate.equals(date)){//昨日的昨日(计算日环比) + yesyesCount = vo.getCount(); + } + if(yesyeweekDate.equals(date)){//一周前的昨日(计算周同比) + yesWeekCount = vo.getCount(); + } + monthVos.add(vo); + } + + NumberFormat nf = NumberFormat.getPercentInstance(); + nf.setMinimumFractionDigits(2); + String dayPercentage = "--"; + if (yesyesCount > 0) { + Long count = yesterdayCount - yesyesCount; + dayPercentage = nf.format(count.doubleValue() / new Double(yesyesCount).doubleValue()); + } + String weekPercentage = "--"; + if (yesWeekCount > 0) { + Long count = yesterdayCount - yesWeekCount; + weekPercentage = nf.format(count.doubleValue() / new Double(yesWeekCount).doubleValue()); + } + + Map map = new HashMap<>(); + map.put("weekVos", weekVos); + map.put("monthVos", monthVos); + map.put("dayPercentage", dayPercentage);//日环比 + map.put("weekPercentage", weekPercentage);//周同比 + return new ResultData(map); + } + + @Autowired private WxMallService wxMallService; @Autowired @@ -93,8 +187,7 @@ public class WxChartServiceImpl implements WxChartDataService { WxBillOtherMapper wxBillOtherMapper; @Autowired WxBillAllMapper wxBillAllMapper; - @Autowired - WxChartDataMapper wxChartDataMapper; + @Lazy @Autowired @@ -132,7 +225,8 @@ public class WxChartServiceImpl implements WxChartDataService { @Autowired private WxShopService wxShopService; - + + @Override public ResultData queryData(Map paramsMap) { String tenantId = paramsMap.get("tenantId"); diff --git a/mallinkService/src/main/resources/mapper/wxChartDataMapper.xml b/mallinkService/src/main/resources/mapper/wxChartDataMapper.xml index d6729fe10..3375a2f3e 100644 --- a/mallinkService/src/main/resources/mapper/wxChartDataMapper.xml +++ b/mallinkService/src/main/resources/mapper/wxChartDataMapper.xml @@ -33,6 +33,10 @@ and `type` = #{type} + + and `querytime` = #{querytime} + + and `querytime` >= #{startTime} @@ -51,4 +55,10 @@ + +