From 4130970dd61791e0a5cb0771a9b707084f1ed464 Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Thu, 08 May 2025 00:39:05 +0800
Subject: [PATCH] 1
---
src/main/java/com/nq/utils/UserPointUtil.java | 33 ++++++++++++++++++++++++++-------
1 files changed, 26 insertions(+), 7 deletions(-)
diff --git a/src/main/java/com/nq/utils/UserPointUtil.java b/src/main/java/com/nq/utils/UserPointUtil.java
index 0e1b2a8..e995316 100644
--- a/src/main/java/com/nq/utils/UserPointUtil.java
+++ b/src/main/java/com/nq/utils/UserPointUtil.java
@@ -1,9 +1,13 @@
package com.nq.utils;
+import com.github.pagehelper.util.StringUtil;
import com.nq.pojo.UserPosition;
+import com.nq.service.impl.UserServiceImpl;
import com.nq.vo.position.PositionProfitVO;
import com.nq.vo.position.UserPositionVO;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.math.BigDecimal;
@@ -11,6 +15,7 @@
* 仓位计算工具类
* */
public class UserPointUtil {
+ private static final Logger log = LoggerFactory.getLogger(UserPointUtil.class);
/**
@@ -49,12 +54,27 @@
userPositionVO.setStockPlate(position.getStockPlate());
userPositionVO.setSpreadRatePrice(position.getSpreadRatePrice());
PositionProfitVO positionProfitVO = getPositionProfitVO(position,nowPrice);
- BigDecimal ss = positionProfitVO.getProfitAndLose().divide(userPositionVO.getBuyOrderPrice(),BigDecimal.ROUND_CEILING)
- .multiply(new BigDecimal(100));
- userPositionVO.setProfitAndLoseParent(ss+"%");
+ BigDecimal profitAndLose = positionProfitVO.getProfitAndLose();
+ BigDecimal orderTotalPrice = userPositionVO.getOrderTotalPrice();
+
+ BigDecimal ss = BigDecimal.ZERO;
+ if (orderTotalPrice.compareTo(BigDecimal.ZERO) == 0) {
+ // 如果分母为0,可以选择返回一个默认值,比如BigDecimal.ZERO
+ // 或者根据业务逻辑进行其他处理
+ ss = BigDecimal.ZERO;
+ } else {
+ ss = profitAndLose.divide(orderTotalPrice, BigDecimal.ROUND_CEILING)
+ .multiply(new BigDecimal(100));
+ }
+ userPositionVO.setProfitAndLoseParent(ss.setScale(2, BigDecimal.ROUND_DOWN)+"%");
userPositionVO.setProfitAndLose(positionProfitVO.getProfitAndLose());
userPositionVO.setAllProfitAndLose(positionProfitVO.getAllProfitAndLose());
- userPositionVO.setNow_price(positionProfitVO.getNowPrice());
+ if(StringUtil.isEmpty(userPositionVO.getSellOrderId())){
+ userPositionVO.setNow_price(nowPrice.toString());
+ }else{
+ userPositionVO.setNow_price(position.getSellOrderPrice().toString());
+ }
+ userPositionVO.setAmountToBeCovered(position.getAmountToBeCovered());
return userPositionVO;
}
@@ -64,7 +84,6 @@
public static PositionProfitVO getPositionProfitVO(UserPosition position,BigDecimal nowPrice) {
BigDecimal profitAndLose = new BigDecimal("0");
BigDecimal allProfitAndLose = new BigDecimal("0");
-
if (position.getSellOrderId() != null) {
BigDecimal subPrice = position.getSellOrderPrice().subtract(position.getBuyOrderPrice());
@@ -72,7 +91,7 @@
if ("买跌".equals(position.getOrderDirection())) {
profitAndLose = profitAndLose.negate();
}
- allProfitAndLose = profitAndLose.subtract(position.getOrderFee()).subtract(position.getOrderSpread()).subtract(position.getOrderStayFee()).subtract(position.getSpreadRatePrice());
+ allProfitAndLose = profitAndLose.subtract(position.getOrderSpread()).subtract(position.getOrderStayFee()).subtract(position.getSpreadRatePrice());
} else {
BigDecimal subPrice = nowPrice.subtract(position.getBuyOrderPrice());
profitAndLose = subPrice.multiply(new BigDecimal(position.getOrderNum().intValue()));
@@ -80,7 +99,7 @@
profitAndLose = profitAndLose.negate();
}
//总盈亏= 浮动盈亏 – 手续费 – 印花税 – 留仓费 – 点差费
- allProfitAndLose = profitAndLose.subtract(position.getOrderFee()).subtract(position.getOrderSpread()).subtract(position.getOrderStayFee()).subtract(position.getSpreadRatePrice());
+ allProfitAndLose = profitAndLose.subtract(position.getOrderSpread()).subtract(position.getOrderStayFee()).subtract(position.getSpreadRatePrice());
}
PositionProfitVO positionProfitVO = new PositionProfitVO();
positionProfitVO.setProfitAndLose(profitAndLose);
--
Gitblit v1.9.3