## 培育津贴;

This commit is contained in:
cabbage 2025-06-27 09:19:20 +08:00
parent ae1d6a3ce1
commit 232edd3706
32 changed files with 169 additions and 3571 deletions

View File

@ -5,13 +5,6 @@ import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @Description:
* @Author: sui q
* @Time: 2023/2/21 15:32
* @Classname: BonusExpandDTO
* @PackageName: com.hzs.system.config.dto
*/
@Data
public class BonusExpandDTO implements Serializable {

View File

@ -9,11 +9,7 @@ import java.io.Serializable;
import java.math.BigDecimal;
/**
* @Description: 极差的配置
* @Author: sui q
* @Time: 2023/1/3 13:42
* @Classname: RangeDTO
* @PackageName: com.hzs.system.config.dto
* 极差的配置
*/
@Data
public class RangeDTO implements Serializable {

View File

@ -1,47 +0,0 @@
package com.hzs.bonus.achieve.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hzs.common.domain.member.achieve.CuMemberRange;
import com.hzs.common.domain.member.achieve.ext.CuMemberRangeExt;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
/**
* Mapper 接口
*/
public interface CuMemberRangeMapper extends BaseMapper<CuMemberRange> {
/*
* 推荐推荐人查询推荐人下的所有部门, 该订单日期之前的算他的网体
**/
List<CuMemberRangeExt> queryCuMemberRangeExtByParent(@Param("tableName") String tableName, @Param("pkParent") Long pkParent, @Param("orderDate") Date orderDate);
/*
* 推荐推荐人查询推荐人下的所有部门, 该订单日期之前的算他的网体
**/
List<CuMemberRangeExt> querySecondCuMemberRangeExtByParent(@Param("tableName") String tableName, @Param("secondTableName") String secondTableName, @Param("pkParent") Long pkParent);
/*
* 批量更新网体
**/
void mergeCuMemberRangeExt(@Param("rangeTableName") String rangeTableName, @Param("cuMemberRangeExtList") List<?> cuMemberRangeExtList);
/*
* 批量更新网体
**/
void mergeSecondCuMemberRangeExt(@Param("secondTableName") String secondTableName, @Param("cuMemberRangeExtList") List<CuMemberRangeExt> cuMemberRangeExtList);
/*
* 验证血缘部门 有多少个满足等级
**/
Integer validateCuMemberPlaceAwards(@Param("rangeTableName") String rangeTableName, @Param("cuMemberRangeExtList") List<CuMemberRangeExt> cuMemberRangeExtList,
@Param("pkRangeAwards") Integer pkRangeAwards, @Param("orderDate") Date orderDate);
/*
* 验证血缘部门 有多少个满足等级
**/
Integer validateSecondCuMemberPlaceAwards(@Param("secondTableName") String secondTableName, @Param("cuMemberRangeExtList") List<CuMemberRangeExt> cuMemberRangeExtList,
@Param("pkRangeAwards") Integer pkRangeAwards);
}

View File

@ -13,12 +13,7 @@ import java.io.Serializable;
import java.math.BigDecimal;
/**
* <p>
* 会员业绩记录
* </p>
*
* @author hzs
* @since 2022-10-26
*/
@Data
@Builder

View File

@ -1,45 +0,0 @@
package com.hzs.bonus.achieve.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hzs.common.domain.member.achieve.CuMemberRange;
import com.hzs.common.domain.member.achieve.ext.CuMemberRangeExt;
import java.util.Date;
import java.util.List;
/**
* 服务类
*/
public interface ICuMemberRangeService extends IService<CuMemberRange> {
/**
* 推荐推荐人查询推荐人下的所有部门, 该订单日期之前的算他的网体
*/
List<CuMemberRangeExt> queryCuMemberRangeExtByParent(String tableName, Long pkParent, Date orderDate);
/**
* 推荐推荐人查询推荐人下的所有部门, 该订单日期之前的算他的网体
*/
List<CuMemberRangeExt> querySecondCuMemberRangeExtByParent(String tableName, String secondTableName, Long pkParent);
/**
* 批量更新网体
*/
void mergeCuMemberRangeExt(String rangeTableName, List<CuMemberRangeExt> cuMemberRangeExtList);
/**
* 批量更新网体
*/
void mergeSecondCuMemberRangeExt(String secondTableName, List<CuMemberRangeExt> cuMemberRangeExtList);
/**
* 验证血缘部门 有多少个满足等级
*/
Integer validateCuMemberPlaceAwards(String rangeTableName, List<CuMemberRangeExt> cuMemberRangeExtList, Integer pkRangeAwards, Date orderDate);
/**
* 验证血缘部门 有多少个满足等级
*/
Integer validateSecondCuMemberPlaceAwards(String secondTableName, List<CuMemberRangeExt> cuMemberRangeExtList, Integer pkRangeAwards);
}

View File

@ -1,55 +0,0 @@
package com.hzs.bonus.achieve.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hzs.bonus.achieve.mapper.CuMemberRangeMapper;
import com.hzs.bonus.achieve.service.ICuMemberRangeService;
import com.hzs.common.domain.member.achieve.CuMemberRange;
import com.hzs.common.domain.member.achieve.ext.CuMemberRangeExt;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
/**
* 服务实现类
*/
@Service
public class CuMemberRangeServiceImpl extends ServiceImpl<CuMemberRangeMapper, CuMemberRange> implements ICuMemberRangeService {
@Autowired
private CuMemberBonusSettle cuMemberBonusSettle;
@Override
public List<CuMemberRangeExt> queryCuMemberRangeExtByParent(String tableName, Long pkParent, Date orderDate) {
return baseMapper.queryCuMemberRangeExtByParent(tableName, pkParent, orderDate);
}
@Override
public List<CuMemberRangeExt> querySecondCuMemberRangeExtByParent(String tableName, String secondTableName, Long pkParent) {
return baseMapper.querySecondCuMemberRangeExtByParent(tableName, secondTableName, pkParent);
}
@Override
public void mergeCuMemberRangeExt(String rangeTableName, List<CuMemberRangeExt> cuMemberRangeExtList) {
List<List<?>> lists = cuMemberBonusSettle.handleCutList(cuMemberRangeExtList);
for (List<?> list : lists) {
baseMapper.mergeCuMemberRangeExt(rangeTableName, list);
}
}
@Override
public void mergeSecondCuMemberRangeExt(String secondTableName, List<CuMemberRangeExt> cuMemberRangeExtList) {
baseMapper.mergeSecondCuMemberRangeExt(secondTableName, cuMemberRangeExtList);
}
@Override
public Integer validateCuMemberPlaceAwards(String rangeTableName, List<CuMemberRangeExt> cuMemberRangeExtList, Integer pkRangeAwards, Date orderDate) {
return baseMapper.validateCuMemberPlaceAwards(rangeTableName, cuMemberRangeExtList, pkRangeAwards, orderDate);
}
@Override
public Integer validateSecondCuMemberPlaceAwards(String secondTableName, List<CuMemberRangeExt> cuMemberRangeExtList, Integer pkRangeAwards) {
return baseMapper.validateSecondCuMemberPlaceAwards(secondTableName, cuMemberRangeExtList, pkRangeAwards);
}
}

View File

@ -1,38 +1,20 @@
package com.hzs.bonus.bonus.service.impl;
import com.hzs.bonus.achieve.param.MemberAchieveParam;
import com.hzs.bonus.achieve.service.ICuMemberSettlePeriodService;
import com.hzs.bonus.achieve.service.ICuMemberTreeService;
import com.hzs.bonus.detail.service.ICuMemberAssessService;
import com.hzs.common.core.constant.BonusFieldConstants;
import com.hzs.common.core.constant.CountryConstants;
import com.hzs.common.core.constant.MagicNumberConstants;
import com.hzs.common.core.constant.TableNameConstants;
import com.hzs.common.core.constant.msg.BonusMsgConstants;
import com.hzs.common.core.enums.*;
import com.hzs.common.core.utils.ComputeUtil;
import com.hzs.common.core.utils.DateUtils;
import com.hzs.common.core.utils.reflect.ReflectUtils;
import com.hzs.common.domain.bonus.BdBonusDeduct;
import com.hzs.common.domain.member.achieve.CuMemberTree;
import com.hzs.common.domain.member.achieve.ext.CuMemberRangeExt;
import com.hzs.common.domain.member.achieve.ext.CuMemberRetailRangeExt;
import com.hzs.common.domain.member.base.CuAwardsControl;
import com.hzs.common.domain.member.bonus.*;
import com.hzs.common.domain.member.detail.CuMemberAssess;
import com.hzs.common.domain.member.ext.CuMemberSettleExt;
import com.hzs.common.domain.sale.ext.SaOrderExt;
import com.hzs.common.domain.sale.order.SaOrder;
import com.hzs.common.domain.system.config.BdAwards;
import com.hzs.common.domain.system.config.BdGrade;
import com.hzs.common.domain.system.config.ext.BdBonusItemsExt;
import com.hzs.system.base.ICurrencyServiceApi;
import com.hzs.system.base.dto.CurrencyDTO;
import com.hzs.system.config.dto.BonusConfigDTO;
import com.hzs.system.config.dto.BonusExpandDTO;
import com.hzs.system.config.dto.RangeDTO;
import com.hzs.system.sys.dto.BdCurrencyDTO;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@ -42,116 +24,15 @@ import java.util.*;
@Component
public abstract class BonusSettleHandle {
@DubboReference
ICurrencyServiceApi iCurrencyServiceApi;
@Autowired
protected ICuMemberTreeService cuMemberTreeService;
@Autowired
private ICuMemberSettlePeriodService cuMemberSettlePeriodService;
@Autowired
private ICuMemberAssessService cuMemberAssessService;
public ICuMemberSettlePeriodService getCuMemberSettlePeriodService() {
return cuMemberSettlePeriodService;
}
public ICuMemberAssessService getCuMemberAssessService() {
return cuMemberAssessService;
}
/**
* 获取等级对应的拓展奖配置
*
* @param bonusConfigDTO 奖金参数汇总
* @param memberSettleExt 会员
*/
protected BdGrade getGradeExpand(BonusConfigDTO bonusConfigDTO, CuMemberSettleExt memberSettleExt) {
return bonusConfigDTO.getGradeMap().get(memberSettleExt.getPkSettleCountry().toString() + "_" + memberSettleExt.getPkGrade());
}
/**
* 获取奖衔对应的辅导奖配置
*
* @param bonusConfigDTO 奖金参数汇总
* @param memberSettleExt 会员
*/
protected BdAwards getAwardsCouch(BonusConfigDTO bonusConfigDTO, CuMemberSettleExt memberSettleExt, Map<Long, CuAwardsControl> cuAwardsControlMap) {
Integer pkAwards = getPkRealAwards(memberSettleExt.getPkMember(), memberSettleExt.getPkAwards(), cuAwardsControlMap);
return bonusConfigDTO.getAwardsMap().get(memberSettleExt.getPkSettleCountry().toString() + ERangeType.AWARDS.getValue() + pkAwards);
}
private Integer getPkRealAwards(Long pkMember, Integer pkAwards, Map<Long, CuAwardsControl> cuAwardsControlMap) {
if (cuAwardsControlMap.containsKey(pkMember)) {
if (cuAwardsControlMap.get(pkMember).getMentoringAward() != null) {
pkAwards = cuAwardsControlMap.get(pkMember).getMentoringAward();
}
// int giveRealAwards = EAwards.MEMBER.getValue();
// int pkControlAwards = EAwards.MANAGER.getEnable();
// if(cuAwardsControlMap.get(pkMember).getRealAwards() != null) {
// giveRealAwards = cuAwardsControlMap.get(pkMember).getRealAwards();
// }
// if(cuAwardsControlMap.get(pkMember).getMentoringAward() != null) {
// pkControlAwards = cuAwardsControlMap.get(pkMember).getExtremeAwards();
// }
// if (pkAwards <= giveRealAwards && pkAwards < pkControlAwards) {
// // 实际奖衔 <= 赠与奖衔时用实际奖衔和集成奖衔取大的
// pkAwards = pkControlAwards;
// }
}
return pkAwards;
}
/**
* 获得国家对应的4-n参数比例
*
* @param bonusConfigDTO 奖金配置汇总
* @param memberSettleExt 会员
* @param endTouch 4-n的次数
* @param bdGrade 等级
*/
protected BigDecimal getCountryExpand(BonusConfigDTO bonusConfigDTO, CuMemberSettleExt memberSettleExt, Integer endTouch, BdGrade bdGrade,
BigDecimal addTouch, BigDecimal editExpandRatio) {
BonusExpandDTO bonusExpand = bonusConfigDTO.getBonusExpandMap().get(memberSettleExt.getPkSettleCountry());
BigDecimal totalTouch = ComputeUtil.computeAdd(BigDecimal.valueOf(endTouch), addTouch);
BigDecimal expandRatio = bonusExpand.getExpandRatio();
if (memberSettleExt.getPkVertex() != null && memberSettleExt.getPkVertex().equals(377L)) {
expandRatio = BigDecimal.valueOf(13);
} else if (ComputeUtil.compareValue(editExpandRatio)) {
expandRatio = editExpandRatio;
}
BigDecimal countryExpandRatio = ComputeUtil.computeDivide(expandRatio, totalTouch);
if (ComputeUtil.compareValue(countryExpandRatio, bdGrade.getExpandRatio())) {
return bdGrade.getExpandRatio();
}
return countryExpandRatio;
}
/**
* 获得国家对应的4-n参数比例
*
* @param bonusConfigDTO 奖金配置汇总
* @param memberSettleExt 会员
* @param endTouch 4-n的次数
* @param bdGrade 等级
*/
protected BigDecimal getCountryRepurchaseExpand(BonusConfigDTO bonusConfigDTO, CuMemberSettleExt memberSettleExt, Integer endTouch, BdGrade bdGrade, BigDecimal addTouch, BigDecimal editExpandRatio) {
BonusExpandDTO bonusExpand = bonusConfigDTO.getBonusExpandMap().get(memberSettleExt.getPkSettleCountry());
BigDecimal totalTouch = ComputeUtil.computeAdd(BigDecimal.valueOf(endTouch), addTouch);
BigDecimal expandRatio = bonusExpand.getExpandRatio();
if (memberSettleExt.getPkVertex() != null && memberSettleExt.getPkVertex().equals(377L)) {
expandRatio = BigDecimal.valueOf(13);
} else if (ComputeUtil.compareValue(editExpandRatio)) {
expandRatio = editExpandRatio;
}
// 验证是否是爱美视团队
BigDecimal countryExpandRatio = ComputeUtil.computeDivide(expandRatio, BigDecimal.valueOf(endTouch));
if (ComputeUtil.compareValue(countryExpandRatio, bdGrade.getRepurchaseRatio())) {
return bdGrade.getRepurchaseRatio();
}
return countryExpandRatio;
}
/**
* 获得奖项主键验证该国是否有该奖项
*
@ -177,334 +58,23 @@ public abstract class BonusSettleHandle {
return bonusConfigDTO.getBonusItemsExtMap().get(pkCountry.toString() + bonusItems).getPkId();
}
/**
* 获得有量奖的会员
*
* @param cuMemberBonusMap 奖金汇总表
* @param cuMemberBonusExpandList 量奖明细
*/
protected Set<Long> getMemberExpandBonus(Map<Long, CuMemberBonus> cuMemberBonusMap, List<CuMemberBonusExpand> cuMemberBonusExpandList) {
Map<Long, CuMemberBonus> pkMemberSettleMap = new HashMap<>(ComputeUtil.mapInitCapacity(cuMemberBonusMap.size()));
cuMemberBonusMap.forEach((key, cuMemberBonus) -> {
// 判断 cuMemberSettleExtMap中这个人是否是免考免考的不查询考核是否通过过滤数据
pkMemberSettleMap.put(cuMemberBonus.getPkId(), cuMemberBonus);
});
Set<Long> expandMemberSet = new HashSet<>();
cuMemberBonusExpandList.forEach(cuMemberBonusExpand -> {
// 只查询有量奖的人的考核记录, 国内没有领导奖
if (!cuMemberBonusExpand.getPkCountry().equals(CountryConstants.CHINA_COUNTRY) && pkMemberSettleMap.containsKey(cuMemberBonusExpand.getPkBonus())) {
expandMemberSet.add(pkMemberSettleMap.get(cuMemberBonusExpand.getPkBonus()).getPkMember());
}
});
return expandMemberSet;
}
/**
* 获得有量奖的会员
*
* @param cuMemberSettleExtMap 奖金汇总表
*/
protected Map<Long, CuMemberSettleExt> getMemberExpandBonus(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap) {
Map<Long, CuMemberSettleExt> pkMemberSettleMap = new HashMap<>(ComputeUtil.mapInitCapacity(cuMemberSettleExtMap.size()));
cuMemberSettleExtMap.forEach((key, cuMemberSettleExt) ->
pkMemberSettleMap.put(cuMemberSettleExt.getPkMember(), cuMemberSettleExt));
return pkMemberSettleMap;
}
/**
* 记录需要修改的会员结算表数据, 安置的
*
* @param cuMemberSettleExtMap 会员结算
* @param cuMemberSettleExtList 查询出来的结算数据
*/
protected void getMemberSettle(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, List<CuMemberSettleExt> cuMemberSettleExtList) {
cuMemberSettleExtList.forEach(cuMemberSettleExt -> {
if (cuMemberSettleExtMap.containsKey(cuMemberSettleExt.getPkMember())) {
CuMemberSettleExt memberSettleExt = cuMemberSettleExtMap.get(cuMemberSettleExt.getPkMember());
if (memberSettleExt.getPkParent() == null) {
memberSettleExt.setPkParent(cuMemberSettleExt.getPkParent());
}
if (memberSettleExt.getPkPlaceParent() == null) {
memberSettleExt.setPkPlaceParent(cuMemberSettleExt.getPkPlaceParent());
}
if (memberSettleExt.getPlaceDept() == null) {
memberSettleExt.setPlaceDept(cuMemberSettleExt.getPlaceDept());
}
if (memberSettleExt.getPkGrade() == null) {
memberSettleExt.setPkGrade(cuMemberSettleExt.getPkGrade());
}
if (memberSettleExt.getGradeValue() == null) {
memberSettleExt.setGradeValue(cuMemberSettleExt.getGradeValue());
}
if (memberSettleExt.getPkAwards() == null) {
memberSettleExt.setPkAwards(cuMemberSettleExt.getPkAwards());
}
if (memberSettleExt.getRegisterAuthority() == null) {
memberSettleExt.setRegisterAuthority(cuMemberSettleExt.getRegisterAuthority());
}
if (memberSettleExt.getCustomerType() == null) {
memberSettleExt.setCustomerType(cuMemberSettleExt.getCustomerType());
}
if (memberSettleExt.getIsMakerSpace() == null) {
memberSettleExt.setIsMakerSpace(cuMemberSettleExt.getIsMakerSpace());
}
if (memberSettleExt.getIsMakerGift() == null) {
memberSettleExt.setIsMakerGift(cuMemberSettleExt.getIsMakerGift());
}
if (memberSettleExt.getPkVertex() == null) {
memberSettleExt.setPkVertex(cuMemberSettleExt.getPkVertex());
}
} else {
cuMemberSettleExt.setANewAmount(BigDecimal.ZERO);
cuMemberSettleExt.setANewPv(BigDecimal.ZERO);
cuMemberSettleExt.setBNewAmount(BigDecimal.ZERO);
cuMemberSettleExt.setBNewPv(BigDecimal.ZERO);
cuMemberSettleExt.setRepANewAmount(BigDecimal.ZERO);
cuMemberSettleExt.setRepBNewAmount(BigDecimal.ZERO);
cuMemberSettleExt.setRepANewPv(BigDecimal.ZERO);
cuMemberSettleExt.setRepBNewPv(BigDecimal.ZERO);
cuMemberSettleExt.setRegisterNewAmount(BigDecimal.ZERO);
cuMemberSettleExt.setRegisterNewPv(BigDecimal.ZERO);
cuMemberSettleExt.setUpgradeNewAmount(BigDecimal.ZERO);
cuMemberSettleExt.setUpgradeNewPv(BigDecimal.ZERO);
cuMemberSettleExt.setRepurchaseNewAmount(BigDecimal.ZERO);
cuMemberSettleExt.setRepurchaseNewPv(BigDecimal.ZERO);
cuMemberSettleExt.setHiFunNewAmount(BigDecimal.ZERO);
cuMemberSettleExt.setHiFunNewPv(BigDecimal.ZERO);
cuMemberSettleExt.setMallNewAmount(BigDecimal.ZERO);
cuMemberSettleExt.setMallNewPv(BigDecimal.ZERO);
cuMemberSettleExt.setRegisterBloNewPv(BigDecimal.ZERO);
cuMemberSettleExt.setUpgradeBloNewPv(BigDecimal.ZERO);
cuMemberSettleExt.setRepurchaseBloNewPv(BigDecimal.ZERO);
cuMemberSettleExt.setHiFunBloNewPv(BigDecimal.ZERO);
cuMemberSettleExt.setMallBloNewPv(BigDecimal.ZERO);
cuMemberSettleExtMap.put(cuMemberSettleExt.getPkMember(), cuMemberSettleExt);
}
});
}
/**
* 获得 直推收益的备注
*
* @param saOrderExt 订单编号
* @param cuMemberBonusPush 直推奖
* @param cuMemberSettleExtMap 存储会员网体的map
*/
protected void recommendRemark(SaOrderExt saOrderExt, CuMemberBonusPush cuMemberBonusPush, Map<Long, CuMemberSettleExt> cuMemberSettleExtMap) {
CuMemberSettleExt sourceCuMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkMember());
CuMemberSettleExt targetCuMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkReference());
String remark;
if (cuMemberBonusPush.getSecond() == 0) {
remark = String.format(BonusMsgConstants.RECOMMEND_DIRECT, saOrderExt.getOrderCode(),
sourceCuMemberSettleExt.getMemberCode() + sourceCuMemberSettleExt.getMemberName(),
targetCuMemberSettleExt.getMemberCode() + targetCuMemberSettleExt.getMemberName(),
cuMemberBonusPush.getRealIncome());
} else {
remark = String.format(BonusMsgConstants.RECOMMEND, cuMemberBonusPush.getRound() + 1, cuMemberBonusPush.getSecond(), saOrderExt.getOrderCode(),
sourceCuMemberSettleExt.getMemberCode() + sourceCuMemberSettleExt.getMemberName(),
targetCuMemberSettleExt.getMemberCode() + targetCuMemberSettleExt.getMemberName(),
cuMemberBonusPush.getCalAchieve(), cuMemberBonusPush.getCalValue());
}
cuMemberBonusPush.setRemark(remark);
}
/**
* 获得 直推收益的备注
*
* @param saOrderExt 订单编号
* @param cuMemberBonusPush 直推奖
* @param cuMemberRangeExtMap 存储会员网体的map
*/
protected void recommendRangeRemark(SaOrderExt saOrderExt, CuMemberBonusPush cuMemberBonusPush, Map<Long, CuMemberRangeExt> cuMemberRangeExtMap, CuMemberRangeExt targetCuMemberRangeExt) {
CuMemberRangeExt sourceCuMemberRangeExt = cuMemberRangeExtMap.get(saOrderExt.getPkMember());
String remark = String.format(BonusMsgConstants.RANGE_RECOMMEND, cuMemberBonusPush.getRound(), cuMemberBonusPush.getSecond(), saOrderExt.getOrderCode(),
sourceCuMemberRangeExt.getMemberCode() + sourceCuMemberRangeExt.getMemberName(),
targetCuMemberRangeExt.getMemberCode() + targetCuMemberRangeExt.getMemberName(),
cuMemberBonusPush.getCalAchieve());
cuMemberBonusPush.setRemark(remark);
}
/**
* 获得 拓展收益的备注
*
* @param saOrderExt 订单编号
* @param cuMemberBonusExpand 拓展奖
* @param sourceCuMemberSettleExt 提供奖金的人
* @param targetCuMemberSettleExt 获得奖金的人
*/
protected void expandRemark(SaOrderExt saOrderExt, CuMemberBonusExpand cuMemberBonusExpand,
CuMemberSettleExt sourceCuMemberSettleExt, CuMemberSettleExt targetCuMemberSettleExt) {
String remark = String.format(BonusMsgConstants.EXPAND, cuMemberBonusExpand.getCurrentTouch(), cuMemberBonusExpand.getExpandTouch(), saOrderExt.getOrderCode(),
sourceCuMemberSettleExt.getMemberCode() + sourceCuMemberSettleExt.getMemberName(),
targetCuMemberSettleExt.getMemberCode() + targetCuMemberSettleExt.getMemberName(),
cuMemberBonusExpand.getCalAchieve(), cuMemberBonusExpand.getCalValue());
cuMemberBonusExpand.setRemark(remark);
}
/**
* 获得 拓展收益的备注
*
* @param saOrderExt 订单编号
* @param cuMemberBonusPush 拓展奖
* @param sourceCuMemberSettleExt 提供奖金的人
* @param targetCuMemberSettleExt 获得奖金的人
*/
protected void repurchasePushRemark(SaOrderExt saOrderExt, CuMemberBonusPush cuMemberBonusPush,
CuMemberSettleExt sourceCuMemberSettleExt, CuMemberSettleExt targetCuMemberSettleExt, String msg) {
String remark = String.format(msg, saOrderExt.getOrderCode(),
sourceCuMemberSettleExt.getMemberCode() + sourceCuMemberSettleExt.getMemberName(),
targetCuMemberSettleExt.getMemberCode() + targetCuMemberSettleExt.getMemberName(),
cuMemberBonusPush.getCalAchieve(), cuMemberBonusPush.getCalValue());
cuMemberBonusPush.setRemark(remark);
}
/**
* 获得 拓展收益的备注
*
* @param saOrderExt 订单编号
* @param cuMemberBonusExpand 拓展奖
* @param sourceCuMemberSettleExt 提供奖金的人
* @param targetCuMemberSettleExt 获得奖金的人
*/
protected void repurchaseExpandRemark(SaOrderExt saOrderExt, CuMemberBonusExpand cuMemberBonusExpand,
CuMemberSettleExt sourceCuMemberSettleExt, CuMemberSettleExt targetCuMemberSettleExt) {
String remark = String.format(BonusMsgConstants.REPURCHASE_EXPAND, cuMemberBonusExpand.getCurrentTouch(), cuMemberBonusExpand.getExpandTouch(), saOrderExt.getOrderCode(),
sourceCuMemberSettleExt.getMemberCode() + sourceCuMemberSettleExt.getMemberName(),
targetCuMemberSettleExt.getMemberCode() + targetCuMemberSettleExt.getMemberName(),
cuMemberBonusExpand.getCalAchieve(), cuMemberBonusExpand.getCalValue());
cuMemberBonusExpand.setRemark(remark);
}
/**
* 获得 辅导收益的备注
*
* @param saOrderExt 订单编号
* @param cuMemberBonusCoach 辅导奖
* @param sourceCuMemberSettleExt 提供奖金的人
* @param targetCuMemberSettleExt 获得奖金的人
* @param saOrder 订单编号
* @param cuMemberBonusCoach 培育津贴
* @param sourceCuMemberRetailExt 提供奖金的人
* @param targetCuMemberRetailExt 获得奖金的人
*/
protected void coachRemark(SaOrderExt saOrderExt, CuMemberBonusCoach cuMemberBonusCoach,
CuMemberSettleExt sourceCuMemberSettleExt, CuMemberSettleExt targetCuMemberSettleExt) {
String remark = String.format(BonusMsgConstants.COACH, cuMemberBonusCoach.getCurrentGeneration(), saOrderExt.getOrderCode(),
sourceCuMemberSettleExt.getMemberCode() + sourceCuMemberSettleExt.getMemberName(),
targetCuMemberSettleExt.getMemberCode() + targetCuMemberSettleExt.getMemberName(),
protected void retailCoachRemark(SaOrder saOrder, CuMemberBonusCoach cuMemberBonusCoach,
CuMemberRetailRangeExt sourceCuMemberRetailExt, CuMemberRetailRangeExt targetCuMemberRetailExt) {
String remark = String.format(BonusMsgConstants.RETAIL_COACH, cuMemberBonusCoach.getCurrentGeneration(), saOrder.getOrderCode(),
sourceCuMemberRetailExt.getMemberCode() + sourceCuMemberRetailExt.getMemberName(),
targetCuMemberRetailExt.getMemberCode() + targetCuMemberRetailExt.getMemberName(),
cuMemberBonusCoach.getCalAchieve(), cuMemberBonusCoach.getCalValue());
cuMemberBonusCoach.setRemark(remark);
}
/**
* @param saOrderExt 订单编号
* @param cuMemberBonusCoach 辅导奖
* @param sourceMemberRangeExt 提供奖金的人
* @param targetMemberRangeExt 获得奖金的人
* 获得 辅导收益的备注
*/
protected void coachRangeRemark(SaOrderExt saOrderExt, CuMemberBonusCoach cuMemberBonusCoach,
CuMemberRangeExt sourceMemberRangeExt, CuMemberRangeExt targetMemberRangeExt) {
String remark = String.format(BonusMsgConstants.RANGE_COACH, cuMemberBonusCoach.getCurrentGeneration(), cuMemberBonusCoach.getCoachGeneration(),
saOrderExt.getOrderCode(),
sourceMemberRangeExt.getMemberCode() + sourceMemberRangeExt.getMemberName(),
targetMemberRangeExt.getMemberCode() + targetMemberRangeExt.getMemberName(),
cuMemberBonusCoach.getCalAchieve(), cuMemberBonusCoach.getCalValue());
cuMemberBonusCoach.setRemark(remark);
}
/**
* @param saOrderExt 订单编号
* @param cuMemberBonusDetail 报单服务费
* @param sourceCuMemberSettleExt 提供奖金的人
* @param targetCuMemberSettleExt 获得奖金的人
* 获得 报单服务费收益的备注
*/
protected void serviceRemark(SaOrderExt saOrderExt, CuMemberBonusDetail cuMemberBonusDetail,
CuMemberSettleExt sourceCuMemberSettleExt, CuMemberSettleExt targetCuMemberSettleExt) {
String remark = String.format(BonusMsgConstants.SERVICE, saOrderExt.getOrderCode(),
sourceCuMemberSettleExt.getMemberCode() + sourceCuMemberSettleExt.getMemberName(),
targetCuMemberSettleExt.getMemberCode() + targetCuMemberSettleExt.getMemberName(),
cuMemberBonusDetail.getCalAchieve(), cuMemberBonusDetail.getCalValue());
cuMemberBonusDetail.setRemark(remark);
}
/**
* @param saOrderExt 订单编号
* @param cuMemberBonusDetail 报单服务费
* @param sourceCuMemberRangeExt 提供奖金的人
* @param targetCuMemberRangeExt 获得奖金的人
* 获得 报单服务费收益的备注
*/
protected void rangeServiceRemark(SaOrderExt saOrderExt, CuMemberBonusDetail cuMemberBonusDetail,
CuMemberRangeExt sourceCuMemberRangeExt, CuMemberRangeExt targetCuMemberRangeExt) {
String remark = String.format(BonusMsgConstants.RANGE_SERVICE, saOrderExt.getOrderCode(),
sourceCuMemberRangeExt.getMemberCode() + sourceCuMemberRangeExt.getMemberName(),
targetCuMemberRangeExt.getMemberCode() + targetCuMemberRangeExt.getMemberName(),
cuMemberBonusDetail.getCalAchieve(), cuMemberBonusDetail.getCalValue());
cuMemberBonusDetail.setRemark(remark);
}
/**
* 获得 报单服务费收益的备注
*
* @param saOrderExt 订单编号
* @param cuMemberBonusDetail 报单服务费
* @param sourceCuMemberSettleExt 提供奖金的人
* @param targetCuMemberSettleExt 获得奖金的人
*/
protected void haiFunRemark(SaOrderExt saOrderExt, CuMemberBonusDetail cuMemberBonusDetail,
CuMemberSettleExt sourceCuMemberSettleExt, CuMemberSettleExt targetCuMemberSettleExt) {
String remark = String.format(BonusMsgConstants.HAI_FUN, saOrderExt.getOrderCode(),
sourceCuMemberSettleExt.getMemberCode() + sourceCuMemberSettleExt.getMemberName(),
targetCuMemberSettleExt.getMemberCode() + targetCuMemberSettleExt.getMemberName(),
cuMemberBonusDetail.getPretaxIncome());
cuMemberBonusDetail.setRemark(remark);
}
/**
* 获得 嗨粉推荐的收益
*
* @param saOrderExt 订单编号
* @param cuMemberBonusDetail 报单服务费
* @param sourceCuMemberSettleExt 提供奖金的人
* @param targetCuMemberSettleExt 获得奖金的人
*/
protected void hiFunRemark(SaOrderExt saOrderExt, CuMemberBonusDetail cuMemberBonusDetail,
CuMemberSettleExt sourceCuMemberSettleExt, CuMemberSettleExt targetCuMemberSettleExt) {
String remark = String.format(BonusMsgConstants.HI_FUN, saOrderExt.getOrderCode(),
sourceCuMemberSettleExt.getMemberCode() + sourceCuMemberSettleExt.getMemberName(),
targetCuMemberSettleExt.getMemberCode() + targetCuMemberSettleExt.getMemberName(),
cuMemberBonusDetail.getRealIncome());
cuMemberBonusDetail.setRemark(remark);
}
/**
* 获得 分红收益的备注
*
* @param cuMemberBonusDetail 分红
* @param settleDate 结算日期
*/
protected void shareRemark(CuMemberBonusDetail cuMemberBonusDetail, String settleDate) {
String remark = String.format(BonusMsgConstants.SHARE, DateUtils.getMonth(settleDate),
cuMemberBonusDetail.getPretaxIncome());
cuMemberBonusDetail.setRemark(remark);
}
/**
* @param saOrderExt 订单编号
* @param cuMemberBonusRange 报单服务费
* @param sourceCuMemberSettleExt 提供奖金的人
* @param targetCuMemberSettleExt 获得奖金的人
* 获得 报单服务费收益的备注
*/
protected void rangeRemark(SaOrderExt saOrderExt, CuMemberBonusRange cuMemberBonusRange, CuMemberSettleExt sourceCuMemberSettleExt,
CuMemberSettleExt targetCuMemberSettleExt, Map<String, RangeDTO> rangePkDtoMap) {
RangeDTO beforeOrderRangeDto = rangePkDtoMap.get(targetCuMemberSettleExt.getPkSettleCountry().toString() + cuMemberBonusRange.getPkBeforeRange());
RangeDTO orderRangeDto = rangePkDtoMap.get(sourceCuMemberSettleExt.getPkSettleCountry().toString() + cuMemberBonusRange.getPkRange());
String remark = String.format(BonusMsgConstants.SHARE_RANGE, saOrderExt.getOrderCode(),
sourceCuMemberSettleExt.getMemberCode() + sourceCuMemberSettleExt.getMemberName(),
targetCuMemberSettleExt.getMemberCode() + targetCuMemberSettleExt.getMemberName(),
cuMemberBonusRange.getCalAchieve(), beforeOrderRangeDto == null ? "" : beforeOrderRangeDto.getRangeName(), orderRangeDto == null ? "" : orderRangeDto.getRangeName());
cuMemberBonusRange.setRemark(remark);
}
/**
* 获得 直推级差收益的备注
*
@ -548,7 +118,7 @@ public abstract class BonusSettleHandle {
* @param targetMemberRangeExt 获得奖金的人
*/
protected void rangeMonthRepurchaseRetailRemark(SaOrder saOrderExt, CuMemberBonusRange cuMemberBonusRange, CuMemberRetailRangeExt sourceMemberRangeExt,
CuMemberRetailRangeExt targetMemberRangeExt) {
CuMemberRetailRangeExt targetMemberRangeExt) {
String remark = String.format(BonusMsgConstants.RETAIL_MONTH_REPURCHASE_INCOME, saOrderExt.getOrderCode(),
sourceMemberRangeExt.getMemberCode() + sourceMemberRangeExt.getMemberName(),
targetMemberRangeExt.getMemberCode() + targetMemberRangeExt.getMemberName(),
@ -573,76 +143,6 @@ public abstract class BonusSettleHandle {
cuMemberBonusRange.setRemark(remark);
}
/**
* 获得 报单服务费收益的备注
*
* @param saOrderExt 订单编号
* @param cuMemberBonusRange 报单服务费
* @param sourceCuMemberSettleExt 提供奖金的人
* @param targetCuMemberSettleExt 获得奖金的人
*/
protected void xueRangeRemark(SaOrderExt saOrderExt, CuMemberBonusRange cuMemberBonusRange, CuMemberSettleExt sourceCuMemberSettleExt,
CuMemberSettleExt targetCuMemberSettleExt) {
String remark = String.format(BonusMsgConstants.LE_XUE_SHARE_RANGE, saOrderExt.getOrderCode(),
sourceCuMemberSettleExt.getMemberCode() + sourceCuMemberSettleExt.getMemberName(),
targetCuMemberSettleExt.getMemberCode() + targetCuMemberSettleExt.getMemberName(),
ComputeUtil.computeDivide(targetCuMemberSettleExt.getRetailPrice(), BigDecimal.ONE), targetCuMemberSettleExt.getGradeValue());
cuMemberBonusRange.setRemark(remark);
}
/**
* @param saOrder 订单编号
* @param cuMemberBonusDetail 云代首购
* @param sourceCuMemberSettleExt 提供奖金的人
* @param targetCuMemberSettleExt 获得奖金的人
* 获得 报单服务费收益的备注
*/
protected void repurchaseCouponsRemark(SaOrder saOrder, CuMemberBonusDetail cuMemberBonusDetail, CuMemberSettleExt sourceCuMemberSettleExt,
CuMemberSettleExt targetCuMemberSettleExt) {
String remark = String.format(BonusMsgConstants.REPURCHASE_COUPON_RANGE, saOrder.getOrderCode(),
sourceCuMemberSettleExt.getMemberCode() + sourceCuMemberSettleExt.getMemberName(),
targetCuMemberSettleExt.getMemberCode() + targetCuMemberSettleExt.getMemberName(),
cuMemberBonusDetail.getCalAchieve(), cuMemberBonusDetail.getCalValue(), cuMemberBonusDetail.getRealIncome());
cuMemberBonusDetail.setRemark(remark);
}
/**
* 获取会员列表的考核结果
*
* @param settleDateStr 结算日期
* @param cuMemberSettleExtList 会员列表
*/
protected Map<Long, CuMemberAssess> getLongCuMemberAssessMap(String settleDateStr, List<CuMemberSettleExt> cuMemberSettleExtList) {
if (cuMemberSettleExtList.size() == 0) {
return new HashMap<>(0);
}
Date settleDate = DateUtils.parseStringToDate(settleDateStr);
// 获取结算日期的第一天的日期
Integer assessPeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(DateUtils.currentMonthFirstDateStr(settleDate)).getPkId();
String assessTableName = TableNameConstants.CU_MEMBER_ASSESS + DateUtils.getYear(settleDateStr);
return cuMemberAssessService.queryCuMemberAssessByMember(assessTableName, assessPeriod, EAssessmentType.REPURCHASE_ASSESS.getValue(), cuMemberSettleExtList);
}
/**
* 获取会员奖金汇总表
*
* @param period 期间
* @param cuMemberBonusMap 奖金汇总map
* @param saOrder 汇率
* @param cuMemberSettleExt 获取奖金的会员
* @return CuMemberBonus
*/
protected CuMemberBonus getCuMemberBonus(Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap, SaOrder saOrder,
CuMemberSettleExt cuMemberSettleExt) {
Integer pkRate = saOrder.getPkRate();
if (pkRate == null || !Objects.equals(cuMemberSettleExt.getPkSettleCountry(), saOrder.getPkCountry())) {
CurrencyDTO currencyDTO = iCurrencyServiceApi.getCurrency(cuMemberSettleExt.getPkSettleCountry()).getData();
pkRate = currencyDTO.getPkId();
}
return getCuMemberBonus(period, cuMemberBonusMap, cuMemberSettleExt.getPkMember(), cuMemberSettleExt.getIncomeStatus(),
cuMemberSettleExt.getPkSettleCountry(), pkRate);
}
protected CuMemberBonus getCuMemberBonus(Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap,
Long pkMember, Integer incomeStatus, Integer pkCountry, Integer pkRate) {
if (cuMemberBonusMap.containsKey(pkMember)) {
@ -702,162 +202,6 @@ public abstract class BonusSettleHandle {
}
}
protected CuMemberBonusExpand getCuMemberBonusExpand(SaOrderExt saOrderExt, int touchNum, int i, CuMemberSettleExt targetMemberSettleExt, BigDecimal countryExpandRatio, CuMemberBonus cuMemberBonus, BigDecimal calAchieve,
Integer pkBonusItems, BigDecimal addTouch) {
CuMemberBonusExpand cuMemberBonusExpand = CuMemberBonusExpand.builder()
.pkBonus(cuMemberBonus.getPkId())
.pkOrder(saOrderExt.getPkId())
.pkBonusItems(pkBonusItems)
.calType(ECalType.RATIO.getValue())
.incomeStatus(targetMemberSettleExt.getIncomeStatus())
.currentTouch(i)
.expandTouch(touchNum)
.addTouch(addTouch)
.calValue(countryExpandRatio)
.calAchieve(calAchieve)
.pretaxIncome(BigDecimal.ZERO)
.incomeTax(BigDecimal.ZERO)
.realIncome(BigDecimal.ZERO)
.incomeRatio(BigDecimal.ZERO)
.incomeDialRatio(BigDecimal.ZERO)
.orderDialRatio(BigDecimal.ZERO)
.build();
cuMemberBonusExpand.setPkCountry(targetMemberSettleExt.getPkSettleCountry());
cuMemberBonusExpand.setPkCreator(MagicNumberConstants.PK_ADMIN);
if (EAccountStatus.STOP_PROFIT.getValue() == targetMemberSettleExt.getAccountStatus()) {
cuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.STOP_INCOME.getValue());
}
if (EExpireStatus.TERMINATED.getValue() == targetMemberSettleExt.getExpireStatus()) {
cuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue());
}
return cuMemberBonusExpand;
}
protected void packageCuMemberBonusExpand(CuMemberBonusExpand cuMemberBonusExpand, CuMemberBonus cuMemberBonus,
BigDecimal expandCapping, BigDecimal income, BigDecimal actualIncome) {
cuMemberBonusExpand.setExpandNoCapping(income);
cuMemberBonusExpand.setExpandCapping(income);
BigDecimal expandIncome = ComputeUtil.computeAdd(cuMemberBonus.getExpandCapping(), income);
if (ComputeUtil.compareValue(expandIncome, expandCapping)) {
cuMemberBonusExpand.setExpandCapping(ComputeUtil.computeSubtractAbs(cuMemberBonus.getExpandCapping(), income));
cuMemberBonus.setExpandCapping(expandCapping);
} else {
cuMemberBonus.setExpandCapping(expandIncome);
}
cuMemberBonusExpand.setPretaxIncome(actualIncome);
cuMemberBonusExpand.setExpandNormalHalf(ComputeUtil.computeMultiplyHalf(cuMemberBonusExpand.getExpandCapping()));
cuMemberBonusExpand.setExpandNormalReal(ComputeUtil.computeMultiplyHalf(cuMemberBonusExpand.getPretaxIncome()));
}
protected void packageCuMemberBonusRepurchaseExpand(CuMemberBonusExpand cuMemberBonusExpand, CuMemberBonus cuMemberBonus,
BigDecimal expandCapping, BigDecimal income, BigDecimal actualIncome) {
cuMemberBonusExpand.setExpandNoCapping(income);
cuMemberBonusExpand.setExpandCapping(income);
BigDecimal expandIncome = ComputeUtil.computeAdd(cuMemberBonus.getExpandCapping(), income);
if (ComputeUtil.compareValue(expandIncome, expandCapping)) {
cuMemberBonusExpand.setExpandCapping(ComputeUtil.computeSubtractAbs(cuMemberBonus.getExpandCapping(), income));
}
cuMemberBonusExpand.setPretaxIncome(actualIncome);
cuMemberBonusExpand.setExpandNormalHalf(ComputeUtil.computeMultiplyHalf(cuMemberBonusExpand.getExpandCapping()));
cuMemberBonusExpand.setExpandNormalReal(ComputeUtil.computeMultiplyHalf(cuMemberBonusExpand.getPretaxIncome()));
}
/**
* @param cuMemberSettleExtMap 树关系
* @param settleTableName 结算表
* @param saOrderList 订单
* 根据订单获取会员的血缘父级用于嗨粉推荐复购极差
*/
protected List<CuMemberSettleExt> getMemberParentBySaOrder(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, String settleTableName, List<SaOrderExt> saOrderList) {
Set<Long> memberSet = new HashSet<>();
saOrderList.forEach(saOrderExt -> memberSet.add(saOrderExt.getPkMember()));
List<CuMemberSettleExt> cuMemberSettleExtList = cuMemberTreeService.batchQueryCuMemberSettleParent(settleTableName, memberSet);
getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList);
return cuMemberSettleExtList;
}
/**
* @param awardsMap 奖衔
* @param parentMemberTree 会员树历史记录
* 获取会员的极差等级验证会员是否有奖衔
*/
protected String getMemberCountryKey(Map<String, BdAwards> awardsMap, CuMemberTree parentMemberTree, Map<Long, CuAwardsControl> cuAwardsControlMap) {
Integer pkAwards = getPkRealAwards(parentMemberTree.getPkMember(), parentMemberTree.getPkAwards(), cuAwardsControlMap);
String key = parentMemberTree.getPkSettleCountry().toString() + ERangeType.AWARDS.getValue() + pkAwards;
String awardKey = parentMemberTree.getPkSettleCountry() + parentMemberTree.getPkAwards().toString();
if (awardsMap.get(awardKey) != null && EAwards.MEMBER.getValue() == awardsMap.get(awardKey).getAwardsValue()) {
key = parentMemberTree.getPkSettleCountry().toString() + ERangeType.GRADE.getValue() + parentMemberTree.getPkGrade();
}
return key;
}
protected RangeDTO getRangeDto(Map<String, RangeDTO> rangeDtoMap, Map<String, BdAwards> awardsMap, CuMemberTree parentMemberTree, Map<Long, CuAwardsControl> cuAwardsControlMap) {
String key = getMemberCountryKey(awardsMap, parentMemberTree, cuAwardsControlMap);
return rangeDtoMap.get(key);
}
/**
* @param awardsMap 奖衔
* @param parentMemberTree 会员树历史记录
* 获取会员的极差等级验证会员是否有奖衔
*/
protected String getMemberKey(Map<String, BdAwards> awardsMap, CuMemberTree parentMemberTree) {
String key = Integer.toString(ERangeType.AWARDS.getValue()) + parentMemberTree.getPkAwards();
String awardKey = parentMemberTree.getPkSettleCountry().toString() + parentMemberTree.getPkAwards().toString();
if (EAwards.MEMBER.getValue() == awardsMap.get(awardKey).getAwardsValue()) {
key = Integer.toString(ERangeType.GRADE.getValue()) + parentMemberTree.getPkGrade();
}
return key;
}
/**
* 奖金明细 报单服务费分红云代首购云代复购海豆收益
*
* @param saOrderExt 订单
* @param targetMemberSettleExt 奖金网体
* @param cuMemberBonus 奖金主表
*/
protected CuMemberBonusDetail getCuMemberBonusDetail(SaOrder saOrderExt, CuMemberSettleExt targetMemberSettleExt, CuMemberBonus cuMemberBonus) {
CuMemberBonusDetail cuMemberBonusDetail = CuMemberBonusDetail.builder()
.pkBonus(cuMemberBonus.getPkId())
.pkOrder(saOrderExt.getPkId())
.calType(ECalType.RATIO.getValue())
.incomeStatus(targetMemberSettleExt.getIncomeStatus())
.calAchieve(saOrderExt.getOrderAchieve())
.pretaxIncome(BigDecimal.ZERO)
.incomeTax(BigDecimal.ZERO)
.realIncome(BigDecimal.ZERO)
.incomeRatio(BigDecimal.ZERO)
.incomeDialRatio(BigDecimal.ZERO)
.orderDialRatio(BigDecimal.ZERO)
.build();
cuMemberBonusDetail.setPkCountry(targetMemberSettleExt.getPkSettleCountry());
cuMemberBonusDetail.setPkCreator(MagicNumberConstants.PK_ADMIN);
if (EExpireStatus.TERMINATED.getValue() == targetMemberSettleExt.getExpireStatus()) {
cuMemberBonusDetail.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue());
}
return cuMemberBonusDetail;
}
/**
* 获得需要查询的会员免考通过的不需要查询考核记录
*
* @param cuMemberSettleExtMap 存储目前有的会员数据
* @param cuMemberSettleExtList 需要查询的会员数据
*/
protected List<CuMemberSettleExt> getQueryMemberSettleExtList(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, List<CuMemberSettleExt> cuMemberSettleExtList) {
// 过滤数据免考的会员不进行查询
List<CuMemberSettleExt> queryMemberList = new ArrayList<>();
cuMemberSettleExtList.forEach(cuMemberSettleExt -> {
CuMemberSettleExt memberSettleExt = cuMemberSettleExtMap.get(cuMemberSettleExt.getPkMember());
// 免考的不查询
if (memberSettleExt == null || EYesNo.NO.getIntValue() == memberSettleExt.getPurchaseStatus()) {
queryMemberList.add(cuMemberSettleExt);
}
});
return queryMemberList;
}
/**
* 设置奖金扣项计算税前收益扣税实际收益, 设置主表
*
@ -876,36 +220,6 @@ public abstract class BonusSettleHandle {
cuMemberBonus.setServiceSpend(ComputeUtil.computeAdd(cuMemberBonus.getServiceSpend(), ComputeUtil.computeBonusMultiply(pretaxIncome, platformRatio)));
}
/**
* 首购计算 扣项小计总计
*/
protected void setFirstPurchaseTotal(BdBonusDeduct bdBonusDeduct, CuMemberBonus cuMemberBonus, Object bonusDetail) {
setBonusDeduct(bdBonusDeduct, cuMemberBonus, bonusDetail);
BigDecimal realIncome = ReflectUtils.invokeGetter(bonusDetail, BonusFieldConstants.REAL_INCOME);
cuMemberBonus.setPurRealSubtotal(ComputeUtil.computeAdd(cuMemberBonus.getPurRealSubtotal(), realIncome));
cuMemberBonus.setRealIncomeTotal(ComputeUtil.computeAdd(cuMemberBonus.getRealIncomeTotal(), realIncome));
}
/**
* 复购计算 扣项小计总计
*/
protected void setPurchaseTotal(BdBonusDeduct bdBonusDeduct, CuMemberBonus cuMemberBonus, Object bonusDetail) {
setBonusDeduct(bdBonusDeduct, cuMemberBonus, bonusDetail);
BigDecimal realIncome = ReflectUtils.invokeGetter(bonusDetail, BonusFieldConstants.REAL_INCOME);
cuMemberBonus.setRepurRealSubtotal(ComputeUtil.computeAdd(cuMemberBonus.getRepurRealSubtotal(), realIncome));
cuMemberBonus.setRealIncomeTotal(ComputeUtil.computeAdd(cuMemberBonus.getRealIncomeTotal(), realIncome));
}
/**
* 云代计算 扣项小计总计
*/
protected void setCloudTotal(BdBonusDeduct bdBonusDeduct, CuMemberBonus cuMemberBonus, Object bonusDetail) {
setBonusDeduct(bdBonusDeduct, cuMemberBonus, bonusDetail);
BigDecimal realIncome = ReflectUtils.invokeGetter(bonusDetail, BonusFieldConstants.REAL_INCOME);
cuMemberBonus.setCloudRealSubtotal(ComputeUtil.computeAdd(cuMemberBonus.getCloudRealSubtotal(), realIncome));
cuMemberBonus.setRealIncomeTotal(ComputeUtil.computeAdd(cuMemberBonus.getRealIncomeTotal(), realIncome));
}
/**
* 扣项小计总计
*/
@ -916,15 +230,6 @@ public abstract class BonusSettleHandle {
cuMemberBonus.setRealIncomeTotal(ComputeUtil.computeAdd(cuMemberBonus.getRealIncomeTotal(), realIncome));
}
/**
* 扣项小计总计
*/
protected void setRepurchaseCouponTotal(BdBonusDeduct bdBonusDeduct, CuMemberBonus cuMemberBonus, Object bonusDetail) {
setBonusDeduct(bdBonusDeduct, cuMemberBonus, bonusDetail);
BigDecimal realIncome = ReflectUtils.invokeGetter(bonusDetail, BonusFieldConstants.REAL_INCOME);
cuMemberBonus.setRepurCouponSubtotal(ComputeUtil.computeAdd(cuMemberBonus.getRepurCouponSubtotal(), realIncome));
}
/**
* 设置奖金扣项计算税前收益扣税实际收益, 设置明细表
*
@ -948,79 +253,4 @@ public abstract class BonusSettleHandle {
return bdBonusDeduct;
}
protected void setCuMemberAchieve(SaOrderExt saOrderExt, Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, BonusConfigDTO bonusConfigDTO) {
CuMemberSettleExt cuMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkMember());
if (EOrderType.REGISTER_ORDER.getValue() == saOrderExt.getOrderType()) {
cuMemberSettleExt.setRegisterAmount(ComputeUtil.computeAdd(cuMemberSettleExt.getRegisterAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO)));
cuMemberSettleExt.setRegisterPv(ComputeUtil.computeAdd(cuMemberSettleExt.getRegisterPv(), saOrderExt.getOrderAchieve()));
cuMemberSettleExt.setRegisterNewAmount(ComputeUtil.computeAdd(cuMemberSettleExt.getRegisterNewAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO)));
cuMemberSettleExt.setRegisterNewPv(ComputeUtil.computeAdd(cuMemberSettleExt.getRegisterNewPv(), saOrderExt.getOrderAchieve()));
} else {
cuMemberSettleExt.setUpgradeAmount(ComputeUtil.computeAdd(cuMemberSettleExt.getUpgradeAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO)));
cuMemberSettleExt.setUpgradePv(ComputeUtil.computeAdd(cuMemberSettleExt.getUpgradePv(), saOrderExt.getOrderAchieve()));
cuMemberSettleExt.setUpgradeNewAmount(ComputeUtil.computeAdd(cuMemberSettleExt.getUpgradeNewAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO)));
cuMemberSettleExt.setUpgradeNewPv(ComputeUtil.computeAdd(cuMemberSettleExt.getUpgradeNewPv(), saOrderExt.getOrderAchieve()));
}
}
/**
* 根据订单分类分为首购复购真实获取新增业绩
*
* @param orderExtList 订单列表
*/
public void assortSaOrder(Map<Long, MemberAchieveParam> cuMemberAchieveHashMap, List<SaOrderExt> orderExtList, BonusConfigDTO bonusConfigDTO, Boolean isFirst) {
// 注册+升级+云代注册+云代升级 首购 注册+升级其他 复购 首购+复购 = 真实
for (SaOrderExt saOrderExt : orderExtList) {
MemberAchieveParam cuMemberAchieve;
if (cuMemberAchieveHashMap.containsKey(saOrderExt.getPkMember())) {
cuMemberAchieve = cuMemberAchieveHashMap.get(saOrderExt.getPkMember());
// 所有的都算真实业绩
} else {
cuMemberAchieve = MemberAchieveParam.builder()
.pkRate(saOrderExt.getPkRate())
.pkMember(saOrderExt.getPkMember())
.newAmount(BigDecimal.ZERO)
.newPv(BigDecimal.ZERO)
.repNewAmount(BigDecimal.ZERO)
.repNewPv(BigDecimal.ZERO)
.newRealAmount(BigDecimal.ZERO)
.newRealPv(BigDecimal.ZERO)
.build();
cuMemberAchieveHashMap.put(saOrderExt.getPkMember(), cuMemberAchieve);
}
if (isFirst) {
cuMemberAchieve.setNewAmount(ComputeUtil.computeAdd(cuMemberAchieve.getNewAmount(), saOrderExt.getOrderAmount()));
cuMemberAchieve.setNewPv(ComputeUtil.computeAdd(cuMemberAchieve.getNewPv(), saOrderExt.getOrderAchieve()));
} else {
cuMemberAchieve.setRepNewAmount(ComputeUtil.computeAdd(cuMemberAchieve.getRepNewAmount(), saOrderExt.getOrderAmount()));
cuMemberAchieve.setRepNewPv(ComputeUtil.computeAdd(cuMemberAchieve.getRepNewPv(), saOrderExt.getOrderAchieve()));
}
cuMemberAchieve.setNewRealAmount(ComputeUtil.computeAdd(cuMemberAchieve.getNewRealAmount(), saOrderExt.getOrderAmount()));
cuMemberAchieve.setNewRealPv(ComputeUtil.computeAdd(cuMemberAchieve.getNewRealPv(), saOrderExt.getOrderAchieve()));
}
}
protected BigDecimal convertLocalCurrency(SaOrder saOrderExt, BonusConfigDTO bonusConfigDTO) {
Map<String, BdCurrencyDTO> currencyDtoMap = bonusConfigDTO.getCurrencyDtoMap();
String key = saOrderExt.getPkCountry().toString() + saOrderExt.getPkRate();
BigDecimal orderAmount = BigDecimal.ZERO;
if (currencyDtoMap.containsKey(key)) {
orderAmount = ComputeUtil.computeDivide(saOrderExt.getOrderAmount(), currencyDtoMap.get(key).getOutExchangeRate());
}
return orderAmount;
}
/**
* 根据会员主键列表获得会员只
*/
protected Map<Long, CuMemberAssess> packageMemberSettleByPkMemberSet(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, String settleDate, String settleTableName, Set<Long> memberSet) {
if (memberSet.size() > 0) {
List<CuMemberSettleExt> cuMemberSettleExtList = cuMemberTreeService.batchQueryMemberSettleByMemberPk(settleTableName, memberSet);
// 初始化父类网体的值
getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList);
return getLongCuMemberAssessMap(settleDate, cuMemberSettleExtList);
}
return null;
}
}

