|  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | 
 |  |  | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; | 
 |  |  | import com.vincent.rsf.framework.exception.CoolException; | 
 |  |  | import com.vincent.rsf.server.common.constant.Constants; | 
 |  |  | import com.vincent.rsf.server.manager.entity.Wave; | 
 |  |  | 
 |  |  | import com.vincent.rsf.server.manager.enums.WaveItemExceStatus; | 
 |  |  | import com.vincent.rsf.server.manager.service.WaveItemService; | 
 |  |  | import com.vincent.rsf.server.manager.service.WaveService; | 
 |  |  | import com.vincent.rsf.server.manager.service.impl.TaskItemServiceImpl; | 
 |  |  | import com.vincent.rsf.server.system.constant.GlobalConfigCode; | 
 |  |  | import com.vincent.rsf.server.system.entity.Config; | 
 |  |  | import com.vincent.rsf.server.system.service.ConfigService; | 
 |  |  | import com.vincent.rsf.server.system.utils.SystemAuthUtils; | 
 |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
 |  |  | import org.springframework.scheduling.annotation.Scheduled; | 
 |  |  | import org.springframework.stereotype.Component; | 
 |  |  | import org.springframework.transaction.annotation.Transactional; | 
 |  |  |  | 
 |  |  | import java.util.HashMap; | 
 |  |  | import java.util.List; | 
 |  |  | import java.util.Map; | 
 |  |  | import java.util.Objects; | 
 |  |  | import java.util.*; | 
 |  |  | import java.util.stream.Collectors; | 
 |  |  |  | 
 |  |  | /** | 
 |  |  | * @author Ryan | 
 |  |  | * @description 波次定时任务 | 
 |  |  | * @param | 
 |  |  | * @return | 
 |  |  | * @time 2025/6/23 13:49 | 
 |  |  | */ | 
 |  |  |  * @param | 
 |  |  |  * @author Ryan | 
 |  |  |  * @description 波次定时任务 | 
 |  |  |  * @return | 
 |  |  |  * @time 2025/6/23 13:49 | 
 |  |  |  */ | 
 |  |  | @Component | 
 |  |  | public class WaveSchedules { | 
 |  |  |  | 
 |  |  | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private ConfigService configService; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private TaskItemServiceImpl taskItemService; | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |     * @author Ryan | 
 |  |  |     * @description 自动下发波次任务 | 
 |  |  |     * @param | 
 |  |  |     * @return | 
 |  |  |     * @time 2025/6/23 13:52 | 
 |  |  |     */ | 
 |  |  |      * @param | 
 |  |  |      * @return | 
 |  |  |      * @author Ryan | 
 |  |  |      * @description 自动下发波次任务 | 
 |  |  |      * @time 2025/6/23 13:52 | 
 |  |  |      */ | 
 |  |  |     @Scheduled(cron = "0/15 * * * * ?") | 
 |  |  |     @Transactional(rollbackFor = Exception.class) | 
 |  |  | //    @Transactional(rollbackFor = Exception.class) | 
 |  |  |     public void autoGenerateTask() { | 
 |  |  |         Config config = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getFlag, GlobalConfigCode.WAVE_AUTO_EXCE_TASK)); | 
 |  |  |         if (Objects.isNull(config) || !Boolean.parseBoolean(config.getVal())) { | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |         List<Wave> list = waveService.list(new LambdaQueryWrapper<Wave>() | 
 |  |  |                         .select(Wave::getId) | 
 |  |  |                         .eq(Wave::getExceStatus, WaveExceStatus.WAVE_EXCE_STATUS_INIT.val)); | 
 |  |  |                 .select(Wave::getId) | 
 |  |  |                 .in(Wave::getExceStatus, WaveExceStatus.WAVE_EXCE_STATUS_INIT.val | 
 |  |  |                         , WaveExceStatus.WAVE_EXCE_STATUS_EXCING.val)); | 
 |  |  |         if (list.isEmpty()) { | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         List<Long> longs = list.stream().map(Wave::getId).collect(Collectors.toList()); | 
 |  |  |  | 
 |  |  |         List<WaveItem> waveItems = waveItemService.list(new LambdaQueryWrapper<WaveItem>() | 
 |  |  |         waveItemService.update(new LambdaUpdateWrapper<WaveItem>() | 
 |  |  |                 .in(WaveItem::getWaveId, longs) | 
 |  |  |                 .eq(WaveItem::getExceStatus, WaveItemExceStatus.WAVE_ITEM_EXCE_STATUS_UN.val)); | 
 |  |  |         if (waveItems.isEmpty()) { | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |         Map<Long, List<WaveItem>> listMap = waveItems.stream().collect(Collectors.groupingBy(WaveItem::getWaveId)); | 
 |  |  |         listMap.keySet().forEach(waveId -> { | 
 |  |  |             List<Long> itemIds = listMap.get(waveId).stream().map(WaveItem::getId).collect(Collectors.toList()); | 
 |  |  |             Map<String, Object> params = new HashMap<>(); | 
 |  |  |             params.put("wave", waveId); | 
 |  |  |             params.put("waveItem", itemIds); | 
 |  |  |             waveService.waveToTask(params, waveId); | 
 |  |  |         }); | 
 |  |  |                 .set(WaveItem::getExceStatus, WaveExceStatus.WAVE_EXCE_STATUS_EXCING.val) | 
 |  |  |                 .apply("anfme > work_qty")); | 
 |  |  |  | 
 |  |  |         Long loginUserId = SystemAuthUtils.getLoginUserId(); | 
 |  |  |         Map<String, Object> params = new HashMap<>(); | 
 |  |  |         params.put("ids", longs); | 
 |  |  |         waveService.waveToTask(params, loginUserId); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | } |