| | |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.concurrent.atomic.AtomicBoolean; |
| | | import java.util.concurrent.locks.Lock; |
| | | import java.util.concurrent.locks.ReentrantLock; |
| | | import java.util.stream.Collectors; |
| | | |
| | | |
| | | @Component |
| | |
| | | /** |
| | | * 同步系统所需要的股票 |
| | | */ |
| | | @Scheduled(cron = "0 0/10 * * * ?") |
| | | @Scheduled(cron = "0 0/1 * * * ?") |
| | | public void syncINStockData() { |
| | | if (syncINStockData.get()) { // 判断任务是否在处理中 |
| | | return; |
| | |
| | | if (syncINStockDataLock.tryLock()) { |
| | | try { |
| | | syncINStockData.set(true); // 设置处理中标识为true |
| | | loadAllStock(EStockType.IN); |
| | | loadAllStock(EStockType.JP); |
| | | } finally { |
| | | syncINStockDataLock.unlock(); |
| | | syncINStockData.set(false); // 设置处理中标识为false |
| | |
| | | break; |
| | | } |
| | | } |
| | | List<DataStockBean> filteredList = list.stream() |
| | | .collect(Collectors.groupingBy( |
| | | stock -> stock.getSymbol() + "|" + stock.getName() |
| | | )) |
| | | .values().stream() |
| | | .flatMap(group -> group.stream() |
| | | .filter(stock -> group.size() == 1 || "TSE".equals(stock.getType())) |
| | | .limit(1) // 每组最多取 1 条 |
| | | ) |
| | | .collect(Collectors.toList()); |
| | | list = filteredList; |
| | | for (DataStockBean o : list) { |
| | | Stock stock = stockMapper.findStockByCode(o.getId()); |
| | | if (stock == null) { |