KKSU
2024-04-29 2a15d38ae05314799daa24e26779e036c5ec8f39
测试环境新版
11 files modified
202 ■■■■ changed files
src/main/java/cc/mrbird/febs/dapp/entity/DappAchieve.java 4 ●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/mapper/DappAchieveMapper.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/AsyncCjService.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/impl/AdminBannerServiceImpl.java 1 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/impl/AsyncCjServiceImpl.java 23 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/impl/BscCoinContractEvent.java 15 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java 47 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/vo/WalletInfoVo.java 11 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/job/GiveMeMoneyJob.java 44 ●●●● patch | view | raw | blame | history
src/main/resources/mapper/dapp/DappAchieveMapper.xml 20 ●●●●● patch | view | raw | blame | history
src/test/java/cc/mrbird/febs/MemberTest.java 24 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/entity/DappAchieve.java
@@ -19,10 +19,12 @@
    private Long memberId;
    private BigDecimal price;//投入GFA数量
    private BigDecimal price;//价格
    private BigDecimal amount;//投入GFA数量
    private BigDecimal amountDone;//累计产出
    private BigDecimal goldAmount;//金本位
    private BigDecimal coinAmount;//币本位
    private BigDecimal amountMax;//出局数量
src/main/java/cc/mrbird/febs/dapp/mapper/DappAchieveMapper.java
@@ -7,9 +7,19 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.List;
public interface DappAchieveMapper  extends BaseMapper<DappAchieve> {
    IPage<DappAchieve> selectInPage(Page<DappAchieve> page,  @Param("record")DappAchieve dappAchieve);
    IPage<DappAchieveItem> dappAchieveItemInPage(Page<DappAchieveItem> page, @Param("record")DappAchieve dappAchieve);
    List<DappAchieve> selectListByMemberId(@Param("memberId")Long memberId);
    BigDecimal selectGoldAmountByMemberId(@Param("memberId")Long memberId);
    BigDecimal selectCoinAmountByMemberId(@Param("memberId")Long memberId);
}
src/main/java/cc/mrbird/febs/dapp/service/AsyncCjService.java
@@ -33,4 +33,7 @@
    @Async(FebsConstant.ASYNC_POOL)
    void confirmCancel(DappFundFlowEntity dappFundFlowEntity);
    @Async(FebsConstant.ASYNC_POOL)
    void calculateAchieve(DappAchieve dappAchieve);
}
src/main/java/cc/mrbird/febs/dapp/service/impl/AdminBannerServiceImpl.java
@@ -212,6 +212,7 @@
        dappAchieve.setAmountDone(BigDecimal.ZERO);
        dappAchieveMapper.insert(dappAchieve);
        asyncCjService.insertTeamPerk(fundFlow.getId(), dappAchieve.getId());
        asyncCjService.calculateAchieve(dappAchieve);
        return new FebsResponse().success();
    }
}
src/main/java/cc/mrbird/febs/dapp/service/impl/AsyncCjServiceImpl.java
@@ -374,6 +374,29 @@
        }
    }
    @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();
