liyong
2026-08-03 ac4835a14674993985d3e57553aae8516a09afcc
销售订单规格型号单位不回显问题修改
已修改2个文件
已重命名2个文件
59 ■■■■ 文件已修改
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/sale/ErpSaleOrderController.java 43 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/sale/vo/order/ErpSaleOrderRespVO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-mdm-api/src/main/java/cn/iocoder/yudao/module/mdm/api/unit/MdmUnitMeasureApi.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-mdm-api/src/main/java/cn/iocoder/yudao/module/mdm/api/unit/dto/MdmUnitMeasureRespDTO.java 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/sale/ErpSaleOrderController.java
@@ -19,6 +19,8 @@
import cn.iocoder.yudao.module.erp.service.sale.ErpSaleOrderService;
import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi;
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.mps.MesProMpsApi;
import cn.iocoder.yudao.module.mes.api.productsales.MesWmProductSalesLineApi;
import cn.iocoder.yudao.module.mes.api.salesnotice.MesWmSalesNoticeApi;
@@ -68,6 +70,8 @@
    private MesProMpsApi mpsApi;
    @Resource
    private StorageAttachmentApi storageAttachmentApi;
    @Resource
    private MdmUnitMeasureApi mdmUnitMeasureApi;
    @PostMapping("/create")
    @Operation(summary = "创建销售订单")
@@ -143,19 +147,30 @@
        if (saleOrder == null) {
            return success(null);
        }
        // 1. æŸ¥è¯¢è®¢å•项
        List<ErpSaleOrderItemDO> saleOrderItemList = saleOrderService.getSaleOrderItemListByOrderId(id);
        // 2. æ‰¹é‡æŸ¥è¯¢å…³è”数据
        Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemMap(
                convertSet(saleOrderItemList, ErpSaleOrderItemDO::getProductId));
        Map<Long, String> batchCodeMap = productSalesLineApi.getBatchCodesBySaleOrderItemIds(
                convertSet(saleOrderItemList, ErpSaleOrderItemDO::getId));
        return success(BeanUtils.toBean(saleOrder, ErpSaleOrderRespVO.class, saleOrderVO ->
                saleOrderVO.setItems(BeanUtils.toBean(saleOrderItemList, ErpSaleOrderRespVO.Item.class, item -> {
                    // åº“存信息暂不查询(仓储物流模块)
                    item.setStockCount(BigDecimal.ZERO);
                    item.setBatchCode(batchCodeMap.get(item.getId()));
                    MapUtils.findAndThen(itemMap, item.getProductId(), mdmItem -> item.setProductName(mdmItem.getName())
                            .setProductBarCode(mdmItem.getBarCode()));
                })).setAttachmentList(storageAttachmentApi.listAttachments("erp_sale_order", id))));
        Map<Long, MdmUnitMeasureRespDTO> unitMeasureMap = mdmUnitMeasureApi.getUnitMeasureMap(
                convertSet(saleOrderItemList, ErpSaleOrderItemDO::getProductUnitId));
        // 3. è½¬æ¢è®¢å•项
        List<ErpSaleOrderRespVO.Item> itemVOList = BeanUtils.toBean(saleOrderItemList, ErpSaleOrderRespVO.Item.class, item -> {
            item.setStockCount(BigDecimal.ZERO); // åº“存信息暂不查询(仓储物流模块)
            item.setBatchCode(batchCodeMap.get(item.getId()));
            MapUtils.findAndThen(itemMap, item.getProductId(), mdmItem ->
                    item.setProductName(mdmItem.getName()).setProductBarCode(mdmItem.getBarCode())
                            .setProductSpecification(mdmItem.getSpecification()));
            MapUtils.findAndThen(unitMeasureMap, item.getProductUnitId(), unit ->
                    item.setProductUnitName(unit.getName()));
        });
        // 4. ç»„装响应
        ErpSaleOrderRespVO saleOrderVO = BeanUtils.toBean(saleOrder, ErpSaleOrderRespVO.class);
        saleOrderVO.setItems(itemVOList);
        saleOrderVO.setAttachmentList(storageAttachmentApi.listAttachments("erp_sale_order", id));
        return success(saleOrderVO);
    }
    @GetMapping("/page")
