KKSU
2024-05-09 f2dd0068e9f235fd364120cb32607169831b2c98
合约监听
3 files modified
69 ■■■■■ changed files
src/main/java/cc/mrbird/febs/dapp/chain/EthUsdtContract.java 4 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/entity/DappMemberFund.java 2 ●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/impl/BscCoinContractEvent.java 63 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/chain/EthUsdtContract.java
@@ -3,8 +3,6 @@
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;
@@ -414,6 +412,7 @@
                    typedResponse.coinTarget = (BigInteger) eventValues.getNonIndexedValues().get(4).getValue();
                    typedResponse.usdtCoin = (BigInteger) eventValues.getNonIndexedValues().get(5).getValue();
                    typedResponse.lastMineTime = (BigInteger) eventValues.getNonIndexedValues().get(6).getValue();
                    typedResponse.blockHash = log.getTransactionHash();
                }
                return typedResponse;
@@ -839,5 +838,6 @@
        public BigInteger coinTarget;//币本位多少币
        public BigInteger usdtCoin;//金本位换算后多少币
        public BigInteger lastMineTime;//上一次挖矿时间
        public String blockHash;//上一次挖矿时间
    }
}
src/main/java/cc/mrbird/febs/dapp/entity/DappMemberFund.java
@@ -5,7 +5,6 @@
import lombok.Data;
import java.math.BigDecimal;
import java.math.BigInteger;
@Data
@TableName("dapp_member_fund")
@@ -14,6 +13,7 @@
    private Long memberId;
    public String address;
    public String blockHash;
    public BigDecimal amount;//总挖矿数量
    public BigDecimal price;//价格
src/main/java/cc/mrbird/febs/dapp/service/impl/BscCoinContractEvent.java
@@ -21,6 +21,7 @@
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -188,6 +189,7 @@
         * 生成对应的产矿流水
         */
        String address = e.adr;
        String blockHash = e.blockHash;
        DappMemberEntity dappMemberEntity = dappMemberDao.selectByAddress(address, null);
        if(ObjectUtil.isEmpty(dappMemberEntity)){
            return;
@@ -200,35 +202,42 @@
        BigDecimal usdtCoin = new BigDecimal(e.usdtCoin.toString()).divide(BigDecimal.TEN.pow(decimals), decimals, RoundingMode.HALF_DOWN);
        BigInteger lastMineTime = e.lastMineTime;
        Long memberId = dappMemberEntity.getId();
        DappMemberFund dappMemberFund = new DappMemberFund();
        dappMemberFund.setMemberId(memberId);
        dappMemberFund.setAddress(address);
        dappMemberFund.setAmount(amount);
        dappMemberFund.setPrice(price);
        dappMemberFund.setUsdtTarget(usdtTarget);
        dappMemberFund.setCoinTarget(coinTarget);
        dappMemberFund.setUsdtCoin(usdtCoin);
        dappMemberFund.setLastMineTime(lastMineTime.toString());
        dappMemberFundMapper.insert(dappMemberFund);
        QueryWrapper<DappMemberFund> objectQueryWrapper = new QueryWrapper<>();
        objectQueryWrapper.eq("block_hash",blockHash);
        objectQueryWrapper.eq("address",address);
        objectQueryWrapper.eq("last_mine_time",lastMineTime.toString());
        List<DappMemberFund> dappMemberFunds = dappMemberFundMapper.selectList(objectQueryWrapper);
        if(CollUtil.isEmpty(dappMemberFunds)){
            Long memberId = dappMemberEntity.getId();
            DappMemberFund dappMemberFund = new DappMemberFund();
            dappMemberFund.setMemberId(memberId);
            dappMemberFund.setAddress(address);
            dappMemberFund.setBlockHash(blockHash);
            dappMemberFund.setAmount(amount);
            dappMemberFund.setPrice(price);
            dappMemberFund.setUsdtTarget(usdtTarget);
            dappMemberFund.setCoinTarget(coinTarget);
            dappMemberFund.setUsdtCoin(usdtCoin);
            dappMemberFund.setLastMineTime(lastMineTime.toString());
            dappMemberFundMapper.insert(dappMemberFund);
            DappFundFlowEntity fundFlowTuiJian1 = new DappFundFlowEntity(
                    memberId,
                    usdtTarget,
                    FlowTypeEnum.ZHIYA_CHA_CHU.getValue(),
                    DappFundFlowEntity.WITHDRAW_STATUS_AGREE,
                    StrUtil.format("金本位{},价格{}。",usdtTarget,price));
        DappFundFlowEntity fundFlowTuiJian1 = new DappFundFlowEntity(
                memberId,
                usdtTarget,
                FlowTypeEnum.ZHIYA_CHA_CHU.getValue(),
                DappFundFlowEntity.WITHDRAW_STATUS_AGREE,
                StrUtil.format("金本位{},价格{}。",usdtTarget,price));
            dappFundFlowDao.insert(fundFlowTuiJian1);
        dappFundFlowDao.insert(fundFlowTuiJian1);
        DappFundFlowEntity fundFlowTuiJian2 = new DappFundFlowEntity(
                memberId,
                coinTarget,
                FlowTypeEnum.ZHIYA_CHA_CHU.getValue(),
                DappFundFlowEntity.WITHDRAW_STATUS_AGREE,
                StrUtil.format("币本位{},价格{}。",coinTarget,price));
        dappFundFlowDao.insert(fundFlowTuiJian2);
        log.info("本地交易:{},amount-{},price-{}", e.adr,amount,price);
            DappFundFlowEntity fundFlowTuiJian2 = new DappFundFlowEntity(
                    memberId,
                    coinTarget,
                    FlowTypeEnum.ZHIYA_CHA_CHU.getValue(),
                    DappFundFlowEntity.WITHDRAW_STATUS_AGREE,
                    StrUtil.format("币本位{},价格{}。",coinTarget,price));
            dappFundFlowDao.insert(fundFlowTuiJian2);
            log.info("本地交易:{},amount-{},price-{}", e.adr,amount,price);
        }
    }
}