package com.gear.swx.task;
|
|
import com.alibaba.fastjson2.JSON;
|
import com.alibaba.fastjson2.JSONArray;
|
import com.alibaba.fastjson2.JSONObject;
|
import com.gear.common.core.redis.RedisCache;
|
import com.gear.framework.websocket.WebSocketUsers;
|
import com.gear.common.constant.SwxConstons;
|
import com.gear.swx.vo.SyncCurrentValueFromLdVo;
|
import com.gear.swx.vo.SyncKValueFromLdVo;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.logging.log4j.util.Strings;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Component;
|
import org.springframework.util.CollectionUtils;
|
|
import java.io.BufferedReader;
|
import java.io.InputStreamReader;
|
import java.math.BigDecimal;
|
import java.net.HttpURLConnection;
|
import java.net.URL;
|
import java.text.SimpleDateFormat;
|
import java.util.*;
|
|
@Component("SyncFinanceTask")
|
@Slf4j
|
public class SyncFinanceTask {
|
|
private static final Logger lg = LoggerFactory.getLogger("taskFile");
|
|
@Autowired
|
private RedisCache redisCache;
|
private String currentChannel = "139.196.211.109";
|
|
private String currentFuturesChannel = "139.196.211.109";
|
private String channelA = "139.196.211.109";
|
|
private String channelB = "47.112.169.122";
|
|
private String passwordMd5 = "8a1576001bea15a3e5906ba3af004392";
|
|
private String userName = "673468708";
|
|
/**
|
* 同步即时信息
|
*/
|
public void syncCurrentInfo(){
|
log.debug("----------------------------------同步即时信息");
|
//获取渠道
|
if(currentChannel.equals(channelB)){
|
currentChannel = channelA;
|
}else{
|
currentChannel = channelB;
|
}
|
List<SyncCurrentValueFromLdVo> allPrice = new ArrayList<>();
|
//查询外汇实时信息
|
String syncForex = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_FOREX);
|
if(!Strings.isEmpty(syncForex)){
|
List<SyncCurrentValueFromLdVo> result = getCurrentValueFromLdVo(syncForex,"exchange_curr.action","");
|
System.out.println("------------------");
|
System.out.println(result);
|
allPrice.addAll(result);
|
}
|
System.out.println("当前信息:"+allPrice);
|
//查询数字货币实时信息
|
String syncCrypto = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_CRYPTO);
|
if(!Strings.isEmpty(syncCrypto)){
|
List<SyncCurrentValueFromLdVo> result = getCurrentValueFromMfVo(syncCrypto);
|
allPrice.addAll(result);
|
}
|
//查询股票实时信息
|
String syncStocks = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_STOCKS);
|
if(!Strings.isEmpty(syncStocks)){
|
List<SyncCurrentValueFromLdVo> result = getCurrentValueFromLdVo(syncStocks,"us_curr.action","&jys=NA");
|
allPrice.addAll(result);
|
}
|
//查询期货实时信息
|
String syncFutures = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_FUTURES);
|
if(!Strings.isEmpty(syncFutures)){
|
List<SyncCurrentValueFromLdVo> result = getCurrentValueFromLdVo(syncFutures,"fOption_curr.action","");
|
allPrice.addAll(result);
|
}
|
//查询贵金属实时信息
|
String syncMetal = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_METAL);
|
if(!Strings.isEmpty(syncMetal)){
|
List<SyncCurrentValueFromLdVo> result = getCurrentValueFromLdVo(syncMetal,"ldMetal_curr.action","");
|
allPrice.addAll(result);
|
}
|
//更新每秒数据集合
|
if(!CollectionUtils.isEmpty(allPrice)){
|
redisCache.deleteObject(SwxConstons.REDIS_CACHE_CURRENT_MARKET_PRICE);
|
redisCache.setCacheList(SwxConstons.REDIS_CACHE_CURRENT_MARKET_PRICE,allPrice);
|
//将最终结果通过socket广播
|
JSONArray jsonArray = new JSONArray(allPrice);
|
String msg = jsonArray.toString();
|
WebSocketUsers.sendMessageToUsersByText(msg);
|
}
|
}
|
|
/**
|
* 每分钟更新k线
|
*/
|
public void syncKvalueby1(){
|
log.debug("----------------------------------每分钟更新k线");
|
//查询外汇实时信息
|
String syncForex = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_FOREX);
|
if(!Strings.isEmpty(syncForex)){
|
String[] codes = syncForex.split(",");
|
if(codes.length > 1){
|
getKValueFromLdMany(syncForex,"exchange_pluralK.action","1","",1);
|
}else{
|
getKValueFromLdOne(syncForex,"exchange_k.action","1","",1);
|
}
|
}
|
//查询股票实时信息
|
String syncStocks = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_STOCKS);
|
if(!Strings.isEmpty(syncStocks)){
|
String[] codes = syncStocks.split(",");
|
if(codes.length > 1){
|
getKValueFromLdMany(syncStocks,"us_pluralK.action","1","&jys=NA",1);
|
}else{
|
getKValueFromLdOne(syncStocks,"us_k.action","1","&jys=NA",1);
|
}
|
}
|
//查询贵金属实时信息
|
String syncMetal = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_METAL);
|
if(!Strings.isEmpty(syncMetal)){
|
String[] codes = syncMetal.split(",");
|
if(codes.length > 1){
|
getKValueFromLdMany(syncMetal,"ldMetal_pluralK.action","1","",1);
|
}else{
|
getKValueFromLdOne(syncMetal,"ldMetal_k.action","1","",1);
|
}
|
}
|
//查询期货实时信息
|
String syncFutures = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_FUTURES);
|
if(!Strings.isEmpty(syncFutures)){
|
String[] codes = syncFutures.split(",");
|
if(codes.length > 1){
|
getKValueFromLdMany(syncFutures,"fOption_pluralK.action","1","",1);
|
}else{
|
getKValueFromLdOne(syncFutures,"fOption_k.action","1","",1);
|
}
|
}
|
//查询数字货币实时信息
|
String syncCrypto = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_CRYPTO);
|
if(!Strings.isEmpty(syncCrypto)){
|
getKValueFromMFVO(syncCrypto,redisCache.getCacheObject("syncCryptoKCode"),1,1);
|
}
|
}
|
|
/**
|
* 每5分钟更新k线
|
*/
|
public void syncKvalueby5(){
|
log.debug("----------------------------------每5分钟更新k线");
|
//获取当前需要查询的对象集合
|
//获取渠道
|
//查询外汇实时信息
|
String syncForex = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_FOREX);
|
if(!Strings.isEmpty(syncForex)){
|
String[] codes = syncForex.split(",");
|
if(codes.length > 1){
|
getKValueFromLdMany(syncForex,"exchange_pluralK.action","5","",1);
|
}else{
|
getKValueFromLdOne(syncForex,"exchange_k.action","5","",1);
|
}
|
}
|
//查询股票实时信息
|
String syncStocks = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_STOCKS);
|
if(!Strings.isEmpty(syncStocks)){
|
String[] codes = syncStocks.split(",");
|
if(codes.length > 1){
|
getKValueFromLdMany(syncStocks,"us_pluralK.action","5","&jys=NA",1);
|
}else{
|
getKValueFromLdOne(syncStocks,"us_k.action","5","&jys=NA",1);
|
}
|
}
|
//查询贵金属实时信息
|
String syncMetal = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_METAL);
|
if(!Strings.isEmpty(syncMetal)){
|
String[] codes = syncMetal.split(",");
|
if(codes.length > 1){
|
getKValueFromLdMany(syncMetal,"ldMetal_pluralK.action","5","",1);
|
}else{
|
getKValueFromLdOne(syncMetal,"ldMetal_k.action","5","",1);
|
}
|
}
|
//查询期货实时信息
|
String syncFutures = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_FUTURES);
|
if(!Strings.isEmpty(syncFutures)){
|
String[] codes = syncFutures.split(",");
|
if(codes.length > 1){
|
getKValueFromLdMany(syncFutures,"fOption_pluralK.action","5","",1);
|
}else{
|
getKValueFromLdOne(syncFutures,"fOption_k.action","5","",1);
|
}
|
}
|
//查询数字货币实时信息
|
//查询数字货币实时信息
|
String syncCrypto = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_CRYPTO);
|
if(!Strings.isEmpty(syncCrypto)){
|
getKValueFromMFVO(syncCrypto,redisCache.getCacheObject("syncCryptoKCode"),1,5);
|
}
|
}
|
|
/**
|
* 每15分钟更新k线
|
*/
|
public void syncKvalueby15(){
|
//获取当前需要查询的对象集合
|
//获取渠道
|
//查询外汇实时信息
|
String syncForex = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_FOREX);
|
if(!Strings.isEmpty(syncForex)){
|
String[] codes = syncForex.split(",");
|
if(codes.length > 1){
|
getKValueFromLdMany(syncForex,"exchange_pluralK.action","15","",1);
|
}else{
|
getKValueFromLdOne(syncForex,"exchange_k.action","15","",1);
|
}
|
}
|
//查询股票实时信息
|
String syncStocks = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_STOCKS);
|
if(!Strings.isEmpty(syncStocks)){
|
String[] codes = syncStocks.split(",");
|
if(codes.length > 1){
|
getKValueFromLdMany(syncStocks,"us_pluralK.action","15","&jys=NA",1);
|
}else{
|
getKValueFromLdOne(syncStocks,"us_k.action","15","&jys=NA",1);
|
}
|
}
|
//查询贵金属实时信息
|
String syncMetal = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_METAL);
|
if(!Strings.isEmpty(syncMetal)){
|
String[] codes = syncMetal.split(",");
|
if(codes.length > 1){
|
getKValueFromLdMany(syncMetal,"ldMetal_pluralK.action","15","",1);
|
}else{
|
getKValueFromLdOne(syncMetal,"ldMetal_k.action","15","",1);
|
}
|
}
|
//查询期货实时信息
|
String syncFutures = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_FUTURES);
|
if(!Strings.isEmpty(syncFutures)){
|
String[] codes = syncFutures.split(",");
|
if(codes.length > 1){
|
getKValueFromLdMany(syncFutures,"fOption_pluralK.action","15","",1);
|
}else{
|
getKValueFromLdOne(syncFutures,"fOption_k.action","15","",1);
|
}
|
}
|
//查询数字货币实时信息
|
String syncCrypto = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_CRYPTO);
|
if(!Strings.isEmpty(syncCrypto)){
|
getKValueFromMFVO(syncCrypto,redisCache.getCacheObject("syncCryptoKCode"),1,15);
|
}
|
}
|
|
|
|
/**
|
* 每30分钟更新k线
|
*/
|
public void syncKvalueby30(){
|
//获取当前需要查询的对象集合
|
//获取渠道
|
//查询外汇实时信息
|
String syncForex = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_FOREX);
|
if(!Strings.isEmpty(syncForex)){
|
String[] codes = syncForex.split(",");
|
if(codes.length > 1){
|
getKValueFromLdMany(syncForex,"exchange_pluralK.action","30","",1);
|
}else{
|
getKValueFromLdOne(syncForex,"exchange_k.action","30","",1);
|
}
|
}
|
//查询股票实时信息
|
String syncStocks = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_STOCKS);
|
if(!Strings.isEmpty(syncStocks)){
|
String[] codes = syncStocks.split(",");
|
if(codes.length > 1){
|
getKValueFromLdMany(syncStocks,"us_pluralK.action","30","&jys=NA",1);
|
}else{
|
getKValueFromLdOne(syncStocks,"us_k.action","30","&jys=NA",1);
|
}
|
}
|
//查询贵金属实时信息
|
String syncMetal = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_METAL);
|
if(!Strings.isEmpty(syncMetal)){
|
String[] codes = syncMetal.split(",");
|
if(codes.length > 1){
|
getKValueFromLdMany(syncMetal,"ldMetal_pluralK.action","30","",1);
|
}else{
|
getKValueFromLdOne(syncMetal,"ldMetal_k.action","30","",1);
|
}
|
}
|
//查询期货实时信息
|
String syncFutures = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_FUTURES);
|
if(!Strings.isEmpty(syncFutures)){
|
String[] codes = syncFutures.split(",");
|
if(codes.length > 1){
|
getKValueFromLdMany(syncFutures,"fOption_pluralK.action","30","",1);
|
}else{
|
getKValueFromLdOne(syncFutures,"fOption_k.action","30","",1);
|
}
|
}
|
//查询数字货币实时信息
|
String syncCrypto = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_CRYPTO);
|
if(!Strings.isEmpty(syncCrypto)){
|
getKValueFromMFVO(syncCrypto,redisCache.getCacheObject("syncCryptoKCode"),1,30);
|
}
|
}
|
|
/**
|
* 每60分钟更新k线
|
*/
|
public void syncKvalueby60(){
|
//获取当前需要查询的对象集合
|
//获取渠道
|
//查询外汇实时信息
|
String syncForex = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_FOREX);
|
if(!Strings.isEmpty(syncForex)){
|
String[] codes = syncForex.split(",");
|
if(codes.length > 1){
|
getKValueFromLdMany(syncForex,"exchange_pluralK.action","60","",1);
|
}else{
|
getKValueFromLdOne(syncForex,"exchange_k.action","60","",1);
|
}
|
}
|
//查询股票实时信息
|
String syncStocks = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_STOCKS);
|
if(!Strings.isEmpty(syncStocks)){
|
String[] codes = syncStocks.split(",");
|
if(codes.length > 1){
|
getKValueFromLdMany(syncStocks,"us_pluralK.action","60","&jys=NA",1);
|
}else{
|
getKValueFromLdOne(syncStocks,"us_k.action","60","&jys=NA",1);
|
}
|
}
|
//查询贵金属实时信息
|
String syncMetal = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_METAL);
|
if(!Strings.isEmpty(syncMetal)){
|
String[] codes = syncMetal.split(",");
|
if(codes.length > 1){
|
getKValueFromLdMany(syncMetal,"ldMetal_pluralK.action","60","",1);
|
}else{
|
getKValueFromLdOne(syncMetal,"ldMetal_k.action","60","",1);
|
}
|
}
|
//查询期货实时信息
|
String syncFutures = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_FUTURES);
|
if(!Strings.isEmpty(syncFutures)){
|
String[] codes = syncFutures.split(",");
|
if(codes.length > 1){
|
getKValueFromLdMany(syncFutures,"fOption_pluralK.action","60","",1);
|
}else{
|
getKValueFromLdOne(syncFutures,"fOption_k.action","60","",1);
|
}
|
}
|
//查询数字货币实时信息
|
//查询数字货币实时信息
|
String syncCrypto = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_CRYPTO);
|
if(!Strings.isEmpty(syncCrypto)){
|
getKValueFromMFVO(syncCrypto,redisCache.getCacheObject("syncCryptoKCode"),1,60);
|
}
|
}
|
|
|
/**
|
* 每天更新k线
|
*/
|
public void syncKvaluebyD(){
|
//获取当前需要查询的对象集合
|
//获取渠道
|
//查询外汇实时信息
|
String syncForex = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_FOREX);
|
if(!Strings.isEmpty(syncForex)){
|
String[] codes = syncForex.split(",");
|
if(codes.length > 1){
|
getKValueFromLdMany(syncForex,"exchange_pluralK.action","d","",2);
|
}else{
|
getKValueFromLdOne(syncForex,"exchange_k.action","d","",2);
|
}
|
}
|
//查询股票实时信息
|
String syncStocks = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_STOCKS);
|
if(!Strings.isEmpty(syncStocks)){
|
String[] codes = syncStocks.split(",");
|
if(codes.length > 1){
|
getKValueFromLdMany(syncStocks,"us_pluralK.action","d","&jys=NA",2);
|
}else{
|
getKValueFromLdOne(syncStocks,"us_k.action","d","&jys=NA",2);
|
}
|
}
|
String syncMetal = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_METAL);
|
if(!Strings.isEmpty(syncMetal)){
|
String[] codes = syncMetal.split(",");
|
if(codes.length > 1){
|
getKValueFromLdMany(syncMetal,"ldMetal_pluralK.action","d","",2);
|
}else{
|
getKValueFromLdOne(syncMetal,"ldMetal_k.action","d","",2);
|
}
|
}
|
//查询期货实时信息
|
String syncFutures = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_FUTURES);
|
if(!Strings.isEmpty(syncFutures)){
|
String[] codes = syncFutures.split(",");
|
if(codes.length > 1){
|
getKValueFromLdMany(syncFutures,"fOption_pluralK.action","d","",2);
|
}else{
|
getKValueFromLdOne(syncFutures,"fOption_k.action","d","",2);
|
}
|
}
|
//查询数字货币实时信息
|
String syncCrypto = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_CRYPTO);
|
if(!Strings.isEmpty(syncCrypto)){
|
getKValueFromMFVO(syncCrypto,redisCache.getCacheObject("syncCryptoKCode"),2,1);
|
}
|
}
|
|
/**
|
* 每周更新k线
|
*/
|
public void syncKvaluebyW(){
|
//获取当前需要查询的对象集合
|
//获取渠道
|
//查询外汇实时信息
|
String syncForex = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_FOREX);
|
if(!Strings.isEmpty(syncForex)){
|
String[] codes = syncForex.split(",");
|
if(codes.length > 1){
|
getKValueFromLdMany(syncForex,"exchange_pluralK.action","w","",2);
|
}else{
|
getKValueFromLdOne(syncForex,"exchange_k.action","w","",2);
|
}
|
}
|
//查询股票实时信息
|
String syncStocks = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_STOCKS);
|
if(!Strings.isEmpty(syncStocks)){
|
String[] codes = syncStocks.split(",");
|
if(codes.length > 1){
|
getKValueFromLdMany(syncStocks,"us_pluralK.action","w","&jys=NA",2);
|
}else{
|
getKValueFromLdOne(syncStocks,"us_k.action","w","&jys=NA",2);
|
}
|
}
|
String syncMetal = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_METAL);
|
if(!Strings.isEmpty(syncMetal)){
|
String[] codes = syncMetal.split(",");
|
if(codes.length > 1){
|
getKValueFromLdMany(syncMetal,"ldMetal_pluralK.action","w","",2);
|
}else{
|
getKValueFromLdOne(syncMetal,"ldMetal_k.action","w","",2);
|
}
|
}
|
//查询期货实时信息
|
String syncFutures = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_FUTURES);
|
if(!Strings.isEmpty(syncFutures)){
|
String[] codes = syncFutures.split(",");
|
if(codes.length > 1){
|
getKValueFromLdMany(syncFutures,"fOption_pluralK.action","w","",2);
|
}else{
|
getKValueFromLdOne(syncFutures,"fOption_k.action","w","",2);
|
}
|
}
|
//查询数字货币实时信息
|
|
}
|
//每月更新k线
|
public void syncKvaluebyM(){
|
//获取当前需要查询的对象集合
|
//获取渠道
|
//查询外汇实时信息
|
String syncForex = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_FOREX);
|
if(!Strings.isEmpty(syncForex)){
|
String[] codes = syncForex.split(",");
|
if(codes.length > 1){
|
getKValueFromLdMany(syncForex,"exchange_pluralK.action","m","",2);
|
}else{
|
getKValueFromLdOne(syncForex,"exchange_k.action","m","",2);
|
}
|
}
|
//查询股票实时信息
|
String syncStocks = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_STOCKS);
|
if(!Strings.isEmpty(syncStocks)){
|
String[] codes = syncStocks.split(",");
|
if(codes.length > 1){
|
getKValueFromLdMany(syncStocks,"us_pluralK.action","m","&jys=NA",2);
|
}else{
|
getKValueFromLdOne(syncStocks,"us_k.action","m","&jys=NA",2);
|
}
|
}
|
String syncMetal = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_METAL);
|
if(!Strings.isEmpty(syncMetal)){
|
String[] codes = syncMetal.split(",");
|
if(codes.length > 1){
|
getKValueFromLdMany(syncMetal,"ldMetal_pluralK.action","m","",2);
|
}else{
|
getKValueFromLdOne(syncMetal,"ldMetal_k.action","m","",2);
|
}
|
}
|
//查询期货实时信息
|
String syncFutures = redisCache.getCacheObject(SwxConstons.REDIS_CACHE_SYNC_TYPE_FUTURES);
|
if(!Strings.isEmpty(syncFutures)){
|
String[] codes = syncFutures.split(",");
|
if(codes.length > 1){
|
getKValueFromLdMany(syncFutures,"fOption_pluralK.action","m","",2);
|
}else{
|
getKValueFromLdOne(syncFutures,"fOption_k.action","m","",2);
|
}
|
}
|
|
}
|
|
//获取实时数据
|
private List<SyncCurrentValueFromLdVo> getCurrentValueFromLdVo(String code,String method,String append){
|
List<SyncCurrentValueFromLdVo> result = new ArrayList<>();
|
try {
|
String urlStr = "http://"+currentChannel+"/"+method+"?username=673468708&password=8a1576001bea15a3e5906ba3af004392&id="+code+"&column=mc,zf,price,zdf"+append;
|
log.info("获取实时数据,类型为:{},代码为:{},请求地址:{}",method,code,urlStr);
|
// 创建 URL 对象
|
URL url = new URL(urlStr);
|
|
// 创建 HTTP 连接
|
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
connection.setRequestMethod("GET");
|
// 获取输入流
|
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
|
String firstLine = reader.readLine();
|
log.info("返回列:{}",firstLine);
|
String[] clomns = firstLine.split(",");
|
Integer codePostion = getPostion(clomns,"代码");
|
Integer namePosition = getPostion(clomns,"名称");
|
Integer pricePosition = getPostion(clomns,"价格");
|
Integer zdfPosition = getPostion(clomns,"涨跌幅");
|
|
// 读取 CSV 数据
|
String line;
|
while ((line = reader.readLine()) != null) { // 打印每一行数据
|
System.out.println("当前数据:"+line);
|
String[] dataArray = line.split(",");
|
SyncCurrentValueFromLdVo vo = new SyncCurrentValueFromLdVo();
|
vo.setCode(dataArray[codePostion]);
|
vo.setPrice(isDecimal(dataArray[pricePosition]) ? new BigDecimal(dataArray[pricePosition]) : BigDecimal.ZERO);
|
vo.setZdf(isDecimal(dataArray[zdfPosition]) ? new BigDecimal(dataArray[zdfPosition]) : BigDecimal.ZERO);
|
vo.setName(dataArray[namePosition]);
|
//更新对应个产品每秒数据
|
redisCache.setCacheObject(vo.getCode()+"CurrPrice",vo.getPrice());
|
redisCache.setCacheObject(vo.getCode()+"CurrZdf",vo.getZdf());
|
//更新对应产品的缓存100条数据
|
List<BigDecimal> list = redisCache.getCacheList(vo.getCode()+"Hundred");
|
if(list != null && list.size() > 0){
|
//如果本次获取的价格和上次一样,则不保存
|
BigDecimal lastPrice = new BigDecimal(list.get(list.size()-1)+"");
|
if (lastPrice.compareTo(vo.getPrice()) != 0){
|
if(list.size() >= 100){
|
list.remove(0);
|
}
|
list.add(vo.getPrice());
|
redisCache.deleteObject(vo.getCode()+"Hundred");
|
redisCache.setCacheList(vo.getCode()+"Hundred",list);
|
}
|
}
|
result.add(vo);
|
}
|
// 关闭连接
|
reader.close();
|
connection.disconnect();
|
return result;
|
} catch (Exception e) {
|
System.out.println("执行获取单价发生异常了发生异常了");
|
System.out.println(e.toString());
|
}
|
return result;
|
}
|
|
private void getKValueFromLdMany(String code,String method,String dateNum,String append,Integer dateType){
|
try {
|
SimpleDateFormat simpleDateFormat;
|
if (dateType == 1){
|
simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmm");
|
}else{
|
simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
|
}
|
String urlStr = "http://"+channelA+"/"+method+"?username=673468708&password=8a1576001bea15a3e5906ba3af004392&id="+code+"&period="+dateNum+"&num=-100&datetime="+simpleDateFormat.format(new Date())+append;
|
lg.info("获取实时数据,类型为:{},代码为:{},请求地址:{},时间为:{}",method,code,urlStr,dateNum);
|
// 创建 URL 对象
|
URL url = new URL(urlStr);
|
|
// 创建 HTTP 连接
|
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
connection.setRequestMethod("GET");
|
|
// 获取输入流
|
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
|
|
String firstLine = reader.readLine();
|
boolean dateFlag = false;
|
String dateStr = "";
|
if("日期".equals(firstLine.trim())){
|
dateFlag = true;
|
dateStr = reader.readLine();
|
firstLine = reader.readLine();
|
}
|
|
// 读取 CSV 数据
|
String line;
|
String nowCode = "";
|
List<SyncKValueFromLdVo> tempList = new ArrayList<>();
|
while ((line = reader.readLine()) != null) { // 打印每一行数据
|
String[] dataArray = line.split(",");
|
if("".equals(nowCode)){
|
nowCode = dataArray[0];
|
}
|
//如果产品代码不等于上一行的产品代码,则证明产品应景更换,将之前集合的数据存入redis,并清空之前的集合
|
if (!nowCode.equals(dataArray[0])){
|
redisCache.deleteObject(nowCode+dateNum+"KValue");
|
redisCache.setCacheList(nowCode+dateNum+"KValue",tempList);
|
//如果百威数据为null,则进行存入
|
if(CollectionUtils.isEmpty(redisCache.getCacheList(nowCode+"Hundred"))){
|
List<BigDecimal> list = new ArrayList<>();
|
for (SyncKValueFromLdVo item : tempList){
|
list.add(item.getHignPrice());
|
}
|
redisCache.setCacheList(nowCode+"Hundred",list);
|
}
|
tempList.clear();
|
nowCode = dataArray[0];
|
}
|
SyncKValueFromLdVo vo = new SyncKValueFromLdVo();
|
String datetimeStr = dataArray[1];
|
if (dateFlag){
|
datetimeStr = dateStr + " " + datetimeStr;
|
}
|
vo.setDate(datetimeStr);
|
vo.setKpPrice(isDecimal(dataArray[2])? new BigDecimal(dataArray[2]) : BigDecimal.ZERO);
|
vo.setHignPrice(isDecimal(dataArray[3])? new BigDecimal(dataArray[3]) : BigDecimal.ZERO);
|
vo.setLowPrice(isDecimal(dataArray[4])? new BigDecimal(dataArray[4]) : BigDecimal.ZERO);
|
vo.setSpPrice(isDecimal(dataArray[5])? new BigDecimal(dataArray[5]) : BigDecimal.ZERO);
|
if (dataArray.length > 6){
|
vo.setDealNum(isDecimal(dataArray[6])? new BigDecimal(dataArray[6]) : BigDecimal.ZERO);
|
vo.setDealPrice(isDecimal(dataArray[7])? new BigDecimal(dataArray[7]) : BigDecimal.ZERO);
|
}
|
//更新对应产品的缓存100条数据
|
tempList.add(vo);
|
}
|
//全部执行完成后,将最后一个对象放入redis
|
redisCache.deleteObject(nowCode+dateNum+"KValue");
|
|
if (tempList.isEmpty()){
|
lg.error("K线同步错误,firstLine:【{}】,dateStr:【{}】,nowCode:【{}】,dateNum:【{}】", firstLine, dateStr, nowCode, dateNum);
|
}else{
|
lg.info("K线同步,firstLine:【{}】,dateStr:【{}】,nowCode:【{}】,dateNum:【{}】", firstLine, dateStr, nowCode, dateNum);
|
}
|
redisCache.setCacheList(nowCode+dateNum+"KValue",tempList);
|
//如果百威数据为null,则进行存入
|
if(CollectionUtils.isEmpty(redisCache.getCacheList(nowCode+"Hundred"))){
|
List<BigDecimal> list = new ArrayList<>();
|
for (SyncKValueFromLdVo item : tempList){
|
list.add(item.getHignPrice());
|
}
|
redisCache.setCacheList(nowCode+"Hundred",list);
|
}
|
// 关闭连接
|
reader.close();
|
connection.disconnect();
|
} catch (Exception e) {
|
System.out.println(e.getMessage());
|
e.printStackTrace();
|
}
|
}
|
|
private void getKValueFromLdOne(String code,String method,String dateNum,String append,Integer dateType){
|
try {
|
SimpleDateFormat simpleDateFormat;
|
if (dateType == 1){
|
simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmm");
|
}else{
|
simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
|
}
|
String urlStr = "http://"+channelA+"/"+method+"?username=673468708&password=8a1576001bea15a3e5906ba3af004392&id="+code+"&period="+dateNum+"&num=-100&datetime="+simpleDateFormat.format(new Date())+append;
|
log.info("获取实时数据,类型为:{},代码为:{},请求地址:{},时间为:{}",method,code,urlStr,dateNum);
|
// 创建 URL 对象
|
URL url = new URL(urlStr);
|
|
// 创建 HTTP 连接
|
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
connection.setRequestMethod("GET");
|
|
// 获取输入流
|
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
|
|
String firstLine = reader.readLine();
|
boolean dateFlag = false;
|
String dateStr = "";
|
if("日期".equals(firstLine.trim())){
|
dateFlag = true;
|
dateStr = reader.readLine();
|
firstLine = reader.readLine();
|
}
|
|
// 读取 CSV 数据
|
String line;
|
List<SyncKValueFromLdVo> result = new ArrayList<>();
|
while ((line = reader.readLine()) != null) { // 打印每一行数据
|
String[] dataArray = line.split(",");
|
//单个品种不返回code
|
SyncKValueFromLdVo vo = new SyncKValueFromLdVo();
|
String datetimeStr = dataArray[0];
|
if (dateFlag){
|
datetimeStr = dateStr + " " + datetimeStr;
|
}
|
vo.setDate(datetimeStr);
|
vo.setKpPrice(isDecimal(dataArray[1])? new BigDecimal(dataArray[1]) : BigDecimal.ZERO);
|
vo.setHignPrice(isDecimal(dataArray[2])? new BigDecimal(dataArray[2]) : BigDecimal.ZERO);
|
vo.setLowPrice(isDecimal(dataArray[3])? new BigDecimal(dataArray[3]) : BigDecimal.ZERO);
|
vo.setSpPrice(isDecimal(dataArray[4])? new BigDecimal(dataArray[4]) : BigDecimal.ZERO);
|
if (dataArray.length > 5){
|
vo.setDealNum(isDecimal(dataArray[5])? new BigDecimal(dataArray[5]) : BigDecimal.ZERO);
|
vo.setDealPrice(isDecimal(dataArray[6])? new BigDecimal(dataArray[6]) : BigDecimal.ZERO);
|
}
|
//更新对应产品的缓存100条数据
|
result.add(vo);
|
}
|
//完成后将内容放入redis
|
redisCache.deleteObject(code+dateNum+"KValue");
|
redisCache.setCacheList(code+dateNum+"KValue",result);
|
//如果百威数据为null,则进行存入
|
if(CollectionUtils.isEmpty(redisCache.getCacheList(code+"Hundred"))){
|
List<BigDecimal> list = new ArrayList<>();
|
for (SyncKValueFromLdVo item : result){
|
list.add(item.getHignPrice());
|
}
|
redisCache.setCacheList(code+"Hundred",list);
|
}
|
// 关闭连接
|
reader.close();
|
connection.disconnect();
|
} catch (Exception e) {
|
System.out.println(e.getMessage());
|
e.printStackTrace();
|
}
|
}
|
// private void getKvalueFromMf(String code,Integer dateNum,Integer dateType){
|
// try {
|
// SimpleDateFormat simpleDateFormat;
|
// Date date = new Date();
|
// String urlStr = "http://"+channelA+"/"+method+"?username=673468708&password=8a1576001bea15a3e5906ba3af004392&id="+code+"&period="+dateNum+"&num=-100&datetime="+simpleDateFormat.format(new Date())+append;
|
// log.info("获取实时数据,类型为:{},代码为:{},请求地址:{},时间为:{}",method,code,urlStr,dateNum);
|
// // 创建 URL 对象
|
// URL url = new URL(urlStr);
|
//
|
// // 创建 HTTP 连接
|
// HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
// connection.setRequestMethod("GET");
|
//
|
// // 获取输入流
|
// BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
|
//
|
// String firstLine = reader.readLine();
|
// boolean dateFlag = false;
|
// String dateStr = "";
|
// if("日期".equals(firstLine.trim())){
|
// dateFlag = true;
|
// dateStr = reader.readLine();
|
// firstLine = reader.readLine();
|
// }
|
//
|
// // 读取 CSV 数据
|
// String line;
|
// String nowCode = "";
|
// List<SyncKValueFromLdVo> tempList = new ArrayList<>();
|
// while ((line = reader.readLine()) != null) { // 打印每一行数据
|
// String[] dataArray = line.split(",");
|
// if("".equals(nowCode)){
|
// nowCode = dataArray[0];
|
// }
|
// //如果产品代码不等于上一行的产品代码,则证明产品应景更换,将之前集合的数据存入redis,并清空之前的集合
|
// if (!nowCode.equals(dataArray[0])){
|
// redisCache.deleteObject(nowCode+dateNum+"KValue");
|
// redisCache.setCacheList(nowCode+dateNum+"KValue",tempList);
|
// tempList.clear();
|
// nowCode = dataArray[0];
|
// }
|
// SyncKValueFromLdVo vo = new SyncKValueFromLdVo();
|
// String datetimeStr = dataArray[1];
|
// if (dateFlag){
|
// datetimeStr = dateStr + " " + datetimeStr;
|
// }
|
// vo.setDate(datetimeStr);
|
// vo.setKpPrice(new BigDecimal(dataArray[2]));
|
// vo.setHignPrice(new BigDecimal(dataArray[3]));
|
// vo.setLowPrice(new BigDecimal(dataArray[4]));
|
// vo.setSpPrice(new BigDecimal(dataArray[5]));
|
// if (dataArray.length > 6){
|
// vo.setDealNum(Integer.parseInt(dataArray[6]));
|
// vo.setDealPrice(new BigDecimal(dataArray[7]));
|
// }
|
// //更新对应产品的缓存100条数据
|
// tempList.add(vo);
|
// }
|
// //全部执行完成后,将最后一个对象放入redis
|
// redisCache.deleteObject(nowCode+dateNum+"KValue");
|
// redisCache.setCacheList(nowCode+dateNum+"KValue",tempList);
|
// // 关闭连接
|
// reader.close();
|
// connection.disconnect();
|
// } catch (Exception e) {
|
// System.out.println(e.getMessage());
|
// }
|
// }
|
|
private Integer getPostion(String[] array,String str){
|
for (int i = 0; i < array.length;i++){
|
if (str.equals(array[i])){
|
return i;
|
}
|
}
|
return -1;
|
}
|
|
|
|
private List<SyncCurrentValueFromLdVo> getCurrentValueFromMfVo(String code){
|
List<SyncCurrentValueFromLdVo> result = new ArrayList<>();
|
try {
|
String urlStr = "https://data.mifengcha.com/api/v3/price?api_key=LUR8GYLFWBADUQINGGY5ZR7QWC2GVMI58RXSUONG&slug="+code;
|
log.info("获取实时数据,类型为:{},代码为:{},请求地址:{},时间为:{}","数字货币",code,urlStr,new Date());
|
// 创建 URL 对象
|
URL url = new URL(urlStr);
|
|
// 创建 HTTP 连接
|
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
connection.setRequestMethod("GET");
|
|
// 获取输入流
|
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
|
StringBuilder response = new StringBuilder();
|
String line;
|
while ((line = reader.readLine()) != null) {
|
response.append(line);
|
}
|
reader.close();
|
connection.disconnect();
|
String repStr = response.toString();
|
JSONArray jsonArray = JSON.parseArray(repStr);
|
|
for (int i = 0 ; i < jsonArray.size();i++){
|
JSONObject object = jsonArray.getJSONObject(i);
|
SyncCurrentValueFromLdVo vo = new SyncCurrentValueFromLdVo();
|
vo.setCode(object.getString("s"));
|
vo.setPrice(new BigDecimal(object.getString("u")));
|
vo.setZdf(new BigDecimal(object.getString("c")));
|
vo.setName(object.getString("S"));
|
//更新对应个产品每秒数据
|
redisCache.setCacheObject(vo.getCode()+"CurrPrice",vo.getPrice());
|
redisCache.setCacheObject(vo.getCode()+"CurrZdf",vo.getZdf());
|
//更新对应产品的缓存100条数据
|
List<BigDecimal> list = redisCache.getCacheList(vo.getCode()+"Hundred");
|
if(list != null && list.size() > 0){
|
//如果本次获取的价格和上次一样,则不保存
|
BigDecimal lastPrice = new BigDecimal(list.get(list.size()-1)+"");
|
if (lastPrice.compareTo(vo.getPrice()) != 0){
|
if(list.size() >= 100){
|
list.remove(0);
|
}
|
list.add(vo.getPrice());
|
redisCache.deleteObject(vo.getCode()+"Hundred");
|
redisCache.setCacheList(vo.getCode()+"Hundred",list);
|
}
|
}
|
result.add(vo);
|
}
|
return result;
|
}catch (Exception e){
|
System.out.println("调用方法异常:====="+e.getMessage());
|
System.out.println(e.getMessage());
|
e.printStackTrace();
|
}
|
return result;
|
}
|
|
public void getKValueFromMFVO(String oldCode,String code,Integer type,Integer dateNum){
|
//获取对应的开始时间和结束时间
|
Calendar calendar = Calendar.getInstance();
|
Long endTime = calendar.getTimeInMillis();
|
String interval ;
|
SimpleDateFormat simpleDateFormat ;
|
Long startTime ;
|
String fh = "d";
|
if (type == 1){
|
Integer nums = 0 - ((100 * dateNum) + 10);
|
|
calendar.add(Calendar.MINUTE,nums);
|
startTime = calendar.getTimeInMillis();
|
interval = dateNum + "m";
|
simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
|
if (dateNum == 60){
|
interval = "1h";
|
simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH");
|
}
|
fh = dateNum+"";
|
|
}else{
|
calendar.add(Calendar.DAY_OF_YEAR, -100);
|
startTime = calendar.getTimeInMillis();
|
interval = "1d";
|
simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
}
|
String[] codeArray = code.split(",");
|
String[] oldCodeArray = oldCode.split(",");
|
for(int j = 0; j < codeArray.length;j++){
|
try {
|
Thread.sleep(100);
|
} catch (InterruptedException e) {
|
System.out.println(e.getMessage());
|
}
|
//分批请求
|
String urlStr = "https://data.mifengcha.com/api/v3/kline?api_key=LUR8GYLFWBADUQINGGY5ZR7QWC2GVMI58RXSUONG&desc="+codeArray[j]+"&interval="+interval+"&end="+endTime+"&market=Binance&start="+startTime;
|
try {
|
URL url = new URL(urlStr);
|
|
// 创建 HTTP 连接
|
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
connection.setRequestMethod("GET");
|
|
// 获取输入流
|
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
|
// 读取 CSV 数据
|
String line;
|
List<SyncKValueFromLdVo> result = new ArrayList<>();
|
StringBuilder response = new StringBuilder();
|
while ((line = reader.readLine()) != null) { // 打印每一行数据
|
response.append(line);
|
}
|
String reponseStr = response.toString();
|
JSONArray jsonArray = JSON.parseArray(reponseStr);
|
for(int i = 0; i < jsonArray.size(); i++){
|
if (i == 100){
|
break;
|
}
|
JSONObject object = jsonArray.getJSONObject(i);
|
SyncKValueFromLdVo vo = new SyncKValueFromLdVo();
|
vo.setDate(simpleDateFormat.format(new Date(object.getLong("T"))));
|
vo.setKpPrice(new BigDecimal(object.getString("o")));
|
vo.setHignPrice(new BigDecimal(object.getString("h")));
|
vo.setLowPrice(new BigDecimal(object.getString("l")));
|
vo.setSpPrice(new BigDecimal(object.getString("c")));
|
vo.setDealNum(new BigDecimal(object.getString("v")));
|
//更新对应产品的缓存100条数据
|
result.add(vo);
|
}
|
System.out.println("最后结果:"+result);
|
System.out.println("总行数:"+result.size());
|
//完成后将内容放入redis
|
redisCache.deleteObject(oldCodeArray[j]+fh+"KValue");
|
redisCache.setCacheList(oldCodeArray[j]+fh+"KValue",result);
|
//如果百威数据为null,则进行存入
|
if(CollectionUtils.isEmpty(redisCache.getCacheList(oldCodeArray[j]+"Hundred"))){
|
List<BigDecimal> list = new ArrayList<>();
|
for (SyncKValueFromLdVo item : result){
|
list.add(item.getHignPrice());
|
}
|
redisCache.setCacheList(oldCodeArray[j]+"Hundred",list);
|
}
|
// 关闭连接
|
reader.close();
|
connection.disconnect();
|
}catch (Exception e){
|
System.out.println(e.getMessage());
|
e.printStackTrace();
|
}
|
}
|
}
|
|
private boolean isDecimal(String str){
|
return str.matches("-?\\d+(\\.\\d+)?"); // 匹配整数或小数格式
|
}
|
|
|
private List<BigDecimal> generateFluctuatedValues(BigDecimal baseValue, int numberOfValues) {
|
List<BigDecimal> fluctuatedValues = new ArrayList<>();
|
Random random = new Random();
|
|
for (int i = 0; i < numberOfValues; i++) {
|
BigDecimal fluctuation = baseValue.multiply(new BigDecimal(0.002)); // 计算波动范围
|
double randomFactor = random.nextDouble(); // 生成随机因子(0到1之间的随机数)
|
BigDecimal randomValue = fluctuation.multiply(new BigDecimal(randomFactor)); // 计算波动值
|
BigDecimal newValue = baseValue.add(randomValue); // 计算新值
|
fluctuatedValues.add(newValue); // 将新值添加到列表中
|
}
|
|
return fluctuatedValues;
|
}
|
}
|