3
0
Fork 0

## Opt - 选择收益区域

This commit is contained in:
sangelxiu1 2025-06-11 14:38:39 +08:00
parent 622a066e0f
commit 279a17cf1e
6 changed files with 105 additions and 41 deletions

View File

@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.tree.Tree; import cn.hutool.core.lang.tree.Tree;
import cn.hutool.core.lang.tree.TreeNodeConfig; import cn.hutool.core.lang.tree.TreeNodeConfig;
import cn.hutool.core.lang.tree.TreeUtil; import cn.hutool.core.lang.tree.TreeUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.hzs.bonus.settle.IMemberSettleBonusApi; import com.hzs.bonus.settle.IMemberSettleBonusApi;
import com.hzs.common.core.annotation.RepeatSubmitSimple; import com.hzs.common.core.annotation.RepeatSubmitSimple;
@ -33,6 +34,7 @@ import com.hzs.retail.member.vo.RecommendListVO;
import com.hzs.retail.member.vo.RetailMemberInfoVO; import com.hzs.retail.member.vo.RetailMemberInfoVO;
import com.hzs.retail.member.vo.RetailMemberRegionVO; import com.hzs.retail.member.vo.RetailMemberRegionVO;
import com.hzs.system.base.IAreaServiceApi; import com.hzs.system.base.IAreaServiceApi;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference; import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -47,6 +49,7 @@ import java.util.List;
*/ */
@RestController @RestController
@RequestMapping("/api/retail-member") @RequestMapping("/api/retail-member")
@Slf4j
public class RetailMemberController extends BaseController { public class RetailMemberController extends BaseController {
@Autowired @Autowired
@ -63,6 +66,8 @@ public class RetailMemberController extends BaseController {
@DubboReference @DubboReference
IMemberSettleBonusApi iMemberSettleBonusApi; IMemberSettleBonusApi iMemberSettleBonusApi;
// 2025年6月11日 判断可选择收益区域的伞下+自身业绩阈值 (30万)
private static final BigDecimal REGIONAL_PERFORMANCE_THRESHOLD = new BigDecimal("300000");
/** /**
* 获取登录会员信息 * 获取登录会员信息
* *
@ -86,9 +91,12 @@ public class RetailMemberController extends BaseController {
public AjaxResult getRegion() { public AjaxResult getRegion() {
Long userId = SecurityUtils.getUserId(); Long userId = SecurityUtils.getUserId();
Integer systemType = SecurityUtils.getSystemType(); Integer systemType = SecurityUtils.getSystemType();
Integer pkCountry = SecurityUtils.getPkCountry();
CuMemberRetailRegionExt cuMemberRetailRegionExt = iCuMemberRetailRegionService.getRegionByMember(userId, EGrade.S_VIP.getValue(), systemType); CuMemberRetailRegionExt cuMemberRetailRegionExt = iCuMemberRetailRegionService.getRegionByMember(userId, EGrade.S_VIP.getValue(), systemType);
log.info("cuMemberRetailRegionExt -> {}", JSONUtil.toJsonStr(cuMemberRetailRegionExt));
if (null != cuMemberRetailRegionExt) { if (null != cuMemberRetailRegionExt) {
// 已自选区域或者已后台指定
if (null != cuMemberRetailRegionExt.getPkId()) { if (null != cuMemberRetailRegionExt.getPkId()) {
// 达到条件也选择区域需要进行显示 // 达到条件也选择区域需要进行显示
return AjaxResult.success(RetailMemberRegionVO.builder() return AjaxResult.success(RetailMemberRegionVO.builder()
@ -101,14 +109,28 @@ public class RetailMemberController extends BaseController {
.countyVal(cuMemberRetailRegionExt.getCountyVal()) .countyVal(cuMemberRetailRegionExt.getCountyVal())
.build()); .build());
} }
// 未自选或未后台指定 验证是否激活 未激活不允许选
// getIsRegion - 后台业务特殊标记,非后台办理过的为1, 后台办理过的为0,当为0时, 不设定任何条件,直接可选收益区域
if (EYesNo.YES.getIntValue() == cuMemberRetailRegionExt.getIsRegion()) { if (EYesNo.YES.getIntValue() == cuMemberRetailRegionExt.getIsRegion()) {
// 2024.12.30 添加需求指定会员可以进行区域选择 // 2024.12.30 添加需求指定会员可以进行区域选择
return AjaxResult.success(RetailMemberRegionVO.builder() return AjaxResult.success(RetailMemberRegionVO.builder()
.regionStatus(EYesNo.YES.getIntValue()) .regionStatus(EYesNo.YES.getIntValue())
.build()); .build());
} }
if (null == cuMemberRetailRegionExt.getPkId()) { if(EYesNo.YES.getIntValue() == cuMemberRetailRegionExt.getIsActivate()){
CuMemberRetailAchieveVO retailAchieve = iCuMemberRetailAchieveService.selectMemberSumAchieve(userId, pkCountry, systemType);
log.info("retailAchieve : {}", JSONUtil.toJsonStr(retailAchieve));
if(retailAchieve.getArealPv().compareTo(REGIONAL_PERFORMANCE_THRESHOLD) >= 0){
return AjaxResult.success(RetailMemberRegionVO.builder()
.regionStatus(EYesNo.YES.getIntValue())
.build());
}
}
// 达到条件但是没有选择区域需要弹窗选择区域 // 达到条件但是没有选择区域需要弹窗选择区域
// 验证伞下业绩+自己是否累计30W
/*
2025年6月11日 取消其他验证
// 2025.01.11 调整需求当前会员必须有效至少下过一单 // 2025.01.11 调整需求当前会员必须有效至少下过一单
if (iCuMemberRetailRegionService.getOrderCount(userId, systemType, BoxProductUtil.getBoxProductListBySystemType(systemType)) == 0) { if (iCuMemberRetailRegionService.getOrderCount(userId, systemType, BoxProductUtil.getBoxProductListBySystemType(systemType)) == 0) {
return AjaxResult.success(RetailMemberRegionVO.builder() return AjaxResult.success(RetailMemberRegionVO.builder()
@ -125,18 +147,7 @@ public class RetailMemberController extends BaseController {
.build()); .build());
} }
} }
} else { */
// 达到条件也选择区域需要进行显示并且可以修改
return AjaxResult.success(RetailMemberRegionVO.builder()
.regionStatus(EYesNo.YES.getIntValue())
.province(cuMemberRetailRegionExt.getProvince())
.provinceVal(cuMemberRetailRegionExt.getProvinceVal())
.city(cuMemberRetailRegionExt.getCity())
.cityVal(cuMemberRetailRegionExt.getCityVal())
.county(cuMemberRetailRegionExt.getCounty())
.countyVal(cuMemberRetailRegionExt.getCountyVal())
.build());
}
} }
// 没达到条件不需要显示区域 // 没达到条件不需要显示区域
return AjaxResult.success(RetailMemberRegionVO.builder() return AjaxResult.success(RetailMemberRegionVO.builder()
@ -157,21 +168,24 @@ public class RetailMemberController extends BaseController {
Integer systemType = SecurityUtils.getSystemType(); Integer systemType = SecurityUtils.getSystemType();
Integer pkCountry = SecurityUtils.getPkCountry(); Integer pkCountry = SecurityUtils.getPkCountry();
CuMemberRetailRegionExt cuMemberRetailRegionExt = iCuMemberRetailRegionService.getRegionByMember(userId, EGrade.S_VIP.getValue(), systemType); boolean canSet = false;
if (null == cuMemberRetailRegionExt) {
return AjaxResult.error("还未达到选择收益区域条件");
} else {
if (EYesNo.NO.getIntValue() == cuMemberRetailRegionExt.getIsRegion()) {
// 2024.12.30 添加需求会员可以指定可以进行区域选择未指定权限才需要进行判断
// 达到条件但是没有选择区域需要弹窗选择区域 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;
}
if(EYesNo.YES.getIntValue() == cuMemberRetailRegionExt.getIsActivate()){
CuMemberRetailAchieveVO retailAchieve = iCuMemberRetailAchieveService.selectMemberSumAchieve(userId, pkCountry, systemType); CuMemberRetailAchieveVO retailAchieve = iCuMemberRetailAchieveService.selectMemberSumAchieve(userId, pkCountry, systemType);
// TODO 2025.06.09 新需求选择区域判断等级达到合伙人血缘累计业绩达到30万可以选择 if(retailAchieve.getArealPv().compareTo(REGIONAL_PERFORMANCE_THRESHOLD) >= 0){
if (retailAchieve.getSmallAreaPv().add(retailAchieve.getBigArealPv()).compareTo(SysConstants.TOTAL_AREA_PV) < 0) { canSet = true;
}
}
}
if(!canSet){
return AjaxResult.error("还未达到选择收益区域条件"); return AjaxResult.error("还未达到选择收益区域条件");
} }
}
}
if (param.getCounty().equals(0) || param.getCity().equals(0)) { if (param.getCounty().equals(0) || param.getCity().equals(0)) {
// 区为0 市为0没有选择区或者没有选择市 // 区为0 市为0没有选择区或者没有选择市

View File

@ -159,8 +159,8 @@ public interface CuMemberRetailRangeMapper extends BaseMapper<CuMemberRetailRang
CuMemberRetailAchieveVO selectMemberOrderSumAchieveByPkMember(CuMemberRetailAchieveVO cuMemberAchieveVO); CuMemberRetailAchieveVO selectMemberOrderSumAchieveByPkMember(CuMemberRetailAchieveVO cuMemberAchieveVO);
/** /**
* 查询会员直推业绩(累计) * 查询会员直推业绩(日结+秒结)
* * orderType in (41,42,43,44)
* @param cuMemberAchieveVO 入参 * @param cuMemberAchieveVO 入参
* @return List<CuMemberRetailAchieveVO> * @return List<CuMemberRetailAchieveVO>
*/ */
@ -199,4 +199,5 @@ public interface CuMemberRetailRangeMapper extends BaseMapper<CuMemberRetailRang
*/ */
List<CuMemberRetailAchieveVO> selectMemberSmallBoxList(CuMemberRetailAchieveVO param); List<CuMemberRetailAchieveVO> selectMemberSmallBoxList(CuMemberRetailAchieveVO param);
List<Long> selectSubMemberIdByRootMember(@Param("pkMember") Long pkMember, @Param("systemType") Integer systemType);
} }

