| | |
| | | package com.nq.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.fasterxml.jackson.core.JsonProcessingException; |
| | | import com.google.gson.Gson; |
| | | import com.google.gson.reflect.TypeToken; |
| | | import com.nq.dao.StockDzMapper; |
| | | import com.nq.dao.StockMapper; |
| | | import com.nq.dao.StockSettingMapper; |
| | |
| | | import com.nq.pojo.*; |
| | | import com.nq.service.IPriceServices; |
| | | import com.nq.service.IStockConfigServices; |
| | | import com.nq.utils.PropertiesUtil; |
| | | import com.nq.utils.http.HttpClientRequest; |
| | | import com.nq.utils.redis.RedisKeyUtil; |
| | | import com.nq.utils.timeutil.TimeUtil; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.io.*; |
| | | import java.lang.reflect.Type; |
| | | import java.math.BigDecimal; |
| | | import java.io.BufferedReader; |
| | | import java.io.InputStreamReader; |
| | | import java.net.HttpURLConnection; |
| | | import java.net.URL; |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | import com.fasterxml.jackson.databind.ObjectMapper; |
| | | |
| | | @Service |
| | | public class PriceServicesImpl implements IPriceServices { |
| | | |
| | | public class PriceServicesImpl implements IPriceServices { |
| | | |
| | | |
| | | @Resource |
| | |
| | | |
| | | @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())); |
| | | 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 = doPost(stock.getStockCode(),stock.getStockType()); |
| | | if (null != s) { |
| | | Map<String, Object> stringObjectMap = jsonToMap(s); |
| | | if(stock.getStockType().equals("US")){ |
| | | return new BigDecimal(stringObjectMap.get("Last").toString()).multiply(new BigDecimal(stockSetting.getPrice())); |
| | | }else{ |
| | | return new BigDecimal(stringObjectMap.get("last").toString()).multiply(new BigDecimal(stockSetting.getPrice())); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | StockRealTimeBean stockRealTimeBean = RedisKeyUtil.getCacheRealTimeStock(stock); |
| | | return new BigDecimal(stockRealTimeBean.getLast()); |
| | | String s = doPost(stock.getStockCode(),stock.getStockType()); |
| | | if (null != s) { |
| | | Map<String, Object> stringObjectMap = jsonToMap(s); |
| | | if(stock.getStockType().equals("US")){ |
| | | return new BigDecimal(stringObjectMap.get("Last").toString()); |
| | | }else{ |
| | | return new BigDecimal(stringObjectMap.get("last").toString()); |
| | | } |
| | | } |
| | | return BigDecimal.ZERO; |
| | | } |
| | | |
| | | @Override |
| | | public Map<String, Object> getNewStock(String stockCode) { |
| | | Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code", stockCode)); |
| | | String s = doPost(stock.getStockCode(),stock.getStockType()); |
| | | if (null != s) { |
| | | Map<String, Object> stringObjectMap = jsonToMap(s); |
| | | return stringObjectMap; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | 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 doPost(String pid,String stockType) { |
| | | String url; |
| | | if(stockType.equals("JP")){ |
| | | url = PropertiesUtil.getProperty("JP_HTTP_API") + "stock?version=v1&key=" + PropertiesUtil.getProperty("JP_KEY"); |
| | | }else{ |
| | | url = PropertiesUtil.getProperty("US_HTTP_API") + "stock?version=v1&key=" + PropertiesUtil.getProperty("US_KEY"); |
| | | } |
| | | try { |
| | | URL obj = new URL(url); |
| | | HttpURLConnection con = (HttpURLConnection) obj.openConnection(); |
| | | |
| | | con.setRequestMethod("POST"); |
| | | con.setDoOutput(true); |
| | | |
| | | String body = "pid=" + pid; |
| | | OutputStream os = con.getOutputStream(); |
| | | BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8")); |
| | | writer.write(body); |
| | | writer.flush(); |
| | | writer.close(); |
| | | os.close(); |
| | | BufferedReader in = new BufferedReader(new InputStreamReader(con.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) { |
| | | BigDecimal nowPrice = getNowPrice(stockCode); |
| | | 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()); |
| | | BigDecimal nowPrice = getNowPrice(stockCode); |
| | | 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()); |
| | | } |
| | | |
| | | @Override |
| | | public boolean isLimitUpBuy(String stockCode) { |
| | | Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code",stockCode)); |
| | | StockRealTimeBean stockRealTimeBean = RedisKeyUtil.getCacheRealTimeStock(stock); |
| | | Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code", stockCode)); |
| | | StockRealTimeBean stockRealTimeBean = RedisKeyUtil.getCacheRealTimeStock(stock); |
| | | BigDecimal pcp = new BigDecimal(stockRealTimeBean.getPcp()); |
| | | StockConfig stockConfig = iStockConfigServices.queryByKey(EConfigKey.LIMIT_UP_POINT.getCode()); |
| | | if(stockConfig == null){ |
| | | if (stockConfig == null) { |
| | | return true; |
| | | } |
| | | |
| | | |
| | | if(pcp.compareTo(new BigDecimal(0))<0){ |
| | | return true; |
| | | if (pcp.compareTo(new BigDecimal(0)) < 0) { |
| | | return true; |
| | | } |
| | | |
| | | if(new BigDecimal(stockConfig.getCValue()).compareTo(pcp)<0){ |
| | | if (new BigDecimal(stockConfig.getCValue()).compareTo(pcp) <= 0) { |
| | | StockConfig limitConfig = iStockConfigServices.queryByKey(EConfigKey.LIMIT_UP_IS_BUY.getCode()); |
| | | if(limitConfig.getCValue().equals("1")){ |
| | | return true; |
| | | if (limitConfig.getCValue().equals("1")) { |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | |
| | | |
| | | @Override |
| | | public boolean isLimitDownSell(String stockCode) { |
| | | Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code",stockCode)); |
| | | StockRealTimeBean stockRealTimeBean = RedisKeyUtil.getCacheRealTimeStock(stock); |
| | | Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code", stockCode)); |
| | | StockRealTimeBean stockRealTimeBean = RedisKeyUtil.getCacheRealTimeStock(stock); |
| | | BigDecimal pcp = new BigDecimal(stockRealTimeBean.getPcp()); |
| | | StockConfig stockConfig = iStockConfigServices.queryByKey(EConfigKey.LIMIT_DOWN_POINT.getCode()); |
| | | if(stockConfig == null){ |
| | | if (stockConfig == null) { |
| | | return true; |
| | | } |
| | | |
| | | if(new BigDecimal(stockConfig.getCValue()).compareTo(pcp)<=0){ |
| | | if (pcp.compareTo(new BigDecimal(stockConfig.getCValue())) <= 0) { |
| | | StockConfig limitConfig = iStockConfigServices.queryByKey(EConfigKey.LIMIT_DOWN_IS_SELL.getCode()); |
| | | if(limitConfig.getCValue().equals("1")){ |
| | | return true; |
| | | if (!limitConfig.getCValue().equals("1")) { |
| | | return false; |
| | | } |
| | | } |
| | | return false; |
| | | return true; |
| | | } |
| | | } |
| | | } |