package com.nq.utils.task.stock; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.google.gson.Gson; import com.nq.dao.*; import com.nq.enums.EStockType; import com.nq.pojo.*; import com.nq.service.IMandatoryLiquidationService; import com.nq.service.IStockService; import com.nq.utils.http.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; @Autowired IMandatoryLiquidationService mandatoryLiquidationService; 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/3 * * * ?") public void syncINStockData() { loadAllStock(EStockType.US); loadAllStock(EStockType.MAS); } /** * 同步美国股票 * */ @Scheduled(cron = "0 0/30 * * * ?") 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/3 * * * * ?") public void sysnInstockData(){ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("stock_type",EStockType.SZHB.getCode()); List stockList = stockMapper.selectList(queryWrapper); for (int i = 0; i < stockList.size(); i++) { try { String hdataString = HttpClientRequest.doGet(EStockType.SZHB.stockUrl+"market/detail?symbol="+stockList.get(i).getStockCode()); HBData hbData = new Gson().fromJson(hdataString,HBData.class); StockRealTimeBean stockRealTimeBean = new StockRealTimeBean(); stockRealTimeBean.setLast(hbData.getTick().getClose()+""); stockRealTimeBean.setHigh(hbData.getTick().getHigh()+""); stockRealTimeBean.setPid(stockList.get(i).getStockCode()); stockRealTimeBean.setLow(hbData.getTick().getLow()+""); stockRealTimeBean.setBid(hbData.getTick().getOpen()+""); stockRealTimeBean.setLast_close("0.00"); BigDecimal sss = (new BigDecimal(hbData.getTick().getClose()).subtract(new BigDecimal(hbData.getTick().getOpen()))); sss = sss.divide(new BigDecimal(hbData.getTick().getOpen()),BigDecimal.ROUND_CEILING); stockRealTimeBean.setPcp(sss.setScale(2,BigDecimal.ROUND_UP).toString()); mandatoryLiquidationService.RealTimeDataProcess(EStockType.SZHB,stockRealTimeBean); }catch (Exception e){ } } } }