From 75018b2f492444248d8b476d9703bb312d2befc3 Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Sat, 08 Feb 2025 16:51:19 +0800
Subject: [PATCH] 项目提交

---
 trading-order-service/src/main/java/com/yami/trading/service/contract/ContractApplyOrderService.java |   67 ++++++++++++++++++++++-----------
 1 files changed, 45 insertions(+), 22 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 9c4e34c..31fadb1 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
@@ -38,6 +38,7 @@
 import org.springframework.web.bind.annotation.RequestParam;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -145,10 +146,16 @@
             if(realtime.size()>=1){
                 map.put("mark_price",  realtime.get(0).getClose());
             }
-            map.put("amount", order.getVolume().multiply(order.getUnitAmount()));
-            map.put("amount_open", order.getVolumeOpen().multiply(order.getUnitAmount()));
-            map.put("fee", order.getFee());
-            map.put("deposit", order.getDeposit());
+            map.put("amount", (order.getVolume() != null && order.getUnitAmount() != null)
+                    ? order.getVolume().multiply(order.getUnitAmount())
+                    : BigDecimal.ZERO);
+
+            map.put("amount_open", (order.getVolumeOpen() != null && order.getUnitAmount() != null)
+                    ? order.getVolumeOpen().multiply(order.getUnitAmount())
+                    : BigDecimal.ZERO);
+
+            map.put("fee", order.getFee() != null ? order.getFee() : BigDecimal.ZERO);
+            map.put("deposit", order.getDeposit() != null ? order.getDeposit() : BigDecimal.ZERO);
             data.add(map);
         }
         return data;
@@ -218,34 +225,48 @@
 
 
         order.setOrderNo(DateUtil.getToday("yyMMddHHmmss") + RandomUtil.getRandomNum(8));
-        order.setUnitAmount(item.getUnitAmount());
 
-        order.setFee(item.getUnitFee().multiply(order.getVolume()));
-        order.setDeposit(item.getUnitAmount().multiply(order.getVolume()));
+
+        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);
+
         if (order.getLeverRate() != null) {
             /**
              * 加上杠杆
              */
-            order.setVolume(order.getVolume().multiply(order.getLeverRate()));
-            order.setFee(order.getFee().multiply(order.getLeverRate()));
+            // 设置订单数量
+            order.setVolume(order.getVolumeOpen());
+
+            BigDecimal fee = order.getDeposit().multiply(order.getLeverRate()).multiply(item.getUnitFee());
+            fee = fee.setScale(4, RoundingMode.DOWN);  // 保留两位小数
+            order.setFee(fee);
         }
-        order.setVolumeOpen(order.getVolume());
+        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("余额不足");
         }
 
-        walletService.updateMoney(order.getSymbol(), order.getPartyId(), BigDecimal.ZERO.subtract(order.getDeposit()), BigDecimal.ZERO
-                , Constants.MONEYLOG_CATEGORY_CONTRACT, Constants.WALLET_USDT, Constants.MONEYLOG_CONTENT_CONTRACT_OPEN, "委托单,订单号[" + order.getOrderNo() + "]"
-        );
-        walletService.updateMoney(order.getSymbol(), order.getPartyId(), BigDecimal.ZERO.subtract(order.getFee()), BigDecimal.ZERO
-                , Constants.MONEYLOG_CATEGORY_CONTRACT, Constants.WALLET_USDT, Constants.MONEYLOG_CONTENT_FEE, "委托单,订单号[" + order.getOrderNo() + "]"
-        );
-        save(order);
+        //如果是限价单先扣钱
+        if(order.getOrderPriceType().equals("limit")){
 
+            walletService.updateMoney(order.getSymbol(), order.getPartyId(), BigDecimal.ZERO.subtract(order.getDeposit()), BigDecimal.ZERO
+                    , Constants.MONEYLOG_CATEGORY_CONTRACT, Constants.WALLET_USDT, Constants.MONEYLOG_CONTENT_CONTRACT_OPEN, "委托单,订单号[" + order.getOrderNo() + "]"
+            );
+            walletService.updateMoney(order.getSymbol(), order.getPartyId(), BigDecimal.ZERO.subtract(order.getFee()), BigDecimal.ZERO
+                    , Constants.MONEYLOG_CATEGORY_CONTRACT, Constants.WALLET_USDT, Constants.MONEYLOG_CONTENT_FEE, "委托单,订单号[" + order.getOrderNo() + "]"
+            );
+        }
+        save(order);
     }
 
     /**
@@ -297,11 +318,13 @@
             return;
         }
         order.setState("canceled");
-        walletService.updateMoney(order.getSymbol(),
-                order.getPartyId(),
-                order.getDeposit().add(order.getFee()),
-                BigDecimal.ZERO,
-                Constants.MONEYLOG_CATEGORY_CONTRACT, Constants.WALLET_USDT, Constants.MONEYLOG_CONTENT_CONTRACT_CONCEL, "撤单,订单号[" + order.getOrderNo() + "]");
+        if(order.getOrderPriceType().equals("limit")){
+            walletService.updateMoney(order.getSymbol(),
+                    order.getPartyId(),
+                    order.getDeposit().add(order.getFee()),
+                    BigDecimal.ZERO,
+                    Constants.MONEYLOG_CATEGORY_CONTRACT, Constants.WALLET_USDT, Constants.MONEYLOG_CONTENT_CONTRACT_CONCEL, "撤单,订单号[" + order.getOrderNo() + "]");
+        }
         updateById(order);
     }
 

--
Gitblit v1.9.3