tuqin
6 天以前 5ea3ccadce91cb9e7a760da8d0d34b316a977d78
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
package cn.iocoder.yudao.module.mes.service.safety;
 
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.unit.MesSafetyRiskUnitPageReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.unit.MesSafetyRiskUnitSaveReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.safety.MesSafetyRiskUnitDO;
import cn.iocoder.yudao.module.mes.dal.mysql.safety.MesSafetyHazardMapper;
import cn.iocoder.yudao.module.mes.dal.mysql.safety.MesSafetyRiskMapper;
import cn.iocoder.yudao.module.mes.dal.mysql.safety.MesSafetyRiskUnitMapper;
import cn.iocoder.yudao.module.mes.dal.mysql.safety.MesSafetyWorkTicketMapper;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
 
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
 
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
 
/**
 * 安全生产 - 风险单元 Service 实现
 *
 * @author 超级管理员
 */
@Service
@Validated
public class MesSafetyRiskUnitServiceImpl implements MesSafetyRiskUnitService {
 
    @Resource
    private MesSafetyRiskUnitMapper riskUnitMapper;
 
    @Resource
    private MesSafetyRiskMapper riskMapper;
 
    @Resource
    private MesSafetyHazardMapper hazardMapper;
 
    @Resource
    private MesSafetyWorkTicketMapper ticketMapper;
 
    @Override
    public PageResult<MesSafetyRiskUnitDO> getRiskUnitPage(MesSafetyRiskUnitPageReqVO pageReqVO) {
        return riskUnitMapper.selectPage(pageReqVO);
    }
 
    @Override
    public MesSafetyRiskUnitDO getRiskUnit(Long id) {
        return riskUnitMapper.selectById(id);
    }
 
    @Override
    public Long createRiskUnit(MesSafetyRiskUnitSaveReqVO createReqVO) {
        // 编码唯一性校验
        validateCodeUnique(null, createReqVO.getCode());
        MesSafetyRiskUnitDO unit = BeanUtils.toBean(createReqVO, MesSafetyRiskUnitDO.class);
        riskUnitMapper.insert(unit);
        return unit.getId();
    }
 
    @Override
    public void updateRiskUnit(MesSafetyRiskUnitSaveReqVO updateReqVO) {
        validateRiskUnitExists(updateReqVO.getId());
        validateCodeUnique(updateReqVO.getId(), updateReqVO.getCode());
        MesSafetyRiskUnitDO updateObj = BeanUtils.toBean(updateReqVO, MesSafetyRiskUnitDO.class);
        riskUnitMapper.updateById(updateObj);
    }
 
    @Override
    public void deleteRiskUnit(Long id) {
        validateRiskUnitExists(id);
        // 单元下已有风险清单时不允许删除,避免产生孤儿数据
        Long riskCount = riskMapper.selectCountByUnitIds(Collections.singletonList(id));
        if (riskCount != null && riskCount > 0) {
            throw exception(MES_SAFETY_RISK_UNIT_HAS_RISK);
        }
        // 已被隐患引用的单元也不允许删除
        Long hazardCount = hazardMapper.selectCountByUnitId(id);
        if (hazardCount != null && hazardCount > 0) {
            throw exception(MES_SAFETY_HAZARD_HAS_REFERENCE);
        }
        // 已被作业票引用的单元也不允许删除
        Long ticketCount = ticketMapper.selectCountByUnitId(id);
        if (ticketCount != null && ticketCount > 0) {
            throw exception(MES_SAFETY_TICKET_HAS_REFERENCE);
        }
        riskUnitMapper.deleteById(id);
    }
 
    @Override
    public List<MesSafetyRiskUnitDO> getRiskUnitSimpleList() {
        return riskUnitMapper.selectSimpleList();
    }
 
    @Override
    public MesSafetyRiskUnitDO validateRiskUnitExists(Long id) {
        if (id == null) {
            throw exception(MES_SAFETY_RISK_UNIT_NOT_EXISTS);
        }
        MesSafetyRiskUnitDO unit = riskUnitMapper.selectById(id);
        if (unit == null) {
            throw exception(MES_SAFETY_RISK_UNIT_NOT_EXISTS);
        }
        return unit;
    }
 
    @Override
    public Map<Long, MesSafetyRiskUnitDO> getRiskUnitMap(Collection<Long> ids) {
        if (ids == null || ids.isEmpty()) {
            return Collections.emptyMap();
        }
        List<MesSafetyRiskUnitDO> list = riskUnitMapper.selectByIds(ids);
        return list.stream().collect(Collectors.toMap(MesSafetyRiskUnitDO::getId, u -> u, (a, b) -> a));
    }
 
    /**
     * 校验编码唯一(id 为空表示新增)
     */
    private void validateCodeUnique(Long id, String code) {
        MesSafetyRiskUnitDO exists = riskUnitMapper.selectByCode(code);
        if (exists == null) {
            return;
        }
        if (id == null || !Objects.equals(exists.getId(), id)) {
            throw exception(MES_SAFETY_RISK_UNIT_CODE_DUPLICATE);
        }
    }
 
}