package com.glxp.api.task; import javax.annotation.Resource; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.thread.ThreadUtil; import com.glxp.api.entity.inv.InvProductRationEntity; import com.glxp.api.service.inv.InvProductRationService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.SchedulingConfigurer; import org.springframework.scheduling.config.ScheduledTaskRegistrar; import org.springframework.scheduling.support.CronTrigger; import com.glxp.api.dao.schedule.ScheduledDao; import com.glxp.api.entity.system.ScheduledEntity; import com.glxp.api.idc.service.IdcService; import com.glxp.api.req.system.ScheduledRequest; import org.springframework.stereotype.Component; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @Component @EnableScheduling public class AsyncInvRationTask implements SchedulingConfigurer { final Logger logger = LoggerFactory.getLogger(AsyncInvRationTask.class); @Resource private ScheduledDao scheduledDao; @Resource InvProductRationService invProductRationService; @Override public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) { scheduledTaskRegistrar.addTriggerTask(() -> process(), triggerContext -> { ScheduledRequest scheduledRequest = new ScheduledRequest(); scheduledRequest.setCronName("syncInvRation"); ScheduledEntity scheduledEntity = scheduledDao.findScheduled(scheduledRequest); String cron = scheduledEntity != null ? scheduledEntity.getCron() : "0 0/60 * * * ?"; if (cron.isEmpty()) { logger.error("cron is null"); } return new CronTrigger(cron).nextExecutionTime(triggerContext); }); } private void process() { ThreadUtil.execAsync(() -> { List invProductRationEntities = invProductRationService.list(); if (CollUtil.isNotEmpty(invProductRationEntities)) { Map> stringListMap = invProductRationEntities.stream() .collect(Collectors.groupingBy(item -> item.getCurInvCode())); stringListMap.forEach((key, rationEntityList) -> { invProductRationService.genOrder(rationEntityList); }); } }); } }