Compare commits
	
		
			5 Commits
		
	
	
		
			ca6017cc4c
			...
			0fa7c1901e
		
	
	| Author | SHA1 | Date | 
|---|---|---|
|  | 0fa7c1901e | |
|  | c1c90edab8 | |
|  | 0dccb9792f | |
|  | ca0321a43a | |
|  | 9a00a7dc5e | 
|  | @ -121,7 +121,6 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { | |||
|         for (SaOrderWaresExt saOrderItems : saOrderExt.getOrderWaresExtList()) { | ||||
|             if (RetailConstants.ALL_BOX_WARES_LIST.contains(saOrderItems.getWaresCode())) { | ||||
|                 boxNum += saOrderItems.getWaresQuantity(); | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|         saOrderExt.setBoxNum(boxNum); | ||||
|  | @ -259,7 +258,6 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { | |||
|         for (SaOrderWaresExt saOrderItems : saOrderExt.getOrderWaresExtList()) { | ||||
|             if (RetailConstants.ALL_BOX_WARES_LIST.contains(saOrderItems.getWaresCode())) { | ||||
|                 boxNum += saOrderItems.getWaresQuantity(); | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|         saOrderExt.setBoxNum(boxNum); | ||||
|  | @ -486,7 +484,6 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { | |||
|                 for (SaOrderWaresExt saOrderItems : saOrderExt.getOrderWaresExtList()) { | ||||
|                     if (RetailConstants.ALL_BOX_WARES_LIST.contains(saOrderItems.getWaresCode())) { | ||||
|                         boxNum += saOrderItems.getWaresQuantity(); | ||||
|                         break; | ||||
|                     } | ||||
|                 } | ||||
|                 // 个人累计消费pv | ||||
|  | @ -1599,14 +1596,26 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { | |||
|             return null; | ||||
|         } | ||||
| 
 | ||||
|         // 区域收益,商品价格 * 0.5% * 商品数量 | ||||
|         // 处理区域收益 -- 计算比例为 0.5% | ||||
|         BigDecimal benefitIncome = BigDecimal.ZERO; | ||||
|         // 计算业绩(此处作为比例) | ||||
|         BigDecimal calAchieve = BigDecimal.ZERO; | ||||
|         if (EOrderType.RETAIL_REGISTER.getValue() == saOrder.getOrderType() | ||||
|                 || EOrderType.RETAIL_UPGRADE.getValue() == saOrder.getOrderType()) { | ||||
|             // 注册、升级订单, 区域收益 = 商品价格 * 0.5% * 商品数量 | ||||
|             for (SaOrderWaresExt saOrderWaresExt : saOrder.getOrderWaresExtList()) { | ||||
|             benefitIncome = benefitIncome.add(saOrderWaresExt.getWaresPrice().multiply(RetailConstants.SAME_RATIO)).setScale(6, BigDecimal.ROUND_HALF_UP); | ||||
|             calAchieve = calAchieve.add(saOrderWaresExt.getWaresPrice()); | ||||
|                 // 商品最终价格 | ||||
|                 BigDecimal waresPrice = saOrderWaresExt.getWaresPrice(); | ||||
|                 // 商品数量 | ||||
|                 BigDecimal waresQuantityBig = new BigDecimal(saOrderWaresExt.getWaresQuantity()); | ||||
|                 // 单个商品价格 | ||||
|                 BigDecimal waresOnePrice = waresPrice.divide(waresQuantityBig, 6, RoundingMode.FLOOR); | ||||
| 
 | ||||
|                 benefitIncome = benefitIncome.add(waresOnePrice.multiply(RetailConstants.SAME_RATIO).setScale(6, BigDecimal.ROUND_HALF_UP).multiply(waresQuantityBig)); | ||||
|             } | ||||
|         } else if (EOrderType.RETAIL_REPURCHASE.getValue() == saOrder.getOrderType()) { | ||||
|             // 复购订单, 区域收益 = 复购区域分红 * 商品数量 | ||||
|             for (SaOrderWaresExt saOrderWaresExt : saOrder.getOrderWaresExtList()) { | ||||
|                 benefitIncome = benefitIncome.add(saOrderWaresExt.getAreaIncome().multiply(new BigDecimal(saOrderWaresExt.getWaresQuantity()))); | ||||
|             } | ||||
|         } | ||||
|         CuMemberBonusDetail cuMemberBonusDetail = packageBenefitIncome(bonusConfigDTO, period, cuMemberBonusMap, null, RetailConstants.SAME_RATIO, benefitIncome, | ||||
|                 cuMemberRetailRangeExt, EBonusItems.RETAIL_AREA_INCOME.getValue(), BonusMsgConstants.RETAIL_AREA_INCOME); | ||||
|  |  | |||
|  | @ -60,6 +60,7 @@ | |||
|             <result column="PK_WARES" property="pkWares"/> | ||||
|             <result column="WARES_PRICE" property="waresPrice"/> | ||||
|             <result column="WARES_CODE" property="waresCode"/> | ||||
|             <result column="AREA_INCOME" property="areaIncome"/> | ||||
|         </collection> | ||||
|         <collection property="orderItemsExtList" ofType="com.hzs.common.domain.sale.ext.SaOrderItemsExt"> | ||||
|             <result column="SI_ITEMS_ID" property="pkId"/> | ||||
|  | @ -153,7 +154,8 @@ | |||
|         nvl(st.pk_wares,0) pk_wares, | ||||
|         nvl(st.wares_price,0) wares_price, | ||||
|         nvl(bw.wares_code,'~') wares_code, | ||||
|         nvl(st.wares_quantity,0) wares_quantity | ||||
|         nvl(st.wares_quantity,0) wares_quantity, | ||||
|         nvl(bw.area_income, 0) area_income | ||||
|         from sa_order so | ||||
|         left join sa_order_wares st | ||||
|         on so.pk_id = st.pk_order and st.wares_price > 0 | ||||
|  |  | |||
|  | @ -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)); | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -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<CuMemberRetailRang | |||
|      */ | ||||
|     List<CuMemberRetailDataStatisticsDetailVO> getRetailDataStatisticsDetail(CuMemberRetailAchieveVO cuMemberAchieveVO); | ||||
| 
 | ||||
|     List<MarketDynamicsDetailVO> getMarketDynamicsDetail(@Param("param") MarketDynamicsQueryDateParam param); | ||||
| 
 | ||||
|     /** | ||||
|      * 查询当天自己新增盒数 | ||||
|      * | ||||
|  |  | |||
|  | @ -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; | ||||
| 
 | ||||
|     /** | ||||
|  | @ -28,6 +30,8 @@ public class MarketDynamicsQueryDateParam implements Serializable { | |||
|      */ | ||||
|     private String lastMonthTableName; | ||||
|     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.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<CuMemberRetailRa | |||
|      */ | ||||
|     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.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<CuMemberRetail | |||
|      */ | ||||
|     private String getTableName() { | ||||
|         String localDate = LocalDate.now().minus(1, ChronoUnit.DAYS).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); | ||||
|         int period = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(localDate).getPkId(); | ||||
|         if(ObjectUtil.isEmpty(period)){ | ||||
|         CuMemberSettlePeriod cuMemberSettlePeriod =iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(localDate); | ||||
|         if(ObjectUtil.isEmpty(cuMemberSettlePeriod)){ | ||||
|             return null; | ||||
|         } | ||||
|         int period = cuMemberSettlePeriod.getPkId(); | ||||
|         return TableNameConstants.CU_MEMBER_RETAIL_RANGE + period; | ||||
|     } | ||||
|     private String getDayTableName() { | ||||
|         String localDate = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); | ||||
|         int period = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(localDate).getPkId(); | ||||
|         if(ObjectUtil.isEmpty(period)){ | ||||
|         CuMemberSettlePeriod cuMemberSettlePeriod =iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(localDate); | ||||
|         if(ObjectUtil.isEmpty(cuMemberSettlePeriod)){ | ||||
|             return null; | ||||
|         } | ||||
|         int period = cuMemberSettlePeriod.getPkId(); | ||||
|         return TableNameConstants.CU_MEMBER_RETAIL_S + period; | ||||
|     } | ||||
| 
 | ||||
|  | @ -586,19 +589,26 @@ public class CuMemberRetailAchieveServiceImpl extends ServiceImpl<CuMemberRetail | |||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public List<MarketDynamicsDetailVO> getMarketDynamics(MarketDynamicsQueryDateParam param) { | ||||
|     public PageResult<MarketDynamicsDetailVO> 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<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) { | ||||
|         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; | ||||
|  |  | |||
|  | @ -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(); | ||||
|  | @ -79,7 +83,7 @@ public class DataStatisticsUtil { | |||
|      * @param detailVOList | ||||
|      */ | ||||
|     public static void calcDetailVOTotalField(List<CuMemberRetailDataStatisticsDetailVO> detailVOList, Long pkId){ | ||||
|         detailVOList.parallelStream().forEach(detailVO -> { | ||||
|         detailVOList.stream().forEach(detailVO -> { | ||||
|             detailVO.setTotalBoxNum( | ||||
|                     detailVO.getConsumeBoxNum()         // 个人累计消费盒数(日结) | ||||
| //                     + detailVO.getNewBoxNum()          // 个人新增盒数(日结) | ||||
|  | @ -106,7 +110,7 @@ public class DataStatisticsUtil { | |||
|      * @param detailVOList | ||||
|      */ | ||||
|     public static void excludeDailySettlementData(List<CuMemberRetailDataStatisticsDetailVO> detailVOList){ | ||||
|         detailVOList.parallelStream().forEach(detailVO -> { | ||||
|         detailVOList.stream().forEach(detailVO -> { | ||||
|             detailVO.setTotalBoxNum( | ||||
|                     detailVO.getTotalBoxNum() | ||||
|                     - detailVO.getTeamBoxNum()          // 团队累计消费盒数(日结) | ||||
|  | @ -123,7 +127,7 @@ public class DataStatisticsUtil { | |||
|      * @param detailVOList | ||||
|      */ | ||||
|     public static void excludeWaterInjectionData(List<CuMemberRetailDataStatisticsDetailVO> detailVOList, Long pkId){ | ||||
|         detailVOList.parallelStream().forEach(detailVO -> { | ||||
|         detailVOList.stream().forEach(detailVO -> { | ||||
|             if(!detailVO.getPkId().equals(pkId)){ | ||||
|                 detailVO.setTotalBoxNum( | ||||
|                         detailVO.getTotalBoxNum() | ||||
|  | @ -216,22 +220,45 @@ public class DataStatisticsUtil { | |||
|      * @return | ||||
|      */ | ||||
|     public static CuMemberRetailDataStatisticsDetailVO getDetailVOByPKID(List<CuMemberRetailDataStatisticsDetailVO> detailVOList, Long pkId){ | ||||
|         return detailVOList.parallelStream().filter(o -> o.getPkId().equals(pkId)).findFirst().orElse(null); | ||||
|         return detailVOList.stream().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.stream().filter(o -> o.getMemberCode().contains(param.getKeyWords()) || o.getMemberName().contains(param.getKeyWords())).collect(Collectors.toList()); | ||||
|         } | ||||
|         MarketDynamicsDetailVO bigRange = detailVOList.stream() | ||||
|                 .max(Comparator.comparingInt(MarketDynamicsDetailVO::getTotalBoxNum)) | ||||
|                 .orElse(null); | ||||
|         detailVOList = detailVOList.stream().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) { | ||||
|         return detailVOList.parallelStream() | ||||
|         return detailVOList.stream() | ||||
|                 .map(CuMemberRetailDataStatisticsDetailVO::getTotalBoxNum) | ||||
|                 .filter(Objects::nonNull) | ||||
|                 .max(Integer::compare) | ||||
|                 .orElse(null); | ||||
|     } | ||||
|     private static CuMemberRetailDataStatisticsDetailVO getBigRangeDetailVO(List<CuMemberRetailDataStatisticsDetailVO> detailVOList, Long pkId){ | ||||
|         return detailVOList.parallelStream() | ||||
|     private static CuMemberRetailDataStatisticsDetailVO getBigRangeBoxDetailVO(List<CuMemberRetailDataStatisticsDetailVO> 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<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){ | ||||
|         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"))); | ||||
|  |  | |||
|  | @ -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; | ||||
| 
 | ||||
|     @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 { | ||||
|     /** | ||||
|      * 用户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; | ||||
| } | ||||
|  |  | |||
|  | @ -872,4 +872,40 @@ | |||
|             </if> | ||||
|         </where> | ||||
|     </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> | ||||
|  |  | |||
|  | @ -541,6 +541,7 @@ public class BdWaresController extends BaseController { | |||
|         waresParams.setPkSpecialCurrency(waresExtend.getPkSpecialCurrency()); | ||||
|         waresParams.setSortStatus(wares.getSortStatus()); | ||||
|         waresParams.setSystemType(waresExtend.getSystemType()); | ||||
|         waresParams.setAreaIncome(wares.getAreaIncome()); | ||||
|         if (waresExtend.getMakerIncome() != null) { | ||||
|             R<CurrencyDTO> currencyDto = currencyServiceApi.getCurrency(SecurityUtils.getPkCountry()); | ||||
|             waresParams.setMakerIncome(waresExtend.getMakerIncome().multiply(currencyDto.getData().getInExchangeRate())); | ||||
|  |  | |||
|  | @ -9,13 +9,6 @@ import java.util.Date; | |||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| 
 | ||||
| /** | ||||
|  * @Description: | ||||
|  * @Author: yuhui | ||||
|  * @Time: 2022/9/9 14:14 | ||||
|  * @Classname: WaresParams | ||||
|  * @PackageName: com.hzs.sale.wares.controller.manage.params | ||||
|  */ | ||||
| @Data | ||||
| public class WaresParams implements Serializable { | ||||
|     /** | ||||
|  | @ -416,4 +409,9 @@ public class WaresParams implements Serializable { | |||
|      */ | ||||
|     private Integer waresStatus; | ||||
| 
 | ||||
|     /** | ||||
|      * 复购区域分红 | ||||
|      */ | ||||
|     private BigDecimal areaIncome; | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -46,9 +46,9 @@ | |||
|         <result column="DETAILS_TYPE" property="detailsType"/> | ||||
|         <result column="AFTER_GUARANTEE" property="afterGuarantee"/> | ||||
|         <result column="giftNames" property="giftNames"/> | ||||
|         <result column="maker_income" property="makerIncome"/> | ||||
|         <result column="PK_SPECIAL_CURRENCY" property="pkSpecialCurrency"/> | ||||
|         <result column="SYSTEM_TYPE" property="systemType"/> | ||||
|         <result column="AREA_INCOME" property="areaIncome"/> | ||||
|     </resultMap> | ||||
| 
 | ||||
|     <resultMap id="resultMap" type="com.hzs.sale.wares.vo.WaresVo"> | ||||
|  |  | |||
|  | @ -4,6 +4,8 @@ import com.hzs.common.domain.sale.order.SaOrderWares; | |||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| 
 | ||||
| import java.math.BigDecimal; | ||||
| 
 | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @Data | ||||
| public class SaOrderWaresExt extends SaOrderWares { | ||||
|  | @ -13,4 +15,9 @@ public class SaOrderWaresExt extends SaOrderWares { | |||
|      */ | ||||
|     private String waresCode; | ||||
| 
 | ||||
|     /** | ||||
|      * 复购区域分红 | ||||
|      */ | ||||
|     private BigDecimal areaIncome; | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -216,4 +216,10 @@ public class BdWares extends BaseEntity { | |||
|     @TableField("SYSTEM_TYPE") | ||||
|     private Integer systemType; | ||||
| 
 | ||||
|     /** | ||||
|      * 复购区域分红 | ||||
|      */ | ||||
|     @TableField("AREA_INCOME") | ||||
|     private BigDecimal areaIncome; | ||||
| 
 | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue