| | |
| | | import com.nq.dao.UserAssetsMapper; |
| | | import com.nq.dao.UserMapper; |
| | | import com.nq.dao.UserStockSubscribeMapper; |
| | | import com.nq.enums.EStockType; |
| | | import com.nq.pojo.StockSubscribe; |
| | | import com.nq.pojo.User; |
| | | import com.nq.pojo.UserAssets; |
| | |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.List; |
| | | import java.util.concurrent.atomic.AtomicBoolean; |
| | | import java.util.concurrent.locks.Lock; |
| | | import java.util.concurrent.locks.ReentrantLock; |
| | | import java.util.stream.Collectors; |
| | |
| | | |
| | | private final Lock subscriptionLock = new ReentrantLock(); |
| | | |
| | | @Scheduled(cron = "0 0/10 * * * ?") |
| | | private final AtomicBoolean ballot = new AtomicBoolean(false); |
| | | |
| | | |
| | | @Scheduled(cron = "0 0/1 * * * ?") |
| | | public void ballot() { |
| | | if (ballot.get()) { // 判断任务是否在处理中 |
| | | return; |
| | | } |
| | | if (ballotLock.tryLock()) { |
| | | try { |
| | | log.info("新股上市转持仓定时任务--------->开始"); |
| | | ballot.set(true); // 设置处理中标识为true |
| | | // log.info("新股上市转持仓定时任务--------->开始"); |
| | | log.info("新股上市定时任务--------->开始"); |
| | | List<StockSubscribe> stockSubscribes = stockSubscribeMapper.selectList(new LambdaQueryWrapper<StockSubscribe>() |
| | | .lt(StockSubscribe::getListDate, DateUtil.date())); |
| | | if (CollectionUtils.isNotEmpty(stockSubscribes)) { |
| | |
| | | .eq(UserStockSubscribe::getStatus, 4).in(UserStockSubscribe::getNewCode, codeList)); |
| | | //订单转持仓 |
| | | userStockSubscribes.forEach(f -> { |
| | | ServerResponse serverResponse = iUserPositionService.newStockToPosition(f.getId());//转持仓 |
| | | ServerResponse serverResponse = iUserPositionService.newStockToPosition(f.getId(),BigDecimal.ZERO);//转持仓 |
| | | if(serverResponse.isSuccess()){ |
| | | f.setStatus(5); |
| | | userStockSubscribeMapper.updateById(f); |
| | | }else{ |
| | | log.info("新股上市转持仓失败申购订单id:"+f.getId()+",失败原因:"+serverResponse.getMsg()); |
| | | log.info("新股上市定时任务失败申购订单id:"+f.getId()+",失败原因:"+serverResponse.getMsg()); |
| | | } |
| | | }); |
| | | } |
| | | log.info("新股上市转持仓定时任务--------->结束"); |
| | | log.info("新股上市定时任务--------->结束"); |
| | | } catch (Exception e) { |
| | | log.error("新股上市转持仓定时任务发生异常", e); |
| | | log.error("新股上市定时任务发生异常", e); |
| | | } finally { |
| | | ballotLock.unlock(); |
| | | ballot.set(false); // 设置处理中标识为false |
| | | } |
| | | } else { |
| | | log.info("新股上市转持仓定时任务--------->上次任务还未执行完成,本次任务忽略"); |
| | | log.info("新股上市定时任务--------->上次任务还未执行完成,本次任务忽略"); |
| | | } |
| | | } |
| | | |
| | | private final AtomicBoolean subscription = new AtomicBoolean(false); |
| | | |
| | | @Scheduled(cron = "0 0/1 * * * ?") |
| | | public void subscription() { |
| | | if (subscription.get()) { // 判断任务是否在处理中 |
| | | return; |
| | | } |
| | | if (subscriptionLock.tryLock()) { |
| | | try { |
| | | subscription.set(true); // 设置处理中标识为true |
| | | log.info("自动转已认缴--------->开始"); |
| | | List<UserStockSubscribe> userStockSubscribes = userStockSubscribeMapper.selectList(new LambdaQueryWrapper<UserStockSubscribe>() |
| | | .eq(UserStockSubscribe::getStatus, 3)); |
| | | userStockSubscribes.forEach(f->{ |
| | | UserAssets userAssets = userAssetsServices.assetsByTypeAndUserId("IN",f.getUserId()); |
| | | UserAssets userAssets = userAssetsServices.assetsByTypeAndUserId(EStockType.getDefault().getCode(), f.getUserId()); |
| | | if(null != userAssets && userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) == 0){ |
| | | f.setStatus(4); |
| | | userStockSubscribeMapper.updateById(f); |
| | |
| | | log.error("自动转已认缴定时任务发生异常", e); |
| | | } finally { |
| | | subscriptionLock.unlock(); |
| | | subscription.set(false); // 设置处理中标识为false |
| | | } |
| | | } else { |
| | | log.info("自动转已认缴定时任务--------->上次任务还未执行完成,本次任务忽略"); |