From eaf9277b671ca542e87254ceb9bf649277561907 Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Wed, 15 Oct 2025 18:18:05 +0800
Subject: [PATCH] 1

---
 trading-order-service/src/main/java/com/yami/trading/service/contract/ContractApplyOrderService.java |   70 +++++++++++++++--------------------
 1 files changed, 30 insertions(+), 40 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 31fadb1..d1e99e7 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
@@ -23,6 +23,7 @@
 import com.yami.trading.common.util.StringUtils;
 import com.yami.trading.dao.contract.ContractApplyOrderMapper;
 import com.yami.trading.service.MoneyLogService;
+import com.yami.trading.service.StrongLevelCalculationService;
 import com.yami.trading.service.data.DataService;
 import com.yami.trading.service.user.UserService;
 import com.yami.trading.service.WalletService;
@@ -73,6 +74,8 @@
     private WalletService walletService;
     @Autowired
     private ContractOrderService contractOrderService;
+    @Autowired
+    private StrongLevelCalculationService strongLevelCalculationService;
 
     public Page<Map<String, Object>> findList(Page<ContractApplyOrder> page, String partyId, String symbol, String type, String startTime, String endTime, String symbolType) {
         QueryWrapper<ContractApplyOrder> queryWrapper = new QueryWrapper<>();
@@ -163,12 +166,15 @@
 
     public void saveCreate(ContractApplyOrder order) {
 
-        if (order.getVolumeOpen().doubleValue() % 1 != 0) {
-            throw new YamiShopBindException("Parameter Error1");
-        }
-
-        if (order.getVolumeOpen().compareTo(BigDecimal.ZERO) <= 0) {
-            throw new YamiShopBindException("Parameter Error2");
+//        if (order.getVolumeOpen().doubleValue() % 1 != 0) {
+//            throw new YamiShopBindException("Parameter Error1");
+//        }
+//
+//        if (order.getVolumeOpen().compareTo(BigDecimal.ZERO) <= 0) {
+//            throw new YamiShopBindException("Parameter Error2");
+//        }
+        if(order.getMoney().compareTo(BigDecimal.ZERO) <= 0){
+            throw new YamiShopBindException("Please enter the order amount");
         }
 
         boolean orderOpen = this.sysparaService.find("order_open").getBoolean();
@@ -199,61 +205,45 @@
         log.info("{}  --- order --- {}  --- {}", order.getSymbol(), item.getUuid(), levers.size());
         checkLever(order, levers);
 
-        List<ContractOrder> contractOrderSubmitted = contractOrderService.findSubmitted(order.getPartyId(),
-                order.getSymbol(), order.getDirection());
-        for (int i = 0; i < contractOrderSubmitted.size(); i++) {
-            BigDecimal sourceLeverRate = order.getLeverRate();
-            sourceLeverRate = sourceLeverRate == null ? BigDecimal.ZERO : sourceLeverRate;
-
-            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().toString(),
-                order.getSymbol(), "open", order.getDirection());
-        for (int i = 0; i < applyOrderSubmittedList.size(); i++) {
-            BigDecimal sourceLeverRate = order.getLeverRate();
-            sourceLeverRate = sourceLeverRate == null ? BigDecimal.ZERO : sourceLeverRate;
-            BigDecimal targetLeverRate = applyOrderSubmittedList.get(i).getLeverRate();
-            targetLeverRate = targetLeverRate == null ? BigDecimal.ZERO : targetLeverRate;
-            if (sourceLeverRate.compareTo(targetLeverRate) != 0) {
-                throw new YamiShopBindException("存在不同杠杆的持仓单");
-            }
-        }
-
-
         order.setOrderNo(DateUtil.getToday("yyMMddHHmmss") + RandomUtil.getRandomNum(8));
 
+        double number = strongLevelCalculationService.countSheets(order.getMoney().doubleValue(), order.getLeverRate().intValue(), 0.01, order.getPrice().doubleValue());
+
+        order.setVolumeOpen(new BigDecimal(number));
+        order.setVolume(new BigDecimal(number));
 
         BigDecimal unitAmount = order.getPrice().multiply(BigDecimal.valueOf(item.getFaceValue()));
         unitAmount = unitAmount.setScale(4, RoundingMode.DOWN);
 
-        BigDecimal deposit = unitAmount.multiply(order.getVolumeOpen()).divide(order.getLeverRate(), 4, RoundingMode.DOWN);
-
         order.setUnitAmount(unitAmount);
-        order.setDeposit(deposit);
+        order.setDeposit(order.getMoney());
 
         if (order.getLeverRate() != null) {
             /**
              * 加上杠杆
              */
-            // 设置订单数量
-            order.setVolume(order.getVolumeOpen());
+            //25x手续费3.75%  50x手续费7.5%  100x手续费15% 200x手续费30%
+            if(order.getLeverRate().doubleValue() == 25){
+                item.setUnitFee(new BigDecimal("0.0375"));
+            }else if(order.getLeverRate().doubleValue() == 50){
+                item.setUnitFee(new BigDecimal("0.075"));
+            }else if(order.getLeverRate().doubleValue() == 100){
+                item.setUnitFee(new BigDecimal("0.15"));
+            }else if(order.getLeverRate().doubleValue() == 200){
+                item.setUnitFee(new BigDecimal("0.30"));
+            }
 
-            BigDecimal fee = order.getDeposit().multiply(order.getLeverRate()).multiply(item.getUnitFee());
+            BigDecimal fee = order.getDeposit().multiply(item.getUnitFee());
             fee = fee.setScale(4, RoundingMode.DOWN);  // 保留两位小数
             order.setFee(fee);
         }
-        order.setVolumeOpen(order.getVolumeOpen());
 
         Wallet wallet = this.walletService.findByUserId(order.getPartyId());
         BigDecimal amountBefore = wallet.getMoney();
         BigDecimal totalAmountCost = order.getDeposit().add(order.getFee());
 
         if (amountBefore.compareTo(totalAmountCost) < 0) {
-            throw new YamiShopBindException("余额不足");
+            throw new YamiShopBindException("not sufficient funds");
         }
 
         //如果是限价单先扣钱
@@ -291,7 +281,7 @@
             volume = volume.subtract(applyOrderSubmittedList.get(i).getVolume());
         }
         if (order.getVolume().compareTo(volume) > 0) {
-            throw new YamiShopBindException("可平仓合约张数不足");
+            throw new YamiShopBindException("可平仓合约数量不足");
         }
         save(order);
 

--
Gitblit v1.9.3