1
dd
2025-11-04 7f63cc81ceeb02d9fd760709cea7abbce98bd346
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) {
@@ -39,12 +53,20 @@
                StockRealTimeBean realTimeStock = RedisKeyUtil.getCacheRealTimeStock(stock);
                StockListVO stockListVO = new StockListVO();
                stockListVO.setHcrate(new BigDecimal(realTimeStock.getPcp()));
                stockListVO.setHcrateP(realTimeStock.getPcp()+"%");
                if(realTimeStock.getPcp().contains("-")){
                    stockListVO.setColor(0);
                }else{
                    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());
@@ -55,7 +77,7 @@
                stockListVO.setName(stock.getStockName());
                stockListVO.setCode(stock.getStockCode());
                stockListVO.setSpell(stock.getStockSpell());
                stockListVO.setGid(stock.getStockGid().toUpperCase());
                stockListVO.setGid(stock.getStockGid());
                stockListVO.setStock_plate(stock.getStockPlate());
                stockListVO.setStock_type(stock.getStockType());
                stockListVOs.add(stockListVO);
@@ -69,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());
    }
    /**
     * 对接印度股票
@@ -81,7 +115,15 @@
        StockListVO stockListVO = new StockListVO();
        try {
            StockRealTimeBean realTimeStock = RedisKeyUtil.getCacheRealTimeStock(stock);
            stockListVO.setHcrate(new BigDecimal(realTimeStock.getPcp().replace("%", "")));
            stockListVO.setHcrate(new BigDecimal(realTimeStock.getPcp()));
            stockListVO.setHcrateP(realTimeStock.getPcp()+"%");
            if(realTimeStock.getPcp().contains("-")){
                stockListVO.setColor(0);
            }else{
                stockListVO.setColor(1);
            }
            stockListVO.setNowPrice(realTimeStock.getLast());
            stockListVO.setToday_max(realTimeStock.getHigh());
            stockListVO.setToday_min(realTimeStock.getLow());
@@ -100,8 +142,6 @@
            return null;
        }
        return stockListVO;
    }
@@ -113,17 +153,7 @@
        }
        try {
            StockRealTimeBean qhBean = RedisKeyUtil.getCacheRealTimeStock(stock);
            if(!qhBean.getPcp().endsWith("%")){
                stockListVO.setHcrate(qhBean.getPcp()+"%");
            }else{
                stockListVO.setHcrate(qhBean.getPcp());
            }
            if(qhBean.getPcp().startsWith("-")){
                stockListVO.setColor("rgb(208, 75, 100)");
            }else{
                stockListVO.setColor("rgb(3, 173, 143)");
            }
            stockListVO.setHcrate(qhBean.getPcp());
            stockListVO.setNowPrice(qhBean.getLast());
            stockListVO.setToday_max(qhBean.getHigh());
            stockListVO.setToday_min(qhBean.getLow());