From 4d2d2e5e9e296ec6cb15a01ab35f18cca00ce9ec Mon Sep 17 00:00:00 2001
From: zyy <zyy@email.com>
Date: Tue, 13 Jan 2026 16:04:24 +0800
Subject: [PATCH] 杠杆
---
src/main/java/com/nq/service/impl/UserPositionServiceImpl.java | 25 +++++++++++++++++++------
1 files changed, 19 insertions(+), 6 deletions(-)
diff --git a/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java b/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
index 42a85fa..5c9e9d9 100644
--- a/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
@@ -35,6 +35,7 @@
import java.math.BigDecimal;
+import java.math.RoundingMode;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.time.ZoneId;
@@ -188,7 +189,7 @@
return ServerResponse.createByErrorMsg("报价0,请稍后再试", request);
}
- BigDecimal buyAmt = nowPrice.multiply(new BigDecimal(buyNum)).divide(new BigDecimal(lever));
+ BigDecimal buyAmt = nowPrice.multiply(new BigDecimal(buyNum)).divide(new BigDecimal(lever), 5, RoundingMode.HALF_UP);
BigDecimal orderFree = siteSettingBuyFee.multiply(buyAmt);
BigDecimal fundratio = new BigDecimal(String.valueOf(user.getFundRatio().isEmpty() ? 100 : user.getFundRatio())).divide(new BigDecimal(100));
@@ -301,6 +302,13 @@
if (user == null) {
return ServerResponse.createByErrorMsg("平仓失败,用户不存在");
}
+ UserAssets userAssets = userAssetsMapper.selectOne(new LambdaQueryWrapper<UserAssets>()
+ .eq(UserAssets::getUserId, userPosition.getUserId())
+ .eq(UserAssets::getAccectType, "JP")
+ );
+ if(userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) > 0){
+ return ServerResponse.createByErrorMsg("用户待补资金未补齐,禁止平仓");
+ }
if (userPosition.getSellOrderId() != null) {
return ServerResponse.createByErrorMsg("平仓失败, 订单已平仓");
}
@@ -337,7 +345,13 @@
public ServerResponse sell(String positionSn, int doType, Integer number,HttpServletRequest request) {
UserPosition userPosition = this.userPositionMapper.findPositionBySn(positionSn);
if(null == number || number <= 0 || number > userPosition.getOrderNum()){
- return ServerResponse.createByErrorMsg("请输入正确的平仓数", request);
+ String msg = "请输入正确的平仓数";
+ if(request.getHeader("lang").equals("ja")){
+ msg ="正しい決済価格を入力してください";
+ return ServerResponse.createByErrorMsg(msg);
+ }else{
+ return ServerResponse.createByErrorMsg(msg, request);
+ }
}
// 手续费率
BigDecimal siitteBuyFee = new BigDecimal(iStockConfigServices.queryByKey(EConfigKey.SELL_HANDLING_CHARGE.getCode()).getCValue());
@@ -402,17 +416,16 @@
position.setId(null);
position.setPositionSn(KeyUtils.getUniqueKey());
position.setOrderNum(number);
- position.setOrderTotalPrice(position.getBuyOrderPrice().multiply(new BigDecimal(number)));
+ position.setOrderTotalPrice(position.getBuyOrderPrice().multiply(new BigDecimal(number)).divide(new BigDecimal(position.getOrderLever()), 5, RoundingMode.HALF_UP));
position.setBuyOrderId(GeneratePosition.getPositionId());
//修改拆分订单手续费
BigDecimal BuyFee = new BigDecimal(iStockConfigServices.queryByKey(EConfigKey.BUY_HANDLING_CHARGE.getCode()).getCValue());
- BigDecimal buyPrice = position.getBuyOrderPrice().multiply(new BigDecimal(position.getOrderNum()));
- BigDecimal xsPrice = buyPrice.multiply(BuyFee);
+ BigDecimal xsPrice = position.getOrderTotalPrice().multiply(BuyFee);
position.setOrderFee(xsPrice);
//修改原订单
userPosition.setOrderNum(userPosition.getOrderNum()-number);
- userPosition.setOrderTotalPrice(userPosition.getBuyOrderPrice().multiply(new BigDecimal(userPosition.getOrderNum())));
+ userPosition.setOrderTotalPrice(userPosition.getBuyOrderPrice().multiply(new BigDecimal(userPosition.getOrderNum())).divide(new BigDecimal(position.getOrderLever()), 5, RoundingMode.HALF_UP));
userPosition.setOrderFee(userPosition.getOrderFee().subtract(position.getOrderFee()));
userPositionMapper.insert(position);
userPositionMapper.updateById(userPosition);
--
Gitblit v1.9.3