src/main/java/cc/mrbird/febs/dapp/service/impl/BscCoinContractEvent.java
@@ -213,13 +213,22 @@
        dappMemberFundMapper.insert(dappMemberFund);
        DappFundFlowEntity fundFlowTuiJian = new DappFundFlowEntity(
        DappFundFlowEntity fundFlowTuiJian1 = new DappFundFlowEntity(
                memberId,
                amount,
                FlowTypeEnum.ZHIYA_CHA_CHU.getValue(),
                DappFundFlowEntity.WITHDRAW_STATUS_AGREE,
                StrUtil.format("金本位{},币本位{},价格{}。",sameCoin, finxMineCoin,price));
        dappFundFlowDao.insert(fundFlowTuiJian);
                StrUtil.format("金本位{}",sameCoin));
        dappFundFlowDao.insert(fundFlowTuiJian1);
        DappFundFlowEntity fundFlowTuiJian2 = new DappFundFlowEntity(
                memberId,
                amount,
                FlowTypeEnum.ZHIYA_CHA_CHU.getValue(),
                DappFundFlowEntity.WITHDRAW_STATUS_AGREE,
                StrUtil.format("币本位{},价格{}。",finxMineCoin,price));
        dappFundFlowDao.insert(fundFlowTuiJian2);
        log.info("本地交易:{},amount-{},price-{}", e.adr,amount,price);
    }
}
src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java
@@ -48,6 +48,7 @@
    private final DappAchieveItemMapper dappAchieveItemMapper;
    private final ChainProducer chainProducer;
    private final AsyncCjService asyncCjService;
    private final DappMemberFundMapper dappMemberFundMapper;
    @Override
    public WalletInfoVo walletInfo() {
@@ -80,11 +81,48 @@
        BigDecimal zyToday = dappFundFlowDao.selectAmountTotalByTypeAndMemberIdAndDate(member.getId(), FlowTypeEnum.ZHI_YA.getValue(), new Date()).negate();
        walletInfo.setZyToday(zyToday);
        BigDecimal ccTotal = dappFundFlowDao.selectAmountTotalByTypeAndMemberIdAndDate(member.getId(), FlowTypeEnum.ZHIYA_CHA_CHU.getValue(),null);
        walletInfo.setCcTotal(ccTotal);
        BigDecimal ccToday = dappFundFlowDao.selectAmountTotalByTypeAndMemberIdAndDate(member.getId(), FlowTypeEnum.ZHIYA_CHA_CHU.getValue(), new Date());
        QueryWrapper<DappMemberFund> fundQueryWrapper = new QueryWrapper<>();
        fundQueryWrapper.eq("member_id",memberId);
        List<DappMemberFund> ccTodays = dappMemberFundMapper.selectList(fundQueryWrapper);
        BigDecimal ccToday = BigDecimal.ZERO;
        if(CollUtil.isNotEmpty(ccTodays)){
            for(DappMemberFund dappMemberFund : ccTodays){
                BigDecimal sameCoin = dappMemberFund.getSameCoin();
                BigDecimal finxMineCoin = dappMemberFund.getFinxMineCoin();
                BigDecimal price = dappMemberFund.getPrice();
                BigDecimal add = sameCoin.divide(price, 8, BigDecimal.ROUND_DOWN).add(finxMineCoin);
                ccToday = ccToday.add(add);
            }
        }
        walletInfo.setCcToday(ccToday);
        List<DappMemberFund> dappMemberFunds = dappMemberFundMapper.selectList(null);
        walletInfo.setCcTotal(CollUtil.isEmpty(dappMemberFunds) ? BigDecimal.ZERO :
                dappMemberFunds.stream().map(item-> item.getAmount()).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(8,BigDecimal.ROUND_DOWN));
        List<DappAchieve> dappAchieves = dappAchieveMapper.selectListByMemberId(memberId);
        BigDecimal goldAmountDone = dappAchieveMapper.selectGoldAmountByMemberId(memberId);
        BigDecimal coinAmountDone = dappAchieveMapper.selectCoinAmountByMemberId(memberId);
        if(CollUtil.isNotEmpty(dappAchieves)){
            BigDecimal goldAmount = dappAchieves.stream().map(item-> item.getGoldAmount()).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(8,BigDecimal.ROUND_DOWN);
            BigDecimal coinAmount = dappAchieves.stream().map(item-> item.getCoinAmount()).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(8,BigDecimal.ROUND_DOWN);
            BigDecimal goldAmountAva = goldAmount.subtract(goldAmountDone);//金本位剩余
            BigDecimal coinAmountAva = coinAmount.subtract(coinAmountDone);//币本位剩余
            if(goldAmountAva.compareTo(BigDecimal.ZERO) > 0){
                walletInfo.setGoldAmount(goldAmountAva);
            }else{
                walletInfo.setGoldAmount(BigDecimal.ZERO);
            }
            if(coinAmountAva.compareTo(BigDecimal.ZERO) > 0){
                walletInfo.setCoinAmount(coinAmountAva);
            }else{
                walletInfo.setCoinAmount(BigDecimal.ZERO);
            }
        }else{
            walletInfo.setGoldAmount(BigDecimal.ZERO);
            walletInfo.setCoinAmount(BigDecimal.ZERO);
        }
        BigDecimal gfaDays = new BigDecimal(redisUtils.getString(DataDicEnum.GFA_DAYS.getValue())).setScale(2,BigDecimal.ROUND_DOWN);
        walletInfo.setGfaDays(gfaDays);
@@ -339,6 +377,7 @@
            dappAchieveMapper.insert(dappAchieve);
            asyncCjService.insertTeamPerk(flow.getId(), dappAchieve.getId());
            asyncCjService.calculateAchieve(dappAchieve);
            //发送一个延时队列消息。24小时之后产生第一次的质押产出
//            chainProducer.sendZhiYaDelayMsg(dappAchieve.getId(), 24 * 60 * 60 * 1000L);
src/main/java/cc/mrbird/febs/dapp/vo/WalletInfoVo.java
@@ -29,13 +29,13 @@
    @ApiModelProperty(value = "今日质押 - 累计质押")
    private BigDecimal zyTotal;
    @ApiModelProperty(value = "今日质押 - 总产出")
    @ApiModelProperty(value = "今日质押 - 全网总产出")
    private BigDecimal ccTotal;
    @ApiModelProperty(value = "今日质押 - 今日质押")
    private BigDecimal zyToday;
    @ApiModelProperty(value = "今日质押 - 今日产出")
    @ApiModelProperty(value = "今日质押 - 个人总产出")
    private BigDecimal ccToday;
    @ApiModelProperty(value = "质押最小数")
@@ -52,4 +52,11 @@
    @ApiModelProperty(value = "质押总量")
    private BigDecimal gfaDays;
    @ApiModelProperty(value = "金本位")
    private BigDecimal goldAmount;//金本位
    @ApiModelProperty(value = "币本位")
    private BigDecimal coinAmount;//币本位
}
src/main/java/cc/mrbird/febs/job/GiveMeMoneyJob.java
@@ -5,16 +5,21 @@
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.DappAchieve;
import cc.mrbird.febs.dapp.entity.DappAddressList;
import cc.mrbird.febs.dapp.entity.DappHdRecord;
import cc.mrbird.febs.dapp.mapper.DappAchieveMapper;
import cc.mrbird.febs.dapp.mapper.DappAdressListDao;
import cc.mrbird.febs.dapp.mapper.DappHdRecordMapper;
import cc.mrbird.febs.dapp.mapper.DappMemberDao;
import cc.mrbird.febs.dapp.service.DappSystemService;
import cc.mrbird.febs.rabbit.producer.ChainProducer;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -26,6 +31,7 @@
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Date;
import java.util.List;
/**
@@ -43,6 +49,38 @@
    private RedisUtils redisUtils;
    @Autowired
    private DappHdRecordMapper dappHdRecordMapper;
    @Autowired
    private DappAchieveMapper dappAchieveMapper;
    /**
     * 计算业绩是否失效
     */
    @Scheduled(cron = "0 0/5 * * * ? ")
    public void achieveJob() {
        QueryWrapper<DappAchieve> objectQueryWrapper = new QueryWrapper<>();
        objectQueryWrapper.eq("state",DappAchieve.STATUS_ING);
        List<DappAchieve> dappAchieves = dappAchieveMapper.selectList(objectQueryWrapper);
        if(CollUtil.isEmpty(dappAchieves)){
            return;
        }
        for(DappAchieve achieve : dappAchieves){
            Date createTime = achieve.getCreateTime();
            DateTime dateTime = DateUtil.offsetDay(createTime, 75);//失效时间
            if(DateUtil.compare(new Date(),dateTime) > 0){
                continue;
            }
            achieve.setState(DappAchieve.STATUS_DONE);
            dappAchieveMapper.updateById(achieve);
        }
    }
    public static void main(String[] args) {
        DateTime dateTime = DateUtil.offsetDay(new Date(), 75);
        System.out.println(dateTime);
        System.out.println(DateUtil.compare(new Date(),dateTime));
        System.out.println(DateUtil.compare(dateTime,dateTime));
    }
    /**
     * 每日定时零点计算滑点
     */
