package com.ruoyi.technology.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.framework.web.domain.R; import com.ruoyi.technology.bean.dto.TechnologyOperationDto; import com.ruoyi.technology.bean.vo.TechnologyOperationVo; import com.ruoyi.technology.mapper.TechnologyBomStructureMapper; import com.ruoyi.technology.mapper.TechnologyOperationMapper; import com.ruoyi.technology.mapper.TechnologyOperationParamMapper; import com.ruoyi.technology.mapper.TechnologyRoutingOperationMapper; import com.ruoyi.technology.pojo.TechnologyBomStructure; import com.ruoyi.technology.pojo.TechnologyOperation; import com.ruoyi.technology.pojo.TechnologyOperationParam; import com.ruoyi.technology.pojo.TechnologyRoutingOperation; import com.ruoyi.technology.service.TechnologyOperationService; import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.util.List; import java.util.stream.Collectors; @Service @RequiredArgsConstructor public class TechnologyOperationServiceImpl extends ServiceImpl implements TechnologyOperationService { private final TechnologyOperationMapper technologyOperationMapper; private final TechnologyRoutingOperationMapper technologyRoutingOperationMapper; private final TechnologyBomStructureMapper technologyBomStructureMapper; private final TechnologyOperationParamMapper technologyOperationParamMapper; /** * 分页查询工序列表。 */ @Override public IPage listPage(Page page, TechnologyOperationDto technologyOperationDto) { return technologyOperationMapper.listPage(page, technologyOperationDto); } /** * 新增工序并补齐工序编码。 */ @Override public R add(TechnologyOperationDto technologyOperationDto) { TechnologyOperation technologyOperation = new TechnologyOperation(); BeanUtils.copyProperties(technologyOperationDto, technologyOperation); boolean saved = technologyOperationMapper.insert(technologyOperation) > 0; if (saved && ObjectUtils.isNull(technologyOperationDto.getNo())) { technologyOperation.setNo("GX" + String.format("%08d", technologyOperation.getId())); technologyOperationMapper.updateById(technologyOperation); } return R.ok(); } /** * 删除工序前校验是否已被BOM结构或工艺路线引用。 */ @Override public String batchDelete(List ids) { List routingOperations = technologyRoutingOperationMapper.selectList( Wrappers.lambdaQuery().in(TechnologyRoutingOperation::getTechnologyOperationId, ids)); List bomStructures = technologyBomStructureMapper.selectList( Wrappers.lambdaQuery().in(TechnologyBomStructure::getOperationId, ids)); if (!CollectionUtils.isEmpty(routingOperations) || !CollectionUtils.isEmpty(bomStructures)) { throw new RuntimeException("Operation is referenced and cannot be deleted"); } technologyOperationParamMapper.delete(Wrappers.lambdaQuery() .in(TechnologyOperationParam::getTechnologyOperationId, ids)); technologyOperationMapper.deleteBatchIds(ids); return null; } /** * 查询全部工序并转换为返回对象。 */ @Override public List listVo() { return this.list().stream().map(item -> { TechnologyOperationVo vo = new TechnologyOperationVo(); BeanUtils.copyProperties(item, vo); return vo; }).collect(Collectors.toList()); } }