package com.vincent.rsf.server.manager.schedules; 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.manager.entity.*; import com.vincent.rsf.server.manager.enums.AsnExceStatus; import com.vincent.rsf.server.manager.enums.PakinIOStatus; import com.vincent.rsf.server.manager.service.*; 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; @Autowired private AsnOrderService asnOrderService; @Autowired private AsnOrderItemService asnOrderItemService; /** * @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 pkinItems = pakinItems.stream().map(WaitPakinItem::getAsnCode).collect(Collectors.toList()); pkinItems.forEach(item -> { List wkOrders = asnOrderItemService.list(new LambdaQueryWrapper().eq(WkOrderItem::getOrderCode, item)); if (wkOrders.isEmpty()) { throw new CoolException("数据错误,原单据不存在或已丢失!!"); } Double sum = wkOrders.stream().mapToDouble(WkOrderItem::getAnfme).sum(); List waitPakinItems = waitPakinItemService.list(new LambdaQueryWrapper().eq(WaitPakinItem::getAsnCode, item)); if (waitPakinItems.isEmpty()) { throw new CoolException("数据错误,组托明细不存在!!"); } Double sum1 = waitPakinItems.stream().mapToDouble(WaitPakinItem::getAnfme).sum(); if (sum.compareTo(sum1) == 0) { if (!asnOrderService.update(new LambdaUpdateWrapper() .eq(WkOrder::getCode, item) .set(WkOrder::getExceStatus, AsnExceStatus.ASN_EXCE_STATUS_TASK_DONE.val))) { 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("原单据明细删除失败!!"); } } }