From af880d955d2b2935a0faa4c02632ab2148f44053 Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Thu, 03 Oct 2024 22:25:46 +0800
Subject: [PATCH] 1

---
 src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java       |   22 ++++++-----
 src/main/java/com/nq/utils/task/stock/CarryPositionTask.java               |   27 +++++++------
 src/main/java/com/nq/vo/position/UserPositionVO.java                       |    2 +
 src/main/java/com/nq/controller/backend/AdminStockSubscribeController.java |    2 
 src/main/java/com/nq/controller/AgentApiController.java                    |    2 
 src/main/java/com/nq/service/IUserStockSubscribeService.java               |    2 
 src/main/java/com/nq/service/impl/StockSubscribeServiceImpl.java           |    8 ++--
 src/main/java/com/nq/service/impl/UserPositionServiceImpl.java             |   25 +++++++++++-
 src/main/java/com/nq/utils/timeutil/TimeUtil.java                          |    6 +-
 src/main/java/com/nq/pojo/UserStockSubscribe.java                          |    2 
 10 files changed, 61 insertions(+), 37 deletions(-)

diff --git a/src/main/java/com/nq/controller/AgentApiController.java b/src/main/java/com/nq/controller/AgentApiController.java
index e262b1f..cfbb1fe 100644
--- a/src/main/java/com/nq/controller/AgentApiController.java
+++ b/src/main/java/com/nq/controller/AgentApiController.java
@@ -94,7 +94,7 @@
     //申购信息-添加 修改
     @RequestMapping({"saveStockSubscribe.do"})
     @ResponseBody
