wzy
2022-08-27 afe2e9a2da152a9b1a54d88b7637e811bf298749
finish matrix profit
14 files modified
148 ■■■■■ changed files
src/main/java/cc/mrbird/febs/common/advise/MyResponseBodyAdvise.java 1 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java 2 ●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/entity/DappMineDataEntity.java 5 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/mapper/DappSystemDao.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/mapper/DappWalletCoinDao.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java 4 ●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java 8 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java 14 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java 40 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java 49 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/job/MatrixTreeInit.java 1 ●●●● patch | view | raw | blame | history
src/main/resources/mapper/dapp/DappSystemDao.xml 5 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/dapp/DappWalletCoinDao.xml 8 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/advise/MyResponseBodyAdvise.java
@@ -31,7 +31,6 @@
    @Override
    public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
        if (!AppContants.ENCRYPT_METHOD.contains(methodParameter.getMethod().getName()) || isDebug) {
            System.out.println(1111111);
            return o;
        }
src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java
@@ -47,7 +47,7 @@
    private BigDecimal amount;
    /**
     * 类型 1-买入 2-矩阵收益 3-直推收益
     * 类型 1-买入 2-矩阵收益 3-直推收益 4-保险池
     */
    private Integer type;
src/main/java/cc/mrbird/febs/dapp/entity/DappMineDataEntity.java
@@ -20,4 +20,9 @@
    private Integer partnerCnt;
    private BigDecimal partnerIncome;
    /**
     * 保险池
     */
    private BigDecimal safePool;
}
src/main/java/cc/mrbird/febs/dapp/mapper/DappSystemDao.java
@@ -1,9 +1,11 @@
package cc.mrbird.febs.dapp.mapper;
import cc.mrbird.febs.dapp.entity.DappMineDataEntity;
import org.apache.ibatis.annotations.Param;
public interface DappSystemDao {
    DappMineDataEntity selectMineDataForOne();
    int updateMineData(@Param("record") DappMineDataEntity dappMineDataEntity);
}
src/main/java/cc/mrbird/febs/dapp/mapper/DappWalletCoinDao.java
@@ -11,4 +11,6 @@
    DappWalletCoinEntity selectByMemberId(@Param("memberId") Long memberId);
    IPage<DappWalletCoinEntity> selectInPage(@Param("record") DappWalletCoinEntity walletCoin, Page<DappWalletCoinEntity> page);
    int updateWithLock(@Param("record") DappWalletCoinEntity dappWalletCoinEntity);
}
src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java
@@ -57,4 +57,11 @@
    boolean hasProfit(String address);
    void achieveTree(Long memberId);
    /**
     * 投入收益
     *
     * @param isReIn
     */
    void putIntoProfit(Long memberId, int isReIn);
}
src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java
@@ -45,6 +45,8 @@
    List<ActiveNftListVo> findUnActiveNftList();
    void withdraw(@RequestBody WithdrawDto withdrawDto);
    void withdraw(WithdrawDto withdrawDto);
    void updateWalletCoinWithLock(BigDecimal amount, Long memberId);
}
src/main/java/cc/mrbird/febs/dapp/service/impl/BscUsdtContractEvent.java
@@ -100,16 +100,10 @@
            }
            OnlineTransferUtil.addTransferRecord(e.from, e.to, amount, e.log.getTransactionHash(), DappTransferRecordEntity.TRANSFER_SOURCE_FLAG_APPLICATION, "USDT");
            fundFlow.setAmount(fundFlow.getAmount().negate());
            // 更改状态为已同步
            fundFlow.setStatus(2);
            dappFundFlowDao.updateById(fundFlow);
            synchronized (this) {
                DappWalletCoinEntity walletCoin = dappWalletCoinDao.selectByMemberId(fundFlow.getMemberId());
                walletCoin.setTotalAmount(walletCoin.getTotalAmount().add(amount));
                walletCoin.setAvailableAmount(walletCoin.getAvailableAmount().add(amount));
                dappWalletCoinDao.updateById(walletCoin);
            }
            chainProducer.sendAchieveTreeMsg(fundFlow.getMemberId());
        }
src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java
@@ -137,8 +137,10 @@
                if (child.size() == 6) {
                    throw new FebsException("Invite Code is Invalid");
                }
            } else {
                connectDto.setInviteId(null);
            }
            member = insertMember(connectDto.getAddress(), null);
            member = insertMember(connectDto.getAddress(), connectDto.getInviteId());
        }
        String key = LoginUserUtil.getLoginKey(connectDto.getAddress(), connectDto.getNonce(), connectDto.getSign());
@@ -282,8 +284,6 @@
        member.setChainType(chainType);
        member.setAccountType(accountType);
        member.setActiveStatus(2);
