Helius
2021-04-09 56a2846bfdf17b5d90f9dc1c8a519b2660714151
modify
4 files modified
42 ■■■■ changed files
src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/utils/CalculateUtil.java 32 ●●●● patch | view | raw | blame | history
src/test/java/com/xcong/excoin/WholeTest.java 6 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java
@@ -531,7 +531,7 @@
                holdOrderListVo.setReturnRate(returnRate);
                holdOrderListVo.setProfitOrLoss(rewardRatio);
                if (ContractEntrustOrderEntity.POSITION_TYPE_ALL == memberEntity.getContractPositionType()) {
                    BigDecimal forcePrice = CalculateUtil.calWholePriceTwo(memberEntity, holdOrderEntity, 1, newPrice);
                    BigDecimal forcePrice = CalculateUtil.calWholePriceTwo(memberEntity, holdOrderEntity, 1);
//                    contractHoldOrderDao.updateForcePriceBySymbolAndMemberId(forcePrice, memberEntity.getId(), holdOrderEntity.getSymbol());
                    holdOrderListVo.setForceClosingPrice(forcePrice);
                }
src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java
@@ -536,7 +536,7 @@
                    continue;
                }
                holdOrderEntity.setStopLossPrice(CalculateUtil.calWholePriceTwo(memberEntity, holdOrderEntity, 2, holdOrderDataModel.getClosingPrice()));
                holdOrderEntity.setStopLossPrice(CalculateUtil.calWholePriceTwo(memberEntity, holdOrderEntity, 2));
                contractHoldOrderDao.deleteById(holdOrderDataModel.getId());
                ContractOrderEntity contractOrderEntity = ContractHoldOrderEntityMapper.INSTANCE.holdOrderToOrder(holdOrderEntity);
src/main/java/com/xcong/excoin/utils/CalculateUtil.java
@@ -211,10 +211,11 @@
     * @param contractHoldOrderEntity
     * @return
     */
    public static BigDecimal calWholePriceTwo(MemberEntity memberEntity, ContractHoldOrderEntity contractHoldOrderEntity, int type, BigDecimal newPrice) {
    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);
        Long memberId = memberEntity.getId();
        MemberWalletContractEntity walletContract = walletContractDao.findWalletContractByMemberIdAndSymbol(memberId, CoinTypeEnum.USDT.name());
@@ -230,7 +231,31 @@
                    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);
            }
            // 维持保证金
@@ -247,7 +272,7 @@
            BigDecimal prefix = cost.subtract(ratio);
            BigDecimal divideChild;
            if (ContractHoldOrderEntity.OPENING_TYPE_MORE == contractHoldOrderEntity.getOpeningType()) {
                divideChild = prefix.subtract(orderProfitOrLoss).subtract(qy);
                divideChild = cost.subtract(orderProfitOrLoss).subtract(qy);
            } else {
                divideChild = prefix.add(orderProfitOrLoss).add(qy);
            }
@@ -274,7 +299,6 @@
        RedisUtils redisUtils = SpringContextHolder.getBean(RedisUtils.class);
        BigDecimal lotNumber = cacheSettingUtils.getSymbolSku(holdOrderEntity.getSymbol());
        BigDecimal newPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(holdOrderEntity.getSymbol())));
        log.info("最新价为:{}", newPrice);
        // 盈亏
        BigDecimal rewardRatio = BigDecimal.ZERO;
src/test/java/com/xcong/excoin/WholeTest.java
@@ -203,10 +203,10 @@
    public void wholeForceNewTest() {
        BigDecimal newPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey("BTC/USDT")));
        MemberEntity memberEntity = memberDao.selectById(22L);
        ContractHoldOrderEntity holdOrder = contractHoldOrderDao.selectById(743L);
        MemberEntity memberEntity = memberDao.selectById(15L);
        ContractHoldOrderEntity holdOrder = contractHoldOrderDao.selectById(767L);
        System.out.println(CalculateUtil.calWholePriceTwo(memberEntity, holdOrder, 1, newPrice));
        System.out.println(CalculateUtil.calWholePriceTwo(memberEntity, holdOrder, 2));
    }
    @Test