peter
2025-11-26 566a1b9fda0276e2cc4a35f7ba322c0e599a2c84
src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
@@ -715,13 +715,15 @@
        BigDecimal all_sell_amt = now_price.multiply(new BigDecimal(buy_num.intValue()));
        BigDecimal profitLoss = new BigDecimal("0");
        if ("買漲".equals(userPosition.getOrderDirection())) {
        if ("买涨".equals(userPosition.getOrderDirection())) {
            log.info("買賣方向:{}", "漲");
            profitLoss = all_sell_amt.subtract(all_buy_amt).multiply(new BigDecimal(userPosition.getOrderLever())).setScale(2,4);
//            profitLoss = all_sell_amt.subtract(all_buy_amt).multiply(new BigDecimal(userPosition.getOrderLever())).setScale(2,4);
            profitLoss = all_sell_amt.subtract(all_buy_amt).setScale(2,4);
        } else {
            log.info("買賣方向:{}", "跌");
            profitLoss = all_buy_amt.subtract(all_sell_amt).multiply(new BigDecimal(userPosition.getOrderLever())).setScale(2,4);
//            profitLoss = all_buy_amt.subtract(all_sell_amt).multiply(new BigDecimal(userPosition.getOrderLever())).setScale(2,4);
            profitLoss = all_buy_amt.subtract(all_sell_amt).setScale(2,4);
        }
        log.info("買入總金額 = {} , 賣出總金額 = {} , 盈虧 = {}", new Object[]{all_buy_amt, all_sell_amt, profitLoss});
@@ -813,6 +815,7 @@
        return ServerResponse.createBySuccessMsg("平倉成功!");
    }
    //用户追加保证金操作
    public ServerResponse addmargin(String positionSn, int doType, BigDecimal marginAdd) throws Exception {
@@ -1629,6 +1632,7 @@
        userPositionVO.setProfitAndLose(positionProfitVO.getProfitAndLose());
        userPositionVO.setAllProfitAndLose(positionProfitVO.getAllProfitAndLose());
        userPositionVO.setNow_price(positionProfitVO.getNowPrice());
        userPositionVO.setAllProfitAndLoseStr(positionProfitVO.getAllProfitAndLoseStr());
        return userPositionVO;
@@ -1637,12 +1641,14 @@
    public PositionProfitVO getPositionProfitVO(UserPosition position) {
        BigDecimal profitAndLose = new BigDecimal("0");
        BigDecimal allProfitAndLose = new BigDecimal("0");
        String allProfitAndLoseStr = "";
        String nowPrice = "";
        if (position.getSellOrderId() != null) {
            BigDecimal subPrice = position.getSellOrderPrice().subtract(position.getBuyOrderPrice());
            profitAndLose = subPrice.multiply(new BigDecimal(position.getOrderNum().intValue())).multiply(new BigDecimal(position.getOrderLever())).setScale(2,4);
//            profitAndLose = subPrice.multiply(new BigDecimal(position.getOrderNum().intValue())).multiply(new BigDecimal(position.getOrderLever())).setScale(2,4);
            profitAndLose = subPrice.multiply(new BigDecimal(position.getOrderNum().intValue())).setScale(2,4);
            if ("买跌".equals(position.getOrderDirection())) {
                profitAndLose = profitAndLose.negate();
            }
@@ -1671,10 +1677,14 @@
            //总盈亏= 浮动盈亏 – 手续费 – 印花税 – 留仓费 – 点差费
            allProfitAndLose = profitAndLose.subtract(position.getOrderFee()).subtract(position.getOrderSpread()).subtract(position.getOrderStayFee()).subtract(position.getSpreadRatePrice());
            //改成盈亏百分比
            BigDecimal allProfitAndLoseStrTemp = new BigDecimal(nowPrice).subtract(position.getBuyOrderPrice()).divide(position.getBuyOrderPrice(), 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)).setScale(2,4);
            allProfitAndLoseStr = allProfitAndLoseStrTemp.toString() + "%";
        }
        PositionProfitVO positionProfitVO = new PositionProfitVO();
        positionProfitVO.setProfitAndLose(profitAndLose);
        positionProfitVO.setAllProfitAndLose(allProfitAndLose);
        positionProfitVO.setAllProfitAndLoseStr(allProfitAndLoseStr);
        positionProfitVO.setNowPrice(nowPrice);
        return positionProfitVO;