package cn.iocoder.yudao.module.mes.api.itemreceipt;
|
|
import cn.hutool.core.collection.CollUtil;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.module.mes.api.itemreceipt.dto.MesWmItemReceiptLineRespDTO;
|
import cn.iocoder.yudao.module.mes.api.itemreceipt.dto.MesWmItemReceiptRespDTO;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemreceipt.MesWmItemReceiptDO;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemreceipt.MesWmItemReceiptLineDO;
|
import cn.iocoder.yudao.module.mes.dal.mysql.wm.itemreceipt.MesWmItemReceiptLineMapper;
|
import cn.iocoder.yudao.module.mes.dal.mysql.wm.itemreceipt.MesWmItemReceiptMapper;
|
import jakarta.annotation.Resource;
|
import org.springframework.stereotype.Service;
|
|
import java.math.BigDecimal;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.stream.Collectors;
|
|
/**
|
* MES 采购入库单 API 实现类
|
*/
|
@Service
|
public class MesWmItemReceiptApiImpl implements MesWmItemReceiptApi {
|
|
@Resource
|
private MesWmItemReceiptMapper itemReceiptMapper;
|
@Resource
|
private MesWmItemReceiptLineMapper itemReceiptLineMapper;
|
|
@Override
|
public List<MesWmItemReceiptRespDTO> getItemReceiptListByPurchaseOrderId(Long purchaseOrderId) {
|
if (purchaseOrderId == null) {
|
return List.of();
|
}
|
List<MesWmItemReceiptDO> receipts = itemReceiptMapper.selectListByPurchaseOrderId(purchaseOrderId);
|
if (CollUtil.isEmpty(receipts)) {
|
return List.of();
|
}
|
Map<Long, List<MesWmItemReceiptLineDO>> lineMap = itemReceiptLineMapper
|
.selectListByReceiptIds(receipts.stream().map(MesWmItemReceiptDO::getId).toList())
|
.stream().collect(Collectors.groupingBy(MesWmItemReceiptLineDO::getReceiptId));
|
return receipts.stream()
|
.map(receipt -> convert(receipt, lineMap.getOrDefault(receipt.getId(), List.of())))
|
.toList();
|
}
|
|
@Override
|
public MesWmItemReceiptRespDTO getItemReceipt(Long id) {
|
MesWmItemReceiptDO receipt = itemReceiptMapper.selectById(id);
|
if (receipt == null) {
|
return null;
|
}
|
return convert(receipt, itemReceiptLineMapper.selectListByReceiptId(id));
|
}
|
|
private MesWmItemReceiptRespDTO convert(MesWmItemReceiptDO receipt, List<MesWmItemReceiptLineDO> lines) {
|
MesWmItemReceiptRespDTO resp = BeanUtils.toBean(receipt, MesWmItemReceiptRespDTO.class);
|
List<MesWmItemReceiptLineRespDTO> lineResps = BeanUtils.toBean(lines, MesWmItemReceiptLineRespDTO.class);
|
resp.setLines(lineResps);
|
resp.setTotalPrice(lineResps.stream()
|
.map(line -> line.getTotalPrice() != null ? line.getTotalPrice() : calcLineAmount(line))
|
.filter(amount -> amount != null)
|
.reduce(BigDecimal.ZERO, BigDecimal::add));
|
return resp;
|
}
|
|
private BigDecimal calcLineAmount(MesWmItemReceiptLineRespDTO line) {
|
if (line.getPrice() == null || line.getReceivedQuantity() == null) {
|
return null;
|
}
|
return line.getPrice().multiply(line.getReceivedQuantity());
|
}
|
|
}
|