From b28a97e1bf66e3279e78f31ce58122427787ceec Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Thu, 11 Jun 2026 09:44:20 +0800
Subject: [PATCH] 1

---
 trading-order-service/src/main/java/com/yami/trading/service/contract/ContractOrderService.java |  149 -------------------------------------------------
 1 files changed, 2 insertions(+), 147 deletions(-)

diff --git a/trading-order-service/src/main/java/com/yami/trading/service/contract/ContractOrderService.java b/trading-order-service/src/main/java/com/yami/trading/service/contract/ContractOrderService.java
index 8a7a4ed..1f3d72b 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/contract/ContractOrderService.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/contract/ContractOrderService.java
@@ -123,9 +123,6 @@
     @Autowired
     private SysparaService sysparaService;
 
-    @Autowired
-    private ContractPositionModeService contractPositionModeService;
-
     public IPage<ContractOrderDTO> listRecord(Page page, ContractOrderQuery query) {
         return baseMapper.listRecord(page, query);
     }
@@ -740,123 +737,6 @@
         return rentalProfit;
     }
 
-    /**
-     * 单向持仓:反向开仓前先按张数平掉对向持仓,释放保证金后再开剩余仓位。
-     *
-     * @return 对冲后仍需新开仓的张数
-     */
-    private BigDecimal netOppositePositions(ContractApplyOrder applyOrder, Realtime realtime, BigDecimal openVolume) {
-        if (openVolume == null || openVolume.compareTo(BigDecimal.ZERO) <= 0) {
-            return BigDecimal.ZERO;
-        }
-        String oppositeDirection = ContractOrder.DIRECTION_BUY.equals(applyOrder.getDirection())
-                ? ContractOrder.DIRECTION_SELL
-                : ContractOrder.DIRECTION_BUY;
-        List<ContractOrder> oppositeList = findSubmitted(
-                applyOrder.getPartyId(), applyOrder.getSymbol(), oppositeDirection);
-        if (CollectionUtil.isEmpty(oppositeList)) {
-            return openVolume;
-        }
-
-        BigDecimal remainingOpenVolume = openVolume;
-        for (ContractOrder opposite : oppositeList) {
-            if (remainingOpenVolume.compareTo(BigDecimal.ZERO) <= 0) {
-                break;
-            }
-            if (opposite.getVolume() == null || opposite.getVolume().compareTo(BigDecimal.ZERO) <= 0) {
-                continue;
-            }
-            if (!ContractLock.add(opposite.getOrderNo())) {
-                continue;
-            }
-            try {
-                BigDecimal closeVolume = remainingOpenVolume.min(opposite.getVolume());
-                contractOrderCalculationService.refreshMarkPriceProfit(opposite);
-                BigDecimal profit = settle(opposite, closeVolume);
-                update(opposite);
-
-                Wallet wallet = walletService.findByUserId(applyOrder.getPartyId());
-                if (wallet.getMoney().add(profit).compareTo(BigDecimal.ZERO) < 0) {
-                    profit = wallet.getMoney().negate();
-                }
-                walletService.updateMoney(opposite.getSymbol(), applyOrder.getPartyId(), profit, BigDecimal.ZERO,
-                        Constants.MONEYLOG_CATEGORY_CONTRACT, Constants.WALLET_USDT,
-                        Constants.MONEYLOG_CONTENT_CONTRACT_CLOSE,
-                        "反手对冲平仓,平仓合约数[" + closeVolume + "],订单号[" + opposite.getOrderNo() + "]");
-
-                if (ContractOrder.STATE_CREATED.equals(opposite.getState())) {
-                    User party = userService.getById(opposite.getPartyId());
-                    if (party != null) {
-                        if (party.getWithdrawLimitNowAmount() == null) {
-                            party.setWithdrawLimitNowAmount(BigDecimal.ZERO);
-                        }
-                        party.setWithdrawLimitNowAmount(party.getWithdrawLimitNowAmount().add(opposite.getDepositOpen()));
-                        userService.updateById(party);
-                    }
-                    userDataService.saveClose(opposite);
-                    User partyUser = userService.getById(opposite.getPartyId());
-                    if (partyUser != null && Constants.SECURITY_ROLE_MEMBER.equals(partyUser.getRoleName())) {
-                        tipService.deleteTip(opposite.getUuid().toString());
-                    }
-                }
-                remainingOpenVolume = remainingOpenVolume.subtract(closeVolume);
-            } finally {
-                ContractLock.remove(opposite.getOrderNo());
-            }
-        }
-        return remainingOpenVolume;
-    }
-
-    /**
-     * 反向开仓完全被对向持仓对冲,无需再开新仓。
-     */
-    private void completeNettedApplyOrder(ContractApplyOrder applyOrder,
-                                          BigDecimal originalDeposit, BigDecimal originalFee) {
-        applyOrder.setVolume(BigDecimal.ZERO);
-        applyOrder.setState(ContractApplyOrder.STATE_CREATED);
-        contractApplyOrderService.updateById(applyOrder);
-        if (ContractApplyOrder.ORDER_PRICE_TYPE_LIMIT.equals(applyOrder.getOrderPriceType())) {
-            BigDecimal refund = defaultZero(originalDeposit).add(defaultZero(originalFee));
-            if (refund.compareTo(BigDecimal.ZERO) > 0) {
-                walletService.updateMoney(applyOrder.getSymbol(), applyOrder.getPartyId(), refund, BigDecimal.ZERO,
-                        Constants.MONEYLOG_CATEGORY_CONTRACT, Constants.WALLET_USDT,
-                        Constants.MONEYLOG_CONTENT_CONTRACT_CONCEL,
-                        "反手完全对冲,退回保证金,订单号[" + applyOrder.getOrderNo() + "]");
-            }
-        }
-    }
-
-    /**
-     * 部分对冲后,按剩余比例调整委托单保证金/手续费;限价单退回多扣部分。
-     */
-    private void adjustApplyOrderAfterPartialNet(ContractApplyOrder applyOrder,
-                                                 BigDecimal originalVolume,
-                                                 BigDecimal remainingVolume,
-                                                 BigDecimal originalMoney,
-                                                 BigDecimal originalDeposit,
-                                                 BigDecimal originalFee) {
-        BigDecimal ratio = remainingVolume.divide(originalVolume, 10, RoundingMode.HALF_UP);
-        BigDecimal remainingMoney = originalMoney.multiply(ratio).setScale(4, RoundingMode.DOWN);
-        BigDecimal remainingDeposit = defaultZero(originalDeposit).multiply(ratio).setScale(4, RoundingMode.DOWN);
-        BigDecimal remainingFee = defaultZero(originalFee).multiply(ratio).setScale(4, RoundingMode.DOWN);
-
-        if (ContractApplyOrder.ORDER_PRICE_TYPE_LIMIT.equals(applyOrder.getOrderPriceType())) {
-            BigDecimal refund = defaultZero(originalDeposit).subtract(remainingDeposit)
-                    .add(defaultZero(originalFee).subtract(remainingFee));
-            if (refund.compareTo(BigDecimal.ZERO) > 0) {
-                walletService.updateMoney(applyOrder.getSymbol(), applyOrder.getPartyId(), refund, BigDecimal.ZERO,
-                        Constants.MONEYLOG_CATEGORY_CONTRACT, Constants.WALLET_USDT,
-                        Constants.MONEYLOG_CONTENT_CONTRACT_CONCEL,
-                        "反手部分对冲,退回多余保证金,订单号[" + applyOrder.getOrderNo() + "]");
-            }
-        }
-        applyOrder.setVolume(remainingVolume);
-        applyOrder.setVolumeOpen(remainingVolume);
-        applyOrder.setMoney(remainingMoney);
-        applyOrder.setDeposit(remainingDeposit);
-        applyOrder.setFee(remainingFee);
-    }
-
     private void applyLimitOpenToOrder(ContractOrder order, ContractApplyOrder applyOrder) {
         order.setUnitAmount(applyOrder.getUnitAmount());
         order.setDepositOpen(applyOrder.getDeposit());
@@ -897,31 +777,6 @@
 
     public void saveOpen(ContractApplyOrder applyOrder, Realtime realtime) {
         Item item = this.itemService.findBySymbol(applyOrder.getSymbol());
-        if (item == null) {
-            throw new YamiShopBindException("Parameter Error3");
-        }
-
-        // 单向持仓:反向开仓前先平掉对向仓位;双向持仓(默认)允许同币种多空并存
-        if (contractPositionModeService.isOneWayMode()) {
-            BigDecimal originalVolume = applyOrder.getVolume();
-            BigDecimal originalMoney = applyOrder.getMoney();
-            BigDecimal originalDeposit = applyOrder.getDeposit();
-            BigDecimal originalFee = applyOrder.getFee();
-
-            BigDecimal remainingVolume = netOppositePositions(applyOrder, realtime, originalVolume);
-            if (remainingVolume.compareTo(BigDecimal.ZERO) <= 0) {
-                completeNettedApplyOrder(applyOrder, originalDeposit, originalFee);
-                return;
-            }
-            if (remainingVolume.compareTo(originalVolume) < 0) {
-                adjustApplyOrderAfterPartialNet(applyOrder, originalVolume, remainingVolume,
-                        originalMoney, originalDeposit, originalFee);
-            }
-        }
-
-        if (ContractApplyOrder.ORDER_PRICE_TYPE_OPPONENT.equals(applyOrder.getOrderPriceType())) {
-            ensureOpponentOpenMargin(applyOrder);
-        }
 
         ContractOrder f = getOne(new LambdaQueryWrapper<>(ContractOrder.class)
                 .eq(ContractOrder::getPartyId, applyOrder.getPartyId())
@@ -1000,9 +855,9 @@
             } else {
                 applyLimitOpenToOrder(order, applyOrder);
             }
-            save(order);
+            //计算强平价格(全仓模式下需合并已有持仓,uuid 可能尚未生成,比较时需用 Objects.equals)
             getStrongPrice(order);
-            update(order);
+            save(order);
             refreshOrder(applyOrder, order);
         }
     }

--
Gitblit v1.9.3