tuqin
7 天以前 33fe3368c6692d67e1fae5d2922ff614e5f56404
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
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.hazard.MesSafetyHazardCheckReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.hazard.MesSafetyHazardPageReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.hazard.MesSafetyHazardRectifyReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.hazard.MesSafetyHazardSaveReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.safety.MesSafetyHazardDO;
import cn.iocoder.yudao.module.mes.dal.mysql.safety.MesSafetyHazardMapper;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
 
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Objects;
 
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 MesSafetyHazardServiceImpl implements MesSafetyHazardService {
 
    @Resource
    private MesSafetyHazardMapper hazardMapper;
 
    @Override
    public PageResult<MesSafetyHazardDO> getHazardPage(MesSafetyHazardPageReqVO pageReqVO) {
        return hazardMapper.selectPage(pageReqVO);
    }
 
    @Override
    public MesSafetyHazardDO getHazard(Long id) {
        return hazardMapper.selectById(id);
    }
 
    @Override
    public Long createHazard(MesSafetyHazardSaveReqVO createReqVO) {
        validateCodeUnique(null, createReqVO.getCode());
        MesSafetyHazardDO hazard = BeanUtils.toBean(createReqVO, MesSafetyHazardDO.class);
        // 新建即为待整改
        hazard.setStatus(MesSafetyHazardDO.STATUS_PENDING);
        if (hazard.getFoundDate() == null) {
            hazard.setFoundDate(LocalDate.now());
        }
        hazardMapper.insert(hazard);
        return hazard.getId();
    }
 
    @Override
    public void updateHazard(MesSafetyHazardSaveReqVO updateReqVO) {
        MesSafetyHazardDO exists = validateHazardExists(updateReqVO.getId());
        // 已闭环的隐患不允许再修改基本信息
        if (MesSafetyHazardDO.STATUS_CLOSED.equals(exists.getStatus())) {
            throw exception(MES_SAFETY_HAZARD_STATUS_INVALID);
        }
        validateCodeUnique(updateReqVO.getId(), updateReqVO.getCode());
        MesSafetyHazardDO updateObj = BeanUtils.toBean(updateReqVO, MesSafetyHazardDO.class);
        // 状态与整改/验收信息不通过此接口修改
        updateObj.setStatus(null);
        updateObj.setMeasure(null);
        updateObj.setFinishDate(null);
        updateObj.setCheckUserId(null);
        updateObj.setCheckTime(null);
        updateObj.setCheckResult(null);
        updateObj.setRejectReason(null);
        hazardMapper.updateById(updateObj);
    }
 
    @Override
    public void deleteHazard(Long id) {
        validateHazardExists(id);
        hazardMapper.deleteById(id);
    }
 
    @Override
    public void rectifyHazard(MesSafetyHazardRectifyReqVO reqVO) {
        MesSafetyHazardDO hazard = validateHazardExists(reqVO.getId());
        // 只有「待整改」「整改中」可以提交整改;已提交待验收或已闭环不可重复提交
        if (!MesSafetyHazardDO.STATUS_PENDING.equals(hazard.getStatus())
                && !MesSafetyHazardDO.STATUS_RECTIFYING.equals(hazard.getStatus())) {
            throw exception(MES_SAFETY_HAZARD_STATUS_INVALID);
        }
        MesSafetyHazardDO updateObj = new MesSafetyHazardDO();
        updateObj.setId(reqVO.getId());
        updateObj.setMeasure(reqVO.getMeasure());
        updateObj.setFinishDate(reqVO.getFinishDate() != null ? reqVO.getFinishDate() : LocalDate.now());
        updateObj.setStatus(MesSafetyHazardDO.STATUS_TO_CHECK);
        // 重新提交时清空上一次的驳回原因
        updateObj.setRejectReason("");
        hazardMapper.updateById(updateObj);
    }
 
    @Override
    public void checkHazard(MesSafetyHazardCheckReqVO reqVO) {
        MesSafetyHazardDO hazard = validateHazardExists(reqVO.getId());
        // 只有「待验收」可以验收
        if (!MesSafetyHazardDO.STATUS_TO_CHECK.equals(hazard.getStatus())) {
            throw exception(MES_SAFETY_HAZARD_STATUS_INVALID);
        }
        MesSafetyHazardDO updateObj = new MesSafetyHazardDO();
        updateObj.setId(reqVO.getId());
        updateObj.setCheckResult(reqVO.getCheckResult());
        updateObj.setCheckTime(LocalDateTime.now());
        if (Boolean.TRUE.equals(reqVO.getPass())) {
            // 验收通过 → 闭环
            updateObj.setStatus(MesSafetyHazardDO.STATUS_CLOSED);
            updateObj.setRejectReason("");
        } else {
            // 验收驳回 → 必须填原因,退回整改中
            if (reqVO.getRejectReason() == null || reqVO.getRejectReason().trim().isEmpty()) {
                throw exception(MES_SAFETY_HAZARD_REJECT_REASON_REQUIRED);
            }
            updateObj.setStatus(MesSafetyHazardDO.STATUS_RECTIFYING);
            updateObj.setRejectReason(reqVO.getRejectReason());
        }
        hazardMapper.updateById(updateObj);
    }
 
    @Override
    public MesSafetyHazardDO validateHazardExists(Long id) {
        if (id == null) {
            throw exception(MES_SAFETY_HAZARD_NOT_EXISTS);
        }
        MesSafetyHazardDO hazard = hazardMapper.selectById(id);
        if (hazard == null) {
            throw exception(MES_SAFETY_HAZARD_NOT_EXISTS);
        }
        return hazard;
    }
 
    private void validateCodeUnique(Long id, String code) {
        MesSafetyHazardDO exists = hazardMapper.selectByCode(code);
        if (exists == null) {
            return;
        }
        if (id == null || !Objects.equals(exists.getId(), id)) {
            throw exception(MES_SAFETY_HAZARD_CODE_DUPLICATE);
        }
    }
 
}