gaoluyang
5 天以前 6fa82a1ad7c3ae061ef499f0d0806a16846e122b
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/ErpPurchaseOrderController.java
@@ -26,6 +26,8 @@
import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO;
import cn.iocoder.yudao.module.mdm.api.unit.MdmUnitMeasureApi;
import cn.iocoder.yudao.module.mdm.api.unit.dto.MdmUnitMeasureRespDTO;
import cn.iocoder.yudao.module.mes.api.arrivalnotice.MesArrivalNoticeApi;
import cn.iocoder.yudao.module.mes.api.arrivalnotice.dto.MesArrivalNoticeRespDTO;
import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
@@ -75,6 +77,8 @@
    private AdminUserApi adminUserApi;
    @Resource
    private StorageAttachmentApi storageAttachmentApi;
    @Resource
    private MesArrivalNoticeApi arrivalNoticeApi;
    @PostMapping("/create")
    @Operation(summary = "创建采购订单")
@@ -186,7 +190,7 @@
                        .no("CGDD20260101000001").supplierName("示例供应商")
                        .orderTime("2026-01-01 10:00:00").productCode("ITEM001").productName("示例产品A")
                        .count(new BigDecimal("100")).productPrice(new BigDecimal("10.00"))
                        .taxPercent(new BigDecimal("13")).qcCheckFlag("否").remark("示例").build());
                        .taxPercent(new BigDecimal("13")).remark("示例").build());
        ExcelUtils.write(response, "采购订单导入模板.xls", "采购订单", ErpPurchaseOrderImportExcelVO.class, list);
    }
@@ -261,6 +265,11 @@
        // 1.6 已来票金额:按采购订单统计,用于计算剩余可开票金额
        Map<Long, BigDecimal> invoicePriceSumMap = purchaseInvoiceService
                .getPurchaseInvoicePriceSumMapByOrderIds(convertSet(pageResult.getList(), ErpPurchaseOrderDO::getId));
        // 1.7 到货通知单:用于前端区分是否已确认收货、隐藏重复的「确认收货」按钮
        Map<Long, MesArrivalNoticeRespDTO> arrivalNoticeMap = arrivalNoticeApi
                .getArrivalNoticeListByPurchaseOrderIds(convertSet(pageResult.getList(), ErpPurchaseOrderDO::getId))
                .stream().collect(java.util.stream.Collectors.toMap(
                        MesArrivalNoticeRespDTO::getPurchaseOrderId, notice -> notice, (a, b) -> a));
        // 2. 开始拼接
        return BeanUtils.toBean(pageResult, ErpPurchaseOrderRespVO.class, purchaseOrder -> {
            purchaseOrder.setItems(BeanUtils.toBean(
@@ -279,6 +288,12 @@
            purchaseOrder.setProductCodes(CollUtil.join(purchaseOrder.getItems(), ",", ErpPurchaseOrderRespVO.Item::getProductCode));
            MapUtils.findAndThen(supplierMap, purchaseOrder.getSupplierId(), supplier -> purchaseOrder.setSupplierName(supplier.getName()));
            MapUtils.findAndThen(userMap, Long.parseLong(purchaseOrder.getCreator()), user -> purchaseOrder.setCreatorName(user.getNickname()));
            MapUtils.findAndThen(arrivalNoticeMap, purchaseOrder.getId(), notice -> {
                purchaseOrder.setArrivalNoticeId(notice.getId());
                purchaseOrder.setArrivalNoticeCode(notice.getCode());
                purchaseOrder.setArrivalNoticeStatus(notice.getStatus());
                purchaseOrder.setArrivalNoticeStatusName(notice.getStatusName());
            });
            purchaseOrder.setSourceTypeName(resolveSourceTypeName(purchaseOrder.getSourceType()));
            // 剩余可开票金额 = 订单总金额 - 已来票金额
            purchaseOrder.setRemainInvoicePrice(purchaseOrder.getTotalPrice().subtract(