Compare commits
	
		
			2 Commits
		
	
	
		
			503d993540
			...
			9d6fd9b7a8
		
	
	| Author | SHA1 | Date | 
|---|---|---|
| 
							
							
								
								 | 
						9d6fd9b7a8 | |
| 
							
							
								
								 | 
						f0a8c658f5 | 
| 
						 | 
					@ -181,7 +181,6 @@ public class ApiRetailHomePageController extends BaseController {
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    @PostMapping("/market-dynamics")
 | 
					    @PostMapping("/market-dynamics")
 | 
				
			||||||
    public AjaxResult getMarketDynamics(@RequestBody MarketDynamicsQueryDateParam param) {
 | 
					    public AjaxResult getMarketDynamics(@RequestBody MarketDynamicsQueryDateParam param) {
 | 
				
			||||||
        retailAchieveService.getMarketDynamics(param);
 | 
					        return AjaxResult.success(retailAchieveService.getMarketDynamics(param));
 | 
				
			||||||
        return AjaxResult.success();
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,8 +2,10 @@ package com.hzs.retail.member.mapper;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 | 
					import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 | 
				
			||||||
import com.hzs.common.domain.member.achieve.CuMemberRetailRange;
 | 
					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.CuMemberRetailAchieveVO;
 | 
				
			||||||
import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsDetailVO;
 | 
					import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsDetailVO;
 | 
				
			||||||
 | 
					import com.hzs.retail.member.vo.MarketDynamicsDetailVO;
 | 
				
			||||||
import org.apache.ibatis.annotations.Param;
 | 
					import org.apache.ibatis.annotations.Param;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
| 
						 | 
					@ -174,6 +176,8 @@ public interface CuMemberRetailRangeMapper extends BaseMapper<CuMemberRetailRang
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    List<CuMemberRetailDataStatisticsDetailVO> getRetailDataStatisticsDetail(CuMemberRetailAchieveVO cuMemberAchieveVO);
 | 
					    List<CuMemberRetailDataStatisticsDetailVO> getRetailDataStatisticsDetail(CuMemberRetailAchieveVO cuMemberAchieveVO);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    List<MarketDynamicsDetailVO> getMarketDynamicsDetail(@Param("param") MarketDynamicsQueryDateParam param);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 查询当天自己新增盒数
 | 
					     * 查询当天自己新增盒数
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,6 +6,7 @@ import lombok.Data;
 | 
				
			||||||
import lombok.NoArgsConstructor;
 | 
					import lombok.NoArgsConstructor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.io.Serializable;
 | 
					import java.io.Serializable;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Data
 | 
					@Data
 | 
				
			||||||
@AllArgsConstructor
 | 
					@AllArgsConstructor
 | 
				
			||||||
| 
						 | 
					@ -17,6 +18,7 @@ import java.io.Serializable;
 | 
				
			||||||
public class MarketDynamicsQueryDateParam implements Serializable {
 | 
					public class MarketDynamicsQueryDateParam implements Serializable {
 | 
				
			||||||
    private Long pkId;
 | 
					    private Long pkId;
 | 
				
			||||||
    private String nowDate;
 | 
					    private String nowDate;
 | 
				
			||||||
 | 
					    private String yesterdayDate;
 | 
				
			||||||
    private String lastMonthDate;
 | 
					    private String lastMonthDate;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
| 
						 | 
					@ -28,6 +30,8 @@ public class MarketDynamicsQueryDateParam implements Serializable {
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    private String lastMonthTableName;
 | 
					    private String lastMonthTableName;
 | 
				
			||||||
    private String currentDayTableName;
 | 
					    private String currentDayTableName;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private List<Long> pkIdList;
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 查询条件 (会员编号/会员姓名)
 | 
					     * 查询条件 (会员编号/会员姓名)
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,6 +3,7 @@ package com.hzs.retail.member.service;
 | 
				
			||||||
import com.baomidou.mybatisplus.extension.service.IService;
 | 
					import com.baomidou.mybatisplus.extension.service.IService;
 | 
				
			||||||
import com.hzs.common.domain.member.achieve.CuMemberRetailRange;
 | 
					import com.hzs.common.domain.member.achieve.CuMemberRetailRange;
 | 
				
			||||||
import com.hzs.retail.member.param.MarketDynamicsQueryDateParam;
 | 
					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.CuMemberRetailAchieveVO;
 | 
				
			||||||
import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsDetailVO;
 | 
					import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsDetailVO;
 | 
				
			||||||
import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsResultVO;
 | 
					import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsResultVO;
 | 
				
			||||||
| 
						 | 
					@ -114,5 +115,5 @@ public interface ICuMemberRetailAchieveService extends IService<CuMemberRetailRa
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    CuMemberRetailDataStatisticsResultVO getRetailDataStatisticsDetail(Long pkMember, Integer pkCountry, Integer systemType);
 | 
					    CuMemberRetailDataStatisticsResultVO getRetailDataStatisticsDetail(Long pkMember, Integer pkCountry, Integer systemType);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    List<MarketDynamicsDetailVO> getMarketDynamics(MarketDynamicsQueryDateParam param);
 | 
					    PageResult<MarketDynamicsDetailVO> getMarketDynamics(MarketDynamicsQueryDateParam param);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,6 +19,7 @@ import com.hzs.retail.member.mapper.CuMemberRetailRangeMapper;
 | 
				
			||||||
import com.hzs.retail.member.param.MarketDynamicsQueryDateParam;
 | 
					import com.hzs.retail.member.param.MarketDynamicsQueryDateParam;
 | 
				
			||||||
import com.hzs.retail.member.service.ICuMemberRetailAchieveService;
 | 
					import com.hzs.retail.member.service.ICuMemberRetailAchieveService;
 | 
				
			||||||
import com.hzs.retail.member.utils.DataStatisticsUtil;
 | 
					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.CuMemberRetailAchieveVO;
 | 
				
			||||||
import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsDetailVO;
 | 
					import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsDetailVO;
 | 
				
			||||||
import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsResultVO;
 | 
					import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsResultVO;
 | 
				
			||||||
| 
						 | 
					@ -307,18 +308,20 @@ public class CuMemberRetailAchieveServiceImpl extends ServiceImpl<CuMemberRetail
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    private String getTableName() {
 | 
					    private String getTableName() {
 | 
				
			||||||
        String localDate = LocalDate.now().minus(1, ChronoUnit.DAYS).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
 | 
					        String localDate = LocalDate.now().minus(1, ChronoUnit.DAYS).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
 | 
				
			||||||
        int period = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(localDate).getPkId();
 | 
					        CuMemberSettlePeriod cuMemberSettlePeriod =iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(localDate);
 | 
				
			||||||
        if(ObjectUtil.isEmpty(period)){
 | 
					        if(ObjectUtil.isEmpty(cuMemberSettlePeriod)){
 | 
				
			||||||
            return null;
 | 
					            return null;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        int period = cuMemberSettlePeriod.getPkId();
 | 
				
			||||||
        return TableNameConstants.CU_MEMBER_RETAIL_RANGE + period;
 | 
					        return TableNameConstants.CU_MEMBER_RETAIL_RANGE + period;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    private String getDayTableName() {
 | 
					    private String getDayTableName() {
 | 
				
			||||||
        String localDate = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
 | 
					        String localDate = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
 | 
				
			||||||
        int period = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(localDate).getPkId();
 | 
					        CuMemberSettlePeriod cuMemberSettlePeriod =iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(localDate);
 | 
				
			||||||
        if(ObjectUtil.isEmpty(period)){
 | 
					        if(ObjectUtil.isEmpty(cuMemberSettlePeriod)){
 | 
				
			||||||
            return null;
 | 
					            return null;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        int period = cuMemberSettlePeriod.getPkId();
 | 
				
			||||||
        return TableNameConstants.CU_MEMBER_RETAIL_S + period;
 | 
					        return TableNameConstants.CU_MEMBER_RETAIL_S + period;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -586,19 +589,26 @@ public class CuMemberRetailAchieveServiceImpl extends ServiceImpl<CuMemberRetail
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public List<MarketDynamicsDetailVO> getMarketDynamics(MarketDynamicsQueryDateParam param) {
 | 
					    public PageResult<MarketDynamicsDetailVO> getMarketDynamics(MarketDynamicsQueryDateParam param) {
 | 
				
			||||||
 | 
					        Long pkMember = SecurityUtils.getUserId();
 | 
				
			||||||
 | 
					        Integer systemType = SecurityUtils.getSystemType();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        DataStatisticsUtil.setQueryDateParam(param);
 | 
					        DataStatisticsUtil.setQueryDateParam(param);
 | 
				
			||||||
        param.setCurrentDayTableName(getDayTableName());
 | 
					        param.setCurrentDayTableName(getDayTableName());
 | 
				
			||||||
        param.setCurrentMonthTableName(getDayTableName(param.getNowDate()));
 | 
					        param.setCurrentMonthTableName(getDayTableName(param.getYesterdayDate()));
 | 
				
			||||||
        param.setCurrentDayTableName(getDayTableName(param.getLastMonthDate()));
 | 
					        param.setLastMonthTableName(getDayTableName(param.getLastMonthDate()));
 | 
				
			||||||
        log.info("MarketDynamicsQueryDateParam : {}", JSONUtil.toJsonStr(param));
 | 
					        log.info("MarketDynamicsQueryDateParam : {}", JSONUtil.toJsonStr(param));
 | 
				
			||||||
        return Collections.emptyList();
 | 
					        List<Long> pkMemberList = baseMapper.selectDirectPushByPkMember(pkMember, systemType);
 | 
				
			||||||
 | 
					        param.setPkIdList(pkMemberList);
 | 
				
			||||||
 | 
					        List<MarketDynamicsDetailVO> detailVOList = baseMapper.getMarketDynamicsDetail(param);
 | 
				
			||||||
 | 
					        log.info("detailVOList : {}", JSONUtil.toJsonStr(detailVOList));
 | 
				
			||||||
 | 
					        return DataStatisticsUtil.getMarketDynamicsAssemblyData(detailVOList, param);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private String getDayTableName(String localDate) {
 | 
					    private String getDayTableName(String localDate) {
 | 
				
			||||||
        CuMemberSettlePeriod cuMemberSettlePeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(localDate);
 | 
					        CuMemberSettlePeriod cuMemberSettlePeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(localDate);
 | 
				
			||||||
        if(ObjectUtil.isEmpty(cuMemberSettlePeriod)){
 | 
					        if(ObjectUtil.isEmpty(cuMemberSettlePeriod)){
 | 
				
			||||||
            return null;
 | 
					            return TableNameConstants.CU_MEMBER_RETAIL_RANGE;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        int period = cuMemberSettlePeriod.getPkId();
 | 
					        int period = cuMemberSettlePeriod.getPkId();
 | 
				
			||||||
        return TableNameConstants.CU_MEMBER_RETAIL_RANGE + period;
 | 
					        return TableNameConstants.CU_MEMBER_RETAIL_RANGE + period;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,11 +1,13 @@
 | 
				
			||||||
package com.hzs.retail.member.utils;
 | 
					package com.hzs.retail.member.utils;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import cn.hutool.core.util.ObjectUtil;
 | 
					import cn.hutool.core.util.ObjectUtil;
 | 
				
			||||||
 | 
					import cn.hutool.core.util.StrUtil;
 | 
				
			||||||
import com.hzs.common.core.enums.EYesNo;
 | 
					import com.hzs.common.core.enums.EYesNo;
 | 
				
			||||||
import com.hzs.common.domain.member.base.CuMember;
 | 
					import com.hzs.common.domain.member.base.CuMember;
 | 
				
			||||||
import com.hzs.retail.member.param.MarketDynamicsQueryDateParam;
 | 
					import com.hzs.retail.member.param.MarketDynamicsQueryDateParam;
 | 
				
			||||||
import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsDetailVO;
 | 
					import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsDetailVO;
 | 
				
			||||||
import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsResultVO;
 | 
					import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsResultVO;
 | 
				
			||||||
 | 
					import com.hzs.retail.member.vo.MarketDynamicsDetailVO;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.math.BigDecimal;
 | 
					import java.math.BigDecimal;
 | 
				
			||||||
import java.math.RoundingMode;
 | 
					import java.math.RoundingMode;
 | 
				
			||||||
| 
						 | 
					@ -17,6 +19,7 @@ import java.util.ArrayList;
 | 
				
			||||||
import java.util.Comparator;
 | 
					import java.util.Comparator;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
import java.util.Objects;
 | 
					import java.util.Objects;
 | 
				
			||||||
 | 
					import java.util.stream.Collectors;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * 用户统计数据工具
 | 
					 * 用户统计数据工具
 | 
				
			||||||
| 
						 | 
					@ -49,7 +52,8 @@ public class DataStatisticsUtil {
 | 
				
			||||||
        calcDetailVOTotalField(detailVOList, pkId);
 | 
					        calcDetailVOTotalField(detailVOList, pkId);
 | 
				
			||||||
        addVirtualBranch(detailVOList, pkId);
 | 
					        addVirtualBranch(detailVOList, pkId);
 | 
				
			||||||
        CuMemberRetailDataStatisticsDetailVO total = getDetailVOByPKID(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()){
 | 
					        if(EYesNo.NO.getIntValue() == cuMember.getIsActivate()){
 | 
				
			||||||
            // 昨日非激活 排除昨日日结表数据
 | 
					            // 昨日非激活 排除昨日日结表数据
 | 
				
			||||||
            excludeDailySettlementData(detailVOList);
 | 
					            excludeDailySettlementData(detailVOList);
 | 
				
			||||||
| 
						 | 
					@ -57,19 +61,19 @@ public class DataStatisticsUtil {
 | 
				
			||||||
            // 排除注水数据
 | 
					            // 排除注水数据
 | 
				
			||||||
            excludeWaterInjectionData(detailVOList, pkId);
 | 
					            excludeWaterInjectionData(detailVOList, pkId);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        Integer smallRangeTotalBoxNum = total.getTotalBoxNum() - bigRange.getTotalBoxNum();
 | 
					        Integer smallRangeTotalBoxNum = total.getTotalBoxNum() - bigRangeBox.getTotalBoxNum();
 | 
				
			||||||
        if(smallRangeTotalBoxNum < 0){
 | 
					        if(smallRangeTotalBoxNum < 0){
 | 
				
			||||||
            smallRangeTotalBoxNum = 0;
 | 
					            smallRangeTotalBoxNum = 0;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        BigDecimal smallRangeTotalPv = total.getTotalPv().subtract(bigRange.getTotalPv());
 | 
					        BigDecimal smallRangeTotalPv = total.getTotalPv().subtract(bigRangePv.getTotalPv());
 | 
				
			||||||
        if(smallRangeTotalPv.compareTo(BigDecimal.ZERO) < 0){
 | 
					        if(smallRangeTotalPv.compareTo(BigDecimal.ZERO) < 0){
 | 
				
			||||||
            smallRangeTotalPv = BigDecimal.ZERO;
 | 
					            smallRangeTotalPv = BigDecimal.ZERO;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return CuMemberRetailDataStatisticsResultVO.builder()
 | 
					        return CuMemberRetailDataStatisticsResultVO.builder()
 | 
				
			||||||
                .totalBoxNum(total.getTotalBoxNum())
 | 
					                .totalBoxNum(total.getTotalBoxNum())
 | 
				
			||||||
                .totalPv(formatPV(total.getTotalPv()))
 | 
					                .totalPv(formatPV(total.getTotalPv()))
 | 
				
			||||||
                .bigRangeTotalBoxNum(bigRange.getTotalBoxNum())
 | 
					                .bigRangeTotalBoxNum(bigRangeBox.getTotalBoxNum())
 | 
				
			||||||
                .bigRangeTotalPv(formatPV(bigRange.getTotalPv()))
 | 
					                .bigRangeTotalPv(formatPV(bigRangePv.getTotalPv()))
 | 
				
			||||||
                .smallRangeTotalBoxNum(smallRangeTotalBoxNum)
 | 
					                .smallRangeTotalBoxNum(smallRangeTotalBoxNum)
 | 
				
			||||||
                .smallRangeTotalPv(formatPV(smallRangeTotalPv))
 | 
					                .smallRangeTotalPv(formatPV(smallRangeTotalPv))
 | 
				
			||||||
                .build();
 | 
					                .build();
 | 
				
			||||||
| 
						 | 
					@ -219,6 +223,23 @@ public class DataStatisticsUtil {
 | 
				
			||||||
        return detailVOList.parallelStream().filter(o -> o.getPkId().equals(pkId)).findFirst().orElse(null);
 | 
					        return detailVOList.parallelStream().filter(o -> o.getPkId().equals(pkId)).findFirst().orElse(null);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 组装市场动态列表数据
 | 
				
			||||||
 | 
					     * @param detailVOList
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static PageResult<MarketDynamicsDetailVO> getMarketDynamicsAssemblyData(List<MarketDynamicsDetailVO> 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<MarketDynamicsDetailVO> result = MemoryPageUtils.paginate(detailVOList, param.getPageNum(), param.getPageSize());
 | 
				
			||||||
 | 
					        result.setBigRange(bigRange);
 | 
				
			||||||
 | 
					        return result;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static Integer getMaxTotalBoxNum(List<CuMemberRetailDataStatisticsDetailVO> detailVOList) {
 | 
					    private static Integer getMaxTotalBoxNum(List<CuMemberRetailDataStatisticsDetailVO> detailVOList) {
 | 
				
			||||||
        return detailVOList.parallelStream()
 | 
					        return detailVOList.parallelStream()
 | 
				
			||||||
                .map(CuMemberRetailDataStatisticsDetailVO::getTotalBoxNum)
 | 
					                .map(CuMemberRetailDataStatisticsDetailVO::getTotalBoxNum)
 | 
				
			||||||
| 
						 | 
					@ -226,12 +247,18 @@ public class DataStatisticsUtil {
 | 
				
			||||||
                .max(Integer::compare)
 | 
					                .max(Integer::compare)
 | 
				
			||||||
                .orElse(null);
 | 
					                .orElse(null);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    private static CuMemberRetailDataStatisticsDetailVO getBigRangeDetailVO(List<CuMemberRetailDataStatisticsDetailVO> detailVOList, Long pkId){
 | 
					    private static CuMemberRetailDataStatisticsDetailVO getBigRangeBoxDetailVO(List<CuMemberRetailDataStatisticsDetailVO> detailVOList, Long pkId){
 | 
				
			||||||
        return detailVOList.parallelStream()
 | 
					        return detailVOList.stream()
 | 
				
			||||||
                .filter(vo -> vo.getTotalBoxNum() != null && !vo.getPkId().equals(pkId))
 | 
					                .filter(vo -> vo.getTotalBoxNum() != null && !vo.getPkId().equals(pkId))
 | 
				
			||||||
                .max(Comparator.comparingInt(CuMemberRetailDataStatisticsDetailVO::getTotalBoxNum))
 | 
					                .max(Comparator.comparingInt(CuMemberRetailDataStatisticsDetailVO::getTotalBoxNum))
 | 
				
			||||||
                .orElse(null);
 | 
					                .orElse(null);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    private static CuMemberRetailDataStatisticsDetailVO getBigRangePVDetailVO(List<CuMemberRetailDataStatisticsDetailVO> 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){
 | 
					    public static BigDecimal formatPV(BigDecimal pv){
 | 
				
			||||||
        return pv.divide(
 | 
					        return pv.divide(
 | 
				
			||||||
                new BigDecimal("10000"),
 | 
					                new BigDecimal("10000"),
 | 
				
			||||||
| 
						 | 
					@ -242,9 +269,11 @@ public class DataStatisticsUtil {
 | 
				
			||||||
    public static void setQueryDateParam(MarketDynamicsQueryDateParam param){
 | 
					    public static void setQueryDateParam(MarketDynamicsQueryDateParam param){
 | 
				
			||||||
        LocalDate.now(ZoneId.of("Asia/Shanghai"));
 | 
					        LocalDate.now(ZoneId.of("Asia/Shanghai"));
 | 
				
			||||||
        LocalDate currentDate = LocalDate.now();
 | 
					        LocalDate currentDate = LocalDate.now();
 | 
				
			||||||
 | 
					        LocalDate yesterdayDate = currentDate.minusDays(1);
 | 
				
			||||||
        LocalDate previousMonthDate = currentDate.minusMonths(1);
 | 
					        LocalDate previousMonthDate = currentDate.minusMonths(1);
 | 
				
			||||||
        LocalDate lastDayOfPreviousMonth = previousMonthDate.with(TemporalAdjusters.lastDayOfMonth());
 | 
					        LocalDate lastDayOfPreviousMonth = previousMonthDate.with(TemporalAdjusters.lastDayOfMonth());
 | 
				
			||||||
        param.setNowDate(currentDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
 | 
					        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")));
 | 
					        param.setLastMonthDate(lastDayOfPreviousMonth.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
 | 
				
			||||||
//        System.out.println("当前日期: " + currentDate.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")));
 | 
					//        System.out.println("上一个月最后一天: " + lastDayOfPreviousMonth.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,24 @@
 | 
				
			||||||
 | 
					package com.hzs.retail.member.utils;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.ArrayList;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class MemoryPageUtils {
 | 
				
			||||||
 | 
					    public static <T> PageResult<T> paginate(List<T> 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<T> pageData = dataList.subList(start, end);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return new PageResult<>(total, pageData);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -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<T> {
 | 
				
			||||||
 | 
					    private long total;
 | 
				
			||||||
 | 
					    private List<T> rows;
 | 
				
			||||||
 | 
					    private MarketDynamicsDetailVO bigRange;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public PageResult(long total, List<T> rows) {
 | 
				
			||||||
 | 
					        this.total = total;
 | 
				
			||||||
 | 
					        this.rows = rows;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // getter/setter 省略
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -105,5 +105,13 @@ public class CuMemberRetailDataStatisticsDetailVO implements Serializable {
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    private Integer smallBoxNum;
 | 
					    private Integer smallBoxNum;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public CuMemberRetailDataStatisticsDetailVO clone() {
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            return (CuMemberRetailDataStatisticsDetailVO) super.clone();
 | 
				
			||||||
 | 
					        } catch (CloneNotSupportedException e) {
 | 
				
			||||||
 | 
					            throw new AssertionError();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,6 +17,10 @@ import java.math.BigDecimal;
 | 
				
			||||||
 * 市场动态列表对象
 | 
					 * 市场动态列表对象
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
public class MarketDynamicsDetailVO implements Serializable {
 | 
					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 lastMonthBoxNum;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 累计消费盒数
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private Integer totalBoxNum;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -872,4 +872,40 @@
 | 
				
			||||||
            </if>
 | 
					            </if>
 | 
				
			||||||
        </where>
 | 
					        </where>
 | 
				
			||||||
    </select>
 | 
					    </select>
 | 
				
			||||||
 | 
					    <select id="getMarketDynamicsDetail" resultType="com.hzs.retail.member.vo.MarketDynamicsDetailVO">
 | 
				
			||||||
 | 
					        SELECT
 | 
				
			||||||
 | 
					            cu.pk_id,
 | 
				
			||||||
 | 
					            cu.MEMBER_CODE,
 | 
				
			||||||
 | 
					            cu.MEMBER_NAME,
 | 
				
			||||||
 | 
					            cu.PK_SETTLE_GRADE,
 | 
				
			||||||
 | 
					            grade.GRADE_NAME,
 | 
				
			||||||
 | 
					            cu.PK_AWARDS,
 | 
				
			||||||
 | 
					            awards.AWARDS_NAME,
 | 
				
			||||||
 | 
					            currentMonth.ENABLE_STATUS,
 | 
				
			||||||
 | 
					            NVL( currentDay.NEW_CONSUME_PV + currentDay.TEAM_NEW_PV, 0 ) todayPv,
 | 
				
			||||||
 | 
					            NVL( currentDay.NEW_BOX_NUM + currentDay.TEAM_NEW_BOX_NUM, 0 ) todayBoxNum,
 | 
				
			||||||
 | 
					            NVL( currentMonth.NEW_CONSUME_PV + currentMonth.TEAM_NEW_PV, 0 ) yesterdayPv,
 | 
				
			||||||
 | 
					            NVL( currentMonth.NEW_BOX_NUM + currentMonth.TEAM_NEW_BOX_NUM, 0 ) yesterdayBoxNum,
 | 
				
			||||||
 | 
					            NVL( currentMonth.MONTH_CONSUME_PV, 0 ) currentMonthPv,
 | 
				
			||||||
 | 
					            NVL( currentMonth.MONTH_BOX_NUM , 0 ) currentMonthBoxNum,
 | 
				
			||||||
 | 
					            NVL( lastMonth.MONTH_CONSUME_PV, 0 ) lastMonthPv,
 | 
				
			||||||
 | 
					            NVL( lastMonth.MONTH_BOX_NUM, 0 ) lastMonthBoxNum,
 | 
				
			||||||
 | 
					            NVL( currentMonth.CONSUME_BOX_NUM + currentDay.NEW_BOX_NUM + currentDay.TEAM_NEW_BOX_NUM, 0 ) totalBoxNum
 | 
				
			||||||
 | 
					        FROM
 | 
				
			||||||
 | 
					            cu_member cu
 | 
				
			||||||
 | 
					                LEFT JOIN ${param.currentDayTableName} currentDay ON cu.PK_ID = currentDay.PK_MEMBER
 | 
				
			||||||
 | 
					                LEFT JOIN ${param.currentMonthTableName} currentMonth ON cu.PK_ID = currentMonth.PK_MEMBER AND cu.CATEGORY = 0
 | 
				
			||||||
 | 
					                LEFT JOIN ${param.lastMonthTableName} lastMonth ON cu.PK_ID = lastMonth.PK_MEMBER AND cu.CATEGORY = 0
 | 
				
			||||||
 | 
					                LEFT JOIN BD_GRADE grade on grade.PK_ID = cu.PK_SETTLE_GRADE
 | 
				
			||||||
 | 
					                LEFT JOIN BD_AWARDS awards on awards.PK_ID = cu.PK_AWARDS
 | 
				
			||||||
 | 
					        <where>
 | 
				
			||||||
 | 
					            <if test="param.pkIdList != null and param.pkIdList.size > 0">
 | 
				
			||||||
 | 
					                cu.pk_id in
 | 
				
			||||||
 | 
					                <foreach collection="param.pkIdList" item="pkMember" separator="," open="(" close=")">
 | 
				
			||||||
 | 
					                    #{pkMember}
 | 
				
			||||||
 | 
					                </foreach>
 | 
				
			||||||
 | 
					            </if>
 | 
				
			||||||
 | 
					        </where>
 | 
				
			||||||
 | 
					        order by totalBoxNum desc, todayPv desc, cu.CREATION_TIME desc, cu.pk_id asc
 | 
				
			||||||
 | 
					    </select>
 | 
				
			||||||
</mapper>
 | 
					</mapper>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue