package com.yami.trading.huobi.task.contract; import java.util.List; import java.util.Set; import java.util.stream.Collectors; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Component; import com.yami.trading.bean.contract.domain.ContractOrder; import com.yami.trading.common.config.ThreadPool; import com.yami.trading.common.util.ThreadUtils; import com.yami.trading.service.contract.ContractOrderCalculationService; import com.yami.trading.service.contract.ContractOrderService; import lombok.extern.slf4j.Slf4j; @Slf4j @Component public class ContractOrderCalculationJob implements Runnable { @Autowired private ContractOrderService contractOrderService; @Autowired private ContractOrderCalculationService contractOrderCalculationService; public void start() { ThreadPool.getFixedTaskExecutor(1,"ContractOrderCalculationJob").execute(this); } @Override public void run() { log.info("持仓单盈亏计算线程启动!"); ThreadPoolTaskExecutor taskExecutor=ThreadPool.getApplicationThreadPool(); while(!Thread.interrupted()) { try { // 优化 TODO List list = contractOrderService.findSubmitted(); Set orderNos = list.stream().map(order -> order.getOrderNo()).collect(Collectors.toSet()); for (String orderNo : orderNos) { taskExecutor.execute(() -> { try { contractOrderCalculationService.saveCalculation(orderNo); } catch (Throwable e) { log.error("error:", e); } }); } } catch (Throwable e) { e.printStackTrace(); log.error("run fail", e); } finally { ThreadUtils.sleep(3000); } } } }