From 7f63cc81ceeb02d9fd760709cea7abbce98bd346 Mon Sep 17 00:00:00 2001
From: dd <gitluke@outlook.com>
Date: Tue, 04 Nov 2025 00:47:15 +0800
Subject: [PATCH] 1

---
 src/main/java/com/nq/utils/ApplicationContextRegisterUtil.java |   18 +++++----
 src/main/java/com/nq/ws/WebsocketRunClient.java                |    1 
 src/main/java/com/nq/service/impl/TradingHourServiceImpl.java  |   20 ++++------
 src/main/java/com/nq/utils/stock/sina/StockApi.java            |   34 ++++++++++++++++
 src/main/java/com/nq/service/impl/StockServiceImpl.java        |    6 +++
 src/main/java/com/nq/pojo/StockRealTimeBean.java               |    1 
 src/main/java/com/nq/service/impl/PriceServicesImpl.java       |   25 ++++++++++++
 7 files changed, 82 insertions(+), 23 deletions(-)

diff --git a/src/main/java/com/nq/pojo/StockRealTimeBean.java b/src/main/java/com/nq/pojo/StockRealTimeBean.java
index 982359a..b35dd77 100644
--- a/src/main/java/com/nq/pojo/StockRealTimeBean.java
+++ b/src/main/java/com/nq/pojo/StockRealTimeBean.java
@@ -21,6 +21,7 @@
     private String pc;
     private String pcp;
     private String pc_col;
+    private String PrevClose;
     private String turnover_numeric;
     private String time;
     private String timestamp;
diff --git a/src/main/java/com/nq/service/impl/PriceServicesImpl.java b/src/main/java/com/nq/service/impl/PriceServicesImpl.java
index 4273c99..1875994 100644
--- a/src/main/java/com/nq/service/impl/PriceServicesImpl.java
+++ b/src/main/java/com/nq/service/impl/PriceServicesImpl.java
@@ -9,6 +9,7 @@
 import com.nq.dao.StockDzMapper;
 import com.nq.dao.StockMapper;
 import com.nq.dao.StockSettingMapper;
+import com.nq.dao.StockTimeSettingMapper;
 import com.nq.enums.EConfigKey;
 import com.nq.enums.EStockType;
 import com.nq.pojo.*;
@@ -29,6 +30,7 @@
 import  java.io.InputStreamReader;
 import  java.net.HttpURLConnection;
 import  java.net.URL;
+import java.time.LocalDate;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
@@ -51,6 +53,9 @@
 
     @Resource
     StockDzMapper stockDZMapper;
+
+    @Resource
+    StockTimeSettingMapper stockTimeSettingMapper;
 
     @Override
     public BigDecimal getNowPrice(String stockCode) {
@@ -80,11 +85,29 @@
         String s = doPost(stock.getStockCode());
         if(null != s) {
             Map<String, Object> stringObjectMap = jsonToMap(s);
-            return  new BigDecimal(stringObjectMap.get("Last").toString());
+            Boolean b = timeCheck();
+            if(b){
+                return  new BigDecimal(stringObjectMap.get("Last").toString());
+            }else{
+                return  new BigDecimal(stringObjectMap.get("PrevClose").toString());
+            }
+
         }
         return BigDecimal.ZERO;
     }
 
