package cn.iocoder.yudao.module.mes.service.pro.line; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; 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.pro.line.vo.MesProLinePageReqVO; import cn.iocoder.yudao.module.mes.controller.admin.pro.line.vo.MesProLineSaveReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.pro.line.MesProLineDO; import cn.iocoder.yudao.module.mes.dal.mysql.pro.batch.MesProBatchMapper; import cn.iocoder.yudao.module.mes.dal.mysql.pro.line.MesProLineMapper; 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 static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; /** * MES 产线维护 Service 实现类 * * @author 超级管理员 */ @Service @Validated public class MesProLineServiceImpl implements MesProLineService { @Resource private MesProLineMapper lineMapper; @Resource private MesProBatchMapper batchMapper; @Override public Long createLine(MesProLineSaveReqVO createReqVO) { // 1. 校验编码、名称唯一 validateLineSaveData(createReqVO); // 2. 插入产线 MesProLineDO line = BeanUtils.toBean(createReqVO, MesProLineDO.class); lineMapper.insert(line); return line.getId(); } @Override public void updateLine(MesProLineSaveReqVO updateReqVO) { // 1.1 校验存在 validateLineExists(updateReqVO.getId()); // 1.2 校验编码、名称唯一 validateLineSaveData(updateReqVO); // 2. 更新产线 MesProLineDO updateObj = BeanUtils.toBean(updateReqVO, MesProLineDO.class); lineMapper.updateById(updateObj); } @Override public void deleteLine(Long id) { // 1.1 校验存在 validateLineExists(id); // 1.2 校验是否被生产批次引用 if (batchMapper.selectCountByLineId(id) > 0) { throw exception(PRO_LINE_HAS_BATCH_NOT_DELETE); } // 2. 删除产线 lineMapper.deleteById(id); } @Override public MesProLineDO getLine(Long id) { return lineMapper.selectById(id); } @Override public List getLineList(Collection ids) { if (CollUtil.isEmpty(ids)) { return Collections.emptyList(); } return lineMapper.selectByIds(ids); } @Override public PageResult getLinePage(MesProLinePageReqVO pageReqVO) { return lineMapper.selectPage(pageReqVO); } @Override public List getLineListByStatus(Integer status) { return lineMapper.selectListByStatus(status); } @Override public MesProLineDO validateLineExists(Long id) { MesProLineDO line = lineMapper.selectById(id); if (line == null) { throw exception(PRO_LINE_NOT_EXISTS); } return line; } @Override public MesProLineDO validateLineExistsAndEnable(Long id) { MesProLineDO line = validateLineExists(id); if (ObjUtil.notEqual(CommonStatusEnum.ENABLE.getStatus(), line.getStatus())) { throw exception(PRO_LINE_IS_DISABLE); } return line; } // ==================== 私有方法 ==================== private void validateLineCodeUnique(Long id, String code) { MesProLineDO line = lineMapper.selectByCode(code); if (line == null) { return; } if (id == null || !line.getId().equals(id)) { throw exception(PRO_LINE_CODE_DUPLICATE); } } private void validateLineNameUnique(Long id, String name) { MesProLineDO line = lineMapper.selectByName(name); if (line == null) { return; } if (id == null || !line.getId().equals(id)) { throw exception(PRO_LINE_NAME_DUPLICATE); } } private void validateLineSaveData(MesProLineSaveReqVO saveReqVO) { // 1. 校验编码唯一 validateLineCodeUnique(saveReqVO.getId(), saveReqVO.getCode()); // 2. 校验名称唯一 validateLineNameUnique(saveReqVO.getId(), saveReqVO.getName()); } }