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