wzy
2020-06-04 0ac635934c85267ea44c043504b2cf67ef1302cf
src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java
@@ -159,14 +159,13 @@
        contractOrderEntity.setOpeningTime(new Date());
        contractHoldOrderDao.insert(holdOrderEntity);
        int i = contractOrderDao.insert(contractOrderEntity);
        memberWalletContractDao.increaseWalletContractBalanceById(prePaymentAmount.negate(), null, null, walletContract.getId());
        // 计算佣金
        ThreadPoolUtils.calReturnMoney(memberEntity.getId(), contractOrderEntity.getOpeningFeeAmount(), contractOrderEntity, AgentReturnEntity.ORDER_TYPE_OPEN);
        if (i > 0) {
            return Result.ok("success");
            memberWalletContractDao.increaseWalletContractBalanceById(prePaymentAmount.negate(), openFeePrice.negate(), null, walletContract.getId());
            // 计算佣金
            ThreadPoolUtils.calReturnMoney(memberEntity.getId(), contractOrderEntity.getOpeningFeeAmount(), contractOrderEntity, AgentReturnEntity.ORDER_TYPE_OPEN);
            return Result.ok("提交成功");
        }
        return Result.fail("fail");
        return Result.fail("提交失败");
    }
    @Override
@@ -189,6 +188,7 @@
        MemberEntity memberEntity = LoginUserUtils.getAppLoginUser();
        List<ContractHoldOrderEntity> list = contractHoldOrderDao.selectHoldOrderListByMemberIdAndSymbol(memberEntity.getId(), symbol);
        MemberWalletContractEntity walletContractEntity = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), CoinTypeEnum.USDT.name());
        if (CollUtil.isNotEmpty(list)) {
            BigDecimal totalProfitOrLoss = BigDecimal.ZERO;
            List<HoldOrderListVo> resultList = new ArrayList<>();
@@ -228,12 +228,17 @@
                        .divide(new BigDecimal(holdOrderEntity.getLeverRatio()), 8, BigDecimal.ROUND_DOWN);
                // 可增加最大保证金
                BigDecimal canAddMaxBond = holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getOpeningFeeAmount()).subtract(costPrice);
                if (canAddMaxBond.compareTo(BigDecimal.ZERO) < 0) {
                    canAddMaxBond = BigDecimal.ZERO;
//                BigDecimal canAddMaxBond = holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getOpeningFeeAmount()).subtract(costPrice);
//                if (canAddMaxBond.compareTo(BigDecimal.ZERO) < 0) {
//                    canAddMaxBond = BigDecimal.ZERO;
//                }
                BigDecimal canReduceMaxBond = holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getPrePaymentAmount());
                if (canReduceMaxBond.compareTo(BigDecimal.ZERO) < 0) {
                    canReduceMaxBond = BigDecimal.ZERO;
                }
                holdOrderListVo.setCanAddMaxBond(canAddMaxBond);
                holdOrderListVo.setCanReduceMaxBond(canReduceMaxBond);
                holdOrderListVo.setCanAddMaxBond(walletContractEntity.getAvailableBalance());
                holdOrderListVo.setReturnRate(returnRate);
                holdOrderListVo.setProfitOrLoss(rewardRatio);
                resultList.add(holdOrderListVo);
