package com.vincent.rsf.server.manager.schedules; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.manager.entity.WaitPakin; import com.vincent.rsf.server.manager.entity.WaitPakinItem; import com.vincent.rsf.server.manager.entity.WaitPakinItemLog; import com.vincent.rsf.server.manager.entity.WaitPakinLog; import com.vincent.rsf.server.manager.enums.PakinIOStatus; import com.vincent.rsf.server.manager.service.WaitPakinItemLogService; import com.vincent.rsf.server.manager.service.WaitPakinItemService; import com.vincent.rsf.server.manager.service.WaitPakinLogService; import com.vincent.rsf.server.manager.service.WaitPakinService; import org.springframework.beans.BeanUtils; 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.ArrayList; import java.util.List; import java.util.stream.Collectors; @Component public class PakinSchedules { @Autowired private WaitPakinService waitPakinService; @Autowired private WaitPakinItemService waitPakinItemService; @Autowired private WaitPakinLogService waitPakinLogService; @Autowired private WaitPakinItemLogService waitPakinItemLogService; /** * @param * @return * @author Ryan * @description 组拖历史档 * @time 2025/3/29 12:36 */ @Scheduled(cron = "0/25 * * * * ?") @Transactional(rollbackFor = Exception.class) public void pakinLog() { List pakinIds = waitPakinService.list(new LambdaQueryWrapper() .eq(WaitPakin::getIoStatus, PakinIOStatus.PAKIN_IO_STATUS_TASK_DONE.val) .select(WaitPakin::getId)); if (pakinIds.isEmpty()) { return; } List list = pakinIds.stream().map(WaitPakin::getId).collect(Collectors.toList()); List pakins = waitPakinService.list(new LambdaQueryWrapper().in(WaitPakin::getId, list)); if (pakins.isEmpty()) { throw new CoolException("组拖单为空!!"); } pakins.forEach(pakin -> { WaitPakinLog log = new WaitPakinLog(); BeanUtils.copyProperties(pakin, log); log.setPakinId(pakin.getId()).setIoStatus(PakinIOStatus.PAKIN_IO_STATUS_TASK_DONE.val); if (!waitPakinLogService.save(log)) { throw new CoolException("组托日志保存失败!!"); } List pakinItems = waitPakinItemService.list(new LambdaQueryWrapper().in(WaitPakinItem::getPakinId, pakin.getId())); if (pakinItems.isEmpty()) { throw new CoolException("组拖明细为空!!"); } List itemLogs = new ArrayList<>(); pakinItems.forEach(item -> { WaitPakinItemLog itemLog = new WaitPakinItemLog(); BeanUtils.copyProperties(item, itemLog); itemLog.setPakinItemId(item.getId()) .setLogId(log.getId()) .setQty(item.getWorkQty()) .setWorkQty(0.0) .setPakinId(item.getPakinId()); itemLogs.add(itemLog); }); if (!waitPakinItemLogService.saveBatch(itemLogs)) { throw new CoolException("历史明细档保存失败!!"); } }); if (!waitPakinService.removeByIds(list)) { throw new CoolException("原单据删除失败!!"); } if (!waitPakinItemService.remove(new LambdaQueryWrapper().in(WaitPakinItem::getPakinId, list))) { throw new CoolException("原单据明细删除失败!!"); } } }