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<WaitPakin> pakinIds = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>() 
 | 
                .eq(WaitPakin::getIoStatus, PakinIOStatus.PAKIN_IO_STATUS_TASK_DONE.val) 
 | 
                .select(WaitPakin::getId)); 
 | 
        if (pakinIds.isEmpty()) { 
 | 
            return; 
 | 
        } 
 | 
        List<Long> list = pakinIds.stream().map(WaitPakin::getId).collect(Collectors.toList()); 
 | 
        List<WaitPakin> pakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().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<WaitPakinItem> pakinItems = waitPakinItemService.list(new LambdaQueryWrapper<WaitPakinItem>().in(WaitPakinItem::getPakinId, pakin.getId())); 
 | 
            if (pakinItems.isEmpty()) { 
 | 
                throw new CoolException("组拖明细为空!!"); 
 | 
            } 
 | 
            List<WaitPakinItemLog> 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<WaitPakinItem>().in(WaitPakinItem::getPakinId, list))) { 
 | 
            throw new CoolException("原单据明细删除失败!!"); 
 | 
        } 
 | 
    } 
 | 
} 
 |