From 3baddff99987a5a98b5d55504853f4995018533b Mon Sep 17 00:00:00 2001 From: KKSU <15274802129@163.com> Date: Mon, 18 Mar 2024 16:03:02 +0800 Subject: [PATCH] 抽奖 --- src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java | 119 +++++++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 95 insertions(+), 24 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 7bdf4dd..e9db01c 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 @@ -891,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))); + BigDecimal profit = nftTotal.multiply(profitPercent.multiply(new BigDecimal(0.01))).setScale(2,BigDecimal.ROUND_DOWN); + + 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( @@ -908,6 +924,11 @@ MallMemberAmount mallMemberAmountMine = mallMemberAmountMapper.selectByMemberId(mallProductBuy.getMemberId()); mallMemberAmountMine.setTrendsNft(mallMemberAmountMine.getTrendsNft().add(profit)); mallMemberAmountMapper.updateTrendsNftById(mallMemberAmountMine); + + MallMemberAmount mallMemberAmountPerk = mallMemberAmountMapper.selectByMemberId(mallProductBuy.getMemberId()); + mallMemberAmountPerk.setTotalPerk(mallMemberAmountPerk.getTotalPerk().subtract(profit)); + mallMemberAmountMapper.updateTotalPerkById(mallMemberAmountPerk); + BigDecimal remainderDirect = bigDecimal.divide(new BigDecimal(String.valueOf(cycle)),0,BigDecimal.ROUND_DOWN);//取余 if(remainderDirect.compareTo(BigDecimal.ONE) == 0){ @@ -1050,7 +1071,8 @@ * 当前时间比结束时间大 */ if(nowTime.compareTo(endTime) >= 0){ - List<MallProductBuyRecord> mallProductBuyRecords = mallProductBuyRecordMapper.selectByState(ProductEnum.PRODUCT_MATE_STATE_WAIT_PAY.getValue()); + List<MallProductBuyRecord> mallProductBuyRecords = mallProductBuyRecordMapper.selectByState( + ProductEnum.PRODUCT_MATE_STATE_WAIT_PAY.getValue()); if(CollUtil.isNotEmpty(mallProductBuyRecords)){ for(MallProductBuyRecord mallProductBuyRecord : mallProductBuyRecords){ /** @@ -1183,7 +1205,7 @@ queryMallMoneyFlow.eq("is_return",AppContants.MEMBER_FLOW_ING); queryMallMoneyFlow.eq("flow_type",FlowTypeNewEnum.NFT.getValue()); List<MallMoneyFlow> mallMoneyFlows = mallMoneyFlowMapper.selectList(queryMallMoneyFlow); - if(CollUtil.isNotEmpty(mallMoneyFlows)){ + if(CollUtil.isEmpty(mallMoneyFlows)){ return; } @@ -1206,7 +1228,7 @@ Long memberId = mallMoneyFlow.getMemberId(); MallMember mallMember = memberMapper.selectById(memberId); Integer isFrozen = mallMember.getIsFrozen(); - if(ProductEnum.MEMBER_UNFROZEN.getValue() == isFrozen){ + if(ProductEnum.MEMBER_FROZEN.getValue() == isFrozen){ MallMemberAmount mallMemberAmount = mallMemberAmountMapper.selectByMemberId(memberId); mallMemberAmount.setFrozenNft(mallMemberAmount.getFrozenNft().subtract(mallMoneyFlow.getAmount())); mallMemberAmountMapper.updateFrozenNftById(mallMemberAmount); @@ -1223,6 +1245,13 @@ AppContants.MEMBER_FLOW_ING); }else { + MallMemberAmount mallMemberAmountMine = mallMemberAmountMapper.selectByMemberId(memberId); + if(BigDecimal.ZERO.compareTo(mallMemberAmountMine.getTotalPerk().subtract(mallMoneyFlow.getAmount())) >= 0){ + continue; + } + mallMemberAmountMine.setTotalPerk(mallMemberAmountMine.getTotalPerk().subtract(mallMoneyFlow.getAmount())); + mallMemberAmountMapper.updateTrendsNftAndFrozenNftById(mallMemberAmountMine); + MallMemberAmount mallMemberAmount = mallMemberAmountMapper.selectByMemberId(memberId); mallMemberAmount.setFrozenNft(mallMemberAmount.getFrozenNft().subtract(mallMoneyFlow.getAmount())); mallMemberAmount.setTrendsNft(mallMemberAmount.getTrendsNft().add(mallMoneyFlow.getAmount())); @@ -1232,7 +1261,7 @@ String orderNo = MallUtils.getOrderNum("NFT"); mallMoneyFlowService.addMoneyFlow( memberId, - mallMoneyFlow.getAmount().negate(), + mallMoneyFlow.getAmount(), MoneyFlowTypeNewEnum.BASIC_PERK_DIRECT_DONE.getValue(), orderNo, null, @@ -1250,7 +1279,7 @@ queryMallMoneyFlow.eq("is_return",AppContants.MEMBER_FLOW_ING); queryMallMoneyFlow.eq("flow_type",FlowTypeNewEnum.NFT.getValue()); List<MallMoneyFlow> mallMoneyFlows = mallMoneyFlowMapper.selectList(queryMallMoneyFlow); - if(CollUtil.isNotEmpty(mallMoneyFlows)){ + if(CollUtil.isEmpty(mallMoneyFlows)){ return; } @@ -1273,7 +1302,7 @@ Long memberId = mallMoneyFlow.getMemberId(); MallMember mallMember = memberMapper.selectById(memberId); Integer isFrozen = mallMember.getIsFrozen(); - if(ProductEnum.MEMBER_UNFROZEN.getValue() == isFrozen){ + if(ProductEnum.MEMBER_FROZEN.getValue() == isFrozen){ MallMemberAmount mallMemberAmount = mallMemberAmountMapper.selectByMemberId(memberId); mallMemberAmount.setFrozenNft(mallMemberAmount.getFrozenNft().subtract(mallMoneyFlow.getAmount())); mallMemberAmountMapper.updateFrozenNftById(mallMemberAmount); @@ -1290,6 +1319,13 @@ AppContants.MEMBER_FLOW_ING); }else { + MallMemberAmount mallMemberAmountMine = mallMemberAmountMapper.selectByMemberId(memberId); + if(BigDecimal.ZERO.compareTo(mallMemberAmountMine.getTotalPerk().subtract(mallMoneyFlow.getAmount())) >= 0){ + continue; + } + mallMemberAmountMine.setTotalPerk(mallMemberAmountMine.getTotalPerk().subtract(mallMoneyFlow.getAmount())); + mallMemberAmountMapper.updateTrendsNftAndFrozenNftById(mallMemberAmountMine); + MallMemberAmount mallMemberAmount = mallMemberAmountMapper.selectByMemberId(memberId); mallMemberAmount.setFrozenNft(mallMemberAmount.getFrozenNft().subtract(mallMoneyFlow.getAmount())); mallMemberAmount.setTrendsNft(mallMemberAmount.getTrendsNft().add(mallMoneyFlow.getAmount())); @@ -1299,7 +1335,7 @@ String orderNo = MallUtils.getOrderNum("NFT"); mallMoneyFlowService.addMoneyFlow( memberId, - mallMoneyFlow.getAmount().negate(), + mallMoneyFlow.getAmount(), MoneyFlowTypeNewEnum.TEAM_PERK_DIRECT_DONE.getValue(), orderNo, null, @@ -1317,7 +1353,7 @@ queryMallMoneyFlow.eq("is_return",AppContants.MEMBER_FLOW_ING); queryMallMoneyFlow.eq("flow_type",FlowTypeNewEnum.NFT.getValue()); List<MallMoneyFlow> mallMoneyFlows = mallMoneyFlowMapper.selectList(queryMallMoneyFlow); - if(CollUtil.isNotEmpty(mallMoneyFlows)){ + if(CollUtil.isEmpty(mallMoneyFlows)){ return; } @@ -1340,7 +1376,7 @@ Long memberId = mallMoneyFlow.getMemberId(); MallMember mallMember = memberMapper.selectById(memberId); Integer isFrozen = mallMember.getIsFrozen(); - if(ProductEnum.MEMBER_UNFROZEN.getValue() == isFrozen){ + if(ProductEnum.MEMBER_FROZEN.getValue() == isFrozen){ MallMemberAmount mallMemberAmount = mallMemberAmountMapper.selectByMemberId(memberId); mallMemberAmount.setFrozenNft(mallMemberAmount.getFrozenNft().subtract(mallMoneyFlow.getAmount())); mallMemberAmountMapper.updateFrozenNftById(mallMemberAmount); @@ -1357,6 +1393,14 @@ AppContants.MEMBER_FLOW_ING); }else { + + MallMemberAmount mallMemberAmountMine = mallMemberAmountMapper.selectByMemberId(memberId); + if(BigDecimal.ZERO.compareTo(mallMemberAmountMine.getTotalPerk().subtract(mallMoneyFlow.getAmount())) >= 0){ + continue; + } + mallMemberAmountMine.setTotalPerk(mallMemberAmountMine.getTotalPerk().subtract(mallMoneyFlow.getAmount())); + mallMemberAmountMapper.updateTrendsNftAndFrozenNftById(mallMemberAmountMine); + MallMemberAmount mallMemberAmount = mallMemberAmountMapper.selectByMemberId(memberId); mallMemberAmount.setFrozenNft(mallMemberAmount.getFrozenNft().subtract(mallMoneyFlow.getAmount())); mallMemberAmount.setTrendsNft(mallMemberAmount.getTrendsNft().add(mallMoneyFlow.getAmount())); @@ -1366,7 +1410,7 @@ String orderNo = MallUtils.getOrderNum("NFT"); mallMoneyFlowService.addMoneyFlow( memberId, - mallMoneyFlow.getAmount().negate(), + mallMoneyFlow.getAmount(), MoneyFlowTypeNewEnum.TEAM_PERK_EQUALS_DONE.getValue(), orderNo, null, @@ -1402,8 +1446,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); @@ -1428,20 +1477,42 @@ TeamPerkDto teamPerkDto = JSONObject.parseObject(levelDic.getValue(), TeamPerkDto.class); Integer directCntLevel = teamPerkDto.getDirectCnt(); Integer teamCnt = teamPerkDto.getTeamCnt(); - if(directCntLevel >= intersection.size() && - teamCnt >= mallMembersAll.size()){ - mallMemberRef.setLevel(level); - memberMapper.updateById(mallMemberRef); + if(directCntLevel <= intersection.size()){ + if(teamCnt <= mallMembersAll.size()){ + mallMemberRef.setLevel(level); + memberMapper.updateById(mallMemberRef); + + String nextLevel = MemberLevelNewEnum.ZERO_LEVEL.getNextLevel(level); + level = nextLevel; + if(level.equals(MemberLevelNewEnum.WU_LEVEL.getType()) && + nextLevel.equals(MemberLevelNewEnum.WU_LEVEL.getType()) ){ + mallMemberRef.setLevel(level); + memberMapper.updateById(mallMemberRef); + flag = true; + } + }else{ + flag = true; + } + }else{ flag = true; } - String nextLevel = MemberLevelNewEnum.ZERO_LEVEL.getNextLevel(level); - level = nextLevel; - if(level.equals(MemberLevelNewEnum.WU_LEVEL.getType()) && - nextLevel.equals(MemberLevelNewEnum.WU_LEVEL.getType()) ){ - mallMemberRef.setLevel(level); - memberMapper.updateById(mallMemberRef); - flag = true; - } + } + } + } + + @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); } } } -- Gitblit v1.9.1