Helius
2021-04-09 1c6bf3e15cf135fadcac5e4e40af418d8d0ab0b7
src/main/java/com/xcong/excoin/utils/CalculateUtil.java
@@ -214,8 +214,8 @@
    public static BigDecimal calWholePriceTwo(MemberEntity memberEntity, ContractHoldOrderEntity contractHoldOrderEntity, int type) {
        ContractHoldOrderDao holdOrderDao = SpringContextHolder.getBean(ContractHoldOrderDao.class);
        MemberWalletContractDao walletContractDao = SpringContextHolder.getBean(MemberWalletContractDao.class);
        CacheSettingUtils cacheSettingUtils = SpringContextHolder.getBean(CacheSettingUtils.class);
        RedisUtils redisUtils = SpringContextHolder.getBean(RedisUtils.class);
        BigDecimal newPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(contractHoldOrderEntity.getSymbol())));
        Long memberId = memberEntity.getId();
        MemberWalletContractEntity walletContract = walletContractDao.findWalletContractByMemberIdAndSymbol(memberId, CoinTypeEnum.USDT.name());
@@ -230,7 +230,32 @@
                } else {
                    totalBondAmount = totalBondAmount.add(holdOrderEntity.getBondAmount());
                }
                totalProfitOrLoss = totalProfitOrLoss.add(calProfitOrLoss(holdOrderEntity, memberEntity));
                BigDecimal newPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(contractHoldOrderEntity.getSymbol())));
                if (type == 2) {
                    log.info("newPrice : {}", newPrice);
                }
                // 盈亏
                BigDecimal rewardRatio = BigDecimal.ZERO;
                // 开多
                if (ContractHoldOrderEntity.OPENING_TYPE_MORE == holdOrderEntity.getOpeningType()) {
                    // (最新价-开仓价)*规格*张数
                    rewardRatio = newPrice.subtract(holdOrderEntity.getOpeningPrice()).multiply(contractHoldOrderEntity.getSymbolSku()).multiply(new BigDecimal(holdOrderEntity.getSymbolCntSale()));
                    // 开空
                } else {
                    // (开仓价-最新价)*规格*张数
                    rewardRatio = holdOrderEntity.getOpeningPrice().subtract(newPrice).multiply(contractHoldOrderEntity.getSymbolSku()).multiply(new BigDecimal(holdOrderEntity.getSymbolCntSale()));
                }
                if (memberEntity.getIsProfit() == MemberEntity.IS_PROFIT_Y) {
                    PlatformTradeSettingEntity tradeSettingEntity = cacheSettingUtils.getTradeSetting();
                    if (rewardRatio.compareTo(BigDecimal.ZERO) > -1) {
                        rewardRatio = rewardRatio.multiply(BigDecimal.ONE.subtract(tradeSettingEntity.getProfitParam()));
                    }
                }
                totalProfitOrLoss = totalProfitOrLoss.add(rewardRatio);
            }
            // 维持保证金
@@ -241,10 +266,11 @@
            BigDecimal ratio = contractHoldOrderEntity.getOpeningPrice().multiply(new BigDecimal("0.005"));
            // 总账户 - 维持保证金
            BigDecimal orderProfitOrLoss = walletContract.getTotalBalance().subtract(holdBond);
            // 权益
            BigDecimal qy = walletContract.getTotalBalance().add(totalProfitOrLoss);
            // 权益 - 维持保证金
            BigDecimal qy = walletContract.getTotalBalance().add(totalProfitOrLoss).subtract(holdBond);
//            BigDecimal qy = BigDecimal.ZERO;
            BigDecimal prefix = cost.subtract(ratio);
            BigDecimal prefix = cost.subtract(totalBondAmount);
            BigDecimal divideChild;
            if (ContractHoldOrderEntity.OPENING_TYPE_MORE == contractHoldOrderEntity.getOpeningType()) {
                divideChild = prefix.subtract(orderProfitOrLoss).subtract(qy);
@@ -262,6 +288,7 @@
                log.info("ratio : {}", ratio);
                log.info("orderProfitOrLoss : {}", orderProfitOrLoss);
                log.info("total : {}", walletContract.getTotalBalance());
                log.info("totalProfitOrLoss : {}", totalProfitOrLoss);
                log.info("qy : {}", qy);
            }
        }