From a2dc849bc20bffaa4ad45d68e401d3892ace24b3 Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Fri, 04 Jul 2025 22:21:20 +0800
Subject: [PATCH] 1
---
trading-order-service/src/main/java/com/yami/trading/service/future/FuturesOrderService.java | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 52 insertions(+), 5 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 d47f294..8c26305 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
@@ -2,7 +2,9 @@
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -11,10 +13,7 @@
import com.yami.trading.bean.future.dto.TFuturesOrderDTO;
import com.yami.trading.bean.future.query.FuturesOrderQuery;
import com.yami.trading.bean.item.domain.Item;
-import com.yami.trading.bean.model.Log;
-import com.yami.trading.bean.model.User;
-import com.yami.trading.bean.model.UserRecom;
-import com.yami.trading.bean.model.Wallet;
+import com.yami.trading.bean.model.*;
import com.yami.trading.bean.syspara.domain.Syspara;
import com.yami.trading.common.constants.Constants;
import com.yami.trading.common.constants.TipConstants;
@@ -22,6 +21,7 @@
import com.yami.trading.common.exception.YamiShopBindException;
import com.yami.trading.common.util.*;
import com.yami.trading.dao.future.FuturesOrderMapper;
+import com.yami.trading.service.CapitaltWalletService;
import com.yami.trading.service.WalletService;
import com.yami.trading.service.data.DataService;
import com.yami.trading.service.item.ItemService;
@@ -85,6 +85,9 @@
private TipService tipService;
@Autowired
private UserDataService userDataService;
+
+ @Autowired
+ CapitaltWalletService capitaltWalletService;
@Autowired
private ProfitLossConfigService profitLossConfigService;
@@ -314,6 +317,7 @@
if (futuresPara.getUnitMaxAmount().doubleValue() > 0 && futuresOrder.getVolume() > futuresPara.getUnitMaxAmount().doubleValue()) {
throw new BusinessException("金额不在购买区间");
}
+
checkSubmitOrder(futuresOrder.getPartyId().toString(), futuresPara);
futuresOrder.setOrderNo(DateUtil.getToday("yyMMddHHmmss") + RandomUtil.getRandomNum(8));
@@ -361,6 +365,7 @@
// 钱包扣费
walletService.updateMoney(futuresOrder.getSymbol(), futuresOrder.getPartyId(), moneyCost, BigDecimal.ZERO,
Constants.MONEYLOG_CATEGORY_CONTRACT, Constants.WALLET, Constants.DELIVERY_MONEYLOG_CONTENT_CONTRACT_OPEN, "交割合约,订单号[" + futuresOrder.getOrderNo() + "]");
+
checkProfitAndLoss(futuresOrder);
save(futuresOrder);
@@ -370,7 +375,6 @@
if (Constants.SECURITY_ROLE_MEMBER.equals(party.getRoleName())) {
tipService.saveTip(futuresOrder.getUuid().toString(), TipConstants.FUTURES_ORDER);
}
-// saveRecomProfit(futuresOrder.getPartyId().toString(),futuresOrder.getVolume());
return futuresOrder;
}
@@ -946,4 +950,47 @@
return map;
}
+
+// public static void main(String[] args) {
+// BigDecimal balance = new BigDecimal("9772.9"); // 账户余额
+// BigDecimal feeRate = new BigDecimal("0.0005"); // 手续费率(基于下单金额)
+// BigDecimal price = new BigDecimal("1"); // 商品价格
+// int leverage = 150; // 杠杆倍数
+//
+//// 可购买数量=(余额 ÷ (1÷杠杆 + 费率))/杠杆
+//
+//
+// // 1. 计算最大可下单金额(x)
+// BigDecimal denominator = BigDecimal.ONE.divide(new BigDecimal(leverage), 10, RoundingMode.HALF_UP).add(feeRate);
+// BigDecimal maxOrderAmount = balance.divide(denominator, 2, RoundingMode.FLOOR);
+//
+// // 2. 计算可购买数量
+// BigDecimal quantity = maxOrderAmount.divide(price, 0, RoundingMode.FLOOR);
+// BigDecimal actualOrderAmount = quantity.multiply(price);
+//
+// // 3. 计算费用
+// BigDecimal margin = actualOrderAmount
+// .divide(new BigDecimal(leverage), 2, RoundingMode.HALF_UP);
+// BigDecimal fee = actualOrderAmount.multiply(feeRate).setScale(2, RoundingMode.HALF_UP);
+// BigDecimal totalCost = margin.add(fee);
+//
+// // 输出结果
+// System.out.println("【输入参数】");
+// System.out.printf("账户余额: %s 元\n", balance);
+// System.out.printf("手续费率: %s%%\n", feeRate.multiply(new BigDecimal(100)));
+// System.out.printf("商品价格: %s 元\n", price);
+// System.out.printf("杠杆倍数: %d 倍\n\n", leverage);
+//
+// System.out.println("【计算结果】");
+// System.out.printf("理论最大可下单金额: %s 元\n", maxOrderAmount);
+// System.out.printf("实际可购买数量: %s 份\n", quantity);
+// System.out.printf("实际下单金额: %s 元\n", actualOrderAmount);
+// System.out.println("--------------------------------");
+// System.out.printf("保证金: %s 元\n", margin);
+// System.out.printf("手续费: %s 元\n", fee);
+// System.out.printf("总支出: %s 元\n", totalCost);
+// System.out.printf("剩余余额: %s 元\n", balance.subtract(totalCost));
+// }
+
+
}
--
Gitblit v1.9.3