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.AsnOrder; import com.vincent.rsf.server.manager.entity.AsnOrderItem; import com.vincent.rsf.server.manager.entity.AsnOrderItemLog; import com.vincent.rsf.server.manager.entity.AsnOrderLog; import com.vincent.rsf.server.manager.enums.AsnExceStatus; import com.vincent.rsf.server.manager.service.AsnOrderItemLogService; import com.vincent.rsf.server.manager.service.AsnOrderItemService; import com.vincent.rsf.server.manager.service.AsnOrderLogService; import com.vincent.rsf.server.manager.service.AsnOrderService; 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.Objects; import java.util.Set; import java.util.stream.Collectors; /** * @author Ryan * @version 1.0 * @title AsnOrderLogSchedule * @description * @create 2025/3/19 19:07 */ @Component public class AsnOrderLogSchedule { @Autowired private AsnOrderService asnOrderService; @Autowired private AsnOrderItemService asnOrderItemService; @Autowired private AsnOrderLogService asnOrderLogService; @Autowired private AsnOrderItemLogService asnOrderItemLogService; /** * @author Ryan * @description 删除已完成订单加入Log表 * @param * @return * @time 2025/3/19 19:09 */ @Scheduled(cron = "0 0/05 * * * ? ") @Transactional(rollbackFor = Exception.class) public void moveOrderToLog() { List asnOrders = asnOrderService.list(new LambdaQueryWrapper().eq(AsnOrder::getExceStatus, AsnExceStatus.ASN_EXCE_STATUS_TASK_DONE.val)); if (asnOrders.isEmpty()) { return; } Set longSet = asnOrders.stream().map(AsnOrder::getId).collect(Collectors.toSet()); List orderItems = asnOrderItemService.list(new LambdaQueryWrapper().in(AsnOrderItem::getAsnId, longSet)); if (orderItems.isEmpty()) { throw new CoolException("收货明细为空!!"); } for (AsnOrder order : asnOrders) { AsnOrderLog orderLog = new AsnOrderLog(); BeanUtils.copyProperties(order, orderLog); orderLog.setId(null); orderLog.setAsnId(order.getId()); if (!asnOrderLogService.save(orderLog)) { throw new CoolException("主单历史档添加失败!!"); } List logs = new ArrayList<>(); List items = asnOrderItemService.list(new LambdaQueryWrapper().eq(AsnOrderItem::getAsnId, order.getId())); items.forEach(item -> { AsnOrderItemLog itemLog = new AsnOrderItemLog(); BeanUtils.copyProperties(item, itemLog); itemLog.setAsnItemId(itemLog.getId()) .setLogId(orderLog.getId()) .setAsnId(item.getAsnId()); logs.add(itemLog); }); if (!asnOrderItemLogService.saveBatch(logs)) { throw new CoolException("通知单明细历史档保存失败!!"); } } if (!asnOrderItemService.remove(new LambdaQueryWrapper().in(AsnOrderItem::getAsnId, longSet))) { throw new CoolException("原单据明细删除失败!!"); } if (!this.asnOrderService.removeByIds(longSet)) { throw new CoolException("原单据删除失败!!"); } } }