-    public ServerResponse saveStockSubscribe(UserStockSubscribe model, HttpServletRequest request) {
+    public ServerResponse saveStockSubscribe(UserStockSubscribe model, HttpServletRequest request) throws Exception {
         return this.iUserStockSubscribeService.save(model, request);
     }
 
diff --git a/src/main/java/com/nq/controller/backend/AdminStockSubscribeController.java b/src/main/java/com/nq/controller/backend/AdminStockSubscribeController.java
index 038e4da..8b27f83 100644
--- a/src/main/java/com/nq/controller/backend/AdminStockSubscribeController.java
+++ b/src/main/java/com/nq/controller/backend/AdminStockSubscribeController.java
@@ -101,7 +101,7 @@
     //申购信息-添加 修改
     @RequestMapping({"saveStockSubscribe.do"})
     @ResponseBody
-    public ServerResponse saveStockSubscribe(UserStockSubscribe model, HttpServletRequest request) {
+    public ServerResponse saveStockSubscribe(UserStockSubscribe model, HttpServletRequest request) throws Exception {
         return this.iUserStockSubscribeService.save(model, request);
     }
 
diff --git a/src/main/java/com/nq/pojo/UserStockSubscribe.java b/src/main/java/com/nq/pojo/UserStockSubscribe.java
index b43df4a..ce902e3 100644
--- a/src/main/java/com/nq/pojo/UserStockSubscribe.java
+++ b/src/main/java/com/nq/pojo/UserStockSubscribe.java
@@ -99,7 +99,7 @@
     private Integer type;
     /**
      * 申购状态
-     *状态:1、已申购,2、未中签,3、已中签,4、已缴纳 5.已转持仓
+     *状态:1、已申购,2、未中签,3、已中签,4、已缴纳 5.已转持仓 6.已上市
      */
     private Integer status;
     /**
diff --git a/src/main/java/com/nq/service/IUserStockSubscribeService.java b/src/main/java/com/nq/service/IUserStockSubscribeService.java
index 4360a88..df025bd 100644
--- a/src/main/java/com/nq/service/IUserStockSubscribeService.java
+++ b/src/main/java/com/nq/service/IUserStockSubscribeService.java
@@ -28,7 +28,7 @@
     /**
      * 新股申购-保存
      */
-    ServerResponse save(UserStockSubscribe model, HttpServletRequest request);
+    ServerResponse save(UserStockSubscribe model, HttpServletRequest request) throws Exception;
 
     /**
      * 发送站内信
diff --git a/src/main/java/com/nq/service/impl/StockSubscribeServiceImpl.java b/src/main/java/com/nq/service/impl/StockSubscribeServiceImpl.java
index bc4037e..78457ad 100644
--- a/src/main/java/com/nq/service/impl/StockSubscribeServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/StockSubscribeServiceImpl.java
@@ -112,10 +112,10 @@
     public ServerResponse add(StockSubscribe model, HttpServletRequest request) {
         //判断是否已经存在
         log.info("model:{}", model);
-        Stock stock = stockMapper.selectOne(new LambdaQueryWrapper<Stock>().eq(Stock::getStockCode, model.getCode()).last(" limit 1"));
-        if(null == stock){
-            return ServerResponse.createByErrorMsg("新股代码不存在");
-        }
+//        Stock stock = stockMapper.selectOne(new LambdaQueryWrapper<Stock>().eq(Stock::getStockCode, model.getCode()).last(" limit 1"));
+//        if(null == stock){
+//            return ServerResponse.createByErrorMsg("新股代码不存在");
+//        }
 
         int resultCount = this.stockSubscribeMapper.insert(model);
         if (resultCount > 0) {
diff --git a/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java b/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
index 37e8285..bbeb08f 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.*;
@@ -339,6 +340,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){
             return ServerResponse.createByErrorMsg("股票不存在,平仓失败", request);
@@ -573,7 +579,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 +595,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);
             }
         }
@@ -1264,7 +1283,7 @@
         userPosition.setBuyOrderPrice(userStockSubscribe.getBuyPrice());
         userPosition.setOrderDirection("买涨");
 
-        userPosition.setOrderNum(userStockSubscribe.getApplyNumber()*stockSubscribe.getLever().intValue());
+        userPosition.setOrderNum(userStockSubscribe.getApplyNumber());
 
 
         userPosition.setIsLock(Integer.valueOf(0));
diff --git a/src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java b/src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java
index 2e39552..4877188 100644
--- a/src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java
@@ -138,12 +138,15 @@
             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){
@@ -227,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) {
@@ -253,7 +256,7 @@
             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){
@@ -263,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));
                         }
                     }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));
@@ -298,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));
@@ -352,8 +355,6 @@
                     }
 
                 }
-
-
         } else{
             if(model.getPhone() != null&&model.getId()==null) {
                 User user = userMapper.findByPhone(model.getPhone());
@@ -379,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){
diff --git a/src/main/java/com/nq/utils/task/stock/CarryPositionTask.java b/src/main/java/com/nq/utils/task/stock/CarryPositionTask.java
index 8fd088b..9791e1a 100644
--- a/src/main/java/com/nq/utils/task/stock/CarryPositionTask.java
+++ b/src/main/java/com/nq/utils/task/stock/CarryPositionTask.java
@@ -60,7 +60,7 @@
     private final AtomicBoolean ballot = new AtomicBoolean(false);
 
 
-//    @Scheduled(cron = "0 0/10 * * * ?")
+    @Scheduled(cron = "0 0/1 * * * ?")
     public void ballot() {
         if (ballot.get()) { // 判断任务是否在处理中
             return;
@@ -68,39 +68,40 @@
         if (ballotLock.tryLock()) {
             try {
                 ballot.set(true); // 设置处理中标识为true
-                log.info("新股上市转持仓定时任务--------->开始");
+//                log.info("新股上市转持仓定时任务--------->开始");
+                log.info("新股上市定时任务--------->开始");
                 List<StockSubscribe> stockSubscribes = stockSubscribeMapper.selectList(new LambdaQueryWrapper<StockSubscribe>()
                         .lt(StockSubscribe::getListDate, DateUtil.date()));
                 if (CollectionUtils.isNotEmpty(stockSubscribes)) {
                     List<String> codeList = stockSubscribes.stream().map(StockSubscribe::getCode).collect(Collectors.toList());
                     List<UserStockSubscribe> userStockSubscribes = userStockSubscribeMapper.selectList(new LambdaQueryWrapper<UserStockSubscribe>()
-                            .eq(UserStockSubscribe::getStatus, 4).in(UserStockSubscribe::getNewCode, codeList));
+                            .eq(UserStockSubscribe::getStatus, 5).in(UserStockSubscribe::getNewCode, codeList));
                     //订单转持仓
                     userStockSubscribes.forEach(f -> {
-                        ServerResponse serverResponse = iUserPositionService.newStockToPosition(f.getId(),BigDecimal.ZERO);//转持仓
-                        if(serverResponse.isSuccess()){
-                            f.setStatus(5);
+//                        ServerResponse serverResponse = iUserPositionService.newStockToPosition(f.getId(),BigDecimal.ZERO);//转持仓
+//                        if(serverResponse.isSuccess()){
+                            f.setStatus(6);
                             userStockSubscribeMapper.updateById(f);
-                        }else{
-                            log.info("新股上市转持仓失败申购订单id:"+f.getId()+",失败原因:"+serverResponse.getMsg());
-                        }
+//                        }else{
+//                            log.info("新股上市定时任务失败申购订单id:"+f.getId()+",失败原因:"+serverResponse.getMsg());
+//                        }
                     });
                 }
-                log.info("新股上市转持仓定时任务--------->结束");
+                log.info("新股上市定时任务--------->结束");
             } catch (Exception e) {
-                log.error("新股上市转持仓定时任务发生异常", e);
+                log.error("新股上市定时任务发生异常", e);
             } finally {
                 ballotLock.unlock();
                 ballot.set(false); // 设置处理中标识为false
             }
         } else {
-            log.info("新股上市转持仓定时任务--------->上次任务还未执行完成,本次任务忽略");
+            log.info("新股上市定时任务--------->上次任务还未执行完成,本次任务忽略");
         }
     }
 
     private final AtomicBoolean subscription = new AtomicBoolean(false);
 
-    @Scheduled(cron = "0 0/1 * * * ?")
+//    @Scheduled(cron = "0 0/1 * * * ?")
     public void subscription() {
         if (subscription.get()) { // 判断任务是否在处理中
             return;
diff --git a/src/main/java/com/nq/utils/timeutil/TimeUtil.java b/src/main/java/com/nq/utils/timeutil/TimeUtil.java
index b87dc8b..32dea51 100644
--- a/src/main/java/com/nq/utils/timeutil/TimeUtil.java
+++ b/src/main/java/com/nq/utils/timeutil/TimeUtil.java
@@ -36,8 +36,8 @@
     }
 
 
-//    public static void main(String[] args) {
-//        System.out.println(isTradingHour("00:15","12:00","12:00","24:00"));
-//    }
+    public static void main(String[] args) {
+        System.out.println(isTradingHour("08:00","12:00"));
+    }
 
 }
diff --git a/src/main/java/com/nq/vo/position/UserPositionVO.java b/src/main/java/com/nq/vo/position/UserPositionVO.java
index 509bee5..5f1fe98 100644
--- a/src/main/java/com/nq/vo/position/UserPositionVO.java
+++ b/src/main/java/com/nq/vo/position/UserPositionVO.java
@@ -65,4 +65,6 @@
     private String profitAndLoseParent;
 
     private BigDecimal amountToBeCovered = BigDecimal.ZERO;
+
+    private Boolean isListed = true;
 }

--
Gitblit v1.9.3