@@ -299,82 +304,86 @@
        // 开仓价
        BigDecimal openPrice = holdOrderEntity.getOpeningPrice();
        // 设置的止盈止损价
        BigDecimal price = profitOrLessDto.getPrice();
        BigDecimal stopProfitPrice = profitOrLessDto.getStopProfitPrice();
        BigDecimal stopLessPrice = profitOrLessDto.getStopLessPrice();
        // 开多
        if (ContractHoldOrderEntity.OPENING_TYPE_MORE == holdOrderEntity.getOpeningType()) {
            if (ProfitOrLessDto.TYPE_PROFIT == profitOrLessDto.getType()) {
            if (stopProfitPrice != null) {
                // 当前价大于开仓价
                if (newPrice.compareTo(openPrice) > 0) {
                    // 如果止盈价小于当前价
                    if (price.compareTo(newPrice) < 0) {
                    if (stopProfitPrice.compareTo(newPrice) < 0) {
                        return Result.fail("止盈价必须高于当前价");
                    }
                } else {
                    if (price.compareTo(openPrice) < 0) {
                    if (stopProfitPrice.compareTo(openPrice) < 0) {
                        return Result.fail("止盈价必须高于开仓价");
                    }
                }
            } else {
            }
            if (stopLessPrice != null) {
                if (newPrice.compareTo(openPrice) > 0) {
                    if (price.compareTo(openPrice) > 0) {
                    if (stopLessPrice.compareTo(openPrice) > 0) {
                        return Result.fail("止损价必须低于开仓价");
                    }
                } else {
                    if (price.compareTo(newPrice) > 0) {
                    if (stopLessPrice.compareTo(newPrice) > 0) {
                        return Result.fail("止损价必须低于当前价");
                    }
                }
            }
            // 开空
        } else {
            if (ProfitOrLessDto.TYPE_PROFIT == profitOrLessDto.getType()) {
            if (stopProfitPrice != null) {
                if (newPrice.compareTo(openPrice) > 0) {
                    if (price.compareTo(openPrice) > 0) {
                    if (stopProfitPrice.compareTo(openPrice) > 0) {
                        return Result.fail("止损价必须低于开仓价");
                    }
                } else {
                    if (price.compareTo(newPrice) > 0) {
                    if (stopProfitPrice.compareTo(newPrice) > 0) {
                        return Result.fail("止损价必须低于当前价");
                    }
                }
            } else {
            }
            if (stopLessPrice != null) {
                if (newPrice.compareTo(openPrice) > 0) {
                    if (price.compareTo(newPrice) < 0) {
                    if (stopLessPrice.compareTo(newPrice) < 0) {
                        return Result.fail("止损价必须高于当前价");
                    }
                } else {
                    if (price.compareTo(openPrice) < 0) {
                    if (stopLessPrice.compareTo(openPrice) < 0) {
                        return Result.fail("止损价必须高于开仓价");
                    }
                }
            }
        }
        if (ProfitOrLessDto.TYPE_PROFIT == profitOrLessDto.getType()) {
            holdOrderEntity.setStopProfitPrice(price);
        } else {
            holdOrderEntity.setStopLossPrice(price);
        }
        holdOrderEntity.setStopProfitPrice(stopProfitPrice);
        holdOrderEntity.setStopLossPrice(stopLessPrice);
        int i = contractHoldOrderDao.updateById(holdOrderEntity);
        if (i > 0) {
            OrderModel model = null;
            if (ContractHoldOrderEntity.OPENING_TYPE_MORE == holdOrderEntity.getOpeningType()) {
                // 开多止盈
                if (ProfitOrLessDto.TYPE_PROFIT == profitOrLessDto.getType()) {
                    model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.CLOSE_MORE_STOP_PROFIT.getValue(), price.setScale(8, RoundingMode.HALF_UP).toPlainString(), holdOrderEntity.getSymbol());
                    // 开多止损
                } else {
                    model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.CLOSE_MORE_STOP_LESS.getValue(), price.setScale(8, RoundingMode.HALF_UP).toPlainString(), holdOrderEntity.getSymbol());
                if (stopProfitPrice != null) {
                    model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.CLOSE_MORE_STOP_PROFIT.getValue(), stopProfitPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), holdOrderEntity.getSymbol());
                }
                // 开多止损
                if (stopLessPrice != null) {
                    model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.CLOSE_MORE_STOP_LESS.getValue(), stopLessPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), holdOrderEntity.getSymbol());
                }
            } else {
                // 开空止盈
                if (ProfitOrLessDto.TYPE_PROFIT == profitOrLessDto.getType()) {
                    model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.CLOSE_LESS_STOP_PROFIT.getValue(), price.setScale(8, RoundingMode.HALF_UP).toPlainString(), holdOrderEntity.getSymbol());
                    // 开空止损
                } else {
                    model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.CLOSE_LESS_STOP_LESS.getValue(), price.setScale(8, RoundingMode.HALF_UP).toPlainString(), holdOrderEntity.getSymbol());
                if (stopProfitPrice != null) {
                    model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.CLOSE_LESS_STOP_PROFIT.getValue(), stopProfitPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), holdOrderEntity.getSymbol());
                }
                // 开空止损
                if (stopLessPrice != null) {
                    model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.CLOSE_LESS_STOP_LESS.getValue(), stopLessPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), holdOrderEntity.getSymbol());
                }
            }
            producer.sendPriceOperate(JSONObject.toJSONString(model));