package com.ruoyi.technology.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; 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.technology.bean.dto.TechnologyRoutingOperationDto; import com.ruoyi.technology.bean.dto.TechnologyRoutingOperationParamSyncDto; import com.ruoyi.technology.bean.vo.TechnologyRoutingOperationVo; import com.ruoyi.technology.mapper.TechnologyRoutingMapper; import com.ruoyi.technology.mapper.TechnologyRoutingOperationMapper; import com.ruoyi.technology.pojo.TechnologyRoutingOperation; import com.ruoyi.technology.service.TechnologyRoutingOperationParamService; import com.ruoyi.technology.service.TechnologyRoutingOperationService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; @Service @Transactional(rollbackFor = Exception.class) @RequiredArgsConstructor public class TechnologyRoutingOperationServiceImpl extends ServiceImpl implements TechnologyRoutingOperationService { private final TechnologyRoutingOperationMapper technologyRoutingOperationMapper; private final TechnologyRoutingMapper technologyRoutingMapper; private final TechnologyRoutingOperationParamService technologyRoutingOperationParamService; @Override public IPage pageTechnologyRoutingOperation(Page page, TechnologyRoutingOperationDto technologyRoutingOperationDto) { return technologyRoutingOperationMapper.pageTechnologyRoutingOperation(page, technologyRoutingOperationDto); } @Override public List listTechnologyRoutingOperation(TechnologyRoutingOperationDto technologyRoutingOperationDto) { return technologyRoutingOperationMapper.listTechnologyRoutingOperation(technologyRoutingOperationDto); } @Override public TechnologyRoutingOperationVo getTechnologyRoutingOperationInfo(Long id) { return technologyRoutingOperationMapper.getTechnologyRoutingOperationInfo(id); } @Override public boolean saveTechnologyRoutingOperation(TechnologyRoutingOperation technologyRoutingOperation) { if (technologyRoutingOperation.getTechnologyRoutingId() == null || technologyRoutingMapper.selectById(technologyRoutingOperation.getTechnologyRoutingId()) == null) { throw new RuntimeException("工艺路线不存在,无法保存工序"); } if (technologyRoutingOperation.getDragSort() == null || technologyRoutingOperation.getDragSort() <= 0) { technologyRoutingOperation.setDragSort(nextDragSort(technologyRoutingOperation.getTechnologyRoutingId())); } boolean saved = this.save(technologyRoutingOperation); if (saved) { TechnologyRoutingOperationParamSyncDto syncDto = new TechnologyRoutingOperationParamSyncDto(); syncDto.setTechnologyRoutingOperationId(technologyRoutingOperation.getId()); syncDto.setReplaceExisting(true); technologyRoutingOperationParamService.syncTechnologyRoutingOperationParam(syncDto); } return saved; } @Override public boolean removeTechnologyRoutingOperation(Long id) { TechnologyRoutingOperation technologyRoutingOperation = this.getById(id); if (technologyRoutingOperation == null) { return false; } boolean removed = this.removeById(id); if (removed) { resetDragSort(technologyRoutingOperation.getTechnologyRoutingId()); } return removed; } private Integer nextDragSort(Long technologyRoutingId) { TechnologyRoutingOperation lastOperation = technologyRoutingOperationMapper.selectOne( Wrappers.lambdaQuery() .eq(TechnologyRoutingOperation::getTechnologyRoutingId, technologyRoutingId) .orderByDesc(TechnologyRoutingOperation::getDragSort) .last("limit 1") ); if (lastOperation == null || lastOperation.getDragSort() == null) { return 1; } return lastOperation.getDragSort() + 1; } private void resetDragSort(Long technologyRoutingId) { List operationList = technologyRoutingOperationMapper.selectList( Wrappers.lambdaQuery() .eq(TechnologyRoutingOperation::getTechnologyRoutingId, technologyRoutingId) .orderByAsc(TechnologyRoutingOperation::getDragSort) .orderByAsc(TechnologyRoutingOperation::getId) ); for (int i = 0; i < operationList.size(); i++) { TechnologyRoutingOperation item = operationList.get(i); int dragSort = i + 1; if (item.getDragSort() == null || item.getDragSort() != dragSort) { item.setDragSort(dragSort); technologyRoutingOperationMapper.updateById(item); } } } }