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 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 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 getItemSkuListByItemId(Long itemId) { return itemSkuMapper.selectListByItemId(itemId); } @Override public List getItemSkuList(Collection 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); } }