+    public  Boolean timeCheck() {
+        StockTimeSetting stockTimeSetting = stockTimeSettingMapper.selectOne(new QueryWrapper<StockTimeSetting>().eq("accets_type","US"));
+
+        if(stockTimeSetting == null){
+            return  false;
+        }
+        if(!stockTimeSetting.getWeekDay().contains(String.valueOf(LocalDate.now().getDayOfWeek().getValue()))){
+            return false;
+        }
+        return TimeUtil.isTradingHour(stockTimeSetting.getAmStartTime(),stockTimeSetting.getAmEndTime(),stockTimeSetting.getPmStartTime(),stockTimeSetting.getPmEndTime());
+    }
+
     @Override
     public Map<String, Object> getNewStock(String stockCode) {
         Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code",stockCode));
diff --git a/src/main/java/com/nq/service/impl/StockServiceImpl.java b/src/main/java/com/nq/service/impl/StockServiceImpl.java
index 07f14c9..59c7528 100644
--- a/src/main/java/com/nq/service/impl/StockServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/StockServiceImpl.java
@@ -26,6 +26,7 @@
 import com.nq.utils.stock.pinyin.GetPyByChinese;
 import com.nq.utils.stock.qq.QqStockApi;
 import com.nq.utils.stock.sina.StockApi;
+import com.nq.utils.timeutil.TimeUtil;
 import com.nq.utils.translate.GoogleTranslateUtil;
 import com.nq.vo.stock.*;
 import com.nq.vo.stock.k.MinDataVO;
@@ -38,6 +39,7 @@
 import java.net.HttpURLConnection;
 import java.net.URL;
 import java.text.SimpleDateFormat;
+import java.time.LocalDate;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
@@ -99,6 +101,7 @@
     IPriceServices iPriceServices;
     @Autowired
     ITradingHourService tradingHourService;
+
 
 
     public ServerResponse getMarket() {
@@ -188,6 +191,9 @@
 //        return ServerResponse.createBySuccess(pageInfo);
 //    }
 
+
+
+
     @Override
     public ServerResponse getStockByType(int pageNum, int pageSize, String orderBy, String keyWords, String stockType, HttpServletRequest request) {
         // 启动分页
diff --git a/src/main/java/com/nq/service/impl/TradingHourServiceImpl.java b/src/main/java/com/nq/service/impl/TradingHourServiceImpl.java
index c66e8ff..2c349dc 100644
--- a/src/main/java/com/nq/service/impl/TradingHourServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/TradingHourServiceImpl.java
@@ -84,21 +84,17 @@
 
     @Override
     public Boolean isPreMarket(String stockCode) {
-        // 查询该股票的特定时间设置
         StockSetting stockSetting = stockSettingMapper.selectOne(new QueryWrapper<StockSetting>().eq("stock_code",stockCode));
-        boolean res = timeCheckNoPreMarket();
-        if(!res){
-            if(stockSetting!= null){
-                // 说明进入盘前交易或者盘后交易时间
-                Date newDate = new Date();
-                DateTime startTime = DateUtil.parseDateTime(stockSetting.getStartTime());
-                DateTime endTime = DateUtil.parseDateTime(stockSetting.getEndTime());
-                if(newDate.after(startTime) && newDate.before(endTime)){
-                    return true;
-                }
+        if(stockSetting!= null){
+            // 说明进入盘前交易或者盘后交易时间
+            Date newDate = new Date();
+            DateTime startTime = DateUtil.parseDateTime(stockSetting.getStartTime());
+            DateTime endTime = DateUtil.parseDateTime(stockSetting.getEndTime());
+            if(newDate.after(startTime) && newDate.before(endTime)){
+                return  true;
             }
         }
-        return false;
+        return  false;
     }
 
     public Boolean timeCheckNoPreMarket() {
diff --git a/src/main/java/com/nq/utils/ApplicationContextRegisterUtil.java b/src/main/java/com/nq/utils/ApplicationContextRegisterUtil.java
index 0fa7493..07dd1ba 100644
--- a/src/main/java/com/nq/utils/ApplicationContextRegisterUtil.java
+++ b/src/main/java/com/nq/utils/ApplicationContextRegisterUtil.java
@@ -3,20 +3,22 @@
 import org.springframework.beans.BeansException;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContextAware;
-import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Component;
 
 @Component
-@Lazy(false)
-public class ApplicationContextRegisterUtil  implements ApplicationContextAware {
-
-    private static ApplicationContext APPLICATION_CONTEXT;
+public class ApplicationContextRegisterUtil implements ApplicationContextAware {
+    private static ApplicationContext applicationContext;
 
     @Override
     public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
-        APPLICATION_CONTEXT = applicationContext;
+        ApplicationContextRegisterUtil.applicationContext = applicationContext;
     }
-    public static ApplicationContext getApplicationContext() {
-        return APPLICATION_CONTEXT;
+
+    public static <T> T getBean(Class<T> clazz) {
+        return applicationContext.getBean(clazz);
+    }
+
+    public static Object getBean(String name) {
+        return applicationContext.getBean(name);
     }
 }
\ No newline at end of file
diff --git a/src/main/java/com/nq/utils/stock/sina/StockApi.java b/src/main/java/com/nq/utils/stock/sina/StockApi.java
index 369dc63..34ddbc8 100644
--- a/src/main/java/com/nq/utils/stock/sina/StockApi.java
+++ b/src/main/java/com/nq/utils/stock/sina/StockApi.java
@@ -1,14 +1,20 @@
 package com.nq.utils.stock.sina;
 
 
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.nq.common.ServerResponse;
+import com.nq.dao.StockTimeSettingMapper;
 import com.nq.pojo.*;
+import com.nq.utils.ApplicationContextRegisterUtil;
 import com.nq.utils.http.HttpClientRequest;
 import com.nq.utils.PropertiesUtil;
 import com.nq.utils.redis.JsonUtil;
 import com.nq.utils.redis.RedisKeyUtil;
 import com.nq.utils.stock.sina.vo.SinaStockMinData;
+import com.nq.utils.timeutil.TimeUtil;
 import com.nq.vo.stock.StockListVO;
 import com.nq.vo.stock.StockUsVO;
 import com.nq.vo.stock.StockVO;
@@ -16,17 +22,25 @@
 import com.nq.vo.stock.k.echarts.EchartsDataVO;
 
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.util.*;
 
 import org.apache.commons.lang3.StringUtils;
 import org.codehaus.jackson.type.TypeReference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.context.ApplicationContext;
+import org.springframework.stereotype.Component;
 
+import javax.annotation.Resource;
 
 public class StockApi {
     public static final String sina_url = PropertiesUtil.getProperty("sina.single.stock.url");
     private static final Logger log = LoggerFactory.getLogger(StockApi.class);
+
+    private static StockTimeSettingMapper getStockTimeSettingMapper() {
+        return ApplicationContextRegisterUtil.getBean(StockTimeSettingMapper.class);
+    }
 
     public static List<StockListVO> getStockReailTimes(List<Stock> stocks) {
         if (stocks.size() == 0) {
@@ -46,7 +60,13 @@
                     stockListVO.setColor(1);
                     stockListVO.setHcrateP(realTimeStock.getPcp()+"%");
                 }
-                stockListVO.setNowPrice(realTimeStock.getLast());
+
+                Boolean b = timeCheck(stock.getStockCode());
+                if(b){
+                    stockListVO.setNowPrice(realTimeStock.getLast());
+                }else{
+                    stockListVO.setNowPrice(realTimeStock.getPrevClose());
+                }
                 stockListVO.setToday_max(realTimeStock.getHigh());
                 stockListVO.setToday_min(realTimeStock.getLow());
                 stockListVO.setOpen_px(realTimeStock.getBid());
@@ -71,6 +91,18 @@
         return stockListVOs;
     }
 
+    public static Boolean timeCheck(String stockCode) {
+        StockTimeSettingMapper stockTimeSettingMapper = getStockTimeSettingMapper();
+        StockTimeSetting stockTimeSetting = stockTimeSettingMapper.selectOne(new QueryWrapper<StockTimeSetting>().eq("accets_type","US"));
+
+        if(stockTimeSetting == null){
+            return  false;
+        }
+        if(!stockTimeSetting.getWeekDay().contains(String.valueOf(LocalDate.now().getDayOfWeek().getValue()))){
+            return false;
+        }
+        return TimeUtil.isTradingHour(stockTimeSetting.getAmStartTime(),stockTimeSetting.getAmEndTime(),stockTimeSetting.getPmStartTime(),stockTimeSetting.getPmEndTime());
+    }
 
     /**
      * 对接印度股票
diff --git a/src/main/java/com/nq/ws/WebsocketRunClient.java b/src/main/java/com/nq/ws/WebsocketRunClient.java
index 8b2bd21..e5c7ba8 100644
--- a/src/main/java/com/nq/ws/WebsocketRunClient.java
+++ b/src/main/java/com/nq/ws/WebsocketRunClient.java
@@ -8,7 +8,6 @@
 import com.nq.pojo.StockRealTimeBean;
 import com.nq.service.IMandatoryLiquidationService;
 import com.nq.service.impl.MandatoryLiquidationService;
-import com.nq.utils.ApplicationContextRegisterUtil;
 import com.nq.utils.redis.RedisKeyUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.http.HttpResponse;

--
Gitblit v1.9.3