From 43d1131549c5ee6128f0ad4160df9cfce43db067 Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Sun, 07 Jun 2026 00:02:32 +0800
Subject: [PATCH] 1
---
trading-order-service/src/main/java/com/yami/trading/service/contract/ContractOrderCalculationServiceImpl.java | 14 +---
trading-order-service/src/main/java/com/yami/trading/service/contract/ContractOrderService.java | 149 -------------------------------------------------
trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiContractApplyOrderController.java | 6 --
3 files changed, 5 insertions(+), 164 deletions(-)
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiContractApplyOrderController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiContractApplyOrderController.java
index 07e7bf5..c012b4b 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiContractApplyOrderController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiContractApplyOrderController.java
@@ -28,7 +28,6 @@
import com.yami.trading.service.contract.ContractApplyOrderService;
import com.yami.trading.service.contract.ContractLockService;
import com.yami.trading.service.contract.ContractOrderService;
-import com.yami.trading.service.contract.ContractPositionModeService;
import com.yami.trading.service.data.DataService;
import com.yami.trading.service.item.ItemLeverageService;
import com.yami.trading.service.item.ItemService;
@@ -95,9 +94,6 @@
private ContractOrderService contractOrderService;
@Autowired
- private ContractPositionModeService contractPositionModeService;
-
- @Autowired
private ContractLockService contractLockService;
@Autowired
private SessionTokenService sessionTokenService;
@@ -132,8 +128,6 @@
data.put("contract_open_limit_min", contractOpenLimitMin);
BigDecimal contractOpenLimitMax = new BigDecimal(sysparaService.find("contract_open_limit_max").getSvalue());
data.put("contract_open_limit_max", contractOpenLimitMax);
- data.put("contract_position_mode", contractPositionModeService.getMode());
-
return Result.succeed(data);
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/contract/ContractOrderCalculationServiceImpl.java b/trading-order-service/src/main/java/com/yami/trading/service/contract/ContractOrderCalculationServiceImpl.java
index f9afbb6..3d3ccdc 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/contract/ContractOrderCalculationServiceImpl.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/contract/ContractOrderCalculationServiceImpl.java
@@ -19,7 +19,6 @@
import java.math.RoundingMode;
import java.util.Date;
import java.util.List;
-import java.util.Objects;
@Slf4j
@Service
@@ -197,11 +196,7 @@
BigDecimal forceClose;
if (order_close_line_type == 1) {
Wallet wallet = this.walletService.findByUserId(order.getPartyId().toString());
- if (wallet == null) {
- forceClose = calculateType2ForceClosePrice(order);
- } else {
- forceClose = calculateType1ForceClosePrice(order, wallet);
- }
+ forceClose = calculateType1ForceClosePrice(order, wallet);
} else {
forceClose = calculateType2ForceClosePrice(order);
}
@@ -244,19 +239,16 @@
List<ContractOrder> list = contractOrderService.findSubmitted(order.getPartyId(), null, null, null, null, null);
BigDecimal otherEquity = BigDecimal.ZERO;
for (ContractOrder contractOrder : list) {
- if (contractOrder == null) {
- continue;
- }
if (ContractOrder.STATE_SUBMITTED.equals(contractOrder.getState())) {
contractOrderService.wrapProfit(contractOrder);
}
- if (Objects.equals(order.getUuid(), contractOrder.getUuid())) {
+ if (order.getUuid().equals(contractOrder.getUuid())) {
continue;
}
otherEquity = otherEquity.add(defaultZero(contractOrder.getProfit()).add(defaultZero(contractOrder.getDeposit())));
}
- BigDecimal baseEquity = defaultZero(wallet != null ? wallet.getMoney() : null)
+ BigDecimal baseEquity = defaultZero(wallet.getMoney())
.add(otherEquity)
.add(defaultZero(order.getDeposit()));
BigDecimal priceOffset = baseEquity.divide(volumeFactor, 10, RoundingMode.HALF_UP);
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..1c71532 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);
+ //计算强平价格
getStrongPrice(order);
- update(order);
+ save(order);
refreshOrder(applyOrder, order);
}
}
--
Gitblit v1.9.3