From b1a005fcdcd20f518261bcba06224db9ce607766 Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Fri, 31 May 2024 14:35:27 +0800
Subject: [PATCH] 查询条件
---
src/main/java/cc/mrbird/febs/dapp/service/impl/AsyncCjServiceImpl.java | 307 +++++++++++++++++++++++++++++++++++++-------------
1 files changed, 224 insertions(+), 83 deletions(-)
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/AsyncCjServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/AsyncCjServiceImpl.java
index dc95e32..5f0051c 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/AsyncCjServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/AsyncCjServiceImpl.java
@@ -6,6 +6,7 @@
import cc.mrbird.febs.common.exception.FebsException;
import cc.mrbird.febs.common.utils.RedisUtils;
import cc.mrbird.febs.dapp.chain.ChainEnum;
+import cc.mrbird.febs.dapp.chain.ChainService;
import cc.mrbird.febs.dapp.entity.*;
import cc.mrbird.febs.dapp.mapper.*;
import cc.mrbird.febs.dapp.service.AsyncCjService;
@@ -23,6 +24,7 @@
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
+import java.math.BigInteger;
import java.util.*;
import java.util.stream.Collectors;
@@ -145,22 +147,22 @@
for (Map.Entry<Integer, DappMemberEntity> entry : objectObjectHashMap.entrySet()) {
Integer key = entry.getKey();
DappMemberEntity refMember = entry.getValue();
- BigDecimal perkPercent = BigDecimal.ZERO;
- if(key == 0){
- perkPercent = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_TUAN_DUI_LEVEL_YI.getValue())).setScale(4, BigDecimal.ROUND_DOWN);
- }
- if(key == 1){
- perkPercent = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_TUAN_DUI_LEVEL_YI.getValue())).setScale(4, BigDecimal.ROUND_DOWN);
- }
- if(key == 2){
- perkPercent = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_TUAN_DUI_LEVEL_YI.getValue())).setScale(4, BigDecimal.ROUND_DOWN);
- }
- if(key == 3){
- perkPercent = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_TUAN_DUI_LEVEL_YI.getValue())).setScale(4, BigDecimal.ROUND_DOWN);
- }
- if(key == 4){
- perkPercent = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_TUAN_DUI_LEVEL_WU.getValue())).setScale(4, BigDecimal.ROUND_DOWN);
- }
+ BigDecimal perkPercent = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_TUAN_DUI_LEVEL_YI.getValue())).setScale(4, BigDecimal.ROUND_DOWN);
+// if(key == 0){
+// perkPercent = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_TUAN_DUI_LEVEL_YI.getValue())).setScale(4, BigDecimal.ROUND_DOWN);
+// }
+// if(key == 1){
+// perkPercent = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_TUAN_DUI_LEVEL_YI.getValue())).setScale(4, BigDecimal.ROUND_DOWN);
+// }
+// if(key == 2){
+// perkPercent = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_TUAN_DUI_LEVEL_YI.getValue())).setScale(4, BigDecimal.ROUND_DOWN);
+// }
+// if(key == 3){
+// perkPercent = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_TUAN_DUI_LEVEL_YI.getValue())).setScale(4, BigDecimal.ROUND_DOWN);
+// }
+// if(key == 4){
+// perkPercent = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_TUAN_DUI_LEVEL_WU.getValue())).setScale(4, BigDecimal.ROUND_DOWN);
+// }
BigDecimal realPerk = tuanDuiPerk.multiply(perkPercent).setScale(4, BigDecimal.ROUND_DOWN);
if(BigDecimal.ZERO.compareTo(realPerk) >= 0){
continue;
@@ -242,33 +244,18 @@
*/
//当天实际当天滑点
-
- 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);
+ BigDecimal coinAmount = BigDecimal.ZERO;
+// 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%用自身质押
@@ -281,13 +268,139 @@
//平分份数
BigDecimal totalPercent = new BigDecimal(selfPercent + teamPercent + workPercent);
//每一份有多少
- BigDecimal divideEveryUsdt = usdtAmountReal.divide(totalPercent, 4, BigDecimal.ROUND_DOWN);
+ BigDecimal divideEveryUsdt = usdtAmountReal.divide(totalPercent, 8, BigDecimal.ROUND_DOWN);
//每一份有多少
- BigDecimal divideEveryCoin = coinAmountReal.divide(totalPercent, 4, BigDecimal.ROUND_DOWN);
+ BigDecimal divideEveryCoin = coinAmountReal.divide(totalPercent, 8, BigDecimal.ROUND_DOWN);
//1%用自身质押
selfHdPerk(selfPercent,divideEveryUsdt,divideEveryCoin);
//3%用于团队业绩计算
teamHdPerk(teamPercent,divideEveryUsdt,divideEveryCoin);
+ }
+
+ @Override
+ public void confirmOrder(DappFundFlowEntity dappFundFlow) {
+ Long id = dappFundFlow.getId();
+ DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectById(id);
+ Integer status = dappFundFlowEntity.getStatus();
+ if(1 != status){
+ return;
+ }
+ Integer type = dappFundFlowEntity.getType();
+ BigDecimal amount = dappFundFlowEntity.getAmount().negate();
+ if(BigDecimal.ZERO.compareTo(amount) >=0){
+ amount = amount.negate();
+ }
+ Long memberId = dappFundFlowEntity.getMemberId();
+ DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
+ if(FlowTypeEnum.USDT_OUT.getValue() == type){
+ //USDT转账
+ String transfer = ChainService.getInstance(ChainEnum.BSC_USDT.name()).transfer(dappMemberEntity.getAddress(), amount);
+ int retryTime = 0;//重试次数
+ while (StrUtil.isEmpty(transfer)) {
+ // 休眠2s
+ try {
+ Thread.sleep(2000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ if(retryTime < 3){
+ transfer = ChainService.getInstance(ChainEnum.BSC_USDT.name()).transfer(dappMemberEntity.getAddress(), amount);
+ }
+ retryTime ++ ;
+ }
+ if(StrUtil.isNotEmpty(transfer)){
+ dappFundFlowEntity.setFromHash(transfer);
+ dappFundFlowEntity.setStatus(2);
+ dappFundFlowDao.updateById(dappFundFlowEntity);
+ }else{
+ dappFundFlowEntity.setStatus(1);
+ dappFundFlowDao.updateById(dappFundFlowEntity);
+ }
+ }else if(FlowTypeEnum.DAI_BI_OUT.getValue() == type){
+ //代币转账
+ String transfer = ChainService.getInstance(ChainEnum.BSC_GFA.name()).transfer(dappMemberEntity.getAddress(), amount);
+ int retryTime = 0;//重试次数
+ while (StrUtil.isEmpty(transfer)) {
+ // 休眠2s
+ try {
+ Thread.sleep(2000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ if(retryTime < 3){
+ transfer = ChainService.getInstance(ChainEnum.BSC_USDT.name()).transfer(dappMemberEntity.getAddress(), amount);
+ }
+ retryTime ++ ;
+ }
+ if(StrUtil.isNotEmpty(transfer)){
+ dappFundFlowEntity.setFromHash(transfer);
+ dappFundFlowEntity.setStatus(2);
+ dappFundFlowDao.updateById(dappFundFlowEntity);
+ }else{
+ dappFundFlowEntity.setStatus(1);
+ dappFundFlowDao.updateById(dappFundFlowEntity);
+ }
+ }else{
+ return;
+ }
+ }
+
+ @Override
+ public void confirmCancel(DappFundFlowEntity dappFundFlow) {
+ Long id = dappFundFlow.getId();
+ DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectById(id);
+ Integer status = dappFundFlowEntity.getStatus();
+ if(1 != status){
+ return;
+ }
+ Integer type = dappFundFlowEntity.getType();
+ BigDecimal amount = dappFundFlowEntity.getAmount().negate();
+ if(BigDecimal.ZERO.compareTo(amount) >=0){
+ amount = amount.negate();
+ }
+ Long memberId = dappFundFlowEntity.getMemberId();
+ DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
+
+ dappFundFlowEntity.setStatus(DappFundFlowEntity.WITHDRAW_STATUS_DISAGREE);
+ dappFundFlowDao.updateById(dappFundFlowEntity);
+ if(FlowTypeEnum.USDT_OUT.getValue() == type){
+ dappMemberEntity.setUsdtBalance(dappMemberEntity.getUsdtBalance().add(amount));
+ dappMemberDao.updateUsdtBalanceWithVersion(dappMemberEntity);
+ }else if(FlowTypeEnum.DAI_BI_OUT.getValue() == type){
+ dappMemberEntity.setBalance(dappMemberEntity.getBalance().add(amount));
+ dappMemberDao.updateBalanceWithVersion(dappMemberEntity);
+ }else{
+ return;
+ }
+ }
+
+ @Override
+ public void calculateAchieve(DappAchieve achieve) {
+ Long id = achieve.getId();
+ DappAchieve dappAchieve = dappAchieveMapper.selectById(id);
+ if(ObjectUtil.isEmpty(dappAchieve)){
+ return;
+ }
+ /**
+ * 计算金本位和币本位
+ * 金本位:数量*价格*70*产矿百分比
+ * 币本位:数量*30*产矿百分比
+ */
+ BigDecimal achieveOut = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_ACHIEVE_OUT.getValue())).setScale(2,BigDecimal.ROUND_DOWN);
+
+ BigDecimal amount = dappAchieve.getAmount();
+ BigDecimal price = dappAchieve.getPrice();
+ BigDecimal goldAmount = amount.multiply(price).multiply(new BigDecimal("0.7")).multiply(achieveOut).setScale(8, BigDecimal.ROUND_DOWN);
+ BigDecimal coinAmount = amount.multiply(new BigDecimal("0.3")).multiply(achieveOut).setScale(8, BigDecimal.ROUND_DOWN);
+ dappAchieve.setGoldAmount(goldAmount);
+ dappAchieve.setCoinAmount(coinAmount);
+ dappAchieveMapper.updateById(dappAchieve);
+ }
+
+ public static void main(String[] args) {
+ String transfer = ChainService.getInstance(ChainEnum.BSC_USDT.name()).transfer("0xCEBfd36e03BD80c7015Cbad17eFfBc33d2923FF3", new BigDecimal("0.1"));
+// BigInteger bigInteger = org.web3j.utils.Convert.toWei("35", org.web3j.utils.Convert.Unit.GWEI).toBigInteger();
+// System.out.println(bigInteger);
}
public void teamHdPerk(int teamPercent,BigDecimal divideEveryUsdt,BigDecimal divideEveryCoin){
@@ -311,12 +424,16 @@
Map<Long, BigDecimal> memberPerkMap = new HashMap<>();
//总团队业绩
BigDecimal memberPerkTotal = BigDecimal.ZERO;
+// BigDecimal memberPerkTotal = dappAchieves.stream().map(DappAchieve::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+// if(BigDecimal.ZERO.compareTo(memberPerkTotal) >= 0){
+// return;
+// }
//获取全部会员
Set<Long> allMembers = dappMemberEntities.stream().map(DappMemberEntity::getId).collect(Collectors.toSet());
//获取正在质押的会员ID
- Set<Long> achieveMembers = dappAchieves.stream().map(DappAchieve::getMemberId).collect(Collectors.toSet());
- Collection<Long> intersection = CollUtil.intersection(allMembers, achieveMembers);
- for(Long memberId : intersection){
+// Set<Long> achieveMembers = dappAchieves.stream().map(DappAchieve::getMemberId).collect(Collectors.toSet());
+// Collection<Long> intersection = CollUtil.intersection(allMembers, achieveMembers);
+ for(Long memberId : allMembers){
/**
* 获取每一个成员的四级直推
*/
@@ -348,48 +465,66 @@
queryWrapper.eq("state",DappAchieve.STATUS_ING);
List<DappAchieve> dappAchieveSumList = dappAchieveMapper.selectList(queryWrapper);
//个人团队总业绩
- BigDecimal teamAchieveMemberSum = dappAchieveSumList.stream().map(DappAchieve::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+ BigDecimal teamAchieveMemberSum = dappAchieveSumList.stream().map(item-> item.getAmount().multiply(item.getPrice())).reduce(BigDecimal.ZERO, BigDecimal::add);
if(BigDecimal.ZERO.compareTo(teamAchieveMemberSum) >= 0){
continue;
}
memberPerkTotal = memberPerkTotal.add(teamAchieveMemberSum);
memberPerkMap.put(memberId,teamAchieveMemberSum);
}
- if(BigDecimal.ZERO.compareTo(memberPerkTotal) >= 0){
- return;
- }
- BigDecimal everyUsdt = multiplyDivideEveryUsdt.divide(memberPerkTotal,4,BigDecimal.ROUND_DOWN);
- BigDecimal everyCoin = multiplyDivideEveryCoin.divide(memberPerkTotal,4,BigDecimal.ROUND_DOWN);
+ BigDecimal everyUsdt = multiplyDivideEveryUsdt.divide(memberPerkTotal,8,BigDecimal.ROUND_DOWN);
+ BigDecimal everyCoin = multiplyDivideEveryCoin.divide(memberPerkTotal,8,BigDecimal.ROUND_DOWN);
Set<Long> set = memberPerkMap.keySet(); // 得到所有key的集合
for (Long memberId : set) {
//当前生效中的团队业绩
BigDecimal amountMember = memberPerkMap.get(memberId);
//这个人实际可以分到的数量USDT
- BigDecimal multiplyUsdt = amountMember.multiply(everyUsdt).setScale(4, BigDecimal.ROUND_DOWN);
+ BigDecimal multiplyUsdt = amountMember.multiply(everyUsdt).setScale(8, BigDecimal.ROUND_DOWN);
+ if(BigDecimal.ZERO.compareTo(multiplyUsdt) >= 0){
+ continue;
+ }
//这个人实际可以分到的数量COIN
- BigDecimal multiplyCoin = amountMember.multiply(everyCoin).setScale(4, BigDecimal.ROUND_DOWN);
-
+ BigDecimal multiplyCoin = amountMember.multiply(everyCoin).setScale(8, BigDecimal.ROUND_DOWN);
+ DappMemberEntity dappMemberEntityExit = dappMemberDao.selectById(memberId);
+ if(ObjectUtil.isEmpty(dappMemberEntityExit)){
+ continue;
+ }
+ //如果没有进行中的质押,直接返回
+ QueryWrapper<DappAchieve> objectQueryWrappereq = new QueryWrapper<>();
+ objectQueryWrappereq.eq("state",DappAchieve.STATUS_ING);
+ objectQueryWrappereq.eq("member_id",memberId);
+ List<DappAchieve> dappAchieveseq = dappAchieveMapper.selectList(objectQueryWrappereq);
+ if(CollUtil.isEmpty(dappAchieveseq)){
+ DappFundFlowEntity fundFlowTuiJian = new DappFundFlowEntity(
+ memberId,
+ multiplyUsdt,
+ FlowTypeEnum.TUAN_DUI_FAIL.getValue(),
+ DappFundFlowEntity.WITHDRAW_STATUS_AGREE,
+ StrUtil.format(FlowTypeEnum.TUAN_DUI_FAIL_DES.getDescrition(), amountMember));
+ dappFundFlowDao.insert(fundFlowTuiJian);
+ continue;
+ }
createFlow(
multiplyUsdt,
memberId,
FlowTypeEnum.HUA_DIAN_TUANDUI_USDT.getValue(),
- FlowTypeEnum.HUA_DIAN_TUANDUI_USDT.getDescrition(),
+ StrUtil.format(FlowTypeEnum.HUA_DIAN_TUANDUI_USDT.getDescrition(), amountMember),
4,
1,
ChainEnum.BSC_TFC_REWARD.name(),
DataDicEnum.USDT_COIN.getValue(),
2);
- createFlow(
- multiplyCoin,
- memberId,
- FlowTypeEnum.HUA_DIAN_TUANDUI_DAIBI.getValue(),
- StrUtil.format(FlowTypeEnum.HUA_DIAN_TUANDUI_DAIBI.getDescrition(), amountMember),
- 4,
- 1,
- ChainEnum.BSC_TFC_REWARD.name(),
- DataDicEnum.USDT_COIN.getValue(),
- 1);
+// createFlow(
+// multiplyCoin,
+// memberId,
+// FlowTypeEnum.HUA_DIAN_TUANDUI_DAIBI.getValue(),
+// StrUtil.format(FlowTypeEnum.HUA_DIAN_TUANDUI_DAIBI.getDescrition(), amountMember),
+// 4,
+// 1,
+// ChainEnum.BSC_TFC_REWARD.name(),
+// DataDicEnum.USDT_COIN.getValue(),
+// 1);
}
}
@@ -405,49 +540,55 @@
BigDecimal multiplyDivideEveryUsdt = divideEveryUsdt.multiply(selfPercentMultiply);
BigDecimal multiplyDivideEveryCoin = divideEveryCoin.multiply(selfPercentMultiply);
//当前生效中的质押总数
- BigDecimal amountMemberTotal = dappAchieves.stream().map(DappAchieve::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+ BigDecimal amountMemberTotal = dappAchieves.stream().map(item-> item.getAmount().multiply(item.getPrice())).reduce(BigDecimal.ZERO, BigDecimal::add);
if(BigDecimal.ZERO.compareTo(amountMemberTotal) >= 0){
return;
}
- BigDecimal everyUsdt = multiplyDivideEveryUsdt.divide(amountMemberTotal,4,BigDecimal.ROUND_DOWN);
- BigDecimal everyCoin = multiplyDivideEveryCoin.divide(amountMemberTotal,4,BigDecimal.ROUND_DOWN);
+
+
+
+ BigDecimal everyUsdt = multiplyDivideEveryUsdt.divide(amountMemberTotal,8,BigDecimal.ROUND_DOWN);
+ BigDecimal everyCoin = multiplyDivideEveryCoin.divide(amountMemberTotal,8,BigDecimal.ROUND_DOWN);
Map<Long, List<DappAchieve>> collect = dappAchieves.stream().collect(Collectors.groupingBy(DappAchieve::getMemberId));
Set<Long> set = collect.keySet(); // 得到所有key的集合
for (Long memberId : set) {
//当前每个人生效中的质押总数
- BigDecimal amountMember = collect.get(memberId).stream().map(DappAchieve::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+// BigDecimal amountMember = collect.get(memberId).stream().map(DappAchieve::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+ BigDecimal amountMember = collect.get(memberId).stream().map(item-> item.getAmount().multiply(item.getPrice())).reduce(BigDecimal.ZERO, BigDecimal::add);
//这个人实际可以分到的数量USDT
- BigDecimal multiplyUsdt = amountMember.multiply(everyUsdt).setScale(4, BigDecimal.ROUND_DOWN);
+ BigDecimal multiplyUsdt = amountMember.multiply(everyUsdt).setScale(8, BigDecimal.ROUND_DOWN);
+ if(BigDecimal.ZERO.compareTo(multiplyUsdt) >= 0){
+ continue;
+ }
//这个人实际可以分到的数量COIN
- BigDecimal multiplyCoin = amountMember.multiply(everyCoin).setScale(4, BigDecimal.ROUND_DOWN);
+ BigDecimal multiplyCoin = amountMember.multiply(everyCoin).setScale(8, BigDecimal.ROUND_DOWN);
+ DappMemberEntity dappMemberEntityExit = dappMemberDao.selectById(memberId);
+ if(ObjectUtil.isEmpty(dappMemberEntityExit)){
+ continue;
+ }
createFlow(
multiplyUsdt,
- memberId,
- FlowTypeEnum.HUA_DIAN_GEREN.getValue(),
- FlowTypeEnum.HUA_DIAN_GEREN.getDescrition(),
- 4,
- 1,
- ChainEnum.BSC_TFC_REWARD.name(),
- DataDicEnum.USDT_COIN.getValue(),
- 2);
- createFlow(
- multiplyCoin,
memberId,
FlowTypeEnum.HUA_DIAN_GEREN.getValue(),
StrUtil.format(FlowTypeEnum.HUA_DIAN_GEREN.getDescrition(), amountMember),
4,
1,
ChainEnum.BSC_TFC_REWARD.name(),
- DataDicEnum.GFA_COIN.getValue(),
- 1);
+ DataDicEnum.USDT_COIN.getValue(),
+ 2);
+// createFlow(
+// multiplyCoin,
+// memberId,
+// FlowTypeEnum.HUA_DIAN_GEREN.getValue(),
+// StrUtil.format(FlowTypeEnum.HUA_DIAN_GEREN.getDescrition(), amountMember),
+// 4,
+// 1,
+// ChainEnum.BSC_TFC_REWARD.name(),
+// DataDicEnum.GFA_COIN.getValue(),
+// 1);
}
- }
-
- public static void main(String[] args) {
- String format = StrUtil.format(FlowTypeEnum.HUA_DIAN_GEREN.getDescrition(), 100);
- System.out.println(format);
}
/**
--
Gitblit v1.9.1