From a14248f2793769771a75e6633c8d13348b5ad4b1 Mon Sep 17 00:00:00 2001 From: KKSU <15274802129@163.com> Date: Mon, 01 Apr 2024 10:50:42 +0800 Subject: [PATCH] 修改 --- src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java | 193 ++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallProductServiceImpl.java | 2 src/main/java/cc/mrbird/febs/mall/mapper/MallProductBuyMapper.java | 2 src/main/java/cc/mrbird/febs/mall/entity/MallProductBuy.java | 2 src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java | 3 src/main/resources/mapper/modules/MallProductBuyMapper.xml | 8 ++ src/main/java/cc/mrbird/febs/mall/service/IAgentService.java | 1 7 files changed, 210 insertions(+), 1 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallProductBuy.java b/src/main/java/cc/mrbird/febs/mall/entity/MallProductBuy.java index 09f9ea6..d57a480 100644 --- a/src/main/java/cc/mrbird/febs/mall/entity/MallProductBuy.java +++ b/src/main/java/cc/mrbird/febs/mall/entity/MallProductBuy.java @@ -24,6 +24,8 @@ private Date orderTime;//匹配时间 private Date payTime;//支付时间 private BigDecimal totalPerk;//总收益 + private BigDecimal profit;//收益 5 即百分之五 + private int cycle;//周期 @TableField(exist = false) private String accountLogin; diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallProductBuyMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallProductBuyMapper.java index 5c2bc58..fd9abc2 100644 --- a/src/main/java/cc/mrbird/febs/mall/mapper/MallProductBuyMapper.java +++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallProductBuyMapper.java @@ -27,6 +27,8 @@ List<MallProductBuy> selectListByStateAndProductNFTId(@Param("state")int value, @Param("nftId")Long nftId, @Param("mateState")int mateState); + List<MallProductBuy> selectListByStateAndMateState(@Param("state")int value, @Param("mateState")int mateState); + IPage<ApiOrderBuyVo> selectBuyListInPage(IPage<ApiOrderBuyVo> page, @Param("record")ApiOrderBuyDto apiOrderBuyDto); Integer selectListByMemberIdAndState(@Param("memberId")Long id); diff --git a/src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java b/src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java index da2849e..4977aca 100644 --- a/src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java +++ b/src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java @@ -122,7 +122,8 @@ */ @Scheduled(cron = "0 0 2 * * ?") public void BuyToSell() { - agentService.BuyToSell(); +// agentService.BuyToSell(); + agentService.BuyToSellV2(); } /** diff --git a/src/main/java/cc/mrbird/febs/mall/service/IAgentService.java b/src/main/java/cc/mrbird/febs/mall/service/IAgentService.java index 685d6a8..e7c7483 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/IAgentService.java +++ b/src/main/java/cc/mrbird/febs/mall/service/IAgentService.java @@ -41,6 +41,7 @@ void perkAgent(); void BuyToSell(); + void BuyToSellV2(); void timeGetOrderBuy(); 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 ea908e8..283a904 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 @@ -1062,6 +1062,199 @@ } } + @Override + public void BuyToSellV2() { + List<MallProductBuy> mallProductBuys = mallProductBuyMapper.selectListByStateAndMateState( + ProductEnum.PRODUCT_BUY_SUCCESS.getValue(), + ProductEnum.PRODUCT_BUY_MATE_STATE_FAIL.getValue()); + if(CollUtil.isEmpty(mallProductBuys)){ + return; + } + for(MallProductBuy mallProductBuy : mallProductBuys){ + MallProductNft mallProductNft = mallProductNftMapper.selectById(mallProductBuy.getProductNftId()); + //周期 + int cycle = mallProductNft.getCycle(); + //收益率 + BigDecimal profitPercent = mallProductNft.getProfit(); + Date payTime = mallProductBuy.getPayTime(); + + +// //偏移时间-- +// DateTime dateTime = DateUtil.offsetDay(payTime, cycle); +// int compare = DateUtil.compare(now, dateTime); +// if(compare >= 0){ +// mallProductBuy.setMateState(ProductEnum.PRODUCT_BUY_MATE_STATE_SUCCESS.getValue()); +// mallProductBuyMapper.updateById(mallProductBuy); + //偏移时间 + String s = String.valueOf(DateUtil.between(payTime, DateUtil.date(), DateUnit.DAY));//相差日期天数 + BigDecimal bigDecimal = new BigDecimal(s).setScale(0, BigDecimal.ROUND_DOWN);//只取整数位 + if(bigDecimal.compareTo(BigDecimal.ZERO) <= 0){ + continue; + } + BigDecimal remainder = bigDecimal.remainder(new BigDecimal(String.valueOf(cycle)));//取余 + if (remainder.compareTo(BigDecimal.ZERO) == 0) { + /** + * 用户的账户增加对应的收益 + */ + + 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))).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); + } + + MallMemberAmount mallMemberAmountPerk = mallMemberAmountMapper.selectByMemberId(mallProductBuy.getMemberId()); + if(BigDecimal.ZERO.compareTo(mallMemberAmountPerk.getTotalPerk()) >= 0){ + continue; + } + if(mallMemberAmountPerk.getTotalPerk().compareTo(profit) <= 0){ + profit = mallMemberAmountPerk.getTotalPerk(); + mallMemberAmountPerk.setTotalPerk(BigDecimal.ZERO); + mallMemberAmountMapper.updateTotalPerkById(mallMemberAmountPerk); + }else{ + mallMemberAmountPerk.setTotalPerk(mallMemberAmountPerk.getTotalPerk().subtract(profit).setScale(2,BigDecimal.ROUND_DOWN)); + mallMemberAmountMapper.updateTotalPerkById(mallMemberAmountPerk); + } +// insertSell(mallProductBuy.getMemberId(),profit,profit,BigDecimal.ZERO,BigDecimal.ZERO); + String orderNoSY = MallUtils.getOrderNum("SYNFT"); + mallMoneyFlowService.addMoneyFlow( + mallProductBuy.getMemberId(), + profit, + MoneyFlowTypeNewEnum.PERK_CYCLE.getValue(), + orderNoSY, + null, + FlowTypeNewEnum.NFT.getValue(), + MoneyFlowTypeNewEnum.PERK_CYCLE.getDescrition(), + AppContants.MEMBER_FLOW_DONE); + + MallMemberAmount mallMemberAmountMine = mallMemberAmountMapper.selectByMemberId(mallProductBuy.getMemberId()); + mallMemberAmountMine.setTrendsNft(mallMemberAmountMine.getTrendsNft().add(profit)); + mallMemberAmountMapper.updateTrendsNftById(mallMemberAmountMine); + + + BigDecimal remainderDirect = bigDecimal.divide(new BigDecimal(String.valueOf(cycle)),0,BigDecimal.ROUND_DOWN);//取余 + if(remainderDirect.compareTo(BigDecimal.ONE) == 0){ + /** + * 更新用户上级收益,冻结7天,7天时间到期自动释放到动态钱包 + */ + Long memberId = mallProductBuy.getMemberId(); + MallMember mallMember = memberMapper.selectById(memberId); + if(ObjectUtil.isNotEmpty(mallMember)){ + if(DateUtil.compare(payTime,DateUtil.parseDate("2024-3-26"))<= 0){ + //直推 + 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); + } + + } + + /** + * 团队奖励 + * + */ + 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; + } + } + } + } + } + } + } + /** * 先插入流水记录,更新冻结NFT,后续定时器循环,找寻对应的数据执行 */ diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallProductServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallProductServiceImpl.java index 8733e36..1414d31 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallProductServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallProductServiceImpl.java @@ -154,6 +154,8 @@ mallProductBuy.setMateState(ProductEnum.PRODUCT_BUY_MATE_STATE_FAIL.getValue()); mallProductBuy.setNftTotal(mallProductNft.getPriceNft()); mallProductBuy.setNftAva(mallProductNft.getPriceNft()); + mallProductBuy.setCycle(mallProductBuy.getCycle()); + mallProductBuy.setProfit(mallProductNft.getProfit()); // mallProductBuy.setNftAva(BigDecimal.ZERO); mallProductBuyMapper.insert(mallProductBuy); //令牌 可用减少,冻结增加 diff --git a/src/main/resources/mapper/modules/MallProductBuyMapper.xml b/src/main/resources/mapper/modules/MallProductBuyMapper.xml index 2e763e5..891ad41 100644 --- a/src/main/resources/mapper/modules/MallProductBuyMapper.xml +++ b/src/main/resources/mapper/modules/MallProductBuyMapper.xml @@ -39,6 +39,14 @@ order by a.CREATED_TIME asc </select> + <select id="selectListByStateAndMateState" resultType="cc.mrbird.febs.mall.entity.MallProductBuy"> + select a.* + from mall_product_buy a + where a.state = #{state} + and a.mate_state = #{mateState} + order by a.CREATED_TIME asc + </select> + <select id="selectBuyListInPage" resultType="cc.mrbird.febs.mall.vo.ApiOrderBuyVo"> select a.*,b.profit,b.cycle -- Gitblit v1.9.1