//        member.setBalance(ChainService.getInstance(ChainEnum.BSC_TFC.name()).balanceOf(address));
//        member.setUsdtBalance(ChainService.getInstance(ChainEnum.BSC_USDT.name()).balanceOf(address));
        dappMemberDao.insert(member);
@@ -303,19 +303,12 @@
            boolean flag = false;
            String parentId = refererId;
            String ids = "";
            String feeProfitIds = "";
            while (!flag && StringUtils.isNotBlank(parentId)) {
                if (StrUtil.isBlank(ids)) {
                    ids += parentId;
                } else {
                    ids += ("," + parentId);
                }
                if (StrUtil.isBlank(feeProfitIds)) {
                    feeProfitIds += parentId;
                } else {
                    feeProfitIds += ("," + parentId);
                }
                DappMemberEntity parentMember = dappMemberDao.selectMemberInfoByInviteId(parentId);
@@ -331,7 +324,6 @@
                }
            }
            member.setRefererIds(ids);
            member.setFeeProfitIds(feeProfitIds);
        }
        dappMemberDao.updateById(member);
src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java
@@ -11,6 +11,7 @@
import cc.mrbird.febs.dapp.enumerate.CardPeriod;
import cc.mrbird.febs.dapp.mapper.*;
import cc.mrbird.febs.dapp.service.DappSystemService;
import cc.mrbird.febs.dapp.service.DappWalletService;
import cc.mrbird.febs.dapp.utils.OnlineTransferUtil;
import cc.mrbird.febs.dapp.vo.RedisTransferPoolVo;
import cc.mrbird.febs.dapp.vo.SlipSettingVo;
@@ -66,6 +67,7 @@
    private final DappAchieveTreeDao dappAchieveTreeDao;
    private final DappAchieveMemberTreeDao dappAchieveMemberTreeDao;
    private final DappWalletService dappWalletService;
    @Override
@@ -685,6 +687,11 @@
        }
        dappAchieveMemberTreeDao.insert(achieveMemberTree);
        // 激活用户状态
        member.setActiveStatus(1);
        dappMemberDao.updateById(member);
        putIntoProfit(memberId, 2);
        if (parentNode == null) {
            return;
        }
@@ -733,10 +740,43 @@
            dappAchieveMemberTreeDao.resetMatrixTree(memberId);
            dappAchieveMemberTreeDao.reentryMoney(memberId);
            putIntoProfit(memberId, 1);
            DappAchieveMemberTreeEntity bottomNode = dappAchieveMemberTreeDao.selectNodeByDeep(memberId, 3);
            if (bottomNode != null) {
                finishMatrixTree(bottomNode.getTopNode());
            }
        }
    }
    @Override
    public void putIntoProfit(Long memberId, int isReIn) {
        DappMemberEntity member = dappMemberDao.selectById(memberId);
        DappMemberEntity parent = dappMemberDao.selectMemberInfoByInviteId(member.getRefererId());
        if (parent != null) {
            BigDecimal directProfit = new BigDecimal("100").multiply(new BigDecimal("0.15"));
            dappWalletService.updateWalletCoinWithLock(directProfit, parent.getId());
            DappFundFlowEntity fundFlow = new DappFundFlowEntity(parent.getId(), directProfit, 3, 2, null, null);
            dappFundFlowDao.insert(fundFlow);
        }
        // 如果是复投的,则需奖励
        if (isReIn == 1) {
            dappWalletService.updateWalletCoinWithLock(new BigDecimal(190), member.getId());
            DappFundFlowEntity matrixProfitFlow = new DappFundFlowEntity(memberId, new BigDecimal("190"), 2, 2, null, null);
            dappFundFlowDao.insert(matrixProfitFlow);
            DappFundFlowEntity rePutInFlow = new DappFundFlowEntity(memberId, new BigDecimal("100").negate(), 1, 2, null, null);
            dappFundFlowDao.insert(rePutInFlow);
            DappFundFlowEntity safePoolFlow = new DappFundFlowEntity(memberId, new BigDecimal("10").negate(), 4, 2, null, null);
            dappFundFlowDao.insert(safePoolFlow);
            DappMineDataEntity mineData = dappSystemDao.selectMineDataForOne();
            mineData.setSafePool(mineData.getSafePool().add(BigDecimal.TEN));
            dappSystemDao.updateMineData(mineData);
        }
    }
}
src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java
@@ -13,7 +13,6 @@
import cc.mrbird.febs.dapp.dto.*;
import cc.mrbird.febs.dapp.entity.*;
import cc.mrbird.febs.dapp.mapper.*;
import cc.mrbird.febs.dapp.service.DappSystemService;
import cc.mrbird.febs.dapp.service.DappWalletService;
import cc.mrbird.febs.dapp.utils.BoxUtil;
import cc.mrbird.febs.dapp.vo.ActiveNftListVo;
@@ -53,7 +52,6 @@
    private final DappAccountMoneyChangeDao dappAccountMoneyChangeDao;
    private final RedisUtils redisUtils;
    private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
    private final DappSystemService dappSystemService;
    private final DappNftActivationDao dappNftActivationDao;
    private final ChainProducer chainProducer;