@@ -201,7 +216,10 @@
        // 1.6 å‡ºåº“批号
        Map<Long, String> batchCodeMap = productSalesLineApi.getBatchCodesBySaleOrderItemIds(
                convertSet(saleOrderItemList, ErpSaleOrderItemDO::getId));
        // 1.7 æ£€æŸ¥æ˜¯å¦å¯ä»¥ç”Ÿæˆå‘货通知单(需要生产的明细对应的 MPS æ˜¯å¦å·²å®Œæˆï¼‰
        // 1.7 è®¡é‡å•位
        Map<Long, MdmUnitMeasureRespDTO> unitMeasureMap = mdmUnitMeasureApi.getUnitMeasureMap(
                convertSet(saleOrderItemList, ErpSaleOrderItemDO::getProductUnitId));
        // 1.8 æ£€æŸ¥æ˜¯å¦å¯ä»¥ç”Ÿæˆå‘货通知单(需要生产的明细对应的 MPS æ˜¯å¦å·²å®Œæˆï¼‰
        // ç­›é€‰å‡ºéœ€è¦ç”Ÿäº§çš„æ˜Žç»†ID
        List<Long> needProductionItemIds = saleOrderItemList.stream()
                .filter(item -> item.getNeedProduction() != null && item.getNeedProduction() == 1)
@@ -240,8 +258,11 @@
            saleOrder.setItems(BeanUtils.toBean(saleOrderItemMap.get(saleOrder.getId()), ErpSaleOrderRespVO.Item.class,
                    item -> {
                        item.setBatchCode(batchCodeMap.get(item.getId()));
                        MapUtils.findAndThen(itemMap, item.getProductId(), mdmItem -> item.setProductName(mdmItem.getName())
                                .setProductBarCode(mdmItem.getBarCode()));
                        MapUtils.findAndThen(itemMap, item.getProductId(), mdmItem ->
                                item.setProductName(mdmItem.getName()).setProductBarCode(mdmItem.getBarCode())
                                        .setProductSpecification(mdmItem.getSpecification()));
                        MapUtils.findAndThen(unitMeasureMap, item.getProductUnitId(), unit ->
                                item.setProductUnitName(unit.getName()));
                    }));
            saleOrder.setProductNames(CollUtil.join(saleOrder.getItems(), ",", ErpSaleOrderRespVO.Item::getProductName));
            MapUtils.findAndThen(customerMap, saleOrder.getCustomerId(), supplier -> saleOrder.setCustomerName(supplier.getName()));
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/sale/vo/order/ErpSaleOrderRespVO.java
@@ -181,6 +181,9 @@
        @Schema(description = "库存数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "100.00")
        private BigDecimal stockCount; // è¯¥å­—段仅仅在详情和编辑时使用
        @Schema(description = "规格型号", requiredMode = Schema.RequiredMode.REQUIRED, example = "-")
        private String productSpecification;
    }
}
yudao-module-mdm-api/src/main/java/cn/iocoder/yudao/module/mdm/api/unit/MdmUnitMeasureApi.java
ÎļþÃû´Ó yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/api/unit/MdmUnitMeasureApi.java ÐÞ¸Ä
@@ -1,10 +1,12 @@
package cn.iocoder.yudao.module.mdm.api.unit;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.module.mdm.api.unit.dto.MdmUnitMeasureRespDTO;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
 * MDM è®¡é‡å•位 API æŽ¥å£
@@ -32,6 +34,17 @@
    CommonResult<List<MdmUnitMeasureRespDTO>> getUnitMeasureList(Collection<Long> ids);
    /**
     * èŽ·å–è®¡é‡å•ä½ Map
     *
     * @param ids å•位编号列表
     * @return è®¡é‡å•位 Map
     */
    default Map<Long, MdmUnitMeasureRespDTO> getUnitMeasureMap(Collection<Long> ids) {
        List<MdmUnitMeasureRespDTO> list = getUnitMeasureList(ids).getCheckedData();
        return CollectionUtils.convertMap(list, MdmUnitMeasureRespDTO::getId);
    }
    /**
     * æ ¡éªŒè®¡é‡å•位存在
     *
     * @param id å•位编号
yudao-module-mdm-api/src/main/java/cn/iocoder/yudao/module/mdm/api/unit/dto/MdmUnitMeasureRespDTO.java