From 673d9890158a00c42a0cb187d7f40b599d272da9 Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Sun, 28 Apr 2024 12:03:03 +0800
Subject: [PATCH] 测试环境新版
---
src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java | 2
src/main/java/cc/mrbird/febs/dapp/chain/ChainService.java | 15 +
src/main/java/cc/mrbird/febs/dapp/chain/EthUsdtContract.java | 123 +++++++++++++++
src/main/resources/mapper/dapp/DappFundFlowDao.xml | 8 +
src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java | 6
src/main/java/cc/mrbird/febs/dapp/mapper/DappFundFlowDao.java | 3
src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java | 10 +
src/main/java/cc/mrbird/febs/dapp/entity/DappMemberFund.java | 24 +++
src/main/resources/application-prod.yml | 4
src/main/java/cc/mrbird/febs/dapp/chain/ChainEnum.java | 5
src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java | 9 +
src/main/java/cc/mrbird/febs/job/ChainListenerJob.java | 188 ++++++++++++++---------
src/main/java/cc/mrbird/febs/dapp/service/impl/BscCoinContractEvent.java | 55 ++++++
src/main/resources/application-dev.yml | 4
src/main/java/cc/mrbird/febs/dapp/chain/ContractEventService.java | 1
src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberFundMapper.java | 7
src/main/java/cc/mrbird/febs/dapp/dto/RecordInPageDto.java | 2
17 files changed, 384 insertions(+), 82 deletions(-)
diff --git a/src/main/java/cc/mrbird/febs/dapp/chain/ChainEnum.java b/src/main/java/cc/mrbird/febs/dapp/chain/ChainEnum.java
index a03e523..ace8eab 100644
--- a/src/main/java/cc/mrbird/febs/dapp/chain/ChainEnum.java
+++ b/src/main/java/cc/mrbird/febs/dapp/chain/ChainEnum.java
@@ -41,10 +41,11 @@
* 正式 0x6c6835e60e7dBaD7a60112a6371271e8eb79ee68 https://bsc-dataseed1.ninicoin.io
*
*/
+ //测试代币
BSC_TFC("BSC", "0x977a9ddfb965a9a3416fa72ca7f91c4949c18f25",
"0xefe98e00cd227b6322e892c82fcbd8eadf119c3188b7e574bc624f65405d61bf",
- "https://bsc-dataseed1.ninicoin.io",
- "0x46ac4921e58773ca22826df1640672b91b1db2b3",
+ "https://data-seed-prebsc-1-s1.bnbchain.org:8545",
+ "0x2e8CC17ebbB248395a4c3A38374cef2ab0369e18",
""),
BSC_GFA("BSC", "0x8Afd8Bfd8be3cCEB47A6A997DD1b3Fb0046d5124",
"0x24a2b437f5d6b1212960fe6b0bff7dabae731a3e1fb32da6e4b50fc96623d05d",
diff --git a/src/main/java/cc/mrbird/febs/dapp/chain/ChainService.java b/src/main/java/cc/mrbird/febs/dapp/chain/ChainService.java
index e83c1f0..d91b69a 100644
--- a/src/main/java/cc/mrbird/febs/dapp/chain/ChainService.java
+++ b/src/main/java/cc/mrbird/febs/dapp/chain/ChainService.java
@@ -79,6 +79,21 @@
});
}
+ public static void coinRewardEventListener(BigInteger startBlock, BigInteger endBlock, ContractEventService event, String type) {
+ ChainEnum chain = ChainEnum.getValueByName(type);
+ assert chain != null;
+
+ EthUsdtContract contract = contract(chain.getPrivateKey(), chain.getContractAddress(), chain.getUrl());
+ EthFilter filter = getFilter(startBlock, endBlock, chain.getContractAddress());
+
+ Flowable<EthUsdtContract.CoinRewardEventResponse> eventFlowable = contract.coinRewardEventFlowable(filter);
+ eventFlowable.subscribe(e -> {
+ event.coinReward(e);
+ }, error -> {
+ log.error("合约监听启动报错", error);
+ });
+ }
+
private static EthUsdtContract contract(String privateKey, String contractAddress, String url) {
Credentials credentials = Credentials.create(privateKey);
diff --git a/src/main/java/cc/mrbird/febs/dapp/chain/ContractEventService.java b/src/main/java/cc/mrbird/febs/dapp/chain/ContractEventService.java
index 481edd4..2b15c2a 100644
--- a/src/main/java/cc/mrbird/febs/dapp/chain/ContractEventService.java
+++ b/src/main/java/cc/mrbird/febs/dapp/chain/ContractEventService.java
@@ -3,4 +3,5 @@
public interface ContractEventService {
void compile(EthUsdtContract.TransferEventResponse e);
+ void coinReward(EthUsdtContract.CoinRewardEventResponse e);
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/chain/EthUsdtContract.java b/src/main/java/cc/mrbird/febs/dapp/chain/EthUsdtContract.java
index 14658e9..e29f66e 100644
--- a/src/main/java/cc/mrbird/febs/dapp/chain/EthUsdtContract.java
+++ b/src/main/java/cc/mrbird/febs/dapp/chain/EthUsdtContract.java
@@ -3,6 +3,8 @@
import io.reactivex.Flowable;
import io.reactivex.functions.Function;
import org.web3j.abi.EventEncoder;
+import org.web3j.abi.EventValues;
+import org.web3j.abi.FunctionReturnDecoder;
import org.web3j.abi.TypeReference;
import org.web3j.abi.datatypes.*;
import org.web3j.abi.datatypes.generated.Uint256;
@@ -146,6 +148,67 @@
public static final Event TRANSFER_EVENT = new Event("Transfer",
Arrays.<TypeReference<?>>asList(new TypeReference<Address>(true) {}, new TypeReference<Address>(true) {}, new TypeReference<Uint256>() {}));
+ ;
+ /**
+ * {
+ * "anonymous": false,
+ * "inputs": [
+ * {
+ * "indexed": false,
+ * "internalType": "address",
+ * "name": "adr",
+ * "type": "address"
+ * },
+ * {
+ * "indexed": false,
+ * "internalType": "uint256",
+ * "name": "amount",
+ * "type": "uint256"
+ * },
+ * {
+ * "indexed": false,
+ * "internalType": "uint256",
+ * "name": "price",
+ * "type": "uint256"
+ * },
+ * {
+ * "indexed": false,
+ * "internalType": "uint256",
+ * "name": "sameCoin",
+ * "type": "uint256"
+ * },
+ * {
+ * "indexed": false,
+ * "internalType": "uint256",
+ * "name": "finxMineCoin",
+ * "type": "uint256"
+ * },
+ * {
+ * "indexed": false,
+ * "internalType": "uint256",
+ * "name": "lastMineTime",
+ * "type": "uint256"
+ * },
+ * {
+ * "indexed": false,
+ * "internalType": "uint256",
+ * "name": "thisMineTime",
+ * "type": "uint256"
+ * }
+ * ],
+ * "name": "CoinReward",
+ * "type": "event"
+ * }
+ */
+ public static final Event COINREWARD_EVENT = new Event("CoinReward",
+ Arrays.<TypeReference<?>>asList(
+ new TypeReference<Address>(false) {},
+ new TypeReference<Uint256>(false) {},
+ new TypeReference<Uint256>(false) {},
+ new TypeReference<Uint256>(false) {},
+ new TypeReference<Uint256>(false) {},
+ new TypeReference<Uint256>(false) {},
+ new TypeReference<Uint256>(false) {}));
;
@Deprecated
@@ -317,6 +380,55 @@
EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
filter.addSingleTopic(EventEncoder.encode(TRANSFER_EVENT));
return transferEventFlowable(filter);
+ }
+
+ public Flowable<CoinRewardEventResponse> coinRewardEventFlowable(EthFilter filter) {
+ return web3j.ethLogFlowable(filter).map(new Function<Log, CoinRewardEventResponse>() {
+ @Override
+ public CoinRewardEventResponse apply(Log log) {
+ final List<String> topics = log.getTopics();
+ String encodedEventSignature = EventEncoder.encode(COINREWARD_EVENT);
+ if (topics == null || topics.size() == 0 || !topics.get(0).equals(encodedEventSignature)) {
+ return null;
+ }
+
+ List<Type> indexedValues = new ArrayList<>();
+ List<Type> nonIndexedValues =
+ FunctionReturnDecoder.decode(log.getData(), COINREWARD_EVENT.getNonIndexedParameters());
+
+ List<TypeReference<Type>> indexedParameters = COINREWARD_EVENT.getIndexedParameters();
+ for (int i = 0; i < indexedParameters.size(); i++) {
+ Type value =
+ FunctionReturnDecoder.decodeIndexedValue(
+ topics.get(i + 1), indexedParameters.get(i));
+ indexedValues.add(value);
+ }
+ final EventValues eventValues = new EventValues(indexedValues, nonIndexedValues);
+// EventValuesWithLog eventValues = extractEventParametersWithLog(COINREWARD_EVENT, log);
+ CoinRewardEventResponse typedResponse = new CoinRewardEventResponse();
+ if(eventValues!=null){
+ typedResponse.adr = (String) eventValues.getNonIndexedValues().get(0).getValue();
+ typedResponse.amount = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
+ typedResponse.price = (BigInteger) eventValues.getNonIndexedValues().get(2).getValue();
+ typedResponse.sameCoin = (BigInteger) eventValues.getNonIndexedValues().get(3).getValue();
+ typedResponse.finxMineCoin = (BigInteger) eventValues.getNonIndexedValues().get(4).getValue();
+ typedResponse.lastMineTime = (BigInteger) eventValues.getNonIndexedValues().get(5).getValue();
+ typedResponse.thisMineTime = (BigInteger) eventValues.getNonIndexedValues().get(6).getValue();
+ }
+
+ return typedResponse;
+ }
+ });
+ }
+
+ public static void main(String[] args) {
+ System.out.println(EventEncoder.encode(COINREWARD_EVENT));
+ }
+
+ public Flowable<CoinRewardEventResponse> coinRewardEventFlowable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
+ EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
+ filter.addSingleTopic(EventEncoder.encode(TRANSFER_EVENT));
+ return coinRewardEventFlowable(filter);
}
public RemoteFunctionCall<BigInteger> allowance(String tokenOwner, String spender) {
@@ -717,4 +829,15 @@
public BigInteger tokens;
}
+
+ public static class CoinRewardEventResponse extends BaseEventResponse {
+ public String adr;
+
+ public BigInteger amount;
+ public BigInteger price;
+ public BigInteger sameCoin;
+ public BigInteger finxMineCoin;
+ public BigInteger lastMineTime;
+ public BigInteger thisMineTime;
+ }
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java b/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java
index cd5bfa0..5d4a74b 100644
--- a/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java
+++ b/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java
@@ -68,6 +68,12 @@
return new FebsResponse().success().data(dappWalletService.zyInPage(recordInPageDto));
}
+ @ApiOperation(value = "产矿收益", notes = "产矿收益")
+ @PostMapping(value = "/memberFundList")
+ public FebsResponse memberFundList(@RequestBody RecordInPageDto recordInPageDto) {
+ return new FebsResponse().success().data(dappWalletService.memberFundList(recordInPageDto));
+ }
+
@ApiOperation(value = "资金流水列表", notes = "资金流水列表")
@PostMapping(value = "/recordInPage")
public FebsResponse recordInPage(@RequestBody RecordInPageDto recordInPageDto) {
diff --git a/src/main/java/cc/mrbird/febs/dapp/dto/RecordInPageDto.java b/src/main/java/cc/mrbird/febs/dapp/dto/RecordInPageDto.java
index fd7d00a..369317b 100644
--- a/src/main/java/cc/mrbird/febs/dapp/dto/RecordInPageDto.java
+++ b/src/main/java/cc/mrbird/febs/dapp/dto/RecordInPageDto.java
@@ -21,6 +21,6 @@
@ApiModelProperty(value = "类型", example = "状态:1-进行中 2:已结束")
private Integer type;
- @ApiModelProperty(value = "流水类型", example = "4-质押产币")
+ @ApiModelProperty(value = "流水类型", example = "1-质押产币")
private Integer state;
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/DappMemberFund.java b/src/main/java/cc/mrbird/febs/dapp/entity/DappMemberFund.java
new file mode 100644
index 0000000..e31455a
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/entity/DappMemberFund.java
@@ -0,0 +1,24 @@
+package cc.mrbird.febs.dapp.entity;
+
+import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
+@Data
+@TableName("dapp_member_fund")
+public class DappMemberFund extends BaseEntity {
+
+
+ private Long memberId;
+ public String address;
+
+ public BigDecimal amount;//总挖矿数量
+ public BigDecimal price;//价格
+ public BigDecimal sameCoin;//金本位挖矿数量
+ public BigDecimal finxMineCoin;//币本位数量
+ public String lastMineTime;//上一次挖矿时间
+ public String thisMineTime;//这次挖矿时间
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/DappFundFlowDao.java b/src/main/java/cc/mrbird/febs/dapp/mapper/DappFundFlowDao.java
index b161219..5fbebe6 100644
--- a/src/main/java/cc/mrbird/febs/dapp/mapper/DappFundFlowDao.java
+++ b/src/main/java/cc/mrbird/febs/dapp/mapper/DappFundFlowDao.java
@@ -3,6 +3,7 @@
import cc.mrbird.febs.dapp.dto.TeamListDto;
import cc.mrbird.febs.dapp.entity.DappAchieve;
import cc.mrbird.febs.dapp.entity.DappFundFlowEntity;
+import cc.mrbird.febs.dapp.entity.DappMemberFund;
import cc.mrbird.febs.dapp.vo.MoneyFlowVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -35,4 +36,6 @@
IPage<MoneyFlowVo> findMoneyFlowVos(Page<MoneyFlowVo> page, @Param("record")TeamListDto teamListDto);
IPage<DappFundFlowEntity> selectInPages(Page<DappFundFlowEntity> page, @Param("record")DappFundFlowEntity dappFundFlowEntity);
+
+ IPage<DappMemberFund> memberFundList(Page<DappMemberFund> page, @Param("record")DappMemberFund dappMemberFund);
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberFundMapper.java b/src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberFundMapper.java
new file mode 100644
index 0000000..539b1c5
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberFundMapper.java
@@ -0,0 +1,7 @@
+package cc.mrbird.febs.dapp.mapper;
+
+import cc.mrbird.febs.dapp.entity.DappMemberFund;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+public interface DappMemberFundMapper extends BaseMapper<DappMemberFund> {
+}
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java b/src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java
index 0455228..b938e79 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java
@@ -42,4 +42,6 @@
IPage<DappAchieveItem> dappAchieveItemInPage(DappAchieve dappAchieve, QueryRequest request);
FebsResponse transferOut(TransferOutDto transferOutDto);
+
+ List<DappMemberFund> memberFundList(RecordInPageDto recordInPageDto);
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/BscCoinContractEvent.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/BscCoinContractEvent.java
index 08360d6..919fc52 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/BscCoinContractEvent.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/BscCoinContractEvent.java
@@ -1,24 +1,24 @@
package cc.mrbird.febs.dapp.service.impl;
import cc.mrbird.febs.common.contants.AppContants;
+import cc.mrbird.febs.common.enumerates.FlowTypeEnum;
import cc.mrbird.febs.common.utils.RedisUtils;
import cc.mrbird.febs.common.utils.ShareCodeUtil;
import cc.mrbird.febs.dapp.chain.ChainEnum;
import cc.mrbird.febs.dapp.chain.ChainService;
import cc.mrbird.febs.dapp.chain.ContractEventService;
import cc.mrbird.febs.dapp.chain.EthUsdtContract;
-import cc.mrbird.febs.dapp.entity.DappFundFlowEntity;
-import cc.mrbird.febs.dapp.entity.DappMemberEntity;
-import cc.mrbird.febs.dapp.entity.DappOnlineTransferEntity;
-import cc.mrbird.febs.dapp.entity.DappTransferRecordEntity;
+import cc.mrbird.febs.dapp.entity.*;
import cc.mrbird.febs.dapp.mapper.DappFundFlowDao;
import cc.mrbird.febs.dapp.mapper.DappMemberDao;
+import cc.mrbird.febs.dapp.mapper.DappMemberFundMapper;
import cc.mrbird.febs.dapp.mapper.DappOnlineTransferDao;
import cc.mrbird.febs.dapp.service.DappMemberService;
import cc.mrbird.febs.dapp.service.DappSystemService;
import cc.mrbird.febs.dapp.utils.OnlineTransferUtil;
import cc.mrbird.febs.rabbit.producer.ChainProducer;
import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
@@ -42,6 +42,8 @@
@Resource
private DappMemberDao dappMemberDao;
+ @Resource
+ private DappMemberFundMapper dappMemberFundMapper;
@Resource
private DappMemberService dappMemberService;
@@ -174,4 +176,49 @@
}
}
+
+ @Override
+ public void coinReward(EthUsdtContract.CoinRewardEventResponse e) {
+ if (e.adr == null) {
+ return;
+ }
+ /**
+ * 根据地址去查询数据库是否已经注册
+ * 生成对应的产矿记录
+ * 生成对应的产矿流水
+ */
+ String address = e.adr;
+ DappMemberEntity dappMemberEntity = dappMemberDao.selectByAddress(address, null);
+ if(ObjectUtil.isEmpty(dappMemberEntity)){
+ return;
+ }
+ int decimals = ChainService.getInstance(ChainEnum.BSC_TFC.name()).decimals();
+ BigDecimal amount = new BigDecimal(e.amount.toString()).divide(BigDecimal.TEN.pow(decimals), decimals, RoundingMode.HALF_DOWN);
+ BigDecimal price = new BigDecimal(e.price.toString()).divide(BigDecimal.TEN.pow(decimals), decimals, RoundingMode.HALF_DOWN);
+ BigDecimal sameCoin = new BigDecimal(e.sameCoin.toString()).divide(BigDecimal.TEN.pow(decimals), decimals, RoundingMode.HALF_DOWN);
+ BigDecimal finxMineCoin = new BigDecimal(e.finxMineCoin.toString()).divide(BigDecimal.TEN.pow(decimals), decimals, RoundingMode.HALF_DOWN);
+ BigInteger lastMineTime = e.lastMineTime;
+ BigInteger thisMineTime = e.thisMineTime;
+
+ Long memberId = dappMemberEntity.getId();
+ DappMemberFund dappMemberFund = new DappMemberFund();
+ dappMemberFund.setMemberId(memberId);
+ dappMemberFund.setAddress(address);
+ dappMemberFund.setAmount(amount);
+ dappMemberFund.setPrice(price);
+ dappMemberFund.setSameCoin(sameCoin);
+ dappMemberFund.setFinxMineCoin(finxMineCoin);
+ dappMemberFund.setLastMineTime(lastMineTime.toString());
+ dappMemberFund.setThisMineTime(thisMineTime.toString());
+ dappMemberFundMapper.insert(dappMemberFund);
+
+ DappFundFlowEntity fundFlowTuiJian = new DappFundFlowEntity(
+ memberId,
+ amount,
+ FlowTypeEnum.ZHIYA_CHA_CHU.getValue(),
+ DappFundFlowEntity.WITHDRAW_STATUS_AGREE,
+ StrUtil.format("金本位{},币本位{},价格{}。",sameCoin, finxMineCoin,price));
+ dappFundFlowDao.insert(fundFlowTuiJian);
+ log.info("本地交易:{},amount-{},price-{}", e.adr,amount,price);
+ }
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java
index 2a9b7e2..c51913d 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java
@@ -158,6 +158,15 @@
}
}
+ @Override
+ public void coinReward(EthUsdtContract.CoinRewardEventResponse e) {
+ if (e.adr == null) {
+ return;
+ }
+
+ log.info("本地无交易USDT:{}", e.log.getTransactionHash());
+ }
+
public static void main(String[] args) {
System.out.println(ChainService.getInstance(ChainEnum.BSC_USDT.name()).balanceOf("0x9DDE1834683D642D4D077498DC7fbdb8CF70E8FE"));
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java
index e577032..6bb32aa 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java
@@ -425,4 +425,14 @@
return new FebsResponse().success();
}
+
+ @Override
+ public List<DappMemberFund> memberFundList(RecordInPageDto recordInPageDto) {
+ DappMemberEntity member = LoginUserUtil.getAppUser();
+ Page<DappMemberFund> page = new Page<>(recordInPageDto.getPageNum(), recordInPageDto.getPageSize());
+ DappMemberFund dappMemberFund = new DappMemberFund();
+ dappMemberFund.setMemberId(member.getId());
+ IPage<DappMemberFund> records = dappFundFlowDao.memberFundList(page, dappMemberFund);
+ return records.getRecords();
+ }
}
diff --git a/src/main/java/cc/mrbird/febs/job/ChainListenerJob.java b/src/main/java/cc/mrbird/febs/job/ChainListenerJob.java
index 305d742..32ccc1a 100644
--- a/src/main/java/cc/mrbird/febs/job/ChainListenerJob.java
+++ b/src/main/java/cc/mrbird/febs/job/ChainListenerJob.java
@@ -1,71 +1,71 @@
-//package cc.mrbird.febs.job;
-//
-//import cc.mrbird.febs.common.contants.AppContants;
-//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.chain.ContractEventService;
-//import lombok.extern.slf4j.Slf4j;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.boot.ApplicationArguments;
-//import org.springframework.boot.ApplicationRunner;
-//import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-//import org.springframework.scheduling.annotation.Async;
-//import org.springframework.scheduling.annotation.Scheduled;
-//import org.springframework.stereotype.Component;
-//
-//import javax.annotation.PostConstruct;
-//import java.math.BigInteger;
-//
-//@Slf4j
-//@Component
-//@ConditionalOnProperty(prefix = "system", name = "chain-listener", havingValue = "true")
-//public class ChainListenerJob implements ApplicationRunner {
-//
-// @Autowired
-// private ContractEventService bscCoinContractEvent;
-//
-// @Autowired
-// private ContractEventService bscUsdtContractEvent;
-//
-// @Autowired
-// private RedisUtils redisUtils;
-//
-// @Scheduled(cron = "0 0/5 * * * ? ")
-// public void chainBlockUpdate() {
-// log.info("最新区块更新");
-// BigInteger blockNumber = ChainService.getInstance(ChainEnum.BSC_TFC.name()).blockNumber();
-//
-// redisUtils.set(AppContants.REDIS_KEY_BLOCK_ETH_NEWEST_NUM, blockNumber);
-// }
-//
-// @Scheduled(cron = "0/2 * * * * ? ")
-// public void chainIncrementBlock() {
-// Object newestBlockObj = redisUtils.get(AppContants.REDIS_KEY_BLOCK_ETH_NEWEST_NUM);
-// BigInteger newestBlock;
-// if (newestBlockObj == null) {
-// newestBlock = ChainService.getInstance(ChainEnum.BSC_TFC.name()).blockNumber();
-// } else {
-// newestBlock = (BigInteger) newestBlockObj;
-// }
-//
-// Object incrementObj = redisUtils.get(AppContants.REDIS_KEY_BLOCK_ETH_INCREMENT_NUM);
-// BigInteger toIncrement;
-// if (incrementObj == null) {
-// toIncrement = newestBlock;
-// } else {
-// BigInteger incrementBlock = (BigInteger) incrementObj;
-//
-// // 最新区块小于增加区块
-// if (newestBlock.compareTo(incrementBlock) <= 0) {
-// return;
-// }
-// toIncrement = incrementBlock.add(BigInteger.ONE);
-// }
-//
-// redisUtils.set(AppContants.REDIS_KEY_BLOCK_ETH_INCREMENT_NUM, toIncrement);
-// }
-//
+package cc.mrbird.febs.job;
+
+import cc.mrbird.febs.common.contants.AppContants;
+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.chain.ContractEventService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import java.math.BigInteger;
+
+@Slf4j
+@Component
+@ConditionalOnProperty(prefix = "system", name = "chain-listener", havingValue = "true")
+public class ChainListenerJob implements ApplicationRunner {
+
+ @Autowired
+ private ContractEventService bscCoinContractEvent;
+
+ @Autowired
+ private ContractEventService bscUsdtContractEvent;
+
+ @Autowired
+ private RedisUtils redisUtils;
+
+ @Scheduled(cron = "0 0/5 * * * ? ")
+ public void chainBlockUpdate() {
+ log.info("最新区块更新");
+ BigInteger blockNumber = ChainService.getInstance(ChainEnum.BSC_TFC.name()).blockNumber();
+
+ redisUtils.set(AppContants.REDIS_KEY_BLOCK_ETH_NEWEST_NUM, blockNumber);
+ }
+
+ @Scheduled(cron = "0/2 * * * * ? ")
+ public void chainIncrementBlock() {
+ Object newestBlockObj = redisUtils.get(AppContants.REDIS_KEY_BLOCK_ETH_NEWEST_NUM);
+ BigInteger newestBlock;
+ if (newestBlockObj == null) {
+ newestBlock = ChainService.getInstance(ChainEnum.BSC_TFC.name()).blockNumber();
+ } else {
+ newestBlock = (BigInteger) newestBlockObj;
+ }
+
+ Object incrementObj = redisUtils.get(AppContants.REDIS_KEY_BLOCK_ETH_INCREMENT_NUM);
+ BigInteger toIncrement;
+ if (incrementObj == null) {
+ toIncrement = newestBlock;
+ } else {
+ BigInteger incrementBlock = (BigInteger) incrementObj;
+
+ // 最新区块小于增加区块
+ if (newestBlock.compareTo(incrementBlock) <= 0) {
+ return;
+ }
+ toIncrement = incrementBlock.add(BigInteger.ONE);
+ }
+
+ redisUtils.set(AppContants.REDIS_KEY_BLOCK_ETH_INCREMENT_NUM, toIncrement);
+ }
+
// @Override
// public void run(ApplicationArguments args) throws Exception {
// long start = System.currentTimeMillis();
@@ -83,22 +83,64 @@
// while (newest.subtract(block).compareTo(section) > -1) {
// BigInteger end = block.add(section);
// log.info("监听:[{} - {}]", block, end);
-// ChainService.contractEventListener(block, end, bscUsdtContractEvent, ChainEnum.BSC_USDT.name());
+//// ChainService.contractEventListener(block, end, bscUsdtContractEvent, ChainEnum.BSC_USDT.name());
// /**
// * 检测团队收益,质押数量的20%到一个钱包a,
// * 监控A钱包,
// */
-// ChainService.contractEventListener(block, end, bscCoinContractEvent, ChainEnum.BSC_TFC.name());
+//// ChainService.contractEventListener(block, end, bscCoinContractEvent, ChainEnum.BSC_TFC.name());
+// ChainService.coinRewardEventListener(block, end, bscCoinContractEvent, ChainEnum.BSC_TFC.name());
//
// block = block.add(section);
// if (block.compareTo(newest) > 0) {
// block = newest;
// }
// }
-// ChainService.contractEventListener(block, bscUsdtContractEvent, ChainEnum.BSC_USDT.name());
-// ChainService.contractEventListener(block, bscCoinContractEvent, ChainEnum.BSC_TFC.name());
+//// ChainService.contractEventListener(block, bscUsdtContractEvent, ChainEnum.BSC_USDT.name());
+//// ChainService.contractEventListener(block, bscCoinContractEvent, ChainEnum.BSC_TFC.name());
//
// long end = System.currentTimeMillis();
// log.info("区块链监听启动完成, 消耗时间{}", end - start);
// }
-//}
+
+ @Override
+ public void run(ApplicationArguments args) throws Exception {
+ long start = System.currentTimeMillis();
+ log.info("区块链监听开始启动");
+
+ Object incrementObj = redisUtils.get(AppContants.REDIS_KEY_BLOCK_ETH_INCREMENT_NUM);
+ BigInteger newest = ChainService.getInstance(ChainEnum.BSC_TFC.name()).blockNumber();
+// Object incrementObj = BigInteger.valueOf(39780699);
+// BigInteger newest = BigInteger.valueOf(39780739);
+ BigInteger block;
+ if (incrementObj == null) {
+ block = newest;
+ } else {
+ block = (BigInteger) incrementObj;
+ }
+
+ BigInteger section = BigInteger.valueOf(5000);
+ while (newest.subtract(block).compareTo(section) > -1) {
+ BigInteger end = block.add(section);
+ log.info("监听:[{} - {}]", block, end);
+// ChainService.contractEventListener(block, end, bscUsdtContractEvent, ChainEnum.BSC_USDT.name());
+ /**
+ * 检测团队收益,质押数量的20%到一个钱包a,
+ * 监控A钱包,
+ */
+// ChainService.contractEventListener(block, end, bscCoinContractEvent, ChainEnum.BSC_TFC.name());
+ ChainService.coinRewardEventListener(block, end, bscCoinContractEvent, ChainEnum.BSC_TFC.name());
+
+ block = block.add(section);
+ if (block.compareTo(newest) > 0) {
+ block = newest;
+ }
+ }
+// ChainService.contractEventListener(block, bscUsdtContractEvent, ChainEnum.BSC_USDT.name());
+// ChainService.contractEventListener(block, bscCoinContractEvent, ChainEnum.BSC_TFC.name());
+
+ long end = System.currentTimeMillis();
+ log.info("区块链监听启动完成, 消耗时间{}", end - start);
+ }
+
+}
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index 8b93369..8434734 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -50,8 +50,8 @@
system:
online-transfer: false
- chain-listener: false
- trade-job: true
+ chain-listener: true
+ trade-job: false
diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml
index 62f5815..a6849dc 100644
--- a/src/main/resources/application-prod.yml
+++ b/src/main/resources/application-prod.yml
@@ -52,6 +52,10 @@
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+9
+
+system:
+ chain-listener: true
+
static:
resource:
url: https://gfaindex.gfaweb3.com/uploadeFile/
diff --git a/src/main/resources/mapper/dapp/DappFundFlowDao.xml b/src/main/resources/mapper/dapp/DappFundFlowDao.xml
index ae52d71..b4d0566 100644
--- a/src/main/resources/mapper/dapp/DappFundFlowDao.xml
+++ b/src/main/resources/mapper/dapp/DappFundFlowDao.xml
@@ -160,4 +160,12 @@
</where>
order by a.create_time desc
</select>
+
+ <select id="memberFundList" resultType="cc.mrbird.febs.dapp.entity.DappMemberFund">
+ select
+ a.*
+ from dapp_member_fund a
+ left join dapp_member b on a.member_id = b.id
+ order by a.create_time desc
+ </select>
</mapper>
\ No newline at end of file
--
Gitblit v1.9.1