2026-06-29 940c8481d2fdcf51341db4ccd6fd6fcc2d43debb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
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);
    }
 
}