云
2026-10-26 0857cf1830039d60ce73005f386f284cf575e511
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/item/MesMdItemServiceImpl.java
@@ -135,8 +135,10 @@
    private void validateItemSaveData(MesMdItemSaveReqVO reqVO) {
        // 校验物料编码的唯一性
        validateItemCodeUnique(reqVO.getId(), reqVO.getCode());
        // 校验物料名称的唯一性
        validateItemNameUnique(reqVO.getId(), reqVO.getName());
        // 校验物料名称的唯一性:MDM 主数据以编码为唯一标识,允许同名不同规格
        if (reqVO.getMdmItemId() == null) {
            validateItemNameUnique(reqVO.getId(), reqVO.getName());
        }
        // 校验物料分类存在
        validateItemTypeExists(reqVO.getItemTypeId());
        // 校验计量单位存在
@@ -212,11 +214,9 @@
    }
    private void validateItemNameUnique(Long id, String name) {
        MesMdItemDO item = itemMapper.selectByName(name);
        if (item == null) {
            return;
        }
        if (ObjUtil.notEqual(item.getId(), id)) {
        // 使用列表查询:存量数据可能存在同名物料,避免 selectOne 直接抛异常
        List<MesMdItemDO> items = itemMapper.selectList(MesMdItemDO::getName, name);
        if (items.stream().anyMatch(item -> ObjUtil.notEqual(item.getId(), id))) {
            throw exception(MD_ITEM_NAME_DUPLICATE);
        }
    }