| | |
| | | package com.nq.utils.task.stock; |
| | | |
| | | import cn.hutool.json.JSONUtil; |
| | | import com.alibaba.fastjson2.JSONObject; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; |
| | | 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.service.IUserPositionService; |
| | | import com.nq.utils.http.HttpClientRequest; |
| | | import com.nq.utils.redis.RedisKeyUtil; |
| | | import com.nq.utils.redis.RedisShardedPoolUtils; |
| | | import com.nq.utils.stock.BuyAndSellUtils; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.concurrent.locks.Lock; |
| | | import java.util.concurrent.locks.ReentrantLock; |
| | | |
| | | |
| | | @Component |
| | |
| | | IStockService stockService; |
| | | @Autowired |
| | | StockMapper stockMapper; |
| | | |
| | | @Autowired |
| | | IUserPositionService userPositionService; |
| | | |
| | | @Autowired |
| | | UserPositionMapper userPositionMapper; |
| | | |
| | | private final Lock stockConstraintLock = new ReentrantLock(); |
| | | |
| | | |
| | | |
| | | @Autowired |
| | |
| | | /** |
| | | * 同步系统所需要的股票 |
| | | * */ |
| | | @Scheduled(cron = "0 0/3 * * * ?") |
| | | @Scheduled(cron = "0 0 0/2 * * ?") |
| | | public void syncINStockData() { |
| | | loadAllStock(EStockType.US); |
| | | loadAllStock(EStockType.MAS); |
| | | loadAllStock(EStockType.IN); |
| | | // loadAllStock(EStockType.HK); |
| | | } |
| | | |
| | |
| | | /** |
| | | * 同步美国股票 |
| | | * */ |
| | | @Scheduled(cron = "0 0/30 * * * ?") |
| | | // @Scheduled(cron = "0 0/30 * * * ?") |
| | | public void loadStockCompanies(){ |
| | | loadAllCompanies(); |
| | | } |
| | |
| | | log.error("同步出错", e); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 强制平仓 |
| | | */ |
| | | // @Scheduled(cron = "0/1 * * * * ?") |
| | | public void stockConstraint(){ |
| | | if (stockConstraintLock.tryLock()) { |
| | | log.info("强制平仓任务:--------->开始"); |
| | | try { |
| | | 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(); |
| | | log.info("强制平仓任务:--------->结束"); |
| | | } |
| | | } else { |
| | | log.info("强制平仓任务--------->上次任务还未执行完成,本次任务忽略"); |
| | | } |
| | | } |
| | | } |