Helius
2020-06-05 9b697d56c6209627c8df9d1370501435f5d2f99d
src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java
@@ -43,10 +43,7 @@
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
 * @author wzy
@@ -159,10 +156,10 @@
        holdOrderEntity.setBondAmount(bondAmount.add(openFeePrice));
        ContractOrderEntity contractOrderEntity = ContractHoldOrderEntityMapper.INSTANCE.holdOrderToOrder(holdOrderEntity);
        contractOrderEntity.setOpeningTime(new Date());
        contractHoldOrderDao.insert(holdOrderEntity);
        int i = contractOrderDao.insert(contractOrderEntity);
        memberWalletContractDao.increaseWalletContractBalanceById(prePaymentAmount.negate(), null, bondAmount.add(openFeePrice), walletContract.getId());
        memberWalletContractDao.increaseWalletContractBalanceById(prePaymentAmount.negate(), null, null, walletContract.getId());
        // 计算佣金
        ThreadPoolUtils.calReturnMoney(memberEntity.getId(), contractOrderEntity.getOpeningFeeAmount(), contractOrderEntity, AgentReturnEntity.ORDER_TYPE_OPEN);
@@ -302,82 +299,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.toPlainString(), holdOrderEntity.getSymbol());
                    // 开多止损
                } else {
                    model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.CLOSE_MORE_STOP_LESS.getValue(), price.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));