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 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 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 getRiskUnitMap(Collection ids) { if (ids == null || ids.isEmpty()) { return Collections.emptyMap(); } List 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); } } }