| | |
| | | import com.nq.service.IUserPositionService; |
| | | import com.nq.service.impl.StockServiceImpl; |
| | | import com.nq.utils.PropertiesUtil; |
| | | import com.nq.utils.StringUtils; |
| | | import com.nq.utils.http.HttpClientRequest; |
| | | import com.nq.utils.http.HttpRequest; |
| | | import com.nq.utils.redis.RedisKeyUtil; |
| | |
| | | try { |
| | | syncINStockData.set(true); |
| | | |
| | | // 使用CompletableFuture并行执行任务 |
| | | CompletableFuture<Void> future1 = CompletableFuture.runAsync(() -> loadAllStock(EStockType.US), taskExecutor); |
| | | CompletableFuture<Void> future2 = CompletableFuture.runAsync(() -> loadAllStock(EStockType.MX), taskExecutor); |
| | | CompletableFuture<Void> future3 = CompletableFuture.runAsync(() -> syncIndices(EStockType.US), taskExecutor); |
| | | CompletableFuture<Void> future4 = CompletableFuture.runAsync(() -> syncIndices(EStockType.MX), taskExecutor); |
| | | // 1. 定义需要处理的所有股票类型(集中管理,新增类型只需添加到列表) |
| | | List<EStockType> stockTypes = Arrays.asList( |
| | | EStockType.US, |
| | | EStockType.HK, |
| | | EStockType.IN, |
| | | EStockType.TW |
| | | ); |
| | | |
| | | // 等待所有任务完成 |
| | | CompletableFuture.allOf(future1, future2, future3, future4).join(); |
| | | // 2. 批量创建所有异步任务 |
| | | List<CompletableFuture<Void>> futures = new ArrayList<>(); |
| | | for (EStockType type : stockTypes) { |
| | | // 添加loadAllStock任务 |
| | | futures.add(CompletableFuture.runAsync(() -> loadAllStock(type), taskExecutor)); |
| | | // 添加syncIndices任务 |
| | | futures.add(CompletableFuture.runAsync(() -> syncIndices(type), taskExecutor)); |
| | | } |
| | | |
| | | // 3. 等待所有任务完成(将List转换为数组传入allOf) |
| | | CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join(); |
| | | } catch (Exception e) { |
| | | log.error("同步股票数据出错", e); |
| | | } finally { |
| | |
| | | * 加载所有指数数据 |
| | | */ |
| | | private void syncIndices(EStockType eStockType) { |
| | | log.info("同步指数 数据 {}", eStockType.getCode()); |
| | | List<DataStockBean> list = new ArrayList<>(); |
| | | int totleStock = 1; |
| | | try { |
| | |
| | | stock = new Stock(); |
| | | } |
| | | stock.setStockCode(o.getId()); |
| | | stock.setStockName(o.getName()); |
| | | stock.setStockName(StringUtils.trim(o.getName())); |
| | | stock.setStockType(eStockType.getCode()); |
| | | //指数数据类型 |
| | | stock.setStockGid(EConfigKey.INDICES.getCode()); |
| | |
| | | stock.setDataBase(0); |
| | | stock.setAddTime(new Date()); |
| | | updateStockList.add(stock); |
| | | /*if (stock.getId() == null) { |
| | | stockMapper.insert1(stock); |
| | | } else { |
| | | stockMapper.updateById(stock); |
| | | }*/ |
| | | RedisKeyUtil.setCaCheKeyBaseStock(eStockType, o); |
| | | |
| | | /*StockRealTimeBean stockRealTimeBean = new StockRealTimeBean(); |
| | | stockRealTimeBean.setPid(o.getId()); |
| | | stockRealTimeBean.setLast(o.getLast()); |
| | | stockRealTimeBean.setHigh(o.getHigh()); |
| | | stockRealTimeBean.setLow(o.getLow()); |
| | | stockRealTimeBean.setPc(o.getChg()); |
| | | stockRealTimeBean.setPcp(o.getChgPct()+ "%"); |
| | | stockRealTimeBean.setTime(o.getTime()); |
| | | RedisKeyUtil.setCacheRealTimeStock(eStockType, stockRealTimeBean);*/ |
| | | RedisKeyUtil.setCaCheKeyBaseStock(eStockType, o); |
| | | } |
| | | stockRepository.saveAll(updateStockList); |
| | | cacheKData(eStockType.getCode(), list); |
| | | log.info("同步指数 数据 成功 {} 总共同步数据 {}", eStockType.getCode(), list.size()); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | log.error("同步指数列表出现异常: {}", e.getMessage()); |
| | | log.error("同步指数列表出现异常: {}", eStockType.getCode()); |
| | | } |
| | | } |
| | | |
| | |
| | | * 同步指数股票后缓存k线图 |
| | | */ |
| | | public void cacheKData(String stockType, List<DataStockBean> list) { |
| | | String usCodeList = PropertiesUtil.getProperty("us_home_indices_code"); |
| | | String mxCodeList = PropertiesUtil.getProperty("mx_home_indices_code"); |
| | | StringBuilder codeList = new StringBuilder(); |
| | | codeList.append(PropertiesUtil.getProperty("us_home_indices_code")); |
| | | codeList.append(PropertiesUtil.getProperty("hk_home_indices_code")); |
| | | codeList.append(PropertiesUtil.getProperty("in_home_indices_code")); |
| | | codeList.append(PropertiesUtil.getProperty("tw_home_indices_code")); |
| | | for (DataStockBean dataStockBean : list) { |
| | | //缓存首页指数k线图 |
| | | if (usCodeList.contains(dataStockBean.getId()) || mxCodeList.contains(dataStockBean.getId())) { |
| | | if (codeList.toString().contains(dataStockBean.getId())) { |
| | | // 获取K线数据 |
| | | Object kData = istockService.getKData(dataStockBean.getId(), "D", stockType); |
| | | if (kData != null) { |
| | |
| | | .orElse(null); |
| | | 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()); |
| | | } |
| | | stock.setStockSpell(o.getSymbol()); |
| | | stock.setIsLock(0); |
| | | stock.setIsShow(0); |
| | | stock.setDataBase(0); |
| | | stock.setAddTime(new Date()); |
| | | //stockMapper.insert1(stock); |
| | | } else { |
| | | 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()); |
| | | } |
| | | stock.setStockSpell(o.getSymbol()); |
| | | stock.setIsLock(0); |
| | | stock.setIsShow(0); |
| | | stock.setDataBase(0); |
| | | stock.setAddTime(new Date()); |
| | | //stockMapper.updateById(stock); |
| | | } |
| | | stock.setStockCode(o.getId()); |
| | | stock.setStockName(StringUtils.trim(o.getName())); |
| | | stock.setStockType(eStockType.getCode()); |
| | | if (o.getType() == null) { |
| | | stock.setStockGid(eStockType.getCode()); |
| | | } else { |
| | | stock.setStockGid(o.getType()); |
| | | } |
| | | stock.setStockSpell(o.getSymbol()); |
| | | stock.setIsLock(0); |
| | | stock.setIsShow(0); |
| | | stock.setDataBase(0); |
| | | stock.setAddTime(new Date()); |
| | | updateStockList.add(stock); |
| | | RedisKeyUtil.setCaCheKeyBaseStock(eStockType, o); |
| | | } |