From 64bc81d5f7bd99b470422b329aaca2182b79531c Mon Sep 17 00:00:00 2001
From: dd <gitluke@outlook.com>
Date: Mon, 01 Jun 2026 09:11:45 +0800
Subject: [PATCH] 1
---
src/main/java/com/nq/utils/stock/sina/SinaStockApi.java | 102 +++++++++++++++++++++++++++-----------------------
1 files changed, 55 insertions(+), 47 deletions(-)
diff --git a/src/main/java/com/nq/utils/stock/sina/SinaStockApi.java b/src/main/java/com/nq/utils/stock/sina/SinaStockApi.java
index 8ed4485..9364539 100644
--- a/src/main/java/com/nq/utils/stock/sina/SinaStockApi.java
+++ b/src/main/java/com/nq/utils/stock/sina/SinaStockApi.java
@@ -37,17 +37,25 @@
public static String getSinaStock(String stockGid) {
String sina_result = "";
try {
-// System.out.println(sina_url + stockGid);
-// sina_result = HttpClientRequest.doGet(sina_url + stockGid);
-// System.out.println("请求返回:"+sina_result);
System.out.println(PropertiesUtil.getProperty("sina.single.stock.proxy.url") + stockGid);
sina_result = HttpClientRequest.doGet(PropertiesUtil.getProperty("sina.single.stock.proxy.url") + stockGid);
- System.out.println("请求返回:"+sina_result);
-// sina_result = "var hq_str_sz300270=\"中威电子,0.000,11.710,0.000,0.000,0.000,0.000,0.000,0,0.000,0,0.000,0,0.000,0,0.000,0,0.000,0,0.000,0,0.000,0,0.000,0,0.000,0,0.000,0,0.000,2025-12-03,09:10:06,00\";";
+ System.out.println("请求返回:" + sina_result);
} catch (Exception e) {
- log.error("获取股票行情出错,错误信息 = {}", e);
+ log.error("获取股票行情出错,gid={},错误信息 = {}", stockGid, e);
}
- return sina_result.substring(sina_result.indexOf("=") + 2);
+ if (StringUtils.isBlank(sina_result) || !sina_result.contains("=")) {
+ log.warn("新浪行情返回为空或格式异常, gid={}, raw={}", stockGid, StringUtils.abbreviate(sina_result, 200));
+ return "";
+ }
+ String body = sina_result.substring(sina_result.indexOf("=") + 2);
+ return body.replace("\"", "").replace(";", "").trim();
+ }
+
+ private static String hqField(String[] hqarr, int index) {
+ if (hqarr == null || index < 0 || index >= hqarr.length) {
+ return "0";
+ }
+ return StringUtils.defaultIfBlank(hqarr[index], "0");
}
@@ -198,57 +206,57 @@
public static StockVO assembleStockVO(String sinaResult) {
StockVO stockVO = new StockVO();
-
+ if (StringUtils.isBlank(sinaResult)) {
+ return stockVO;
+ }
String[] hqarr = sinaResult.split(",");
+ if (hqarr.length < 4) {
+ log.warn("新浪行情字段不足,无法解析,length={}, raw={}", hqarr.length, StringUtils.abbreviate(sinaResult, 200));
+ return stockVO;
+ }
- stockVO.setName(hqarr[0]);
-
- stockVO.setNowPrice(hqarr[3]);
+ stockVO.setName(hqField(hqarr, 0));
+ stockVO.setNowPrice(hqField(hqarr, 3));
BigDecimal chang_rate = new BigDecimal("0");
- if ((new BigDecimal(hqarr[2])).compareTo(new BigDecimal("0")) != 0 && new BigDecimal(hqarr[3]).compareTo(new BigDecimal("0")) != 0) {
-
- chang_rate = (new BigDecimal(hqarr[3])).subtract(new BigDecimal(hqarr[2]));
-
- chang_rate = chang_rate.multiply(new BigDecimal("100")).divide(new BigDecimal(hqarr[2]), 2, RoundingMode.HALF_UP);
+ BigDecimal preclose = new BigDecimal(hqField(hqarr, 2));
+ BigDecimal now = new BigDecimal(hqField(hqarr, 3));
+ if (preclose.compareTo(BigDecimal.ZERO) != 0 && now.compareTo(BigDecimal.ZERO) != 0) {
+ chang_rate = now.subtract(preclose);
+ chang_rate = chang_rate.multiply(new BigDecimal("100")).divide(preclose, 2, RoundingMode.HALF_UP);
}
stockVO.setHcrate(chang_rate);
- stockVO.setToday_max(hqarr[4]);
+ stockVO.setToday_max(hqField(hqarr, 4));
+ stockVO.setToday_min(hqField(hqarr, 5));
+ stockVO.setBusiness_amount(hqField(hqarr, 8));
+ stockVO.setBusiness_balance(hqField(hqarr, 9));
+ stockVO.setPreclose_px(hqField(hqarr, 2));
+ stockVO.setOpen_px(hqField(hqarr, 1));
- stockVO.setToday_min(hqarr[5]);
+ stockVO.setBuy1(hqField(hqarr, 6));
+ stockVO.setBuy2(hqField(hqarr, 13));
+ stockVO.setBuy3(hqField(hqarr, 15));
+ stockVO.setBuy4(hqField(hqarr, 17));
+ stockVO.setBuy5(hqField(hqarr, 19));
- stockVO.setBusiness_amount(hqarr[8]);
+ stockVO.setSell1(hqField(hqarr, 7));
+ stockVO.setSell2(hqField(hqarr, 23));
+ stockVO.setSell3(hqField(hqarr, 25));
+ stockVO.setSell4(hqField(hqarr, 27));
+ stockVO.setSell5(hqField(hqarr, 29));
- stockVO.setBusiness_balance(hqarr[9]);
+ stockVO.setBuy1_num(hqField(hqarr, 10));
+ stockVO.setBuy2_num(hqField(hqarr, 12));
+ stockVO.setBuy3_num(hqField(hqarr, 14));
+ stockVO.setBuy4_num(hqField(hqarr, 16));
+ stockVO.setBuy5_num(hqField(hqarr, 18));
- stockVO.setPreclose_px(hqarr[2]);
-
- stockVO.setOpen_px(hqarr[1]);
-
- stockVO.setBuy1(hqarr[6]);
- stockVO.setBuy2(hqarr[13]);
- stockVO.setBuy3(hqarr[15]);
- stockVO.setBuy4(hqarr[17]);
- stockVO.setBuy5(hqarr[19]);
-
- stockVO.setSell1(hqarr[7]);
- stockVO.setSell2(hqarr[23]);
- stockVO.setSell3(hqarr[25]);
- stockVO.setSell4(hqarr[27]);
- stockVO.setSell5(hqarr[29]);
-
- stockVO.setBuy1_num(hqarr[10]);
- stockVO.setBuy2_num(hqarr[12]);
- stockVO.setBuy3_num(hqarr[14]);
- stockVO.setBuy4_num(hqarr[16]);
- stockVO.setBuy5_num(hqarr[18]);
-
- stockVO.setSell1_num(hqarr[20]);
- stockVO.setSell2_num(hqarr[22]);
- stockVO.setSell3_num(hqarr[24]);
- stockVO.setSell4_num(hqarr[26]);
- stockVO.setSell5_num(hqarr[28]);
+ stockVO.setSell1_num(hqField(hqarr, 20));
+ stockVO.setSell2_num(hqField(hqarr, 22));
+ stockVO.setSell3_num(hqField(hqarr, 24));
+ stockVO.setSell4_num(hqField(hqarr, 26));
+ stockVO.setSell5_num(hqField(hqarr, 28));
return stockVO;
}
--
Gitblit v1.9.3