package cn.iocoder.yudao.module.mes.service.md.workstation; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.StrUtil; 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.md.workstation.vo.workshop.MesMdWorkshopImportExcelVO; import cn.iocoder.yudao.module.mes.controller.admin.md.workstation.vo.workshop.MesMdWorkshopImportRespVO; import cn.iocoder.yudao.module.mes.controller.admin.md.workstation.vo.workshop.MesMdWorkshopPageReqVO; import cn.iocoder.yudao.module.mes.controller.admin.md.workstation.vo.workshop.MesMdWorkshopSaveReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.md.workstation.MesMdWorkshopDO; import cn.iocoder.yudao.module.mes.dal.mysql.md.workstation.MesMdWorkshopMapper; import cn.iocoder.yudao.module.mes.enums.wm.BarcodeBizTypeEnum; import cn.iocoder.yudao.module.mes.service.wm.barcode.MesWmBarcodeService; 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 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 MesMdWorkshopServiceImpl implements MesMdWorkshopService { @Resource private MesMdWorkshopMapper workshopMapper; @Resource @Lazy private MesMdWorkstationService workstationService; @Resource private MesWmBarcodeService barcodeService; @Override public Long createWorkshop(MesMdWorkshopSaveReqVO createReqVO) { // 校验编码唯一 validateWorkshopCodeUnique(null, createReqVO.getCode()); // 校验名称唯一 validateWorkshopNameUnique(null, createReqVO.getName()); // 插入 MesMdWorkshopDO workshop = BeanUtils.toBean(createReqVO, MesMdWorkshopDO.class); workshopMapper.insert(workshop); // 自动生成条码 barcodeService.autoGenerateBarcode(BarcodeBizTypeEnum.WORKSHOP.getValue(), workshop.getId(), workshop.getCode(), workshop.getName()); return workshop.getId(); } @Override public void updateWorkshop(MesMdWorkshopSaveReqVO updateReqVO) { // 校验存在 validateWorkshopExists(updateReqVO.getId()); // 校验编码唯一 validateWorkshopCodeUnique(updateReqVO.getId(), updateReqVO.getCode()); // 校验名称唯一 validateWorkshopNameUnique(updateReqVO.getId(), updateReqVO.getName()); // 更新 MesMdWorkshopDO updateObj = BeanUtils.toBean(updateReqVO, MesMdWorkshopDO.class); workshopMapper.updateById(updateObj); } @Override public void deleteWorkshop(Long id) { // 校验存在 validateWorkshopExists(id); // 校验车间下是否存在工作站 Long count = workstationService.getWorkstationCountByWorkshopId(id); if (count > 0) { throw exception(MD_WORKSHOP_HAS_WORKSTATION); } // 删除 workshopMapper.deleteById(id); } private void validateWorkshopExists(Long id) { if (workshopMapper.selectById(id) == null) { throw exception(MD_WORKSHOP_NOT_EXISTS); } } private void validateWorkshopCodeUnique(Long id, String code) { MesMdWorkshopDO workshop = workshopMapper.selectByCode(code); if (workshop == null) { return; } if (ObjUtil.notEqual(workshop.getId(), id)) { throw exception(MD_WORKSHOP_CODE_DUPLICATE); } } private void validateWorkshopNameUnique(Long id, String name) { MesMdWorkshopDO workshop = workshopMapper.selectByName(name); if (workshop == null) { return; } if (ObjUtil.notEqual(workshop.getId(), id)) { throw exception(MD_WORKSHOP_NAME_DUPLICATE); } } @Override public MesMdWorkshopDO getWorkshop(Long id) { return workshopMapper.selectById(id); } @Override public PageResult getWorkshopPage(MesMdWorkshopPageReqVO pageReqVO) { return workshopMapper.selectPage(pageReqVO); } @Override public List getWorkshopList(Collection ids) { if (CollUtil.isEmpty(ids)) { return Collections.emptyList(); } return workshopMapper.selectByIds(ids); } @Override public List getWorkshopListByStatus(Integer status) { return workshopMapper.selectListByStatus(status); } @Override @Transactional(rollbackFor = Exception.class) public MesMdWorkshopImportRespVO importWorkshopList(List importList, boolean updateSupport) { // 1. 校验非空 if (CollUtil.isEmpty(importList)) { throw exception(MD_WORKSHOP_IMPORT_LIST_IS_EMPTY); } // 2. 逐行处理 MesMdWorkshopImportRespVO respVO = MesMdWorkshopImportRespVO.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; } // 2.1 判断:创建 or 更新 MesMdWorkshopDO existWorkshop = workshopMapper.selectByCode(importItem.getCode()); if (existWorkshop == null) { // 2.1.1 新增 MesMdWorkshopDO workshop = BeanUtils.toBean(importItem, MesMdWorkshopDO.class); workshop.setId(null); workshop.setStatus(ObjUtil.defaultIfNull(importItem.getStatus(), CommonStatusEnum.ENABLE.getStatus())); workshopMapper.insert(workshop); // 自动生成条码 barcodeService.autoGenerateBarcode(BarcodeBizTypeEnum.WORKSHOP.getValue(), workshop.getId(), workshop.getCode(), workshop.getName()); respVO.getCreateCodes().add(importItem.getCode()); } else if (updateSupport) { // 2.1.2 更新 MesMdWorkshopDO updateObj = BeanUtils.toBean(importItem, MesMdWorkshopDO.class); updateObj.setId(existWorkshop.getId()); workshopMapper.updateById(updateObj); respVO.getUpdateCodes().add(importItem.getCode()); } else { respVO.getFailureCodes().put(key, "车间编码已存在"); } }); return respVO; } }