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<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<String> pkinItems = pakinItems.stream().map(WaitPakinItem::getAsnCode).collect(Collectors.toList());
|
pkinItems.forEach(item -> {
|
List<WkOrderItem> wkOrders = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderCode, item));
|
if (wkOrders.isEmpty()) {
|
throw new CoolException("数据错误,原单据不存在或已丢失!!");
|
}
|
Double sum = wkOrders.stream().mapToDouble(WkOrderItem::getAnfme).sum();
|
List<WaitPakinItem> waitPakinItems = waitPakinItemService.list(new LambdaQueryWrapper<WaitPakinItem>().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<WkOrder>()
|
.eq(WkOrder::getCode, item)
|
.set(WkOrder::getExceStatus, AsnExceStatus.ASN_EXCE_STATUS_TASK_DONE.val))) {
|
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("原单据明细删除失败!!");
|
}
|
}
|
}
|