View File

@ -258,7 +258,13 @@ public class CuMemberRetailAchieveServiceImpl extends ServiceImpl<CuMemberRetail
CuMemberRetailAchieveVO maxAchieveVO = memberAchieveList.stream().max(Comparator.comparing(CuMemberRetailAchieveVO::getArealPv)).get(); CuMemberRetailAchieveVO maxAchieveVO = memberAchieveList.stream().max(Comparator.comparing(CuMemberRetailAchieveVO::getArealPv)).get();
//查询小区业绩 //查询小区业绩
BigDecimal smallAreaPv = memberAchieveList.stream().filter(achieveVO -> !achieveVO.getPkMember().equals(maxAchieveVO.getPkMember())).map(vo -> null == vo.getArealPv() ? BigDecimal.ZERO : vo.getArealPv()).reduce(BigDecimal.ZERO, BigDecimal::add); BigDecimal smallAreaPv = memberAchieveList.stream().filter(achieveVO -> !achieveVO.getPkMember().equals(maxAchieveVO.getPkMember())).map(vo -> null == vo.getArealPv() ? BigDecimal.ZERO : vo.getArealPv()).reduce(BigDecimal.ZERO, BigDecimal::add);
return CuMemberRetailAchieveVO.builder().smallAreaPv(getBigDecimal(smallAreaPv, rate)).pkBigMember(maxAchieveVO.getPkMember()).bigArealPv(getBigDecimal(maxAchieveVO.getArealPv(), rate)).build(); // return CuMemberRetailAchieveVO.builder().smallAreaPv(getBigDecimal(smallAreaPv, rate)).pkBigMember(maxAchieveVO.getPkMember()).bigArealPv(getBigDecimal(maxAchieveVO.getArealPv(), rate)).build();
return CuMemberRetailAchieveVO.builder()
.smallAreaPv(smallAreaPv)
.pkBigMember(maxAchieveVO.getPkMember())
.bigArealPv(maxAchieveVO.getArealPv())
.arealPv(maxAchieveVO.getArealPv())
.build();
} }
@ -295,6 +301,11 @@ public class CuMemberRetailAchieveServiceImpl extends ServiceImpl<CuMemberRetail
int period = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(localDate).getPkId(); int period = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(localDate).getPkId();
return TableNameConstants.CU_MEMBER_RETAIL_RANGE + period; 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();
return TableNameConstants.CU_MEMBER_RETAIL_S + period;
}
/** /**
@ -375,23 +386,26 @@ public class CuMemberRetailAchieveServiceImpl extends ServiceImpl<CuMemberRetail
public CuMemberRetailAchieveVO selectMemberSumAchieve(Long pkMember, Integer pkCountry, Integer systemType) { public CuMemberRetailAchieveVO selectMemberSumAchieve(Long pkMember, Integer pkCountry, Integer systemType) {
//查询会员昨日业绩 //查询会员昨日业绩
String memberRetailTable = getTableName(); String memberRetailTable = getTableName();
String memberSecondTable = getDayTableName();
//查询直推会员 //查询直推会员
List<Long> pkMemberList = baseMapper.selectDirectPushByPkMember(pkMember, systemType); // List<Long> pkMemberList = baseMapper.selectDirectPushByPkMember(pkMember, systemType);
// 2025年6月11日 取伞下 + 自己的ID
List<Long> pkMemberList = baseMapper.selectSubMemberIdByRootMember(pkMember, systemType);
//根据国家查汇率 //根据国家查汇率
BigDecimal rate = iCuMemberBaseService.getCurrency(pkCountry).getInExchangeRate(); BigDecimal rate = iCuMemberBaseService.getCurrency(pkCountry).getInExchangeRate();
//查询自己业绩 //查询自己业绩
List<CuMemberRetailAchieveVO> memberSelfAchieveList = new ArrayList<>(); List<CuMemberRetailAchieveVO> memberSelfAchieveList = new ArrayList<>();
//会员业绩 //会员业绩
CuMemberRetailAchieveVO memberAchieveVO = CuMemberRetailAchieveVO.builder().memberRetailTable(memberRetailTable).pkMember(pkMember).systemType(systemType).build(); // CuMemberRetailAchieveVO memberAchieveVO = CuMemberRetailAchieveVO.builder().memberRetailTable(memberRetailTable).pkMember(pkMember).systemType(systemType).build();
CuMemberRetailAchieveVO orderAchieveVO = baseMapper.selectMemberOrderSumAchieveByPkMember(memberAchieveVO); // CuMemberRetailAchieveVO orderAchieveVO = baseMapper.selectMemberOrderSumAchieveByPkMember(memberAchieveVO);
if (null != orderAchieveVO && orderAchieveVO.getArealPv().compareTo(BigDecimal.ZERO) > 0) { // if (null != orderAchieveVO && orderAchieveVO.getArealPv().compareTo(BigDecimal.ZERO) > 0) {
orderAchieveVO.setPkMember(pkMember); // orderAchieveVO.setPkMember(pkMember);
memberSelfAchieveList.add(orderAchieveVO); // memberSelfAchieveList.add(orderAchieveVO);
} // }
//查询伞下业绩 //查询伞下业绩
if (CollUtil.isNotEmpty(pkMemberList)) { if (CollUtil.isNotEmpty(pkMemberList)) {
List<CuMemberRetailAchieveVO> memberPushAchieveList = getMemberPushSumAchieve(pkMemberList, memberRetailTable, systemType); List<CuMemberRetailAchieveVO> memberPushAchieveList = getMemberPushSumAchieve(pkMemberList, memberRetailTable, memberSecondTable, systemType);
if (CollUtil.isNotEmpty(memberPushAchieveList)) { if (CollUtil.isNotEmpty(memberPushAchieveList)) {
memberSelfAchieveList.addAll(memberPushAchieveList); memberSelfAchieveList.addAll(memberPushAchieveList);
} }
@ -409,8 +423,11 @@ public class CuMemberRetailAchieveServiceImpl extends ServiceImpl<CuMemberRetail
* @param pkMemberList 直推会员ID * @param pkMemberList 直推会员ID
* @return CuMemberAchieveVO * @return CuMemberAchieveVO
*/ */
private List<CuMemberRetailAchieveVO> getMemberPushSumAchieve(List<Long> pkMemberList, String memberRangeTable, Integer systemType) { private List<CuMemberRetailAchieveVO> getMemberPushSumAchieve(List<Long> pkMemberList, String memberRangeTable,String memberSecondTable, Integer systemType) {
CuMemberRetailAchieveVO memberAchieveVO = CuMemberRetailAchieveVO.builder().memberRetailTable(memberRangeTable).pkMemberList(pkMemberList).systemType(systemType).build(); CuMemberRetailAchieveVO memberAchieveVO = CuMemberRetailAchieveVO.builder()
.memberRetailTable(memberRangeTable)
.memberRetailSTable(memberSecondTable)
.pkMemberList(pkMemberList).systemType(systemType).build();
return baseMapper.selectMemberSumAchieve(memberAchieveVO); return baseMapper.selectMemberSumAchieve(memberAchieveVO);
} }

