xiaoyong931011
2021-03-29 22d7f138012b06a0d6365846a13334ca80dd58c1
20210329  全仓模式下资金划转,获取可用资金
1 files modified
42 ■■■■■ changed files
src/main/java/com/xcong/excoin/modules/coin/service/impl/CoinServiceImpl.java 42 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/coin/service/impl/CoinServiceImpl.java
@@ -511,8 +511,48 @@
    public Result findWalletContractBySymbol(String symbol) {
        //获取用户ID
        Long memberId = LoginUserUtils.getAppLoginUser().getId();
        MemberEntity memberEntity = memberDao.selectById(memberId);
        //获取合约当前持仓类型
        Integer contractPositionType = memberEntity.getContractPositionType();
        // 总盈利
        BigDecimal totalProfitOrLess = BigDecimal.ZERO;
        if(contractPositionType == 2){
            //获取全仓模式下的所有持仓信息
            PlatformTradeSettingEntity tradeSetting = cacheSettingUtils.getTradeSetting();
            List<ContractHoldOrderEntity> holdOrderEntities = contractHoldOrderDao.selectHoldOrderListForWholeByMemberIdAndSymbol(memberEntity.getId(),"");
            if (CollUtil.isNotEmpty(holdOrderEntities)) {
                for (ContractHoldOrderEntity holdOrderEntity : holdOrderEntities) {
                    // 获取最新价
                    BigDecimal newPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(holdOrderEntity.getSymbol())));
                    BigDecimal lotNumber = cacheSettingUtils.getSymbolSku(holdOrderEntity.getSymbol());
                    // 单个订单盈利
                    BigDecimal profitOrLess = BigDecimal.ZERO;
                    // 开多
                    if (ContractHoldOrderEntity.OPENING_TYPE_MORE == holdOrderEntity.getOpeningType()) {
                        profitOrLess = newPrice.subtract(holdOrderEntity.getOpeningPrice()).multiply(new BigDecimal(holdOrderEntity.getSymbolCntSale())).multiply(lotNumber);
                        // 开空
                    } else {
                        profitOrLess = holdOrderEntity.getOpeningPrice().subtract(newPrice).multiply(new BigDecimal(holdOrderEntity.getSymbolCntSale())).multiply(lotNumber);
                    }
                    if (MemberEntity.IS_PROFIT_Y == memberEntity.getIsProfit()) {
                        if (profitOrLess.compareTo(BigDecimal.ZERO) > 0) {
                            profitOrLess = profitOrLess.multiply(BigDecimal.ONE.subtract(tradeSetting.getForceParam()));
                        } else {
                            profitOrLess = profitOrLess.multiply(BigDecimal.ONE.add(tradeSetting.getForceParam()));
                        }
                    }
                    totalProfitOrLess = totalProfitOrLess.add(profitOrLess);
                }
            }
        }
        MemberWalletContractEntity walletContract = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberId, symbol);
        BigDecimal availableBalance = walletContract.getAvailableBalance().setScale(4, BigDecimal.ROUND_DOWN);
        BigDecimal availableBalance = walletContract.getAvailableBalance();
        //可用减去盈亏
        if(totalProfitOrLess.compareTo(BigDecimal.ZERO) < 0){
            availableBalance = availableBalance.add(totalProfitOrLess);
        }
        availableBalance = availableBalance.setScale(4, BigDecimal.ROUND_DOWN);
        return Result.ok(availableBalance);
    }