package cn.iocoder.yudao.module.mes.service.tm.tool; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; 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.tm.tool.vo.type.MesTmToolTypeImportExcelVO; import cn.iocoder.yudao.module.mes.controller.admin.tm.tool.vo.type.MesTmToolTypeImportRespVO; import cn.iocoder.yudao.module.mes.controller.admin.tm.tool.vo.type.MesTmToolTypePageReqVO; import cn.iocoder.yudao.module.mes.controller.admin.tm.tool.vo.type.MesTmToolTypeSaveReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.tm.tool.MesTmToolTypeDO; import cn.iocoder.yudao.module.mes.dal.mysql.tm.tool.MesTmToolTypeMapper; import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkstationToolService; import jakarta.annotation.Resource; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import cn.hutool.core.util.ObjUtil; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; 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 MesTmToolTypeServiceImpl implements MesTmToolTypeService { @Resource private MesTmToolTypeMapper toolTypeMapper; @Resource @Lazy private MesTmToolService toolService; @Resource @Lazy private MesMdWorkstationToolService workstationToolService; @Override public Long createToolType(MesTmToolTypeSaveReqVO createReqVO) { // 校验数据 validateToolTypeSaveData(null, createReqVO); // 插入 MesTmToolTypeDO toolType = BeanUtils.toBean(createReqVO, MesTmToolTypeDO.class); toolTypeMapper.insert(toolType); return toolType.getId(); } @Override public void updateToolType(MesTmToolTypeSaveReqVO updateReqVO) { // 校验存在 validateToolTypeExists(updateReqVO.getId()); // 校验数据 validateToolTypeSaveData(updateReqVO.getId(), updateReqVO); // 更新 MesTmToolTypeDO updateObj = BeanUtils.toBean(updateReqVO, MesTmToolTypeDO.class); toolTypeMapper.updateById(updateObj); } private void validateToolTypeSaveData(Long id, MesTmToolTypeSaveReqVO saveReqVO) { // 校验编码唯一 validateToolTypeCodeUnique(id, saveReqVO.getCode()); // 校验名称唯一 validateToolTypeNameUnique(id, saveReqVO.getName()); } @Override public void deleteToolType(Long id) { // 校验存在 validateToolTypeExists(id); // 校验是否被工具引用 if (toolService.getToolCountByToolTypeId(id) > 0) { throw exception(TM_TOOL_TYPE_HAS_TOOL); } // 校验是否被工作站工装资源引用 if (workstationToolService.getWorkstationToolCountByToolTypeId(id) > 0) { throw exception(TM_TOOL_TYPE_HAS_WORKSTATION_TOOL); } // 删除 toolTypeMapper.deleteById(id); } @Override public void validateToolTypeExists(Long id) { if (toolTypeMapper.selectById(id) == null) { throw exception(TM_TOOL_TYPE_NOT_EXISTS); } } private void validateToolTypeCodeUnique(Long id, String code) { MesTmToolTypeDO toolType = toolTypeMapper.selectByCode(code); if (toolType == null) { return; } if (ObjUtil.notEqual(toolType.getId(), id)) { throw exception(TM_TOOL_TYPE_CODE_DUPLICATE); } } private void validateToolTypeNameUnique(Long id, String name) { MesTmToolTypeDO toolType = toolTypeMapper.selectByName(name); if (toolType == null) { return; } if (ObjUtil.notEqual(toolType.getId(), id)) { throw exception(TM_TOOL_TYPE_NAME_DUPLICATE); } } @Override public MesTmToolTypeDO getToolType(Long id) { return toolTypeMapper.selectById(id); } @Override public PageResult getToolTypePage(MesTmToolTypePageReqVO pageReqVO) { return toolTypeMapper.selectPage(pageReqVO); } @Override public List getToolTypeList() { return toolTypeMapper.selectList(); } @Override public List getToolTypeList(Collection ids) { if (CollUtil.isEmpty(ids)) { return Collections.emptyList(); } return toolTypeMapper.selectByIds(ids); } @Override @Transactional(rollbackFor = Exception.class) public MesTmToolTypeImportRespVO importToolTypeList(List importList, boolean updateSupport) { // 校验导入数据不能为空 if (CollUtil.isEmpty(importList)) { throw exception(TM_TOOL_TYPE_IMPORT_LIST_IS_EMPTY); } MesTmToolTypeImportRespVO respVO = MesTmToolTypeImportRespVO.builder() .createCodes(new ArrayList<>()).updateCodes(new ArrayList<>()) .failureCodes(new LinkedHashMap<>()).build(); // 索引,用于错误提示 AtomicInteger index = new AtomicInteger(1); importList.forEach(importItem -> { int currentIndex = index.getAndIncrement(); String code = importItem.getCode(); String key = StrUtil.blankToDefault(code, "第 " + currentIndex + " 行"); // 校验编码必填 if (StrUtil.isBlank(code)) { respVO.getFailureCodes().put(key, "类型编码不能为空"); return; } // 校验名称必填 if (StrUtil.isBlank(importItem.getName())) { respVO.getFailureCodes().put(key, "类型名称不能为空"); return; } MesTmToolTypeDO existingByCode = toolTypeMapper.selectByCode(code); MesTmToolTypeDO existingByName = toolTypeMapper.selectByName(importItem.getName()); if (existingByCode != null && updateSupport) { // 名称唯一校验(排除自己) if (existingByName != null && !existingByCode.getId().equals(existingByName.getId())) { respVO.getFailureCodes().put(key, "类型名称已存在:" + importItem.getName()); return; } // 更新 MesTmToolTypeDO updateObj = new MesTmToolTypeDO(); updateObj.setId(existingByCode.getId()); updateObj.setName(importItem.getName()); updateObj.setCodeFlag(ObjUtil.defaultIfNull(importItem.getCodeFlag(), Boolean.FALSE)); updateObj.setMaintenType(importItem.getMaintenType()); updateObj.setMaintenPeriod(importItem.getMaintenPeriod()); updateObj.setRemark(importItem.getRemark()); toolTypeMapper.updateById(updateObj); respVO.getUpdateCodes().add(code); } else if (existingByCode != null) { respVO.getFailureCodes().put(key, "类型编码已存在:" + code); } else { // 名称唯一校验 if (existingByName != null) { respVO.getFailureCodes().put(key, "类型名称已存在:" + importItem.getName()); return; } // 创建 MesTmToolTypeDO createObj = new MesTmToolTypeDO(); createObj.setId(null); createObj.setCode(code); createObj.setName(importItem.getName()); createObj.setCodeFlag(ObjUtil.defaultIfNull(importItem.getCodeFlag(), Boolean.FALSE)); createObj.setMaintenType(importItem.getMaintenType()); createObj.setMaintenPeriod(importItem.getMaintenPeriod()); createObj.setRemark(importItem.getRemark()); toolTypeMapper.insert(createObj); respVO.getCreateCodes().add(code); } }); return respVO; } }