## 区域收益改为商品价格的5%;盒数大小区计算调整;秒结计算等级以会员表关系为主查询;
This commit is contained in:
parent
69fce5f8bd
commit
564fb2bf12
|
@ -86,6 +86,7 @@ public class CuMemberRetailRangeServiceImpl extends ServiceImpl<CuMemberRetailRa
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<CuMemberRetailRangeExt> queryCuMemberSecondRangeParent(String rangeTableName, String secondTableName, Long pkMember) {
|
public List<CuMemberRetailRangeExt> queryCuMemberSecondRangeParent(String rangeTableName, String secondTableName, Long pkMember) {
|
||||||
|
// 查询伞上
|
||||||
return baseMapper.queryCuMemberSecondRangeParent(rangeTableName, secondTableName, pkMember);
|
return baseMapper.queryCuMemberSecondRangeParent(rangeTableName, secondTableName, pkMember);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -169,9 +170,9 @@ public class CuMemberRetailRangeServiceImpl extends ServiceImpl<CuMemberRetailRa
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mergeMemberSecondRetailRangeByRange(String rangeTableName, String secondRangeTableName, Long pkMember) {
|
public void mergeMemberSecondRetailRangeByRange(String rangeTableName, String secondRangeTableName, Long pkMember) {
|
||||||
// 当前网体更新极差秒接表(自己伞上)
|
// 当前网体更新极差秒接表(血缘伞上)
|
||||||
baseMapper.mergeMemberSecondRetailRangeByRange(secondRangeTableName, pkMember);
|
baseMapper.mergeMemberSecondRetailRangeByRange(secondRangeTableName, pkMember);
|
||||||
// 昨天的结算表更新极差秒结状态
|
// 昨天的结算表更新极差秒结(激活状态和等级)
|
||||||
baseMapper.mergeMemberSecondRetailRangeByRangeEnable(rangeTableName, secondRangeTableName, pkMember);
|
baseMapper.mergeMemberSecondRetailRangeByRangeEnable(rangeTableName, secondRangeTableName, pkMember);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package com.hzs.bonus.bonus.service.impl;
|
package com.hzs.bonus.bonus.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import com.hzs.bonus.achieve.service.ICuMemberRangeService;
|
import com.hzs.bonus.achieve.service.ICuMemberRangeService;
|
||||||
import com.hzs.bonus.achieve.service.ICuMemberRetailRangeService;
|
import com.hzs.bonus.achieve.service.ICuMemberRetailRangeService;
|
||||||
import com.hzs.bonus.base.service.ICuMemberService;
|
import com.hzs.bonus.base.service.ICuMemberService;
|
||||||
|
@ -64,13 +65,13 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
|
||||||
Map<Long, CuMemberBonus> cuMemberBonusMap, List<CuMemberBonusDetail> cuMemberBonusDetailList) {
|
Map<Long, CuMemberBonus> cuMemberBonusMap, List<CuMemberBonusDetail> cuMemberBonusDetailList) {
|
||||||
// 会员级差表
|
// 会员级差表
|
||||||
String rangeTableName = TableNameConstants.CU_MEMBER_RETAIL_RANGE + beforePeriod;
|
String rangeTableName = TableNameConstants.CU_MEMBER_RETAIL_RANGE + beforePeriod;
|
||||||
// 更新极差秒接表,用昨天的结算表(从当前会员往上找到顶)
|
// 更新极差秒接表,用昨天的结算表(血缘伞上)
|
||||||
iCuMemberRetailRangeService.mergeMemberSecondRetailRangeByRange(rangeTableName, secondRangeTableName, saOrderExt.getPkMember());
|
iCuMemberRetailRangeService.mergeMemberSecondRetailRangeByRange(rangeTableName, secondRangeTableName, saOrderExt.getPkMember());
|
||||||
// 处理会员等级(查询会员最新手动升级记录,更新秒结表会员等级小于手动升级的会员等级)
|
// 处理会员等级(查询会员最新手动升级记录,更新秒结表会员等级小于手动升级的会员等级)
|
||||||
// TODO new 秒结只影响上面,更新等级只更新血缘上就可以?不需要全网更新??
|
// TODO new 秒结只影响上面,更新等级应该只更新血缘上就可以,不需要全网更新 -- 是否需要修改???
|
||||||
iCuMemberGradeService.updateCuMemberGradeSecond(secondRangeTableName, currentPeriod);
|
iCuMemberGradeService.updateCuMemberGradeSecond(secondRangeTableName, currentPeriod);
|
||||||
|
|
||||||
// 按照血缘,查询该会员所有伞上会员(昨天日结表累计值 + 今天秒结表新増值)
|
// 按照血缘,查询该会员血缘伞上(昨天日结表累计值 + 今天秒结表新増值)
|
||||||
List<CuMemberRetailRangeExt> memberRetailRangeExtList = iCuMemberRetailRangeService.queryCuMemberSecondRangeParent(rangeTableName, secondRangeTableName, saOrderExt.getPkMember());
|
List<CuMemberRetailRangeExt> memberRetailRangeExtList = iCuMemberRetailRangeService.queryCuMemberSecondRangeParent(rangeTableName, secondRangeTableName, saOrderExt.getPkMember());
|
||||||
|
|
||||||
// 会员结算map(key:会员ID,value:结算扩展)
|
// 会员结算map(key:会员ID,value:结算扩展)
|
||||||
|
@ -227,7 +228,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
|
||||||
iCuMemberRetailRangeService.mergeMemberRetailGradeByMember(secondRangeTableName, saOrderExt.getPkMember());
|
iCuMemberRetailRangeService.mergeMemberRetailGradeByMember(secondRangeTableName, saOrderExt.getPkMember());
|
||||||
// 恢复秒结表奖衔
|
// 恢复秒结表奖衔
|
||||||
iCuMemberAwardsService.mergeCuMemberBackAwards(secondRangeTableName, saOrderExt.getPkMember(), currentPeriod);
|
iCuMemberAwardsService.mergeCuMemberBackAwards(secondRangeTableName, saOrderExt.getPkMember(), currentPeriod);
|
||||||
// 查询 昨天日结 + 今天秒结 血缘上会员结算数据
|
// 查询 昨天日结 + 今天秒结 血缘伞上+直推
|
||||||
memberRetailRangeExtList = iCuMemberRetailRangeService.queryCuMemberSecondRangeParent(rangeTableName, secondRangeTableName, saOrderExt.getPkMember());
|
memberRetailRangeExtList = iCuMemberRetailRangeService.queryCuMemberSecondRangeParent(rangeTableName, secondRangeTableName, saOrderExt.getPkMember());
|
||||||
} else {
|
} else {
|
||||||
// 非当天撤单
|
// 非当天撤单
|
||||||
|
@ -915,7 +916,8 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
|
||||||
targetMemberRangeExt.setMonthBoxNum(targetMemberRangeExt.getMonthBoxNum() + boxNum);
|
targetMemberRangeExt.setMonthBoxNum(targetMemberRangeExt.getMonthBoxNum() + boxNum);
|
||||||
targetMemberRangeExt.setTeamNewBoxNum(targetMemberRangeExt.getTeamNewBoxNum() + boxNum);
|
targetMemberRangeExt.setTeamNewBoxNum(targetMemberRangeExt.getTeamNewBoxNum() + boxNum);
|
||||||
// 计算等级
|
// 计算等级
|
||||||
calculateGradeAwards(period, memberRangeExtMap, rangeTableName, saOrderExt, retailTeamGradeMap, retailAwardsMap, secondRangeTableName, cuMemberGradeList, cuMemberAwardsList, targetMemberRangeExt);
|
calculateGradeAwards(period, memberRangeExtMap, rangeTableName, saOrderExt, retailTeamGradeMap, retailAwardsMap,
|
||||||
|
secondRangeTableName, cuMemberGradeList, cuMemberAwardsList, targetMemberRangeExt);
|
||||||
}
|
}
|
||||||
targetMemberRangeExt = memberRangeExtMap.get(targetMemberRangeExt.getPkParent());
|
targetMemberRangeExt = memberRangeExtMap.get(targetMemberRangeExt.getPkParent());
|
||||||
}
|
}
|
||||||
|
@ -943,37 +945,35 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
|
||||||
cuMemberRangeExtList = iCuMemberRetailRangeService.queryCuMemberRetailRangeExtByParent(rangeTableName, targetMemberRangeExt.getPkMember());
|
cuMemberRangeExtList = iCuMemberRetailRangeService.queryCuMemberRetailRangeExtByParent(rangeTableName, targetMemberRangeExt.getPkMember());
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO new 秒结处理这块应该有问题,自己消费的盒数直接当成大区,如果昨天直推会员有数据,查询秒结表可能没有这些会员,此处就可能出现问题
|
// new 新逻辑确认:注水 2 个虚拟区,自己消费 1 个虚拟区,伞下直推,所有的最大
|
||||||
// 有注水的,大区无限大,新增全算小区
|
// 大区盒数(默认为自己累计消费盒数)
|
||||||
// 大区盒数
|
|
||||||
int bigBoxNum = targetMemberRangeExt.getConsumeBoxNum();
|
int bigBoxNum = targetMemberRangeExt.getConsumeBoxNum();
|
||||||
if (targetMemberRangeExt.getBigBoxNum() > 0) {
|
if (targetMemberRangeExt.getBigBoxNum() > bigBoxNum) {
|
||||||
// 大区存在注水盒数,直接使用大区注水盒数
|
// 注水大区如果大则使用注水盒数为大区
|
||||||
bigBoxNum = targetMemberRangeExt.getBigBoxNum();
|
bigBoxNum = targetMemberRangeExt.getBigBoxNum();
|
||||||
} else {
|
}
|
||||||
// 秒结 cuMemberRangeExtList 为直推会员数据, memberRangeExtMap 为会员伞上数据,这块应该永远不会处理
|
// 秒结补全直推数据,此处秒结和日结可以使用同一逻辑
|
||||||
// 日结这块处理直推判断大小区没问题
|
for (CuMemberRetailRangeExt cuMemberRetailRangeExt : cuMemberRangeExtList) {
|
||||||
for (CuMemberRetailRangeExt cuMemberRetailRangeExt : cuMemberRangeExtList) {
|
if (memberRangeExtMap.containsKey(cuMemberRetailRangeExt.getPkMember())) {
|
||||||
if (memberRangeExtMap.containsKey(cuMemberRetailRangeExt.getPkMember())) {
|
cuMemberRetailRangeExt = memberRangeExtMap.get(cuMemberRetailRangeExt.getPkMember());
|
||||||
cuMemberRetailRangeExt = memberRangeExtMap.get(cuMemberRetailRangeExt.getPkMember());
|
}
|
||||||
}
|
// 最新确认逻辑,计算大小区时,不需要去掉注水
|
||||||
// 伞下团队累计盒数 + 自己消费盒数 - 大区注水 - 小区注水
|
// 伞下团队累计盒数 + 自己消费盒数
|
||||||
int areaBoxNum = cuMemberRetailRangeExt.getTeamBoxNum() + cuMemberRetailRangeExt.getConsumeBoxNum()
|
int areaBoxNum = cuMemberRetailRangeExt.getTeamBoxNum() + cuMemberRetailRangeExt.getConsumeBoxNum();
|
||||||
- cuMemberRetailRangeExt.getBigBoxNum() - cuMemberRetailRangeExt.getSmallBoxNum();
|
if (areaBoxNum > bigBoxNum) {
|
||||||
if (areaBoxNum > bigBoxNum) {
|
// 实际订单累计盒数 大于 累计消费盒数,实际订单累计盒数为大区
|
||||||
// 实际订单累计盒数 大于 累计消费盒数,实际订单累计盒数为大区
|
bigBoxNum = areaBoxNum;
|
||||||
bigBoxNum = areaBoxNum;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 小区盒数
|
// 小区盒数
|
||||||
int smallBoxNum = targetMemberRangeExt.getTeamBoxNum() + targetMemberRangeExt.getConsumeBoxNum() - bigBoxNum;
|
int smallBoxNum = targetMemberRangeExt.getTeamBoxNum() + targetMemberRangeExt.getConsumeBoxNum() - bigBoxNum;
|
||||||
if (smallBoxNum >= bdGrade.getBoxSmallTotal()) {
|
if (smallBoxNum >= bdGrade.getBoxSmallTotal()) {
|
||||||
// 小区盒数 大于等于 升级小区盒数
|
// 小区盒数 大于等于 升级小区盒数
|
||||||
CuMemberGrade cuMemberGrade = getCuMemberGrade(period, targetMemberRangeExt, bdGrade);
|
CuMemberGrade cuMemberGrade = getCuMemberGrade(period, targetMemberRangeExt, bdGrade);
|
||||||
cuMemberGradeList.add(cuMemberGrade);
|
cuMemberGradeList.add(cuMemberGrade);
|
||||||
targetMemberRangeExt.setGradeValue(bdGrade.getGradeValue());
|
|
||||||
targetMemberRangeExt.setPkGrade(bdGrade.getPkId());
|
targetMemberRangeExt.setPkGrade(bdGrade.getPkId());
|
||||||
|
targetMemberRangeExt.setGradeValue(bdGrade.getGradeValue());
|
||||||
targetMemberRangeExt.setGradeName(bdGrade.getGradeName());
|
targetMemberRangeExt.setGradeName(bdGrade.getGradeName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1131,28 +1131,27 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
|
||||||
cuMemberRangeExtList = iCuMemberRetailRangeService.queryCuMemberRetailRangeExtByParent(rangeTableName, targetMemberRangeExt.getPkMember());
|
cuMemberRangeExtList = iCuMemberRetailRangeService.queryCuMemberRetailRangeExtByParent(rangeTableName, targetMemberRangeExt.getPkMember());
|
||||||
}
|
}
|
||||||
|
|
||||||
// 有注水的,大区无限大,新增全算小区
|
// new 新逻辑确认:注水 2 个虚拟区,自己消费 1 个虚拟区,伞下直推,所有的最大
|
||||||
// 大区盒数
|
// 大区盒数(默认为自己累计消费盒数)
|
||||||
int bigBoxNum = targetMemberRangeExt.getConsumeBoxNum();
|
int bigBoxNum = targetMemberRangeExt.getConsumeBoxNum();
|
||||||
if (targetMemberRangeExt.getBigBoxNum() > 0) {
|
if (targetMemberRangeExt.getBigBoxNum() > bigBoxNum) {
|
||||||
// 大区存在注水盒数,直接使用大区注水盒数
|
// 注水大区如果大则使用注水盒数为大区
|
||||||
bigBoxNum = targetMemberRangeExt.getBigBoxNum();
|
bigBoxNum = targetMemberRangeExt.getBigBoxNum();
|
||||||
} else {
|
}
|
||||||
// 秒结 cuMemberRangeExtList 为直推会员数据, memberRangeExtMap 为会员伞上数据,这块应该永远不会处理
|
// 秒结补全直推数据,此处秒结和日结可以使用同一逻辑
|
||||||
// 日结这块处理直推判断大小区没问题
|
for (CuMemberRetailRangeExt cuMemberRetailRangeExt : cuMemberRangeExtList) {
|
||||||
for (CuMemberRetailRangeExt cuMemberRetailRangeExt : cuMemberRangeExtList) {
|
if (memberRangeExtMap.containsKey(cuMemberRetailRangeExt.getPkMember())) {
|
||||||
if (memberRangeExtMap.containsKey(cuMemberRetailRangeExt.getPkMember())) {
|
cuMemberRetailRangeExt = memberRangeExtMap.get(cuMemberRetailRangeExt.getPkMember());
|
||||||
cuMemberRetailRangeExt = memberRangeExtMap.get(cuMemberRetailRangeExt.getPkMember());
|
}
|
||||||
}
|
// 最新确认逻辑,计算大小区时,不需要去掉注水
|
||||||
// 伞下团队累计盒数 + 自己消费盒数 - 大区注水 - 小区注水
|
// 伞下团队累计盒数 + 自己消费盒数
|
||||||
int areaBoxNum = cuMemberRetailRangeExt.getTeamBoxNum() + cuMemberRetailRangeExt.getConsumeBoxNum()
|
int areaBoxNum = cuMemberRetailRangeExt.getTeamBoxNum() + cuMemberRetailRangeExt.getConsumeBoxNum();
|
||||||
- cuMemberRetailRangeExt.getBigBoxNum() - cuMemberRetailRangeExt.getSmallBoxNum();
|
if (areaBoxNum > bigBoxNum) {
|
||||||
if (areaBoxNum > bigBoxNum) {
|
// 实际订单累计盒数 大于 累计消费盒数,实际订单累计盒数为大区
|
||||||
// 实际订单累计盒数 大于 累计消费盒数,实际订单累计盒数为大区
|
bigBoxNum = areaBoxNum;
|
||||||
bigBoxNum = areaBoxNum;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 小区盒数
|
// 小区盒数
|
||||||
int smallBoxNum = targetMemberRangeExt.getTeamBoxNum() + targetMemberRangeExt.getConsumeBoxNum() - bigBoxNum;
|
int smallBoxNum = targetMemberRangeExt.getTeamBoxNum() + targetMemberRangeExt.getConsumeBoxNum() - bigBoxNum;
|
||||||
if (smallBoxNum >= bdGrade.getBoxSmallTotal()) {
|
if (smallBoxNum >= bdGrade.getBoxSmallTotal()) {
|
||||||
|
@ -1310,6 +1309,11 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
|
||||||
// 推荐人
|
// 推荐人
|
||||||
long pkParent = sourceMemberRangeExt.getPkParent();
|
long pkParent = sourceMemberRangeExt.getPkParent();
|
||||||
// 商品价格(没有乘商品数量)
|
// 商品价格(没有乘商品数量)
|
||||||
|
BigDecimal waresPrice = saOrderItems.getWaresPrice();
|
||||||
|
// 商品数量
|
||||||
|
Integer waresQuantity = saOrderItems.getWaresQuantity();
|
||||||
|
|
||||||
|
// 商品价格
|
||||||
BigDecimal beginBuyPrice = saOrderItems.getWaresPrice();
|
BigDecimal beginBuyPrice = saOrderItems.getWaresPrice();
|
||||||
BigDecimal comBuyPrice = saOrderItems.getWaresPrice();
|
BigDecimal comBuyPrice = saOrderItems.getWaresPrice();
|
||||||
|
|
||||||
|
@ -1318,8 +1322,12 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
|
||||||
// 直推级差收益
|
// 直推级差收益
|
||||||
BigDecimal calBonusIncome = BigDecimal.ZERO;
|
BigDecimal calBonusIncome = BigDecimal.ZERO;
|
||||||
|
|
||||||
// 临时等级
|
// 前一个会员等级
|
||||||
int tmpGradeValue = 0;
|
int beforeGradeValue = 0;
|
||||||
|
// 前一个会员等级的平级收益人数
|
||||||
|
int beforeSameAlgebra = 0;
|
||||||
|
// 前一个会员等级的平级收益
|
||||||
|
BigDecimal beforeSameBonus = BigDecimal.ZERO;
|
||||||
// 计算直推级差
|
// 计算直推级差
|
||||||
while (true) {
|
while (true) {
|
||||||
// 推荐人
|
// 推荐人
|
||||||
|
@ -1330,8 +1338,6 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
|
||||||
// 推荐人的推荐人
|
// 推荐人的推荐人
|
||||||
pkParent = targetMemberRangeExt.getPkParent();
|
pkParent = targetMemberRangeExt.getPkParent();
|
||||||
|
|
||||||
// TODO new 新处理奖金
|
|
||||||
|
|
||||||
if (EAccountStatus.STOP_INCOME.getValue() == targetMemberRangeExt.getAccountStatus()
|
if (EAccountStatus.STOP_INCOME.getValue() == targetMemberRangeExt.getAccountStatus()
|
||||||
|| ECategory.NORMAL.getValue() != targetMemberRangeExt.getCategory()
|
|| ECategory.NORMAL.getValue() != targetMemberRangeExt.getCategory()
|
||||||
|| targetMemberRangeExt.getEnableStatus() == EYesNo.NO.getIntValue()
|
|| targetMemberRangeExt.getEnableStatus() == EYesNo.NO.getIntValue()
|
||||||
|
@ -1343,35 +1349,107 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
|
||||||
// 当前会员等级值
|
// 当前会员等级值
|
||||||
int calGradeValue = targetMemberRangeExt.getGradeValue();
|
int calGradeValue = targetMemberRangeExt.getGradeValue();
|
||||||
|
|
||||||
// 税前收益
|
// 直推级差税前收益
|
||||||
BigDecimal pretaxIncome;
|
BigDecimal rangeBonusIncome = null;
|
||||||
if (tmpGradeValue == 0) {
|
// 平级税前收益
|
||||||
// 临时等级为0
|
BigDecimal sameBonusIncome = null;
|
||||||
tmpGradeValue = calGradeValue;
|
|
||||||
|
|
||||||
|
if (beforeGradeValue == 0) {
|
||||||
|
// 前一个会员等级为0,肯定为第一次处理,直接处理直推级差收益
|
||||||
if (EGrade.HAI_FAN.getValue() == calGradeValue) {
|
if (EGrade.HAI_FAN.getValue() == calGradeValue) {
|
||||||
// VIP,拿1份40
|
// VIP,拿1份40
|
||||||
pretaxIncome = RetailConstants.LEVEL_RANGE_BONUS;
|
rangeBonusIncome = RetailConstants.RANGE_BONUS;
|
||||||
} else if (EGrade.YOU_KE.getValue() == calGradeValue) {
|
} else if (EGrade.YOU_KE.getValue() == calGradeValue) {
|
||||||
// SVIP,拿2份40
|
// SVIP,拿2份40
|
||||||
pretaxIncome = RetailConstants.LEVEL_RANGE_BONUS.multiply(new BigDecimal("2"));
|
rangeBonusIncome = RetailConstants.RANGE_BONUS.multiply(new BigDecimal("2"));
|
||||||
} else if (EGrade.MAKER.getValue() == calGradeValue) {
|
} else if (EGrade.MAKER.getValue() == calGradeValue) {
|
||||||
// 卓越,拿3份40
|
// 卓越,拿3份40
|
||||||
pretaxIncome = RetailConstants.LEVEL_RANGE_BONUS.multiply(new BigDecimal("3"));
|
rangeBonusIncome = RetailConstants.RANGE_BONUS.multiply(new BigDecimal("3"));
|
||||||
} else if (EGrade.VIP.getValue() == calGradeValue) {
|
} else if (EGrade.VIP.getValue() == calGradeValue) {
|
||||||
// 首席,拿4份40
|
// 首席,拿4份40
|
||||||
pretaxIncome = RetailConstants.LEVEL_RANGE_BONUS.multiply(new BigDecimal("4"));
|
rangeBonusIncome = RetailConstants.RANGE_BONUS.multiply(new BigDecimal("4"));
|
||||||
} else if (EGrade.S_VIP.getValue() == calGradeValue) {
|
} else if (EGrade.S_VIP.getValue() == calGradeValue) {
|
||||||
// 合伙人,拿5份40
|
// 合伙人,拿5份40
|
||||||
pretaxIncome = RetailConstants.LEVEL_RANGE_BONUS.multiply(new BigDecimal("5"));
|
rangeBonusIncome = RetailConstants.RANGE_BONUS.multiply(new BigDecimal("5"));
|
||||||
}
|
}
|
||||||
} else if (calGradeValue == tmpGradeValue) {
|
// 赋值前一个会员等级
|
||||||
// 当前会员等级
|
beforeGradeValue = calGradeValue;
|
||||||
|
} else if (calGradeValue == beforeGradeValue) {
|
||||||
|
// 当前会员等级 = 前一个会员等级
|
||||||
|
if (EGrade.HAI_FAN.getValue() == calGradeValue) {
|
||||||
|
// V1 没有平级收益
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (beforeSameAlgebra >= RetailConstants.SAME_ALGEBRA) {
|
||||||
|
// 平级收益已经满10代,不继续处理平级收益
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// 平级收益(商品价格 * 千分之五) -- 2位小数,四舍五入
|
||||||
|
sameBonusIncome = waresPrice.multiply(RetailConstants.SAME_RATIO).setScale(2, BigDecimal.ROUND_HALF_UP);
|
||||||
|
// 平级收益累计
|
||||||
|
beforeSameBonus = beforeSameBonus.add(sameBonusIncome);
|
||||||
|
// 平级等级代数等级
|
||||||
|
beforeSameAlgebra += 1;
|
||||||
|
} else if (calGradeValue > beforeGradeValue) {
|
||||||
|
// 当前会员等级 > 前一个会员等级
|
||||||
|
int tmpGradeVal = (calGradeValue - beforeGradeValue) / 10;
|
||||||
|
|
||||||
} else if (calGradeValue > tmpGradeValue) {
|
// 新等级的直推级差收益
|
||||||
|
rangeBonusIncome = RetailConstants.RANGE_BONUS.multiply(new BigDecimal(tmpGradeVal));
|
||||||
|
// 直推级差收益 = 新等级的直推级差收益 - 上一等级的平级收益
|
||||||
|
rangeBonusIncome = rangeBonusIncome.subtract(beforeSameBonus);
|
||||||
|
|
||||||
|
// 赋值前一个会员等级
|
||||||
|
beforeGradeValue = calGradeValue;
|
||||||
|
// 平级收益记录从新开始计算
|
||||||
|
beforeSameAlgebra = 0;
|
||||||
|
beforeSameBonus = BigDecimal.ZERO;
|
||||||
|
} else {
|
||||||
|
// 当前会员等级 < 前一个会员等级,直接跳过
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (null != rangeBonusIncome) {
|
||||||
|
// 处理直推级差收益
|
||||||
|
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, targetMemberRangeExt.getPkMember(),
|
||||||
|
targetMemberRangeExt.getIncomeStatus(), targetMemberRangeExt.getPkSettleCountry(), targetMemberRangeExt.getPkRate() == null ? saOrderExt.getPkRate() : targetMemberRangeExt.getPkRate());
|
||||||
|
int pkBonusItems = getPkBonusItems(bonusConfigDTO, targetMemberRangeExt.getPkSettleCountry(), EBonusItems.RETAIL_RANGE_INCOME.getValue());
|
||||||
|
CuMemberBonusRange cuMemberBonusRange = getCuMemberRetailBonusRange(saOrderExt, targetMemberRangeExt, cuMemberBonus, pkBonusItems);
|
||||||
|
cuMemberBonusRange.setCalValue(BigDecimal.ZERO);
|
||||||
|
cuMemberBonusRange.setPretaxIncome(rangeBonusIncome.multiply(new BigDecimal(waresQuantity)));
|
||||||
|
cuMemberBonusRange.setPkRange(targetMemberRangeExt.getPkGrade());
|
||||||
|
cuMemberBonusRange.setPkBeforeRange(sourceMemberRangeExt.getPkGrade());
|
||||||
|
cuMemberBonusRange.setPkOrderItems(saOrderItems.getPkId());
|
||||||
|
rangeRetailRemark(saOrderExt, cuMemberBonusRange, sourceMemberRangeExt, targetMemberRangeExt);
|
||||||
|
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusRange, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
|
||||||
|
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusRange.getIncomeStatus()) {
|
||||||
|
cuMemberBonus.setRetailRangeIncome(ComputeUtil.computeAdd(cuMemberBonus.getRetailRangeIncome(), cuMemberBonusRange.getPretaxIncome()));
|
||||||
|
setRetailTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusRange);
|
||||||
|
}
|
||||||
|
memberBonusRangeList.add(cuMemberBonusRange);
|
||||||
|
}
|
||||||
|
if (null != sameBonusIncome) {
|
||||||
|
// 处理平级收益
|
||||||
|
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, targetMemberRangeExt.getPkMember(),
|
||||||
|
targetMemberRangeExt.getIncomeStatus(), targetMemberRangeExt.getPkSettleCountry(), targetMemberRangeExt.getPkRate() == null ? saOrderExt.getPkRate() : targetMemberRangeExt.getPkRate());
|
||||||
|
int pkBonusItems = getPkBonusItems(bonusConfigDTO, targetMemberRangeExt.getPkSettleCountry(), EBonusItems.RETAIL_SAME_LEVEL_INCOME.getValue());
|
||||||
|
CuMemberBonusRange oriMemberBonusRange = getCuMemberRetailBonusRange(saOrderExt, targetMemberRangeExt, cuMemberBonus, pkBonusItems);
|
||||||
|
oriMemberBonusRange.setCalValue(BigDecimal.valueOf(2));
|
||||||
|
oriMemberBonusRange.setPretaxIncome(sameBonusIncome.multiply(new BigDecimal(waresQuantity)));
|
||||||
|
oriMemberBonusRange.setPkRange(targetMemberRangeExt.getPkGrade());
|
||||||
|
oriMemberBonusRange.setPkBeforeRange(sourceMemberRangeExt.getPkGrade());
|
||||||
|
oriMemberBonusRange.setPkOrderItems(saOrderItems.getPkId());
|
||||||
|
oriRetailRangeRemark(saOrderExt, oriMemberBonusRange, sourceMemberRangeExt, targetMemberRangeExt);
|
||||||
|
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, oriMemberBonusRange, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
|
||||||
|
if (EBonusIncomeStatus.NORMAL.getValue() == oriMemberBonusRange.getIncomeStatus()) {
|
||||||
|
cuMemberBonus.setRetailSameLevelIncome(ComputeUtil.computeAdd(cuMemberBonus.getRetailSameLevelIncome(), oriMemberBonusRange.getPretaxIncome()));
|
||||||
|
setRetailTotal(bdBonusDeduct, cuMemberBonus, oriMemberBonusRange);
|
||||||
|
}
|
||||||
|
memberBonusRangeList.add(oriMemberBonusRange);
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
// 如果价格是209,代表是第一单激活,只有平级收益,只有V5有平级收益
|
// 如果价格是209,代表是第一单激活,只有平级收益,只有V5有平级收益
|
||||||
if (beginBuyPrice.equals(BigDecimal.valueOf(209))) {
|
if (beginBuyPrice.equals(BigDecimal.valueOf(209))) {
|
||||||
|
@ -1386,6 +1464,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
|
||||||
// 有极差或者有平级
|
// 有极差或者有平级
|
||||||
if (ComputeUtil.compareGreaterThan(beginBuyPrice, buyPrice)) {
|
if (ComputeUtil.compareGreaterThan(beginBuyPrice, buyPrice)) {
|
||||||
// 计算极差
|
// 计算极差
|
||||||
|
|
||||||
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, targetMemberRangeExt.getPkMember(),
|
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, targetMemberRangeExt.getPkMember(),
|
||||||
targetMemberRangeExt.getIncomeStatus(), targetMemberRangeExt.getPkSettleCountry(), targetMemberRangeExt.getPkRate() == null ? saOrderExt.getPkRate() : targetMemberRangeExt.getPkRate());
|
targetMemberRangeExt.getIncomeStatus(), targetMemberRangeExt.getPkSettleCountry(), targetMemberRangeExt.getPkRate() == null ? saOrderExt.getPkRate() : targetMemberRangeExt.getPkRate());
|
||||||
int pkBonusItems = getPkBonusItems(bonusConfigDTO, targetMemberRangeExt.getPkSettleCountry(), EBonusItems.RETAIL_RANGE_INCOME.getValue());
|
int pkBonusItems = getPkBonusItems(bonusConfigDTO, targetMemberRangeExt.getPkSettleCountry(), EBonusItems.RETAIL_RANGE_INCOME.getValue());
|
||||||
|
@ -1402,6 +1481,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
|
||||||
setRetailTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusRange);
|
setRetailTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusRange);
|
||||||
}
|
}
|
||||||
memberBonusRangeList.add(cuMemberBonusRange);
|
memberBonusRangeList.add(cuMemberBonusRange);
|
||||||
|
|
||||||
beginBuyPrice = buyPrice;
|
beginBuyPrice = buyPrice;
|
||||||
comBuyPrice = buyPrice;
|
comBuyPrice = buyPrice;
|
||||||
beginGradeValue = calGradeValue;
|
beginGradeValue = calGradeValue;
|
||||||
|
@ -1514,7 +1594,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
|
||||||
*/
|
*/
|
||||||
CuMemberBonusDetail calculateRetailAreaBonus(Map<String, CuMemberRetailRangeExt> countyRangeExtMap,
|
CuMemberBonusDetail calculateRetailAreaBonus(Map<String, CuMemberRetailRangeExt> countyRangeExtMap,
|
||||||
BonusConfigDTO bonusConfigDTO, Integer period, Map<Long, CuMemberRetailRangeExt> memberRangeExtMap,
|
BonusConfigDTO bonusConfigDTO, Integer period, Map<Long, CuMemberRetailRangeExt> memberRangeExtMap,
|
||||||
Map<Long, CuMemberBonus> cuMemberBonusMap, SaOrder saOrder) {
|
Map<Long, CuMemberBonus> cuMemberBonusMap, SaOrderExt saOrder) {
|
||||||
// 重消订单没有区域分红
|
// 重消订单没有区域分红
|
||||||
if (saOrder.getOrderType().equals(EOrderType.RETAIL_CONSUME.getValue())) {
|
if (saOrder.getOrderType().equals(EOrderType.RETAIL_CONSUME.getValue())) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -1545,13 +1625,24 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
|
||||||
if (validatePkBonusItems(bonusConfigDTO, cuMemberRetailRangeExt.getPkSettleCountry(), EBonusItems.RETAIL_AREA_INCOME.getValue())) {
|
if (validatePkBonusItems(bonusConfigDTO, cuMemberRetailRangeExt.getPkSettleCountry(), EBonusItems.RETAIL_AREA_INCOME.getValue())) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
// 没有盒数商品,直接返回空
|
||||||
|
if (CollectionUtil.isEmpty(saOrder.getOrderWaresExtList())) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
BigDecimal boxNumBig = new BigDecimal(saOrder.getBoxNum());
|
// 区域收益,商品价格 * 0.5% * 商品数量
|
||||||
// 处理区域收益(每盒2元)
|
// 处理区域收益 -- 计算比例为 0.5%
|
||||||
BigDecimal benefitIncome = RetailConstants.AREA_BOX_BONUS.multiply(boxNumBig);
|
BigDecimal benefitIncome = BigDecimal.ZERO;
|
||||||
CuMemberBonusDetail cuMemberBonusDetail = packageBenefitIncome(bonusConfigDTO, period, cuMemberBonusMap, null, BigDecimal.ZERO, benefitIncome,
|
// 计算业绩(此处作为比例)
|
||||||
|
BigDecimal calAchieve = BigDecimal.ZERO;
|
||||||
|
for (SaOrderWaresExt saOrderWaresExt : saOrder.getOrderWaresExtList()) {
|
||||||
|
benefitIncome = benefitIncome.add(saOrderWaresExt.getWaresPrice().multiply(RetailConstants.SAME_RATIO)).setScale(2, BigDecimal.ROUND_HALF_UP);
|
||||||
|
calAchieve = calAchieve.add(saOrderWaresExt.getWaresPrice());
|
||||||
|
}
|
||||||
|
CuMemberBonusDetail cuMemberBonusDetail = packageBenefitIncome(bonusConfigDTO, period, cuMemberBonusMap, null, RetailConstants.SAME_RATIO, benefitIncome,
|
||||||
cuMemberRetailRangeExt, EBonusItems.RETAIL_AREA_INCOME.getValue(), BonusMsgConstants.RETAIL_AREA_INCOME);
|
cuMemberRetailRangeExt, EBonusItems.RETAIL_AREA_INCOME.getValue(), BonusMsgConstants.RETAIL_AREA_INCOME);
|
||||||
cuMemberBonusDetail.setCalAchieve(boxNumBig);
|
// 计算业绩以盒数做为基础
|
||||||
|
cuMemberBonusDetail.setCalAchieve(new BigDecimal(saOrder.getBoxNum()));
|
||||||
cuMemberBonusDetail.setPkOrder(saOrder.getPkId());
|
cuMemberBonusDetail.setPkOrder(saOrder.getPkId());
|
||||||
String remark = String.format(BonusMsgConstants.RETAIL_AREA_INCOME, saOrder.getOrderCode(),
|
String remark = String.format(BonusMsgConstants.RETAIL_AREA_INCOME, saOrder.getOrderCode(),
|
||||||
memberRangeExtMap.get(saOrder.getPkMember()).getMemberCode() + memberRangeExtMap.get(saOrder.getPkMember()).getMemberName(),
|
memberRangeExtMap.get(saOrder.getPkMember()).getMemberCode() + memberRangeExtMap.get(saOrder.getPkMember()).getMemberName(),
|
||||||
|
@ -1888,15 +1979,14 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
|
||||||
|
|
||||||
private CuMemberBonusDetail packageBenefitIncome(BonusConfigDTO bonusConfigDTO, Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap, String month,
|
private CuMemberBonusDetail packageBenefitIncome(BonusConfigDTO bonusConfigDTO, Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap, String month,
|
||||||
BigDecimal benefitAvgRatio, BigDecimal benefitAvgIncome, CuMemberRetailRangeExt cuMemberRetailRangeExt, Integer bonusItemsValue, String msg) {
|
BigDecimal benefitAvgRatio, BigDecimal benefitAvgIncome, CuMemberRetailRangeExt cuMemberRetailRangeExt, Integer bonusItemsValue, String msg) {
|
||||||
// 福利平均
|
|
||||||
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, cuMemberRetailRangeExt.getPkMember(),
|
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, cuMemberRetailRangeExt.getPkMember(),
|
||||||
cuMemberRetailRangeExt.getIncomeStatus(), cuMemberRetailRangeExt.getPkSettleCountry(), cuMemberRetailRangeExt.getPkRate());
|
cuMemberRetailRangeExt.getIncomeStatus(), cuMemberRetailRangeExt.getPkSettleCountry(), cuMemberRetailRangeExt.getPkRate());
|
||||||
SaOrder saOrderExt = SaOrder.builder().pkId(0L).orderAchieve(BigDecimal.ZERO).build();
|
SaOrder saOrderExt = SaOrder.builder().pkId(0L).orderAchieve(BigDecimal.ZERO).build();
|
||||||
CuMemberBonusDetail cuMemberBonusDetail = getCuMemberBonusDetail(saOrderExt, cuMemberRetailRangeExt.getIncomeStatus(), cuMemberRetailRangeExt.getPkSettleCountry(), cuMemberBonus);
|
CuMemberBonusDetail cuMemberBonusDetail = getCuMemberBonusDetail(saOrderExt, cuMemberRetailRangeExt.getIncomeStatus(), cuMemberRetailRangeExt.getPkSettleCountry(), cuMemberBonus);
|
||||||
// 计算比例
|
// 计算比例
|
||||||
cuMemberBonusDetail.setCalValue(benefitAvgRatio);
|
cuMemberBonusDetail.setCalValue(benefitAvgRatio);
|
||||||
cuMemberBonusDetail.setPkBonusItems(getPkBonusItems(bonusConfigDTO, cuMemberRetailRangeExt.getPkSettleCountry(), bonusItemsValue));
|
|
||||||
cuMemberBonusDetail.setPretaxIncome(benefitAvgIncome);
|
cuMemberBonusDetail.setPretaxIncome(benefitAvgIncome);
|
||||||
|
cuMemberBonusDetail.setPkBonusItems(getPkBonusItems(bonusConfigDTO, cuMemberRetailRangeExt.getPkSettleCountry(), bonusItemsValue));
|
||||||
// 收益占比
|
// 收益占比
|
||||||
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusDetail, BigDecimal.ZERO, BigDecimal.ONE);
|
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusDetail, BigDecimal.ZERO, BigDecimal.ONE);
|
||||||
if (bonusItemsValue != EBonusItems.RETAIL_AREA_INCOME.getValue()) {
|
if (bonusItemsValue != EBonusItems.RETAIL_AREA_INCOME.getValue()) {
|
||||||
|
|
|
@ -150,7 +150,8 @@
|
||||||
where del_flag = 0
|
where del_flag = 0
|
||||||
start
|
start
|
||||||
with pk_id = #{pkMember}
|
with pk_id = #{pkMember}
|
||||||
connect by pk_id = prior pk_parent) a
|
connect by pk_id = prior pk_parent
|
||||||
|
) a
|
||||||
) b
|
) b
|
||||||
on (a.pk_member = b.pk_member)
|
on (a.pk_member = b.pk_member)
|
||||||
when not matched then
|
when not matched then
|
||||||
|
@ -172,7 +173,8 @@
|
||||||
where del_flag = 0
|
where del_flag = 0
|
||||||
start
|
start
|
||||||
with pk_id = #{pkMember}
|
with pk_id = #{pkMember}
|
||||||
connect by pk_id = prior pk_parent) a
|
connect by pk_id = prior pk_parent
|
||||||
|
) a
|
||||||
left join ${rangeTableName} b
|
left join ${rangeTableName} b
|
||||||
on a.pk_id = b.pk_member
|
on a.pk_id = b.pk_member
|
||||||
where b.enable_status = 0
|
where b.enable_status = 0
|
||||||
|
@ -652,6 +654,20 @@
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="queryCuMemberSecondRangeExtByParent" resultMap="CuMemberRetailRangeExt">
|
<select id="queryCuMemberSecondRangeExtByParent" resultMap="CuMemberRetailRangeExt">
|
||||||
|
select cm.pk_id pkMember,
|
||||||
|
nvl(b.team_box_num, 0) + nvl(a.team_new_box_num, 0) team_box_num,
|
||||||
|
nvl(b.consume_box_num, 0) + nvl(a.new_box_num, 0) consume_box_num,
|
||||||
|
nvl(b.big_box_num, 0) big_box_num,
|
||||||
|
nvl(b.small_box_num, 0) small_box_num
|
||||||
|
from cu_member cm
|
||||||
|
left join ${secondTableName} a
|
||||||
|
on cm.pk_id = a.pk_member
|
||||||
|
left join ${rangeTableName} b
|
||||||
|
on cm.pk_id = b.pk_member
|
||||||
|
where cm.pk_parent = #{pkMember}
|
||||||
|
and cm.del_flag = 0
|
||||||
|
|
||||||
|
<!--
|
||||||
select a.pk_member,
|
select a.pk_member,
|
||||||
cm.member_code,
|
cm.member_code,
|
||||||
cm.member_name,
|
cm.member_name,
|
||||||
|
@ -705,6 +721,7 @@
|
||||||
where bw.del_flag = 0
|
where bw.del_flag = 0
|
||||||
and bg.del_flag = 0
|
and bg.del_flag = 0
|
||||||
and a.pk_parent = #{pkMember}
|
and a.pk_parent = #{pkMember}
|
||||||
|
-->
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="queryCuMemberSpeRetailRangeParent"
|
<select id="queryCuMemberSpeRetailRangeParent"
|
||||||
|
|
|
@ -258,13 +258,9 @@ public class RetailMemberController extends BaseController {
|
||||||
*/
|
*/
|
||||||
@GetMapping("/region-tree")
|
@GetMapping("/region-tree")
|
||||||
public AjaxResult regionTree() {
|
public AjaxResult regionTree() {
|
||||||
if (EEnv.TEST.getValue().equals(BdConfig.getEnv()) && SecurityUtils.getUserId().equals(615423L)) {
|
|
||||||
// 测试环境,指定账号,返回收益区域为空
|
|
||||||
return AjaxResult.success();
|
|
||||||
}
|
|
||||||
|
|
||||||
List<BdArea> areaList = iCuMemberRetailRegionService.listChooseRegion(SecurityUtils.getSystemType());
|
List<BdArea> areaList = iCuMemberRetailRegionService.listChooseRegion(SecurityUtils.getSystemType());
|
||||||
if (CollectionUtil.isEmpty(areaList)) {
|
if (CollectionUtil.isEmpty(areaList)) {
|
||||||
|
log.info("region-tree: 111");
|
||||||
return AjaxResult.success();
|
return AjaxResult.success();
|
||||||
}
|
}
|
||||||
TreeNodeConfig treeNodeConfig = new TreeNodeConfig();
|
TreeNodeConfig treeNodeConfig = new TreeNodeConfig();
|
||||||
|
@ -277,6 +273,7 @@ public class RetailMemberController extends BaseController {
|
||||||
tree.setParentId(treeNode.getParent().toString());
|
tree.setParentId(treeNode.getParent().toString());
|
||||||
tree.setName(treeNode.getName());
|
tree.setName(treeNode.getName());
|
||||||
});
|
});
|
||||||
|
log.info("region-tree: 222");
|
||||||
return AjaxResult.success(build);
|
return AjaxResult.success(build);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,11 +12,15 @@ public class RetailConstants {
|
||||||
/**
|
/**
|
||||||
* 直推级差等级收益(每个等级为40元)
|
* 直推级差等级收益(每个等级为40元)
|
||||||
*/
|
*/
|
||||||
public static final BigDecimal LEVEL_RANGE_BONUS = new BigDecimal("40");
|
public static final BigDecimal RANGE_BONUS = new BigDecimal("40");
|
||||||
/**
|
/**
|
||||||
* 直推平级收益比例(每代拿商品价格的千分之五)
|
* 直推平级收益比例(每代拿商品价格的千分之五)
|
||||||
*/
|
*/
|
||||||
public static final BigDecimal LEVEL_RATIO = new BigDecimal("0.005");
|
public static final BigDecimal SAME_RATIO = new BigDecimal("0.005");
|
||||||
|
/**
|
||||||
|
* 直推平缓收益代数(每级都是10代)
|
||||||
|
*/
|
||||||
|
public static final Integer SAME_ALGEBRA = 10;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 区域分红,每盒2元
|
* 区域分红,每盒2元
|
||||||
|
|
Loading…
Reference in New Issue