| | |
| | | import java.math.BigDecimal; |
| | | |
| | | /** |
| | | * shareSpeedPercent 共享区加速百分比 |
| | | * shareMaxPercent 共享区加速最大值 |
| | | * smallAchieve 升级要求业绩 |
| | | * teamPercent 团队静态收益 |
| | | * orderSalePercent 全网销售额加权平分分红 |
| | | * {"shareMinPercent":"0.00004","shareMaxPercent":"0.01","smallAchieve":"20000","teamPercent":"0.15","orderSalePercent":"0"} |
| | | * {"shareMinPercent":"0.00005","shareMaxPercent":"0.012","smallAchieve":"60000","teamPercent":"0.3","orderSalePercent":"0"} |
| | | * {"shareMinPercent":"0.00006","shareMaxPercent":"0.014","smallAchieve":"200000","teamPercent":"0.45","orderSalePercent":"0"} |
| | | * {"shareMinPercent":"0.00007","shareMaxPercent":"0.016","smallAchieve":"600000","teamPercent":"0.60","orderSalePercent":"0"} |
| | | * {"shareMinPercent":"0.00008","shareMaxPercent":"0.018","smallAchieve":"2000000","teamPercent":"0.75","orderSalePercent":"0.02"} |
| | | * {"shareMinPercent":"0.00009","shareMaxPercent":"0.020","smallAchieve":"6000000","teamPercent":"0.90","orderSalePercent":"0.02"} |
| | | * {"shareMinPercent":"0.0001","shareMaxPercent":"0.022","smallAchieve":"20000000","teamPercent":"1","orderSalePercent":"0.02"} |
| | | * {"shareMinPercent":"0.00004","shareMaxPercent":"0.01","smallAchieve":"20000","teamPercent":"0.15","orderSalePercent":"0","lastAgentCnt":"0","buyMaxAmount","3000"} |
| | | * {"shareMinPercent":"0.00005","shareMaxPercent":"0.012","smallAchieve":"60000","teamPercent":"0.3","orderSalePercent":"0","lastAgentCnt":"2","buyMaxAmount","3000"} |
| | | * {"shareMinPercent":"0.00006","shareMaxPercent":"0.014","smallAchieve":"200000","teamPercent":"0.45","orderSalePercent":"0","lastAgentCnt":"2","buyMaxAmount","3000"} |
| | | * {"shareMinPercent":"0.00007","shareMaxPercent":"0.016","smallAchieve":"600000","teamPercent":"0.60","orderSalePercent":"0","lastAgentCnt":"2","buyMaxAmount","3000"} |
| | | * {"shareMinPercent":"0.00008","shareMaxPercent":"0.018","smallAchieve":"2000000","teamPercent":"0.75","orderSalePercent":"0.02","lastAgentCnt":"2","buyMaxAmount","3000"} |
| | | * {"shareMinPercent":"0.00009","shareMaxPercent":"0.020","smallAchieve":"6000000","teamPercent":"0.90","orderSalePercent":"0.02","lastAgentCnt":"2","buyMaxAmount","3000"} |
| | | * {"shareMinPercent":"0.0001","shareMaxPercent":"0.022","smallAchieve":"20000000","teamPercent":"1","orderSalePercent":"0.02","lastAgentCnt":"2","buyMaxAmount","3000"} |
| | | */ |
| | | @Data |
| | | public class TeamLevelPerk { |
| | |
| | | @Getter |
| | | public enum FundFlowEnum { |
| | | //团队静态收益 |
| | | TEAM_PERK("TEAM_PERK", 7), |
| | | TEAM_PERK_V7("TEAM_PERK_V7", 13), |
| | | //团队静态收益 |
| | | TEAM_PERK_V6("TEAM_PERK_V6", 12), |
| | | //团队静态收益 |
| | | TEAM_PERK_V5("TEAM_PERK_V5", 11), |
| | | //团队静态收益 |
| | | TEAM_PERK_V4("TEAM_PERK_V4", 10), |
| | | //团队静态收益 |
| | | TEAM_PERK_V3("TEAM_PERK_V3", 9), |
| | | //团队静态收益 |
| | | TEAM_PERK_V2("TEAM_PERK_V2", 8), |
| | | //团队静态收益 |
| | | TEAM_PERK_V1("TEAM_PERK_V1", 7), |
| | | //直推 |
| | | DIRECT_AMOUNT("DIRECT_AMOUNT", 6), |
| | | //增加余额 |
| | |
| | | import cc.mrbird.febs.dapp.entity.MallOrderInfo; |
| | | import cc.mrbird.febs.dapp.vo.AdminMallMoneyFlowVo; |
| | | import cc.mrbird.febs.dapp.vo.DappFundFlowVo; |
| | | import cn.hutool.core.date.DateTime; |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | |
| | | |
| | | IPage<AdminMallMoneyFlowVo> selectOrderMoneyFlowInPage(Page<AdminMallMoneyFlowVo> page, @Param("record")MallOrderInfo mallOrder); |
| | | |
| | | List<DappFundFlowEntity> selectListByMemberIdAndTypeAndDate(@Param("memberId")Long memberId, @Param("type")int code, @Param("dateStr")String now); |
| | | List<DappFundFlowEntity> selectListByMemberIdAndTypeAndDate(@Param("memberId")Long memberId, @Param("type")int code, @Param("dateStr") DateTime now); |
| | | } |
| | |
| | | void speedDirectPerkMsg(Long memberId); |
| | | |
| | | void teamStaticPerk(); |
| | | |
| | | } |
| | |
| | | Long directMemberId = directMember.getId(); |
| | | chainProducer.sendDirectPerkMsg(directMemberId); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | @Override |
| | |
| | | * 获取用户前一天的所有返利记录 |
| | | */ |
| | | List<DappFundFlowEntity> dappFundFlowEntities = dappFundFlowDao.selectListByMemberIdAndTypeAndDate(memberId, |
| | | FundFlowEnum.STATIC_RELEASE.getCode(),DateUtil.now()); |
| | | FundFlowEnum.STATIC_RELEASE.getCode(),DateUtil.offsetHour(DateUtil.date(),12)); |
| | | for(DappFundFlowEntity dappFundFlowEntity : dappFundFlowEntities){ |
| | | BigDecimal staticReleaseAmount = dappFundFlowEntity.getAmount(); |
| | | BigDecimal directReleaseAmount = staticReleaseAmount.multiply(directRelease).setScale(2, BigDecimal.ROUND_DOWN); |
| | |
| | | |
| | | @Override |
| | | public void teamStaticPerk() { |
| | | List<DappMemberEntity> dappMemberEntities = dappMemberDao.selectMemberByAccountType(MemberLevelEnum.V1.getType()); |
| | | if(CollUtil.isEmpty(dappMemberEntities)){ |
| | | return; |
| | | } |
| | | |
| | | //平级 |
| | | DataDictionaryCustom teamPerkEqualsDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | DataDictionaryEnum.TEAM_PERK_LEVEL_EQUALS.getType(), |
| | |
| | | DataDictionaryEnum.STATIC_RELEASE.getCode()); |
| | | BigDecimal staticRelease = new BigDecimal(ObjectUtil.isEmpty(staticReleaseDic) ? "0.006" : staticReleaseDic.getValue()); |
| | | |
| | | List<DappMemberEntity> dappMemberEntities = dappMemberDao.selectMemberByAccountType(MemberLevelEnum.V1.getType()); |
| | | teamStaticPerkMemberLevel(dappMemberEntities,teamPerkEquals,staticRelease,FundFlowEnum.TEAM_PERK_V1.getCode()); |
| | | |
| | | List<DappMemberEntity> v2DappMemberEntities = dappMemberDao.selectMemberByAccountType(MemberLevelEnum.V2.getType()); |
| | | teamStaticPerkMemberLevel(v2DappMemberEntities,teamPerkEquals,staticRelease,FundFlowEnum.TEAM_PERK_V2.getCode()); |
| | | |
| | | List<DappMemberEntity> v3DappMemberEntities = dappMemberDao.selectMemberByAccountType(MemberLevelEnum.V3.getType()); |
| | | teamStaticPerkMemberLevel(v3DappMemberEntities,teamPerkEquals,staticRelease,FundFlowEnum.TEAM_PERK_V3.getCode()); |
| | | |
| | | List<DappMemberEntity> v4DappMemberEntities = dappMemberDao.selectMemberByAccountType(MemberLevelEnum.V4.getType()); |
| | | teamStaticPerkMemberLevel(v4DappMemberEntities,teamPerkEquals,staticRelease,FundFlowEnum.TEAM_PERK_V4.getCode()); |
| | | |
| | | List<DappMemberEntity> v5DappMemberEntities = dappMemberDao.selectMemberByAccountType(MemberLevelEnum.V5.getType()); |
| | | teamStaticPerkMemberLevel(v5DappMemberEntities,teamPerkEquals,staticRelease,FundFlowEnum.TEAM_PERK_V5.getCode()); |
| | | |
| | | List<DappMemberEntity> v6DappMemberEntities = dappMemberDao.selectMemberByAccountType(MemberLevelEnum.V6.getType()); |
| | | teamStaticPerkMemberLevel(v6DappMemberEntities,teamPerkEquals,staticRelease,FundFlowEnum.TEAM_PERK_V6.getCode()); |
| | | |
| | | List<DappMemberEntity> v7DappMemberEntities = dappMemberDao.selectMemberByAccountType(MemberLevelEnum.V7.getType()); |
| | | teamStaticPerkMemberLevel(v7DappMemberEntities,teamPerkEquals,staticRelease,FundFlowEnum.TEAM_PERK_V7.getCode()); |
| | | |
| | | } |
| | | |
| | | public void shareStaticPerk(List<DappMemberEntity> dappMemberEntities,int code) { |
| | | if(CollUtil.isEmpty(dappMemberEntities)){ |
| | | return; |
| | | } |
| | | for(DappMemberEntity dappMemberEntity : dappMemberEntities){ |
| | | if(StrUtil.isNotEmpty(dappMemberEntity.getRefererIds())){ |
| | | String referrerIds = dappMemberEntity.getRefererIds(); |
| | | List<String> referrerIdList = StrUtil.splitTrim(referrerIds, ","); |
| | | |
| | | if(CollUtil.isNotEmpty(referrerIdList)){ |
| | | List<DappMemberEntity> mallMemberTeamPerk = dappMemberDao.selectByInviteIds(referrerIdList); |
| | | } |
| | | } |
| | | |
| | | if(CollUtil.isNotEmpty(mallMemberTeamPerk)){ |
| | | String levelNormal = MemberLevelEnum.V1.getType(); |
| | | BigDecimal cashPercentNormal = BigDecimal.ZERO; |
| | | |
| | | for(DappMemberEntity teamPerkMember : mallMemberTeamPerk){ |
| | | public void teamStaticPerkMemberLevel(List<DappMemberEntity> dappMemberEntities, |
| | | BigDecimal teamPerkEquals, |
| | | BigDecimal staticRelease, |
| | | int code) { |
| | | if(CollUtil.isEmpty(dappMemberEntities)){ |
| | | return; |
| | | } |
| | | for(DappMemberEntity teamPerkMember : dappMemberEntities){ |
| | | String level = teamPerkMember.getAccountType(); |
| | | //比较两个级别的大小,level大于levelNormal返回1 |
| | | int compareMin = MemberLevelEnum.V1.compareLevel(level, levelNormal); |
| | | int compareMin = MemberLevelEnum.V1.compareLevel(level, MemberLevelEnum.V1.getType()); |
| | | int compareMax = MemberLevelEnum.V1.compareLevel(MemberLevelEnum.V7.getType(), level); |
| | | if(compareMin >= 1 && compareMax >= 1){ |
| | | DataDictionaryCustom teamPerkMemberDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | "TEAM_LEVEL", level); |
| | | TeamLevelPerk adminAgentInfo = JSONObject.parseObject(teamPerkMemberDic.getValue(), TeamLevelPerk.class); |
| | | BigDecimal cashPercent = adminAgentInfo.getTeamPercent(); |
| | | //极差 |
| | | if(MemberLevelEnum.V1.compareLevel(levelNormal, level) == 0){ |
| | | //平级 |
| | | cashPercent = cashPercent.subtract(teamPerkEquals); |
| | | }else{ |
| | | cashPercent = cashPercent.subtract(cashPercentNormal); |
| | | } |
| | | //总业绩 |
| | | BigDecimal teamIncomeMax = BigDecimal.ZERO; |
| | | //所有直推团队,就是这个会员的所有区域的业绩。 |
| | | |
| | | // 直推用户 |
| | | List<DappMemberEntity> childs = dappMemberDao.selectMemberInfoByRefererId(teamPerkMember.getInviteId()); |
| | | List<DappMemberEntity> collect = childs.stream() |
| | | .filter(dappMemberEntity -> dappMemberEntity.getAccountType() == MemberLevelEnum.V1.getType()) |
| | | .collect(Collectors.toList()); |
| | | //极差 |
| | | if(CollUtil.isNotEmpty(collect)){ |
| | | //平级 |
| | | cashPercent = teamPerkEquals; |
| | | } |
| | | //所有直推团队,就是这个会员的所有区域的业绩。 |
| | | List<String> childsInviteIds = childs.stream().map(DappMemberEntity::getInviteId).collect(Collectors.toList()); |
| | | //总业绩 |
| | | BigDecimal teamIncomeMax = BigDecimal.ZERO; |
| | | for(String inviteId : childsInviteIds){ |
| | | BigDecimal totalIncomeMember = dappMemberDao.selectAllAchieveByInviteId(inviteId); |
| | | teamIncomeMax = teamIncomeMax.add(totalIncomeMember); |
| | |
| | | //V1加速团队静态收益的15%=每日静态的20000*6‰*15%=18元的额外释放加速 |
| | | BigDecimal cashAmount = teamIncomeMax.multiply(cashPercent).multiply(staticRelease).setScale(2, BigDecimal.ROUND_DOWN); |
| | | |
| | | BigDecimal bigDecimal = sendPerk(teamPerkMember, cashAmount, null, FundFlowEnum.TEAM_PERK.getCode()); |
| | | levelNormal = level; |
| | | cashPercentNormal = adminAgentInfo.getTeamPercent(); |
| | | BigDecimal bigDecimal = sendPerk(teamPerkMember, cashAmount, null, code); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | private BigDecimal sendPerk(DappMemberEntity parentMember,BigDecimal directReleaseAmount,Long orderId |
| | | ,Integer fundFlowEnumType){ |
| | | |
| | | BigDecimal realScoreReduce = BigDecimal.ZERO; |
| | | //用户减少赠送积分 |
| | | if(BigDecimal.ZERO.compareTo(directReleaseAmount) >= 0){ |
| | | return realScoreReduce; |
| | | } |
| | | /** |
| | | * 减少业绩 |
| | | */ |
| | | List<MallAchieveRecord> mallAchieveRecords = mallAchieveRecordMapper.selectListByMemberId(parentMember.getId()); |
| | | if(CollUtil.isEmpty(mallAchieveRecords)){ |
| | | return realScoreReduce; |
| | | } |
| | | BigDecimal totalAchieve = mallAchieveRecords.stream().map(MallAchieveRecord::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | if(directReleaseAmount.compareTo(totalAchieve) >= 0){ |
| | | realScoreReduce = totalAchieve; |
| | | for(MallAchieveRecord mallAchieveRecord : mallAchieveRecords){ |
| | | mallAchieveRecord.setAmount(BigDecimal.ZERO); |
| | | mallAchieveRecord.setIsNormal(2); |
| | | mallAchieveRecordMapper.updateById(mallAchieveRecord); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 用户减少赠送积分 |
| | | */ |
| | | DappWalletMineEntity dappWalletMineEntity = dappWalletMineDao.selectByMemberId(parentMember.getId()); |
| | | BigDecimal totalScore = dappWalletMineEntity.getTotalAmount(); |
| | | BigDecimal availableScore = dappWalletMineEntity.getAvailableAmount(); |
| | |
| | | dappSystemService.teamStaticPerk(); |
| | | } |
| | | |
| | | |
| | | } |