| | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; |
| | | import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; |
| | | import com.nq.common.ServerResponse; |
| | | import com.nq.dao.StockSubscribeMapper; |
| | | import com.nq.dao.UserAssetsMapper; |
| | | import com.nq.dao.UserMapper; |
| | | import com.nq.dao.UserStockSubscribeMapper; |
| | | import com.nq.pojo.StockSubscribe; |
| | | import com.nq.pojo.User; |
| | | import com.nq.pojo.UserAssets; |
| | | import com.nq.pojo.UserStockSubscribe; |
| | | import com.nq.service.IUserAssetsServices; |
| | | import com.nq.service.IUserPositionService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.http.client.utils.DateUtils; |
| | |
| | | |
| | | 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; |
| | |
| | | @Autowired |
| | | UserMapper userMapper; |
| | | |
| | | @Autowired |
| | | IUserAssetsServices userAssetsServices; |
| | | |
| | | private final Lock ballotLock = new ReentrantLock(); |
| | | |
| | | @Scheduled(cron = "0 0/10 * * * ?") |
| | | private final Lock subscriptionLock = new ReentrantLock(); |
| | | |
| | | 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)) { |
| | | List<String> codeList = stockSubscribes.stream().map(StockSubscribe::getCode).collect(Collectors.toList()); |
| | | List<UserStockSubscribe> userStockSubscribes = userStockSubscribeMapper.selectList(new LambdaQueryWrapper<UserStockSubscribe>() |
| | | .eq(UserStockSubscribe::getStatus, 4).in(UserStockSubscribe::getNewCode, codeList)); |
| | | .eq(UserStockSubscribe::getStatus, 5).in(UserStockSubscribe::getNewCode, codeList)); |
| | | //订单转持仓 |
| | | userStockSubscribes.forEach(f -> { |
| | | iUserPositionService.newStockToPosition(f.getId());//转持仓 |
| | | f.setStatus(5); |
| | | userStockSubscribeMapper.updateById(f); |
| | | // ServerResponse serverResponse = iUserPositionService.newStockToPosition(f.getId(),BigDecimal.ZERO);//转持仓 |
| | | // if(serverResponse.isSuccess()){ |
| | | f.setStatus(6); |
| | | userStockSubscribeMapper.updateById(f); |
| | | // }else{ |
| | | // 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(EStockType.MX.getCode(), f.getUserId()); |
| | | if(null != userAssets && userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) == 0){ |
| | | f.setStatus(4); |
| | | userStockSubscribeMapper.updateById(f); |
| | | } |
| | | }); |
| | | log.info("自动转已认缴--------->结束"); |
| | | } catch (Exception e) { |
| | | log.error("自动转已认缴定时任务发生异常", e); |
| | | } finally { |
| | | subscriptionLock.unlock(); |
| | | subscription.set(false); // 设置处理中标识为false |
| | | } |
| | | } else { |
| | | log.info("自动转已认缴定时任务--------->上次任务还未执行完成,本次任务忽略"); |
| | | } |
| | | }*/ |
| | | |
| | | } |