From 39135376545d5523f13960d922ac89071ea3e864 Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Wed, 24 Apr 2024 17:57:46 +0800
Subject: [PATCH] 强制平仓

---
 src/main/java/com/nq/service/impl/UserAssetsServices.java |   49 ++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 44 insertions(+), 5 deletions(-)

diff --git a/src/main/java/com/nq/service/impl/UserAssetsServices.java b/src/main/java/com/nq/service/impl/UserAssetsServices.java
index f4048b4..29f2e2f 100644
--- a/src/main/java/com/nq/service/impl/UserAssetsServices.java
+++ b/src/main/java/com/nq/service/impl/UserAssetsServices.java
@@ -60,7 +60,7 @@
         UserAssets userAssets = userAssetsMapper.selectById(id);
         //  0 入款  1是扣钱  2 是充值  3 是提币
         BigDecimal bigAmt = new BigDecimal(amt);
-        if(type.equals("0") || type.equals("1 ")){
+        if(type.equals("0") || type.equals("1")){
             if(type.equals("1")){
                 bigAmt = bigAmt.negate();
             }
@@ -112,13 +112,13 @@
             userAssets.setFreezeMoney(userAssets.getFreezeMoney().add(amount.negate()));
         }else if(Objects.equals(eUserAssets.getCode(), EUserAssets.CLOSE_POSITION.getCode())){
             userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(amount));
-            userAssets.setCumulativeProfitAndLoss(userAssets.getCumulativeProfitAndLoss().add(amount.abs()));
-        }else  if(Objects.equals(eUserAssets.getCode(), EUserAssets.CLOSE_POSITION_RETURN_SECURITY_DEPOSIT.getCode())){
+           extracted(amount, userAssets);
+       }else  if(Objects.equals(eUserAssets.getCode(), EUserAssets.CLOSE_POSITION_RETURN_SECURITY_DEPOSIT.getCode())){
             userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(amount));
             userAssets.setFreezeMoney(userAssets.getFreezeMoney().subtract(amount));
         }else if(Objects.equals(eUserAssets.getCode(), EUserAssets.CALCULATE_PROFIT_AND_LOSS.getCode())){
-            userAssets.setCumulativeProfitAndLoss(userAssets.getProfitAndLoss().add(amount.abs()));
-        }else if(Objects.equals(eUserAssets.getCode(), EUserAssets.TRANSFER.getCode())){
+           extracted(amount, userAssets);
+       }else if(Objects.equals(eUserAssets.getCode(), EUserAssets.TRANSFER.getCode())){
             userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(amount));
            eUserAssets.setDesc(desc);
         }else if(Objects.equals(eUserAssets.getCode(), EUserAssets.TOP_UP.getCode())){
@@ -128,6 +128,15 @@
         }else if(Objects.equals(eUserAssets.getCode(), EUserAssets.HANDLING_CHARGE.getCode())){
            userAssets.setHandlingCharge(userAssets.getHandlingCharge().add(amount.abs()));
            userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(amount.negate()));
+           extracted(amount.negate(),userAssets);
+       }else if(Objects.equals(eUserAssets.getCode(), EUserAssets.CONSTRAINT_CLOSE_POSITION.getCode())){
+           userAssets.setFreezeMoney(userAssets.getFreezeMoney().subtract(amount));
+           if(userAssets.getIsZf() == 0){
+               userAssets.setCumulativeProfitAndLoss(userAssets.getCumulativeProfitAndLoss().subtract(amount));
+           }else{
+               userAssets.setCumulativeProfitAndLoss(userAssets.getCumulativeProfitAndLoss().add(amount));
+           }
+           extracted(userAssets);
        }
         String  after =  userAssets.getAvailableBalance().toString();
         MoneyLog moneyLog = new MoneyLog();
@@ -143,4 +152,34 @@
         moneyLogMapper.insert(moneyLog);
         return userAssetsMapper.updateById(userAssets)>1;
     }
+
+    //只要涉及到cumulativeProfitAndLoss变动重新设置状态
+    private static void extracted(UserAssets userAssets) {
+        if(userAssets.getCumulativeProfitAndLoss().compareTo(BigDecimal.ZERO) >= 0){
+            userAssets.setIsZf(0);
+        }else{
+            userAssets.setIsZf(1);
+            userAssets.setCumulativeProfitAndLoss(userAssets.getCumulativeProfitAndLoss().abs());
+        }
+    }
+
+    private static void extracted(BigDecimal amount, UserAssets userAssets) {
+        if(userAssets.getIsZf() == 1){
+            userAssets.setCumulativeProfitAndLoss(userAssets.getCumulativeProfitAndLoss().negate());
+        }
+        if(userAssets.getIsZf() == 0){
+            if(amount.compareTo(BigDecimal.ZERO) >= 0){
+                userAssets.setCumulativeProfitAndLoss(userAssets.getCumulativeProfitAndLoss().add(amount.abs()));
+            }else{
+                userAssets.setCumulativeProfitAndLoss(userAssets.getCumulativeProfitAndLoss().subtract(amount.abs()));
+            }
+        }else{
+            if(amount.compareTo(BigDecimal.ZERO) >= 0){
+                userAssets.setCumulativeProfitAndLoss(userAssets.getCumulativeProfitAndLoss().add(amount.abs()));
+            }else{
+                userAssets.setCumulativeProfitAndLoss(userAssets.getCumulativeProfitAndLoss().subtract(amount.abs()));
+            }
+        }
+        extracted(userAssets);
+    }
 }

--
Gitblit v1.9.3