From 8c0ab1b0ecd90a4b03200485ff33f6194a4b1e07 Mon Sep 17 00:00:00 2001
From: zyy <zyy@email.com>
Date: Tue, 15 Jul 2025 20:21:55 +0800
Subject: [PATCH] 计算持仓市值收益
---
src/main/java/com/nq/service/impl/StockAiServiceImpl.java | 39 +++++++++++++++++++++++----------------
1 files changed, 23 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..e4b098e 100644
--- a/src/main/java/com/nq/service/impl/StockAiServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/StockAiServiceImpl.java
@@ -4,6 +4,7 @@
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.nq.Repository.ExchangeRateRepository;
+import com.nq.common.ResponseCode;
import com.nq.common.ServerResponse;
import com.nq.dao.StockAiMapper;
import com.nq.dao.StockAiOrderMapper;
@@ -75,11 +76,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(ResponseCode.NEED_LOGIN.getCode(),"请先登录");
}
Object lock = locks.computeIfAbsent(Long.valueOf(user.getId()), k -> new Object());
synchronized (lock){
@@ -104,7 +106,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 +118,7 @@
}
//转换为墨西哥币
buyNum = iUserAssetsServices.exchangeAmountByRate(buyNum, exchangeRate.getRata());
- }
+ }*/
if(buyNum.compareTo(userAssets.getAvailableBalance()) > 0){
return ServerResponse.createByErrorMsg("可用余额不足" + userAssets.getAvailableBalance());
}
@@ -125,16 +127,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 +161,7 @@
try {
User user = iUserService.getCurrentUser(request);
if (user == null ){
- return ServerResponse.createBySuccessMsg("请先登录");
+ return ServerResponse.createByErrorCodeMsg(ResponseCode.NEED_LOGIN.getCode(),"请先登录");
}
PageHelper.startPage(pageNum, pageSize);
List<StockAiOrderTypeVO> stockAIOrders = stockAiOrderMapper.getStockAiOrderList(user.getId(), status);
@@ -330,7 +335,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 +345,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 +370,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 +385,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