package com.zy.asrs.task; import com.core.common.Cools; import com.zy.asrs.entity.Order; import com.zy.asrs.service.ApiLogService; import com.zy.asrs.service.OrderService; import com.zy.asrs.task.handler.OrderSyncHandler; import com.zy.common.entity.Parameter; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * Created by vincent on 2020/7/7 */ @Slf4j @Component public class OrderSyncScheduler { @Autowired private OrderSyncHandler orderSyncHandler; @Autowired private OrderService orderService; @Autowired private ApiLogService apiLogService; @Scheduled(cron = "0 0 1 * * ? ") public void clearApiLog(){ try { apiLogService.clearWeekBefore(); } catch (Exception e) { log.error("第三方接口日志自动清除失败(范围:一周之前", e); } } @Resource private ThreadPoolTaskExecutor orderThreadPool; // @Scheduled(cron = "0/5 * * * * ? ") // 10分钟执行一次 @Scheduled(cron = "0 0/10 * * * ?") public void completeAndReport() { String erpReport = Parameter.get().getErpReport(); if (!Cools.isEmpty(erpReport) && erpReport.equals("true")) { List orders = orderService.selectComplete(); if (orders.isEmpty()) { return; } // 按单据类型分组 Map> groupedOrders = orders.stream() .collect(Collectors.groupingBy(order -> { String type = order.getDocType$(); switch (type) { case "采购订单": case "采购到货单": case "委外订单": case "委外到货单": case "到货单": case "来料检验单": return "采购入库"; case "销售发货单": return "销售出库"; case "生产订单": case "检验单": return "产成品入库单"; case "领料申请单": return "材料出库单"; default: return type; } })); for (Map.Entry> map : groupedOrders.entrySet()) { orderThreadPool.submit(() -> { orderSyncHandler.startNew(map); }); } } } }