package com.nq.utils.task.stock; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.nq.dao.StockMapper; import com.nq.pojo.Stock; import com.nq.service.IStockService; import com.nq.service.IUserPositionService; import com.nq.utils.DateTimeUtil; import com.nq.utils.HttpClientRequest; import com.nq.utils.PropertiesUtil; import com.nq.utils.redis.RedisShardedPoolUtils; import com.nq.utils.stock.BuyAndSellUtils; import com.nq.utils.stock.lide.LiDeDataUtils; import com.nq.utils.stock.pinyin.GetPyByChinese; 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 org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.Date; //import org.springframework.scheduling.annotation.Scheduled; @Component public class StockTask { @Autowired IStockService stockService; @Autowired StockMapper stockMapper; @Autowired IUserPositionService userPositionService; 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 18 * * ?") // @Scheduled(cron = "0 * * * * ?") public void synchronizePrice(){ this.userPositionService.synchronizePrice(); } // /*股票走勢圖定時任務-15*/ // @Scheduled(cron = "0 0/1 9-15 * * ?") // public void z1() { // boolean am = false; // boolean 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)); // if (am || pm) { // log.info("=====z1={} =====", DateTimeUtil.dateToStr(new Date())); // this.stockService.z1(); // log.info("=====z1={} =====", DateTimeUtil.dateToStr(new Date())); // } // } // // @Scheduled(cron = "0 0/1 9-15 * * ?") // public void z11() { // boolean am = false; // boolean 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)); // if (am || pm) { // log.info("====z11={} =====", DateTimeUtil.dateToStr(new Date())); // this.stockService.z11(); // log.info("====z11={} =====", DateTimeUtil.dateToStr(new Date())); // } // } // // @Scheduled(cron = "0 0/1 9-15 * * ?") // public void z12() { // boolean am = false; // boolean 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("z12 am = {} pm = {}", Boolean.valueOf(am), Boolean.valueOf(pm)); // if (am || pm) { // log.info("====z12={} =====", DateTimeUtil.dateToStr(new Date())); // this.stockService.z12(); // log.info("====z12={} =====", DateTimeUtil.dateToStr(new Date())); // } // } // // @Scheduled(cron = "0 0/1 9-15 * * MON-FRI") // public void z2() { // boolean am = false; // boolean 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)); // if (am || pm) { // log.info("=====z2{} =====", DateTimeUtil.dateToStr(new Date())); // this.stockService.z2(); // log.info("=====z2{} =====", DateTimeUtil.dateToStr(new Date())); // } // } // // @Scheduled(cron = "0 0/1 9-15 * * MON-FRI") // public void z21() { // boolean am = false; // boolean 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("z21-am = {} pm = {}", Boolean.valueOf(am), Boolean.valueOf(pm)); // if (am || pm) { // log.info("===z21=={} =====", DateTimeUtil.dateToStr(new Date())); // this.stockService.z21(); // log.info("===z21=={} =====", DateTimeUtil.dateToStr(new Date())); // } // } // // @Scheduled(cron = "0 0/1 9-15 * * MON-FRI") // public void z22() { // boolean am = false; // boolean 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("z22-am = {} pm = {}", Boolean.valueOf(am), Boolean.valueOf(pm)); // if (am || pm) { // log.info("====z22={} =====", DateTimeUtil.dateToStr(new Date())); // this.stockService.z22(); // log.info("====z22={} =====", DateTimeUtil.dateToStr(new Date())); // } // } // // @Scheduled(cron = "0 0/1 9-15 * * MON-FRI") // public void z3() { // boolean am = false; // boolean 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)); // if (am || pm) { // log.info("====z3={} =====", DateTimeUtil.dateToStr(new Date())); // this.stockService.z3(); // log.info("====z3={} =====", DateTimeUtil.dateToStr(new Date())); // } // } // // @Scheduled(cron = "0 0/1 9-15 * * MON-FRI") // public void z31() { // boolean am = false; // boolean 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("z31-am = {} pm = {}", Boolean.valueOf(am), Boolean.valueOf(pm)); // if (am || pm) { // log.info("====z31={} =====", DateTimeUtil.dateToStr(new Date())); // this.stockService.z31(); // log.info("===z31=={} =====", DateTimeUtil.dateToStr(new Date())); // } // } // // @Scheduled(cron = "0 0/1 9-15 * * MON-FRI") // public void z32() { // boolean am = false; // boolean 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("z32-am = {} pm = {}", Boolean.valueOf(am), Boolean.valueOf(pm)); // if (am || pm) { // log.info("====z32={} =====", DateTimeUtil.dateToStr(new Date())); // this.stockService.z32(); // log.info("====z32={} =====", DateTimeUtil.dateToStr(new Date())); // } // } // // @Scheduled(cron = "0 0/1 9-15 * * MON-FRI") // public void z4() { // boolean am = false; // boolean 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)); // if (am || pm) { // log.info("====z4={} =====", DateTimeUtil.dateToStr(new Date())); // this.stockService.z4(); // log.info("====z4={} =====", DateTimeUtil.dateToStr(new Date())); // } // } // // @Scheduled(cron = "0 0/1 9-15 * * MON-FRI") // public void z41() { // boolean am = false; // boolean 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("z41-am = {} pm = {}", Boolean.valueOf(am), Boolean.valueOf(pm)); // if (am || pm) { // log.info("====z41={} =====", DateTimeUtil.dateToStr(new Date())); // this.stockService.z41(); // log.info("====z41={} =====", DateTimeUtil.dateToStr(new Date())); // } // } // // @Scheduled(cron = "0 0/1 9-15 * * MON-FRI") // public void z42() { // boolean am = false; // boolean 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("z42-am = {} pm = {}", Boolean.valueOf(am), Boolean.valueOf(pm)); // if (am || pm) { // log.info("====z42={} =====", DateTimeUtil.dateToStr(new Date())); // this.stockService.z42(); // log.info("===z42=={} =====", DateTimeUtil.dateToStr(new Date())); // } // } //每天24点执行 同步股票数据 查漏补缺 @Scheduled(cron = "0 0 9 * * ?") // @Scheduled(cron = "0 0/2 * * * ?") // @Scheduled(cron = "0/1 * * * * ?") // @Scheduled(cron = "0 7 0 * * ?") public void syncStockData() throws InterruptedException { /** * sh_a https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeData?page=1&num=80&sort=symbol&asc=1&node=sh_a&symbol=&_s_r_a=init * sz_a https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeData?page=1&num=80&sort=symbol&asc=1&node=sz_a&symbol=&_s_r_a=init * hs_bjs https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeData?page=1&num=80&sort=symbol&asc=1&node=hs_bjs&symbol=&_s_r_a=init * cyb https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeData?page=1&num=80&sort=symbol&asc=1&node=cyb&symbol=&_s_r_a=init * kcb https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeData?page=1&num=80&sort=symbol&asc=1&node=kcb&symbol=&_s_r_a=init * 总条数 https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeStockCount?node=hs_bjs */ log.info("====={股票同步任务开启} =====", DateTimeUtil.dateToStr(new Date())); String[] keys = {"sh_a", "sz_a", "hs_bjs", "cyb", "kcb"}; for (String key : keys) { StringBuilder sb = new StringBuilder(); int pageNumber = 34; String num = null; try { num = HttpClientRequest.doGet("https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeStockCount?node=" + key); } catch (Exception e) { log.error("计算页码请求出错", e); Thread.sleep(30000L); num = HttpClientRequest.doGet("https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeStockCount?node=" + key); } if (num != null) { num = num.substring(1, num.length() - 1); int total = Integer.parseInt(num); if (total % 80 == 0) { pageNumber = total / 80; } else { pageNumber = total / 80 + 1; } } try { String result = null; try { result = HttpClientRequest.doGet("https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeData?page=" + pageNumber + "&num=80&sort=symbol&asc=0&node=" + key + "&symbol=&_s_r_a=init"); } catch (Exception e) { log.error("请求失败" + e); Thread.sleep(30000L); result = HttpClientRequest.doGet("https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeData?page=" + pageNumber + "&num=80&sort=symbol&asc=0&node=" + key + "&symbol=&_s_r_a=init"); } JSONArray hsArray = JSONObject.parseArray(result); // log.info("类型"+key +"数量"+hsArray.size()+"页码"+pageNumber+"内容"+hsArray); for (Object o : hsArray) { JSONObject hsjson = JSONObject.parseObject(o.toString()); // log.info("代碼"+hsjson.getString("code")); Stock stock = stockMapper.findStockByCode(hsjson.getString("code")); // log.info("stock = {}", stock); if (stock == null) { stock = new Stock(); String type = hsjson.getString("symbol").substring(0, 2); String spell = GetPyByChinese.converterToFirstSpell(hsjson.getString("name")); stock.setStockCode(hsjson.getString("code")); stock.setStockName(hsjson.getString("name")); stock.setStockType(type); stock.setStockGid(hsjson.getString("symbol")); stock.setStockSpell(spell); stock.setIsLock(0); stock.setIsShow(0); stock.setDataBase(0); stock.setAddTime(new Date()); stockMapper.insert1(stock); sb.append("新增股票:").append(stock.getStockName()).append(stock.getStockCode()).append("/n"); } if ("cyb".equals(key) && stock.getStockPlate() == null) { stock.setStockPlate("创业"); stockMapper.updateById(stock); } else if ("kcb".equals(key) && stock.getStockPlate() == null) { stock.setStockPlate("科创"); stockMapper.updateById(stock); } } } catch (Exception e) { log.error("同步出错", e); } log.info(key + "股新增股票:{}", sb.toString()); } log.info("====={股票同步任务结束} =====", DateTimeUtil.dateToStr(new Date())); } //每天24点执行 同步股票数据 查漏补缺 // @Scheduled(cron = "0 0/2 * * * ?") // public void syncStockData() throws InterruptedException { // // log.info("====={股票同步任务开启} =====", DateTimeUtil.dateToStr(new Date())); // String[] keys = {"sh_a", "sz_a", "hs_bjs", "cyb", "kcb"}; // for (String key : keys) { // StringBuilder sb = new StringBuilder(); // int pageNumber = 34; // String num = null; // try { // num = HttpClientRequest.doGet("https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeStockCount?node=" + key); // } catch (Exception e) { // log.error("计算页码请求出错", e); // Thread.sleep(30000L); // num = HttpClientRequest.doGet("https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeStockCount?node=" + key); // } // if (num != null) { // num = num.substring(1, num.length() - 1); // int total = Integer.parseInt(num); // if (total % 80 == 0) { // pageNumber = total / 80; // } else { // pageNumber = total / 80 + 1; // } // } // // for (int i = 1; i <= pageNumber; i++) { // try { // String result = null; // try { // result = HttpClientRequest.doGet("https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeData?page=" + i + "&num=80&sort=symbol&asc=1&node=" + key + "&symbol=&_s_r_a=init"); // } catch (Exception e) { // log.error("请求失败" + e); // Thread.sleep(30000L); // result = HttpClientRequest.doGet("https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeData?page=" + i + "&num=80&sort=symbol&asc=1&node=" + key + "&symbol=&_s_r_a=init"); // } // // JSONArray hsArray = JSONObject.parseArray(result); //// log.info("类型"+key +"数量"+hsArray.size()+"页码"+pageNumber+"内容"+hsArray); // for (Object o : hsArray) { // JSONObject hsjson = JSONObject.parseObject(o.toString()); //// log.info("代碼"+hsjson.getString("code")); // Stock stock = stockMapper.findStockByCode(hsjson.getString("code")); //// log.info("stock = {}", stock); // if (stock == null) { // stock = new Stock(); // String type = hsjson.getString("symbol").substring(0, 2); // String spell = GetPyByChinese.converterToFirstSpell(hsjson.getString("name")); // stock.setStockCode(hsjson.getString("code")); // stock.setStockName(hsjson.getString("name")); // stock.setStockType(type); // stock.setStockGid(hsjson.getString("symbol")); // stock.setStockSpell(spell); // stock.setIsLock(0); // stock.setIsShow(0); // stock.setDataBase(0); // stock.setAddTime(new Date()); // stockMapper.insert1(stock); // sb.append("新增股票:").append(stock.getStockName()).append(stock.getStockCode()).append("/n"); // } // // if ("cyb".equals(key) && stock.getStockPlate() == null) { // stock.setStockPlate("创业"); // stockMapper.updateById(stock); // } else if ("kcb".equals(key) && stock.getStockPlate() == null) { // stock.setStockPlate("科创"); // stockMapper.updateById(stock); // } // // } // // } catch (Exception e) { // log.error("同步出错", e); // // // } // log.info(key + "股新增股票:{}", sb.toString()); // } // } // log.info("====={股票同步任务结束} =====", DateTimeUtil.dateToStr(new Date())); // // } @Scheduled(cron = "0 0 16 * * ?") public void stockTask() throws InterruptedException { this.syncStockData(); } /** * 获取涨停板数据 */ //@Scheduled(cron = "0 0/3 9-15 * * MON-FRI") public void zsTask() { boolean am = false; boolean pm = false; try { am = BuyAndSellUtils.isTransTime("9:29", "11:31"); pm = BuyAndSellUtils.isTransTime("12:59", "15:00"); log.info("z42-am = {} pm = {}", Boolean.valueOf(am), Boolean.valueOf(pm)); if (am || pm) { LiDeDataUtils.pullRankData(); } } catch (Exception e) { log.error("= {}", e); } } /** * 拉取立德全量数据 */ @Scheduled(cron = "0/19 * 9-15 * * MON-FRI") public void pullLideDataTask() { boolean am = false; boolean pm = false; try { am = BuyAndSellUtils.isTransTime("9:15", "11:31"); pm = BuyAndSellUtils.isTransTime("12:59", "15:00"); log.info("z42-am = {} pm = {}", Boolean.valueOf(am), Boolean.valueOf(pm)); if (am || pm) { log.info("立德数据拉取====={} =====", DateTimeUtil.dateToStr(new Date())); LiDeDataUtils.pullData(); log.info("立德数据拉取====={} =====", DateTimeUtil.dateToStr(new Date())); } } catch (Exception e) { log.error("= {}", e); } } /** * 拉取立德新三板全量数据 */ @Scheduled(cron = "0/28 * 9-15 * * MON-FRI") public void pullLideXSBDataTask() { boolean am = false; boolean pm = false; try { am = BuyAndSellUtils.isTransTime("9:15", "11:31"); pm = BuyAndSellUtils.isTransTime("12:59", "15:00"); log.info("z42-am = {} pm = {}", Boolean.valueOf(am), Boolean.valueOf(pm)); if (am || pm) { log.info("立德数据拉取====={} =====", DateTimeUtil.dateToStr(new Date())); LiDeDataUtils.pullXSBData(); log.info("立德数据拉取====={} =====", DateTimeUtil.dateToStr(new Date())); } } catch (Exception e) { log.error("= {}", e); } } /** * 美股港股同步 */ // @Scheduled(cron = "0 5 0 * * ?") public void syncOtherStockData() { String[] keys = {"hk", "us"}; long now = System.currentTimeMillis(); String url; String result = null; com.alibaba.fastjson2.JSONObject json; for (String key : keys) { StringBuilder sb = new StringBuilder(); if ("hk".equals(key)) { url = PropertiesUtil.getProperty("hk.stock.url") + now; result = HttpClientRequest.doGet(url); json = com.alibaba.fastjson2.JSONObject.parseObject(result); } else { url = PropertiesUtil.getProperty("us.stock.url") + now; result = HttpClientRequest.doGet(url); String da = result.substring(result.indexOf("(") + 1, result.indexOf(");")); json = com.alibaba.fastjson2.JSONObject.parseObject(da); } ArrayList diff = (ArrayList) json.getJSONObject("data").get("diff"); // log.info("开始存库"); for (Object o : diff) { com.alibaba.fastjson2.JSONObject data = (com.alibaba.fastjson2.JSONObject) o; String stockCode = data.getString("f12"); Stock stock = stockMapper.selectOne(new QueryWrapper().eq("stock_code", stockCode)); if (stock == null) { stock = new Stock(); String spell = GetPyByChinese.converterToFirstSpell(data.getString("f14")); stock.setStockCode(data.getString("f12")); stock.setStockName(data.getString("f14")); stock.setStockType(key); stock.setStockSpell(spell); stock.setStockGid(key + data.getString("f12")); stock.setIsLock(0); stock.setIsShow(0); stock.setAddTime(new Date()); stockMapper.insert(stock); sb.append("新增股票:").append(stock.getStockName()).append(stock.getStockCode()).append("/n"); } } log.info(key + "股新增股票:{}", sb.toString()); } } }