| | |
| | | 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"); |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | 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; |
| | | } |