package cn.iocoder.yudao.module.mes.service.qc.defect; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjUtil; 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.qc.defect.vo.MesQcDefectPageReqVO; import cn.iocoder.yudao.module.mes.controller.admin.qc.defect.vo.MesQcDefectSaveReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.qc.defect.MesQcDefectDO; import cn.iocoder.yudao.module.mes.dal.mysql.qc.defect.MesQcDefectMapper; 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.*; import cn.iocoder.yudao.module.mes.controller.admin.qc.defect.vo.MesQcDefectImportExcelVO; import cn.iocoder.yudao.module.mes.controller.admin.qc.defect.vo.MesQcDefectImportRespVO; import cn.hutool.core.util.StrUtil; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.concurrent.atomic.AtomicInteger; /** * MES 缺陷类型 Service 实现类 * * @author 超级管理员 */ @Service @Validated public class MesQcDefectServiceImpl implements MesQcDefectService { @Resource private MesQcDefectMapper defectMapper; @Override public Long createDefect(MesQcDefectSaveReqVO createReqVO) { // 校验编码、名称唯一 validateDefectSaveData(null, createReqVO); // 插入 MesQcDefectDO defect = BeanUtils.toBean(createReqVO, MesQcDefectDO.class); defectMapper.insert(defect); return defect.getId(); } @Override public void updateDefect(MesQcDefectSaveReqVO updateReqVO) { // 校验存在 validateDefectExists(updateReqVO.getId()); // 校验编码、名称唯一 validateDefectSaveData(updateReqVO.getId(), updateReqVO); // 更新 MesQcDefectDO updateObj = BeanUtils.toBean(updateReqVO, MesQcDefectDO.class); defectMapper.updateById(updateObj); } @Override public void deleteDefect(Long id) { // 校验存在 validateDefectExists(id); // 删除 defectMapper.deleteById(id); } private void validateDefectExists(Long id) { if (defectMapper.selectById(id) == null) { throw exception(QC_DEFECT_NOT_EXISTS); } } private void validateDefectSaveData(Long id, MesQcDefectSaveReqVO reqVO) { validateDefectCodeUnique(id, reqVO.getCode()); validateDefectNameUnique(id, reqVO.getName()); } private void validateDefectCodeUnique(Long id, String code) { MesQcDefectDO defect = defectMapper.selectByCode(code); if (defect == null) { return; } if (ObjUtil.notEqual(defect.getId(), id)) { throw exception(QC_DEFECT_CODE_DUPLICATE); } } private void validateDefectNameUnique(Long id, String name) { MesQcDefectDO defect = defectMapper.selectByName(name); if (defect == null) { return; } if (ObjUtil.notEqual(defect.getId(), id)) { throw exception(QC_DEFECT_NAME_DUPLICATE); } } @Override public MesQcDefectDO getDefect(Long id) { return defectMapper.selectById(id); } @Override public PageResult getDefectPage(MesQcDefectPageReqVO pageReqVO) { return defectMapper.selectPage(pageReqVO); } @Override public List getDefectList() { return defectMapper.selectList(); } @Override public List getDefectList(Collection ids) { if (CollUtil.isEmpty(ids)) { return Collections.emptyList(); } return defectMapper.selectByIds(ids); } @Override public MesQcDefectImportRespVO importDefectList(List importList, boolean updateSupport) { if (CollUtil.isEmpty(importList)) { throw exception(QC_DEFECT_IMPORT_LIST_IS_EMPTY); } MesQcDefectImportRespVO respVO = MesQcDefectImportRespVO.builder() .createCodes(new ArrayList<>()).updateCodes(new ArrayList<>()) .failureCodes(new LinkedHashMap<>()).build(); AtomicInteger index = new AtomicInteger(1); importList.forEach(importItem -> { int currentIndex = index.getAndIncrement(); String key = StrUtil.blankToDefault(importItem.getCode(), "第 " + currentIndex + " 行"); if (StrUtil.isBlank(importItem.getCode())) { respVO.getFailureCodes().put(key, "缺陷编码不能为空"); return; } if (StrUtil.isBlank(importItem.getName())) { respVO.getFailureCodes().put(key, "缺陷描述不能为空"); return; } if (importItem.getType() == null) { respVO.getFailureCodes().put(key, "检测项类型不能为空"); return; } if (importItem.getLevel() == null) { respVO.getFailureCodes().put(key, "缺陷等级不能为空"); return; } MesQcDefectDO exist = defectMapper.selectByCode(importItem.getCode()); if (exist == null) { MesQcDefectDO defect = BeanUtils.toBean(importItem, MesQcDefectDO.class); defect.setId(null); defectMapper.insert(defect); respVO.getCreateCodes().add(importItem.getCode()); } else if (updateSupport) { MesQcDefectDO updateObj = BeanUtils.toBean(importItem, MesQcDefectDO.class); updateObj.setId(exist.getId()); updateObj.setCode(exist.getCode()); defectMapper.updateById(updateObj); respVO.getUpdateCodes().add(importItem.getCode()); } else { respVO.getFailureCodes().put(key, "缺陷编码已存在"); } }); return respVO; } }