gaoluyang
3 天以前 d39e4f7d839167c16425086dfa2f8747bccfdff9
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImpl.java
@@ -431,12 +431,36 @@
            receiptLine.setItemId(noticeLine.getItemId());
            // 使用合格数量(如果有 IQC 则是合格数量,否则是到货数量)
            receiptLine.setReceivedQuantity(noticeLine.getQualifiedQuantity() != null ? noticeLine.getQualifiedQuantity() : noticeLine.getArrivalQuantity());
            // 按采购订单行单价快照金额,供来票/对账使用
            fillReceiptLinePrice(receiptLine);
            itemReceiptLineService.createItemReceiptLineFromArrivalNoticeLine(receiptLine);
        }
        return receipt.getId();
    }
    /**
     * 按采购订单行单价回填入库行金额,避免对账时再联表取价
     */
    private void fillReceiptLinePrice(MesWmItemReceiptLineDO receiptLine) {
        if (receiptLine.getPurchaseOrderItemId() == null) {
            return;
        }
        try {
            var item = purchaseOrderApi.getPurchaseOrderItem(receiptLine.getPurchaseOrderItemId()).getData();
            if (item == null || item.getProductPrice() == null) {
                return;
            }
            receiptLine.setPrice(item.getProductPrice());
            if (receiptLine.getReceivedQuantity() != null) {
                receiptLine.setTotalPrice(item.getProductPrice().multiply(receiptLine.getReceivedQuantity()));
            }
        } catch (Exception ex) {
            // 价格只是快照,采购订单行取不到时不阻断入库
            log.warn("[fillReceiptLinePrice][采购订单行({}) 价格快照失败]", receiptLine.getPurchaseOrderItemId(), ex);
        }
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void submitItemReceiptApproval(Long id, String processDefinitionKey) {