From dfd95b8354429de9b14087cb96cba0ba0cd7265a Mon Sep 17 00:00:00 2001
From: zyy <zyy@email.com>
Date: Tue, 15 Jul 2025 14:07:06 +0800
Subject: [PATCH] 大宗交易修改

---
 src/main/java/com/nq/service/impl/StockAiServiceImpl.java |   38 ++++++++++++++++++++++----------------
 1 files changed, 22 insertions(+), 16 deletions(-)

diff --git a/src/main/java/com/nq/service/impl/StockAiServiceImpl.java b/src/main/java/com/nq/service/impl/StockAiServiceImpl.java
index 3a3f8e5..11eacec 100644
--- a/src/main/java/com/nq/service/impl/StockAiServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/StockAiServiceImpl.java
@@ -75,11 +75,12 @@
      * @return
      */
     @Override
+    @Transactional
     public ServerResponse buyStockAi(Long id, BigDecimal buyNum, HttpServletRequest request) {
         try {
             User user = iUserService.getCurrentUser(request);
             if (user == null ){
-                return ServerResponse.createBySuccessMsg("请先登录");
+                return ServerResponse.createByErrorCodeMsg(401,"请先登录");
             }
             Object lock = locks.computeIfAbsent(Long.valueOf(user.getId()), k -> new Object());
             synchronized (lock){
@@ -104,7 +105,7 @@
                 }
                 //获取用户账户
                 UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId(EStockType.MX.getCode(), user.getId());
-                BigDecimal finalBuyNum = buyNum;    //购买金额
+                /*BigDecimal finalBuyNum = buyNum;    //购买金额
                 //如果不是墨西哥币需要转换金额
                 if (!stockAI.getStockType().equals(EStockType.MX.getCode())) {
                     EStockType stockType = EStockType.getEStockTypeByCode(stockAI.getStockType());
@@ -116,7 +117,7 @@
                     }
                     //转换为墨西哥币
                     buyNum = iUserAssetsServices.exchangeAmountByRate(buyNum, exchangeRate.getRata());
-                }
+                }*/
                 if(buyNum.compareTo(userAssets.getAvailableBalance()) > 0){
                     return ServerResponse.createByErrorMsg("可用余额不足" + userAssets.getAvailableBalance());
                 }
@@ -125,16 +126,19 @@
                     return ServerResponse.createByErrorMsg("请先缴清待补资金");
                 }
 
+                Boolean flag = iUserAssetsServices.aiAvailableBalanceChange(stockAI.getStockType(), user.getId(), EUserAssets.BUY_AI, buyNum, null);
+                if (!flag)  {
+                    return ServerResponse.createByErrorMsg("扣款失败,无法转换货币");
+                }
                 StockAIOrder stockAIOrder = new StockAIOrder();
                 stockAIOrder.setUserId(user.getId());
                 stockAIOrder.setStockAiId(id);
                 stockAIOrder.setBuyDate(new Date());
-                stockAIOrder.setBuyAmount(finalBuyNum);
-                stockAIOrder.setRemainAmount(finalBuyNum);
+                stockAIOrder.setBuyAmount(buyNum);
+                stockAIOrder.setRemainAmount(buyNum);
                 stockAIOrder.setRealEarning(BigDecimal.valueOf(0));
                 stockAIOrder.setStatus(EStockAIOrderStatus.wait.getStatus());   //等待审核
                 stockAiOrderMapper.insert(stockAIOrder);
-                iUserAssetsServices.aiAvailableBalanceChange(userAssets, EUserAssets.BUY_AI, buyNum, null);
                 return ServerResponse.createBySuccessMsg("下单成功");
             }
         } catch (Exception e) {
@@ -156,7 +160,7 @@
         try {
             User user = iUserService.getCurrentUser(request);
             if (user == null ){
-                return ServerResponse.createBySuccessMsg("请先登录");
+                return ServerResponse.createByErrorCodeMsg(401,"请先登录");
             }
             PageHelper.startPage(pageNum, pageSize);
             List<StockAiOrderTypeVO> stockAIOrders = stockAiOrderMapper.getStockAiOrderList(user.getId(), status);
@@ -330,7 +334,7 @@
                     StockAI stockAI = stockAiMapper.selectById(stockAIOrder.getStockAiId());
                     //买入金额
                     BigDecimal buyNum =  stockAIOrder.getBuyAmount();
-                    //如果不是墨西哥币需要转换金额
+                    /*//如果不是墨西哥币需要转换金额
                     if (!stockAI.getStockType().equals(EStockType.MX.getCode())) {
                         EStockType stockType = EStockType.getEStockTypeByCode(stockAI.getStockType());
                         ExchangeRate exchangeRate = exchangeRateRepository.findExchangeRateByCurrencyAndConversionCurrency(stockType.getSymbol(), EStockType.MX.getSymbol())
@@ -340,10 +344,11 @@
                         }
                         //转换为墨西哥币
                         buyNum = iUserAssetsServices.exchangeAmountByRate(buyNum, exchangeRate.getRata());
+                    }*/
+                    Boolean flag = iUserAssetsServices.aiAvailableBalanceChange(stockAI.getStockType(), stockAIOrder.getUserId(), EUserAssets.BUY_AI_REJECT, buyNum, null);
+                    if (!flag)  {
+                        return ServerResponse.createByErrorMsg("扣款失败,无法转换货币");
                     }
-                    //获取用户账户
-                    UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId(EStockType.MX.getCode(), stockAIOrder.getUserId());
-                    iUserAssetsServices.aiAvailableBalanceChange(userAssets, EUserAssets.BUY_AI_REJECT, buyNum, null);
                 } else if (status.equals(EStockAIOrderStatus.finished.getStatus())) {
                     if (!stockAIOrder.getStatus().equals(EStockAIOrderStatus.passed.getStatus())) {
                         return ServerResponse.createByErrorMsg("只能结算申请通过订单");
@@ -364,11 +369,11 @@
                         amount = amount.add(earningsSUM);
                     }*/
                     StockAI stockAI = stockAiMapper.selectById(stockAIOrder.getStockAiId());
-                    //收益
+                    //收益+本金
                     BigDecimal amount = stockAIOrder.getBuyAmount().add(stockAIOrder.getRealEarning());
                     //需要解冻金额
                     BigDecimal buyAmount = stockAIOrder.getBuyAmount();
-                    //如果不是墨西哥币需要转换金额
+                    /*//如果不是墨西哥币需要转换金额
                     if (!stockAI.getStockType().equals(EStockType.MX.getCode())) {
                         EStockType stockType = EStockType.getEStockTypeByCode(stockAI.getStockType());
                         ExchangeRate exchangeRate = exchangeRateRepository.findExchangeRateByCurrencyAndConversionCurrency(stockType.getSymbol(), EStockType.MX.getSymbol())
@@ -379,10 +384,11 @@
                         //转换为墨西哥币
                         amount = iUserAssetsServices.exchangeAmountByRate(amount, exchangeRate.getRata());
                         buyAmount = iUserAssetsServices.exchangeAmountByRate(buyAmount, exchangeRate.getRata());
+                    }*/
+                    Boolean flag = iUserAssetsServices.aiAvailableBalanceChange(stockAI.getStockType(), stockAIOrder.getUserId(), EUserAssets.AI_SETTLEMENT, amount, buyAmount);
+                    if (!flag)  {
+                        return ServerResponse.createByErrorMsg("扣款失败,无法转换货币");
                     }
-                    //获取用户账户
-                    UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId(EStockType.MX.getCode(), stockAIOrder.getUserId());
-                    iUserAssetsServices.aiAvailableBalanceChange(userAssets, EUserAssets.AI_SETTLEMENT, amount, buyAmount);
                 }
                 stockAIOrder.setStatus(status);
                 stockAIOrder.setAuditDate(new Date());

--
Gitblit v1.9.3