From ec34bc69f10cd878e0f8b9e094f0a011ebc1fbff Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Thu, 10 Oct 2024 14:40:27 +0800
Subject: [PATCH] 1
---
src/main/java/com/nq/service/impl/UserPositionServiceImpl.java | 69 +++++++++++++++++++++++++++++++---
1 files changed, 62 insertions(+), 7 deletions(-)
diff --git a/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java b/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
index e940eed..7646781 100644
--- a/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
@@ -1,6 +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.nq.dao.*;
@@ -327,10 +328,13 @@
@Transactional
- public ServerResponse sell(String positionSn, int doType, HttpServletRequest request) {
+ public ServerResponse sell(String positionSn, int doType, Integer number,HttpServletRequest request) {
UserPosition userPosition = this.userPositionMapper.findPositionBySn(positionSn);
+ if(number <= 0 || number > userPosition.getOrderNum()){
+ return ServerResponse.createByErrorMsg("请输入正确的平仓数", request);
+ }
// 手续费率
- BigDecimal siitteBuyFee = new BigDecimal(iStockConfigServices.queryByKey(EConfigKey.SELL_HANDLING_CHARGE.getCode()).getCValue()) ;
+ BigDecimal siitteBuyFee = new BigDecimal(iStockConfigServices.queryByKey(EConfigKey.SELL_HANDLING_CHARGE.getCode()).getCValue());
UserAssets userAssets = userAssetsMapper.selectOne(new LambdaQueryWrapper<UserAssets>()
.eq(UserAssets::getUserId, userPosition.getUserId())
@@ -338,6 +342,11 @@
);
if(userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) > 0){
return ServerResponse.createByErrorMsg("请先缴清待补资金", request);
+ }
+ StockSubscribe stockSubscribe = stockSubscribeMapper.selectOne(new LambdaQueryWrapper<StockSubscribe>()
+ .eq(StockSubscribe::getCode, userPosition.getStockCode()));
+ if (null != stockSubscribe && DateUtil.date().before(stockSubscribe.getListDate())) {
+ return ServerResponse.createByErrorMsg("股票未上市,不能平仓", request);
}
Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code", userPosition.getStockCode()));
if(null == stock){
@@ -376,12 +385,41 @@
if (nowPrice.compareTo(new BigDecimal("0")) != 1) {
return ServerResponse.createByErrorMsg("报价0,平仓失败,请稍后再试", request);
}
+
+ //部分平仓
+ if(number < userPosition.getOrderNum()){
+ //拆分订单
+ UserPosition position = ConverterUtil.convert(userPosition,UserPosition.class);
+ position.setId(null);
+ position.setPositionSn(KeyUtils.getUniqueKey());
+ position.setOrderNum(number);
+ position.setOrderTotalPrice(position.getBuyOrderPrice().multiply(new BigDecimal(number)));
+ position.setBuyOrderId(GeneratePosition.getPositionId());
+ //修改拆分订单手续费
+ BigDecimal buyPrice = position.getBuyOrderPrice().multiply(new BigDecimal(position.getOrderNum()));
+ BigDecimal xsPrice = buyPrice.multiply(siitteBuyFee);
+ position.setOrderFee(xsPrice);
+
+ //修改原订单
+ userPosition.setOrderNum(userPosition.getOrderNum()-number);
+ userPosition.setOrderTotalPrice(userPosition.getBuyOrderPrice().multiply(new BigDecimal(userPosition.getOrderNum())));
+ userPosition.setOrderFee(userPosition.getOrderFee().subtract(position.getOrderFee()));
+ userPositionMapper.insert(position);
+ userPositionMapper.updateById(userPosition);
+
+ return getObjectServerResponse(request, position, nowPrice, siitteBuyFee, stock);
+ }
+ return getObjectServerResponse(request, userPosition, nowPrice, siitteBuyFee, stock);
+ }
+
+ private ServerResponse<Object> getObjectServerResponse(HttpServletRequest request, UserPosition userPosition, BigDecimal nowPrice, BigDecimal siitteBuyFee, Stock stock) {
userPosition.setSellOrderId(GeneratePosition.getPositionId());
userPosition.setSellOrderPrice(nowPrice);
userPosition.setSellOrderTime(new Date());
BigDecimal sellOrderTotel = nowPrice.multiply(new BigDecimal(userPosition.getOrderNum()));
BigDecimal xsPrice = sellOrderTotel.multiply(siitteBuyFee);
+ userPosition.setOrderFee(userPosition.getOrderFee().add(xsPrice));
userPositionMapper.updateById(userPosition);
userAssetsServices.availablebalanceChange(stock.getStockType(),
userPosition.getUserId(),
@@ -573,7 +611,6 @@
Integer state, HttpServletRequest request,
int pageNum, int pageSize, String stockType) {
User user = this.iUserService.getCurrentUser(request);
-
PageHelper.startPage(pageNum, pageSize);
List<UserPosition> userPositions;
@@ -590,7 +627,21 @@
for (UserPosition position : userPositions) {
UserPositionVO userPositionVO = UserPointUtil.assembleUserPositionVO(position, priceServices.getNowPrice(position.getStockCode()));
userPositionVO.setOrderTotalPrice(userPositionVO.getOrderTotalPrice().multiply(new BigDecimal(userPositionVO.getOrderLever())));
- userPositionVO.setProfitAndLose(userPositionVO.getProfitAndLose().multiply(new BigDecimal(userPositionVO.getOrderLever())));
+
+ 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);
+ userPositionVO.setProfitAndLoseParent("0%");
+ userPositionVO.setIsListed(false);
+ }else{
+ userPositionVO.setIsListed(true);
+ userPositionVO.setProfitAndLose(userPositionVO.getProfitAndLose().multiply(new BigDecimal(userPositionVO.getOrderLever())));
+ }
+ }else{
+ userPositionVO.setProfitAndLose(userPositionVO.getProfitAndLose().multiply(new BigDecimal(userPositionVO.getOrderLever())));
+ }
userPositionVOS.add(userPositionVO);
}
}
@@ -1282,7 +1333,9 @@
userPosition.setOrderTotalPrice(userStockSubscribe.getBond());
// BigDecimal buy_fee_amt = buy_amt.multiply(siteSetting.getBuyFee()).setScale(2, 4);
- BigDecimal buy_fee_amt = new BigDecimal(0);
+ // 手续费率
+ BigDecimal siteSettingBuyFee = new BigDecimal(iStockConfigServices.queryByKey(EConfigKey.BUY_HANDLING_CHARGE.getCode()).getCValue()) ;
+ BigDecimal buy_fee_amt = siteSettingBuyFee.multiply(userStockSubscribe.getBond());
log.info("用户购买手续费(配资后总资金 * 百分比) = {}", buy_fee_amt);
userPosition.setOrderFee(buy_fee_amt);
@@ -1314,9 +1367,8 @@
if(null == userAssets){
return ServerResponse.createByErrorMsg("新股转持仓失败");
}
-// userAssets.setFreezeMoney(userAssets.getFreezeMoney().add(userPosition.getOrderTotalPrice()));
-// userAssets.setFreezeMoney(userAssets.getFreezeMoney()!=null?userAssets.getFreezeMoney().setScale(2,BigDecimal.ROUND_UP):null);
userAssetsMapper.updateById(userAssets);
+ iUserAssetsServices.availablebalanceChange("IN", userAssets.getUserId(), EUserAssets.HANDLING_CHARGE, buy_fee_amt, "", "");
if (ret > 0) {
userStockSubscribe.setStatus(5);
userStockSubscribeMapper.update1(userStockSubscribe);
@@ -1655,7 +1707,10 @@
// 创建UserPosition对象
UserPosition userPosition = getUserPosition(dzId,num, user, stockDz, nowPrice, stock, buyAmt);
userPositionMapper.insert(userPosition);
+ BigDecimal siteSettingBuyFee = new BigDecimal(iStockConfigServices.queryByKey(EConfigKey.BUY_HANDLING_CHARGE.getCode()).getCValue()) ;
+ BigDecimal buy_fee_amt = siteSettingBuyFee.multiply(buyAmt);
userAssetsServices.availablebalanceChange(EStockType.IN.getCode(), user.getId(), EUserAssets.BUY, buyAmt.negate(),"","");
+ iUserAssetsServices.availablebalanceChange("IN", userAssets.getUserId(), EUserAssets.HANDLING_CHARGE, buy_fee_amt, "", "");
return ServerResponse.createBySuccess("购买成功", request);
}
--
Gitblit v1.9.3