View File

@ -1,351 +0,0 @@
package com.hzs.bonus.bonus.service.impl;
import com.hzs.common.core.constant.BonusFieldConstants;
import com.hzs.common.core.constant.MagicNumberConstants;
import com.hzs.common.core.enums.*;
import com.hzs.common.core.utils.ComputeUtil;
import com.hzs.common.core.utils.reflect.ReflectUtils;
import com.hzs.common.domain.bonus.BdBonusDeduct;
import com.hzs.common.domain.member.base.CuAwardsControl;
import com.hzs.common.domain.member.bonus.CuMemberBonus;
import com.hzs.common.domain.member.bonus.CuMemberBonusDetail;
import com.hzs.common.domain.member.ext.CuMemberSettleExt;
import com.hzs.common.domain.sale.ext.SaOrderExt;
import com.hzs.common.domain.sale.ext.SaOrderItemsExt;
import com.hzs.common.domain.system.config.BdAwards;
import com.hzs.system.config.dto.BonusConfigDTO;
import com.hzs.system.config.dto.BonusHiPinkDTO;
import com.hzs.system.config.dto.RangeDTO;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.*;
/**
* @Description: 计算嗨粉订单
* @Author: sui q
* @Time: 2023/1/4 13:38
* @Classname: BonusSettleHiFunHandle
* @PackageName: com.hzs.member.bonus.service.impl
*/
@Component
public class BonusSettleHiFunHandle extends BonusSettleHandle {
/**
* @param period 期间
* @param bonusConfigDTO 参数
* @param hiFunSaOrderList 复购订单
* @param cuMemberBonusMap 所有计算出来的奖金汇总
* @Description: 计算嗨粉奖金
* @return: void
* @Author: sui q
* @Date: 2022/11/10 14:17
*/
List<CuMemberBonusDetail> calculateHiFunPushBonus(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, String settleTableName, Map<String, RangeDTO> rangeDtoMap, Map<String, BdAwards> awardsMap,
BonusConfigDTO bonusConfigDTO, List<SaOrderExt> hiFunSaOrderList, Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap, Map<Long, CuAwardsControl> cuAwardsControlMap) {
// 根据订单明细开始计算奖金计算嗨粉推荐奖
List<CuMemberBonusDetail> cuMemberBonusDetailList = new ArrayList<>();
// cuMemberSettleExtMap 需要含自己
getMemberParentBySaOrder(cuMemberSettleExtMap, settleTableName, hiFunSaOrderList);
// 原来413嗨粉推荐海粉极差收益
hiFunSaOrderList.forEach(saOrderExt -> {
List<CuMemberBonusDetail> bonusDetailList = calculateHiFunPushBonusOne(cuMemberSettleExtMap, rangeDtoMap, awardsMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, cuAwardsControlMap);
if (bonusDetailList.size() > 0) {
cuMemberBonusDetailList.addAll(bonusDetailList);
}
});
return cuMemberBonusDetailList;
}
/**
* @param settleTableName 结算表
* @param period 期间
* @param bonusConfigDTO 参数
* @param haiFunOrderList 订单列表
* @param cuMemberBonusMap 所有计算出来的奖金汇总
* @Description: 计算报单服务费
* @return: List<CuMemberBonusCoach>
* @Author: sui q
* @Date: 2022/11/17 14:14
*/
List<CuMemberBonusDetail> calculateHaiFunBonus(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, String settleTableName, BonusConfigDTO bonusConfigDTO,
List<SaOrderExt> haiFunOrderList, Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap) {
List<CuMemberBonusDetail> cuMemberBonusDetailList = new ArrayList<>();
// 先过滤数据验证报单人是否在网体列表中不在需要从数据库中查询
Set<Long> haiFunMemberSet = new HashSet<>();
haiFunOrderList.forEach(saOrderExt -> {
CuMemberSettleExt cuMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkMember());
if (cuMemberSettleExt == null || cuMemberSettleExtMap.get(cuMemberSettleExt.getPkParent()) == null) {
haiFunMemberSet.add(saOrderExt.getPkMember());
}
});
if (haiFunMemberSet.size() > 0) {
List<CuMemberSettleExt> cuMemberSettleExtList = cuMemberTreeService.batchQueryMemberSettleParentByMemberPk(settleTableName, haiFunMemberSet);
// 初始化父类网体的值
getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList);
}
// 计算海粉推荐
for (SaOrderExt saOrderExt : haiFunOrderList) {
List<CuMemberBonusDetail> cuMemberBonusDetails = calculateHaiFunBonusOne(cuMemberSettleExtMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt);
if (cuMemberBonusDetails.size() > 0) {
cuMemberBonusDetailList.addAll(cuMemberBonusDetails);
}
}
// 查询会员
return cuMemberBonusDetailList;
}
/**
* @Description: 计算海粉推荐奖
* @return: CuMemberBonusDetail
* @Author: sui q
* @Date: 2023/2/8 17:22
*/
List<CuMemberBonusDetail> calculateHaiFunBonusOne(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, BonusConfigDTO bonusConfigDTO, Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap, SaOrderExt saOrderExt) {
List<CuMemberBonusDetail> cuMemberBonusDetailList = new ArrayList<>();
CuMemberSettleExt sourceMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkMember());
if (sourceMemberSettleExt == null) {
return cuMemberBonusDetailList;
}
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkParent());
if (targetMemberSettleExt == null || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() ||
EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) {
return cuMemberBonusDetailList;
}
// 验证是否有奖金
// if (validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.HAI_DOU_INCOME.getValue())) {
// return cuMemberBonusDetailList;
// }
for (SaOrderItemsExt saOrderItemsExt : saOrderExt.getOrderItemsExtList()) {
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrderExt, targetMemberSettleExt);
// 海粉直推奖金明细
CuMemberBonusDetail cuMemberBonusDetail = getCuMemberBonusDetail(saOrderExt, targetMemberSettleExt, cuMemberBonus);
// 计算比例
cuMemberBonusDetail.setCalValue(BigDecimal.ZERO);
// cuMemberBonusDetail.setPkBonusItems(getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.HAI_DOU_INCOME.getValue()));
cuMemberBonusDetail.setPretaxIncome(saOrderItemsExt.getShareAchieve());
// 收益占比
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusDetail, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
haiFunRemark(saOrderExt, cuMemberBonusDetail, sourceMemberSettleExt, targetMemberSettleExt);
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusDetail.getIncomeStatus()) {
cuMemberBonus.setHaiFunIncome(ComputeUtil.computeAdd(cuMemberBonus.getHaiFunIncome(), cuMemberBonusDetail.getPretaxIncome()));
setBonusDeduct(bdBonusDeduct, cuMemberBonus, cuMemberBonusDetail);
BigDecimal realIncome = ReflectUtils.invokeGetter(cuMemberBonusDetail, BonusFieldConstants.REAL_INCOME);
cuMemberBonus.setRealIncomeTotal(ComputeUtil.computeAdd(cuMemberBonus.getRealIncomeTotal(), realIncome));
}
cuMemberBonusDetailList.add(cuMemberBonusDetail);
}
return cuMemberBonusDetailList;
}
/**
* @Description: 计算嗨粉奖金嗨粉推荐嗨粉极差
* @return: List<CuMemberBonusDetail>
* @Author: sui q
* @Date: 2023/2/9 10:25
*/
protected List<CuMemberBonusDetail> calculateHiFunPushBonusOne(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, Map<String, RangeDTO> rangeDtoMap, Map<String, BdAwards> awardsMap, BonusConfigDTO bonusConfigDTO, Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap, SaOrderExt saOrderExt, Map<Long, CuAwardsControl> cuAwardsControlMap) {
List<CuMemberBonusDetail> cuMemberBonusDetailList = new ArrayList<>();
CuMemberSettleExt sourceMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkMember());
if (sourceMemberSettleExt == null) {
return cuMemberBonusDetailList;
}
BigDecimal waresNum = ComputeUtil.computeDivide(saOrderExt.getOrderAmount(), BigDecimal.valueOf(413));
sourceMemberSettleExt.setHiFunAmount(ComputeUtil.computeAdd(sourceMemberSettleExt.getHiFunAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO)));
sourceMemberSettleExt.setHiFunPv(ComputeUtil.computeAdd(sourceMemberSettleExt.getHiFunPv(), saOrderExt.getOrderAchieve()));
sourceMemberSettleExt.setHiFunNewAmount(ComputeUtil.computeAdd(sourceMemberSettleExt.getHiFunNewAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO)));
sourceMemberSettleExt.setHiFunNewPv(ComputeUtil.computeAdd(sourceMemberSettleExt.getHiFunNewPv(), saOrderExt.getOrderAchieve()));
Map<Integer, List<BonusHiPinkDTO>> bonusHiPinkDtoMap = bonusConfigDTO.getBonusHiPinkDtoMap();
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkReference());
// 找到最大的奖金
BigDecimal maxBonusValue = BigDecimal.ZERO;
List<BonusHiPinkDTO> bonusHiPinkDTOList = bonusHiPinkDtoMap.get(saOrderExt.getPkCountry());
for (BonusHiPinkDTO bonusHiPinkDTO : bonusHiPinkDTOList) {
if (ComputeUtil.compareGreaterThan(bonusHiPinkDTO.getBonusValue(), maxBonusValue)) {
maxBonusValue = bonusHiPinkDTO.getBonusValue();
}
}
BigDecimal income = BigDecimal.ZERO;
boolean flag = false;
int i = 0;
while (targetMemberSettleExt != null && targetMemberSettleExt.getPkParent() != 0) {
// 嗨粉直推奖励的配置从第一级开始获取
BonusHiPinkDTO startBonusHiPinkDto = bonusHiPinkDTOList.get(i);
targetMemberSettleExt = getCuMemberTree(cuMemberSettleExtMap, rangeDtoMap, awardsMap, targetMemberSettleExt, startBonusHiPinkDto, cuAwardsControlMap);
if (targetMemberSettleExt == null) {
break;
}
String key = getMemberKey(awardsMap, targetMemberSettleExt);
if (ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() ||
validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.HI_PINK.getValue())) {
targetMemberSettleExt = cuMemberSettleExtMap.get(targetMemberSettleExt.getPkParent());
continue;
}
for (int x = i; x < bonusHiPinkDTOList.size(); x++) {
BonusHiPinkDTO bonusHiPinkDTO = bonusHiPinkDTOList.get(x);
String hiKey = bonusHiPinkDTO.getRangeType().toString() + bonusHiPinkDTO.getPkLevel();
if (key.equals(hiKey)) {
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrderExt, targetMemberSettleExt);
BigDecimal bonusIncome = ComputeUtil.computeSubtract(bonusHiPinkDTO.getBonusValue(), income);
bonusIncome = ComputeUtil.computeMultiply(bonusIncome, waresNum);
if (ComputeUtil.compareValue(BigDecimal.ZERO, bonusIncome)) {
// flag = true;
break;
}
// 直推奖金明细
CuMemberBonusDetail cuMemberBonusDetail = getCuMemberBonusDetail(saOrderExt, targetMemberSettleExt, cuMemberBonus);
cuMemberBonusDetail.setPkBonusItems(getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.HI_PINK.getValue()));
// 计算比例
cuMemberBonusDetail.setCalValue(bonusHiPinkDTO.getBonusValue());
cuMemberBonusDetail.setPretaxIncome(bonusIncome);
// 收益占比
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusDetail, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
hiFunRemark(saOrderExt, cuMemberBonusDetail, sourceMemberSettleExt, targetMemberSettleExt);
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusDetail.getIncomeStatus()) {
cuMemberBonus.setHiFunIncome(ComputeUtil.computeAdd(cuMemberBonus.getHiFunIncome(), cuMemberBonusDetail.getPretaxIncome()));
setBonusDeduct(bdBonusDeduct, cuMemberBonus, cuMemberBonusDetail);
cuMemberBonus.setRealIncomeTotal(ComputeUtil.computeAdd(cuMemberBonus.getRealIncomeTotal(), cuMemberBonusDetail.getRealIncome()));
}
income = bonusHiPinkDTO.getBonusValue();
cuMemberBonusDetailList.add(cuMemberBonusDetail);
if (ComputeUtil.compareEqual(maxBonusValue, bonusHiPinkDTO.getBonusValue())) {
flag = true;
}
if (x < bonusHiPinkDTOList.size() - 1) {
i = x + 1;
} else {
flag = true;
}
break;
}
}
targetMemberSettleExt = cuMemberSettleExtMap.get(targetMemberSettleExt.getPkParent());
if (flag) {
break;
}
}
return cuMemberBonusDetailList;
}
/**
* @Description: 计算嗨粉奖金嗨粉推荐嗨粉极差
* @return: List<CuMemberBonusDetail>
* @Author: sui q
* @Date: 2023/2/9 10:25
*/
protected List<CuMemberBonusDetail> calculateNewHiFunPushBonusOne(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, Map<String, RangeDTO> rangeDtoMap, Map<String, BdAwards> awardsMap, BonusConfigDTO bonusConfigDTO, Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap, SaOrderExt saOrderExt, Map<Long, CuAwardsControl> cuAwardsControlMap) {
List<CuMemberBonusDetail> cuMemberBonusDetailList = new ArrayList<>();
CuMemberSettleExt sourceMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkMember());
if (sourceMemberSettleExt == null) {
return cuMemberBonusDetailList;
}
sourceMemberSettleExt.setHiFunAmount(ComputeUtil.computeAdd(sourceMemberSettleExt.getHiFunAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO)));
sourceMemberSettleExt.setHiFunPv(ComputeUtil.computeAdd(sourceMemberSettleExt.getHiFunPv(), saOrderExt.getOrderAchieve()));
sourceMemberSettleExt.setHiFunNewAmount(ComputeUtil.computeAdd(sourceMemberSettleExt.getHiFunNewAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO)));
sourceMemberSettleExt.setHiFunNewPv(ComputeUtil.computeAdd(sourceMemberSettleExt.getHiFunNewPv(), saOrderExt.getOrderAchieve()));
// Map<Integer, List<BonusHiPinkDTO>> bonusHiPinkDtoMap = bonusConfigDTO.getBonusHiPinkDtoMap();
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkReference());
// 找到最大的奖金
// BigDecimal maxBonusValue = BigDecimal.ZERO;
BigDecimal maxBonusValue = BigDecimal.valueOf(187.5);
BigDecimal grantBonusValue = BigDecimal.ZERO;
// List<BonusHiPinkDTO> bonusHiPinkDTOList = bonusHiPinkDtoMap.get(saOrderExt.getPkCountry());
// for (BonusHiPinkDTO bonusHiPinkDTO : bonusHiPinkDTOList) {
// if (ComputeUtil.compareGreaterThan(bonusHiPinkDTO.getBonusValue(), maxBonusValue)) {
// maxBonusValue = bonusHiPinkDTO.getBonusValue();
// }
// }
// BigDecimal income = BigDecimal.ZERO;
Integer gradeValue = EGrade.YOU_KE.getValue();
while (targetMemberSettleExt != null && targetMemberSettleExt.getPkParent() != 0) {
// 嗨粉直推奖励的配置从第一级开始获取
targetMemberSettleExt = getCuMemberTree(cuMemberSettleExtMap, targetMemberSettleExt, gradeValue);
if (targetMemberSettleExt == null) {
break;
}
if (ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() ||
validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.HI_PINK.getValue())) {
targetMemberSettleExt = cuMemberSettleExtMap.get(targetMemberSettleExt.getPkParent());
continue;
}
BigDecimal memberMaxBonusValue = BigDecimal.ZERO;
if (targetMemberSettleExt.getGradeValue() == EGrade.YOU_KE.getValue() || targetMemberSettleExt.getGradeValue() == EGrade.MAKER.getValue()) {
memberMaxBonusValue = BigDecimal.valueOf(125);
} else if (targetMemberSettleExt.getGradeValue() == EGrade.VIP.getValue()) {
memberMaxBonusValue = BigDecimal.valueOf(156.25);
} else if (targetMemberSettleExt.getGradeValue() == EGrade.S_VIP.getValue()) {
memberMaxBonusValue = BigDecimal.valueOf(187.5);
}
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrderExt, targetMemberSettleExt);
BigDecimal bonusIncome = ComputeUtil.computeSubtract(memberMaxBonusValue, grantBonusValue);
if (ComputeUtil.compareValue(BigDecimal.ZERO, bonusIncome)) {
targetMemberSettleExt = cuMemberSettleExtMap.get(targetMemberSettleExt.getPkParent());
continue;
}
// 直推奖金明细
CuMemberBonusDetail cuMemberBonusDetail = getCuMemberBonusDetail(saOrderExt, targetMemberSettleExt, cuMemberBonus);
cuMemberBonusDetail.setPkBonusItems(getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.HI_PINK.getValue()));
// 计算比例
cuMemberBonusDetail.setCalValue(BigDecimal.ZERO);
cuMemberBonusDetail.setPretaxIncome(bonusIncome);
// 收益占比
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusDetail, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
hiFunRemark(saOrderExt, cuMemberBonusDetail, sourceMemberSettleExt, targetMemberSettleExt);
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusDetail.getIncomeStatus()) {
cuMemberBonus.setHiFunIncome(ComputeUtil.computeAdd(cuMemberBonus.getHiFunIncome(), cuMemberBonusDetail.getPretaxIncome()));
setBonusDeduct(bdBonusDeduct, cuMemberBonus, cuMemberBonusDetail);
cuMemberBonus.setRealIncomeTotal(ComputeUtil.computeAdd(cuMemberBonus.getRealIncomeTotal(), cuMemberBonusDetail.getRealIncome()));
}
grantBonusValue = ComputeUtil.computeAdd(grantBonusValue, bonusIncome);
cuMemberBonusDetailList.add(cuMemberBonusDetail);
if (ComputeUtil.compareEqual(maxBonusValue, grantBonusValue)) {
break;
} else {
targetMemberSettleExt = cuMemberSettleExtMap.get(targetMemberSettleExt.getPkParent());
}
}
return cuMemberBonusDetailList;
}
/**
* 根据极差获取会员
*/
private CuMemberSettleExt getCuMemberTree(Map<Long, CuMemberSettleExt> cuMemberTreeMap, Map<String, RangeDTO> rangeDtoMap,
Map<String, BdAwards> awardsMap, CuMemberSettleExt parentMemberTree, BonusHiPinkDTO bonusHiPinkDTO, Map<Long, CuAwardsControl> cuAwardsControlMap) {
if (parentMemberTree == null) {
return null;
}
// 获取目标会员的极差配置信息 等级还是奖衔
RangeDTO rangeDto = getRangeDto(rangeDtoMap, awardsMap, parentMemberTree, cuAwardsControlMap);
// 嗨粉直推奖励的配置获取目标奖励的配置
RangeDTO targetRangeDto = rangeDtoMap.get(bonusHiPinkDTO.getPkCountry().toString() + bonusHiPinkDTO.getRangeType() + bonusHiPinkDTO.getPkLevel());
if (rangeDto == null || targetRangeDto == null) {
return null;
}
// 判断目标会员极差奖励目标会员的极差等级不足 直推奖励的配置取上一级一直取到 目标会员的 极差等级>= 直推推荐奖励配置的
if (rangeDto.getRangeValue() < targetRangeDto.getRangeValue()) {
parentMemberTree = cuMemberTreeMap.get(parentMemberTree.getPkParent());
parentMemberTree = getCuMemberTree(cuMemberTreeMap, rangeDtoMap, awardsMap, parentMemberTree, bonusHiPinkDTO, cuAwardsControlMap);
}
return parentMemberTree;
}
/**
* 根据极差获取会员
*/
private CuMemberSettleExt getCuMemberTree(Map<Long, CuMemberSettleExt> cuMemberTreeMap, CuMemberSettleExt parentMemberTree, Integer startGradeValue) {
if (parentMemberTree == null) {
return null;
}
// 判断目标会员极差奖励目标会员的极差等级不足 直推奖励的配置取上一级一直取到 目标会员的 极差等级>= 直推推荐奖励配置的
if (parentMemberTree.getGradeValue() < startGradeValue) {
parentMemberTree = cuMemberTreeMap.get(parentMemberTree.getPkParent());
parentMemberTree = getCuMemberTree(cuMemberTreeMap, parentMemberTree, startGradeValue);
}
return parentMemberTree;
}
}