@@ -228,12 +226,10 @@
            if (transferDto.getAmount().compareTo(walletCoin.getAvailableAmount()) > 0) {
                throw new FebsException("Balance Not Enough");
            }
            walletCoin.setTotalAmount(walletCoin.getTotalAmount().subtract(transferDto.getAmount()));
            walletCoin.setAvailableAmount(walletCoin.getAvailableAmount().subtract(transferDto.getAmount()));
            dappWalletCoinDao.updateById(walletCoin);
            updateWalletCoinWithLock(transferDto.getAmount().negate(), member.getId());
            DappFundFlowEntity fundFlow = new DappFundFlowEntity(member.getId(), transferDto.getAmount(), 1, 2, transferDto.getFee(), transferDto.getTxHash());
            DappFundFlowEntity fundFlow = new DappFundFlowEntity(member.getId(), transferDto.getAmount().negate(), 1, 2, transferDto.getFee(), transferDto.getTxHash());
            dappFundFlowDao.insert(fundFlow);
            chainProducer.sendAchieveTreeMsg(member.getId());
@@ -260,30 +256,7 @@
    @Override
    public Map<String, BigDecimal> calPrice(PriceDto priceDto) {
        DappMemberEntity member = LoginUserUtil.getAppUser();
        if (!dappSystemService.systemHasStart()) {
            HashMap<String, BigDecimal> map = new HashMap<>();
            map.put("x", new BigDecimal("0.05"));
            map.put("y", new BigDecimal("0.05"));
            return map;
        }
        ContractChainService tfcInstance = ChainService.getInstance(ChainEnum.BSC_TFC.name());
        // u剩余数量
        BigDecimal sourceU = ChainService.getInstance(ChainEnum.BSC_USDT.name()).balanceOf(ChainEnum.BSC_USDT_SOURCE.getAddress());
        // 源池代币剩余数量
        BigDecimal sourceCoin = tfcInstance.balanceOf(ChainEnum.BSC_USDT_SOURCE.getAddress());
        // 用户卖出数量
        BigDecimal coin = priceDto.getAmount();
        BigDecimal x = sourceU.divide(sourceCoin, tfcInstance.decimals(), RoundingMode.HALF_UP);
        BigDecimal y = sourceU.divide(sourceCoin.add(coin), tfcInstance.decimals(), RoundingMode.HALF_UP);
        log.info("购买价格:{}, 出卖价格:{}", x, y);
        HashMap<String, BigDecimal> map = new HashMap<>();
        map.put("x", x);
        map.put("y", y);
        return map;
        return null;
    }
    @Override
@@ -406,4 +379,20 @@
    public void withdraw(WithdrawDto withdrawDto) {
    }
    @Override
    public void updateWalletCoinWithLock(BigDecimal amount, Long memberId) {
        boolean isSuccess = false;
        while(!isSuccess) {
            DappWalletCoinEntity walletCoin = dappWalletCoinDao.selectByMemberId(memberId);
            walletCoin.setTotalAmount(walletCoin.getTotalAmount().add(amount));
            walletCoin.setAvailableAmount(walletCoin.getAvailableAmount().add(amount));
            int i = dappWalletCoinDao.updateWithLock(walletCoin);
            if (i > 0) {
                isSuccess = true;
            }
        }
    }
}
src/main/java/cc/mrbird/febs/job/MatrixTreeInit.java
@@ -36,6 +36,5 @@
            node.setMemberId(treeNode.getMidNode());
            instance.addNode(node);
        }
        System.out.println(11);
    }
}
src/main/resources/mapper/dapp/DappSystemDao.xml
@@ -6,4 +6,9 @@
        select * from dapp_mine_data limit 1
    </select>
    <update id="updateMineData">
        update dapp_mine_data
            set safe_pool=#{record.safePool}
        where id=#{record.id}
    </update>
</mapper>
src/main/resources/mapper/dapp/DappWalletCoinDao.xml
@@ -18,4 +18,12 @@
            </if>
        </where>
    </select>
    <update id="updateWithLock">
        update dapp_wallet_coin
            set total_amount=#{record.totalAmount},
                available_amount=#{record.availableAmount},
                version=version+1
        where id=#{record.id} and version=#{record.version}
    </update>
</mapper>