From 29446dbdaea7d11eb28a4210ec69a186c54e705e Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Wed, 24 Apr 2024 23:44:22 +0800
Subject: [PATCH] 1

---
 src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java |   22 ++-----
 src/main/java/com/nq/utils/task/stock/CarryPositionTask.java         |   79 ++++++++++++++++++++++++++
 src/main/resources/application.properties                            |    2 
 src/main/java/com/nq/service/impl/SiteNewsServiceImpl.java           |   34 ++++------
 src/main/java/com/nq/service/impl/StockSubscribeServiceImpl.java     |   10 +++
 src/main/java/com/nq/service/impl/UserPositionServiceImpl.java       |   30 +++------
 6 files changed, 122 insertions(+), 55 deletions(-)

diff --git a/src/main/java/com/nq/service/impl/SiteNewsServiceImpl.java b/src/main/java/com/nq/service/impl/SiteNewsServiceImpl.java
index 379da96..c9e87a6 100644
--- a/src/main/java/com/nq/service/impl/SiteNewsServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/SiteNewsServiceImpl.java
@@ -80,18 +80,14 @@
         List<SiteNews> listData = this.siteNewsMapper.pageList(pageNum, pageSize, type, sort, keyword);
         GoogleTranslateUtil googleTranslateUtil = new GoogleTranslateUtil();
         //取出每一条数据的内容,进行翻译
-
-//        if (request.getHeader("lang") != null && !request.getHeader("lang").equals("zh-CN")&& !request.getHeader("lang").equals("tww")&& !request.getHeader("lang").equals("")) {
-//            for (SiteNews siteNews : listData) {
-//                try {
-//                    siteNews.setTitle(googleTranslateUtil.translate(siteNews.getTitle(), request.getHeader("lang")));
-//                    siteNews.setSourceName(googleTranslateUtil.translate(siteNews.getSourceName(), request.getHeader("lang")));
-//                } catch (Exception e) {
-//                   log.error("翻译失败");
-//                }
-//            }
-//    }
-
+        for (SiteNews siteNews : listData) {
+            try {
+                siteNews.setTitle(googleTranslateUtil.translate(siteNews.getTitle(), request.getHeader("lang")));
+                siteNews.setSourceName(googleTranslateUtil.translate(siteNews.getSourceName(), request.getHeader("lang")));
+            } catch (Exception e) {
+                log.error("翻译失败");
+            }
+        }
 
         PageInfo pageInfo = new PageInfo(listData);
         pageInfo.setList(listData);
@@ -106,14 +102,12 @@
             GoogleTranslateUtil googleTranslateUtil = new GoogleTranslateUtil();
             //取出每一条数据的内容,进行翻译
 
-            if (request.getHeader("lang") != null && !request.getHeader("lang").equals("zh-CN")&& !request.getHeader("lang").equals("tww")&& !request.getHeader("lang").equals("")) {
-                try {
-                    model.setContent(googleTranslateUtil.translate(model.getContent(), request.getHeader("lang")));
-                    model.setTitle(googleTranslateUtil.translate(model.getTitle(), request.getHeader("lang")));
-                    model.setDescription(googleTranslateUtil.translate(model.getDescription(), request.getHeader("lang")));
-                } catch (Exception e) {
-                    log.error("翻译失败");
-                }
+            try {
+                model.setContent(googleTranslateUtil.translate(model.getContent(), request.getHeader("lang")));
+                model.setTitle(googleTranslateUtil.translate(model.getTitle(), request.getHeader("lang")));
+                model.setDescription(googleTranslateUtil.translate(model.getDescription(), request.getHeader("lang")));
+            } catch (Exception e) {
+                log.error("翻译失败");
             }
             return ServerResponse.createBySuccess(model);
         }
