From 8bb76f405fb9e5ee135231618c7da357946dc2f8 Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Sun, 29 Sep 2024 11:18:51 +0800
Subject: [PATCH] 1
---
src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java | 111 +++++++++++++++++++++++++++++++++++++++----------------
1 files changed, 79 insertions(+), 32 deletions(-)
diff --git a/src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java b/src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java
index 4891329..355b81c 100644
--- a/src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java
@@ -101,8 +101,27 @@
if(userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) > 0){
return ServerResponse.createByErrorMsg("请先缴清待补资金", request);
}
- if(new Date().before(stockSubscribe.getSubscribeTime()) && new Date().after(stockSubscribe.getSubscribeTime()) ){
- return ServerResponse.createByErrorMsg("不在认缴或配售时间之内",request);
+ if(userAssets.getAvailableBalance().compareTo(BigDecimal.ZERO) <= 0){
+ return ServerResponse.createByErrorMsg("账户余额不足", request);
+ }
+
+ if ( model.getApplyNums() == null){
+ // 申请数量为空时返回错误信息
+ return ServerResponse.createByErrorMsg("申请数量不能为空", request);
+ }
+ if(model.getApplyNums() < stockSubscribe.getMinNumber() ){
+ return ServerResponse.createByErrorMsg("最少申购:" + stockSubscribe.getMinNumber(), request);
+ }
+ if (model.getApplyNums() > stockSubscribe.getOrderNumber()){
+ return ServerResponse.createByErrorMsg("最多可申购:" + stockSubscribe.getOrderNumber(), request);
+ }
+
+ Date currentDate = new Date();
+ if(currentDate.before(stockSubscribe.getSubscriptionTime())){
+ return ServerResponse.createByErrorMsg("未开售",request);
+ }
+ if(currentDate.after(stockSubscribe.getSubscribeTime())){
+ return ServerResponse.createByErrorMsg("已结束",request);
}
// //重复申购限制
@@ -117,19 +136,13 @@
if (stockSubscribe == null) {
return ServerResponse.createByErrorMsg("新的股票代码不存在",request);
}
-
-// if ( model.getApplyNums() == null){
-// // 申请数量为空时返回错误信息
-// return ServerResponse.createByErrorMsg("申请数量不能为空", request);
-// }
-//
-// if (model.getApplyNums() > stockSubscribe.getOrderNumber()){
-// // 申请数量大于订单数量时返回错误信息
-// return ServerResponse.createByErrorMsg("最多可申购:" + stockSubscribe.getOrderNumber(), request);
-// }
-
- //默认数量最大
- model.setApplyNums(stockSubscribe.getOrderNumber().intValue());
+ //计算申购金额
+ BigDecimal bound;
+ if (stockSubscribe.getMinPrice() != null && stockSubscribe.getMinPrice().compareTo(BigDecimal.ZERO) > 0) {
+ bound = new BigDecimal(model.getApplyNums()).multiply(new BigDecimal(stockSubscribe.getLever().toString())).multiply(stockSubscribe.getMinPrice());
+ }else{
+ bound = new BigDecimal(model.getApplyNums()).multiply(new BigDecimal(stockSubscribe.getLever().toString())).multiply(stockSubscribe.getPrice());
+ }
if(stockSubscribe.getType() == 1){
model.setUserId(user.getId());
@@ -146,6 +159,18 @@
UserStockSubscribe userStockSubscribe = Convert.convert(UserStockSubscribe.class, model);
userStockSubscribe.setNewStockId(stockSubscribe.getNewlistId());
ret = userStockSubscribeMapper.insert(userStockSubscribe);
+
+ BigDecimal subtract = userAssets.getAvailableBalance().subtract(bound);
+ if(subtract.compareTo(BigDecimal.ZERO) >= 0){
+ userAssets.setFreezeMoney(userAssets.getFreezeMoney().add(bound));
+ userAssets.setAvailableBalance(subtract);
+ }else{
+ userAssets.setFreezeMoney(userAssets.getFreezeMoney().add(userAssets.getAvailableBalance()));
+ userAssets.setAvailableBalance(BigDecimal.ZERO);
+ userAssets.setAmountToBeCovered(userAssets.getAmountToBeCovered().add(subtract.abs()));
+ }
+ userAssetsMapper.updateById(userAssets);
+
if (ret > 0) {
return ServerResponse.createBySuccessMsg("申购成功",request);
} else {
@@ -153,13 +178,13 @@
}
}else{
- BigDecimal bound;
- if(stockSubscribe.getMinPrice() != null || stockSubscribe.getMinPrice().compareTo(BigDecimal.ZERO)<0){
- bound = new BigDecimal(model.getApplyNums()).multiply(stockSubscribe.getMinPrice());
- }else{
- bound = new BigDecimal(model.getApplyNums()).multiply(stockSubscribe.getPrice());
- }
-
+// BigDecimal bound;
+// if(stockSubscribe.getMinPrice() != null || stockSubscribe.getMinPrice().compareTo(BigDecimal.ZERO)<0){
+// bound = new BigDecimal(model.getApplyNums()).multiply(stockSubscribe.getMinPrice());
+// }else{
+// bound = new BigDecimal(model.getApplyNums()).multiply(stockSubscribe.getPrice());
+// }
+//
BigDecimal useEnaAmount = iUserAssetsServices.getAvailableBalance(EStockType.IN.getCode(), user.getId());
if(useEnaAmount.compareTo(bound)<0){
return ServerResponse.createByErrorMsg("余额不足,配售失败",request);
@@ -218,23 +243,39 @@
if((model.getStatus() == 3 && model.getApplyNumber() == null) || (model.getStatus() == 3 && model.getApplyNumber() == 0) ){
return ServerResponse.createByErrorMsg("中签数量不能小于0");
}
+ if(model.getStatus() == 3 && model.getApplyNumber()>userStockSubscribe.getApplyNums()){
+ return ServerResponse.createByErrorMsg("配置中签数量不能超过申请数量",request);
+ }
+ //客户中签直接扣除客户账户可用资金
+ UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId("IN", userStockSubscribe.getUserId());
if (model.getStatus() == 3 && model.getApplyNumber() != null){
if(stockSubscribe.getType() == 1){
- model.setBond((stockSubscribe.getMinPrice() != null ? stockSubscribe.getMinPrice() : stockSubscribe.getPrice()).multiply(BigDecimal.valueOf(model.getApplyNumber())));
+ model.setBond((stockSubscribe.getMinPrice() != null ? stockSubscribe.getMinPrice() : stockSubscribe.getPrice()).multiply(BigDecimal.valueOf(model.getApplyNumber())).multiply(new BigDecimal(stockSubscribe.getLever().toString())));
model.setDbMoney(model.getDbMoney());
- //客户中签直接扣除客户账户可用资金
- UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId("IN", userStockSubscribe.getUserId());
+
if(null == userAssets){
return ServerResponse.createByErrorMsg("客户资金账户不存在");
}
- BigDecimal decimal = userStockSubscribe.getBuyPrice().multiply(new BigDecimal(model.getApplyNumber()));//中签总价
- BigDecimal availableBalance = userAssets.getAvailableBalance().subtract(decimal);//剩余可用余额
- if(decimal.compareTo(userAssets.getAvailableBalance()) <= 0){
- userAssets.setAvailableBalance(availableBalance);
+ int applyNumber = userStockSubscribe.getApplyNums() - model.getApplyNumber();
+ if(userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) <= 0){
+ if(applyNumber > 0){
+ //需要退回的资金
+ BigDecimal refundPrice = userStockSubscribe.getBuyPrice().multiply(new BigDecimal(stockSubscribe.getLever())).multiply(new BigDecimal(applyNumber));
+ userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(refundPrice));
+ userAssets.setFreezeMoney(userAssets.getFreezeMoney().add(refundPrice));
+ }
}else{
- BigDecimal amountToBeCovered = decimal.subtract(userAssets.getAvailableBalance());//待补金额
- userAssets.setAvailableBalance(BigDecimal.ZERO);
- userAssets.setAmountToBeCovered(userAssets.getAmountToBeCovered().add(amountToBeCovered));
+ if(applyNumber > 0){
+ BigDecimal refundPrice = userStockSubscribe.getBuyPrice().multiply(new BigDecimal(stockSubscribe.getLever())).multiply(new BigDecimal(applyNumber));
+ BigDecimal subtract = refundPrice.subtract(userAssets.getAmountToBeCovered());
+ if(subtract.compareTo(BigDecimal.ZERO) <= 0){//如果退回的资金不足补足待补则直接减
+ userAssets.setAmountToBeCovered(userAssets.getAmountToBeCovered().subtract(refundPrice));
+ }else{//如果退回的资金足够填补待补资金还有剩余,则返回余额
+ userAssets.setFreezeMoney(userAssets.getFreezeMoney().subtract(refundPrice).add(userAssets.getAmountToBeCovered()));
+ userAssets.setAmountToBeCovered(BigDecimal.ZERO);
+ userAssets.setAvailableBalance(subtract);
+ }
+ }
}
userAssetsMapper.updateById(userAssets);
ret = userStockSubscribeMapper.update1(model);
@@ -252,6 +293,12 @@
ret = userStockSubscribeMapper.update1(model);
}
}else if (model.getStatus() == 2){
+ BigDecimal bond = (stockSubscribe.getMinPrice() != null ? stockSubscribe.getMinPrice() : stockSubscribe.getPrice()).multiply(BigDecimal.valueOf(model.getApplyNums())).multiply(new BigDecimal(stockSubscribe.getLever().toString()));
+ BigDecimal subtractMoney = bond.subtract(userAssets.getAmountToBeCovered());//需要退回的钱
+ userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(subtractMoney.abs()));
+ userAssets.setFreezeMoney(userAssets.getFreezeMoney().subtract(subtractMoney));
+ userAssets.setAmountToBeCovered(BigDecimal.ZERO);
+ userAssetsMapper.updateById(userAssets);
ret = userStockSubscribeMapper.update1(model);
}else if (model.getStatus() == 5){
return iUserPositionService.newStockToPosition(model.getId());
--
Gitblit v1.9.3