package com.nq.utils.task.stock;
|
|
import cn.hutool.http.HttpUtil;
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.google.gson.Gson;
|
import com.google.gson.reflect.TypeToken;
|
import com.nq.dao.*;
|
import com.nq.pojo.*;
|
import com.nq.service.IStockService;
|
import com.nq.utils.DateTimeUtil;
|
import com.nq.utils.HttpClientRequest;
|
import com.nq.utils.PropertiesUtil;
|
import com.nq.utils.StockUtil;
|
import com.nq.utils.redis.RedisShardedPoolUtils;
|
import com.nq.utils.stock.BuyAndSellUtils;
|
import com.nq.utils.stock.pinyin.GetPyByChinese;
|
import com.nq.vo.stock.StockListVO;
|
import org.apache.commons.lang3.StringUtils;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.stereotype.Component;
|
|
import javax.annotation.Resource;
|
import java.math.BigDecimal;
|
import java.net.URLEncoder;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.stream.Collectors;
|
//import org.springframework.scheduling.annotation.Scheduled;
|
|
|
@Component
|
public class StockTask {
|
@Autowired
|
IStockService stockService;
|
@Autowired
|
StockMapper stockMapper;
|
|
|
@Autowired
|
InStockMapper inStockMapper;
|
|
@Resource
|
StockSubscribeMapper stockSubscribeMapper;
|
|
|
@Resource
|
StockFuturesMapper stockFuturesMapper;
|
|
private static final Logger log = LoggerFactory.getLogger(StockTask.class);
|
|
public void time(boolean am, boolean pm) {
|
am = false;
|
pm = false;
|
try {
|
am = BuyAndSellUtils.isTransTime("9:29", "11:31");
|
pm = BuyAndSellUtils.isTransTime("12:59", "15:00");
|
} catch (Exception e) {
|
log.error("= {}", e);
|
}
|
log.info("am = {} pm = {}", Boolean.valueOf(am), Boolean.valueOf(pm));
|
}
|
|
|
//每隔一个小时请求一次
|
// @Scheduled(cron = "0 0/10 * * * ?")
|
@Scheduled(cron = "0 0 0/1 * * ?")
|
|
// @Scheduled(cron = "0/10 * * * * ?")
|
public void syncINStockData() {
|
log.error("同步");
|
List<InStockBean> list = new ArrayList<>();
|
int totleStock = 1;
|
int page = 0;
|
try {
|
while (totleStock > list.size()) {
|
try {
|
String result = HttpClientRequest.doGet(StockUtil.HTTP_API + "list?country_id=14&size=1000&page=" + page + "&key=" + StockUtil.KEY);
|
ReponseBase reponseBase = new Gson().fromJson(result, ReponseBase.class);
|
list.addAll(reponseBase.getData());
|
page++;
|
totleStock = reponseBase.getTotal();
|
} catch (Exception e) {
|
e.printStackTrace();
|
break;
|
}
|
}
|
for (InStockBean o : list) {
|
Stock stock = stockMapper.findStockByCode(o.getId());
|
if (stock == null) {
|
stock = new Stock();
|
stock.setStockCode(o.getId());
|
stock.setStockName(o.getName());
|
stock.setStockType("in");
|
stock.setStockGid(o.getType());
|
stock.setStockSpell(o.getSymbol());
|
stock.setIsLock(0);
|
stock.setIsShow(0);
|
stock.setDataBase(0);
|
stock.setAddTime(new Date());
|
stockMapper.insert1(stock);
|
}
|
RedisShardedPoolUtils.set("baseinstock:" + stock.getStockCode(), new Gson().toJson(o));
|
}
|
} catch (
|
Exception e) {
|
log.error("同步出错", e);
|
}
|
log.info("====={股票同步任务结束} =====", DateTimeUtil.dateToStr(new
|
Date()));
|
}
|
|
|
//每隔一个小时请求一次
|
@Scheduled(cron = "0 0 0/1 * * ?")
|
// @Scheduled(cron = "0/59 * * * * ?")
|
public void syncZSStockData() {
|
log.error("同步");
|
List<InStockBean> list = new ArrayList<>();
|
try {
|
try {
|
String result = HttpClientRequest.doGet(StockUtil.HTTP_API + "indices?country_id=14&key=" + StockUtil.KEY);
|
list.addAll(new Gson().fromJson(result, new TypeToken<List<InStockBean>>() {
|
}.getType()));
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
for (InStockBean o : list) {
|
Stock stock = stockMapper.findStockByCode(o.getId());
|
if (stock == null) {
|
stock = new Stock();
|
stock.setStockCode(o.getId());
|
stock.setStockName(o.getName());
|
stock.setStockType("in");
|
stock.setStockGid(o.getType());
|
stock.setStockSpell(o.getSymbol());
|
stock.setIsLock(0);
|
stock.setIsShow(0);
|
stock.setDataBase(0);
|
stock.setAddTime(new Date());
|
stockMapper.insert1(stock);
|
}
|
}
|
} catch (
|
Exception e) {
|
log.error("同步出错", e);
|
}
|
log.info("====={股票同步任务结束} =====", DateTimeUtil.dateToStr(new
|
Date()));
|
}
|
|
|
// @Scheduled(cron = "0/20 * * * * ?")
|
// public void sysnInstockData() {
|
// List<Stock> list = stockMapper.findStockList();
|
// if (list.size() > 0) {
|
// for (int i = 0; i < list.size(); i++) {
|
// try {
|
// Stock stock = list.get(i);
|
// StockDetailBean stockDetailBean = new Gson().fromJson(RedisShardedPoolUtils.get("instockDetail:" + stock.getId()),
|
// StockDetailBean.class);
|
// QueryWrapper<InStockBean> queryWrapper = new QueryWrapper<>();
|
// queryWrapper.eq("stock_code", stock.getStockCode());
|
// InStockBean in = inStockMapper.selectById(stock.getId());
|
// if (in == null) {
|
// in = new InStockBean();
|
// in.setId(stock.getId() + "");
|
// in.setChg(stockDetailBean.getPcp().replace("%", ""));
|
// in.setHigh(stockDetailBean.getHigh());
|
// in.setLow(stockDetailBean.getLow());
|
// in.setLastPairDecimal(stockDetailBean.getLast());
|
// inStockMapper.insert(in);
|
// } else {
|
// in.setId(stock.getId() + "");
|
// in.setChg(stockDetailBean.getPcp().replace("%", ""));
|
// in.setHigh(stockDetailBean.getHigh());
|
// in.setLow(stockDetailBean.getLow());
|
// in.setLastPairDecimal(stockDetailBean.getLast());
|
// inStockMapper.updateById(in);
|
// }
|
// } catch (Exception e) {
|
//
|
// }
|
//
|
// }
|
// }
|
// }
|
|
|
// @Scheduled(cron = "0/1 * * * * ?")
|
// public void sysnInQhstockData() {
|
// List<Stock> list = stockMapper.findQhStockList();
|
// for (Stock stock : list) {
|
// try {
|
// String result = getQhDatail(URLEncoder.encode(stock.getStockCode(), "UTF-8"));
|
// QhBean qhBean = new Gson().fromJson(result, QhBean.class);
|
// if (qhBean != null) {
|
// RedisShardedPoolUtils.set("qh:" + stock.getStockCode(), new Gson().toJson(qhBean));
|
// }
|
// } catch (Exception e) {
|
// e.printStackTrace();
|
// }
|
//
|
// }
|
// }
|
|
/**
|
* 同步IPO数据
|
*/
|
// @Scheduled(cron = "0/1 * * * * ?")
|
public void sysnNewStock() {
|
String ipoString = HttpClientRequest.doGet(StockUtil.HTTP_API + "/new-stock?key=" + StockUtil.KEY + "&country_id=14");
|
try {
|
List<IpoBean> ipoList = new Gson().fromJson(ipoString,new TypeToken<List<IpoBean>>(){}.getType());
|
for (IpoBean value:ipoList) {
|
QueryWrapper<StockSubscribe> queryWrapper = new QueryWrapper<>();
|
queryWrapper.eq("code",value.getPid());
|
StockSubscribe stockSubscribe = stockSubscribeMapper.selectOne(queryWrapper);
|
if(stockSubscribe == null){
|
stockSubscribe = new StockSubscribe();
|
stockSubscribe.setName(value.getCompany());
|
stockSubscribe.setCode(value.getPid());
|
stockSubscribe.setStockType(value.getExchange());
|
stockSubscribe.setPe(value.getIpoPrice());
|
stockSubscribe.setZt(1);
|
stockSubscribe.setListDate(new Date(value.getIopListing()*1000));
|
stockSubscribeMapper.insert(stockSubscribe);
|
}else{
|
stockSubscribe.setName(value.getCompany());
|
stockSubscribe.setCode(value.getPid());
|
stockSubscribe.setStockType(value.getExchange());
|
stockSubscribe.setPe(value.getIpoPrice());
|
stockSubscribe.setListDate(new Date(value.getIopListing()*1000));
|
stockSubscribeMapper.updateById(stockSubscribe);
|
}
|
}
|
}catch (Exception e){
|
log.info("获取新股数据错误 " +e.getMessage()+"数据为"+ipoString);
|
}
|
}
|
|
|
|
|
|
/***
|
* 每3分钟同步一次数据源到数据库
|
*
|
*/
|
@Scheduled(cron = "0 0/3 * * * ?")
|
public void sysnInstockData(){
|
List<Stock> list = stockMapper.findStockList();
|
if(list.size()>0){
|
for (int i = 0; i < list.size(); i++) {
|
try {
|
Stock stock = list.get(i);
|
StockDetailBean stockDetailBean = new Gson().fromJson(RedisShardedPoolUtils.get("instockDetail:"+stock.getStockCode()),StockDetailBean.class);
|
stock.setIncreaseRatio(new BigDecimal(stockDetailBean.getPcp().replace("%","")));
|
stockMapper.updateById(stock);
|
}catch (Exception e){
|
|
}
|
}
|
}
|
}
|
|
|
public static String getQhDatail(String code) {
|
String sina_result = "";
|
try {
|
sina_result = HttpClientRequest.doGet(StockUtil.HTTP_F_API + "getkine?symbol=" + code + "&cmd=quote&key=" + StockUtil.KEY);
|
} catch (Exception e) {
|
log.error("获取股票行情出错,错误信息 = {}", e);
|
}
|
return sina_result;
|
}
|
|
|
/**
|
* 获取印度股票的详情
|
*/
|
public static String getInStockDetail(String stockGid) {
|
String sina_result = "";
|
try {
|
HashMap<String, String> hashMap = new HashMap<>();
|
hashMap.put("pid", stockGid);
|
sina_result = HttpClientRequest.doPostJson(StockUtil.HTTP_API + "stock?&key=" + StockUtil.KEY, hashMap);
|
} catch (Exception e) {
|
log.error("获取股票行情出错,错误信息 = {}", e);
|
}
|
return sina_result;
|
}
|
|
|
/**
|
* 获取印度股票的详情
|
*/
|
public static String getQh(String stockGid) {
|
String sina_result = "";
|
try {
|
HashMap<String, String> hashMap = new HashMap<>();
|
hashMap.put("pid", stockGid);
|
sina_result = HttpClientRequest.doPostJson(StockUtil.HTTP_API + "stock?&key=" + StockUtil.KEY, hashMap);
|
} catch (Exception e) {
|
log.error("获取股票行情出错,错误信息 = {}", e);
|
}
|
return sina_result;
|
}
|
|
|
}
|