diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/controller/api/ApiRetailHomePageController.java b/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/controller/api/ApiRetailHomePageController.java index 86b03605..e0812932 100644 --- a/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/controller/api/ApiRetailHomePageController.java +++ b/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/controller/api/ApiRetailHomePageController.java @@ -181,7 +181,6 @@ public class ApiRetailHomePageController extends BaseController { */ @PostMapping("/market-dynamics") public AjaxResult getMarketDynamics(@RequestBody MarketDynamicsQueryDateParam param) { - retailAchieveService.getMarketDynamics(param); - return AjaxResult.success(); + return AjaxResult.success(retailAchieveService.getMarketDynamics(param)); } } diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/mapper/CuMemberRetailRangeMapper.java b/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/mapper/CuMemberRetailRangeMapper.java index b80d0219..451389fe 100644 --- a/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/mapper/CuMemberRetailRangeMapper.java +++ b/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/mapper/CuMemberRetailRangeMapper.java @@ -2,8 +2,10 @@ package com.hzs.retail.member.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.hzs.common.domain.member.achieve.CuMemberRetailRange; +import com.hzs.retail.member.param.MarketDynamicsQueryDateParam; import com.hzs.retail.member.vo.CuMemberRetailAchieveVO; import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsDetailVO; +import com.hzs.retail.member.vo.MarketDynamicsDetailVO; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -174,6 +176,8 @@ public interface CuMemberRetailRangeMapper extends BaseMapper getRetailDataStatisticsDetail(CuMemberRetailAchieveVO cuMemberAchieveVO); + List getMarketDynamicsDetail(@Param("param") MarketDynamicsQueryDateParam param); + /** * 查询当天自己新增盒数 * diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/param/MarketDynamicsQueryDateParam.java b/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/param/MarketDynamicsQueryDateParam.java index 76f0c1ce..d1dd7504 100644 --- a/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/param/MarketDynamicsQueryDateParam.java +++ b/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/param/MarketDynamicsQueryDateParam.java @@ -6,6 +6,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; +import java.util.List; @Data @AllArgsConstructor @@ -17,6 +18,7 @@ import java.io.Serializable; public class MarketDynamicsQueryDateParam implements Serializable { private Long pkId; private String nowDate; + private String yesterdayDate; private String lastMonthDate; /** @@ -24,10 +26,12 @@ public class MarketDynamicsQueryDateParam implements Serializable { */ private String currentMonthTableName; /** - * + * */ private String lastMonthTableName; private String currentDayTableName; + + private List pkIdList; /** * 查询条件 (会员编号/会员姓名) */ diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/service/ICuMemberRetailAchieveService.java b/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/service/ICuMemberRetailAchieveService.java index bb6488f8..9f369375 100644 --- a/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/service/ICuMemberRetailAchieveService.java +++ b/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/service/ICuMemberRetailAchieveService.java @@ -3,6 +3,7 @@ package com.hzs.retail.member.service; import com.baomidou.mybatisplus.extension.service.IService; import com.hzs.common.domain.member.achieve.CuMemberRetailRange; import com.hzs.retail.member.param.MarketDynamicsQueryDateParam; +import com.hzs.retail.member.utils.PageResult; import com.hzs.retail.member.vo.CuMemberRetailAchieveVO; import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsDetailVO; import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsResultVO; @@ -114,5 +115,5 @@ public interface ICuMemberRetailAchieveService extends IService getMarketDynamics(MarketDynamicsQueryDateParam param); + PageResult getMarketDynamics(MarketDynamicsQueryDateParam param); } diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/service/impl/CuMemberRetailAchieveServiceImpl.java b/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/service/impl/CuMemberRetailAchieveServiceImpl.java index 70609c88..50d4a9ce 100644 --- a/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/service/impl/CuMemberRetailAchieveServiceImpl.java +++ b/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/service/impl/CuMemberRetailAchieveServiceImpl.java @@ -19,6 +19,7 @@ import com.hzs.retail.member.mapper.CuMemberRetailRangeMapper; import com.hzs.retail.member.param.MarketDynamicsQueryDateParam; import com.hzs.retail.member.service.ICuMemberRetailAchieveService; import com.hzs.retail.member.utils.DataStatisticsUtil; +import com.hzs.retail.member.utils.PageResult; import com.hzs.retail.member.vo.CuMemberRetailAchieveVO; import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsDetailVO; import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsResultVO; @@ -307,18 +308,20 @@ public class CuMemberRetailAchieveServiceImpl extends ServiceImpl getMarketDynamics(MarketDynamicsQueryDateParam param) { + public PageResult getMarketDynamics(MarketDynamicsQueryDateParam param) { + Long pkMember = SecurityUtils.getUserId(); + Integer systemType = SecurityUtils.getSystemType(); + DataStatisticsUtil.setQueryDateParam(param); param.setCurrentDayTableName(getDayTableName()); - param.setCurrentMonthTableName(getDayTableName(param.getNowDate())); - param.setCurrentDayTableName(getDayTableName(param.getLastMonthDate())); + param.setCurrentMonthTableName(getDayTableName(param.getYesterdayDate())); + param.setLastMonthTableName(getDayTableName(param.getLastMonthDate())); log.info("MarketDynamicsQueryDateParam : {}", JSONUtil.toJsonStr(param)); - return Collections.emptyList(); + List pkMemberList = baseMapper.selectDirectPushByPkMember(pkMember, systemType); + param.setPkIdList(pkMemberList); + List detailVOList = baseMapper.getMarketDynamicsDetail(param); + log.info("detailVOList : {}", JSONUtil.toJsonStr(detailVOList)); + return DataStatisticsUtil.getMarketDynamicsAssemblyData(detailVOList, param); } private String getDayTableName(String localDate) { CuMemberSettlePeriod cuMemberSettlePeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(localDate); if(ObjectUtil.isEmpty(cuMemberSettlePeriod)){ - return null; + return TableNameConstants.CU_MEMBER_RETAIL_RANGE; } int period = cuMemberSettlePeriod.getPkId(); return TableNameConstants.CU_MEMBER_RETAIL_RANGE + period; diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/utils/DataStatisticsUtil.java b/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/utils/DataStatisticsUtil.java index f28e6207..5de773cb 100644 --- a/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/utils/DataStatisticsUtil.java +++ b/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/utils/DataStatisticsUtil.java @@ -1,11 +1,13 @@ package com.hzs.retail.member.utils; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.hzs.common.core.enums.EYesNo; import com.hzs.common.domain.member.base.CuMember; import com.hzs.retail.member.param.MarketDynamicsQueryDateParam; import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsDetailVO; import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsResultVO; +import com.hzs.retail.member.vo.MarketDynamicsDetailVO; import java.math.BigDecimal; import java.math.RoundingMode; @@ -17,6 +19,7 @@ import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; /** * 用户统计数据工具 @@ -49,7 +52,8 @@ public class DataStatisticsUtil { calcDetailVOTotalField(detailVOList, pkId); addVirtualBranch(detailVOList, pkId); CuMemberRetailDataStatisticsDetailVO total = getDetailVOByPKID(detailVOList, pkId); - CuMemberRetailDataStatisticsDetailVO bigRange = getBigRangeDetailVO(detailVOList, pkId); + CuMemberRetailDataStatisticsDetailVO bigRangeBox = getBigRangeBoxDetailVO(detailVOList, pkId); + CuMemberRetailDataStatisticsDetailVO bigRangePv = getBigRangePVDetailVO(detailVOList, pkId); if(EYesNo.NO.getIntValue() == cuMember.getIsActivate()){ // 昨日非激活 排除昨日日结表数据 excludeDailySettlementData(detailVOList); @@ -57,19 +61,19 @@ public class DataStatisticsUtil { // 排除注水数据 excludeWaterInjectionData(detailVOList, pkId); } - Integer smallRangeTotalBoxNum = total.getTotalBoxNum() - bigRange.getTotalBoxNum(); + Integer smallRangeTotalBoxNum = total.getTotalBoxNum() - bigRangeBox.getTotalBoxNum(); if(smallRangeTotalBoxNum < 0){ smallRangeTotalBoxNum = 0; } - BigDecimal smallRangeTotalPv = total.getTotalPv().subtract(bigRange.getTotalPv()); + BigDecimal smallRangeTotalPv = total.getTotalPv().subtract(bigRangePv.getTotalPv()); if(smallRangeTotalPv.compareTo(BigDecimal.ZERO) < 0){ smallRangeTotalPv = BigDecimal.ZERO; } return CuMemberRetailDataStatisticsResultVO.builder() .totalBoxNum(total.getTotalBoxNum()) .totalPv(formatPV(total.getTotalPv())) - .bigRangeTotalBoxNum(bigRange.getTotalBoxNum()) - .bigRangeTotalPv(formatPV(bigRange.getTotalPv())) + .bigRangeTotalBoxNum(bigRangeBox.getTotalBoxNum()) + .bigRangeTotalPv(formatPV(bigRangePv.getTotalPv())) .smallRangeTotalBoxNum(smallRangeTotalBoxNum) .smallRangeTotalPv(formatPV(smallRangeTotalPv)) .build(); @@ -219,6 +223,23 @@ public class DataStatisticsUtil { return detailVOList.parallelStream().filter(o -> o.getPkId().equals(pkId)).findFirst().orElse(null); } + /** + * 组装市场动态列表数据 + * @param detailVOList + */ + public static PageResult getMarketDynamicsAssemblyData(List detailVOList, MarketDynamicsQueryDateParam param){ + if(StrUtil.isNotEmpty(param.getKeyWords())){ + detailVOList = detailVOList.parallelStream().filter(o -> param.getKeyWords().contains(o.getMemberCode()) || param.getKeyWords().contains(o.getMemberName())).collect(Collectors.toList()); + } + MarketDynamicsDetailVO bigRange = detailVOList.parallelStream() + .max(Comparator.comparingInt(MarketDynamicsDetailVO::getTotalBoxNum)) + .orElse(null); + detailVOList = detailVOList.parallelStream().filter(o -> !o.getPkId().equals(bigRange.getPkId())).collect(Collectors.toList()); + PageResult result = MemoryPageUtils.paginate(detailVOList, param.getPageNum(), param.getPageSize()); + result.setBigRange(bigRange); + return result; + } + private static Integer getMaxTotalBoxNum(List detailVOList) { return detailVOList.parallelStream() .map(CuMemberRetailDataStatisticsDetailVO::getTotalBoxNum) @@ -226,12 +247,18 @@ public class DataStatisticsUtil { .max(Integer::compare) .orElse(null); } - private static CuMemberRetailDataStatisticsDetailVO getBigRangeDetailVO(List detailVOList, Long pkId){ - return detailVOList.parallelStream() + private static CuMemberRetailDataStatisticsDetailVO getBigRangeBoxDetailVO(List detailVOList, Long pkId){ + return detailVOList.stream() .filter(vo -> vo.getTotalBoxNum() != null && !vo.getPkId().equals(pkId)) .max(Comparator.comparingInt(CuMemberRetailDataStatisticsDetailVO::getTotalBoxNum)) .orElse(null); } + private static CuMemberRetailDataStatisticsDetailVO getBigRangePVDetailVO(List detailVOList, Long pkId){ + return detailVOList.stream() + .filter(vo -> vo.getTotalBoxNum() != null && !vo.getPkId().equals(pkId)) + .max(Comparator.comparing(CuMemberRetailDataStatisticsDetailVO::getTotalPv)) + .orElse(null); + } public static BigDecimal formatPV(BigDecimal pv){ return pv.divide( new BigDecimal("10000"), @@ -242,9 +269,11 @@ public class DataStatisticsUtil { public static void setQueryDateParam(MarketDynamicsQueryDateParam param){ LocalDate.now(ZoneId.of("Asia/Shanghai")); LocalDate currentDate = LocalDate.now(); + LocalDate yesterdayDate = currentDate.minusDays(1); LocalDate previousMonthDate = currentDate.minusMonths(1); LocalDate lastDayOfPreviousMonth = previousMonthDate.with(TemporalAdjusters.lastDayOfMonth()); param.setNowDate(currentDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); + param.setYesterdayDate(yesterdayDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); param.setLastMonthDate(lastDayOfPreviousMonth.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); // System.out.println("当前日期: " + currentDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); // System.out.println("上一个月最后一天: " + lastDayOfPreviousMonth.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/utils/MemoryPageUtils.java b/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/utils/MemoryPageUtils.java new file mode 100644 index 00000000..e42482b1 --- /dev/null +++ b/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/utils/MemoryPageUtils.java @@ -0,0 +1,24 @@ +package com.hzs.retail.member.utils; + +import java.util.ArrayList; +import java.util.List; + +public class MemoryPageUtils { + public static PageResult paginate(List dataList, int pageNum, int pageSize) { + // 校验参数有效性 + if (pageNum <= 0) pageNum = 1; + if (pageSize <= 0) pageSize = 10; // 默认每页10条 + + int total = dataList.size(); + int start = (pageNum - 1) * pageSize; + if (start >= total) { + return new PageResult<>(total, new ArrayList<>()); + } + + // 计算结束索引(避免超出列表长度) + int end = Math.min(start + pageSize, total); + List pageData = dataList.subList(start, end); + + return new PageResult<>(total, pageData); + } +} diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/utils/PageResult.java b/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/utils/PageResult.java new file mode 100644 index 00000000..95ef7329 --- /dev/null +++ b/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/utils/PageResult.java @@ -0,0 +1,20 @@ +package com.hzs.retail.member.utils; + +import com.hzs.retail.member.vo.MarketDynamicsDetailVO; +import lombok.Data; + +import java.util.List; + +@Data +public class PageResult { + private long total; + private List rows; + private MarketDynamicsDetailVO bigRange; + + public PageResult(long total, List rows) { + this.total = total; + this.rows = rows; + } + + // getter/setter 省略 +} diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/vo/CuMemberRetailDataStatisticsDetailVO.java b/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/vo/CuMemberRetailDataStatisticsDetailVO.java index cd21cefc..55c261d1 100644 --- a/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/vo/CuMemberRetailDataStatisticsDetailVO.java +++ b/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/vo/CuMemberRetailDataStatisticsDetailVO.java @@ -105,5 +105,13 @@ public class CuMemberRetailDataStatisticsDetailVO implements Serializable { */ private Integer smallBoxNum; + @Override + public CuMemberRetailDataStatisticsDetailVO clone() { + try { + return (CuMemberRetailDataStatisticsDetailVO) super.clone(); + } catch (CloneNotSupportedException e) { + throw new AssertionError(); + } + } } diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/vo/MarketDynamicsDetailVO.java b/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/vo/MarketDynamicsDetailVO.java index 794ed51f..fc0ac86b 100644 --- a/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/vo/MarketDynamicsDetailVO.java +++ b/bd-business/bd-business-member/src/main/java/com/hzs/retail/member/vo/MarketDynamicsDetailVO.java @@ -17,6 +17,10 @@ import java.math.BigDecimal; * 市场动态列表对象 */ public class MarketDynamicsDetailVO implements Serializable { + /** + * 用户ID + */ + private Long pkId; /** * 用户编号 */ @@ -28,11 +32,13 @@ public class MarketDynamicsDetailVO implements Serializable { /** * 结算等级 */ - private String pkSettleGrade; + private Integer pkSettleGrade; + private String gradeName; /** * 真实奖衔 */ - private String pkAwards; + private Integer pkAwards; + private String awardsName; /** * 今日业绩 @@ -71,4 +77,9 @@ public class MarketDynamicsDetailVO implements Serializable { * 上月盒数 */ private Integer lastMonthBoxNum; + + /** + * 累计消费盒数 + */ + private Integer totalBoxNum; } diff --git a/bd-business/bd-business-member/src/main/resources/mapper/member/achieve/CuMemberRetailRangeMapper.xml b/bd-business/bd-business-member/src/main/resources/mapper/member/achieve/CuMemberRetailRangeMapper.xml index c5109efa..ccbdb92e 100644 --- a/bd-business/bd-business-member/src/main/resources/mapper/member/achieve/CuMemberRetailRangeMapper.xml +++ b/bd-business/bd-business-member/src/main/resources/mapper/member/achieve/CuMemberRetailRangeMapper.xml @@ -872,4 +872,40 @@ +