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/UserServiceImpl.java | 131 ++++++++++++++++++++++++++++++++-----------
1 files changed, 97 insertions(+), 34 deletions(-)
diff --git a/src/main/java/com/nq/service/impl/UserServiceImpl.java b/src/main/java/com/nq/service/impl/UserServiceImpl.java
index 0e639bf..b3d7e2d 100644
--- a/src/main/java/com/nq/service/impl/UserServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserServiceImpl.java
@@ -1,5 +1,7 @@
package com.nq.service.impl;
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageHelper;
@@ -14,6 +16,7 @@
import com.nq.pojo.reponse.RUserAssets;
import com.nq.service.*;
import com.nq.utils.UserPointUtil;
+import com.nq.utils.redis.RedisKeyUtil;
import com.nq.utils.timeutil.DateTimeUtil;
import com.nq.utils.PropertiesUtil;
import com.nq.utils.SymmetricCryptoUtil;
@@ -29,18 +32,21 @@
import com.nq.vo.position.PositionProfitVO;
import com.nq.vo.position.PositionVO;
import com.nq.vo.position.UserPositionVO;
+import com.nq.vo.stock.StockAdminListVO;
import com.nq.vo.stock.StockListVO;
import com.nq.vo.user.UserInfoVO;
import java.math.BigDecimal;
import java.math.RoundingMode;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
+import com.nq.vo.user.UserOut;
+import org.apache.commons.lang3.Conversion;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -101,6 +107,8 @@
@Autowired
StockPoll stockPoll;
+ @Autowired
+ StockSubscribeMapper stockSubscribeMapper;
@Resource
MoneyLogMapper mapper;
@@ -127,6 +135,9 @@
@Autowired
IPriceServices priceServices;
+
+ @Autowired
+ IUserService iUserService;
public ServerResponse reg(String yzmCode, String agentCode, String phone, String userPwd, HttpServletRequest request) {
@@ -199,7 +210,8 @@
if (user.getIsLogin().intValue() == 1) {
return ServerResponse.createByErrorMsg("登录失败。账户锁定",request);
}
- userAssetsServices.assetsByTypeAndUserId(EStockType.IN.getCode(),user.getId());
+ //默认墨西哥资产
+ userAssetsServices.assetsByTypeAndUserId(EStockType.MX.getCode(),user.getId());
this.iSiteLoginLogService.saveLog(user, request);
return ServerResponse.createBySuccess(user);
}
@@ -497,9 +509,10 @@
RUserAssets rUserAssets = new RUserAssets();
UserAssets userAssets = userAssetsList.get(i);
// 浮动盈亏
- BigDecimal profitAndLose = userAssets.getProfitAndLoss();
+ String profitAndLose = getProfitAndLose(userId, userAssets.getAccectType()).toString();
BigDecimal amt = userAssets.getAvailableBalance();
- BigDecimal totalAssets = userAssets.getAvailableBalance().add(userAssets.getFreezeMoney());
+ BigDecimal totalAssets = userAssets.getAvailableBalance().add(userAssets.getFreezeMoney()).add(new BigDecimal(profitAndLose)).subtract(userAssets.getHandlingChargeWritten());
+// BigDecimal totalAssets = userAssets.getAvailableBalance().add(userAssets.getFreezeMoney()).subtract(userAssets.getCumulativeProfitAndLoss()).add(profitAndLose);
BigDecimal freeMoney = userAssets.getFreezeMoney();
BigDecimal hMoney = userAssets.getHandlingCharge();
BigDecimal hProfitAndLose = userAssets.getCumulativeProfitAndLoss();
@@ -512,7 +525,8 @@
rUserAssets.setHandlingCharge(hMoney.toString());
rUserAssets.setProfitAndLoss(profitAndLose.toString());
rUserAssets.setIsZf(userAssets.getIsZf());
- rUserAssets.setAmountToBeCovered(userAssets.getAmountToBeCovered().toString());
+ rUserAssets.setAmountToBeCovered((userAssets.getAmountToBeCovered().add(userAssets.getHandlingChargeWritten()).toString()));
+ rUserAssets.setHandlingChargeWritten(userAssets.getHandlingChargeWritten());
BigDecimal rate = rateServices.currencyRate(
EStockType.getEStockTypeByCode(userAssets.getAccectType()),EStockType.US);
@@ -540,9 +554,9 @@
if(hMoney.compareTo(BigDecimal.ZERO)>0){
handlingChargeUSD =hMoney.multiply(rate);
}
- BigDecimal profitAndLossUSD = profitAndLose;
- if(profitAndLose.compareTo(BigDecimal.ZERO)>0){
- profitAndLossUSD =profitAndLose.multiply(rate);
+ BigDecimal profitAndLossUSD = new BigDecimal(profitAndLose);
+ if(new BigDecimal(profitAndLose).compareTo(BigDecimal.ZERO)>0){
+ profitAndLossUSD =new BigDecimal(profitAndLose).multiply(rate);
}
@@ -555,16 +569,15 @@
rUserAssets.setCumulativeProfitAndLossUSD(cumulativeProfitAndLossUSD.setScale(s,BigDecimal.ROUND_UP).toString());
rUserAssets.setHandlingChargeUSD(handlingChargeUSD.setScale(s,BigDecimal.ROUND_UP).toString());
rUserAssets.setProfitAndLossUSD(profitAndLossUSD.setScale(s,BigDecimal.ROUND_UP).toString());
- rUserAssets.setProfitAndLoss(getProfitAndLose(userId).toString());
- BigDecimal decimal = new BigDecimal(rUserAssets.getTotalMoney()).add(new BigDecimal(rUserAssets.getProfitAndLoss()));
- rUserAssets.setTotalMoney(decimal.toString());
+ rUserAssets.setProfitAndLoss(profitAndLose);
+// BigDecimal decimal = new BigDecimal(rUserAssets.getTotalMoney()).add(new BigDecimal(rUserAssets.getProfitAndLoss()));
+// rUserAssets.setTotalMoney(decimal.toString());
AllProfitAndLose = AllProfitAndLose.add(profitAndLossUSD);
allTotalAssets = allTotalAssets.add(totleMoneyUSD);
allAmt = allAmt.add(availableBalanceUSD);
AllHProfitAndLose = AllHProfitAndLose.add(handlingChargeUSD);
allFreeMoney = allFreeMoney.add(freezeMoneyUSD);
allHMoney = allHMoney.add(handlingChargeUSD);
-
@@ -596,19 +609,31 @@
return ServerResponse.createBySuccess(rUserAssetsList);
}
- public BigDecimal getProfitAndLose(Integer userId){
+ public BigDecimal getProfitAndLose(Integer userId, String accectType){
List<UserPosition> userPositions;
- userPositions = userPositionMapper.
- findMyPositionByCodeAndSpell(userId,
+ userPositions = userPositionMapper.findMyPositionByCodeAndSpell(userId,
"","",
- 0, "IN");
+ 0, accectType);
List<UserPositionVO> userPositionVOS = Lists.newArrayList();
if (userPositions.size() > 0) {
for (UserPosition position : userPositions) {
- UserPositionVO userPositionVO = UserPointUtil.assembleUserPositionVO(position, priceServices.getNowPrice(position.getStockCode()));
+ UserPositionVO userPositionVO = UserPointUtil.assembleUserPositionVO(position,priceServices.getNowPrice(position.getStockCode()));
+ StockSubscribe stockSubscribe = stockSubscribeMapper.selectOne(new LambdaQueryWrapper<StockSubscribe>()
+ .eq(StockSubscribe::getCode, userPositionVO.getStockCode()));
+ if(position.getSellOrderId() == null){
+ if (null != stockSubscribe && DateUtil.date().before(stockSubscribe.getListDate())) {
+ userPositionVO.setProfitAndLose(BigDecimal.ZERO);
+ }else{
+ userPositionVO.setProfitAndLose(userPositionVO.getProfitAndLose().multiply(new BigDecimal(userPositionVO.getOrderLever())));
+ }
+ }else{
+ userPositionVO.setProfitAndLose(userPositionVO.getProfitAndLose().multiply(new BigDecimal(userPositionVO.getOrderLever())));
+ }
+
userPositionVOS.add(userPositionVO);
+
}
}
BigDecimal profitAndLose = BigDecimal.ZERO;
@@ -739,10 +764,24 @@
List<User> users = this.userMapper.listByAgent(realName, phone, searchId, accountType);
List<AgentUserListVO> agentUserListVOS = Lists.newArrayList();
+
for (User user : users) {
+
+ ServerResponse money = iUserService.getMoney(user.getId());
+ List<RUserAssets> rUserAssetsList = (List<RUserAssets>) money.getData();
+ RUserAssets rUserAssets = rUserAssetsList.stream()
+ .filter(stock -> EStockType.MX.getCode().equals(stock.getAccectType()))
+ .findFirst()
+ .orElse(null);
+
AgentUserListVO agentUserListVO = assembleAgentUserListVO(user, siteSetting
.getForceStopPercent(), siteIndexSetting
.getForceSellPercent(), siteFuturesSetting.getForceSellPercent());
+ if (rUserAssets != null) {
+ agentUserListVO.setUserAmt(rUserAssets.getTotalMoney().equals("0E-8") ? new BigDecimal("0") : new BigDecimal(rUserAssets.getTotalMoney()));
+ agentUserListVO.setFreezeMoney(rUserAssets.getFreezeMoney().equals("0E-8") ? "0" : rUserAssets.getFreezeMoney());
+ agentUserListVO.setAvailableBalance(rUserAssets.getAvailableBalance().equals("0E-8") ? "0" : rUserAssets.getAvailableBalance());
+ }
agentUserListVOS.add(agentUserListVO);
}
@@ -789,8 +828,8 @@
int insertCount = this.userMapper.insert(user);
dbUser = userMapper.selectOne(queryWrapper);
- userAssetsServices.getAvailableBalance(EStockType.IN.getCode(),dbUser.getId() );
- userAssetsServices.availablebalanceChange(EStockType.IN.getCode(),dbUser.getId(),EUserAssets.TOP_UP,new BigDecimal(amt),"","");
+ userAssetsServices.getAvailableBalance(EStockType.MX.getCode(),dbUser.getId() );
+ userAssetsServices.availablebalanceChange(EStockType.MX.getCode(),dbUser.getId(),EUserAssets.TOP_UP,new BigDecimal(amt),"","");
if (insertCount > 0) {
return ServerResponse.createBySuccessMsg("Success");
}
@@ -798,15 +837,45 @@
}
- public ServerResponse listByAdmin(String realName, String phone, Integer agentId, Integer accountType, int pageNum, int pageSize, HttpServletRequest request) {
+ public ServerResponse listByAdmin(String realName, String phone, Integer agentId, Integer accountType, int pageNum, int pageSize, Integer isLock, Integer isLogin, String regTime, Integer isActive, HttpServletRequest request) throws ParseException {
PageHelper.startPage(pageNum, pageSize);
+ SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd");
+ SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd");
+ String formattedDateString = null;
+ if (StringUtils.isNotEmpty(regTime)) {
+ formattedDateString = outputFormat.format(inputFormat.parse(regTime));
+ }
+ List<User> users = this.userMapper.listByAdmin(realName, phone, agentId, accountType, isLock, isLogin, formattedDateString, isActive);
+ List<UserOut> userOuts = new ArrayList<>();
- List<User> users = this.userMapper.listByAdmin(realName, phone, agentId, accountType);
+ // 获取用户资产信息并构建返回结果
+ Map<Integer, UserOut> userOutMap = new HashMap<>();
+ for (User user : users) {
+ ServerResponse money = iUserService.getMoney(user.getId());
+ List<RUserAssets> rUserAssetsList = (List<RUserAssets>) money.getData();
+ RUserAssets rUserAssets = rUserAssetsList.stream()
+ .filter(stock -> EStockType.MX.getCode().equals(stock.getAccectType()))
+ .findFirst()
+ .orElse(null);
+
+ UserOut userOut = Convert.convert(UserOut.class, user);
+ if (rUserAssets != null) {
+ userOut.setTotalMoney(rUserAssets.getTotalMoney().equals("0E-8") ? "0" : rUserAssets.getTotalMoney());
+ userOut.setFreezeMoney(rUserAssets.getFreezeMoney().equals("0E-8") ? "0" : rUserAssets.getFreezeMoney());
+ userOut.setAvailableBalance(rUserAssets.getAvailableBalance().equals("0E-8") ? "0" : rUserAssets.getAvailableBalance());
+ userOut.setAmountToBeCovered(rUserAssets.getAmountToBeCovered());
+ }
+
+ userOutMap.put(user.getId(), userOut);
+ userOuts.add(userOut);
+ }
PageInfo pageInfo = new PageInfo(users);
-
+ pageInfo.setList(userOuts);
return ServerResponse.createBySuccess(pageInfo);
}
+
+
public ServerResponse findByUserId(Integer userId) {
@@ -1017,7 +1086,9 @@
agentUserListVO.setIsLogin(user.getIsLogin());
agentUserListVO.setRegAddress(user.getRegAddress());
agentUserListVO.setIsActive(user.getIsActive());
-
+ agentUserListVO.setImg1Key(user.getImg1Key());
+ agentUserListVO.setImg2Key(user.getImg2Key());
+ agentUserListVO.setImg3Key(user.getImg3Key());
@@ -1048,14 +1119,6 @@
BigDecimal futuresForceLine = futuresForcePercent.multiply(futuresPositionVO.getAllFuturesDepositAmt());
agentUserListVO.setFuturesForceLine(futuresForceLine);
-
-
- UserBank userBank = this.iUserBankService.findUserBankByUserId(user.getId());
- if (userBank != null) {
- agentUserListVO.setBankName(userBank.getBankName());
- agentUserListVO.setBankNo(userBank.getBankNo());
- agentUserListVO.setBankAddress(userBank.getBankAddress());
- }
return agentUserListVO;
}
--
Gitblit v1.9.3