From f658569891db433854221b80f0a9fa99608cff64 Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Fri, 03 Apr 2026 18:22:34 +0800
Subject: [PATCH] 1

---
 trading-order-service/src/main/java/com/yami/trading/service/contract/ContractApplyOrderService.java |   79 +++++++++++++++++++++++----------------
 1 files changed, 47 insertions(+), 32 deletions(-)

diff --git a/trading-order-service/src/main/java/com/yami/trading/service/contract/ContractApplyOrderService.java b/trading-order-service/src/main/java/com/yami/trading/service/contract/ContractApplyOrderService.java
index 4829ec0..1aa139e 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/contract/ContractApplyOrderService.java
+++ b/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();

--
Gitblit v1.9.3