src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java
@@ -114,6 +114,20 @@ return new FebsResponse().success().data("success"); } @ApiOperation(value = "互转ANDAO", notes = "互转ANDAO") @PostMapping(value = "/roundCoin") public FebsResponse roundCoin(@RequestBody RoundCoinDto roundCoinDto) { dappWalletService.roundCoin(roundCoinDto); return new FebsResponse().success().data("success"); } @ApiOperation(value = "互转AUSDT", notes = "互转AUSDT") @PostMapping(value = "/roundCoinAusdt") public FebsResponse roundCoinAusdt(@RequestBody RoundCoinDto roundCoinDto) { dappWalletService.roundCoinAusdt(roundCoinDto); return new FebsResponse().success().data("success"); } @ApiOperation(value = "记录列表", notes = "记录列表") @ApiResponses({ @ApiResponse(code = 200, message = "success", response = DappFundFlowVo.class) src/main/java/cc/mrbird/febs/dapp/dto/RoundCoinDto.java
New file @@ -0,0 +1,19 @@ package cc.mrbird.febs.dapp.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; @Data @ApiModel(value = "RoundCoinDto", description = "互转") public class RoundCoinDto { @ApiModelProperty(value = "对方地址", example = "0Xadsfsa") private String address; @ApiModelProperty(value = "币的数量", example = "20") private BigDecimal coinCnt; } src/main/java/cc/mrbird/febs/dapp/enumerate/FundFlowEnum.java
@@ -8,6 +8,10 @@ */ @Getter public enum FundFlowEnum { //ANDAO互转 ANDAO_MEMBER_TO_MENBER("ANDAO_MEMBER_TO_MENBER", 32), //AUSDT互转 AUSDT_MEMBER_TO_MENBER("AUSDT_MEMBER_TO_MENBER", 31), //20%全网加权分红(按20%释放递减)-(全网收益) POOL_MEMBER_A_CNT("POOL_MEMBER_A_CNT", 30), //每小时燃烧-(AN DAO燃烧) src/main/java/cc/mrbird/febs/dapp/enumerate/PoolEnum.java
@@ -8,6 +8,10 @@ @Getter public enum PoolEnum { /** * AUSD互转20% */ ANDAO_MEMBER_TO_MENBER_PERCENT("WALLET_SET", "ANDAO_MEMBER_TO_MENBER_PERCENT"), /** * AUSD价格 */ TRANSFER_A_AUSD_PRICE("WALLET_SET", "TRANSFER_A_AUSD_PRICE"), src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java
@@ -59,4 +59,8 @@ Long transferAusd(TransferAusdDto transferAusdDto); List<DappFundFlowVo> getRecordVoInPage(RecordInPageDto recordInPageDto); void roundCoin(RoundCoinDto roundCoinDto); void roundCoinAusdt(RoundCoinDto roundCoinDto); } src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java
@@ -136,7 +136,8 @@ if (member == null) { if (!"asdf4321".equals(connectDto.getInviteId())) { DappMemberEntity parent = dappMemberDao.selectMemberInfoByInviteId(connectDto.getInviteId()); // DappMemberEntity parent = dappMemberDao.selectMemberInfoByInviteId(connectDto.getInviteId()); DappMemberEntity parent = dappMemberDao.selectByAddress(connectDto.getInviteId(), null); if (parent == null) { throw new FebsException("recommender is not exist"); } @@ -510,6 +511,13 @@ public FebsResponse getMemberInfo() { DappMemberEntity member = LoginUserUtil.getAppUser(); DappMemberInfoVo dappMemberInfoVo = dappMemberDao.selectByMemberId(member.getId()); DataDictionaryCustom ausdPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( PoolEnum.TRANSFER_A_AUSD_PERCENT.getType(), PoolEnum.TRANSFER_A_AUSD_PERCENT.getCode() ); BigDecimal ausdPercent = new BigDecimal(ausdPercentDic.getValue()); dappMemberInfoVo.setAusdtFee(ausdPercent); //ausd价格 DataDictionaryCustom ausdPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( PoolEnum.TRANSFER_A_AUSD_PRICE.getType(), src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java
@@ -1496,6 +1496,7 @@ @Override public void selectAndInsertDics() { selectAndInsertDic(PoolEnum.ANDAO_MEMBER_TO_MENBER_PERCENT.getType(),PoolEnum.ANDAO_MEMBER_TO_MENBER_PERCENT.getCode(),"0.2","ANDAO互转20%"); selectAndInsertDic(PoolEnum.TRANSFER_A_AUSD_PRICE.getType(),PoolEnum.TRANSFER_A_AUSD_PRICE.getCode(),"0.01","AUSD价格"); selectAndInsertDic(PoolEnum.TRANSFER_A_AUSD_PERCENT.getType(),PoolEnum.TRANSFER_A_AUSD_PERCENT.getCode(),"0.1","买入A,10%的AUSD比例"); selectAndInsertDic(PoolEnum.WALLET_COIN_OUT_PERCENT.getType(),PoolEnum.WALLET_COIN_OUT_PERCENT.getCode(),"0.3","30%回流底池溢价"); src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java
@@ -977,4 +977,131 @@ IPage<DappFundFlowVo> records = dappFundFlowDao.selectVoInPage(page, dappFundFlowEntity); return records.getRecords(); } @Override public void roundCoin(RoundCoinDto roundCoinDto) { DappMemberEntity member = LoginUserUtil.getAppUser(); DappMemberEntity dappMemberEntity = dappMemberDao.selectById(member.getId()); String address = roundCoinDto.getAddress(); DappMemberEntity memberParent = dappMemberDao.selectByAddress(address, null); if(ObjectUtil.isEmpty(memberParent)){ throw new FebsException("请输入正确的地址"); } BigDecimal coinCnt = roundCoinDto.getCoinCnt(); if(BigDecimal.ZERO.compareTo(coinCnt) >= 0){ throw new FebsException("输入正确的数量"); } DappWalletCoinEntity dappWalletCoinEntity = dappWalletCoinDao.selectByMemberId(dappMemberEntity.getId()); BigDecimal availableAmount = dappWalletCoinEntity.getAvailableAmount(); if(availableAmount.compareTo(coinCnt) < 0){ throw new FebsException("数量不足"); } //减少闪兑钱包 this.updateWalletCoinWithLock(coinCnt,dappMemberEntity.getId(),2); //插入资产闪对的流水 DappFundFlowEntity aCoinCntFlow = new DappFundFlowEntity( dappMemberEntity.getId(), coinCnt.negate(), FundFlowEnum.ANDAO_MEMBER_TO_MENBER.getCode(), 2, BigDecimal.ZERO); dappFundFlowDao.insert(aCoinCntFlow); //闪对钱包20% 手续费(扣币) DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( PoolEnum.ANDAO_MEMBER_TO_MENBER_PERCENT.getType(), PoolEnum.ANDAO_MEMBER_TO_MENBER_PERCENT.getCode()); BigDecimal feePercent = new BigDecimal(StrUtil.isEmpty(dic.getValue()) ? "0.2" : dic.getValue()); //手续费 BigDecimal feeCnt = coinCnt.multiply(feePercent).setScale(4,BigDecimal.ROUND_DOWN); //闪对钱包获取的 BigDecimal aCoinCntReal = coinCnt.subtract(feeCnt).setScale(4, BigDecimal.ROUND_DOWN); //增加闪对钱包 this.updateWalletCoinWithLock(aCoinCntReal,memberParent.getId(),1); //插入资产闪对的流水 DappFundFlowEntity dappFundFlowEntity = new DappFundFlowEntity( dappMemberEntity.getId(), aCoinCntReal, FundFlowEnum.ANDAO_MEMBER_TO_MENBER.getCode(), 2, BigDecimal.ZERO); dappFundFlowDao.insert(dappFundFlowEntity); //金本位底池数量 DataDictionaryCustom coinAUsdtPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( PoolEnum.COIN_A_USDT_PRICE.getType(), PoolEnum.COIN_A_USDT_PRICE.getCode() ); BigDecimal coinAUsdtCnt = new BigDecimal(coinAUsdtPriceDic.getValue()); //币本位底池数量 DataDictionaryCustom coinACntDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( PoolEnum.COIN_A_CNT.getType(), PoolEnum.COIN_A_CNT.getCode() ); BigDecimal coinACnt = new BigDecimal(coinACntDic.getValue()); coinACnt = coinACnt.subtract(feeCnt).setScale(4,BigDecimal.ROUND_DOWN); coinACntDic.setValue(coinACnt.toString()); dataDictionaryCustomMapper.updateById(coinACntDic); DataDictionaryCustom aCoinPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( PoolEnum.COIN_A_PRICE.getType(), PoolEnum.COIN_A_PRICE.getCode() ); BigDecimal coinAPrice = new BigDecimal(aCoinPriceDic.getValue()); coinAPrice = coinAUsdtCnt.divide(coinACnt,8,BigDecimal.ROUND_DOWN); aCoinPriceDic.setValue(coinAPrice.toString()); dataDictionaryCustomMapper.updateById(aCoinPriceDic); chainProducer.sendAntKLineMsg(0); } @Override public void roundCoinAusdt(RoundCoinDto roundCoinDto) { DappMemberEntity member = LoginUserUtil.getAppUser(); DappMemberEntity dappMemberEntity = dappMemberDao.selectById(member.getId()); String address = roundCoinDto.getAddress(); DappMemberEntity memberParent = dappMemberDao.selectByAddress(address, null); if(ObjectUtil.isEmpty(memberParent)){ throw new FebsException("请输入正确的地址"); } BigDecimal coinCnt = roundCoinDto.getCoinCnt(); if(BigDecimal.ZERO.compareTo(coinCnt) >= 0){ throw new FebsException("输入正确的数量"); } DappUsdtPerkEntity dappUsdtPerkEntity = dappUsdtPerkEntityMapper.selectByMemberId(dappMemberEntity.getId()); BigDecimal availableAmount = dappUsdtPerkEntity.getAusdAmount(); if(availableAmount.compareTo(coinCnt) < 0){ throw new FebsException("数量不足"); } dappUsdtPerkEntity.setAusdAmount(availableAmount.subtract(coinCnt)); dappUsdtPerkEntityMapper.updateById(dappUsdtPerkEntity); //插入资产闪对的流水 DappFundFlowEntity aCoinCntFlow = new DappFundFlowEntity( dappMemberEntity.getId(), coinCnt.negate(), FundFlowEnum.AUSDT_MEMBER_TO_MENBER.getCode(), 2, BigDecimal.ZERO); dappFundFlowDao.insert(aCoinCntFlow); DappUsdtPerkEntity parentEntity = dappUsdtPerkEntityMapper.selectByMemberId(dappMemberEntity.getId()); BigDecimal availableAmountParent = parentEntity.getAusdAmount(); parentEntity.setAusdAmount(availableAmountParent.add(coinCnt)); dappUsdtPerkEntityMapper.updateById(parentEntity); //插入资产闪对的流水 DappFundFlowEntity aCoinCntFlowParent = new DappFundFlowEntity( dappMemberEntity.getId(), coinCnt, FundFlowEnum.AUSDT_MEMBER_TO_MENBER.getCode(), 2, BigDecimal.ZERO); dappFundFlowDao.insert(aCoinCntFlowParent); } } src/main/java/cc/mrbird/febs/dapp/vo/DappMemberInfoVo.java
@@ -34,6 +34,9 @@ @ApiModelProperty(value = "A币的价格") private BigDecimal coinAPrice; @ApiModelProperty(value = "兑换AUSDT的手续费比例") private BigDecimal ausdtFee; @ApiModelProperty(value = "资产到闪兑的手续费比例") private BigDecimal mineToCoinFee; @@ -43,4 +46,7 @@ @ApiModelProperty(value = "我的贡献值") private BigDecimal nftDevote; @ApiModelProperty(value = "是否激活 1:已激活 2:未激活 已激活,有推广链接") private Integer activeStatus; } src/main/resources/mapper/dapp/DappMemberDao.xml
@@ -190,6 +190,7 @@ select a.invite_id inviteId, a.account_type accountType, a.active_status activeStatus, b.ausd_amount ausdAmount, b.nft_devote nftDevote, b.amount amount,