@@ -92,12 +130,6 @@
            return;
        }
        dappSystemService.tradeProfitDistribute(1L);
    }
    public static void main(String[] args) {
//        System.out.println(ChainService.getInstance(ChainEnum.BSC_GFA.name()).totalSupply());
//        System.out.println(ChainService.getInstance(ChainEnum.BSC_GFA.name()).balanceOf("0x1Ea392645f816BF15f1Fc87728eA010585bAAE7D"));
        System.out.println(ChainService.getInstance(ChainEnum.BSC_GFA.name()).getPrice("0x1Ea392645f816BF15f1Fc87728eA010585bAAE7D"));
    }
}
src/main/resources/mapper/dapp/DappAchieveMapper.xml
@@ -29,4 +29,24 @@
        order by a.create_time desc
    </select>
    <select id="selectListByMemberId" resultType="cc.mrbird.febs.dapp.entity.DappAchieve">
        select
        a.*
        from dapp_achieve a
        where a.member_id = #{memberId}
    </select>
    <select id="selectGoldAmountByMemberId" resultType="java.math.BigDecimal">
        select ifnull(sum(a.gold_amount), 0)
        from dapp_member_fund a
        where a.member_id = #{memberId}
    </select>
    <select id="selectCoinAmountByMemberId" resultType="java.math.BigDecimal">
        select ifnull(sum(a.coin_amount), 0)
        from dapp_member_fund a
        where a.member_id = #{memberId}
    </select>