View File

@ -2,7 +2,6 @@ package com.hzs.bonus.bonus.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import com.hzs.bonus.achieve.service.ICuMemberRangeService;
import com.hzs.bonus.achieve.service.ICuMemberRetailRangeService;
import com.hzs.bonus.base.service.ICuMemberService;
import com.hzs.bonus.bonus.vo.BonusRecordDetailVO;
@ -19,21 +18,17 @@ import com.hzs.common.core.utils.ComputeUtil;
import com.hzs.common.core.utils.DateUtils;
import com.hzs.common.domain.bonus.BdBonusDeduct;
import com.hzs.common.domain.member.achieve.CuMemberSettlePeriod;
import com.hzs.common.domain.member.achieve.ext.CuMemberRangeExt;
import com.hzs.common.domain.member.achieve.ext.CuMemberRetailRangeExt;
import com.hzs.common.domain.member.bonus.*;
import com.hzs.common.domain.member.detail.CuMemberAwards;
import com.hzs.common.domain.member.detail.CuMemberGrade;
import com.hzs.common.domain.member.detail.CuMemberLevel;
import com.hzs.common.domain.member.detail.CuMemberServiceLog;
import com.hzs.common.domain.member.ext.BdWaresBonusExt;
import com.hzs.common.domain.sale.ext.SaOrderExt;
import com.hzs.common.domain.sale.ext.SaOrderItemsExt;
import com.hzs.common.domain.sale.ext.SaOrderWaresExt;
import com.hzs.common.domain.sale.order.SaOrder;
import com.hzs.common.domain.system.config.BdAwards;
import com.hzs.common.domain.system.config.BdGrade;
import com.hzs.common.domain.system.config.BdRangeAwards;
import com.hzs.member.detail.ICuMemberServiceLogServiceApi;
import com.hzs.system.config.dto.BonusConfigDTO;
import lombok.extern.slf4j.Slf4j;
@ -54,8 +49,6 @@ import java.util.stream.Collectors;
@Component
public class BonusSettleRangeHandle extends BonusSettleHandle {
@Autowired
private ICuMemberRangeService iCuMemberRangeService;
@Autowired
private ICuMemberRetailRangeService iCuMemberRetailRangeService;
@Autowired
@ -607,220 +600,6 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
}
}
void calculateRangeEvBonus(Map<Long, CuMemberBonus> cuMemberBonusMap, BonusConfigDTO bonusConfigDTO, Integer period, Map<Long, CuMemberRangeExt> memberRangeExtMap, List<CuMemberBonusPush> cuMemberBonusPushList, List<BdWaresBonusExt> bdWaresBonusExtList, SaOrderExt saOrderExt) {
CuMemberRangeExt sourceMemberRangeExt = memberRangeExtMap.get(saOrderExt.getPkMember());
if (ComputeUtil.compareValue(saOrderExt.getOrderAssAchieve(), BigDecimal.valueOf(15.625))) {
// 1= 自己购买了11单 2= 上3代拿 100 200 300 上3代各拿100 上11代各拿1100
int specialWaresState = 0;
BdWaresBonusExt calWaresBonusExt = null;
for (SaOrderItemsExt saOrderItemsExt : saOrderExt.getOrderItemsExtList()) {
boolean flag = Boolean.FALSE;
if (bdWaresBonusExtList != null && bdWaresBonusExtList.size() > 0) {
for (BdWaresBonusExt bdWaresBonusExt : bdWaresBonusExtList) {
if (bdWaresBonusExt.getPkWares().equals(saOrderItemsExt.getPkWares())) {
specialWaresState = 2;
flag = Boolean.TRUE;
calWaresBonusExt = bdWaresBonusExt;
break;
}
}
}
if (flag) {
break;
}
}
if (specialWaresState > 0) {
if (specialWaresState == 2) {
sourceMemberRangeExt.setBuyEffectiveNum(sourceMemberRangeExt.getBuyEffectiveNum() + calWaresBonusExt.getTotalAlgebra());
int algebra = 0;
for (BdWaresBonusItems bdWaresBonusItems : calWaresBonusExt.getBdWaresBonusItemsList()) {
CuMemberBonusPush cuMemberBonusPush = calculatePushBonusOne(sourceMemberRangeExt, memberRangeExtMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt,
bdWaresBonusItems.getAlgebra() - algebra, bdWaresBonusItems.getAssAchieve(), cuMemberBonusPushList);
if (cuMemberBonusPush != null) {
sourceMemberRangeExt = memberRangeExtMap.get(cuMemberBonusPush.getPkBonus());
algebra = bdWaresBonusItems.getAlgebra();
}
}
} else {
sourceMemberRangeExt.setBuyEffectiveNum(sourceMemberRangeExt.getBuyEffectiveNum() + 11);
sourceMemberRangeExt.setFirstAgent(sourceMemberRangeExt.getFirstAgent() + 1);
setPushBonus(cuMemberBonusMap, bonusConfigDTO, period, memberRangeExtMap, saOrderExt, sourceMemberRangeExt, 1, sourceMemberRangeExt.getFirstAgent());
}
} else {
sourceMemberRangeExt.setBuyEffectiveNum(sourceMemberRangeExt.getBuyEffectiveNum() + 1);
// if (EYesNo.NO.getIntValue() == sourceMemberRangeExt.getProvideState()) {
// sourceMemberRangeExt.setProvideState(EYesNo.YES.getIntValue());
// targetMemberRangeExt.setEvEffectiveNum(targetMemberRangeExt.getEvEffectiveNum() + 1);
// }
calculatePushBonusOne(sourceMemberRangeExt, memberRangeExtMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt,
sourceMemberRangeExt.getBuyEffectiveNum(), saOrderExt.getOrderAssAchieve(), cuMemberBonusPushList);
}
}
}
private void setPushBonus(Map<Long, CuMemberBonus> cuMemberBonusMap, BonusConfigDTO bonusConfigDTO, Integer period, Map<Long, CuMemberRangeExt> memberRangeExtMap, SaOrderExt saOrderExt, CuMemberRangeExt sourceMemberRangeExt,
Integer round, Integer second) {
// 死点没有奖金,自身没有购买没有奖金
if (ECategory.NORMAL.getValue() != sourceMemberRangeExt.getCategory() || EAccountStatus.STOP_INCOME.getValue() == sourceMemberRangeExt.getAccountStatus() ||
sourceMemberRangeExt.getBuyEffectiveNum() <= 0 || EAssessStatus.EXAMINE_PASS.getValue() != sourceMemberRangeExt.getAssessStatus()) {
return;
}
if (validatePkBonusItems(bonusConfigDTO, sourceMemberRangeExt.getPkSettleCountry(), EBonusItems.HELP_EACH_INCOME.getValue())) {
return;
}
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, sourceMemberRangeExt.getPkMember(),
sourceMemberRangeExt.getIncomeStatus(), sourceMemberRangeExt.getPkSettleCountry(), sourceMemberRangeExt.getPkRate());
// 直推奖金明细
int pkBonusItem = getPkBonusItems(bonusConfigDTO, sourceMemberRangeExt.getPkSettleCountry(), EBonusItems.HELP_EACH_INCOME.getValue());
CuMemberBonusPush cuMemberBonusPush = getCuMemberBonusPush(saOrderExt, sourceMemberRangeExt, cuMemberBonus, pkBonusItem);
cuMemberBonusPush.setCalType(ECalType.VALUE.getValue());
cuMemberBonusPush.setRound(round);
cuMemberBonusPush.setSecond(second);
cuMemberBonusPush.setCalAchieve(saOrderExt.getOrderAssAchieve());
cuMemberBonusPush.setCalValue(BigDecimal.ONE);
cuMemberBonusPush.setPretaxIncome(saOrderExt.getOrderAssAchieve());
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusPush, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
recommendRangeRemark(saOrderExt, cuMemberBonusPush, memberRangeExtMap, sourceMemberRangeExt);
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusPush.getIncomeStatus()) {
cuMemberBonus.setRepurPushIncome(ComputeUtil.computeAdd(cuMemberBonus.getRepurPushIncome(), cuMemberBonusPush.getPretaxIncome()));
setCloudTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusPush);
}
}
private void packageRangeAwardsByType(List<BdRangeAwards> rangeAwardsList, Map<Integer, BdRangeAwards> consumeRangeAwardsMap, Map<Integer, BdRangeAwards> bloodRangeAwardsMap) {
for (BdRangeAwards bdRangeAwards : rangeAwardsList) {
if (ComputeUtil.compareValue(bdRangeAwards.getConsumePv())) {
consumeRangeAwardsMap.put(bdRangeAwards.getAwardsValue(), bdRangeAwards);
}
if (ComputeUtil.compareValue(bdRangeAwards.getTeamConsumeCheck())) {
bloodRangeAwardsMap.put(bdRangeAwards.getAwardsValue(), bdRangeAwards);
}
}
}
/**
* 先计算奖衔,奖衔计算分为2种先计算自己消费足够的S1-S3S4以上的另一种方式自消费的只有购买人其他的都是根据业绩注意有人可以直接是S4
* 先验证团队业绩小区业绩验证小市场需要从上往下走 s1只能通过自消费除了购买人其他人丛S2开始升级
* 计算个人消费奖项
*/
public List<CuMemberAwards> calculateConsumeRangeAwards(Integer period, Map<Long, List<CuMemberRangeExt>> parentRangeExtMap, Map<Long, CuMemberRangeExt> memberRangeExtMap, String rangeTableName,
CuMemberRangeExt sourceMemberRangeExt, SaOrderExt saOrderExt,
Map<Integer, BdRangeAwards> consumeRangeAwardsMap) {
int rangeAwardsValue = 2;
List<CuMemberAwards> cuMemberAwardsList = new ArrayList<>();
while (consumeRangeAwardsMap.containsKey(sourceMemberRangeExt.getRangeAwardsValue() + rangeAwardsValue)) {
// 验证pv是否满足
BdRangeAwards bdRangeAwards = consumeRangeAwardsMap.get(sourceMemberRangeExt.getRangeAwardsValue() + rangeAwardsValue);
if (ComputeUtil.compareValue(sourceMemberRangeExt.getTeamConsumePv(), bdRangeAwards.getTeamConsumeCheck()) &&
ComputeUtil.compareValue(sourceMemberRangeExt.getConsumePv(), bdRangeAwards.getConsumePv())) {
// 去结算表种查询该会员下所有会员会员团队业绩+消费业绩是业绩 计算小区业绩 团队业绩-小区业绩 验证小区直推必有一种
// 如果需要验证小区
if (ComputeUtil.compareValue(bdRangeAwards.getCommunityCheck())) {
List<CuMemberRangeExt> cuMemberRangeExtList = iCuMemberRangeService.queryCuMemberRangeExtByParent(rangeTableName, sourceMemberRangeExt.getPkMember(), saOrderExt.getPayTime());
// 需要验证团队业绩小区业绩
if (calculateAwards(parentRangeExtMap, memberRangeExtMap, sourceMemberRangeExt, bdRangeAwards, cuMemberRangeExtList, false)) {
break;
}
}
cuMemberAwardsList.add(getCuMemberAwards(sourceMemberRangeExt, period, saOrderExt, bdRangeAwards));
sourceMemberRangeExt.setPkRangeAwards(bdRangeAwards.getPkId());
sourceMemberRangeExt.setPkAwards(bdRangeAwards.getPkAwards());
sourceMemberRangeExt.setRangeAwardsValue(bdRangeAwards.getAwardsValue());
rangeAwardsValue += 2;
} else {
break;
}
}
// 当月有消费修改为考核通过
if (sourceMemberRangeExt.getMonthMember() == EYesNo.YES.getIntValue() && ComputeUtil.compareValue(sourceMemberRangeExt.getMonthPv())) {
sourceMemberRangeExt.setAssessStatus(EAssessStatus.EXAMINE_PASS.getValue());
}
sourceMemberRangeExt.setConsumeStatus(EYesNo.YES.getIntValue());
return cuMemberAwardsList;
}
/**
* 计算团队极差奖衔
*/
public List<CuMemberAwards> calculateBloodRangeAwards(Integer period, Map<Long, List<CuMemberRangeExt>> parentRangeExtMap, Map<Long, CuMemberRangeExt> memberRangeExtMap, String rangeTableName, SaOrderExt saOrderExt,
Map<Integer, BdRangeAwards> bloodRangeAwardsMap, long pkParent, String secondRangeTableName) {
// 计算血缘奖衔一级一级升级分为2段s2s3 一级s3以上一级先验证团队总业绩,
// 小市场先验证目前小市场加新增是否满足满足计算不满足不计算不满足小市场先累计算小市场每天最终计算完毕重新计算S1以上小市场
List<CuMemberAwards> cuMemberAwardsList = new ArrayList<>();
CuMemberRangeExt sourceMemberRangeExt = memberRangeExtMap.get(saOrderExt.getPkMember());
while (true) {
CuMemberRangeExt targetMemberRangeExt = memberRangeExtMap.get(pkParent);
if (targetMemberRangeExt == null) {
break;
}
// 无效会员不累计业绩,当月会员有消费上月会员考核通过
if (EYesNo.YES.getIntValue() == targetMemberRangeExt.getConsumeStatus()) {
targetMemberRangeExt.setTeamConsumeAmount(ComputeUtil.computeAdd(targetMemberRangeExt.getTeamConsumeAmount(), saOrderExt.getOrderAmount()));
targetMemberRangeExt.setTeamConsumePv(ComputeUtil.computeAdd(targetMemberRangeExt.getTeamConsumePv(), ComputeUtil.computeAdd(saOrderExt.getOrderAchieve(), saOrderExt.getOrderAssAchieve())));
targetMemberRangeExt.setTeamMonthAmount(ComputeUtil.computeAdd(targetMemberRangeExt.getTeamMonthAmount(), saOrderExt.getOrderAmount()));
targetMemberRangeExt.setTeamMonthPv(ComputeUtil.computeAdd(targetMemberRangeExt.getTeamMonthPv(), ComputeUtil.computeAdd(saOrderExt.getOrderAchieve(), saOrderExt.getOrderAssAchieve())));
targetMemberRangeExt.setNewTeamPv(ComputeUtil.computeAdd(targetMemberRangeExt.getNewTeamPv(), ComputeUtil.computeAdd(saOrderExt.getOrderAchieve(), saOrderExt.getOrderAssAchieve())));
sourceMemberRangeExt.setDeptTeamConsumeAmount(ComputeUtil.computeAdd(sourceMemberRangeExt.getDeptTeamConsumeAmount(), saOrderExt.getOrderAmount()));
sourceMemberRangeExt.setDeptTeamConsumePv(ComputeUtil.computeAdd(sourceMemberRangeExt.getDeptTeamConsumePv(), ComputeUtil.computeAdd(saOrderExt.getOrderAchieve(), saOrderExt.getOrderAssAchieve())));
sourceMemberRangeExt.setDeptTeamMonthAmount(ComputeUtil.computeAdd(sourceMemberRangeExt.getDeptTeamMonthAmount(), saOrderExt.getOrderAmount()));
sourceMemberRangeExt.setDeptTeamMonthPv(ComputeUtil.computeAdd(sourceMemberRangeExt.getDeptTeamMonthPv(), ComputeUtil.computeAdd(saOrderExt.getOrderAchieve(), saOrderExt.getOrderAssAchieve())));
sourceMemberRangeExt.setDeptNewTeamPv(ComputeUtil.computeAdd(sourceMemberRangeExt.getDeptNewTeamPv(), ComputeUtil.computeAdd(saOrderExt.getOrderAchieve(), saOrderExt.getOrderAssAchieve())));
}
if (targetMemberRangeExt.getAssessStatus() == EAssessStatus.EXAMINE_PASS.getValue()) {
int rangeAwardsValue = 2;
while (bloodRangeAwardsMap.containsKey(targetMemberRangeExt.getRangeAwardsValue() + rangeAwardsValue)) {
// 验证pv是否满足
BdRangeAwards bdRangeAwards = bloodRangeAwardsMap.get(targetMemberRangeExt.getRangeAwardsValue() + rangeAwardsValue);
if (ComputeUtil.compareValue(targetMemberRangeExt.getTeamConsumePv(), bdRangeAwards.getTeamConsumeCheck())) {
// 去结算表种查询该会员下所有会员会员团队业绩+消费业绩是业绩 计算小区业绩 团队业绩-小区业绩 验证小区直推必有一种
List<CuMemberRangeExt> cuMemberRangeExtList;
if (secondRangeTableName != null) {
cuMemberRangeExtList = iCuMemberRangeService.querySecondCuMemberRangeExtByParent(rangeTableName, secondRangeTableName, targetMemberRangeExt.getPkMember());
} else {
cuMemberRangeExtList = iCuMemberRangeService.queryCuMemberRangeExtByParent(rangeTableName, targetMemberRangeExt.getPkMember(), saOrderExt.getPayTime());
}
if (cuMemberRangeExtList.size() > 0) {
if (calculateAwards(parentRangeExtMap, memberRangeExtMap, targetMemberRangeExt, bdRangeAwards, cuMemberRangeExtList, true)) {
break;
}
// 验证血缘部门需要有几个部门大于考核等级数据库验证一次
// 当日的实时奖衔这个位置直接在会员表中计算就可以
if (bdRangeAwards.getPlaceNum() > 0) {
if (secondRangeTableName != null) {
iCuMemberRangeService.mergeSecondCuMemberRangeExt(secondRangeTableName, parentRangeExtMap.get(targetMemberRangeExt.getPkMember()));
// 验证
Integer placeNum = iCuMemberRangeService.validateSecondCuMemberPlaceAwards(secondRangeTableName, cuMemberRangeExtList, bdRangeAwards.getCheckAwards());
if (bdRangeAwards.getPlaceNum() > placeNum) {
break;
}
} else {
// 更新网体更新伞下
iCuMemberRangeService.mergeCuMemberRangeExt(rangeTableName, parentRangeExtMap.get(targetMemberRangeExt.getPkMember()));
// 验证
Integer placeNum = iCuMemberRangeService.validateCuMemberPlaceAwards(rangeTableName, cuMemberRangeExtList, bdRangeAwards.getCheckAwards(), saOrderExt.getPayTime());
if (bdRangeAwards.getPlaceNum() > placeNum) {
break;
}
}
}
}
cuMemberAwardsList.add(getCuMemberAwards(targetMemberRangeExt, period, saOrderExt, bdRangeAwards));
targetMemberRangeExt.setPkRangeAwards(bdRangeAwards.getPkId());
targetMemberRangeExt.setPkAwards(bdRangeAwards.getPkAwards());
targetMemberRangeExt.setRangeAwardsValue(bdRangeAwards.getAwardsValue());
rangeAwardsValue += 2;
continue;
}
break;
}
}
pkParent = targetMemberRangeExt.getPkParent();
sourceMemberRangeExt = targetMemberRangeExt;
}
return cuMemberAwardsList;
}
/**
* 计算团队极差奖衔
*/
@ -1227,93 +1006,6 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
}
}
/**
* 计算奖衔验证小区业绩和推荐数量是否满足
*/
private boolean calculateAwards(Map<Long, List<CuMemberRangeExt>> parentRangeExtMap, Map<Long, CuMemberRangeExt> memberRangeExtMap, CuMemberRangeExt targetMemberRangeExt, BdRangeAwards bdRangeAwards, List<CuMemberRangeExt> cuMemberRangeExtList, Boolean isRecommend) {
BigDecimal bigAreaPv = BigDecimal.ZERO;
Integer recommendNum = 0;
for (CuMemberRangeExt cuMemberRangeExt : cuMemberRangeExtList) {
if (parentRangeExtMap.containsKey(cuMemberRangeExt.getPkParent())) {
parentRangeExtMap.get(cuMemberRangeExt.getPkParent()).add(cuMemberRangeExt);
} else {
List<CuMemberRangeExt> memberRangeExtList = new ArrayList<>();
memberRangeExtList.add(cuMemberRangeExt);
parentRangeExtMap.put(cuMemberRangeExt.getPkParent(), memberRangeExtList);
}
if (memberRangeExtMap.containsKey(cuMemberRangeExt.getPkMember())) {
cuMemberRangeExt = memberRangeExtMap.get(cuMemberRangeExt.getPkMember());
}
// 团队业绩+个人业绩
BigDecimal validatePv = ComputeUtil.computeAdd(cuMemberRangeExt.getDeptTeamConsumePv(), cuMemberRangeExt.getConsumePv());
if (ComputeUtil.compareValue(validatePv, bigAreaPv)) {
bigAreaPv = validatePv;
}
// 有效的,等级满足的算推荐数量验证部门数量的 需要走语句
if (cuMemberRangeExt.getAssessStatus() == EAssessStatus.EXAMINE_PASS.getValue() && bdRangeAwards.getCheckAwards() <= cuMemberRangeExt.getPkRangeAwards()) {
recommendNum += 1;
}
}
// 小区业绩
BigDecimal communityCheck = ComputeUtil.computeSubtract(targetMemberRangeExt.getTeamConsumePv(), bigAreaPv);
// 验证小区,验证失败
if (ComputeUtil.compareGreaterThan(bdRangeAwards.getCommunityCheck(), communityCheck)) {
return true;
}
// 验证推荐
return isRecommend && bdRangeAwards.getRecommendNum() > recommendNum;
}
// /*
// * 计算幸运奖先计算有效代数所有有效代数均分比例10%
// * @author: sui q
// * @date: 2024/10/17 11:34
// * @param: null null
// **/
// List<CuMemberBonusCoach> calculateLuckBonus(Map<Long, CuMemberRangeExt> memberRangeExtMap, Map<Long, CuMemberBonus> cuMemberBonusMap, BonusConfigDTO bonusConfigDTO,
// Integer period, SaOrderExt saOrderExt) {
// CuMemberRangeExt sourceMemberRangeExt = memberRangeExtMap.get(saOrderExt.getPkMember());
// long pkParent = sourceMemberRangeExt.getPkParent();
// int generation = 1;
// List<CuMemberBonusCoach> memberBonusCoachList = new ArrayList<>();
// // 计算代数
// while (true) {
// CuMemberRangeExt targetMemberRangeExt = memberRangeExtMap.get(pkParent);
// if (targetMemberRangeExt == null) {
// generation--;
// break;
// }
// pkParent = targetMemberRangeExt.getPkParent();
// if (ECategory.NORMAL.getValue() != targetMemberRangeExt.getCategory() ||
// EAccountStatus.STOP_INCOME.getValue() == targetMemberRangeExt.getAccountStatus()) {
// continue;
// }
// // 验证推荐有效代数是否大于当前代数
// if (targetMemberRangeExt.getEffectiveNum() >= generation && EAssessStatus.EXAMINE_PASS.getValue() == targetMemberRangeExt.getAssessStatus()) {
// getCuMemberBonus(period, cuMemberBonusMap, targetMemberRangeExt.getPkMember(),
// targetMemberRangeExt.getIncomeStatus(), targetMemberRangeExt.getPkSettleCountry(), targetMemberRangeExt.getPkRate());
// CuMemberBonusCoach cuMemberBonusCoach = getCuMemberBonusCoach(bonusConfigDTO, saOrderExt, generation, targetMemberRangeExt);
// memberBonusCoachList.add(cuMemberBonusCoach);
// generation++;
// }
// }
// // 奖金
// BigDecimal bonusRatio = ComputeUtil.computeDivide(BigDecimal.valueOf(10), BigDecimal.valueOf(generation));
// for (CuMemberBonusCoach cuMemberBonusCoach : memberBonusCoachList) {
// cuMemberBonusCoach.setCoachGeneration(generation);
// cuMemberBonusCoach.setCalValue(bonusRatio);
// cuMemberBonusCoach.setPretaxIncome(ComputeUtil.computeBonusMultiply(cuMemberBonusCoach.getCalAchieve(), bonusRatio));
// CuMemberRangeExt targetMemberRangeExt = memberRangeExtMap.get(cuMemberBonusCoach.getPkBonus());
// CuMemberBonus cuMemberBonus = cuMemberBonusMap.get(cuMemberBonusCoach.getPkBonus());
// BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusCoach, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
// coachRangeRemark(saOrderExt, cuMemberBonusCoach, sourceMemberRangeExt, targetMemberRangeExt);
// if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusCoach.getIncomeStatus()) {
// cuMemberBonus.setCloudDirectIncome(ComputeUtil.computeAdd(cuMemberBonus.getCloudDirectIncome(), cuMemberBonusCoach.getPretaxIncome()));
// setCloudTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusCoach);
// }
// }
// return memberBonusCoachList;
// }
/**
* 计算直推级差收益根据直推级差收益计算平级收益
@ -1688,117 +1380,6 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
return cuMemberBonusDetail;
}
/**
* 计算某条订单的推荐奖金
*/
CuMemberBonusPush calculatePushBonusOne(CuMemberRangeExt sourceMemberRangeExt, Map<Long, CuMemberRangeExt> cuMemberRangeExtMap, BonusConfigDTO bonusConfigDTO, Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap,
SaOrderExt saOrderExt, int algebra, BigDecimal orderAssAchieve, List<CuMemberBonusPush> cuMemberBonusPushList) {
if (sourceMemberRangeExt == null) {
return null;
}
if (algebra >= 12) {
return null;
}
long pkParent = sourceMemberRangeExt.getPkParent();
int i = 1;
while (true) {
CuMemberRangeExt targetMemberRangeExt = cuMemberRangeExtMap.get(pkParent);
if (targetMemberRangeExt == null) {
break;
}
pkParent = targetMemberRangeExt.getPkParent();
if (i < algebra) {
i++;
continue;
}
// 死点没有奖金,自身没有购买没有奖金
if (ECategory.NORMAL.getValue() != targetMemberRangeExt.getCategory() || EAccountStatus.STOP_INCOME.getValue() == targetMemberRangeExt.getAccountStatus() ||
targetMemberRangeExt.getBuyEffectiveNum() <= 0 || EAssessStatus.EXAMINE_PASS.getValue() != targetMemberRangeExt.getAssessStatus()) {
// 记录烧伤记录
targetMemberRangeExt.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue());
}
if (validatePkBonusItems(bonusConfigDTO, targetMemberRangeExt.getPkSettleCountry(), EBonusItems.HELP_EACH_INCOME.getValue())) {
continue;
}
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, targetMemberRangeExt.getPkMember(),
targetMemberRangeExt.getIncomeStatus(), targetMemberRangeExt.getPkSettleCountry(), targetMemberRangeExt.getPkRate());
// 直推奖金明细
int pkBonusItem = getPkBonusItems(bonusConfigDTO, targetMemberRangeExt.getPkSettleCountry(), EBonusItems.HELP_EACH_INCOME.getValue());
CuMemberBonusPush cuMemberBonusPush = getCuMemberBonusPush(saOrderExt, targetMemberRangeExt, cuMemberBonus, pkBonusItem);
cuMemberBonusPush.setCalType(ECalType.VALUE.getValue());
// 前2代买的有特殊规则
if (algebra == 1) {
// 第一代前三单需要自购一单从第四单开始需要自动二单需要验证是否买了第二单
if (targetMemberRangeExt.getFirstAgent() >= 3 && targetMemberRangeExt.getBuyEffectiveNum() <= 1) {
continue;
}
targetMemberRangeExt.setFirstAgent(targetMemberRangeExt.getFirstAgent() + 1);
cuMemberBonusPush.setSecond(targetMemberRangeExt.getFirstAgent());
} else if (algebra == 2) {
if (targetMemberRangeExt.getSecondAgent() < 3 && targetMemberRangeExt.getBuyEffectiveNum() <= 1) {
continue;
} else if (targetMemberRangeExt.getSecondAgent() >= 3 && targetMemberRangeExt.getBuyEffectiveNum() <= 2) {
continue;
}
targetMemberRangeExt.setSecondAgent(targetMemberRangeExt.getSecondAgent() + 1);
cuMemberBonusPush.setSecond(targetMemberRangeExt.getSecondAgent());
} else {
if (targetMemberRangeExt.getBuyEffectiveNum() < algebra) {
continue;
}
cuMemberBonusPush.setSecond(-1);
}
cuMemberBonusPush.setRound(algebra);
cuMemberBonusPush.setCalAchieve(orderAssAchieve);
cuMemberBonusPush.setCalValue(BigDecimal.ONE);
cuMemberBonusPush.setPretaxIncome(orderAssAchieve);
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusPush, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
recommendRangeRemark(saOrderExt, cuMemberBonusPush, cuMemberRangeExtMap, targetMemberRangeExt);
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusPush.getIncomeStatus()) {
cuMemberBonus.setRepurPushIncome(ComputeUtil.computeAdd(cuMemberBonus.getRepurPushIncome(), cuMemberBonusPush.getPretaxIncome()));
setCloudTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusPush);
}
cuMemberBonusPushList.add(cuMemberBonusPush);
if (targetMemberRangeExt.getIncomeStatus() == EBonusIncomeStatus.NORMAL.getValue()) {
return cuMemberBonusPush;
} else {
cuMemberBonusPush.setSecond(-1);
}
}
return null;
}
/**
* 计算服务中心奖
*/
CuMemberBonusDetail calculateRangeStoreBonusOne(Map<Long, CuMemberRangeExt> cuMemberRangeExtMap, CuMemberRangeExt targetMemberRangeExt, BonusConfigDTO bonusConfigDTO, Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap, SaOrderExt saOrderExt) {
CuMemberRangeExt sourceMemberRangeExt = cuMemberRangeExtMap.get(saOrderExt.getPkMember());
if (targetMemberRangeExt == null || ECategory.NORMAL.getValue() != targetMemberRangeExt.getCategory() || EAccountStatus.STOP_INCOME.getValue() == targetMemberRangeExt.getAccountStatus() ||
EAssessStatus.EXAMINE_PASS.getValue() != targetMemberRangeExt.getAssessStatus()) {
return null;
}
// 验证是否有奖金
if (validatePkBonusItems(bonusConfigDTO, targetMemberRangeExt.getPkSettleCountry(), EBonusItems.STORE_INCOME.getValue())) {
return null;
}
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, targetMemberRangeExt.getPkMember(),
targetMemberRangeExt.getIncomeStatus(), targetMemberRangeExt.getPkSettleCountry(), targetMemberRangeExt.getPkRate());
CuMemberBonusDetail cuMemberBonusDetail = getCuMemberBonusDetail(saOrderExt, targetMemberRangeExt.getIncomeStatus(), targetMemberRangeExt.getPkSettleCountry(), cuMemberBonus);
BigDecimal serviceRadio = BigDecimal.valueOf(5);
// 计算比例
cuMemberBonusDetail.setCalValue(serviceRadio);
cuMemberBonusDetail.setPkBonusItems(getPkBonusItems(bonusConfigDTO, targetMemberRangeExt.getPkSettleCountry(), EBonusItems.STORE_INCOME.getValue()));
cuMemberBonusDetail.setPretaxIncome(ComputeUtil.computeBonusMultiply(cuMemberBonusDetail.getCalAchieve(), serviceRadio));
// 收益占比
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusDetail, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
rangeServiceRemark(saOrderExt, cuMemberBonusDetail, sourceMemberRangeExt, targetMemberRangeExt);
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusDetail.getIncomeStatus()) {
cuMemberBonus.setStoreIncome(ComputeUtil.computeAdd(cuMemberBonus.getStoreIncome(), cuMemberBonusDetail.getPretaxIncome()));
setCloudTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusDetail);
}
return cuMemberBonusDetail;
}
/**
* @param settleDateStr 结算日期
*/
@ -1831,9 +1412,11 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
// 月订单列表
List<SaOrder> totalMonthOrderList = new ArrayList<>();
// 级差收益月度级差复购级差
// 级差收益福利级差复购级差
List<CuMemberBonusRange> memberBonusRangeList = new ArrayList<>();
// 分红收益
// 培训津贴
List<CuMemberBonusCoach> memberBonusCoachList = new ArrayList<>();
// 月度分红收益
List<CuMemberBonusDetail> memberBonusDetailList = new ArrayList<>();
// 当前年月
String month = DateUtils.getMonth(settleDateStr);
@ -1891,6 +1474,8 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
List<SaOrder> saOrders = orderMap.get(systemType);
// 月所有订单业绩注册升级复购
BigDecimal totalMonthConsumePv = BigDecimal.ZERO;
// 订单对应map
Map<Long, SaOrder> saOrderMap = new HashMap<>();
// new 两个月奖
// 月度级差注册升级订单从自己开始往上算最多拨出10代紧缩
@ -1898,6 +1483,8 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
for (SaOrder saOrder : saOrders) {
// 累计订单业绩
totalMonthConsumePv = ComputeUtil.computeAdd(totalMonthConsumePv, saOrder.getOrderAchieve());
// 封装订单map
saOrderMap.put(saOrder.getPkId(), saOrder);
if (EOrderType.RETAIL_REGISTER.getValue() == saOrder.getOrderType()
|| EOrderType.RETAIL_UPGRADE.getValue() == saOrder.getOrderType()) {
@ -1925,7 +1512,8 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
}
// 当前会员奖衔级差比例
BigDecimal targetRangeRatio = targetMemberRangeExt.getRangeRatio();
if ((targetMemberRangeExt.getPkMember().equals(saOrder.getPkMember()) && ComputeUtil.compareValue(rangeRatio))
if ((targetMemberRangeExt.getPkMember().equals(saOrder.getPkMember())
&& ComputeUtil.compareValue(rangeRatio))
|| ComputeUtil.compareGreaterThan(targetRangeRatio, rangeRatio)) {
// 第一代是自己 并且 级差比例大于0 或者 级差比例大于前一代会员的奖衔级差比例
// 计算极差
@ -2013,6 +1601,87 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
}
}
// 培育津贴
if (CollectionUtil.isNotEmpty(memberBonusRangeList)) {
for (CuMemberBonusRange cuMemberBonusRange : memberBonusRangeList) {
// 第一代开始
int i = MagicNumberConstants.BLOOD_GENERATION_START;
// 推荐人
Long pkMember = memberRangeExtMap.get(cuMemberBonusRange.getPkBonus()).getPkParent();
// 提供奖金会员
CuMemberRetailRangeExt sourceMemberRetailExt = memberRangeExtMap.get(cuMemberBonusRange.getPkBonus());
// 级差所产生的培育津贴列表
List<CuMemberBonusCoach> rangeBonusCoachList = new ArrayList<>();
// 最多发十代
while (i <= MagicNumberConstants.BLOOD_GENERATION_END) {
// 当前需要拿奖金的会员
CuMemberRetailRangeExt targetMemberRetailExt = memberRangeExtMap.get(pkMember);
if (null == targetMemberRetailExt) {
break;
}
pkMember = targetMemberRetailExt.getPkParent();
if (EAccountStatus.STOP_INCOME.getValue() == targetMemberRetailExt.getAccountStatus()
|| ECategory.NORMAL.getValue() != targetMemberRetailExt.getCategory()
|| targetMemberRetailExt.getGradeValue() != EGrade.S_VIP.getValue()
|| targetMemberRetailExt.getEnableStatus() == EYesNo.NO.getIntValue()
|| EIncomeStatus.STOP_INCOME.getValue() == targetMemberRetailExt.getIncomeStatus()) {
// 停算收益非正常会员未激活等级不为合伙人停止收益直接跳过
continue;
}
if (validatePkBonusItems(bonusConfigDTO, targetMemberRetailExt.getPkSettleCountry(), EBonusItems.RETAIL_COACHING_INCOME.getValue())) {
// 校验当前国家是否有该奖项
continue;
}
// 奖金订单
SaOrder saOrder = saOrderMap.get(cuMemberBonusRange.getPkOrder());
if (null == saOrder) {
log.warn("培育津贴因订单为空跳过, cuMemberBonusRange: {}", cuMemberBonusRange);
continue;
}
// 获取奖衔能拿多少代领导奖的奖衔值
Integer awardsValue = targetMemberRetailExt.getCoachAlgebra();
// 判断是否有奖金
if (awardsValue >= i) {
// 培育津贴比例
BigDecimal awardCalRadio = targetMemberRetailExt.getCoachRatio();
// 生成培育津贴明细
CuMemberBonusCoach cuMemberBonusCoach = getCuMemberBonusCoach(bonusConfigDTO, cuMemberBonusRange, i, targetMemberRetailExt, awardCalRadio);
// 获取会员奖金数据
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, targetMemberRetailExt.getPkMember(),
targetMemberRetailExt.getIncomeStatus(), targetMemberRetailExt.getPkSettleCountry(), targetMemberRetailExt.getPkRate());
// 收益占比
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusCoach, saOrder.getOrderAmount(), BigDecimal.ONE);
retailCoachRemark(saOrder, cuMemberBonusCoach, sourceMemberRetailExt, targetMemberRetailExt);
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusCoach.getIncomeStatus()) {
cuMemberBonus.setCoachIncome(ComputeUtil.computeAdd(cuMemberBonus.getCoachIncome(), cuMemberBonusCoach.getPretaxIncome()));
setRetailTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusCoach);
}
rangeBonusCoachList.add(cuMemberBonusCoach);
// 这一代领导奖计算完计算代数加1
i++;
}
}
if (rangeBonusCoachList.size() > 0) {
// 共多少代
--i;
for (CuMemberBonusCoach cuMemberBonusCoach : rangeBonusCoachList) {
cuMemberBonusCoach.setCoachGeneration(i);
cuMemberBonusCoach.setRemark(cuMemberBonusCoach.getRemark().replace("#", cuMemberBonusCoach.getCoachGeneration().toString()));
memberBonusCoachList.add(cuMemberBonusCoach);
}
}
}
}
// 查询 v5 等级 分红奖衔 >= S4
List<CuMemberRetailRangeExt> memberRetailRangeExtList = iCuMemberRetailRangeService.batchQueryMemberRetailRangeByAwards(rangeTableName);
if (memberRetailRangeExtList.size() > 0) {
@ -2141,6 +1810,13 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
bonusRecordDetailVO.getCuMemberBonusDetailList().addAll(memberBonusDetailList);
}
}
if (memberBonusCoachList.size() > 0) {
if (bonusRecordDetailVO.getCuMemberBonusCoachList() == null) {
bonusRecordDetailVO.setCuMemberBonusCoachList(memberBonusCoachList);
} else {
bonusRecordDetailVO.getCuMemberBonusCoachList().addAll(memberBonusCoachList);
}
}
if (memberBonusRangeList.size() > 0) {
if (bonusRecordDetailVO.getCuMemberBonusRangeList() == null) {
bonusRecordDetailVO.setCuMemberBonusRangeList(memberBonusRangeList);
@ -2183,46 +1859,25 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
return cuMemberBonusDetail;
}
CuMemberBonusPush getCuMemberBonusPush(SaOrderExt saOrderExt, CuMemberRangeExt cuMemberRangeExt, CuMemberBonus cuMemberBonus, Integer pkBonusItems) {
CuMemberBonusPush cuMemberBonusPush = CuMemberBonusPush.builder()
.pkOrder(saOrderExt.getPkId())
.pkBonus(cuMemberBonus.getPkId())
.pkBonusItems(pkBonusItems)
// 正常还是烧伤
.incomeStatus(cuMemberRangeExt.getIncomeStatus())
.calType(ECalType.RATIO.getValue())
.pretaxIncome(BigDecimal.ZERO)
.incomeTax(BigDecimal.ZERO)
.realIncome(BigDecimal.ZERO)
.incomeRatio(BigDecimal.ZERO)
.incomeDialRatio(BigDecimal.ZERO)
.orderDialRatio(BigDecimal.ZERO)
.round(-1)
.second(-1)
.build();
cuMemberBonusPush.setPkCountry(cuMemberRangeExt.getPkSettleCountry());
cuMemberBonusPush.setPkCreator(MagicNumberConstants.PK_ADMIN);
return cuMemberBonusPush;
}
protected CuMemberBonusCoach getCuMemberBonusCoach(BonusConfigDTO bonusConfigDTO, SaOrderExt saOrderExt,
int i, CuMemberRangeExt targetMemberRangeExt) {
protected CuMemberBonusCoach getCuMemberBonusCoach(BonusConfigDTO bonusConfigDTO, CuMemberBonusRange cuMemberBonusRange,
int i, CuMemberRetailRangeExt targetMemberRangeExt, BigDecimal awardCalRadio) {
CuMemberBonusCoach cuMemberBonusCoach = CuMemberBonusCoach.builder()
.pkBonus(targetMemberRangeExt.getPkMember())
.pkOrder(saOrderExt.getPkId())
.pkBonusItems(getPkBonusItems(bonusConfigDTO, targetMemberRangeExt.getPkSettleCountry(), EBonusItems.CLOUD_AGENT_DIRECT_PUSH.getValue()))
.calType(ECalType.RATIO.getValue())
.pkOrder(cuMemberBonusRange.getPkOrder())
.pkBonusItems(getPkBonusItems(bonusConfigDTO, targetMemberRangeExt.getPkSettleCountry(), EBonusItems.RETAIL_COACHING_INCOME.getValue()))
.incomeStatus(targetMemberRangeExt.getIncomeStatus())
.calAchieve(saOrderExt.getOrderAchieve())
.calType(ECalType.RATIO.getValue())
.calAchieve(cuMemberBonusRange.getCalAchieve())
.currentGeneration(i)
// 计算比例
.calValue(BigDecimal.ZERO)
.calValue(awardCalRadio)
.incomeTax(BigDecimal.ZERO)
.realIncome(BigDecimal.ZERO)
.incomeRatio(BigDecimal.ZERO)
.incomeDialRatio(BigDecimal.ZERO)
.orderDialRatio(BigDecimal.ZERO)
.pretaxIncome(BigDecimal.ZERO)
.pretaxIncome(ComputeUtil.computeBonusMultiply(cuMemberBonusRange.getPretaxIncome(), awardCalRadio))
.coachNoCapping(BigDecimal.ZERO)
.coachCapping(BigDecimal.ZERO)
.coachNormalHalf(BigDecimal.ZERO)
@ -2236,10 +1891,10 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
private CuMemberBonusRange getCuMemberRetailBonusRange(SaOrder saOrderExt, CuMemberRetailRangeExt targetMemberRangeExt,
CuMemberBonus cuMemberBonus, Integer pkBonusItems) {
CuMemberBonusRange cuMemberBonusRange = CuMemberBonusRange.builder()
.pkBonus(cuMemberBonus.getPkId())
.incomeStatus(targetMemberRangeExt.getIncomeStatus())
.pkOrder(saOrderExt.getPkId())
.pkBonusItems(pkBonusItems)
.pkBonus(cuMemberBonus.getPkId())
.calAchieve(saOrderExt.getOrderAchieve())
.calType(ECalType.VALUE.getValue())
.calValue(BigDecimal.ZERO)
@ -2252,25 +1907,6 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
return cuMemberBonusRange;
}
private CuMemberAwards getCuMemberAwards(CuMemberRangeExt sourceRangeExt, Integer period, SaOrderExt saOrderExt, BdRangeAwards bdRangeAwards) {
CuMemberAwards cuMemberAwards = CuMemberAwards.builder()
.pkMember(sourceRangeExt.getPkMember())
.period(period)
.upType(EUpgradeType.AUTO_UPGRADE.getValue())
// 原等级
.oldLevel(sourceRangeExt.getPkRangeAwards())
.newLevel(bdRangeAwards.getPkId())
// 默认不免考
.purchaseStatus(EYesNo.NO.getIntValue())
.pkOrder(saOrderExt.getPkId())
.systemType(1)
.build();
cuMemberAwards.setPkCreator(MagicNumberConstants.PK_ADMIN);
cuMemberAwards.setPkCountry(saOrderExt.getPkCountry());
cuMemberAwards.setCreationTime(saOrderExt.getPayTime());
return cuMemberAwards;
}
private CuMemberAwards getCuMemberRetailAwards(CuMemberRetailRangeExt sourceRangeExt, Integer period, SaOrderExt saOrderExt,
BdAwards bdRangeAwards, Integer awardType, Integer oldLevel) {
CuMemberAwards cuMemberAwards = CuMemberAwards.builder()

View File

@ -1,116 +0,0 @@
package com.hzs.bonus.bonus.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.hzs.activity.base.IActivityServiceApi;
import com.hzs.common.core.domain.R;
import com.hzs.common.core.enums.EBonusIncomeStatus;
import com.hzs.common.core.enums.EBonusItems;
import com.hzs.common.core.enums.ECalType;
import com.hzs.common.core.utils.ComputeUtil;
import com.hzs.common.domain.activity.recommend.AcRepurCouponsRuleConfig;
import com.hzs.common.domain.bonus.BdBonusDeduct;
import com.hzs.common.domain.member.bonus.CuMemberBonus;
import com.hzs.common.domain.member.bonus.CuMemberBonusDetail;
import com.hzs.common.domain.member.ext.CuMemberSettleExt;
import com.hzs.common.domain.sale.ext.SaOrderExt;
import com.hzs.system.config.dto.BonusConfigDTO;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Component;
import java.util.*;
/**
* @description: 用于计算复购券收益复购券均分收益
* @author: sui q
* @time: 2023/4/28 16:12
* @classname: BonusSettleRepCouponsHandle
* @package_name: com.hzs.member.bonus.service.impl
* version 1.0.0
*/
@Component
public class BonusSettleRepCouponsHandle extends BonusSettleHandle {
@DubboReference
private IActivityServiceApi activityServiceApi;
/*
* @description: 计算复购券收益
* @author: sui q
* @date: 2023/4/28 16:11
* @param: null null
**/
List<CuMemberBonusDetail> calculateRepurchaseCoupons(Date settleDate, List<SaOrderExt> firPurchaseOrderList, Integer period, BonusConfigDTO bonusConfigDTO, Map<Long, CuMemberBonus> cuMemberBonusMap, Map<Long, CuMemberSettleExt> cuMemberSettleExtMap) {
// 查询复购券发放规则
R<List<AcRepurCouponsRuleConfig>> acRepurchaseCouponsRule = activityServiceApi.queryAcRepurchaseCouponsRule(settleDate);
List<CuMemberBonusDetail> cuMemberBonusDetailList = new ArrayList<>();
if (acRepurchaseCouponsRule.isSuccess()) {
List<AcRepurCouponsRuleConfig> repurCouponsRuleConfigList = acRepurchaseCouponsRule.getData();
if (CollectionUtil.isNotEmpty(repurCouponsRuleConfigList)) {
Map<String, Map<Long, List<AcRepurCouponsRuleConfig>>> couponsMap = new HashMap<>();
for (AcRepurCouponsRuleConfig acRepurCouponsRuleConfig : repurCouponsRuleConfigList) {
String key = acRepurCouponsRuleConfig.getPkCountry().toString() + "_" + acRepurCouponsRuleConfig.getOrderType();
if (couponsMap.containsKey(key)) {
Map<Long, List<AcRepurCouponsRuleConfig>> couponsListMap = couponsMap.get(key);
if (couponsListMap.containsKey(acRepurCouponsRuleConfig.getPkBaseId())) {
couponsListMap.get(acRepurCouponsRuleConfig.getPkBaseId()).add(acRepurCouponsRuleConfig);
} else {
List<AcRepurCouponsRuleConfig> acRepurCouponsRuleConfigList = new ArrayList<>();
acRepurCouponsRuleConfigList.add(acRepurCouponsRuleConfig);
couponsListMap.put(acRepurCouponsRuleConfig.getPkBaseId(), acRepurCouponsRuleConfigList);
}
} else {
Map<Long, List<AcRepurCouponsRuleConfig>> couponsListMap = new HashMap<>();
List<AcRepurCouponsRuleConfig> acRepurCouponsRuleConfigList = new ArrayList<>();
acRepurCouponsRuleConfigList.add(acRepurCouponsRuleConfig);
couponsListMap.put(acRepurCouponsRuleConfig.getPkBaseId(), acRepurCouponsRuleConfigList);
couponsMap.put(key, couponsListMap);
}
}
// 查询订单
for (SaOrderExt saOrderExt : firPurchaseOrderList) {
CuMemberSettleExt sourceMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkMember());
if (sourceMemberSettleExt == null) {
continue;
}
String key = saOrderExt.getPkCountry().toString() + "_" + saOrderExt.getOrderType();
if (couponsMap.containsKey(key)) {
// 计算复购券收益
Map<Long, List<AcRepurCouponsRuleConfig>> couponsListMap = couponsMap.get(key);
for (Long pkBaseId : couponsListMap.keySet()) {
for (AcRepurCouponsRuleConfig acRepurCouponsRuleConfig : couponsListMap.get(pkBaseId)) {
if (ComputeUtil.compareValue(saOrderExt.getOrderAchieve(), acRepurCouponsRuleConfig.getOrderAchieve())) {
// 获得奖金
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkReference());
if (targetMemberSettleExt == null || validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.REPURCHASE_COUPONS.getValue())) {
continue;
}
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrderExt, targetMemberSettleExt);
CuMemberBonusDetail cuMemberBonusDetail = getCuMemberBonusDetail(saOrderExt, targetMemberSettleExt, cuMemberBonus);
// 计算类型
cuMemberBonusDetail.setCalType(acRepurCouponsRuleConfig.getRatioType());
// 计算值
cuMemberBonusDetail.setCalValue(acRepurCouponsRuleConfig.getRatioValue());
cuMemberBonusDetail.setPkBonusItems(getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.REPURCHASE_COUPONS.getValue()));
if (ECalType.RATIO.getValue() == cuMemberBonusDetail.getCalType()) {
cuMemberBonusDetail.setPretaxIncome(ComputeUtil.computeBonusMultiply(saOrderExt.getOrderAchieve(), acRepurCouponsRuleConfig.getRatioValue()));
} else {
cuMemberBonusDetail.setPretaxIncome(acRepurCouponsRuleConfig.getRatioValue());
}
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusDetail, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusDetail.getIncomeStatus()) {
cuMemberBonus.setRepurCoupon(ComputeUtil.computeAdd(cuMemberBonus.getRepurCoupon(), cuMemberBonusDetail.getPretaxIncome()));
setRepurchaseCouponTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusDetail);
}
repurchaseCouponsRemark(saOrderExt, cuMemberBonusDetail, sourceMemberSettleExt, targetMemberSettleExt);
cuMemberBonusDetailList.add(cuMemberBonusDetail);
break;
}
}
}
}
}
}
}
return cuMemberBonusDetailList;
}
}