View File

@ -461,7 +461,7 @@
</select> </select>
<sql id="selectSmallAreaSumAchieve"> <sql id="selectSmallAreaSumAchieveBak">
<foreach collection="pkMemberList" item="pkMember" separator="union all"> <foreach collection="pkMemberList" item="pkMember" separator="union all">
SELECT SUM(t1.arealPv) arealPv ,#{pkMember} pkMember SELECT SUM(t1.arealPv) arealPv ,#{pkMember} pkMember
FROM ( FROM (
@ -492,6 +492,23 @@
AND t0.category = 0)) t1 AND t0.category = 0)) t1
</foreach> </foreach>
</sql> </sql>
<sql id="selectSmallAreaSumAchieve">
<foreach collection="pkMemberList" item="pkMember" separator="union all">
SELECT SUM(t1.arealPv) arealPv ,#{pkMember} pkMember
FROM (
SELECT NVL(mr.CONSUME_PV + mr.TEAM_CONSUME_PV,0) arealPv
FROM ${memberRetailTable} mr
WHERE mr.category = 0
AND mr.pk_member = #{pkMember}
UNION ALL
SELECT
NVL( mrs.NEW_CONSUME_PV + mrs.TEAM_NEW_PV, 0 ) arealPv
FROM
${memberRetailSTable} mrs
WHERE mrs.pk_member = #{pkMember}
) t1
</foreach>
</sql>
<select id="selectMemberSumAchieve" resultType="com.hzs.retail.member.vo.CuMemberRetailAchieveVO"> <select id="selectMemberSumAchieve" resultType="com.hzs.retail.member.vo.CuMemberRetailAchieveVO">
@ -809,4 +826,14 @@
ORDER BY t3.monthBox desc ORDER BY t3.monthBox desc
</select> </select>
<!--市场动态盒数 结束--> <!--市场动态盒数 结束-->
<select id="selectSubMemberIdByRootMember" resultType="java.lang.Long">
select cm.pk_id, cm.MEMBER_NAME
from cu_member cm
where cm.SYSTEM_TYPE = #{systemType}
start with cm.pk_id = #{pkMember}
connect by prior cm.pk_id = cm.pk_parent
order by level
</select>
</mapper> </mapper>

View File

@ -9,7 +9,8 @@
cmrr.*, cmrr.*,
bap.name province_val, bap.name province_val,
bac.name city_val, bac.name city_val,
bax.name county_val bax.name county_val,
cm.IS_ACTIVATE
from cu_member cm from cu_member cm
left join cu_member_retail_region cmrr left join cu_member_retail_region cmrr
on cmrr.pk_member = cm.pk_id on cmrr.pk_member = cm.pk_id
@ -30,7 +31,7 @@
and bax.del_flag = 0 and bax.del_flag = 0
where cm.del_flag = 0 where cm.del_flag = 0
and cm.pk_id = #{pkMember} and cm.pk_id = #{pkMember}
and cm.IS_ACTIVATE=0 -- and cm.IS_ACTIVATE=0
and bg.grade_value >= #{gradeValue} and bg.grade_value >= #{gradeValue}
</select> </select>

View File

@ -98,4 +98,8 @@ public class CuMemberRetailRegionExt extends CuMemberRetailRegion {
*/ */
private Integer pkCountry; private Integer pkCountry;
/**
* 2025年6月11日 是否激活 (0-, 1-)
*/
private Integer isActivate;
} }