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 * * * * ? ") // @Scheduled(cron = "0 0/2 * * * ?") // 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 "成品出库单": return "销售发货单"; case "成品入库单": return "生产订单"; case "领料单": return "领料申请单"; default: return type; } })); for (Map.Entry> map : groupedOrders.entrySet()) { orderThreadPool.submit(() -> { orderSyncHandler.startNew(map); }); } } } }