From 846ff7c7570ef124b10e48d6816955a1bbc02db5 Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Thu, 23 May 2024 01:33:36 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/zyqs-0502' into zyqs-0502
---
src/main/java/com/nq/service/impl/PriceServicesImpl.java | 126 ++++++++++++++++++++++++++++++++++++++---
1 files changed, 116 insertions(+), 10 deletions(-)
diff --git a/src/main/java/com/nq/service/impl/PriceServicesImpl.java b/src/main/java/com/nq/service/impl/PriceServicesImpl.java
index 56f1aad..65a8e8c 100644
--- a/src/main/java/com/nq/service/impl/PriceServicesImpl.java
+++ b/src/main/java/com/nq/service/impl/PriceServicesImpl.java
@@ -1,18 +1,30 @@
package com.nq.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.gson.Gson;
+import com.nq.dao.StockDzMapper;
import com.nq.dao.StockMapper;
import com.nq.dao.StockSettingMapper;
+import com.nq.enums.EStockType;
import com.nq.pojo.Stock;
+import com.nq.pojo.StockDz;
import com.nq.pojo.StockRealTimeBean;
import com.nq.pojo.StockSetting;
import com.nq.service.IPriceServices;
+import com.nq.utils.PropertiesUtil;
import com.nq.utils.redis.RedisKeyUtil;
import com.nq.utils.timeutil.TimeUtil;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
import java.math.BigDecimal;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.Map;
@Service
@@ -27,22 +39,116 @@
@Resource
StockMapper stockMapper;
+ @Resource
+ StockDzMapper stockDZMapper;
+
@Override
public BigDecimal getNowPrice(String stockCode) {
Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code",stockCode));
StockSetting stockSetting = stockSettingMapper.selectOne(new QueryWrapper<StockSetting>().eq("stock_code",stockCode));
- if(stockSetting != null){
- if(TimeUtil.isTradingHour(stockSetting.getStartTime(),stockSetting.getEndTime())){
- if(stockSetting.getType().equals("0")){
- return new BigDecimal(stockSetting.getPrice());
- }else{
- StockRealTimeBean stockRealTimeBean = RedisKeyUtil.getCacheRealTimeStock(stock);
- return new BigDecimal(stockRealTimeBean.getLast()).multiply(new BigDecimal(stockSetting.getPrice()));
- }
- }
- }
+// if(stockSetting != null){
+// if(TimeUtil.isTradingHour(stockSetting.getStartTime(),stockSetting.getEndTime())){
+// if(stockSetting.getType().equals("0")){
+// return new BigDecimal(stockSetting.getPrice());
+// }else{
+// StockRealTimeBean stockRealTimeBean = RedisKeyUtil.getCacheRealTimeStock(stock);
+// return new BigDecimal(stockRealTimeBean.getLast()).multiply(new BigDecimal(stockSetting.getPrice()));
+// }
+// }
+// }
StockRealTimeBean stockRealTimeBean = RedisKeyUtil.getCacheRealTimeStock(stock);
return new BigDecimal(stockRealTimeBean.getLast());
}
+
+ public BigDecimal getBuyNowPrice(String stockCode, EStockType eStockType) {
+ Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code", stockCode));
+ StockSetting stockSetting = stockSettingMapper.selectOne(new QueryWrapper<StockSetting>().eq("stock_code", stockCode));
+
+ if (stockSetting != null) {
+ if (TimeUtil.isTradingHour(stockSetting.getStartTime(), stockSetting.getEndTime())) {
+ if (stockSetting.getType().equals("0")) {
+ return new BigDecimal(stockSetting.getPrice());
+ } else {
+ String s = doGet(stock.getStockCode(), eStockType);
+ if (s != null) {
+ Map<String, Object> stringObjectMap = jsonToMap(s);
+ return new BigDecimal(stringObjectMap.get("last").toString()).multiply(new BigDecimal(stockSetting.getPrice()));
+ }
+ }
+ }
+ }
+
+ String s = doGet(stock.getStockCode(), eStockType);
+ if (s != null) {
+ Map<String, Object> stringObjectMap = jsonToMap(s);
+ return new BigDecimal(stringObjectMap.get("last").toString());
+ }
+
+ return BigDecimal.ZERO;
+ }
+
+ public static Map<String, Object> jsonToMap(String json) {
+ ObjectMapper objectMapper = new ObjectMapper();
+ try {
+ Object[] array = objectMapper.readValue(json, Object[].class);
+ Gson gson = new Gson();
+ String s = gson.toJson(array[0]);
+ Map<String, Object> map = objectMapper.readValue(s, Map.class);
+ return map;
+ } catch (JsonProcessingException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public String doGet(String pid, EStockType eStockType) {
+ String apiUrl = "";
+ if ("IN".equals(eStockType.getCode())) {
+ String inNowHttpApi = PropertiesUtil.getProperty("IN_NOW_HTTP_API");
+ String inNowKey = PropertiesUtil.getProperty("IN_NOW_KEY");
+ apiUrl = inNowHttpApi + "stock?pid=" + pid + "&key=" + inNowKey;
+ } else {
+ apiUrl = eStockType.getStockUrl() + "stock?pid=" + pid + "&key=" + eStockType.getStockKey();
+ }
+
+ try {
+ URL url = new URL(apiUrl);
+ HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+ connection.setRequestMethod("GET");
+
+ BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
+ String inputLine;
+ StringBuffer response = new StringBuffer();
+
+ while ((inputLine = in.readLine()) != null) {
+ response.append(inputLine);
+ }
+ in.close();
+ return response.toString();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ @Override
+ public BigDecimal getNowPrice(String stockCode, String stockType) {
+ EStockType eStockType = EStockType.getEStockTypeByCode(stockType);
+ BigDecimal nowPrice = getBuyNowPrice(stockCode, eStockType);
+
+ if (!stockType.equals("DZ")) {
+ return nowPrice;
+ }
+
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ queryWrapper.eq("stock_code", stockCode);
+ StockDz stockDz = stockDZMapper.selectOne(queryWrapper);
+
+ if (stockDz == null) {
+ return nowPrice;
+ }
+
+ return nowPrice.multiply(stockDz.getDiscount());
+ }
+
}
--
Gitblit v1.9.3