1
dd
2025-11-04 7f63cc81ceeb02d9fd760709cea7abbce98bd346
1
7 files modified
83 ■■■■ changed files
src/main/java/com/nq/pojo/StockRealTimeBean.java 1 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/PriceServicesImpl.java 23 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/StockServiceImpl.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/TradingHourServiceImpl.java 4 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/utils/ApplicationContextRegisterUtil.java 16 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/utils/stock/sina/StockApi.java 32 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/ws/WebsocketRunClient.java 1 ●●●● patch | view | raw | blame | history
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;
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);
            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));
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) {
        // 启动分页
src/main/java/com/nq/service/impl/TradingHourServiceImpl.java
@@ -84,10 +84,7 @@
    @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();
@@ -95,7 +92,6 @@
                DateTime endTime = DateUtil.parseDateTime(stockSetting.getEndTime());
                if(newDate.after(startTime) && newDate.before(endTime)){
                    return true;
                }
            }
        }
        return false;
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;
    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);
    }
}
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()+"%");
                }
                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());
    }
    /**
     * 对接印度股票
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;