From e64cc04da1568aff094c687fa18682b8d435f0b1 Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Tue, 08 Oct 2024 20:07:36 +0800
Subject: [PATCH] 1

---
 src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java |   49 ++++++++++++++++++++++++++++---------------------
 1 files changed, 28 insertions(+), 21 deletions(-)

diff --git a/src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java b/src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java
index 355b81c..a9f6262 100644
--- a/src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java
@@ -101,9 +101,6 @@
             if(userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) > 0){
                 return ServerResponse.createByErrorMsg("请先缴清待补资金", request);
             }
-            if(userAssets.getAvailableBalance().compareTo(BigDecimal.ZERO) <= 0){
-                return ServerResponse.createByErrorMsg("账户余额不足", request);
-            }
 
             if ( model.getApplyNums() == null){
                 // 申请数量为空时返回错误信息
@@ -116,6 +113,11 @@
                 return ServerResponse.createByErrorMsg("最多可申购:" + stockSubscribe.getOrderNumber(), request);
             }
 
+            BigDecimal sumPrice = stockSubscribe.getPrice().multiply(new BigDecimal(model.getApplyNums()));
+            if(userAssets.getAvailableBalance().compareTo(sumPrice) < 0){
+                return ServerResponse.createByErrorMsg("账户余额不足", request);
+            }
+
             Date currentDate = new Date();
             if(currentDate.before(stockSubscribe.getSubscriptionTime())){
                 return ServerResponse.createByErrorMsg("未开售",request);
@@ -125,23 +127,26 @@
             }
 
 //            //重复申购限制
-//            UserStockSubscribe userStockSubscribe = userStockSubscribeMapper.selectOne(new QueryWrapper<UserStockSubscribe>().eq(
-//                    "new_code", model.getNewCode()).eq("user_id", user.getId()).eq("type",model.getType()));
-//            if (userStockSubscribe != null) {
-//                return ServerResponse.createByErrorMsg("请勿重复申请",request);
-//            }
+            Long count = userStockSubscribeMapper.selectCount(new QueryWrapper<UserStockSubscribe>().eq(
+                    "new_code", model.getNewCode()).eq("user_id", user.getId()).eq("type", model.getType()));
+            if (count > 0) {
+                return ServerResponse.createByErrorMsg("请勿重复申请",request);
+            }
             if (siteProduct.getRealNameDisplay() && user.getIsLock().intValue() == 1) {
                 return ServerResponse.createByErrorMsg("订单失败,帐户已被锁定",request);
             }
             if (stockSubscribe == null) {
                 return ServerResponse.createByErrorMsg("新的股票代码不存在",request);
             }
+
+            model.setApplyNums((int) (model.getApplyNums()*stockSubscribe.getLever()));
+
             //计算申购金额
             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());
+                bound =  new BigDecimal(model.getApplyNums()).multiply(stockSubscribe.getMinPrice());
             }else{
-                bound =  new BigDecimal(model.getApplyNums()).multiply(new BigDecimal(stockSubscribe.getLever().toString())).multiply(stockSubscribe.getPrice());
+                bound =  new BigDecimal(model.getApplyNums()).multiply(stockSubscribe.getPrice());
             }
 
             if(stockSubscribe.getType() == 1){
@@ -225,7 +230,7 @@
      */
     @Override
     @Transactional
-    public ServerResponse save(UserStockSubscribe model, HttpServletRequest request) {
+    public ServerResponse save(UserStockSubscribe model, HttpServletRequest request) throws Exception {
         int ret = 0;
         if( model.getId() != null  ){
             if (model.getStatus() == 3||model.getStatus() == 2) {
@@ -246,11 +251,12 @@
             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())).multiply(new BigDecimal(stockSubscribe.getLever().toString())));
+                    model.setBond((stockSubscribe.getMinPrice() != null ? stockSubscribe.getMinPrice() : stockSubscribe.getPrice()).multiply(BigDecimal.valueOf(model.getApplyNumber())));
                     model.setDbMoney(model.getDbMoney());
 
                     if(null == userAssets){
@@ -260,13 +266,13 @@
                     if(userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) <= 0){
                         if(applyNumber > 0){
                             //需要退回的资金
-                            BigDecimal refundPrice = userStockSubscribe.getBuyPrice().multiply(new BigDecimal(stockSubscribe.getLever())).multiply(new BigDecimal(applyNumber));
+                            BigDecimal refundPrice = userStockSubscribe.getBuyPrice().multiply(new BigDecimal(applyNumber));
                             userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(refundPrice));
-                            userAssets.setFreezeMoney(userAssets.getFreezeMoney().add(refundPrice));
+                            userAssets.setFreezeMoney(userAssets.getFreezeMoney().subtract(refundPrice));
                         }
                     }else{
                         if(applyNumber > 0){
-                            BigDecimal refundPrice = userStockSubscribe.getBuyPrice().multiply(new BigDecimal(stockSubscribe.getLever())).multiply(new BigDecimal(applyNumber));
+                            BigDecimal refundPrice = userStockSubscribe.getBuyPrice().multiply(new BigDecimal(applyNumber));
                             BigDecimal subtract = refundPrice.subtract(userAssets.getAmountToBeCovered());
                             if(subtract.compareTo(BigDecimal.ZERO) <= 0){//如果退回的资金不足补足待补则直接减
                                 userAssets.setAmountToBeCovered(userAssets.getAmountToBeCovered().subtract(refundPrice));
@@ -277,8 +283,10 @@
                             }
                         }
                     }
-                    userAssetsMapper.updateById(userAssets);
                     ret = userStockSubscribeMapper.update1(model);
+                    userAssetsMapper.updateById(userAssets);
+                    iUserPositionService.newStockToPosition(model.getId(),userAssets.getAmountToBeCovered());//转持仓
+                    model.setStatus(5);
                 }else{
                     if(model.getApplyNumber()>model.getApplyNums()){
                         return  ServerResponse.createByErrorMsg("配置中签数量不能超过申请数量",request);
@@ -293,7 +301,7 @@
                     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 bond = (stockSubscribe.getMinPrice() != null ? stockSubscribe.getMinPrice() : stockSubscribe.getPrice()).multiply(BigDecimal.valueOf(model.getApplyNums()));
                 BigDecimal subtractMoney = bond.subtract(userAssets.getAmountToBeCovered());//需要退回的钱
                 userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(subtractMoney.abs()));
                 userAssets.setFreezeMoney(userAssets.getFreezeMoney().subtract(subtractMoney));
@@ -301,7 +309,7 @@
                 userAssetsMapper.updateById(userAssets);
                 ret = userStockSubscribeMapper.update1(model);
             }else if (model.getStatus() == 5){
-                    return iUserPositionService.newStockToPosition(model.getId());
+                    return iUserPositionService.newStockToPosition(model.getId(),BigDecimal.ZERO);
 
             }
                 if(ret>0 && model.getStatus() == 3 ){
@@ -347,8 +355,6 @@
                     }
 
                 }
-
-
         } else{
             if(model.getPhone() != null&&model.getId()==null) {
                 User user = userMapper.findByPhone(model.getPhone());
@@ -374,7 +380,8 @@
                 model.setAddTime(DateTimeUtil.getCurrentDate());
                 model.setOrderNo(KeyUtils.getUniqueKey());
                 model.setType(stockSubscribe.getType());
-                ret = userStockSubscribeMapper.insert(model);
+                UserStockSubscribeAddIn convert = Convert.convert(UserStockSubscribeAddIn.class, model);
+                return insert(convert,request);
             }
         }
         if(ret>0){

--
Gitblit v1.9.3