From bf362d7ee6ab091cd26d69be9095440e5000928c Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Thu, 04 Jun 2026 18:08:35 +0800
Subject: [PATCH] 1
---
trading-order-service/src/main/java/com/yami/trading/service/future/FuturesOrderService.java | 78 +++++++++++++++++++++++++++++++++++++++
1 files changed, 78 insertions(+), 0 deletions(-)
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/future/FuturesOrderService.java b/trading-order-service/src/main/java/com/yami/trading/service/future/FuturesOrderService.java
index 8c26305..8a03f51 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/future/FuturesOrderService.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/future/FuturesOrderService.java
@@ -255,6 +255,84 @@
}
/**
+ * 修改持仓订单方向(买涨/买跌)
+ */
+ public String saveOrderDirection(String orderNo, String direction, String operaName) {
+ if (!FuturesOrder.DIRECTION_BUY.equals(direction) && !FuturesOrder.DIRECTION_SELL.equals(direction)) {
+ return "方向参数错误";
+ }
+ String message = "";
+ boolean lock = false;
+ while (true) {
+ try {
+ if (!FuturesLock.add(orderNo)) {
+ continue;
+ }
+ lock = true;
+
+ FuturesOrder futuresOrder = (FuturesOrder) RedisUtil.get(FuturesRedisKeys.FUTURES_SUBMITTED_ORDERNO + orderNo);
+ if (futuresOrder == null) {
+ futuresOrder = getOne(new LambdaQueryWrapper<FuturesOrder>()
+ .eq(FuturesOrder::getOrderNo, orderNo)
+ .eq(FuturesOrder::getState, FuturesOrder.STATE_SUBMITTED));
+ }
+ if (futuresOrder == null) {
+ message = "订单已结算或不存在";
+ break;
+ }
+ if (direction.equals(futuresOrder.getDirection())) {
+ message = "方向未变化";
+ break;
+ }
+
+ Map<String, Double> futuresAssetsOld = this.walletService.getMoneyFuturesByOrder(futuresOrder);
+ String oldDirection = futuresOrder.getDirection();
+ futuresOrder.setDirection(direction);
+
+ List<Realtime> realtimeList = this.dataService.realtime(futuresOrder.getSymbol());
+ if (CollectionUtil.isNotEmpty(realtimeList) && realtimeList.get(0).getClose() != null) {
+ refreshCache(futuresOrder, realtimeList.get(0).getClose().doubleValue());
+ } else {
+ RedisUtil.set(FuturesRedisKeys.FUTURES_SUBMITTED_ORDERNO + futuresOrder.getOrderNo(), futuresOrder);
+ cache.put(futuresOrder.getOrderNo(), futuresOrder);
+ updateById(futuresOrder);
+ }
+
+ Map<String, Double> futuresAssetsOrder = this.walletService.getMoneyFuturesByOrder(futuresOrder);
+ Double futuresAssets = (Double) RedisUtil.get(FuturesRedisKeys.FUTURES_ASSETS_PARTY_ID + futuresOrder.getPartyId());
+ Double futuresAssetsProfit = (Double) RedisUtil.get(FuturesRedisKeys.FUTURES_ASSETS_PROFIT_PARTY_ID + futuresOrder.getPartyId());
+ RedisUtil.set(FuturesRedisKeys.FUTURES_ASSETS_PARTY_ID + futuresOrder.getPartyId(),
+ Arith.add(null == futuresAssets ? 0.000D : futuresAssets, futuresAssetsOrder.get("money_futures") - futuresAssetsOld.get("money_futures")));
+ RedisUtil.set(FuturesRedisKeys.FUTURES_ASSETS_PROFIT_PARTY_ID + futuresOrder.getPartyId(),
+ Arith.add(null == futuresAssetsProfit ? 0.000D : futuresAssetsProfit, futuresAssetsOrder.get("money_futures_profit") - futuresAssetsOld.get("money_futures_profit")));
+
+ User party = userService.getById(futuresOrder.getPartyId());
+ String oldDirLabel = FuturesOrder.DIRECTION_BUY.equals(oldDirection) ? "买涨" : "买跌";
+ String newDirLabel = FuturesOrder.DIRECTION_BUY.equals(direction) ? "买涨" : "买跌";
+ Log log = new Log();
+ log.setCategory(Constants.LOG_CATEGORY_OPERATION);
+ log.setOperator(operaName);
+ log.setUsername(party.getUserName());
+ log.setUserId(party.getUserId());
+ log.setCreateTime(new Date());
+ log.setLog("管理员手动修改交割订单方向。订单号[" + futuresOrder.getOrderNo() + "],原方向[" + oldDirLabel + "],修改后方向[" + newDirLabel + "].");
+ this.logService.save(log);
+ updateById(futuresOrder);
+ ThreadUtils.sleep(100);
+ } catch (Throwable e) {
+ log.error("saveOrderDirection error:", e);
+ message = "修改错误";
+ } finally {
+ if (lock) {
+ FuturesLock.remove(orderNo);
+ break;
+ }
+ }
+ }
+ return message;
+ }
+
+ /**
* 业绩交易奖励
*/
public void saveRecomProfit(String partyId, BigDecimal volume) {
--
Gitblit v1.9.3