1
zj
13 hours ago f658569891db433854221b80f0a9fa99608cff64
trading-order-service/src/main/java/com/yami/trading/service/contract/ContractApplyOrderService.java
@@ -172,6 +172,7 @@
            map.put("amount", order.getVolume().multiply(order.getUnitAmount()));
            map.put("amount_open", order.getVolumeOpen().multiply(order.getUnitAmount()));
            map.put("fee", order.getFee());
            map.put("funding_fee", order.getFundingFee());
            map.put("deposit", order.getDeposit());
            data.add(map);
        }
@@ -233,46 +234,60 @@
        log.info("{}  --- order --- {}  --- {}", order.getSymbol(), item.getUuid(), levers.size());
        checkLever(order, levers);
        BigDecimal sourceLeverRate = order.getLeverRate();
        sourceLeverRate = sourceLeverRate == null ? BigDecimal.ZERO : sourceLeverRate;
//        BigDecimal sourceLeverRate = order.getLeverRate();
//        sourceLeverRate = sourceLeverRate == null ? BigDecimal.ZERO : sourceLeverRate;
        List<ContractOrder> contractOrderSubmitted = contractOrderService.findSubmitted(order.getPartyId(),
                order.getSymbol(), order.getDirection());
        for (int i = 0; i < contractOrderSubmitted.size(); i++) {
            BigDecimal targetLeverRate = contractOrderSubmitted.get(i).getLeverRate();
            targetLeverRate = targetLeverRate == null ? BigDecimal.ZERO : targetLeverRate;
            if (sourceLeverRate.compareTo(targetLeverRate) != 0) {
                throw new YamiShopBindException("存在不同杠杆的持仓单");
            }
        }
        List<ContractApplyOrder> applyOrderSubmittedList = this.findSubmitted(order.getPartyId(),
                order.getSymbol(), "open", order.getDirection());
        for (int i = 0; i < applyOrderSubmittedList.size(); i++) {
            BigDecimal targetLeverRate = applyOrderSubmittedList.get(i).getLeverRate();
            targetLeverRate = targetLeverRate == null ? BigDecimal.ZERO : targetLeverRate;
            if (sourceLeverRate.compareTo(targetLeverRate) != 0) {
                throw new YamiShopBindException("存在不同杠杆的持仓单");
            }
        }
//        List<ContractOrder> contractOrderSubmitted = contractOrderService.findSubmitted(order.getPartyId(),
//                order.getSymbol(), order.getDirection());
//        for (int i = 0; i < contractOrderSubmitted.size(); i++) {
//            BigDecimal targetLeverRate = contractOrderSubmitted.get(i).getLeverRate();
//            targetLeverRate = targetLeverRate == null ? BigDecimal.ZERO : targetLeverRate;
//            if (sourceLeverRate.compareTo(targetLeverRate) != 0) {
//                throw new YamiShopBindException("存在不同杠杆的持仓单");
//            }
//        }
//
//        List<ContractApplyOrder> applyOrderSubmittedList = this.findSubmitted(order.getPartyId(),
//                order.getSymbol(), "open", order.getDirection());
//        for (int i = 0; i < applyOrderSubmittedList.size(); i++) {
//            BigDecimal targetLeverRate = applyOrderSubmittedList.get(i).getLeverRate();
//            targetLeverRate = targetLeverRate == null ? BigDecimal.ZERO : targetLeverRate;
//            if (sourceLeverRate.compareTo(targetLeverRate) != 0) {
//                throw new YamiShopBindException("存在不同杠杆的持仓单");
//            }
//        }
        //下单数量
        BigDecimal volume = order.getVolume();
        //当前价格
        List<Realtime> list = dataService.realtime(order.getSymbol());
        double close = 0;
        /**
         * 限价单
         */
        if ("limit".equals(order.getOrderPriceType())) {
            close = order.getPrice().doubleValue();
        }else{
            close = list.get(0).getClose();
        }
        if(StringUtils.isEmptyString(order.getOrderNo())) {
            order.setOrderNo(DateUtil.getToday("yyMMddHHmmss") + RandomUtil.getRandomNum(8));
        }
        order.setUnitAmount(BigDecimal.valueOf(item.getUnitAmount()));
        order.setFee(BigDecimal.valueOf(item.getUnitFee()).multiply(order.getVolume()));
        order.setDeposit(BigDecimal.valueOf(item.getUnitAmount()).multiply(order.getVolume()));
        order.setDeposit(BigDecimal.valueOf(close).multiply(order.getVolume()).divide(order.getLeverRate()));
        order.setFee(BigDecimal.valueOf(item.getUnitFee()).multiply(order.getDeposit()).divide(order.getLeverRate()));
        BigDecimal fee = order.getFee();
        if (order.getLeverRate() != null) {
            // 加上杠杆
            order.setVolume(order.getVolume().multiply(order.getLeverRate()));
            Syspara syspara = sysparaService.find("perpetual_contracts");
            if (ObjectUtils.isEmpty(syspara)||"0".equals(syspara.getSvalue())) {
//                order.setFee(fee.multiply(order.getLeverRate()));
            }
        }
//        if (order.getLeverRate() != null) {
//            // 加上杠杆
//            order.setVolume(order.getVolume().multiply(order.getLeverRate()));
//            Syspara syspara = sysparaService.find("perpetual_contracts");
//            if (ObjectUtils.isEmpty(syspara)||"0".equals(syspara.getSvalue())) {
////                order.setFee(fee.multiply(order.getLeverRate()));
//            }
//        }
      Syspara syspara = sysparaService.find("u_standard_contract");
        BigDecimal deposit = order.getDeposit();