6 天以前 ffe7921a138331185186fd100846fe50dcaf841c
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
package cn.iocoder.yudao.module.mes.service.md.autocode;
 
import cn.hutool.core.util.ObjUtil;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.mes.controller.admin.md.autocode.vo.part.MesMdAutoCodePartSaveReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.md.autocode.MesMdAutoCodePartDO;
import cn.iocoder.yudao.module.mes.dal.mysql.md.autocode.MesMdAutoCodePartMapper;
import cn.iocoder.yudao.module.mes.enums.md.autocode.MesMdAutoCodePartTypeEnum;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
 
import java.util.List;
 
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.AUTO_CODE_PART_NOT_EXISTS;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.AUTO_CODE_PART_SERIAL_NUMBER_DUPLICATE;
 
/**
 * MES 编码规则组成 Service 实现类
 *
 * @author 芋道源码
 */
@Service
@Validated
public class MesMdAutoCodePartServiceImpl implements MesMdAutoCodePartService {
 
    @Resource
    private MesMdAutoCodePartMapper partMapper;
 
    @Resource
    private MesMdAutoCodeRuleService ruleService;
 
    @Override
    public Long createAutoCodePart(MesMdAutoCodePartSaveReqVO createReqVO) {
        // 校验规则存在
        ruleService.validateAutoCodeRuleExists(createReqVO.getRuleId());
        // 校验流水号分段唯一性
        validateSerialNumberPartUnique(null, createReqVO.getRuleId(), createReqVO.getType());
 
        // 插入
        MesMdAutoCodePartDO part = BeanUtils.toBean(createReqVO, MesMdAutoCodePartDO.class);
        partMapper.insert(part);
        return part.getId();
    }
 
    @Override
    public void updateAutoCodePart(MesMdAutoCodePartSaveReqVO updateReqVO) {
        // 校验存在
        validatePartExists(updateReqVO.getId());
        // 校验规则存在
        ruleService.validateAutoCodeRuleExists(updateReqVO.getRuleId());
        // 校验流水号分段唯一性
        validateSerialNumberPartUnique(updateReqVO.getId(), updateReqVO.getRuleId(), updateReqVO.getType());
 
        // 更新
        MesMdAutoCodePartDO updateObj = BeanUtils.toBean(updateReqVO, MesMdAutoCodePartDO.class);
        partMapper.updateById(updateObj);
    }
 
    @Override
    public void deleteAutoCodePart(Long id) {
        // 校验存在
        validatePartExists(id);
 
        // 删除
        partMapper.deleteById(id);
    }
 
    @Override
    public MesMdAutoCodePartDO getAutoCodePart(Long id) {
        return partMapper.selectById(id);
    }
 
    @Override
    public List<MesMdAutoCodePartDO> getAutoCodePartListByRuleId(Long ruleId) {
        return partMapper.selectListByRuleId(ruleId);
    }
 
    // ==================== 校验方法 ====================
 
    private void validatePartExists(Long id) {
        if (partMapper.selectById(id) == null) {
            throw exception(AUTO_CODE_PART_NOT_EXISTS);
        }
    }
 
    private void validateSerialNumberPartUnique(Long id, Long ruleId, Integer type) {
        // 只有流水号类型才需要校验
        if (ObjUtil.notEqual(MesMdAutoCodePartTypeEnum.SERIAL_NUMBER.getType(), type)) {
            return;
        }
        // 查询该规则下所有流水号分段
        List<MesMdAutoCodePartDO> parts = partMapper.selectListByRuleId(ruleId);
        long count = parts.stream()
                .filter(part -> MesMdAutoCodePartTypeEnum.SERIAL_NUMBER.getType().equals(part.getType()))
                .filter(part -> ObjUtil.notEqual(id, part.getId())) // 排除自己
                .count();
        if (count > 0) {
            throw exception(AUTO_CODE_PART_SERIAL_NUMBER_DUPLICATE);
        }
    }
 
}