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<AsnOrder> asnOrders = asnOrderService.list(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getExceStatus, AsnExceStatus.ASN_EXCE_STATUS_TASK_DONE.val));
|
if (asnOrders.isEmpty()) {
|
return;
|
}
|
Set<Long> longSet = asnOrders.stream().map(AsnOrder::getId).collect(Collectors.toSet());
|
List<AsnOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>().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<AsnOrderItemLog> logs = new ArrayList<>();
|
List<AsnOrderItem> items = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>().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<AsnOrderItem>().in(AsnOrderItem::getAsnId, longSet))) {
|
throw new CoolException("原单据明细删除失败!!");
|
}
|
if (!this.asnOrderService.removeByIds(longSet)) {
|
throw new CoolException("原单据删除失败!!");
|
}
|
}
|
}
|