diff --git a/src/main/java/com/nq/service/impl/StockSubscribeServiceImpl.java b/src/main/java/com/nq/service/impl/StockSubscribeServiceImpl.java
index a05b2bb..6e9b5bd 100644
--- a/src/main/java/com/nq/service/impl/StockSubscribeServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/StockSubscribeServiceImpl.java
@@ -1,9 +1,12 @@
 package com.nq.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.pagehelper.PageInfo;
 import com.nq.common.ServerResponse;
+import com.nq.dao.StockMapper;
+import com.nq.pojo.Stock;
 import com.nq.pojo.StockSubscribe;
 import com.nq.service.IStockSubscribeService;
 import com.nq.dao.StockSubscribeMapper;
@@ -26,6 +29,9 @@
         implements IStockSubscribeService {
     @Resource
     StockSubscribeMapper stockSubscribeMapper;
+
+    @Autowired
+    StockMapper stockMapper;
 
     /**
      * @Description: 用户新股列表
@@ -73,6 +79,10 @@
     public ServerResponse add(StockSubscribe model, HttpServletRequest request) {
         //判断是否已经存在
         log.info("model:{}", model);
+        Stock stock = stockMapper.selectOne(new LambdaQueryWrapper<Stock>().eq(Stock::getStockSpell, model.getCode()).last(" limit 1"));
+        if(null == stock){
+            return ServerResponse.createByErrorMsg("新股代码不存在");
+        }
         int resultCount = this.stockSubscribeMapper.insert(model);
         if (resultCount > 0) {
             return ServerResponse.createBySuccessMsg("添加新股成功");
diff --git a/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java b/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
index 6c3f208..624dbdd 100644
--- a/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
@@ -1,5 +1,6 @@
 package com.nq.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.nq.dao.*;
 import com.nq.enums.EConfigKey;
@@ -337,7 +338,7 @@
         }
         Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code", userPosition.getStockCode()));
         if (!priceServices.isLimitDownSell(stock.getStockCode())) {
-            return ServerResponse.createByErrorMsg("股票垫停,无法平仓", request);
+            return ServerResponse.createByErrorMsg("股票跌停,无法平仓", request);
         }
         BigDecimal nowPrice = priceServices.getNowPrice(userPosition.getStockCode());
         if (nowPrice.compareTo(new BigDecimal("0")) != 1) {
@@ -1159,19 +1160,18 @@
             return ServerResponse.createByErrorMsg("该新股不存在");
         }
         if (userStockSubscribe.getStatus() == 4 || userStockSubscribe.getStatus() == 3 && stockSubscribe.getType() == 2) {
-
-//                String sinaStock = SinaStockApi.getSinaStock(stockSubscribe.getStockType()+userStockSubscribe.getNewCode());
-//                String[] arrayOfString = sinaStock.split(",");
-//                 if (arrayOfString.length < 10){
-//                 return ServerResponse.createByErrorMsg("数据源无该新股数据,转持仓失败");
-//                 }
+            Stock stock = stockMapper.selectOne(new LambdaQueryWrapper<Stock>().eq(Stock::getStockSpell, userStockSubscribe.getNewCode()));
+            if(null == stock){
+                return ServerResponse.createByErrorMsg("该新股不存在");
+            }
             UserPosition userPosition = new UserPosition();
             userPosition.setPositionType(1);
             userPosition.setPositionSn(KeyUtils.getUniqueKey());
             userPosition.setUserId(userStockSubscribe.getUserId());
             userPosition.setNickName(userStockSubscribe.getRealName());
             userPosition.setAgentId(userStockSubscribe.getAgentId());
-            userPosition.setStockCode(userStockSubscribe.getNewCode());
+            userPosition.setStockCode(stock.getStockCode());
+            userPosition.setStockSpell(stock.getStockSpell());
             userPosition.setStockName(userStockSubscribe.getNewName());
             userPosition.setStockGid(stockSubscribe.getStockType() + userStockSubscribe.getNewCode());
 
@@ -1208,14 +1208,6 @@
             log.info("用户购买印花税(配资后总资金 * 百分比) = {}", buy_yhs_amt);
             userPosition.setOrderSpread(buy_yhs_amt);
 
-            //            SiteSpread siteSpread = iSiteSpreadService.findSpreadRateOne(new BigDecimal(stock_crease), buy_amt, stock.getStockCode(), now_price);
-            //            BigDecimal spread_rate_amt = new BigDecimal("0");
-            //            if(siteSpread != null){
-            //                spread_rate_amt = buy_amt.multiply(siteSpread.getSpreadRate()).setScale(2, 4);
-            //                log.info("用户购买点差费(配资后总资金 * 百分比{}) = {}", siteSpread.getSpreadRate(), spread_rate_amt);
-            //            } else{
-            //                log.info("用户购买点差费(配资后总资金 * 百分比{}) = {}", "设置异常", spread_rate_amt);
-            //            }
             BigDecimal spread_rate_amt = new BigDecimal(0);
             userPosition.setSpreadRatePrice(spread_rate_amt);
 
@@ -1239,7 +1231,7 @@
                 userStockSubscribeMapper.update1(userStockSubscribe);
                 if (userStockSubscribe.getType() == 1 || userStockSubscribe.getType() == 2) {
                     User user = userMapper.selectById(userStockSubscribe.getUserId());
-                    ret = userMapper.updateByPrimaryKey(user);
+                    ret = userMapper.updateById(user);
                 }
                 if (ret > 0) {
                     return ServerResponse.createBySuccessMsg("新股转持仓成功");
@@ -1538,7 +1530,7 @@
         //价格处理
         Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code", stockDz.getStockCode()));
 
-        if(stockDz.getStartTime().after(new Date()) || stockDz.getEndTime().after(new Date())){
+        if(stockDz.getStartTime().getTime() > new Date().getTime() || stockDz.getEndTime().getTime() < new Date().getTime()){
             return ServerResponse.createByErrorMsg("不在大宗交易所时间之内", request);
         }
         BigDecimal nowPrice = priceServices.getNowPrice(stockCode).multiply(stockDz.getDiscount());
@@ -1654,7 +1646,7 @@
         // 检查股票是否垫停
         Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code", position.getStockCode()));
         if (!priceServices.isLimitDownSell(stock.getStockCode())) {
-            log.info("股票垫停,无法平仓,订单id: {}", position.getId());
+            log.info("股票跌停,无法平仓,订单id: {}", position.getId());
             return null;
         }
 
diff --git a/src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java b/src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java
index 05ff06d..725d646 100644
--- a/src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java
@@ -383,26 +383,20 @@
                 if(userStockSubscribe.getType()== 2 ){
                     return ServerResponse.createByErrorMsg("未中签,无需支付",request);
                 }
-                //判断时间
-                if (stockSubscribe.getListDate().getTime() <System.currentTimeMillis()) {
-                    return ServerResponse.createByErrorMsg("不在认缴时间之内",request);
-                }
                 if (userStockSubscribe.getStatus() == 3) {
                     userStockSubscribe.setSubmitTime(DateTimeUtil.getCurrentDate());
                     userStockSubscribe.setStatus(4);
                     BigDecimal bigDecimal =  iUserAssetsServices.
                             getAvailableBalance(EStockType.IN.getCode(),
                                     userStockSubscribe.getUserId());
-                    if(bigDecimal.compareTo(userStockSubscribe.getDbMoney()) <0){
-                        iUserAssetsServices.availablebalanceChange(EStockType.IN.getCode(),userStockSubscribe.getUserId(),
-                                EUserAssets.BUY,userStockSubscribe.getDbMoney().negate(),"","");
-                        userStockSubscribe.setDbMoney(userStockSubscribe.getDbMoney().subtract(iUserAssetsServices.getAvailableBalance(EStockType.IN.getCode(),
-                                userStockSubscribe.getUserId())));
-                    }else{
-                        iUserAssetsServices.availablebalanceChange(EStockType.IN.getCode(),userStockSubscribe.getUserId(),
-                                EUserAssets.BUY,userStockSubscribe.getDbMoney().negate(),"","");
-                        userStockSubscribe.setDbMoney(BigDecimal.ZERO);
+
+                    BigDecimal multiply = userStockSubscribe.getBuyPrice().multiply(new BigDecimal(userStockSubscribe.getApplyNumber()));
+                    if(bigDecimal.compareTo(multiply) <= 0){
+                        return ServerResponse.createByErrorMsg("余额不足",request);
                     }
+                    iUserAssetsServices.availablebalanceChange(EStockType.IN.getCode(),userStockSubscribe.getUserId(),
+                            EUserAssets.BUY,multiply,"","");
+                    userStockSubscribe.setDbMoney(BigDecimal.ZERO);
                     userStockSubscribeMapper.update1(userStockSubscribe);
                     return  ServerResponse.createBySuccess();
                 } else {
@@ -411,8 +405,6 @@
             } else {
                 return ServerResponse.createByErrorMsg("新股认购订单不存在!",request);
             }
-
-
         }
         return ServerResponse.createByErrorMsg("请先登录",request);
     }
diff --git a/src/main/java/com/nq/utils/task/stock/CarryPositionTask.java b/src/main/java/com/nq/utils/task/stock/CarryPositionTask.java
new file mode 100644
index 0000000..694654e
--- /dev/null
+++ b/src/main/java/com/nq/utils/task/stock/CarryPositionTask.java
@@ -0,0 +1,79 @@
+package com.nq.utils.task.stock;
+
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.nq.dao.StockSubscribeMapper;
+import com.nq.dao.UserMapper;
+import com.nq.dao.UserStockSubscribeMapper;
+import com.nq.pojo.StockSubscribe;
+import com.nq.pojo.User;
+import com.nq.pojo.UserStockSubscribe;
+import com.nq.service.IUserPositionService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.client.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+import java.util.stream.Collectors;
+
+/**
+ * @program: dabao
+ * @description:
+ * @create: 2024-04-01 17:32
+ **/
+@Component
+@Slf4j
+public class CarryPositionTask {
+
+
+    @Autowired
+    UserStockSubscribeMapper userStockSubscribeMapper;
+
+    @Autowired
+    IUserPositionService iUserPositionService;
+
+    @Autowired
+    StockSubscribeMapper stockSubscribeMapper;
+
+    @Autowired
+    UserMapper userMapper;
+
+    private final Lock ballotLock = new ReentrantLock();
+
+    @Scheduled(cron = "0 0/10 * * * ?")
+    public void ballot() {
+        if (ballotLock.tryLock()) {
+            try {
+                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));
+                    //订单转持仓
+                    userStockSubscribes.forEach(f -> {
+                        iUserPositionService.newStockToPosition(f.getId());//转持仓
+                        f.setStatus(5);
+                        userStockSubscribeMapper.updateById(f);
+                    });
+                }
+                log.info("新股上市转持仓定时任务--------->结束");
+            } catch (Exception e) {
+                log.error("新股上市转持仓定时任务发生异常", e);
+            } finally {
+                ballotLock.unlock();
+            }
+        } else {
+            log.info("新股上市转持仓定时任务--------->上次任务还未执行完成,本次任务忽略");
+        }
+    }
+
+}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 424bb3d..7179edc 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -17,7 +17,7 @@
 ftp.user=ftp_stock
 ftp.pass=123456
 ftp.address =/www/wwwroot/ftp_stock/
-ftp.server.http.prefix=https://img.marwadi.online/
+ftp.server.http.prefix=https://img.essencefunds.com/
 
 redis1.ip=localhost
 redis1.port=6379

--
Gitblit v1.9.3