View File

@ -129,12 +129,12 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
// TODO new 每月1号需要计算4个月奖
if (EEnv.TEST.getValue().equals(BdConfig.getEnv())) {
// 测试环境每天都执行
// 计算新零售团队区域福利福利分红奖金
// 计算新零售团队福利福利分红奖金
bonusSettleRangeHandle.calculateRetailShareBonus(settleDate, bonusConfigDTO, period, recordDetailVO, cuMemberBonusMap);
} else {
// 非测试环境
if (settleDate.endsWith("01")) {
// 计算新零售团队区域福利福利分红奖金
// 计算新零售团队福利福利分红奖金
bonusSettleRangeHandle.calculateRetailShareBonus(settleDate, bonusConfigDTO, period, recordDetailVO, cuMemberBonusMap);
}
}

View File

@ -18,27 +18,27 @@ public class BonusRecordDetailVO implements Serializable {
private Long pkMember;
/**
* 推荐奖
*
*/
private List<CuMemberBonusPush> cuMemberBonusPushList;
/**
* 量奖复购量奖
*
*/
private List<CuMemberBonusExpand> cuMemberBonusExpandList;
/**
* 辅导奖
* 新零售 - 培育津贴
*/
private List<CuMemberBonusCoach> cuMemberBonusCoachList;
/**
* 服务奖 嗨粉推荐奖金 创客空间直推 创客空间分享
* 新零售 - 区域分红月度分红
*/
private List<CuMemberBonusDetail> cuMemberBonusDetailList;
/**
* 复购极
* 新零售 - 直推收益平级收益福利级差复购级
*/
private List<CuMemberBonusRange> cuMemberBonusRangeList;
}

