2026-07-01 6b5f7c66fc40d7f6099d561e31a34fbd50dd20d3
yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/service/item/MdmItemSkuServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,151 @@
package cn.iocoder.yudao.module.mdm.service.item;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjUtil;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.module.mdm.dal.dataobject.item.MdmItemSkuDO;
import cn.iocoder.yudao.module.mdm.dal.mysql.item.MdmItemSkuMapper;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import java.util.*;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.mdm.enums.ErrorCodeConstants.*;
/**
 * MDM ç‰©æ–™ SKU Service å®žçŽ°ç±»
 *
 * @author èŠ‹é“æºç 
 */
@Service
@Validated
public class MdmItemSkuServiceImpl implements MdmItemSkuService {
    @Resource
    private MdmItemSkuMapper itemSkuMapper;
    @Override
    public Long createItemSku(MdmItemSkuDO sku) {
        // æ ¡éªŒç¼–码唯一
        validateItemSkuCodeUnique(null, sku.getCode());
        // è®¾ç½®é»˜è®¤çŠ¶æ€
        if (sku.getStatus() == null) {
            sku.setStatus(CommonStatusEnum.ENABLE.getStatus());
        }
        itemSkuMapper.insert(sku);
        return sku.getId();
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void createItemSkuList(Long itemId, List<MdmItemSkuDO> skuList) {
        if (CollUtil.isEmpty(skuList)) {
            return;
        }
        for (MdmItemSkuDO sku : skuList) {
            sku.setItemId(itemId);
            createItemSku(sku);
        }
    }
    @Override
    public void updateItemSku(MdmItemSkuDO sku) {
        // æ ¡éªŒå­˜åœ¨
        validateItemSkuExists(sku.getId());
        // æ ¡éªŒç¼–码唯一
        validateItemSkuCodeUnique(sku.getId(), sku.getCode());
        itemSkuMapper.updateById(sku);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void updateItemSkuList(Long itemId, List<MdmItemSkuDO> skuList) {
        // ç¬¬ä¸€æ­¥ï¼Œåˆ é™¤æ—§çš„ SKU
        itemSkuMapper.deleteByItemId(itemId);
        // ç¬¬äºŒæ­¥ï¼Œæ’入新的 SKU
        if (CollUtil.isEmpty(skuList)) {
            return;
        }
        for (MdmItemSkuDO sku : skuList) {
            sku.setItemId(itemId);
            sku.setId(null); // æ¸…空 ID,作为新插入
            if (sku.getStatus() == null) {
                sku.setStatus(CommonStatusEnum.ENABLE.getStatus());
            }
            itemSkuMapper.insert(sku);
        }
    }
    private void validateItemSkuCodeUnique(Long id, String code) {
        MdmItemSkuDO sku = itemSkuMapper.selectByCode(code);
        if (sku == null) {
            return;
        }
        if (id == null || ObjUtil.notEqual(sku.getId(), id)) {
            throw exception(MDM_ITEM_SKU_CODE_DUPLICATE);
        }
    }
    @Override
    public void deleteItemSku(Long id) {
        // æ ¡éªŒå­˜åœ¨
        validateItemSkuExists(id);
        // åˆ é™¤
        itemSkuMapper.deleteById(id);
    }
    @Override
    public void deleteItemSkuListByItemId(Long itemId) {
        itemSkuMapper.deleteByItemId(itemId);
    }
    @Override
    public MdmItemSkuDO validateItemSkuExists(Long id) {
        MdmItemSkuDO sku = itemSkuMapper.selectById(id);
        if (sku == null) {
            throw exception(MDM_ITEM_SKU_NOT_EXISTS);
        }
        return sku;
    }
    @Override
    public MdmItemSkuDO validateItemSkuExistsAndEnable(Long id) {
        MdmItemSkuDO sku = validateItemSkuExists(id);
        if (CommonStatusEnum.isDisable(sku.getStatus())) {
            throw exception(MDM_ITEM_SKU_IS_DISABLE);
        }
        return sku;
    }
    @Override
    public MdmItemSkuDO getItemSku(Long id) {
        return itemSkuMapper.selectById(id);
    }
    @Override
    public List<MdmItemSkuDO> getItemSkuListByItemId(Long itemId) {
        return itemSkuMapper.selectListByItemId(itemId);
    }
    @Override
    public List<MdmItemSkuDO> getItemSkuList(Collection<Long> ids) {
        if (CollUtil.isEmpty(ids)) {
            return Collections.emptyList();
        }
        return itemSkuMapper.selectBatchIds(ids);
    }
    @Override
    public MdmItemSkuDO getItemSkuByCode(String code) {
        return itemSkuMapper.selectByCode(code);
    }
    @Override
    public MdmItemSkuDO getItemSkuByBarCode(String barCode) {
        return itemSkuMapper.selectByBarCode(barCode);
    }
}