package com.nq.utils.task.stock; import com.alibaba.fastjson2.JSONObject; import com.google.gson.Gson; import com.nq.dao.*; import com.nq.enums.EStockType; import com.nq.pojo.*; import com.nq.service.IStockService; import com.nq.utils.HttpClientRequest; import com.nq.utils.redis.RedisKeyUtil; import com.nq.utils.stock.BuyAndSellUtils; 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 java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; @Component public class StockTask { @Autowired IStockService stockService; @Autowired StockMapper stockMapper; 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 0/1 * * ?") public void syncINStockData() { loadAllStock(EStockType.IN); } /** * 同步美国股票 * */ @Scheduled(cron = "0 0 0/1 * * ?") public void synsUSStockData(){ loadAllStock(EStockType.US); } /** * 同步美国股票 * */ @Scheduled(cron = "0 0/5 * * * ?") public void loadStockCompanies(){ loadAllCompanies(); } /** * 加载公司信息 * */ public void loadAllCompanies(){ List list = stockMapper.findStockList(); for (int i = 0; i list = new ArrayList<>(); int totleStock = 1; int page =0; try { while (totleStock>list.size()){ try{ String result = HttpClientRequest.doGet(eStockType.stockUrl+"list?country_id="+eStockType.getContryId()+"&size=1000&page="+page+"&key="+eStockType.stockKey); ReponseBase reponseBase = new Gson().fromJson(result,ReponseBase.class); list.addAll(reponseBase.getData()); page++; totleStock = reponseBase.getTotal(); }catch (Exception e){ e.printStackTrace(); break; } } for (DataStockBean o : list) { Stock stock = stockMapper.findStockByCode(o.getId()); if (stock == null) { stock = new Stock(); stock.setStockCode(o.getId()); stock.setStockName(o.getName()); stock.setStockType(eStockType.getCode()); if(o.getType() == null){ stock.setStockGid(eStockType.getCode()); }else{ stock.setStockGid(o.getType()); } if(eStockType.getCode().equals("US")){ stock.setStockSpell(o.getSymbol()); }else{ stock.setStockSpell(o.getTicker()); } stock.setIsLock(0); stock.setIsShow(0); stock.setDataBase(0); stock.setAddTime(new Date()); stockMapper.insert1(stock); } RedisKeyUtil.setCaCheKeyBaseStock(eStockType,o); } log.info("同步股票 数据 成功 {} 总共同步数据 {}",eStockType.getCode(),list.size()); } catch ( Exception e) { log.error("同步出错", e); } } /*** * 每3分钟同步一次数据源到数据库 * */ @Scheduled(cron = "0 0/1 * * * ?") public void sysnInstockData(){ List list = stockMapper.findStockList(); if(list.size()>0){ for (int i = 0; i < list.size(); i++) { try { Stock stock = list.get(i); StockRealTimeBean stockDetailBean = RedisKeyUtil.getCacheRealTimeStock(stock); stock.setIncreaseRatio(new BigDecimal(stockDetailBean.getPcp().replace("%",""))); stockMapper.updateById(stock); }catch (Exception e){ } } } } }