View File

@ -2,69 +2,18 @@ package com.hzs.bonus.detail.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hzs.common.domain.member.detail.CuMemberAssess;
import com.hzs.common.domain.member.ext.CuMemberAssessExt;
import com.hzs.bonus.detail.vo.CuMemberAssessVO;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
/**
* <p>
* 会员信息-会员考核记录 Mapper 接口
* </p>
*
* @author hzs
* @since 2022-08-31
*/
public interface CuMemberAssessMapper extends BaseMapper<CuMemberAssess> {
/**
* 创建每年的会员考核表
*
* @param tableName 表名
* @return: void
* @Author: sui q
* @Date: 2022/11/7 14:10
*/
void createCuMemberAssessTable(String tableName);
/**
* 创建会员网体推荐人索引
*
* @param tableName 日期
* @return: void
* @Author: sui q
* @Date: 2022/10/31 13:32
*/
void createCuMemberTableUniqueIndex(String tableName);
/**
* 创建表注释
*
* @param tableName 表名
* @return: void
* @Author: sui q
* @Date: 2022/11/9 16:25
*/
void createCuMemberAssessTableComment(String tableName);
/**
* 查询表中是否存在数据
*
* @param tableName 表名
* @param period 期间
* @return: Integer
* @Author: sui q
* @Date: 2022/11/7 14:31
*/
Integer queryCuMemberAssessCount(@Param("tableName") String tableName, @Param("period") Integer period);
/*
* @description: 清空表数据
* @author: sui q
* @date: 2023/5/25 10:45
* @param: null null
* 清空表数据
**/
void deleteCuMemberAssessByPeriod(@Param("tableName") String tableName, @Param("period") Integer period);
@ -75,9 +24,6 @@ public interface CuMemberAssessMapper extends BaseMapper<CuMemberAssess> {
* @param sourceTableName 来源表用哪个表进行更新
* @param period 期间
* @param month 考核月份
* @return: Integer
* @Author: sui q
* @Date: 2022/11/7 14:33
*/
Integer insertRepCuMemberAssess(@Param("tableName") String tableName, @Param("sourceTableName") String sourceTableName,
@Param("period") Integer period, @Param("month") String month);
@ -89,22 +35,9 @@ public interface CuMemberAssessMapper extends BaseMapper<CuMemberAssess> {
* @param sourceTableName 来源表用哪个表进行更新
* @param period 期间
* @param month 考核月份
* @return: Integer
* @Author: sui q
* @Date: 2022/11/7 14:33
*/
Integer insertRepCuMemberRangeAssess(@Param("tableName") String tableName, @Param("sourceTableName") String sourceTableName,
@Param("period") Integer period, @Param("month") String month);
/**
* 将撤单的数据插入临时表中通过临时表进行批量更新
*
* @param cuMemberAssessesList 考核数据
* @return: Integer
* @Author: sui q
* @Date: 2022/11/9 14:30
*/
Integer insertTmpCuMemberAssess(@Param("cuMemberAssessesList") List<CuMemberAssessExt> cuMemberAssessesList);
@Param("period") Integer period, @Param("month") String month);
/**
* 更新会员复购考核业绩
@ -114,9 +47,6 @@ public interface CuMemberAssessMapper extends BaseMapper<CuMemberAssess> {
* @param sourcePeriod 来源结算期
* @param period 结算结算期间
* @param assessType 考核类型 0=复购考核 1=分红考核
* @return: Integer
* @Author: sui q
* @Date: 2022/11/7 17:55
*/
Integer updateAssessPeriodBeginByBeforeMonth(@Param("beforeTableName") String beforeTableName, @Param("tableName") String tableName,
@Param("sourcePeriod") Integer sourcePeriod,
@ -131,9 +61,6 @@ public interface CuMemberAssessMapper extends BaseMapper<CuMemberAssess> {
* @param startDate 开始时间
* @param endDate 结束时间
* @param orderTypeList 订单类型
* @return: Integer
* @Author: sui q
* @Date: 2022/11/8 9:21
*/
Integer updateAssessPeriodAddBySaOrder(@Param("tableName") String tableName, @Param("period") Integer period,
@Param("assessType") Integer assessType, @Param("startDate") Date startDate,
@ -146,9 +73,6 @@ public interface CuMemberAssessMapper extends BaseMapper<CuMemberAssess> {
*
* @param tableName 表名
* @param period 期间
* @return: Integer
* @Author: sui q
* @Date: 2022/11/8 10:32
*/
Integer updateAssessPeriodExemptBalanceByUsed(@Param("tableName") String tableName, @Param("period") Integer period);
@ -160,9 +84,6 @@ public interface CuMemberAssessMapper extends BaseMapper<CuMemberAssess> {
* @param period 期间
* @param startDate 开始日期
* @param endDate 结束日期
* @return: Integer
* @Author: sui q
* @Date: 2022/11/8 19:17
*/
Integer updateAssessCuMemberToRepExempt(@Param("tableName") String tableName, @Param("settleTableName") String settleTableName,
@Param("period") Integer period, @Param("startDate") Date startDate, @Param("endDate") Date endDate,
@ -174,9 +95,6 @@ public interface CuMemberAssessMapper extends BaseMapper<CuMemberAssess> {
* @param settleTableName 每日结算表
* @param startDate 开始日期
* @param endDate 结束日期
* @return: Integer
* @Author: sui q
* @Date: 2022/11/8 19:17
*/
Integer updateCuMemberSettleToRepExempt(@Param("settleTableName") String settleTableName, @Param("startDate") Date startDate,
@Param("endDate") Date endDate, @Param("startPeriod") Integer startPeriod,
@ -186,97 +104,9 @@ public interface CuMemberAssessMapper extends BaseMapper<CuMemberAssess> {
* 更新考核表更新复购考核状态为免考首次注册首次晋升的会员更新结算网体
*
* @param settleTableName 每日结算表
* @return: Integer
* @Author: sui q
* @Date: 2022/11/8 19:17
*/
Integer updateAllCuMemberSettleToRepExempt(@Param("settleTableName") String settleTableName);
/**
* 更新考核表更新分红考核状态为免考根据上一期的考核数据
*
* @param tableName 需要更新的会员考核表名
* @param settleTableName 每日结算表
* @param period 期间
* @return: Integer
* @Author: sui q
* @Date: 2022/11/8 19:17
*/
Integer updateAssessCuMemberToShareExempt(@Param("tableName") String tableName, @Param("settleTableName") String settleTableName,
@Param("period") Integer period);
/**
* 根据临时表中的订单撤单数据进行回写数据
*
* @param tableName 表名
* @return: Integer
* @Author: sui q
* @Date: 2022/11/9 15:00
*/
Integer updateAssessPeriodByRevokeOrder(@Param("tableName") String tableName);
/**
* 查询出考核表中某一期免考的会员
*
* @param tableName 表名
* @param period 期间
* @return: Integer
* @Author: sui q
* @Date: 2022/11/9 9:09
*/
List<CuMemberAssess> queryExemptAssessCuMember(@Param("tableName") String tableName, @Param("period") Integer period);
/**
* 查询期间满足会员考核的数据需要回填明细
*
* @param tableName 表名
* @param period 会员期间
* @return: List<CuMemberAssess>
* @Author: sui q
* @Date: 2022/11/8 10:51
*/
List<CuMemberAssess> queryEnoughCuMemberAssess(@Param("tableName") String tableName, @Param("period") Integer period);
/**
* 发生过撤单的数据需要变更考核月新增进行重新考核撤单可以存在撤奖衔需要查询目标金额
*
* @param tableName 表名
* @param settleTableName 每日结算表
* @param period 期间
* @param saOrderList 根据撤单数据过来的订单
* @return: List<CuMemberAssess>
* @Author: sui q
* @Date: 2022/11/9 11:24
*/
List<CuMemberAssessExt> queryAssessPeriodByRevokeOrder(@Param("tableName") String tableName, @Param("settleTableName") String settleTableName,
@Param("period") Integer period, @Param("saOrderList") List<?> saOrderList);
/**
* 根据会员主键查询考核结果只查询出来考核通过的会员
*
* @param tableName 表名
* @param period 期间
* @param assessType 考核类型
* @param cuMemberSettleExtList 会员列表
* @return: List<CuMemberAssess>
* @Author: sui q
* @Date: 2022/11/16 19:13
*/
List<CuMemberAssess> queryCuMemberAssessByMember(@Param("tableName") String tableName, @Param("period") Integer period,
@Param("assessType") Integer assessType,
@Param("cuMemberSettleExtList") List<?> cuMemberSettleExtList);
/**
* 查询会员分红考核结果只查询出免考或者考核通过的用于分红
*
* @param tableName 表名
* @param period 期间
* @return: List<CuMemberAssess>
* @Author: sui q
* @Date: 2022/11/16 19:13
*/
List<CuMemberAssess> queryCuMemberShareAssess(@Param("tableName") String tableName, @Param("period") Integer period);
/**
* 更新考核通过的考核表
* 更新会员考核表根据使用值的更新期末结余更新结余跟其他的不一样
@ -284,101 +114,12 @@ public interface CuMemberAssessMapper extends BaseMapper<CuMemberAssess> {
*
* @param tableName 表名
* @param period 期间
* @return: Integer
* @Author: sui q
* @Date: 2022/11/8 10:32
*/
Integer updateAssessPeriodCheckBalanceByUsed(@Param("tableName") String tableName, @Param("period") Integer period);
/**
* 更新考核通过的考核表,根据临时表
* 更新会员考核表根据使用值的更新期末结余更新结余跟其他的不一样
* 只更新一张表复购跟分红可以一起更新复购或分红只需要更新一次
*
* @param tableName 表名
* @param period 期间
* @param newCuMemberSettleExtList 需要更新的会员
* @return: Integer
* @Author: sui q
* @Date: 2022/11/8 10:32
*/
Integer updateAssessPeriodCheckBalanceByTmp(@Param("tableName") String tableName, @Param("period") Integer period, @Param("cuMemberList") List<?> newCuMemberSettleExtList);
/**
* 初始化分红考核表数据将结算表数据插入到考核表中
*
* @param tableName 更新表名
* @param sourceTableName 来源表用哪个表进行更新
* @param period 期间
* @param month 考核月份
* @return: Integer
* @Author: sui q
* @Date: 2022/11/7 14:33
*/
Integer insertShareCuMemberAssess(@Param("tableName") String tableName, @Param("sourceTableName") String sourceTableName,
@Param("period") Integer period, @Param("month") String month);
/**
* 会员-考核明细列表
*
* @author: zhang jing
* @date: 2023/1/23 10:20
* @param: [cuMemberAssessVO] 查询条件
* @return: java.util.List<com.hzs.member.detail.vo.CuMemberAssessVO>
**/
List<CuMemberAssessVO> selectAssessList(@Param("tableName") String tableName,
@Param("pkMember") Long pkMember,
@Param("pkCountry") Integer pkCountry,
@Param("assessStatus") Integer assessStatus,
@Param("assessType") Integer assessType,
@Param("changeType") Integer changeType,
@Param("startDate") Date startDate,
@Param("endDate") Date endDate,
@Param("orderTypeList") List<Integer> orderTypeList
);
/**
* @description: 查询会员月度考核
* @author: zhang jing
* @date: 2023/3/14 14:44
* @param: [tableName, cuMemberAssessVO]
* @return: java.util.List<com.hzs.member.detail.vo.CuMemberAssessVO>
**/
List<CuMemberAssessVO> getMemberAssessMonthList(@Param("tableName") String tableName,
@Param("pkMember") Long pkMember,
@Param("assessType") Integer assessType,
@Param("pkCountry") Integer pkCountry,
@Param("period") Integer period
);
/**
* @description: 查询会员订单考核积分
* @author: zhang jing
* @date: 2023/3/14 17:52
* @param: [cuMemberAssessVO]
* @return: java.util.List<com.hzs.member.detail.vo.CuMemberAssessVO>
**/
CuMemberAssessVO getOrderAssessList(CuMemberAssessVO cuMemberAssessVO);
/**
* @description: 根据考核类型查询会员订单信息
* @author: zhang jing
* @date: 2023/4/23 19:43
* @param: [cuMemberAssessVO]
* @return: java.util.List<com.hzs.member.detail.vo.CuMemberAssessVO>
**/
List<CuMemberAssessVO> getOrderByAssessList(CuMemberAssessVO cuMemberAssessVO);
/*
* @description: 查询满足分红考核的人数达标人数
* @author: sui q
* @date: 2023/7/3 16:51
* @param: null null
* 查询满足分红考核的人数达标人数
**/
List<CuMemberAssess> queryCuMemberAssTotal(@Param("settleTable") String settleTable, @Param("period") Integer period,
@Param("pkCountry") Integer pkCountry);

View File

@ -2,11 +2,9 @@ package com.hzs.bonus.detail.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hzs.common.domain.member.detail.CuMemberAssess;
import com.hzs.common.domain.member.ext.CuMemberSettleExt;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* 会员信息-会员考核记录 服务类
@ -25,16 +23,6 @@ public interface ICuMemberAssessService extends IService<CuMemberAssess> {
*/
void retryCalculationAssess(Date currentDate, Boolean flag);
/**
* 根据会员主键查询考核结果
*
* @param assessTableName 考核表
* @param period 期间
* @param assessType 考核类型
* @param cuMemberSettleExtList 会员列表
*/
Map<Long, CuMemberAssess> queryCuMemberAssessByMember(String assessTableName, Integer period, Integer assessType, List<CuMemberSettleExt> cuMemberSettleExtList);
/*
* 查询满足分红考核的人数达标人数
**/

View File

@ -2,16 +2,13 @@ package com.hzs.bonus.detail.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hzs.bonus.achieve.service.ICuMemberSettlePeriodService;
import com.hzs.bonus.achieve.service.impl.CuMemberBonusSettle;
import com.hzs.bonus.detail.service.ICuMemberAssessDetailService;
import com.hzs.bonus.detail.service.ICuMemberAssessService;
import com.hzs.common.core.constant.TableNameConstants;
import com.hzs.common.core.enums.*;
import com.hzs.common.core.utils.ComputeUtil;
import com.hzs.common.core.utils.DateUtils;
import com.hzs.common.domain.member.achieve.CuMemberSettlePeriod;
import com.hzs.common.domain.member.detail.CuMemberAssess;
import com.hzs.common.domain.member.ext.CuMemberSettleExt;
import com.hzs.bonus.detail.mapper.CuMemberAssessMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -26,22 +23,10 @@ import java.util.*;
@Service
public class CuMemberAssessServiceImpl extends ServiceImpl<CuMemberAssessMapper, CuMemberAssess> implements ICuMemberAssessService {
private ICuMemberSettlePeriodService cuMemberSettlePeriodService;
private ICuMemberAssessDetailService cuMemberAssessDetailService;
@Autowired
private CuMemberBonusSettle cuMemberBonusSettle;
private ICuMemberSettlePeriodService iCuMemberSettlePeriodService;
@Autowired
public void setCuMemberAssessDetailService(ICuMemberAssessDetailService cuMemberAssessDetailService) {
this.cuMemberAssessDetailService = cuMemberAssessDetailService;
}
@Autowired
public void setCuMemberSettlePeriodService(ICuMemberSettlePeriodService cuMemberSettlePeriodService) {
this.cuMemberSettlePeriodService = cuMemberSettlePeriodService;
}
private ICuMemberAssessDetailService iCuMemberAssessDetailService;
/**
* 复购考核每月第一次考核调用此方法
@ -54,7 +39,7 @@ public class CuMemberAssessServiceImpl extends ServiceImpl<CuMemberAssessMapper,
// 考核日期不能跨越考核只能当月考核当月考核上月
if (DateUtils.currentDay(currentDate) == 1) {
String currentMonthFirstDate = DateUtils.currentMonthFirstDateStr(currentDate);
Integer currentPeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(currentMonthFirstDate).getPkId();
Integer currentPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(currentMonthFirstDate).getPkId();
String currentTableName = TableNameConstants.CU_MEMBER_ASSESS + DateUtils.getYear(currentMonthFirstDate);
// 清空数据 根据期数清空cu_member_assess cu_member_assess_detail表数据
initCurrentAssess(currentDate, currentTableName, currentPeriod);
@ -68,41 +53,27 @@ public class CuMemberAssessServiceImpl extends ServiceImpl<CuMemberAssessMapper,
baseMapper.updateAssessPeriodExemptBalanceByUsed(currentTableName, currentPeriod);
// 2 需要扣除通过的需要记录流水
// 记录流水新增或修改
cuMemberAssessDetailService.updateCuMemberAssessDetailByPeriod(currentTableName, currentPeriod);
iCuMemberAssessDetailService.updateCuMemberAssessDetailByPeriod(currentTableName, currentPeriod);
baseMapper.updateAssessPeriodCheckBalanceByUsed(currentTableName, currentPeriod);
}
}
@Override
public Map<Long, CuMemberAssess> queryCuMemberAssessByMember(String assessTableName, Integer period, Integer assessType, List<CuMemberSettleExt> cuMemberSettleExtList) {
List<CuMemberAssess> cuMemberAssessList = new ArrayList<>();
List<List<?>> listList = cuMemberBonusSettle.handleCutList(cuMemberSettleExtList);
listList.forEach(list ->
cuMemberAssessList.addAll(baseMapper.queryCuMemberAssessByMember(assessTableName, period, assessType, list)));
Map<Long, CuMemberAssess> cuMemberAssessMap = new HashMap<>(ComputeUtil.mapInitCapacity(cuMemberAssessList.size()));
cuMemberAssessList.forEach(cuMemberAssess -> cuMemberAssessMap.put(cuMemberAssess.getPkMember(), cuMemberAssess));
return cuMemberAssessMap;
}
/**
* 奖金计算时重算考核 复购考核分红考核,只重算免考的撤单的
*
* @param currentDate 考核时间
* @return: void
* @Author: sui q
* @Date: 2022/11/7 11:19
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void retryCalculationAssess(Date currentDate, Boolean flag) {
// String beforeDateStr = DateUtils.beforeDateStr(1, ChronoUnit.DAYS, DateUtils.YYYY_MM_DD, currentDate);
// Integer beforePeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(beforeDateStr).getPkId();
Integer currentPeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, currentDate)).getPkId();
// Integer beforePeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(beforeDateStr).getPkId();
Integer currentPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, currentDate)).getPkId();
// String beforeTableName = TableNameConstants.CU_MEMBER_SETTLE + beforePeriod;
//// a)更新结算表会员前2部分会员免考状态 满足首次注册的会员 满足满足首次升级的会员
// String tableName = TableNameConstants.CU_MEMBER_ASSESS + DateUtils.currentYear(currentDate);
// String currentMonthFirstDateStr = DateUtils.currentMonthFirstDateStr(currentDate);
// Integer monthFirstPeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(currentMonthFirstDateStr).getPkId();
// Integer monthFirstPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(currentMonthFirstDateStr).getPkId();
// // 结算日期月份的第一天
Date startDate = DateUtils.beforeMonthFirstDate(currentDate);
// // 结算日期后一天
@ -113,8 +84,8 @@ public class CuMemberAssessServiceImpl extends ServiceImpl<CuMemberAssessMapper,
//// d)前一天不免考后一天免考需要做重新考核直接变考核通过原来考核通过的不回退考核金额且考核状态为考核通过不是免考通过
// // 所有的海粉会员设置复购考核失败存在任意订单的海粉会员复购考核成功
// // 复购免考通过
Integer startPeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(DateUtils.parseDateToFormat(DateUtils.YYYY_MM_DD, startDate)).getPkId();
Integer endPeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(DateUtils.parseDateToFormat(DateUtils.YYYY_MM_DD, endDate)).getPkId();
Integer startPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(DateUtils.parseDateToFormat(DateUtils.YYYY_MM_DD, startDate)).getPkId();
Integer endPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(DateUtils.parseDateToFormat(DateUtils.YYYY_MM_DD, endDate)).getPkId();
// baseMapper.updateAssessCuMemberToRepExempt(tableName, settleTableName, monthFirstPeriod, startDate, endDate, startPeriod, endPeriod);
// // 奖金重算时更新结算表,flag=true代表奖金重算时重算考核需要更新网体 flag=false 代表重算考核
if (flag) {
@ -125,54 +96,17 @@ public class CuMemberAssessServiceImpl extends ServiceImpl<CuMemberAssessMapper,
baseMapper.updateCuMemberSettleToRepExempt(settleTableName, startDate, endDate, startPeriod, endPeriod);
}
}
// // 分红免考通过
// baseMapper.updateAssessCuMemberToShareExempt(tableName, settleTableName, monthFirstPeriod);
// // 查询出考核表免考的数据
// List<CuMemberAssess> oldCuMemberAssessList = baseMapper.queryExemptAssessCuMember(tableName, monthFirstPeriod);
//// b)查询前一天的会员免考记录查询结算日会员免考记录
// List<CuMemberSettleExt> oldCuMemberSettleExtList = cuMemberTreeService.queryExemptCuMemberSettle(beforeTableName);
//// c)比较会员2天免考发生的状态只需要计算变化的值去掉没有发生变化的值
// List<CuMemberSettleExt> newCuMemberSettleExtList = new ArrayList<>();
// if (oldCuMemberAssessList.size() > 0 && oldCuMemberSettleExtList != null && oldCuMemberSettleExtList.size() > 0) {
// Map<String, CuMemberAssess> cuMemberAssessMap = new HashMap<>(ComputeUtil.mapInitCapacity(oldCuMemberAssessList.size()));
// oldCuMemberAssessList.forEach(cuMemberAssess ->
// cuMemberAssessMap.put(cuMemberAssess.getPkMember().toString() + cuMemberAssess.getAssessType().toString(), cuMemberAssess));
// oldCuMemberSettleExtList.forEach(cuMemberSettleExt -> {
// String key = cuMemberSettleExt.getPkMember().toString() + cuMemberSettleExt.getAssessType().toString();
// if (!cuMemberAssessMap.containsKey(key)) {
// newCuMemberSettleExtList.add(cuMemberSettleExt);
// }
// });
// }
//// e)查询有没有撤单更新撤单的数据
// List<CuMemberAssessExt> cuMemberAssessExtList = handleCuMemberAssessByRevokeOrder(currentDate, newCuMemberSettleExtList, tableName, monthFirstPeriod, settleTableName);
// if (cuMemberAssessExtList.size() > 0) {
// // 将变更的插入临时表
// baseMapper.insertTmpCuMemberAssess(cuMemberAssessExtList);
// // 根据临时表里面的值进行更新会员表
// baseMapper.updateAssessPeriodByRevokeOrder(tableName);
// }
//// f)前一天免考后一天不免考需要做重新考核看上月是否可以考核通过
// if (newCuMemberSettleExtList.size() > 0) {
// // 处理考核数据
// // 记录流水新增或修改
// cuMemberAssessDetailService.insertCuMemberAssessDetailByPeriod(tableName, monthFirstPeriod, newCuMemberSettleExtList);
// List<List<?>> cutCuMemberSettleExtList = cuMemberBonusSettle.handleCutList(newCuMemberSettleExtList);
// cutCuMemberSettleExtList.forEach(assessExtList ->
// baseMapper.updateAssessPeriodCheckBalanceByTmp(tableName, monthFirstPeriod, assessExtList));
// }
// 网体数据修改修改复购免考类型 0=正常 1=手动免考 2=注册免考 3=晋升免考修改是否复购免考0=,1=
}
private void initCurrentAssess(Date currentDate, String currentTableName, Integer currentPeriod) {
// 获取上月最后一天
String beforeLastDate = DateUtils.beforeMonthLastDateStr(currentDate);
CuMemberSettlePeriod cuMemberSettlePeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(beforeLastDate);
CuMemberSettlePeriod cuMemberSettlePeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(beforeLastDate);
int period = cuMemberSettlePeriod.getPkId();
String sourceTable = TableNameConstants.CU_MEMBER_SETTLE + period;
String rangeSourceTable = TableNameConstants.CU_MEMBER_RANGE + period;
// 清空子表主表数据
cuMemberAssessDetailService.deleteCuMemberAssessDetailByPeriod(currentTableName, currentPeriod);
iCuMemberAssessDetailService.deleteCuMemberAssessDetailByPeriod(currentTableName, currentPeriod);
baseMapper.deleteCuMemberAssessByPeriod(currentTableName, currentPeriod);
// 初始化复购考核
String month = DateUtils.getMonth(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, currentDate));
@ -185,7 +119,7 @@ public class CuMemberAssessServiceImpl extends ServiceImpl<CuMemberAssessMapper,
// a)更新结算表会员前2部分会员免考状态 满足首次注册的会员 满足满足首次升级的会员
String tableName = TableNameConstants.CU_MEMBER_ASSESS + DateUtils.currentYear(currentDate);
String currentMonthFirstDateStr = DateUtils.currentMonthFirstDateStr(currentDate);
Integer monthFirstPeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(currentMonthFirstDateStr).getPkId();
Integer monthFirstPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(currentMonthFirstDateStr).getPkId();
// 结算日期月份的第一天
Date startDate = DateUtils.beforeMonthFirstDate(currentDate);
// 结算日期后一天
@ -193,22 +127,22 @@ public class CuMemberAssessServiceImpl extends ServiceImpl<CuMemberAssessMapper,
String settleTableName = TableNameConstants.CU_MEMBER_SETTLE + currentPeriod;
if (DateUtils.currentDay(DateUtils.currentDate()) == 1) {
String currentMonthFirstDate = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, DateUtils.beforeDate(1, ChronoUnit.DAYS, currentDate));
Integer yesterdayPeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(currentMonthFirstDate).getPkId();
Integer yesterdayPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(currentMonthFirstDate).getPkId();
settleTableName = TableNameConstants.CU_MEMBER_SETTLE + yesterdayPeriod;
}
// 首次晋升首次升级都是当月加下月考核查询出上月1号到考核日期的值
// 等级看会员表支付时间奖衔看奖衔变更表是否免考分组取,手动免考查看 最新的结算表手动考核
// d)前一天不免考后一天免考需要做重新考核直接变考核通过原来考核通过的不回退考核金额且考核状态为考核通过不是免考通过
// 复购免考通过
Integer startPeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(DateUtils.parseDateToFormat(DateUtils.YYYY_MM_DD, startDate)).getPkId();
Integer endPeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(DateUtils.parseDateToFormat(DateUtils.YYYY_MM_DD, endDate)).getPkId();
Integer startPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(DateUtils.parseDateToFormat(DateUtils.YYYY_MM_DD, startDate)).getPkId();
Integer endPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(DateUtils.parseDateToFormat(DateUtils.YYYY_MM_DD, endDate)).getPkId();
baseMapper.updateAssessCuMemberToRepExempt(tableName, settleTableName, monthFirstPeriod, startDate, endDate, startPeriod, endPeriod);
// 初始化订单数据将当月新增加入数据库
// 上月第一天上月最后一天
Date beforeFirstDate = DateUtils.beforeMonthFirstDate(currentDate);
Date currentFirstDate = DateUtils.currentMonthFirstDate(currentDate);
cuMemberAssessDetailService.insertCuMemberAssesDetailByOrder(currentTableName, currentPeriod, beforeFirstDate, currentFirstDate);
iCuMemberAssessDetailService.insertCuMemberAssesDetailByOrder(currentTableName, currentPeriod, beforeFirstDate, currentFirstDate);
}
/**
@ -233,7 +167,7 @@ public class CuMemberAssessServiceImpl extends ServiceImpl<CuMemberAssessMapper,
// 获取结算日上月最后一天获取期间
Date beforeMonthFirstDate = DateUtils.beforeMonthFirstDate(currentDate);
String beforeMonthFirstDateStr = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, beforeMonthFirstDate);
Integer beforePeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(beforeMonthFirstDateStr).getPkId();
Integer beforePeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(beforeMonthFirstDateStr).getPkId();
String beforeTableName = TableNameConstants.CU_MEMBER_ASSESS + DateUtils.getYear(beforeMonthFirstDateStr);
Date currentMonthFirstDate = DateUtils.currentMonthFirstDate(currentDate);
// 初始化复购考核的上月结余 // 更新当月结余
@ -245,7 +179,7 @@ public class CuMemberAssessServiceImpl extends ServiceImpl<CuMemberAssessMapper,
@Override
public List<CuMemberAssess> queryCuMemberAssTotal(String startDate, Integer pkCountry) {
int period = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(startDate).getPkId();
int period = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(startDate).getPkId();
String tableTable = TableNameConstants.CU_MEMBER_ASSESS + DateUtils.getYear(startDate);
return baseMapper.queryCuMemberAssTotal(tableTable, period, pkCountry);
}

View File

@ -1,137 +0,0 @@
package com.hzs.bonus.detail.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.hzs.common.core.annotation.Transaction;
import com.hzs.common.core.constant.EnumsPrefixConstants;
import lombok.*;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* 会员信息-会员考核记录VO
*/
@Data
public class CuMemberAssessVO {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private Long pkId;
/**
* 考核月度主键
*/
private Long pkAssess;
/**
* 会员编号
*/
private Long pkMember;
/**
* 考核类型( 0=复购考核,1=分红考核) EAssessmentType
*/
@Transaction(transactionKey = EnumsPrefixConstants.ASSESSMENT_TYPE)
private Integer assessType;
private String assessTypeVal;
/**
* 考核状态 (0=考核通过,1=免考通过,2=考核不通过,3=不考核) EAssessStatus
*/
@Transaction(transactionKey = EnumsPrefixConstants.ASSESS_STATUS)
private Integer assessStatus;
private String assessStatusVal;
/**
* 考核年月份
*/
private String settleMonth;
/**
* 订单编号
*/
private String orderCode;
/**
* 交易时间
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private Date tradeTime;
/**
* 变化类型 (0=复购考核新增1=复购考核扣除2=分红考核新增,3=分红考核扣除) EChangeType
*/
@Transaction(transactionKey = EnumsPrefixConstants.CHANGE_TYPE)
private Integer changeType;
private String changeTypeVal;
/**
* 交易金额
*/
private BigDecimal tradeAchieve;
/**
* 交易金额 (带符号)
*/
private String tradeAchieveSign;
/**
* 开始时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date startDate;
/**
* 结束时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date endDate;
/**
* 开始时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date startTradeTime;
/**
* 结束时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date endDateTradeTime;
/**
* 国家
*/
private Integer pkCountry;
/**
* 考核月剩余
*/
private BigDecimal monthSurplus;
/**
* 订单分红考核积分当月1号-当前时间
*/
private BigDecimal orderAssAchieve;
/**
* 订单复购考核积分当月1号-当前时间
*/
private BigDecimal orderAchieve;
/**
* 交易时间
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private Date creationTime;
/**
* 订单类型 来源于枚举所属专区 EOrderType
*/
private Integer orderType;
List<Integer> orderTypeList;
}

View File

@ -1,215 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hzs.bonus.achieve.mapper.CuMemberRangeMapper">
<!-- 通用查询映射结果 -->
<resultMap id="CuMemberRangeExt" type="com.hzs.common.domain.member.achieve.ext.CuMemberRangeExt">
<result column="PK_COUNTRY" property="pkCountry"/>
<result column="PK_MEMBER" property="pkMember"/>
<result column="PK_PARENT" property="pkParent"/>
<result column="MEMBER_CODE" property="memberCode"/>
<result column="MEMBER_NAME" property="memberName"/>
<result column="CUSTOMER_TYPE" property="customerType"/>
<result column="PHONE" property="phone"/>
<result column="PK_GRADE" property="pkGrade"/>
<result column="PK_AWARDS" property="pkAwards"/>
<result column="PK_RANGE_AWARDS" property="pkRangeAwards"/>
<result column="PK_BENEFIT_AWARDS" property="pkBenefitAwards"/>
<result column="ACCOUNT_STATUS" property="accountStatus"/>
<result column="PAY_STATUS" property="payStatus"/>
<result column="PAY_TIME" property="payTime"/>
<result column="REGISTER_AUTHORITY" property="registerAuthority"/>
<result column="CATEGORY" property="category"/>
<result column="PURCHASE_STATUS" property="purchaseStatus"/>
<result column="INCOME_STATUS" property="incomeStatus"/>
<result column="PK_TEAM_CODE" property="pkTeamCode"/>
<result column="PK_CENTER_CODE" property="pkCenterCode"/>
<result column="PK_VERTEX" property="pkVertex"/>
<result column="PK_SETTLE_COUNTRY" property="pkSettleCountry"/>
<result column="IS_REAL_NAME" property="isRealName"/>
<result column="PK_RATE" property="pkRate"/>
<result column="CONSUME_PV" property="consumePv"/>
<result column="MONTH_PV" property="monthPv"/>
<result column="EFFECTIVE_NUM" property="effectiveNum"/>
<result column="RECOMMEND_NUM" property="recommendNum"/>
<result column="TEAM_NUM" property="teamNum"/>
<result column="TEAM_CONSUME_AMOUNT" property="teamConsumeAmount"/>
<result column="TEAM_CONSUME_PV" property="teamConsumePv"/>
<result column="TEAM_MONTH_AMOUNT" property="teamMonthAmount"/>
<result column="TEAM_MONTH_PV" property="teamMonthPv"/>
<result column="SMALL_AREA_PV" property="smallAreaPv"/>
<result column="ASSESS_STATUS" property="assessStatus"/>
<result column="MONTH_MEMBER" property="monthMember"/>
<result column="RANGE_AWARDS_VALUE" property="rangeAwardsValue"/>
<result column="pk_order" property="pkOrder"/>
<result column="range_store_status" property="rangeStoreStatus"/>
<result column="ev_effective_num" property="evEffectiveNum"/>
<result column="provide_state" property="provideState"/>
<result column="buy_effective_num" property="buyEffectiveNum"/>
<result column="first_agent" property="firstAgent"/>
<result column="second_agent" property="secondAgent"/>
<result column="NEW_PV" property="newPv"/>
<result column="NEW_TEAM_PV" property="newTeamPv"/>
<result column="DEPT_NEW_TEAM_PV" property="deptNewTeamPv"/>
<result column="TEAM_CONSUME_AMOUNT" property="deptTeamConsumeAmount"/>
<result column="DEPT_TEAM_CONSUME_PV" property="deptTeamConsumePv"/>
<result column="DEPT_TEAM_MONTH_AMOUNT" property="deptTeamMonthAmount"/>
<result column="DEPT_TEAM_MONTH_PV" property="deptTeamMonthPv"/>
</resultMap>
<update id="mergeCuMemberRangeExt">
merge into ${rangeTableName} a
using (
select pk_member,min(consume_status) consume_status,max(pk_range_awards) pk_range_awards,
max(pk_awards) pk_awards,max(consume_pv) consume_pv,
max(month_pv) month_pv,max(new_pv) new_pv,max(new_team_pv) new_team_pv,max(effective_num) effective_num,
max(buy_effective_num) buy_effective_num,max(first_agent) first_agent,max(second_agent) second_agent,
max(team_consume_pv) team_consume_pv,max(team_month_pv) team_month_pv,max(small_area_pv) small_area_pv,
max(team_consume_amount) team_consume_amount,max(team_month_amount) team_month_amount,
max(assess_status) assess_status,max(dept_new_team_pv) dept_new_team_pv,
max(dept_team_consume_amount) dept_team_consume_amount,max(dept_team_consume_pv) dept_team_consume_pv,
max(dept_team_month_amount) dept_team_month_amount,max(dept_team_month_pv) dept_team_month_pv from(
<foreach collection="cuMemberRangeExtList" item="item" open=" " close=" " separator="union">
select #{item.pkMember} pk_member,#{item.pkRangeAwards} pk_range_awards,#{item.pkAwards} pk_awards,
#{item.consumeStatus} consume_status,#{item.consumePv} consume_pv,#{item.monthPv} month_pv,
#{item.newPv} new_pv,#{item.newTeamPv} new_team_pv,#{item.effectiveNum} effective_num,
#{item.buyEffectiveNum} buy_effective_num,#{item.firstAgent} first_agent,#{item.secondAgent} second_agent,
#{item.teamConsumeAmount} team_consume_amount,#{item.teamMonthAmount} team_month_amount,
#{item.deptNewTeamPv} dept_new_team_pv,#{item.deptTeamConsumeAmount} dept_team_consume_amount,
#{item.deptTeamConsumePv} dept_team_consume_pv,#{item.deptTeamMonthAmount} dept_team_month_amount,
#{item.deptTeamMonthPv} dept_team_month_pv,
#{item.teamConsumePv} team_consume_pv,#{item.teamMonthPv} team_month_pv,#{item.smallAreaPv} small_area_pv,
#{item.assessStatus} assess_status from dual
</foreach>)
group by pk_member
) b
on (a.pk_member=b.pk_member)
when matched then
update set a.pk_range_awards=b.pk_range_awards,a.pk_awards=b.pk_awards,
a.consume_status=b.consume_status,a.consume_pv=b.consume_pv,
a.month_pv=b.month_pv,a.effective_num=b.effective_num,
a.new_pv=b.new_pv,a.new_team_pv=b.new_team_pv,a.buy_effective_num=b.buy_effective_num,
a.first_agent=b.first_agent,a.second_agent=b.second_agent,a.team_consume_amount=b.team_consume_amount,
a.team_month_amount=b.team_month_amount,a.dept_new_team_pv=b.dept_new_team_pv,
a.dept_team_consume_amount=b.dept_team_consume_amount,
a.dept_team_consume_pv=b.dept_team_consume_pv,a.dept_team_month_amount=b.dept_team_month_amount,
a.dept_team_month_pv=b.dept_team_month_pv,
a.team_consume_pv=b.team_consume_pv,a.team_month_pv=b.team_month_pv,
a.small_area_pv=b.small_area_pv,a.assess_status=b.assess_status
</update>
<update id="mergeSecondCuMemberRangeExt">
merge into ${secondTableName} a
using (
<foreach collection="cuMemberRangeExtList" item="item" open=" " close=" " separator="union">
select #{item.pkMember} pk_member,#{item.pkParent} pk_parent,#{item.pkRangeAwards} pk_range_awards,
#{item.newPv} new_pv,#{item.newTeamPv} new_team_pv,#{item.newEffectiveNum} new_effective_num,
#{item.assessStatus} assess_status,#{item.monthMember} month_member from dual
</foreach>
) b
on (a.pk_member=b.pk_member)
when not matched then
insert(pk_member,pk_parent,pk_range_awards,new_pv,new_team_pv,new_effective_num,assess_status,month_member)
values (b.pk_member,b.pk_parent,b.pk_range_awards,b.new_pv,b.new_team_pv,b.new_effective_num,b.assess_status,b.month_member)
when matched then
update set a.pk_range_awards=b.pk_range_awards,a.new_pv=b.new_pv,a.new_team_pv=b.new_team_pv
</update>
<select id="queryCuMemberRangeExtByParent" resultMap="CuMemberRangeExt">
select a.pk_member,
a.pk_parent,
a.pk_settle_country,
a.pk_range_awards,
a.pk_awards,
a.pk_benefit_awards,
a.income_status,
a.consume_pv,
a.month_pv,
a.effective_num,
a.buy_effective_num,
a.first_agent,
a.second_agent,
a.consume_status,
a.team_consume_amount,
a.team_consume_pv,
a.team_month_amount,
a.team_month_pv,
a.small_area_pv,
0 new_pv,
0 new_team_pv,
a.dept_new_team_pv,
a.dept_team_consume_amount,
a.dept_team_consume_pv,
a.dept_team_month_amount,
a.dept_team_month_pv,
a.assess_status,
a.month_member,
a.pay_time,
a.pk_rate,
ba.awards_value range_awards_value
from ${tableName} a
inner join bd_range_awards ba
on a.pk_range_awards = ba.pk_id
where ba.del_flag = 0
and a.pk_parent = #{pkParent}
and a.pay_time &lt;= #{orderDate}
</select>
<select id="validateCuMemberPlaceAwards" resultType="java.lang.Integer">
select count(*) from(
<foreach collection="cuMemberRangeExtList" item="item" close=" " open=" " separator=" union all ">
select distinct 1 from(
select * from ${rangeTableName}
start with pk_member= #{item.pkMember}
connect by pk_parent = prior pk_member)
where pk_range_awards>= #{pkRangeAwards} and pay_time &lt;= #{orderDate}
</foreach>)
</select>
<select id="querySecondCuMemberRangeExtByParent" resultMap="CuMemberRangeExt">
select a.pk_member,
a.pk_parent,
nvl(b.pk_settle_country, 1) pk_settle_country,
a.pk_range_awards,
a.consume_status,
nvl(b.income_status, 0) income_status,
nvl(b.consume_pv, 0) + a.new_pv consume_pv,
a.new_pv,
a.new_team_pv,
a.dept_new_team_pv,
nvl(dept_team_consume_amount, 0) dept_team_consume_amount,
nvl(b.dept_team_month_amount, 0) dept_team_month_amount,
nvl(b.dept_team_month_pv, 0) + a.new_team_pv dept_team_month_pv,
nvl(b.dept_team_consume_pv, 0) + a.dept_new_team_pv dept_team_consume_pv,
nvl(b.month_pv, 0) + a.new_pv month_pv,
nvl(b.effective_num, 0) + a.new_effective_num effective_num,
a.new_effective_num,
nvl(b.team_consume_pv, 0) + a.new_team_pv team_consume_pv,
nvl(b.team_month_pv, 0) + a.new_team_pv team_month_pv,
nvl(b.small_area_pv, 0) small_area_pv,
a.assess_status,
a.month_member,
nvl(b.pay_time, null) pay_time,
nvl(b.pk_rate, 0) pk_rate,
ba.awards_value range_awards_value
from ${secondTableName} a
left join ${tableName} b
on a.pk_member = b.pk_member
inner join bd_range_awards ba
on a.pk_range_awards = ba.pk_id
where ba.del_flag = 0
and a.pk_parent = #{pkParent}
</select>
<select id="validateSecondCuMemberPlaceAwards" resultType="java.lang.Integer">
select count(*) from(
<foreach collection="cuMemberRangeExtList" item="item" close=" " open=" " separator=" union all ">
select distinct 1 from(
select * from ${secondTableName}
start with pk_member= #{item.pkMember}
connect by pk_parent = prior pk_member)
where pk_range_awards>= #{pkRangeAwards}
</foreach>)
</select>
</mapper>

View File

@ -52,8 +52,12 @@
<result column="SHARE_AWARDS_VALUE" property="shareAwardsValue"/>
<result column="RANGE_RATIO" property="rangeRatio"/>
<result column="MONTH_REPURCHASE_RATIO" property="monthRepurchaseRatio"/>
<result column="BENEFIT_AVG_RATIO" property="benefitAvgRatio"/>
<result column="BENEFIT_SHARE_RATIO" property="benefitShareRatio"/>
<result column="coach_algebra" property="coachAlgebra"/>
<result column="coach_ratio" property="coachRatio"/>
<result column="COUNTRY_NAME" property="countryName"/>
<result column="big_box_num" property="bigBoxNum"/>
<result column="small_box_num" property="smallBoxNum"/>
@ -436,12 +440,16 @@
<select id="batchQueryMemberRetailRangeByMemberPk" resultMap="CuMemberRetailRangeExt">
<foreach collection="memberPkList" item="item" close=" " open=" " separator="union">
select pk_member, member_code, member_name, c.pk_parent, c.pk_awards, c.pk_grade,
c.pk_rate, c.enable_status, c.income_status, c.pk_country, c.pk_settle_country,
select pk_member, member_code, member_name, c.pk_parent,
c.pk_awards, c.pk_grade, c.pk_rate,
c.enable_status, c.income_status,
c.pk_country, c.pk_settle_country,
c.account_status, c.category, c.system_type,
bg.grade_value, bg.grade_name, bw.awards_value, bw.awards_name,
bg.grade_value, bg.grade_name,
bw.awards_value, bw.awards_name,
c.pk_share_awards, bwa.awards_value share_awards_value,
bw.range_ratio, bw.month_repurchase_ratio, bw.benefit_avg_ratio, bw.benefit_share_ratio
bw.range_ratio, bw.month_repurchase_ratio, bw.benefit_avg_ratio, bw.benefit_share_ratio,
bw.coach_algebra, bw.coach_ratio
from (
select *
from ${rangeTableName}

View File

@ -94,47 +94,6 @@
b.IS_EXAMINE,b.ASSESS_STATUS,b.PK_COUNTRY,b.PK_CREATOR)
</insert>
<insert id="insertShareCuMemberAssess">
merge into ${tableName} a
using(
select pk_member,#{period} period,#{month} settle_month,1 assess_type,pk_awards,nvl(b.SHARE_CHECK,0) ASSESS_TARGET,
1 IS_EXAMINE,2 assess_status,ct.pk_settle_country PK_COUNTRY,1 pk_creator
from ${sourceTableName} ct
left join bd_awards b
on ct.pk_awards=b.pk_id
where category=0 and awards_value >0
) b
on (a.pk_member=b.pk_member and a.period=b.period and a.assess_type=b.assess_type)
WHEN MATCHED THEN
update set a.SETTLE_MONTH=b.SETTLE_MONTH,a.PK_AWARDS=b.PK_AWARDS,a.ASSESS_TARGET=b.ASSESS_TARGET,
a.IS_EXAMINE=b.IS_EXAMINE,a.ASSESS_STATUS=b.ASSESS_STATUS
when not matched then
insert (PK_MEMBER,period,SETTLE_MONTH,ASSESS_TYPE,PK_AWARDS,ASSESS_TARGET,
IS_EXAMINE,ASSESS_STATUS,PK_COUNTRY,PK_CREATOR)
values(b.PK_MEMBER,b.period,b.SETTLE_MONTH,b.ASSESS_TYPE,b.PK_AWARDS,b.ASSESS_TARGET,
b.IS_EXAMINE,b.ASSESS_STATUS,b.PK_COUNTRY,b.PK_CREATOR)
</insert>
<insert id="insertTmpCuMemberAssess">
insert ALL
<foreach item="item" index="index" collection="cuMemberAssessesList" separator=" " >
into tmp_cu_member_assess(pk_id,pk_awards,assess_target,assess_status,month_add,month_used,month_surplus,
is_examine) values
(
#{item.pkId},#{item.pkAwards},#{item.assessTarget},#{item.assessStatus},#{item.monthAdd},#{item.monthUsed},#{item.monthSurplus},
#{item.isExamine})
</foreach>
SELECT 1 FROM dual
</insert>
<update id="createCuMemberAssessTable">
create table ${tableName}
(
<include refid="CuMemberAssessColumn"></include>
)
</update>
<update id="createCuMemberTableUniqueIndex">
create unique index ${tableName}_PK_M on ${tableName}(PK_MEMBER,period, assess_type)
</update>
<update id="updateAssessPeriodBeginByBeforeMonth">
merge into ${tableName} a
@ -173,47 +132,6 @@
where del_flag= 0 and assess_status=2 and period = #{period} and assess_target &lt;= month_balance+month_add
</update>
<update id="updateAssessPeriodByRevokeOrder">
merge into ${tableName} a
using (select pk_id,pk_awards,assess_target,assess_status,month_add,month_used,month_surplus,is_examine
from TMP_CU_MEMBER_ASSESS) b
on (a.pk_id = b.pk_id)
when matched then
update set a.pk_awards = b.pk_awards,a.assess_target=b.assess_target,a.assess_status=b.assess_status,
a.month_add=b.month_add,a.month_used=b.month_used,
a.month_surplus=b.month_surplus,a.is_examine=b.is_examine
</update>
<update id="updateAssessPeriodCheckBalanceByTmp">
update ${tableName} a set a.assess_status = 0, a.month_used = a.assess_target, a.month_surplus = a.month_balance+a.month_add-a.assess_target
where a.del_flag= 0 and a.assess_status=2 and a.period = #{period} and a.assess_target &lt;= a.month_balance+a.month_add
and a.pk_member in
<foreach collection="cuMemberList" item="item" open="(" close=")" separator=",">
#{item.pkMember}
</foreach>
</update>
<update id="createCuMemberAssessTableComment">
comment on column CU_MEMBER_ASSESS2022.pk_id is '主键';
comment on column CU_MEMBER_ASSESS2022.pk_member is '会员主键';
comment on column CU_MEMBER_ASSESS2022.period is '期间';
comment on column CU_MEMBER_ASSESS2022.settle_month is '结算月';
comment on column CU_MEMBER_ASSESS2022.assess_type is '考核类型 0=复购考核 1=分红考核';
comment on column CU_MEMBER_ASSESS2022.pk_awards is '奖衔';
comment on column CU_MEMBER_ASSESS2022.assess_target is '考核目标';
comment on column CU_MEMBER_ASSESS2022.is_examine is '是否免考';
comment on column CU_MEMBER_ASSESS2022.assess_status is '考核状态 0=考核通过 1=免考通过 2=考核不通过 3=不考核';
comment on column CU_MEMBER_ASSESS2022.month_balance is '上月结余';
comment on column CU_MEMBER_ASSESS2022.month_add is '考核月新增';
comment on column CU_MEMBER_ASSESS2022.cur_month_add is '本月新增';
comment on column CU_MEMBER_ASSESS2022.month_used is '考核月使用';
comment on column CU_MEMBER_ASSESS2022.month_surplus is '考核月剩余';
comment on column CU_MEMBER_ASSESS2022.del_flag is '逻辑删除 (0=未删除,1已删除)';
comment on column CU_MEMBER_ASSESS2022.creation_time is '创建时间';
comment on column CU_MEMBER_ASSESS2022.modified_time is '修改时间';
comment on column CU_MEMBER_ASSESS2022.pk_country is '国家';
comment on column CU_MEMBER_ASSESS2022.pk_creator is '创建者';
comment on column CU_MEMBER_ASSESS2022.pk_modified is '更新者';
</update>
<update id="updateAssessCuMemberToRepExempt">
merge into ${tableName} a
using (
@ -255,243 +173,10 @@
update ${settleTableName} set purchase_status=0
</update>
<update id="updateAssessCuMemberToShareExempt">
merge into ${tableName} a
using (
select distinct pk_member from ${settleTableName} ct
inner join bd_awards ba
on ct.pk_awards = ba.pk_id
where ct.share_status=0 and ba.share_check >0
) b
on (a.pk_member = b.pk_member)
when matched then
update set a.is_examine=0 where a.del_flag= 0 and a.period= #{period} and a.assess_type= 1
</update>
<delete id="deleteCuMemberAssessByPeriod">
delete from ${tableName} where period = #{period} and del_flag=0
</delete>
<select id="queryCuMemberAssessCount" resultType="java.lang.Integer">
select count(pk_id) from ${tableName} where period = #{period} and del_flag=0
</select>
<select id="queryEnoughCuMemberAssess" resultMap="CuMemberAssess">
select pk_id,pk_member,assess_type from ${tableName}
where del_flag= 0 and assess_status=2 and period = #{period} and month_used &lt;= month_balance+month_add
</select>
<select id="queryExemptAssessCuMember" resultMap="CuMemberAssess">
select assess_type,pk_member from ${tableName}
where del_flag= 0 and is_examine = 0 and period = #{period}
</select>
<select id="queryAssessPeriodByRevokeOrder" resultMap="CuMemberAssess">
select sa.pk_id,sa.pk_member,sa.assess_type,sa.assess_target,sa.is_examine,sa.assess_status,
sa.month_balance,sa.month_add,sa.month_used,sa.month_surplus,
st.pk_awards,sa.pk_awards pk_original_awards,sa.pk_country from ${tableName} sa
inner join ${settleTableName} st
on sa.pk_member=st.pk_member
where sa.del_flag= 0 and sa.is_examine = 0 and sa.period = #{period}
and sa.pk_member in
<foreach collection="saOrderList" item="item" open="(" close=")" separator=",">
#{item.pkMember}
</foreach>
</select>
<select id="queryCuMemberAssessByMember" resultMap="CuMemberAssess">
select pk_member,assess_status from ${tableName}
where period= #{period} and assess_type=#{assessType} and assess_status in(0,1)
and pk_member in
<foreach collection="cuMemberSettleExtList" item="item" open="(" close=")" separator=",">
#{item.pkMember}
</foreach>
</select>
<select id="queryCuMemberShareAssess" resultType="com.hzs.common.domain.member.detail.CuMemberAssess">
select pk_member,PERIOD,PK_AWARDS,assess_status,pk_country from ${tableName} where period= #{period} and assess_type=1
and assess_status in(0,1) and pk_country=1
union
select ca.pk_member,ca.PERIOD,ca.PK_AWARDS,ca.assess_status,ca.pk_country from ${tableName} ca
inner join bd_awards ba
on ca.PK_AWARDS=ba.pk_id
where period= #{period} and assess_type=0 and assess_status in(0,1) and ca.pk_country >1 and ba.awards_value>0
</select>
<!-- 会员-考核明细列表-->
<select id="selectAssessList"
resultType="com.hzs.bonus.detail.vo.CuMemberAssessVO">
select * from (
SELECT
a.PK_ASSESS pkAssess,
a.PK_MEMBER pkMember,
a.TRADE_TIME tradeTime,
a.PK_ORDER pkOrder,
a.CHANGE_TYPE changeType,
a.TRADE_ACHIEVE tradeAchieve,
0 orderAssAchieve,
0 orderAchieve,
'' orderCode
FROM
CU_MEMBER_ASSESS_DETAIL a
LEFT JOIN ${tableName} b on b.PK_ID=a.PK_ASSESS
WHERE
a.DEL_FLAG = 0
<if test="pkMember != null ">
AND a.PK_MEMBER = #{pkMember}
</if>
<if test="pkCountry != null ">
AND a.PK_COUNTRY = #{pkCountry}
</if>
<if test="changeType != null ">
AND a.CHANGE_TYPE = #{changeType}
</if>
<if test="assessType != null ">
AND b.ASSESS_TYPE = #{assessType}
</if>
<if test="assessStatus != null ">
AND b.ASSESS_STATUS = #{assessStatus}
</if>
<if test="changeType ==null and assessStatus==null ">
UNION ALL
select
null pkAssess,
PK_MEMBER pkMember,
PAY_TIME tradeTime,
null pkOrder,
null changeType,
null tradeAchieve,
ORDER_ASS_ACHIEVE orderAssAchieve,
ORDER_ACHIEVE orderAchieve,
ORDER_CODE orderCode
from SA_ORDER
WHERE
DEL_FLAG = 0
<if test="pkMember != null ">
AND PK_MEMBER = #{pkMember}
</if>
<if test="orderTypeList != null ">
and ORDER_TYPE in
<foreach collection="orderTypeList" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
<if test="assessType == 0 ">
AND order_achieve > 0
</if>
<if test="assessType == 1 ">
AND ORDER_ASS_ACHIEVE > 0
</if>
<if test="pkCountry != null ">
AND PK_COUNTRY = #{pkCountry}
</if>
<if test="startDate != null">
and PAY_TIME &gt;= #{startDate, jdbcType=DATE}
</if>
<if test="endDate != null">
and PAY_TIME &lt; #{endDate, jdbcType=DATE}
</if>
</if>
)
order by tradeTime desc
</select>
<!--查询会员月度考核-->
<select id="getMemberAssessMonthList"
resultType="com.hzs.bonus.detail.vo.CuMemberAssessVO">
SELECT
a.pk_id pkId,
a.SETTLE_MONTH settleMonth,
a.ASSESS_STATUS assessStatus,
a.MONTH_SURPLUS monthSurplus,
a.CREATION_TIME creationTime
FROM
${tableName} a
WHERE
a.DEL_FLAG = 0
<if test="period != null ">
AND a.period=#{period}
</if>
<if test="pkMember != null ">
AND a.PK_MEMBER = #{pkMember}
</if>
<if test="pkCountry != null ">
AND a.PK_COUNTRY = #{pkCountry}
</if>
<if test="assessType != null ">
AND a.ASSESS_TYPE = #{assessType}
</if>
</select>
<!--根据考核类型查询会员订单信息-->
<select id="getOrderByAssessList"
resultType="com.hzs.bonus.detail.vo.CuMemberAssessVO">
select PK_MEMBER pkMember,
PAY_TIME tradeTime,
ORDER_ASS_ACHIEVE orderAssAchieve,
ORDER_ACHIEVE orderAchieve,
ORDER_TYPE orderType,
ORDER_CODE orderCode
from SA_ORDER
WHERE
DEL_FLAG = 0
<if test="pkMember != null ">
AND PK_MEMBER = #{pkMember}
</if>
<if test="pkCountry != null ">
AND PK_COUNTRY = #{pkCountry}
</if>
<if test="orderType != null ">
AND ORDER_TYPE = #{orderType}
</if>
<if test="startDate != null">
and PAY_TIME &gt;= #{startDate, jdbcType=DATE}
</if>
<if test="endDate != null">
and PAY_TIME &lt; #{endDate, jdbcType=DATE}
</if>
order by PAY_TIME desc
</select>
<!--查询会员订单考核积分-->
<select id="getOrderAssessList" parameterType="com.hzs.bonus.detail.vo.CuMemberAssessVO"
resultType="com.hzs.bonus.detail.vo.CuMemberAssessVO">
SELECT
sum (ORDER_ASS_ACHIEVE) orderAssAchieve,
sum (ORDER_ACHIEVE) orderAchieve
FROM
SA_ORDER a
WHERE
a.DEL_FLAG = 0
<if test="orderTypeList != null ">
AND a.order_type in
<foreach collection="orderTypeList" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
<if test="pkMember != null ">
AND a.PK_MEMBER = #{pkMember}
</if>
<if test="pkCountry != null ">
AND a.PK_COUNTRY = #{pkCountry}
</if>
<if test="startDate != null">
and a.PAY_TIME &gt;= #{startDate, jdbcType=DATE}
</if>
<if test="endDate != null">
and a.PAY_TIME &lt; #{endDate, jdbcType=DATE}
</if>
</select>
<select id="queryCuMemberAssTotal" resultType="com.hzs.common.domain.member.detail.CuMemberAssess">
select cm.pk_awards pkAwards,count(cm.pk_id) assessStatus from ${settleTable} cm
inner join bd_awards ba

View File

@ -1,11 +0,0 @@
package com.hzs.system.config.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hzs.common.domain.system.config.BdRangeAwards;
/**
* 极差奖衔配置表 Mapper 接口
*/
public interface BdRangeAwardsMapper extends BaseMapper<BdRangeAwards> {
}

View File

@ -1,11 +0,0 @@
package com.hzs.system.config.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hzs.common.domain.system.config.BdRangeAwards;
/**
* 极差奖衔配置表 服务类
*/
public interface IBdRangeAwardsService extends IService<BdRangeAwards> {
}

View File

@ -1,15 +0,0 @@
package com.hzs.system.config.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hzs.common.domain.system.config.BdRangeAwards;
import com.hzs.system.config.mapper.BdRangeAwardsMapper;
import com.hzs.system.config.service.IBdRangeAwardsService;
import org.springframework.stereotype.Service;
/**
* 极差奖衔配置表 服务实现类
*/
@Service
public class BdRangeAwardsServiceImpl extends ServiceImpl<BdRangeAwardsMapper, BdRangeAwards> implements IBdRangeAwardsService {
}

View File

@ -1,27 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hzs.system.config.mapper.BdRangeAwardsMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.hzs.common.domain.system.config.BdRangeAwards">
<id column="PK_ID" property="pkId" />
<result column="DEL_FLAG" property="delFlag" />
<result column="PK_COUNTRY" property="pkCountry" />
<result column="CREATION_TIME" property="creationTime" />
<result column="MODIFIED_TIME" property="modifiedTime" />
<result column="PK_CREATOR" property="pkCreator" />
<result column="PK_MODIFIED" property="pkModified" />
<result column="AWARDS_NAME" property="awardsName" />
<result column="AWARDS_VALUE" property="awardsValue" />
<result column="TEAM_CONSUME_CHECK" property="teamConsumeCheck" />
<result column="COMMUNITY_CHECK" property="communityCheck" />
<result column="CONSUME_PV" property="consumePv" />
<result column="PURCHASE_CHECK" property="purchaseCheck" />
<result column="RECOMMEND_NUM" property="recommendNum" />
<result column="PLACE_NUM" property="placeNum" />
<result column="CHECK_AWARDS" property="checkAwards" />
<result column="RANGE_RATIO" property="rangeRatio" />
<result column="ORDINARY_RATIO" property="ordinaryRatio" />
</resultMap>
</mapper>

View File

@ -57,11 +57,6 @@ public class TableNameConstants {
*/
public static final String CU_MEMBER_MONTH = "cu_member_month";
/**
* 会员考核记录表序列
*/
public static final String CU_MEMBER_ASSESS_SEQ = "cu_member_assess_seq";
/**
* 会员统计金额业绩盒数表
*/

View File

@ -5,45 +5,11 @@ package com.hzs.common.core.constant.msg;
*/
public class BonusMsgConstants {
/**
* 直推收益备注 -- 当前是第%d轮,%d次,订单编号%s,%s为%s贡献了推荐收益,计算业绩%f,直推比例%f
*/
public static String RECOMMEND = "当前是第%d轮,第%d次,订单编号%s,%s为%s贡献了推荐收益,计算业绩%f,直推比例%f。";
public static String RANGE_RECOMMEND = "当前是第%d代,第%d次,订单编号%s,%s为%s贡献了推互助收益,计算业绩%f。";
/**
* 直推收益备注 -- 订单编号%s,%s为%s贡献了推荐收益,推荐收益为%f
*/
public static String RECOMMEND_DIRECT = "订单编号%s,%s为%s贡献了推荐收益,推荐收益为%f。";
public static String RECOMMEND_SPECIAL_DIRECT = "订单编号%s,%s为%s贡献了乐学易考推荐级差收益,推荐级差收益为%f。";
/**
* 拓展收益备注 -- 当前是第%d碰,%d碰,订单编号%s,%s为%s贡献了拓展收益,计算业绩%f,拓展比例%f
*/
public static String EXPAND = "当前是第%d碰,共%d碰,订单编号%s,%s为%s贡献了拓展收益,计算业绩%f,拓展比例%f。";
/**
* 辅导收益备注 -- 当前是第%d代,#,订单编号%s,%s为%s贡献了辅导收益,计算业绩%f,辅导比例%f
*/
public static String COACH = "当前是第%d代,共#代,订单编号%s,%s为%s贡献了辅导收益,计算业绩%f,辅导比例%f。";
/**
* 辅导收益备注 -- 当前是第%d代,#,订单编号%s,%s为%s贡献了辅导收益,计算业绩%f,辅导比例%f
*/
public static String RANGE_COACH = "当前是第%d代,共%d代,订单编号%s,%s为%s贡献了幸运收益,计算业绩%f,计算比例%f。";
/**
* 报单服务费收益备注 -- 订单编号%s,%s为%s贡献了报单服务费收益,计算业绩%f,报单服务费比例%f
*/
public static String SERVICE = "订单编号%s,%s为%s贡献了报单服务费收益,计算业绩%f,报单服务费比例%f。";
/**
* 店铺补贴
*/
public static String RANGE_SERVICE = "订单编号%s,%s为%s贡献了店铺补贴收益,计算业绩%f,店铺补贴比例%f。";
public static String MONTH_SERVICE = "获得%f月报单服务费收益,结算月%s。";
/**
* 月度分红平均收益
*/
@ -59,51 +25,10 @@ public class BonusMsgConstants {
*/
public static String RETAIL_AREA_INCOME = "订单编号%s,%s为%s贡献了区域分红,区域分红%f,收益县%s。";
/**
* 分红收益备注 -- %s获得分红收益%f
* 辅导收益备注 -- 当前是第%d代,#,订单编号%s,%s为%s贡献了辅导收益,计算业绩%f,辅导比例%f
*/
public static String SHARE = "%s获得福利收益%f。";
/**
* -- 订单编号%s,%s为%s贡献了海粉推荐收益,海粉推荐收益%f
*/
public static String HAI_FUN = "订单编号%s,%s为%s贡献了海粉推荐收益,海粉推荐收益%f。";
/**
* 复购券收益备注 -- %s获得复购券均分收益%f
*/
public static String SHARE_COUPON = "%s获得复购券均分收益%f。";
/**
* 复购券收益备注 -- %s获得店铺收益%f
*/
public static String STORE = "%s获得店铺收益%f。";
/**
* 车奖积分收益备注 -- 获得车奖积分收益%f
*/
public static String CAR_AWARD_POINTS = "获得车奖积分收益%f。";
/**
* 嗨粉推荐收益备注 -- 订单编号%s,%s为%s贡献了嗨粉推荐收益,获得嗨粉推荐奖金%f
*/
public static String HI_FUN = "订单编号%s,%s为%s贡献了嗨粉推荐收益,获得嗨粉推荐奖金%f。";
/**
* 复购拓展收益备注 -- 订单编号%s,%s为%s贡献了复购推荐收益,计算业绩%f,直推比例%f
*/
public static String REPURCHASE_PUSH = "订单编号%s,%s为%s贡献了复购推荐收益,计算业绩%f,直推比例%f。";
/**
* 复购拓展收益备注 -- 当前是第%d碰,%d碰,订单编号%s,%s为%s贡献了复购拓展收益,计算业绩%f,拓展比例%f
*/
public static String REPURCHASE_EXPAND = "当前是第%d碰,共%d碰,订单编号%s,%s为%s贡献了复购拓展收益,计算业绩%f,拓展比例%f。";
/**
* 复购级差 -- 订单编号%s,%s为%s贡献了分享级差收益,计算业绩%f,前一级差等级名称%s,当前级差等级名称%s
*/
public static String SHARE_RANGE = "订单编号%s,%s为%s贡献了复购级差收益,计算业绩%f,前一级差等级名称%s,当前级差等级名称%s。";
public static String RETAIL_COACH = "当前是第%d代,共#代,订单编号%s,%s为%s贡献了培育津贴,计算业绩%f,培育比例%f。";
/**
* 月度福利级差
@ -124,32 +49,6 @@ public class BonusMsgConstants {
*/
public static String ORI_RANGE = "订单编号%s,%s为%s贡献了平级收益,计算业绩%f,等级名称%s。";
public static String LE_SHARE_RANGE = "订单编号%s,%s为%s贡献了复购级差收益,收益%f。";
/**
* 分享级差 -- 订单编号%s,%s为%s贡献了分享级差收益(乐学易考),使用代金券%f,当前等级%s
*/
// public static String LE_XUE_SHARE_RANGE = "MSG_BONUS_018";
public static String LE_XUE_SHARE_RANGE = "订单编号%s,%s为%s贡献了分享级差收益(乐学易考),使用代金券%f,当前等级%s。";
/**
* 复购券收益 -- 订单编号%s,%s为%s贡献了复购券收益,计算业绩%f,计算比例%f,复购券收益%f
*/
// public static String REPURCHASE_COUPON_RANGE = "MSG_BONUS_019";
public static String REPURCHASE_COUPON_RANGE = "订单编号%s,%s为%s贡献了复购券收益,计算业绩%f,计算比例%f,复购券收益%f。";
/**
* 云代首购 -- 订单编号%s,%s为%s贡献了云代首购业绩,计算业绩%f,云代首购比例%f
*/
// public static String CLOUD_AGENT_FIRST_REPURCHASE = "MSG_BONUS_020";
public static String CLOUD_AGENT_FIRST_REPURCHASE = "订单编号%s,%s为%s贡献了云代首购业绩,计算业绩%f,云代首购比例%f。";
/**
* 云代复购 -- 订单编号%s,%s为%s贡献了云代复购业绩,计算业绩%f,云代复购比例%f
*/
// public static String CLOUD_AGENT_REPURCHASE = "MSG_BONUS_021";
public static String CLOUD_AGENT_REPURCHASE = "订单编号%s,%s为%s贡献了云代复购业绩,计算业绩%f,云代复购比例%f。";
/**
* 奖金重算 -- 只能重算7天内的奖金
*/

View File

@ -6,12 +6,6 @@ import lombok.Getter;
/**
* 计算类型
*
* @author: sui q
* @time: 2022/8/25 15:09
* @description:
* @classname: ECalType
* @package_name: com.hzs.common.core.enums
*/
@AllArgsConstructor
@Getter

View File

@ -1,326 +0,0 @@
package com.hzs.common.domain.member.achieve;
import java.math.BigDecimal;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.hzs.common.core.annotation.Excel;
import com.hzs.common.core.web.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* <p>
*
* </p>
*
* @author hzs
* @since 2024-10-15
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("CU_MEMBER_RANGE")
public class CuMemberRange extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 会员主键
*/
@TableField("PK_MEMBER")
private Long pkMember;
/**
* 推荐人
*/
@TableField("PK_PARENT")
private Long pkParent;
/**
* 会员编号
*/
@TableField("MEMBER_CODE")
private String memberCode;
/**
* 会员名称
*/
@TableField("MEMBER_NAME")
private String memberName;
/**
* 会员类型
*/
@TableField("CUSTOMER_TYPE")
private Integer customerType;
/**
* 手机号
*/
@TableField("PHONE")
private String phone;
/**
* 等级
*/
@TableField("PK_GRADE")
private Integer pkGrade;
/**
* 奖衔
*/
@TableField("PK_AWARDS")
private Integer pkAwards;
/**
* 极差奖衔
*/
@TableField("PK_RANGE_AWARDS")
private Integer pkRangeAwards;
/**
* 福利奖衔
*/
@TableField("PK_BENEFIT_AWARDS")
private Integer pkBenefitAwards;
/**
* 账户状态
*/
@TableField("ACCOUNT_STATUS")
private Integer accountStatus;
/**
* 支付状态
*/
@TableField("PAY_STATUS")
private Integer payStatus;
/**
* 注册权限
*/
@TableField("REGISTER_AUTHORITY")
private Integer registerAuthority;
/**
* 类型
*/
@TableField("CATEGORY")
private Integer category;
/**
* 免考状态
*/
@TableField("PURCHASE_STATUS")
private Integer purchaseStatus;
/**
* 收益状态
*/
@TableField("INCOME_STATUS")
private Integer incomeStatus;
/**
* 团队
*/
@TableField("PK_TEAM_CODE")
private Long pkTeamCode;
/**
* 注册中心
*/
@TableField("PK_CENTER_CODE")
private Long pkCenterCode;
/**
* 体系
*/
@TableField("PK_VERTEX")
private Long pkVertex;
/**
* 结算国家
*/
@TableField("PK_SETTLE_COUNTRY")
private Integer pkSettleCountry;
/**
* 是否实名认证
*/
@TableField("IS_REAL_NAME")
private Integer isRealName;
/**
* 汇率
*/
@TableField("PK_RATE")
private Integer pkRate;
/**
* 消费状态
*/
@TableField("CONSUME_STATUS")
private Integer consumeStatus;
/**
* 消费pv汇总
*/
@TableField("CONSUME_PV")
private BigDecimal consumePv;
/**
* 当月消费pv
*/
@TableField("MONTH_PV")
private BigDecimal monthPv;
/**
* 个人新增消费pv
*/
@TableField("NEW_PV")
private BigDecimal newPv;
/**
* 新增团队消费pv
*/
@TableField("NEW_TEAM_PV")
private BigDecimal newTeamPv;
/**
* 新增团队消费pv
*/
@TableField("dept_new_team_pv")
private BigDecimal deptNewTeamPv;
/**
* 推荐有效数量
*/
@TableField("EFFECTIVE_NUM")
private Integer effectiveNum;
/**
* 推荐购买EV的会员有效购买数量
*/
@TableField("EV_EFFECTIVE_NUM")
private Integer evEffectiveNum;
/**
* 是否已经为推荐人提供有效计数0=1=
*/
@TableField("provide_state")
private Integer provideState;
/**
* 自身购买EV有效数量
*/
@TableField("BUY_EFFECTIVE_NUM")
private Integer buyEffectiveNum;
/**
* 第一代推荐数量拿奖金数量
*/
@TableField("FIRST_AGENT")
private Integer firstAgent;
/**
* 第二代推荐数量拿奖金数量
*/
@TableField("SECOND_AGENT")
private Integer secondAgent;
/**
* 推荐数量暂时有问题
*/
@TableField("RECOMMEND_NUM")
private Integer recommendNum;
/**
* 团队数量 暂时有问题
*/
@TableField("TEAM_NUM")
private Integer teamNum;
/**
* 团队消费pv汇总
*/
@TableField("TEAM_CONSUME_AMOUNT")
private BigDecimal teamConsumeAmount;
/**
* 团队消费pv汇总
*/
@TableField("TEAM_CONSUME_PV")
private BigDecimal teamConsumePv;
/**
* 团队月消费pv
*/
@TableField("TEAM_MONTH_AMOUNT")
private BigDecimal teamMonthAmount;
/**
* 团队月消费pv
*/
@TableField("TEAM_MONTH_PV")
private BigDecimal teamMonthPv;
/**
* 团队消费pv汇总
*/
@TableField("DEPT_TEAM_CONSUME_AMOUNT")
private BigDecimal deptTeamConsumeAmount;
/**
* 团队消费pv汇总
*/
@TableField("DEPT_TEAM_CONSUME_PV")
private BigDecimal deptTeamConsumePv;
/**
* 团队月消费pv
*/
@TableField("DEPT_TEAM_MONTH_AMOUNT")
private BigDecimal deptTeamMonthAmount;
/**
* 团队月消费pv
*/
@TableField("DEPT_TEAM_MONTH_PV")
private BigDecimal deptTeamMonthPv;
/**
* 小区pv
*/
@TableField("SMALL_AREA_PV")
private BigDecimal smallAreaPv;
/**
* 考核状态
*/
@TableField("ASSESS_STATUS")
private Integer assessStatus;
/**
* 是否当月会员 0= 1=
*/
@TableField("MONTH_MEMBER")
private Integer monthMember;
/**
* 支付时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField("PAY_TIME")
private Date payTime;
/**
* 极差店铺
*/
@TableField("RANGE_STORE_STATUS")
private Integer rangeStoreStatus;
}

View File

@ -1,36 +0,0 @@
package com.hzs.common.domain.member.achieve.ext;
import com.hzs.common.domain.member.achieve.CuMemberRange;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
/**
* @description: 极差扩展
* @author: sui q
* @time: 2024/10/15 15:32
* @classname: CuMemberRangeExt
* @package_name: com.hzs.common.domain.member.achieve.ext
* version 1.0.0
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class CuMemberRangeExt extends CuMemberRange {
/**
* 极差奖衔
*/
private Integer rangeAwardsValue;
/**
* 订单主键
*/
private Long pkOrder;
/**
* 新增推荐有效数量
*/
private Integer newEffectiveNum;
}

View File

@ -63,6 +63,15 @@ public class CuMemberRetailRangeExt extends CuMemberRetailRange {
*/
private BigDecimal smallAreaConsumePv;
/**
* 培育津贴代数
*/
private Integer coachAlgebra;
/**
* 培育津贴比例
*/
private BigDecimal coachRatio;
/**
* 县级名称
*/

View File

@ -11,12 +11,7 @@ import lombok.*;
import lombok.experimental.Accessors;
/**
* <p>
* 会员奖金-辅导收益明细表
* </p>
*
* @author hzs
* @since 2022-11-15
*/
@Data
@EqualsAndHashCode(callSuper = true)

View File

@ -4,13 +4,6 @@ import com.hzs.common.domain.member.detail.CuMemberAssess;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* @Description:
* @Author: sui q
* @Time: 2022/11/9 17:04
* @Classname: CuMemberAssessExt
* @PackageName: com.hzs.common.domain.member.ext
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class CuMemberAssessExt extends CuMemberAssess {

View File

@ -1,101 +0,0 @@
package com.hzs.common.domain.system.config;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import com.hzs.common.core.web.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* 极差奖衔配置表
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("BD_RANGE_AWARDS")
public class BdRangeAwards extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId("PK_ID")
private Integer pkId;
/**
* 奖衔等级
*/
@TableField("AWARDS_NAME")
private String awardsName;
/**
* 奖衔值
*/
@TableField("AWARDS_VALUE")
private Integer awardsValue;
/**
* 团队业绩
*/
@TableField("TEAM_CONSUME_CHECK")
private BigDecimal teamConsumeCheck;
/**
* 小区考核
*/
@TableField("COMMUNITY_CHECK")
private BigDecimal communityCheck;
/**
* 消费业绩
*/
@TableField("CONSUME_PV")
private BigDecimal consumePv;
/**
* 月考核pv
*/
@TableField("PURCHASE_CHECK")
private BigDecimal purchaseCheck;
/**
* 推荐数量
*/
@TableField("RECOMMEND_NUM")
private Integer recommendNum;
/**
* 部门数量
*/
@TableField("PLACE_NUM")
private Integer placeNum;
/**
* 考核奖衔
*/
@TableField("CHECK_AWARDS")
private Integer checkAwards;
/**
* 极差比例
*/
@TableField("RANGE_RATIO")
private BigDecimal rangeRatio;
/**
* 平级比例
*/
@TableField("ORDINARY_RATIO")
private BigDecimal ordinaryRatio;
/**
* 映射奖衔
*/
@TableField("PK_AWARDS")
private Integer pkAwards;
}