From 68a3672999b666ca83dedf190849ac3c610b01e3 Mon Sep 17 00:00:00 2001 From: KKSU <15274802129@163.com> Date: Fri, 23 Feb 2024 11:41:04 +0800 Subject: [PATCH] 抽奖 --- src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java | 284 +++++++++++++++++++++++++++++++------------------------- 1 files changed, 158 insertions(+), 126 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java index c18fd31..517e151 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java @@ -825,11 +825,22 @@ List<MallMember> secondLevelRecord = getStarRecord(thirdLevelRecord, MemberLevelEnum.SECOND_LEVEL.name(), amount, orderNo, 0L,MoneyFlowTypeEnum.STAR_PERK_TWO.getValue()); } public static void main(String[] args) { - Long number = 0L; // 这里可以替换成你需要检查的数字 - if (number % 3 == 0) { - System.out.println(number + " 可以被3整除"); - } else { - System.out.println(number + " 不能被3整除"); +// Long number = 0L; // 这里可以替换成你需要检查的数字 +// if (number % 3 == 0) { +// System.out.println(number + " 可以被3整除"); +// } else { +// System.out.println(number + " 不能被3整除"); +// } +// +// DateTime nowTimeFormat = DateUtil.parseTime(DateUtil.formatTime(DateUtil.date())); +// System.out.println(nowTimeFormat); + BigDecimal bigDecimal = new BigDecimal("1"); + BigDecimal cycle = new BigDecimal("2"); + BigDecimal remainder = bigDecimal.divide(new BigDecimal(String.valueOf(cycle)),0,BigDecimal.ROUND_DOWN);//取余 + System.out.println(remainder); + BigDecimal remainderDirect = bigDecimal.divide(new BigDecimal(String.valueOf(cycle)),0,BigDecimal.ROUND_DOWN);//取余 + if(remainderDirect.compareTo(BigDecimal.ONE) == 0){ + System.out.println(remainderDirect); } } @Override @@ -880,8 +891,24 @@ /** * 用户的账户增加对应的收益 */ + + BigDecimal totalPerk = mallProductBuy.getTotalPerk(); + if(BigDecimal.ZERO.compareTo(totalPerk) >= 0){ + mallProductBuy.setTotalPerk(BigDecimal.ZERO); + mallProductBuyMapper.updateById(mallProductBuy); + continue; + } BigDecimal nftTotal = mallProductBuy.getNftTotal(); BigDecimal profit = nftTotal.multiply(profitPercent.multiply(new BigDecimal(0.01))); + + if(totalPerk.compareTo(profit) <= 0){ + profit = totalPerk; + mallProductBuy.setTotalPerk(BigDecimal.ZERO); + mallProductBuyMapper.updateById(mallProductBuy); + }else{ + mallProductBuy.setTotalPerk(totalPerk.subtract(profit).setScale(2,BigDecimal.ROUND_DOWN)); + mallProductBuyMapper.updateById(mallProductBuy); + } // insertSell(mallProductBuy.getMemberId(),profit,profit,BigDecimal.ZERO,BigDecimal.ZERO); String orderNoSY = MallUtils.getOrderNum("SYNFT"); mallMoneyFlowService.addMoneyFlow( @@ -899,104 +926,107 @@ mallMemberAmountMapper.updateTrendsNftById(mallMemberAmountMine); - /** - * 更新用户上级收益,冻结7天,7天时间到期自动释放到动态钱包 - */ - Long memberId = mallProductBuy.getMemberId(); - MallMember mallMember = memberMapper.selectById(memberId); - if(ObjectUtil.isNotEmpty(mallMember)){ - //直推 - String referrerId = mallMember.getReferrerId(); - MallMember directMember = memberMapper.selectInfoByInviteId(referrerId); - if(ObjectUtil.isNotEmpty(directMember)){ - BigDecimal basicPerkDirectPercent = new BigDecimal(dataDictionaryCustomMapper.selectDicDataByTypeAndCode( - DataDictionaryEnum.BASIC_PERK_DIRECT.getType(), - DataDictionaryEnum.BASIC_PERK_DIRECT.getCode() - ).getValue()).multiply(new BigDecimal("0.01")); -// BigDecimal basicPerkDirect = profit.multiply(basicPerkDirectPercent).setScale(2, BigDecimal.ROUND_DOWN); - BigDecimal basicPerkDirect = nftTotal.multiply(basicPerkDirectPercent).setScale(2, BigDecimal.ROUND_DOWN); - /** - * 先插入流水记录,然后定时器每小时,循环一次找寻对应的数据执行 - */ - String orderNo = MallUtils.getOrderNum("DNFT"); - mallMoneyFlowService.addMoneyFlow( - directMember.getId(), - basicPerkDirect, - MoneyFlowTypeNewEnum.BASIC_PERK_DIRECT.getValue(), - orderNo, - null, - FlowTypeNewEnum.NFT.getValue(), - MoneyFlowTypeNewEnum.BASIC_PERK_DIRECT.getDescrition(), - AppContants.MEMBER_FLOW_ING); - - MallMemberAmount mallMemberAmountDirect = mallMemberAmountMapper.selectByMemberId(directMember.getId()); - mallMemberAmountDirect.setFrozenNft(mallMemberAmountDirect.getFrozenNft().add(basicPerkDirect)); - mallMemberAmountMapper.updateFrozenNftById(mallMemberAmountDirect); - } - + BigDecimal remainderDirect = bigDecimal.divide(new BigDecimal(String.valueOf(cycle)),0,BigDecimal.ROUND_DOWN);//取余 + if(remainderDirect.compareTo(BigDecimal.ONE) == 0){ /** - * 团队奖励 - * + * 更新用户上级收益,冻结7天,7天时间到期自动释放到动态钱包 */ - String level = MemberLevelNewEnum.ZERO_LEVEL.getType(); - BigDecimal equalsPerkBasic = BigDecimal.ZERO;//平级收益,假设平级,则算平级收益的百分比收益 - boolean flag = false; - String parentId = mallMember.getReferrerId(); - if (StrUtil.isBlank(parentId)) { - flag = true; - } - while (!flag) { - MallMember mallMemberRef = memberMapper.selectInfoByInviteId(parentId); - String levelRef = mallMemberRef.getLevel(); - //会员等级为ZERO_LEVEL,则不参与团队返佣 - if(!MemberLevelNewEnum.ZERO_LEVEL.getType().equals(levelRef)){ - int compareLevel = MemberLevelNewEnum.ZERO_LEVEL.compareLevel(level, levelRef); - DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( - levelRef, levelRef - ); - TeamPerkDto teamPerkDto = JSONObject.parseObject(dataDictionaryCustom.getValue(), TeamPerkDto.class); - if(compareLevel == 0){//团队奖励 - BigDecimal PerkPercent = new BigDecimal(teamPerkDto.getPerkPercent()) - .multiply(new BigDecimal("0.01")); - BigDecimal teamPerk = PerkPercent.multiply(profit).setScale(2,BigDecimal.ROUND_DOWN); - /** - * 先插入流水记录,然后定时器循环,找寻对应的数据执行 - */ - String orderNo = MallUtils.getOrderNum("TNFT"); + Long memberId = mallProductBuy.getMemberId(); + MallMember mallMember = memberMapper.selectById(memberId); + if(ObjectUtil.isNotEmpty(mallMember)){ + //直推 + String referrerId = mallMember.getReferrerId(); + MallMember directMember = memberMapper.selectInfoByInviteId(referrerId); + if(ObjectUtil.isNotEmpty(directMember)){ + BigDecimal basicPerkDirectPercent = new BigDecimal(dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + DataDictionaryEnum.BASIC_PERK_DIRECT.getType(), + DataDictionaryEnum.BASIC_PERK_DIRECT.getCode() + ).getValue()).multiply(new BigDecimal("0.01")); +// BigDecimal basicPerkDirect = profit.multiply(basicPerkDirectPercent).setScale(2, BigDecimal.ROUND_DOWN); + BigDecimal basicPerkDirect = nftTotal.multiply(basicPerkDirectPercent).setScale(2, BigDecimal.ROUND_DOWN); + /** + * 先插入流水记录,然后定时器每小时,循环一次找寻对应的数据执行 + */ + String orderNo = MallUtils.getOrderNum("DNFT"); + mallMoneyFlowService.addMoneyFlow( + directMember.getId(), + basicPerkDirect, + MoneyFlowTypeNewEnum.BASIC_PERK_DIRECT.getValue(), + orderNo, + null, + FlowTypeNewEnum.NFT.getValue(), + MoneyFlowTypeNewEnum.BASIC_PERK_DIRECT.getDescrition(), + AppContants.MEMBER_FLOW_ING); - if(teamPerk.compareTo(BigDecimal.ZERO) > 0){ - insertFlowUpdateFrozenNft( - orderNo, - mallMemberRef.getId(), - teamPerk, - MoneyFlowTypeNewEnum.TEAM_PERK_DIRECT.getValue(), - FlowTypeNewEnum.NFT.getValue(), - MoneyFlowTypeNewEnum.TEAM_PERK_DIRECT.getDescrition(), - AppContants.MEMBER_FLOW_ING); - } - equalsPerkBasic = teamPerk; - level = levelRef; - }else if(compareLevel == 2){//平级奖励 - BigDecimal equalsPerkPercent = new BigDecimal(teamPerkDto.getEqualsPerkPercent()) - .multiply(new BigDecimal("0.01")); - BigDecimal equalsPerk = equalsPerkPercent.multiply(equalsPerkBasic).setScale(2,BigDecimal.ROUND_DOWN); - String orderNo = MallUtils.getOrderNum("PJNFT"); - if(equalsPerk.compareTo(BigDecimal.ZERO) > 0){ - insertFlowUpdateFrozenNft( - orderNo, - mallMemberRef.getId(), - equalsPerk, - MoneyFlowTypeNewEnum.TEAM_PERK_EQUALS.getValue(), - FlowTypeNewEnum.NFT.getValue(), - MoneyFlowTypeNewEnum.TEAM_PERK_EQUALS.getDescrition(), - AppContants.MEMBER_FLOW_ING); - } - equalsPerkBasic = equalsPerk; - } + MallMemberAmount mallMemberAmountDirect = mallMemberAmountMapper.selectByMemberId(directMember.getId()); + mallMemberAmountDirect.setFrozenNft(mallMemberAmountDirect.getFrozenNft().add(basicPerkDirect)); + mallMemberAmountMapper.updateFrozenNftById(mallMemberAmountDirect); } - parentId = mallMemberRef.getReferrerId(); - if (StrUtil.isBlank(mallMemberRef.getReferrerId())) { + + /** + * 团队奖励 + * + */ + String level = MemberLevelNewEnum.ZERO_LEVEL.getType(); + BigDecimal equalsPerkBasic = BigDecimal.ZERO;//平级收益,假设平级,则算平级收益的百分比收益 + boolean flag = false; + String parentId = mallMember.getReferrerId(); + if (StrUtil.isBlank(parentId)) { flag = true; + } + while (!flag) { + MallMember mallMemberRef = memberMapper.selectInfoByInviteId(parentId); + String levelRef = mallMemberRef.getLevel(); + //会员等级为ZERO_LEVEL,则不参与团队返佣 + if(!MemberLevelNewEnum.ZERO_LEVEL.getType().equals(levelRef)){ + int compareLevel = MemberLevelNewEnum.ZERO_LEVEL.compareLevel(level, levelRef); + DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + levelRef, levelRef + ); + TeamPerkDto teamPerkDto = JSONObject.parseObject(dataDictionaryCustom.getValue(), TeamPerkDto.class); + if(compareLevel == 0){//团队奖励 + BigDecimal PerkPercent = new BigDecimal(teamPerkDto.getPerkPercent()) + .multiply(new BigDecimal("0.01")); + BigDecimal teamPerk = PerkPercent.multiply(profit).setScale(2,BigDecimal.ROUND_DOWN); + /** + * 先插入流水记录,然后定时器循环,找寻对应的数据执行 + */ + String orderNo = MallUtils.getOrderNum("TNFT"); + + if(teamPerk.compareTo(BigDecimal.ZERO) > 0){ + insertFlowUpdateFrozenNft( + orderNo, + mallMemberRef.getId(), + teamPerk, + MoneyFlowTypeNewEnum.TEAM_PERK_DIRECT.getValue(), + FlowTypeNewEnum.NFT.getValue(), + MoneyFlowTypeNewEnum.TEAM_PERK_DIRECT.getDescrition(), + AppContants.MEMBER_FLOW_ING); + } + equalsPerkBasic = teamPerk; + level = levelRef; + }else if(compareLevel == 2){//平级奖励 + BigDecimal equalsPerkPercent = new BigDecimal(teamPerkDto.getEqualsPerkPercent()) + .multiply(new BigDecimal("0.01")); + BigDecimal equalsPerk = equalsPerkPercent.multiply(equalsPerkBasic).setScale(2,BigDecimal.ROUND_DOWN); + String orderNo = MallUtils.getOrderNum("PJNFT"); + if(equalsPerk.compareTo(BigDecimal.ZERO) > 0){ + insertFlowUpdateFrozenNft( + orderNo, + mallMemberRef.getId(), + equalsPerk, + MoneyFlowTypeNewEnum.TEAM_PERK_EQUALS.getValue(), + FlowTypeNewEnum.NFT.getValue(), + MoneyFlowTypeNewEnum.TEAM_PERK_EQUALS.getDescrition(), + AppContants.MEMBER_FLOW_ING); + } + equalsPerkBasic = equalsPerk; + } + } + parentId = mallMemberRef.getReferrerId(); + if (StrUtil.isBlank(mallMemberRef.getReferrerId())) { + flag = true; + } } } } @@ -1049,30 +1079,6 @@ * 3、更新卖单子表的数据 */ agentProducer.sendFcmOrderBuyCancelMsg(mallProductBuyRecord.getId()); - -// Long buyId = mallProductBuyRecord.getBuyId(); -// Long sellRecordId = mallProductBuyRecord.getSellRecordId(); -// MallProductBuy mallProductBuy = mallProductBuyMapper.selectById(buyId); -// Long memberIdBuy = mallProductBuy.getMemberId(); -// //冻结账户 -// MallMember mallMemberBuy = memberMapper.selectById(memberIdBuy); -// mallMemberBuy.setIsFrozen(ProductEnum.MEMBER_FROZEN.getValue()); -// memberMapper.updateById(mallMemberBuy); -// //更新买单子表的数据 -// mallProductBuyRecord.setState(ProductEnum.PRODUCT_MATE_STATE_FAIL.getValue()); -// mallProductBuyRecordMapper.updateById(mallProductBuyRecord); -// //更新买单主表 -// mallProductBuy.setNftAva(mallProductBuy.getNftAva().add(mallProductBuyRecord.getPickNftCnt())); -// mallProductBuyMapper.updateById(mallProductBuy); -// //更新卖单子表的数据 -// MallProductSellRecord mallProductSellRecord = mallProductSellRecordMapper.selectById(sellRecordId); -// mallProductSellRecord.setState(ProductEnum.PRODUCT_MATE_STATE_FAIL.getValue()); -// mallProductSellRecordMapper.updateById(mallProductSellRecord); -// //更新卖单主表 -// Long sellId = mallProductSellRecord.getSellId(); -// MallProductSell mallProductSell = mallProductSellMapper.selectById(sellId); -// mallProductSell.setNftCntAva(mallProductSell.getNftCntAva().add(mallProductSellRecord.getNftCnt())); -// mallProductSellMapper.updateById(mallProductSell); } } } @@ -1119,12 +1125,16 @@ if(CollUtil.isEmpty(mallProductNfts)){ return; } - DateTime nowTime = DateUtil.parseTime(DateUtil.formatTime(DateUtil.date())); + DateTime nowTime = DateUtil.date(); + DateTime nowTimeFormat = DateUtil.parseTime(DateUtil.formatTime(nowTime)); DataDictionaryCustom endTimeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.YU_YUE_END_TIME.getType(), DataDictionaryEnum.YU_YUE_END_TIME.getCode() ); DateTime endTime = DateUtil.parseTime(endTimeDic.getValue()); + if(nowTimeFormat.compareTo(endTime) < 0){ + return; + } for(MallProductNft mallProductNft : mallProductNfts){ Long nftId = mallProductNft.getId(); List<MallProductBuy> mallProductBuys = mallProductBuyMapper.selectListByStateAndProductNFTId( @@ -1136,9 +1146,9 @@ } for(MallProductBuy mallProductBuy : mallProductBuys){ /** - * 当前时间比结束时间大 + * 当前时间比创建时间大 */ - if(nowTime.compareTo(endTime) >= 0){ + if(nowTime.compareTo(mallProductBuy.getCreatedTime()) >= 0){ /** * 返回令牌 * 预约记录超时 @@ -1409,8 +1419,13 @@ //上级 String referrerId = mallMember.getReferrerId(); MallMember mallMemberRef = memberMapper.selectInfoByInviteId(referrerId); + if(ObjectUtil.isEmpty(mallMemberRef)){ + continue; + } List<MallMember> mallMembersAll = memberMapper.selectAllChildAgentListByInviteId(referrerId); - + if(ObjectUtil.isEmpty(mallMembersAll)){ + continue; + } List<MallMember> mallMembers = memberMapper.selectByRefererId(referrerId); Set<Long> mallMembersSet = mallMembers.stream().map(MallMember::getId).collect(Collectors.toSet()); mallMembersSet.retainAll(collect); @@ -1453,6 +1468,23 @@ } } + @Override + public void memberLevelDown() { + List<MallProductBuy> mallProductBuys = mallProductBuyMapper.selectTotalPerk(); + if(CollUtil.isEmpty(mallProductBuys)){ + return; + } + for(MallProductBuy mallProductBuy : mallProductBuys){ + BigDecimal totalPerk = mallProductBuy.getTotalPerk(); + if(BigDecimal.ZERO.compareTo(totalPerk) >= 0 ){ + Long memberId = mallProductBuy.getMemberId(); + MallMember mallMember = memberMapper.selectById(memberId); + mallMember.setLevel(AgentLevelEnum.ZERO_LEVEL.getCode()); + memberMapper.updateById(mallMember); + } + } + } + public void insertSell(Long memberId,BigDecimal nftCnt,BigDecimal nftCntAva, BigDecimal nftFee,BigDecimal fcmFeeCnt){ String orderNo = MallUtils.getOrderNum("NFT"); -- Gitblit v1.9.1