## Opt - 选择区域失效之后,再次需要选择区域,需要月总业绩30万,小市场10万

This commit is contained in:
sangelxiu1 2025-08-06 09:03:58 +08:00
parent a4f5cd4899
commit 4225e554d4
6 changed files with 193 additions and 13 deletions

View File

@ -45,6 +45,8 @@ import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
@ -109,7 +111,7 @@ public class RetailMemberController extends BaseController {
LambdaQueryWrapper<CuMemberRetailRegion> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(CuMemberRetailRegion::getPkMember, userId);
int countNum = iCuMemberRetailRegionService.count(queryWrapper);
boolean isFirst = countNum > 0;
boolean notFirst = countNum > 0;
log.info("cuMemberRetailRegionExt -> {}", JSONUtil.toJsonStr(cuMemberRetailRegionExt));
if (null != cuMemberRetailRegionExt) {
@ -155,10 +157,25 @@ public class RetailMemberController extends BaseController {
&& totalBoxNum.compareTo(grade.getBoxTotal()) >= 0
&& smallBoxNum.compareTo(grade.getBoxSmallTotal()) >=0
){
if(notFirst){
LocalDate today = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE;
CurrentMonthVO currentMonthVO = retailAchieveService.getCurrentMonthPV(today.format(formatter), userId, pkCountry, systemType);
if(ObjectUtil.isNotEmpty(currentMonthVO)
&& currentMonthVO.getTotalCurrentMonthPV().compareTo(SysConstants.TOTAL_AREA_PV) >= 0
&& currentMonthVO.getSmallCurrentMonthPV().compareTo(SysConstants.SMALL_AREA_PV) >=0
){
return AjaxResult.success(RetailMemberRegionVO.builder()
.regionStatus(EYesNo.YES.getIntValue())
.build());
}
}else{
return AjaxResult.success(RetailMemberRegionVO.builder()
.regionStatus(EYesNo.YES.getIntValue())
.build());
}
}
// if(ObjectUtil.isNotEmpty(retailAchieve.getArealPv())
// && result.getTotalPv().multiply(new BigDecimal("10000")).compareTo(SysConstants.TOTAL_AREA_PV) >= 0
// && result.getSmallRangeTotalPv().multiply(new BigDecimal("10000")).compareTo(SysConstants.SMALL_AREA_PV) >=0
@ -216,6 +233,7 @@ public class RetailMemberController extends BaseController {
CuMemberRetailRegionExt cuMemberRetailRegionExt = iCuMemberRetailRegionService.getRegionByMember(userId, EGrade.S_VIP.getValue(), systemType);
log.info("cuMemberRetailRegionExt -> {}", JSONUtil.toJsonStr(cuMemberRetailRegionExt));
if (null != cuMemberRetailRegionExt) {
if (EYesNo.YES.getIntValue() == cuMemberRetailRegionExt.getIsRegion()) {
canSet = true;
@ -234,13 +252,29 @@ public class RetailMemberController extends BaseController {
canSet = true;
}
}else{
LambdaQueryWrapper<CuMemberRetailRegion> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(CuMemberRetailRegion::getPkMember, userId);
int countNum = iCuMemberRetailRegionService.count(queryWrapper);
boolean notFirst = countNum > 0;
GradeDTO grade = gradeServiceApi.getGradeByGradeValue(EGrade.S_VIP.getValue(), pkCountry).getData();
if(ObjectUtil.isNotEmpty(totalBoxNum)
&& totalBoxNum.compareTo(grade.getBoxTotal()) >= 0
&& smallBoxNum.compareTo(grade.getBoxSmallTotal()) >=0
){
if(notFirst){
LocalDate today = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE;
CurrentMonthVO currentMonthVO = retailAchieveService.getCurrentMonthPV(today.format(formatter), userId, pkCountry, systemType);
if(ObjectUtil.isNotEmpty(currentMonthVO)
&& currentMonthVO.getTotalCurrentMonthPV().compareTo(SysConstants.TOTAL_AREA_PV) >= 0
&& currentMonthVO.getSmallCurrentMonthPV().compareTo(SysConstants.SMALL_AREA_PV) >=0
){
canSet = true;
}
}else{
canSet = true;
}
}
// if(result.getTotalPv().multiply(new BigDecimal("10000")).compareTo(SysConstants.TOTAL_AREA_PV) >= 0
// && result.getSmallRangeTotalPv().multiply(new BigDecimal("10000")).compareTo(SysConstants.SMALL_AREA_PV) >=0
// ){

View File

@ -4,10 +4,7 @@ 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;
import com.hzs.retail.member.vo.MarketDynamicsDetailVO;
import com.hzs.retail.member.vo.*;
import java.util.List;
import java.util.Map;
@ -115,5 +112,8 @@ public interface ICuMemberRetailAchieveService extends IService<CuMemberRetailRa
*/
CuMemberRetailDataStatisticsResultVO getRetailDataStatisticsDetail(Long pkMember, Integer pkCountry, Integer systemType);
CurrentMonthVO getCurrentMonthPV(String date, Long pkMember, Integer pkCountry, Integer systemType);
PageResult<MarketDynamicsDetailVO> getMarketDynamics(MarketDynamicsQueryDateParam param);
}

View File

@ -20,10 +20,7 @@ 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;
import com.hzs.retail.member.vo.MarketDynamicsDetailVO;
import com.hzs.retail.member.vo.*;
import com.hzs.system.config.IGradeServiceApi;
import com.hzs.system.config.dto.GradeDTO;
import lombok.extern.slf4j.Slf4j;
@ -360,6 +357,22 @@ public class CuMemberRetailAchieveServiceImpl extends ServiceImpl<CuMemberRetail
int period = cuMemberSettlePeriod.getPkId();
return TableNameConstants.CU_MEMBER_RETAIL_S + period;
}
private String getTableNameSpecial4Date(String localDate) {
CuMemberSettlePeriod cuMemberSettlePeriod =iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(localDate);
if(ObjectUtil.isEmpty(cuMemberSettlePeriod)){
return null;
}
int period = cuMemberSettlePeriod.getPkId();
return TableNameConstants.CU_MEMBER_RETAIL_RANGE + period;
}
private String getDayTableNameSpecial4Date(String localDate) {
CuMemberSettlePeriod cuMemberSettlePeriod =iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(localDate);
if(ObjectUtil.isEmpty(cuMemberSettlePeriod)){
return null;
}
int period = cuMemberSettlePeriod.getPkId();
return TableNameConstants.CU_MEMBER_RETAIL_S + period;
}
public static boolean isBeforeThreeAm() {
LocalDateTime now = LocalDateTime.now();
// 获取当天凌晨3点的时间日期与当前日期相同时间为03:00:00
@ -637,6 +650,50 @@ public class CuMemberRetailAchieveServiceImpl extends ServiceImpl<CuMemberRetail
return result;
}
@Override
public CurrentMonthVO getCurrentMonthPV(String date, Long pkMember, Integer pkCountry, Integer systemType) {
Long userId = SecurityUtils.getUserId();
LocalDate today = LocalDate.now();
String yesterdayDate;
String memberRetailTable = TableNameConstants.CU_MEMBER_RETAIL_S;
if (today.getDayOfMonth() != 1) {
LocalDate previousDay = today.minusDays(1);
yesterdayDate = previousDay.format(DateTimeFormatter.ISO_LOCAL_DATE);
memberRetailTable = getTableNameSpecial4Date(yesterdayDate);
}
String memberSecondTable = getDayTableNameSpecial();
//查询直推会员
List<Long> pkMemberList = baseMapper.selectDirectPushByPkMember(pkMember, systemType);
pkMemberList.add(userId);
CuMemberRetailAchieveVO memberAchieveVO = CuMemberRetailAchieveVO.builder()
.memberRetailTable(memberRetailTable)
.memberRetailSTable(memberSecondTable)
.pkMemberList(pkMemberList).systemType(systemType).build();
List<CuMemberRetailDataStatisticsDetailVO> statisticsDetailVOList = baseMapper.getRetailDataStatisticsDetail(memberAchieveVO);
CuMember cuMember = iCuMemberService.queryMember(userId);
BigAndSmallRangeVO bigAndSmallRangeVO = DataStatisticsUtil.getBigAndSmallRangeVO(statisticsDetailVOList, cuMember);
MarketDynamicsQueryDateParam param = new MarketDynamicsQueryDateParam();
DataStatisticsUtil.setQueryDateParam(param);
param.setCurrentDayTableName(memberSecondTable);
param.setCurrentMonthTableName(memberRetailTable);
param.setLastMonthTableName(getDayTableName(param.getLastMonthDate()));
List<MarketDynamicsDetailVO> detailVOList = baseMapper.getMarketDynamicsDetail(param);
BigDecimal totalMouthPV = detailVOList.stream()
.map(MarketDynamicsDetailVO::getCurrentMonthPv)
.filter(Objects::nonNull)
.reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal bigMouthPV = BigDecimal.ZERO;
MarketDynamicsDetailVO bigRange = detailVOList.stream().filter(vo -> {
assert bigAndSmallRangeVO != null;
return vo.getPkId().equals(bigAndSmallRangeVO.getBigRangeId());
}).findFirst().orElse(null);
if(ObjectUtil.isNotEmpty(bigRange)){
bigMouthPV = bigRange.getCurrentMonthPv();
}
BigDecimal smallMountPV = totalMouthPV.subtract(bigMouthPV);
return CurrentMonthVO.builder().smallCurrentMonthPV(smallMountPV).totalCurrentMonthPV(totalMouthPV).build();
}
@Override
public PageResult<MarketDynamicsDetailVO> getMarketDynamics(MarketDynamicsQueryDateParam param) {
Long pkMember = SecurityUtils.getUserId();

View File

@ -5,6 +5,7 @@ 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.BigAndSmallRangeVO;
import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsDetailVO;
import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsResultVO;
import com.hzs.retail.member.vo.MarketDynamicsDetailVO;
@ -309,4 +310,55 @@ public class DataStatisticsUtil {
// .lastMonthDate(lastDayOfPreviousMonth.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))
// .build();
}
public static CuMemberRetailDataStatisticsDetailVO getBigRangeWithPV(List<CuMemberRetailDataStatisticsDetailVO> detailVOList, CuMember cuMember){
Long pkId = cuMember.getPkId();
// 非激活直接返0
// 激活判断上一天的ENABLE_STATUS 0为正常 1为当天激活 不计算日结数据
if(EYesNo.NO.getIntValue() == cuMember.getIsActivate()){
return CuMemberRetailDataStatisticsDetailVO.builder()
.build();
}
calcDetailVOTotalField(detailVOList, pkId);
addVirtualBranch(detailVOList, pkId);
CuMemberRetailDataStatisticsDetailVO total = getDetailVOByPKID(detailVOList, pkId);
if(EYesNo.NO.getIntValue() == cuMember.getIsActivate()){
// 昨日非激活 排除昨日日结表数据
excludeDailySettlementData(detailVOList);
}
else{
// 排除注水数据
excludeWaterInjectionData(detailVOList, pkId);
}
return getBigRangePVDetailVO(detailVOList, pkId);
}
public static BigAndSmallRangeVO getBigAndSmallRangeVO(List<CuMemberRetailDataStatisticsDetailVO> detailVOList, CuMember cuMember){
Long pkId = cuMember.getPkId();
BigAndSmallRangeVO bigAndSmallRangeVO = new BigAndSmallRangeVO();
// 非激活直接返0
// 激活判断上一天的ENABLE_STATUS 0为正常 1为当天激活 不计算日结数据
if(EYesNo.NO.getIntValue() == cuMember.getIsActivate()){
return null;
}
calcDetailVOTotalField(detailVOList, pkId);
addVirtualBranch(detailVOList, pkId);
CuMemberRetailDataStatisticsDetailVO total = getDetailVOByPKID(detailVOList, pkId);
if(EYesNo.NO.getIntValue() == cuMember.getIsActivate()){
// 昨日非激活 排除昨日日结表数据
excludeDailySettlementData(detailVOList);
}
else{
// 排除注水数据
excludeWaterInjectionData(detailVOList, pkId);
}
CuMemberRetailDataStatisticsDetailVO big = getBigRangePVDetailVO(detailVOList, pkId);
bigAndSmallRangeVO.setBigRangeId(big.getPkId());
List<Long> smallIdList = detailVOList.stream()
.map(CuMemberRetailDataStatisticsDetailVO::getPkId).filter(id -> !id.equals(big.getPkId())).collect(Collectors.toList());
bigAndSmallRangeVO.setSmallRangeId(smallIdList);
return bigAndSmallRangeVO;
}
}

View File

@ -0,0 +1,18 @@
package com.hzs.retail.member.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.List;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class BigAndSmallRangeVO implements Serializable {
private Long bigRangeId;
private List<Long> smallRangeId;
}

View File

@ -0,0 +1,19 @@
package com.hzs.retail.member.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class CurrentMonthVO implements Serializable {
private BigDecimal totalCurrentMonthPV;
private BigDecimal smallCurrentMonthPV;
}