| | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void tradeProfitDistribute(Long id) { |
| | | /** |
| | | * 获取滑点钱包的代币余额A和U余额B |
| | | * 获取最新一条的记录C,然后A-C.A,B-C.B,获得这段时间内的滑点新增D |
| | | * 用D来进行划定分配 |
| | | * 并且生成一条新的记录dappHdRecord,用来下次分配参照 |
| | | */ |
| | | |
| | | //当天实际当天滑点 |
| | | |
| | | BigDecimal gfaPrice = new BigDecimal( |
| | | redisUtils.getString(DataDicEnum.GFA_PRICE.getValue()) |
| | | ).setScale(2,BigDecimal.ROUND_DOWN); |
| | | BigDecimal usdtAmount = new BigDecimal( |
| | | redisUtils.getString(DataDicEnum.GFA_HUA_DIAN_WALLET_USDT_AMOUNT.getValue()) |
| | | ).setScale(2,BigDecimal.ROUND_DOWN); |
| | | BigDecimal coinAmount = new BigDecimal( |
| | | redisUtils.getString(DataDicEnum.GFA_HUA_DIAN_WALLET_COIN_AMOUNT.getValue()) |
| | | ).setScale(2,BigDecimal.ROUND_DOWN); |
| | | if(BigDecimal.ZERO.compareTo(usdtAmount) > 0){ |
| | | return; |
| | | } |
| | | if(BigDecimal.ZERO.compareTo(coinAmount) > 0){ |
| | | return; |
| | | } |
| | | BigDecimal usdtAmountReal = usdtAmount; |
| | | BigDecimal coinAmountReal = coinAmount; |
| | | //生成一条记录 |
| | | DappHdRecord dappHdRecordAdd = new DappHdRecord(); |
| | | dappHdRecordAdd.setPrice(gfaPrice); |
| | | dappHdRecordAdd.setUsdtEvery(usdtAmountReal); |
| | | dappHdRecordAdd.setUsdtAmount(usdtAmountReal); |
| | | dappHdRecordAdd.setCoinEvery(coinAmountReal); |
| | | dappHdRecordAdd.setCoinAmount(coinAmountReal); |
| | | dappHdRecordMapper.insert(dappHdRecordAdd); |
| | | |
| | | /** |
| | | * 5%滑奖分配: |
| | | * 1%用自身质押 |
| | | * 3%用于团队业绩计算 |
| | | * 1%用于布道者奖励 |
| | | */ |
| | | int selfPercent = Convert.toInt(redisUtils.getString(DataDicEnum.GFA_HUA_DIAN_SELF.getValue())); |
| | | int teamPercent = Convert.toInt(redisUtils.getString(DataDicEnum.GFA_HUA_DIAN_TEAM.getValue())); |
| | | int workPercent = Convert.toInt(redisUtils.getString(DataDicEnum.GFA_HUA_DIAN_WORK.getValue())); |
| | | //平分份数 |
| | | BigDecimal totalPercent = new BigDecimal(selfPercent + teamPercent + workPercent); |
| | | //每一份有多少 |
| | | BigDecimal divideEveryUsdt = usdtAmountReal.divide(totalPercent, 2, BigDecimal.ROUND_DOWN); |
| | | //每一份有多少 |
| | | BigDecimal divideEveryCoin = coinAmountReal.divide(totalPercent, 2, BigDecimal.ROUND_DOWN); |
| | | //1%用自身质押 |
| | | selfHdPerk(selfPercent,divideEveryUsdt,divideEveryCoin); |
| | | //3%用于团队业绩计算 |
| | | teamHdPerk(teamPercent,divideEveryUsdt,divideEveryCoin); |
| | | asyncCjService.tradeProfitDistribute(); |
| | | // /** |
| | | // * 获取滑点钱包的代币余额A和U余额B |
| | | // * 获取最新一条的记录C,然后A-C.A,B-C.B,获得这段时间内的滑点新增D |
| | | // * 用D来进行划定分配 |
| | | // * 并且生成一条新的记录dappHdRecord,用来下次分配参照 |
| | | // */ |
| | | // |
| | | // //当天实际当天滑点 |
| | | // |
| | | // BigDecimal gfaPrice = new BigDecimal( |
| | | // redisUtils.getString(DataDicEnum.GFA_PRICE.getValue()) |
| | | // ).setScale(2,BigDecimal.ROUND_DOWN); |
| | | // BigDecimal usdtAmount = new BigDecimal( |
| | | // redisUtils.getString(DataDicEnum.GFA_HUA_DIAN_WALLET_USDT_AMOUNT.getValue()) |
| | | // ).setScale(2,BigDecimal.ROUND_DOWN); |
| | | // BigDecimal coinAmount = new BigDecimal( |
| | | // redisUtils.getString(DataDicEnum.GFA_HUA_DIAN_WALLET_COIN_AMOUNT.getValue()) |
| | | // ).setScale(2,BigDecimal.ROUND_DOWN); |
| | | // if(BigDecimal.ZERO.compareTo(usdtAmount) > 0){ |
| | | // return; |
| | | // } |
| | | // if(BigDecimal.ZERO.compareTo(coinAmount) > 0){ |
| | | // return; |
| | | // } |
| | | // BigDecimal usdtAmountReal = usdtAmount; |
| | | // BigDecimal coinAmountReal = coinAmount; |
| | | // //生成一条记录 |
| | | // DappHdRecord dappHdRecordAdd = new DappHdRecord(); |
| | | // dappHdRecordAdd.setPrice(gfaPrice); |
| | | // dappHdRecordAdd.setUsdtEvery(usdtAmountReal); |
| | | // dappHdRecordAdd.setUsdtAmount(usdtAmountReal); |
| | | // dappHdRecordAdd.setCoinEvery(coinAmountReal); |
| | | // dappHdRecordAdd.setCoinAmount(coinAmountReal); |
| | | // dappHdRecordMapper.insert(dappHdRecordAdd); |
| | | // |
| | | // /** |
| | | // * 5%滑奖分配: |
| | | // * 1%用自身质押 |
| | | // * 3%用于团队业绩计算 |
| | | // * 1%用于布道者奖励 |
| | | // */ |
| | | // int selfPercent = Convert.toInt(redisUtils.getString(DataDicEnum.GFA_HUA_DIAN_SELF.getValue())); |
| | | // int teamPercent = Convert.toInt(redisUtils.getString(DataDicEnum.GFA_HUA_DIAN_TEAM.getValue())); |
| | | // int workPercent = Convert.toInt(redisUtils.getString(DataDicEnum.GFA_HUA_DIAN_WORK.getValue())); |
| | | // //平分份数 |
| | | // BigDecimal totalPercent = new BigDecimal(selfPercent + teamPercent + workPercent); |
| | | // //每一份有多少 |
| | | // BigDecimal divideEveryUsdt = usdtAmountReal.divide(totalPercent, 2, BigDecimal.ROUND_DOWN); |
| | | // //每一份有多少 |
| | | // BigDecimal divideEveryCoin = coinAmountReal.divide(totalPercent, 2, BigDecimal.ROUND_DOWN); |
| | | // //1%用自身质押 |
| | | // selfHdPerk(selfPercent,divideEveryUsdt,divideEveryCoin); |
| | | // //3%用于团队业绩计算 |
| | | // teamHdPerk(teamPercent,divideEveryUsdt,divideEveryCoin); |
| | | } |
| | | |
| | | public void teamHdPerk(int teamPercent,BigDecimal divideEveryUsdt,BigDecimal divideEveryCoin){ |
| | |
| | | if(CollUtil.isEmpty(downMembersList)){ |
| | | continue; |
| | | } |
| | | |
| | | Set<Long> collect = downMembersList.stream().map(DappMemberEntity::getId).collect(Collectors.toSet()); |
| | | QueryWrapper<DappAchieve> queryWrapper = new QueryWrapper<>(); |
| | | queryWrapper.in("member_id",downMembersList); |
| | | queryWrapper.in("member_id",collect); |
| | | queryWrapper.eq("state",DappAchieve.STATUS_ING); |
| | | List<DappAchieve> dappAchieveSumList = dappAchieveMapper.selectList(queryWrapper); |
| | | //个人团队总业绩 |
| | |
| | | memberPerkMap.put(memberId,teamAchieveMemberSum); |
| | | } |
| | | |
| | | BigDecimal everyUsdt = multiplyDivideEveryUsdt.divide(memberPerkTotal); |
| | | BigDecimal everyCoin = multiplyDivideEveryCoin.divide(memberPerkTotal); |
| | | BigDecimal everyUsdt = multiplyDivideEveryUsdt.divide(memberPerkTotal,4,BigDecimal.ROUND_DOWN); |
| | | BigDecimal everyCoin = multiplyDivideEveryCoin.divide(memberPerkTotal,4,BigDecimal.ROUND_DOWN); |
| | | Set<Long> set = memberPerkMap.keySet(); // 得到所有key的集合 |
| | | for (Long memberId : set) { |
| | | //当前生效中的团队业绩 |
| | |
| | | createFlow( |
| | | multiplyUsdt, |
| | | memberId, |
| | | FlowTypeEnum.HUA_DIAN_TUANDUI.getValue(), |
| | | FlowTypeEnum.HUA_DIAN_TUANDUI.getDescrition(), |
| | | FlowTypeEnum.HUA_DIAN_TUANDUI_USDT.getValue(), |
| | | FlowTypeEnum.HUA_DIAN_TUANDUI_USDT.getDescrition(), |
| | | 4, |
| | | 1, |
| | | ChainEnum.BSC_TFC_REWARD.name(), |
| | |
| | | createFlow( |
| | | multiplyCoin, |
| | | memberId, |
| | | FlowTypeEnum.HUA_DIAN_TUANDUI.getValue(), |
| | | FlowTypeEnum.HUA_DIAN_TUANDUI.getDescrition(), |
| | | FlowTypeEnum.HUA_DIAN_TUANDUI_DAIBI.getValue(), |
| | | FlowTypeEnum.HUA_DIAN_TUANDUI_DAIBI.getDescrition(), |
| | | 4, |
| | | 1, |
| | | ChainEnum.BSC_TFC_REWARD.name(), |
| | |
| | | BigDecimal multiplyDivideEveryCoin = divideEveryCoin.multiply(selfPercentMultiply); |
| | | //当前生效中的质押总数 |
| | | BigDecimal amountMemberTotal = dappAchieves.stream().map(DappAchieve::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | BigDecimal everyUsdt = multiplyDivideEveryUsdt.divide(amountMemberTotal); |
| | | BigDecimal everyCoin = multiplyDivideEveryCoin.divide(amountMemberTotal); |
| | | BigDecimal everyUsdt = multiplyDivideEveryUsdt.divide(amountMemberTotal,4,BigDecimal.ROUND_DOWN); |
| | | BigDecimal everyCoin = multiplyDivideEveryCoin.divide(amountMemberTotal,4,BigDecimal.ROUND_DOWN); |
| | | |
| | | Map<Long, List<DappAchieve>> collect = dappAchieves.stream().collect(Collectors.groupingBy(DappAchieve::getMemberId)); |
| | | Set<Long> set = collect.keySet(); // 得到所有key的集合 |
| | |
| | | } |
| | | |
| | | //发送一个延时队列消息。24小时之后产生下一次的质押产出 |
| | | chainProducer.sendZhiYaDelayMsg(dappAchieve.getId(), 24 * 60 * 60 * 1000L); |
| | | // chainProducer.sendZhiYaDelayMsg(dappAchieve.getId(), 24 * 60 * 60 * 1000L); |
| | | } |
| | | |
| | | } |