| | |
| | | import com.nq.utils.stock.qq.QqStockApi; |
| | | import com.nq.utils.stock.sina.StockApi; |
| | | import com.nq.vo.stock.*; |
| | | import com.nq.vo.stock.ai.StockAiOrderVO; |
| | | import com.nq.vo.stock.k.MinDataVO; |
| | | import com.nq.vo.stock.k.echarts.EchartsDataVO; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.*; |
| | | import java.util.function.Function; |
| | | import java.util.stream.Collectors; |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | |
| | | // stockListVO.setNowPrice(stockListVO.getNowPrice()); |
| | | // } |
| | | // } |
| | | |
| | | stockAdminListVO.setNowPrice(stockListVO.getNowPrice()); |
| | | stockAdminListVO.setHcrate(stockListVO.getHcrate()); |
| | | if (stockListVO != null) { |
| | | stockAdminListVO.setNowPrice(stockListVO.getNowPrice()); |
| | | stockAdminListVO.setHcrate(stockListVO.getHcrate()); |
| | | } |
| | | stockAdminListVO.setSpreadRate(stock.getSpreadRate()); |
| | | ServerResponse serverResponse = selectRateByDaysAndStockCode(stock.getStockCode(), 3); |
| | | BigDecimal day3Rate = new BigDecimal("0"); |
| | |
| | | List<SiteNews> newsList = this.siteNewsMapper.getTopNewsList(pageSize); |
| | | |
| | | String usCodeList = PropertiesUtil.getProperty("us_home_indices_code"); |
| | | String mxCodeList = PropertiesUtil.getProperty("mx_home_indices_code"); |
| | | String hkCodeList = PropertiesUtil.getProperty("hk_home_indices_code"); |
| | | String inCodeList = PropertiesUtil.getProperty("in_home_indices_code"); |
| | | String twCodeList = PropertiesUtil.getProperty("tw_home_indices_code"); |
| | | |
| | | List<String> usStockCodeList = Arrays.asList(usCodeList.split(",")); |
| | | List<String> mxStockCodeList = Arrays.asList(mxCodeList.split(",")); |
| | | List<String> hkStockCodeList = Arrays.asList(hkCodeList.split(",")); |
| | | List<String> inStockCodeList = Arrays.asList(inCodeList.split(",")); |
| | | List<String> twStockCodeList = Arrays.asList(twCodeList.split(",")); |
| | | |
| | | List<DataStockBean> usDataStockBeans = Lists.newArrayList(); |
| | | List<DataStockBean> mxDataStockBeans = Lists.newArrayList(); |
| | | for (int i = 0; i < usStockCodeList.size(); i++) { |
| | | String stockCode = usStockCodeList.get(i); |
| | | String stockType = EStockType.US.getCode(); |
| | | DataStockBean cacheBaseStock = RedisKeyUtil.getCacheBaseStock(stockType, stockCode); |
| | | // 获取K线数据 |
| | | Object kData = RedisKeyUtil.getCaCheStockKData(stockType, stockCode); |
| | | if (kData == null) { |
| | | //重新获取并缓存redis |
| | | kData = getKData(stockCode, "D", stockType); |
| | | RedisKeyUtil.setCaCheStockKData(stockType, stockCode, kData); |
| | | } |
| | | Gson gson = new Gson(); |
| | | List<kData> dataList = gson.fromJson(kData.toString(), new TypeToken<List<kData>>(){}.getType()); |
| | | cacheBaseStock.setKData(dataList); |
| | | cacheBaseStock.setStockType(stockType); |
| | | usDataStockBeans.add(cacheBaseStock); |
| | | } |
| | | for (int i = 0; i < mxStockCodeList.size(); i++) { |
| | | String stockCode = mxStockCodeList.get(i); |
| | | String stockType = EStockType.MX.getCode(); |
| | | DataStockBean cacheBaseStock = RedisKeyUtil.getCacheBaseStock(stockType, stockCode); |
| | | // 获取K线数据 |
| | | Object kData = RedisKeyUtil.getCaCheStockKData(stockType, stockCode); |
| | | if (kData == null) { |
| | | //重新获取并缓存redis |
| | | kData = getKData(stockCode, "D", stockType); |
| | | RedisKeyUtil.setCaCheStockKData(stockType, stockCode, kData); |
| | | } |
| | | Gson gson = new Gson(); |
| | | List<kData> dataList = gson.fromJson(kData.toString(), new TypeToken<List<kData>>(){}.getType()); |
| | | cacheBaseStock.setKData(dataList); |
| | | cacheBaseStock.setStockType(stockType); |
| | | mxDataStockBeans.add(cacheBaseStock); |
| | | } |
| | | List<DataStockBean> hkDataStockBeans = Lists.newArrayList(); |
| | | List<DataStockBean> inDataStockBeans = Lists.newArrayList(); |
| | | List<DataStockBean> twDataStockBeans = Lists.newArrayList(); |
| | | // 创建Gson对象(全局复用,避免重复创建) |
| | | Gson gson = new Gson(); |
| | | |
| | | // 统一处理各地区股票数据 |
| | | processStockData(usStockCodeList, EStockType.US.getCode(), usDataStockBeans, gson); |
| | | processStockData(hkStockCodeList, EStockType.HK.getCode(), hkDataStockBeans, gson); |
| | | processStockData(inStockCodeList, EStockType.IN.getCode(), inDataStockBeans, gson); |
| | | processStockData(twStockCodeList, EStockType.TW.getCode(), twDataStockBeans, gson); |
| | | |
| | | // 组装返回结果 |
| | | Map<String, Object> resultMap = new HashMap<>(); |
| | | resultMap.put("newsList", newsList); //新闻列表 |
| | | resultMap.put("usDataStockBeans", usDataStockBeans);//美国指数 |
| | | resultMap.put("mxDataStockBeans", mxDataStockBeans);//墨西哥指数 |
| | | resultMap.put("hkDataStockBeans", hkDataStockBeans);//香港指数 |
| | | resultMap.put("inDataStockBeans", inDataStockBeans);//印度指数 |
| | | resultMap.put("twDataStockBeans", twDataStockBeans);//台湾指数 |
| | | return ServerResponse.createBySuccess(resultMap); |
| | | } catch (Exception e){ |
| | | e.printStackTrace(); |
| | |
| | | return ServerResponse.createByError(); |
| | | } |
| | | |
| | | // 提取的通用处理方法 |
| | | private void processStockData(List<String> stockCodeList, String stockType, |
| | | List<DataStockBean> targetList, Gson gson) { |
| | | for (String stockCode : stockCodeList) { // 增强for循环简化代码 |
| | | // 获取基础股票数据 |
| | | DataStockBean cacheBaseStock = RedisKeyUtil.getCacheBaseStock(stockType, stockCode); |
| | | if (cacheBaseStock == null) { // 增加空指针防护(可选,根据实际业务) |
| | | continue; |
| | | } |
| | | |
| | | // 获取K线数据(缓存优先) |
| | | Object kData = RedisKeyUtil.getCaCheStockKData(stockType, stockCode); |
| | | if (kData == null) { |
| | | // 缓存未命中时重新获取并缓存 |
| | | kData = getKData(stockCode, "D", stockType); |
| | | RedisKeyUtil.setCaCheStockKData(stockType, stockCode, kData); |
| | | } |
| | | |
| | | // 解析K线数据并设置到对象 |
| | | List<kData> dataList = gson.fromJson(kData.toString(), new TypeToken<List<kData>>(){}.getType()); |
| | | cacheBaseStock.setKData(dataList); |
| | | cacheBaseStock.setStockType(stockType); |
| | | |
| | | // 添加到目标集合 |
| | | targetList.add(cacheBaseStock); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public ServerResponse getIndicesList(String stockType) { |
| | | try { |
| | | String codeList; |
| | | if(stockType.equals(EStockType.MX.getCode()) || stockType.equals("MX")) { |
| | | codeList = PropertiesUtil.getProperty("mx_home_indices_code"); |
| | | } else { |
| | | if(stockType.equals(EStockType.US.getCode())) { |
| | | codeList = PropertiesUtil.getProperty("us_home_indices_code"); |
| | | } |
| | | } else if(stockType.equals(EStockType.HK.getCode())) { |
| | | codeList = PropertiesUtil.getProperty("hk_home_indices_code"); |
| | | } else if(stockType.equals(EStockType.IN.getCode())) { |
| | | codeList = PropertiesUtil.getProperty("in_home_indices_code"); |
| | | } else if(stockType.equals(EStockType.TW.getCode())) { |
| | | codeList = PropertiesUtil.getProperty("tw_home_indices_code"); |
| | | } else |
| | | codeList = PropertiesUtil.getProperty("us_home_indices_code"); |
| | | |
| | | List<String> stockCodeList = Arrays.asList(codeList.split(",")); |
| | | |
| | | Map<Integer, Object> resultMap = new HashMap<>(); |