From d9d43aec7372dc579ced50eda32d7881265533b9 Mon Sep 17 00:00:00 2001
From: zyy <zyy@email.com>
Date: Mon, 14 Jul 2025 17:58:05 +0800
Subject: [PATCH] AI产品交易

---
 src/main/java/com/nq/service/impl/StockAiServiceImpl.java |   33 ++++++++++++++++++++++++++-------
 1 files changed, 26 insertions(+), 7 deletions(-)

diff --git a/src/main/java/com/nq/service/impl/StockAiServiceImpl.java b/src/main/java/com/nq/service/impl/StockAiServiceImpl.java
index fe407ed..3a3f8e5 100644
--- a/src/main/java/com/nq/service/impl/StockAiServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/StockAiServiceImpl.java
@@ -134,7 +134,7 @@
                 stockAIOrder.setRealEarning(BigDecimal.valueOf(0));
                 stockAIOrder.setStatus(EStockAIOrderStatus.wait.getStatus());   //等待审核
                 stockAiOrderMapper.insert(stockAIOrder);
-                iUserAssetsServices.aiAvailableBalanceChange(userAssets, EUserAssets.BUY_AI, buyNum);
+                iUserAssetsServices.aiAvailableBalanceChange(userAssets, EUserAssets.BUY_AI, buyNum, null);
                 return ServerResponse.createBySuccessMsg("下单成功");
             }
         } catch (Exception e) {
@@ -289,12 +289,14 @@
                 if (stockAIOrder.getRemainAmount().compareTo(remainAmount) < 0) {
                     return ServerResponse.createByErrorMsg("剩余买入金额不足");
                 }
-                stockAIOrder.setRemainAmount(stockAIOrder.getBuyAmount().subtract(remainAmount));
+                stockAIOrder.setRemainAmount(stockAIOrder.getRemainAmount().subtract(remainAmount));
 
                 //计算收益  (平仓-建仓)*数量
                 BigDecimal earnings = model.getCoverPrice().subtract(model.getStockPrice()).multiply(BigDecimal.valueOf(model.getStockNum()));
                 model.setCreatDate(new Date());
                 model.setEarnings(earnings);
+                stockAIOrder.setRealEarning(stockAIOrder.getRealEarning().add(earnings));
+
                 //保存
                 stockAiOrderMapper.updateById(stockAIOrder);
                 stockAiOrderPositionMapper.insert(model);
@@ -325,8 +327,6 @@
                         return ServerResponse.createByErrorMsg("只能拒绝待审核订单");
                     }
                     //拒绝TODO 归还买入金额
-                    //获取用户账户
-                    UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId(EStockType.MX.getCode(), stockAIOrder.getUserId());
                     StockAI stockAI = stockAiMapper.selectById(stockAIOrder.getStockAiId());
                     //买入金额
                     BigDecimal buyNum =  stockAIOrder.getBuyAmount();
@@ -341,13 +341,15 @@
                         //转换为墨西哥币
                         buyNum = iUserAssetsServices.exchangeAmountByRate(buyNum, exchangeRate.getRata());
                     }
-                    iUserAssetsServices.aiAvailableBalanceChange(userAssets, EUserAssets.BUY_AI_REJECT, buyNum);
+                    //获取用户账户
+                    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("只能结算申请通过订单");
                     }
                     //结算 TODO结算建仓 计算收益
-                    //所有建仓
+                    /*//所有建仓
                     List<StockAIOrderPosition> stockAIOrderPositionList = stockAiOrderPositionMapper
                             .selectList(new QueryWrapper<StockAIOrderPosition>()
                                     .eq("stock_ai_order_id", id));
@@ -360,10 +362,27 @@
                                 .filter(Objects::nonNull)    // 过滤 null 值
                                 .reduce(BigDecimal.ZERO, BigDecimal::add); // 累加
                         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())
+                                .orElse(null);
+                        if (exchangeRate == null) {
+                            return ServerResponse.createByErrorMsg("请先设置当前货币汇率");
+                        }
+                        //转换为墨西哥币
+                        amount = iUserAssetsServices.exchangeAmountByRate(amount, exchangeRate.getRata());
+                        buyAmount = iUserAssetsServices.exchangeAmountByRate(buyAmount, exchangeRate.getRata());
                     }
                     //获取用户账户
                     UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId(EStockType.MX.getCode(), stockAIOrder.getUserId());
-                    iUserAssetsServices.aiAvailableBalanceChange(userAssets, EUserAssets.AI_SETTLEMENT, amount);
+                    iUserAssetsServices.aiAvailableBalanceChange(userAssets, EUserAssets.AI_SETTLEMENT, amount, buyAmount);
                 }
                 stockAIOrder.setStatus(status);
                 stockAIOrder.setAuditDate(new Date());

--
Gitblit v1.9.3