</mapper>
src/test/java/cc/mrbird/febs/MemberTest.java
@@ -3,12 +3,16 @@
import cc.mrbird.febs.common.contants.AppContants;
import cc.mrbird.febs.common.enumerates.DataDicEnum;
import cc.mrbird.febs.common.utils.RedisUtils;
import cc.mrbird.febs.dapp.entity.DappAchieve;
import cc.mrbird.febs.dapp.entity.DappMemberEntity;
import cc.mrbird.febs.dapp.entity.DataDictionaryCustom;
import cc.mrbird.febs.dapp.mapper.DappAchieveMapper;
import cc.mrbird.febs.dapp.mapper.DappMemberDao;
import cc.mrbird.febs.dapp.mapper.DataDictionaryCustomMapper;
import cc.mrbird.febs.dapp.service.AsyncCjService;
import cc.mrbird.febs.dapp.service.DappSystemService;
import cc.mrbird.febs.rabbit.producer.ChainProducer;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import org.apache.commons.lang3.StringUtils;
import org.junit.jupiter.api.Test;
@@ -34,19 +38,19 @@
    @Autowired
    private DappSystemService dappSystemService;
    @Autowired
    private DappAchieveMapper dappAchieveMapper;
    @Autowired
    private AsyncCjService asyncCjService;
    @Test
    public void mineJob() {
        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;
        List<DappAchieve> dappAchieves = dappAchieveMapper.selectList(null);
        if(CollUtil.isNotEmpty(dappAchieves)){
            for(DappAchieve dappAchieve : dappAchieves){
                asyncCjService.calculateAchieve(dappAchieve);
        }
        if(BigDecimal.ZERO.compareTo(coinAmount) > 0){
            return;
        }
//        dappSystemService.tradeProfitDistribute(1L);
    }