forked from angelo/java-retail-app
## Opt - 选择收益区域
This commit is contained in:
parent
622a066e0f
commit
279a17cf1e
|
@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollectionUtil;
|
|||
import cn.hutool.core.lang.tree.Tree;
|
||||
import cn.hutool.core.lang.tree.TreeNodeConfig;
|
||||
import cn.hutool.core.lang.tree.TreeUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.hzs.bonus.settle.IMemberSettleBonusApi;
|
||||
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.RetailMemberRegionVO;
|
||||
import com.hzs.system.base.IAreaServiceApi;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.dubbo.config.annotation.DubboReference;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
@ -47,6 +49,7 @@ import java.util.List;
|
|||
*/
|
||||
@RestController
|
||||
@RequestMapping("/api/retail-member")
|
||||
@Slf4j
|
||||
public class RetailMemberController extends BaseController {
|
||||
|
||||
@Autowired
|
||||
|
@ -63,6 +66,8 @@ public class RetailMemberController extends BaseController {
|
|||
@DubboReference
|
||||
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() {
|
||||
Long userId = SecurityUtils.getUserId();
|
||||
Integer systemType = SecurityUtils.getSystemType();
|
||||
Integer pkCountry = SecurityUtils.getPkCountry();
|
||||
|
||||
CuMemberRetailRegionExt cuMemberRetailRegionExt = iCuMemberRetailRegionService.getRegionByMember(userId, EGrade.S_VIP.getValue(), systemType);
|
||||
log.info("cuMemberRetailRegionExt -> {}", JSONUtil.toJsonStr(cuMemberRetailRegionExt));
|
||||
if (null != cuMemberRetailRegionExt) {
|
||||
// 已自选区域或者已后台指定
|
||||
if (null != cuMemberRetailRegionExt.getPkId()) {
|
||||
// 达到条件,也选择区域,需要进行显示
|
||||
return AjaxResult.success(RetailMemberRegionVO.builder()
|
||||
|
@ -101,14 +109,28 @@ public class RetailMemberController extends BaseController {
|
|||
.countyVal(cuMemberRetailRegionExt.getCountyVal())
|
||||
.build());
|
||||
}
|
||||
// 未自选或未后台指定 验证是否激活 未激活不允许选
|
||||
// getIsRegion - 后台业务特殊标记,非后台办理过的为1, 后台办理过的为0,当为0时, 不设定任何条件,直接可选收益区域
|
||||
if (EYesNo.YES.getIntValue() == cuMemberRetailRegionExt.getIsRegion()) {
|
||||
// 2024.12.30 添加需求,指定会员可以进行区域选择
|
||||
return AjaxResult.success(RetailMemberRegionVO.builder()
|
||||
.regionStatus(EYesNo.YES.getIntValue())
|
||||
.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 调整需求,当前会员必须有效(至少下过一单)
|
||||
if (iCuMemberRetailRegionService.getOrderCount(userId, systemType, BoxProductUtil.getBoxProductListBySystemType(systemType)) == 0) {
|
||||
return AjaxResult.success(RetailMemberRegionVO.builder()
|
||||
|
@ -125,18 +147,7 @@ public class RetailMemberController extends BaseController {
|
|||
.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()
|
||||
|
@ -157,21 +168,24 @@ public class RetailMemberController extends BaseController {
|
|||
Integer systemType = SecurityUtils.getSystemType();
|
||||
Integer pkCountry = SecurityUtils.getPkCountry();
|
||||
|
||||
CuMemberRetailRegionExt cuMemberRetailRegionExt = iCuMemberRetailRegionService.getRegionByMember(userId, EGrade.S_VIP.getValue(), systemType);
|
||||
if (null == cuMemberRetailRegionExt) {
|
||||
return AjaxResult.error("还未达到选择收益区域条件");
|
||||
} else {
|
||||
if (EYesNo.NO.getIntValue() == cuMemberRetailRegionExt.getIsRegion()) {
|
||||
// 2024.12.30 添加需求,会员可以指定可以进行区域选择,未指定权限才需要进行判断
|
||||
boolean canSet = false;
|
||||
|
||||
// 达到条件,但是没有选择区域,需要弹窗选择区域
|
||||
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);
|
||||
// TODO 2025.06.09 新需求,选择区域判断等级达到合伙人,血缘累计业绩达到30万,可以选择
|
||||
if (retailAchieve.getSmallAreaPv().add(retailAchieve.getBigArealPv()).compareTo(SysConstants.TOTAL_AREA_PV) < 0) {
|
||||
return AjaxResult.error("还未达到选择收益区域条件");
|
||||
if(retailAchieve.getArealPv().compareTo(REGIONAL_PERFORMANCE_THRESHOLD) >= 0){
|
||||
canSet = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!canSet){
|
||||
return AjaxResult.error("还未达到选择收益区域条件");
|
||||
}
|
||||
|
||||
if (param.getCounty().equals(0) || param.getCity().equals(0)) {
|
||||
// 区为0 或 市为0,没有选择区或者没有选择市
|
||||
|
|
|
@ -159,8 +159,8 @@ public interface CuMemberRetailRangeMapper extends BaseMapper<CuMemberRetailRang
|
|||
CuMemberRetailAchieveVO selectMemberOrderSumAchieveByPkMember(CuMemberRetailAchieveVO cuMemberAchieveVO);
|
||||
|
||||
/**
|
||||
* 查询会员直推业绩(累计)
|
||||
*
|
||||
* 查询会员直推业绩(日结+秒结)
|
||||
* orderType in (41,42,43,44)
|
||||
* @param cuMemberAchieveVO 入参
|
||||
* @return List<CuMemberRetailAchieveVO>
|
||||
*/
|
||||
|
@ -199,4 +199,5 @@ public interface CuMemberRetailRangeMapper extends BaseMapper<CuMemberRetailRang
|
|||
*/
|
||||
List<CuMemberRetailAchieveVO> selectMemberSmallBoxList(CuMemberRetailAchieveVO param);
|
||||
|
||||
List<Long> selectSubMemberIdByRootMember(@Param("pkMember") Long pkMember, @Param("systemType") Integer systemType);
|
||||
}
|
||||
|
|
|
@ -258,7 +258,13 @@ public class CuMemberRetailAchieveServiceImpl extends ServiceImpl<CuMemberRetail
|
|||
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);
|
||||
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();
|
||||
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) {
|
||||
//查询会员昨日业绩
|
||||
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();
|
||||
//查询自己业绩
|
||||
List<CuMemberRetailAchieveVO> memberSelfAchieveList = new ArrayList<>();
|
||||
|
||||
//会员业绩
|
||||
CuMemberRetailAchieveVO memberAchieveVO = CuMemberRetailAchieveVO.builder().memberRetailTable(memberRetailTable).pkMember(pkMember).systemType(systemType).build();
|
||||
CuMemberRetailAchieveVO orderAchieveVO = baseMapper.selectMemberOrderSumAchieveByPkMember(memberAchieveVO);
|
||||
if (null != orderAchieveVO && orderAchieveVO.getArealPv().compareTo(BigDecimal.ZERO) > 0) {
|
||||
orderAchieveVO.setPkMember(pkMember);
|
||||
memberSelfAchieveList.add(orderAchieveVO);
|
||||
}
|
||||
// CuMemberRetailAchieveVO memberAchieveVO = CuMemberRetailAchieveVO.builder().memberRetailTable(memberRetailTable).pkMember(pkMember).systemType(systemType).build();
|
||||
// CuMemberRetailAchieveVO orderAchieveVO = baseMapper.selectMemberOrderSumAchieveByPkMember(memberAchieveVO);
|
||||
// if (null != orderAchieveVO && orderAchieveVO.getArealPv().compareTo(BigDecimal.ZERO) > 0) {
|
||||
// orderAchieveVO.setPkMember(pkMember);
|
||||
// memberSelfAchieveList.add(orderAchieveVO);
|
||||
// }
|
||||
//查询伞下业绩
|
||||
if (CollUtil.isNotEmpty(pkMemberList)) {
|
||||
List<CuMemberRetailAchieveVO> memberPushAchieveList = getMemberPushSumAchieve(pkMemberList, memberRetailTable, systemType);
|
||||
List<CuMemberRetailAchieveVO> memberPushAchieveList = getMemberPushSumAchieve(pkMemberList, memberRetailTable, memberSecondTable, systemType);
|
||||
if (CollUtil.isNotEmpty(memberPushAchieveList)) {
|
||||
memberSelfAchieveList.addAll(memberPushAchieveList);
|
||||
}
|
||||
|
@ -399,7 +413,7 @@ public class CuMemberRetailAchieveServiceImpl extends ServiceImpl<CuMemberRetail
|
|||
if (CollUtil.isEmpty(memberSelfAchieveList)) {
|
||||
return CuMemberRetailAchieveVO.builder().smallAreaPv(BigDecimal.ZERO).bigArealPv(BigDecimal.ZERO).build();
|
||||
}
|
||||
return getMemberBigAndSmallAchieve(memberSelfAchieveList, rate);
|
||||
return getMemberBigAndSmallAchieve(memberSelfAchieveList, rate);
|
||||
}
|
||||
|
||||
|
||||
|
@ -409,8 +423,11 @@ public class CuMemberRetailAchieveServiceImpl extends ServiceImpl<CuMemberRetail
|
|||
* @param pkMemberList 直推会员ID
|
||||
* @return CuMemberAchieveVO
|
||||
*/
|
||||
private List<CuMemberRetailAchieveVO> getMemberPushSumAchieve(List<Long> pkMemberList, String memberRangeTable, Integer systemType) {
|
||||
CuMemberRetailAchieveVO memberAchieveVO = CuMemberRetailAchieveVO.builder().memberRetailTable(memberRangeTable).pkMemberList(pkMemberList).systemType(systemType).build();
|
||||
private List<CuMemberRetailAchieveVO> getMemberPushSumAchieve(List<Long> pkMemberList, String memberRangeTable,String memberSecondTable, Integer systemType) {
|
||||
CuMemberRetailAchieveVO memberAchieveVO = CuMemberRetailAchieveVO.builder()
|
||||
.memberRetailTable(memberRangeTable)
|
||||
.memberRetailSTable(memberSecondTable)
|
||||
.pkMemberList(pkMemberList).systemType(systemType).build();
|
||||
return baseMapper.selectMemberSumAchieve(memberAchieveVO);
|
||||
}
|
||||
|
||||
|
|
|
@ -461,7 +461,7 @@
|
|||
</select>
|
||||
|
||||
|
||||
<sql id="selectSmallAreaSumAchieve">
|
||||
<sql id="selectSmallAreaSumAchieveBak">
|
||||
<foreach collection="pkMemberList" item="pkMember" separator="union all">
|
||||
SELECT SUM(t1.arealPv) arealPv ,#{pkMember} pkMember
|
||||
FROM (
|
||||
|
@ -492,6 +492,23 @@
|
|||
AND t0.category = 0)) t1
|
||||
</foreach>
|
||||
</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">
|
||||
|
@ -809,4 +826,14 @@
|
|||
ORDER BY t3.monthBox desc
|
||||
</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>
|
||||
|
|
|
@ -9,7 +9,8 @@
|
|||
cmrr.*,
|
||||
bap.name province_val,
|
||||
bac.name city_val,
|
||||
bax.name county_val
|
||||
bax.name county_val,
|
||||
cm.IS_ACTIVATE
|
||||
from cu_member cm
|
||||
left join cu_member_retail_region cmrr
|
||||
on cmrr.pk_member = cm.pk_id
|
||||
|
@ -30,7 +31,7 @@
|
|||
and bax.del_flag = 0
|
||||
where cm.del_flag = 0
|
||||
and cm.pk_id = #{pkMember}
|
||||
and cm.IS_ACTIVATE=0
|
||||
-- and cm.IS_ACTIVATE=0
|
||||
and bg.grade_value >= #{gradeValue}
|
||||
</select>
|
||||
|
||||
|
|
|
@ -98,4 +98,8 @@ public class CuMemberRetailRegionExt extends CuMemberRetailRegion {
|
|||
*/
|
||||
private Integer pkCountry;
|
||||
|
||||
/**
|
||||
* 2025年6月11日 是否激活 (0-是, 1-否)
|
||||
*/
|
||||
private Integer isActivate;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue