| | |
| | | |
| | | private static final Logger log = LoggerFactory.getLogger(StockTask.class); |
| | | |
| | | private final AtomicBoolean syncMASStockData = new AtomicBoolean(false); |
| | | |
| | | private final Lock syncMASStockDataLock = new ReentrantLock(); |
| | | |
| | | private final AtomicBoolean syncINStockData = new AtomicBoolean(false); |
| | | private final AtomicBoolean syncSGPStockData = new AtomicBoolean(false); |
| | | |
| | | private final Lock syncINStockDataLock = new ReentrantLock(); |
| | | private final Lock syncSGPStockDataLock = new ReentrantLock(); |
| | | |
| | | /** |
| | | * 同步系统所需要的股票 |
| | | * 同步马来西亚系统所需要的股票 |
| | | */ |
| | | @Scheduled(cron = "0/5 * * * * ?") |
| | | public void syncINStockData() { |
| | | if (syncINStockData.get()) { // 判断任务是否在处理中 |
| | | @Scheduled(cron = "0 0/1 * * * ?") |
| | | public void syncMASStockData() { |
| | | if (syncMASStockData.get()) { // 判断任务是否在处理中 |
| | | return; |
| | | } |
| | | if (syncINStockDataLock.tryLock()) { |
| | | if (syncMASStockDataLock.tryLock()) { |
| | | try { |
| | | syncINStockData.set(true); // 设置处理中标识为true |
| | | loadAllStock(EStockType.IN); |
| | | syncMASStockData.set(true); // 设置处理中标识为true |
| | | loadAllStock(EStockType.MAS); |
| | | } finally { |
| | | syncINStockDataLock.unlock(); |
| | | syncINStockData.set(false); // 设置处理中标识为false |
| | | syncMASStockDataLock.unlock(); |
| | | syncMASStockData.set(false); // 设置处理中标识为false |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 同步美国股票 |
| | | * 新加坡系统所需要的股票 |
| | | */ |
| | | // @Scheduled(cron = "0 0/30 * * * ?") |
| | | public void loadStockCompanies() { |
| | | loadAllCompanies(); |
| | | @Scheduled(cron = "0/10 * * * * ?") |
| | | public void syncSGPStockData() { |
| | | if (syncSGPStockData.get()) { // 判断任务是否在处理中 |
| | | return; |
| | | } |
| | | if (syncSGPStockDataLock.tryLock()) { |
| | | try { |
| | | syncSGPStockData.set(true); // 设置处理中标识为true |
| | | loadAllStock(EStockType.SGP); |
| | | } finally { |
| | | syncSGPStockDataLock.unlock(); |
| | | syncSGPStockData.set(false); // 设置处理中标识为false |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 加载公司信息 |
| | |
| | | } catch ( |
| | | Exception e) { |
| | | log.error("同步出错", e); |
| | | } |
| | | } |
| | | |
| | | private final AtomicBoolean stockConstraint = new AtomicBoolean(false); |
| | | |
| | | /** |
| | | * 强制平仓 |
| | | */ |
| | | // @Scheduled(cron = "0/1 * * * * ?") |
| | | public void stockConstraint() { |
| | | if (stockConstraint.get()) { // 判断任务是否在处理中 |
| | | return; |
| | | } |
| | | if (stockConstraintLock.tryLock()) { |
| | | try { |
| | | stockConstraint.set(true); // 设置处理中标识为true |
| | | List<UserPosition> userPositions = userPositionMapper.selectList(new LambdaQueryWrapper<UserPosition>().isNull(UserPosition::getSellOrderId)); |
| | | if (CollectionUtils.isNotEmpty(userPositions)) { |
| | | userPositionService.stockConstraint(userPositions); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | log.error("强制平仓任务错误:" + e.getMessage()); |
| | | } finally { |
| | | stockConstraintLock.unlock(); |
| | | stockConstraint.set(false); // 设置处理中标识为false |
| | | } |
| | | } else { |
| | | log.info("强制平仓任务--------->上次任务还未执行完成,本次任务忽略"); |
| | | } |
| | | } |
| | | } |