From 768c60dafd2e816245952753411ddff7f2405a76 Mon Sep 17 00:00:00 2001
From: zyy <zyy@email.com>
Date: Mon, 29 Sep 2025 11:28:55 +0800
Subject: [PATCH] 1

---
 src/main/java/com/nq/utils/UserPointUtil.java |   69 +++++++++++++++++++++++++++++++++-
 1 files changed, 66 insertions(+), 3 deletions(-)

diff --git a/src/main/java/com/nq/utils/UserPointUtil.java b/src/main/java/com/nq/utils/UserPointUtil.java
index 66376a2..ac1c628 100644
--- a/src/main/java/com/nq/utils/UserPointUtil.java
+++ b/src/main/java/com/nq/utils/UserPointUtil.java
@@ -1,11 +1,13 @@
 package com.nq.utils;
 
 
+import com.github.pagehelper.util.StringUtil;
 import com.nq.pojo.UserPosition;
 import com.nq.vo.position.PositionProfitVO;
 import com.nq.vo.position.UserPositionVO;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 
 /**
  * 仓位计算工具类
@@ -51,12 +53,42 @@
         PositionProfitVO positionProfitVO = getPositionProfitVO(position,nowPrice);
        BigDecimal ss =  positionProfitVO.getProfitAndLose().divide(userPositionVO.getOrderTotalPrice(),BigDecimal.ROUND_CEILING)
                .multiply(new BigDecimal(100));
+        ss = ss.setScale(2, BigDecimal.ROUND_DOWN);
         userPositionVO.setProfitAndLoseParent(ss+"%");
+        userPositionVO.setProfitAndLoseParent2(ss);
         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;
     }
+
+
+    /**
+     * 返回当前 仓位表 实时数据
+     * */
+    public  static  UserPositionVO assembleUserPositionVO2(UserPositionVO userPositionVO,BigDecimal nowPrice) {
+        PositionProfitVO positionProfitVO = getPositionProfitVO2(userPositionVO, nowPrice);
+        BigDecimal ss =  positionProfitVO.getProfitAndLose().divide(userPositionVO.getOrderTotalPrice(), RoundingMode.CEILING)
+                .multiply(new BigDecimal(100));
+        ss = ss.setScale(2, RoundingMode.DOWN);
+        userPositionVO.setProfitAndLoseParent(ss+"%");
+        userPositionVO.setProfitAndLoseParent2(ss);
+        userPositionVO.setProfitAndLose(positionProfitVO.getProfitAndLose());
+        userPositionVO.setAllProfitAndLose(positionProfitVO.getAllProfitAndLose());
+        if(StringUtil.isEmpty(userPositionVO.getSellOrderId())){
+            userPositionVO.setNow_price(nowPrice.toString());
+        }else{
+            userPositionVO.setNow_price(userPositionVO.getSellOrderPrice().toString());
+        }
+        userPositionVO.setAmountToBeCovered(userPositionVO.getAmountToBeCovered());
+        return userPositionVO;
+    }
+
 
     /**
      * 计算仓位盈亏计算方法
@@ -72,7 +104,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 +112,38 @@
                 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);
+        positionProfitVO.setAllProfitAndLose(allProfitAndLose);
+        positionProfitVO.setNowPrice(nowPrice.setScale(5,BigDecimal.ROUND_UP).toString());
+        return positionProfitVO;
+    }
+
+    /**
+     * 计算仓位盈亏计算方法
+     * */
+    public static PositionProfitVO getPositionProfitVO2(UserPositionVO position,BigDecimal nowPrice) {
+        BigDecimal profitAndLose = new BigDecimal("0");
+        BigDecimal allProfitAndLose = new BigDecimal("0");
+
+        if (position.getSellOrderId() != null) {
+
+            BigDecimal subPrice = position.getSellOrderPrice().subtract(position.getBuyOrderPrice());
+            profitAndLose = subPrice.multiply(new BigDecimal(position.getOrderNum().intValue()));
+            if ("买跌".equals(position.getOrderDirection())) {
+                profitAndLose = profitAndLose.negate();
+            }
+            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()));
+            if ("买跌".equals(position.getOrderDirection())) {
+                profitAndLose = profitAndLose.negate();
+            }
+            //总盈亏= 浮动盈亏 – 手续费 – 印花税 – 留仓费 – 点差费
+            allProfitAndLose = profitAndLose.subtract(position.getOrderSpread()).subtract(position.getOrderStayFee()).subtract(position.getSpreadRatePrice());
         }
         PositionProfitVO positionProfitVO = new PositionProfitVO();
         positionProfitVO.setProfitAndLose(profitAndLose);

--
Gitblit v1.9.3