| | |
| | | package com.ruoyi.technology.service.impl; |
| | | |
| | | import cn.hutool.core.bean.BeanUtil; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | 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; |
| | |
| | | private final TechnologyRoutingOperationMapper technologyRoutingOperationMapper; |
| | | |
| | | private final TechnologyRoutingMapper technologyRoutingMapper; |
| | | private final TechnologyRoutingOperationParamService technologyRoutingOperationParamService; |
| | | |
| | | @Override |
| | | public IPage<TechnologyRoutingOperationVo> pageTechnologyRoutingOperation(Page<TechnologyRoutingOperationDto> page, |
| | | TechnologyRoutingOperationDto technologyRoutingOperationDto) { |
| | | Page<TechnologyRoutingOperation> entityPage = new Page<>(page.getCurrent(), page.getSize(), page.getTotal()); |
| | | return this.page(entityPage, buildQueryWrapper(technologyRoutingOperationDto)) |
| | | .convert(item -> BeanUtil.copyProperties(item, TechnologyRoutingOperationVo.class)); |
| | | return technologyRoutingOperationMapper.pageTechnologyRoutingOperation(page, technologyRoutingOperationDto); |
| | | } |
| | | |
| | | @Override |
| | | public List<TechnologyRoutingOperationVo> listTechnologyRoutingOperation(TechnologyRoutingOperationDto technologyRoutingOperationDto) { |
| | | return BeanUtil.copyToList(this.list(buildQueryWrapper(technologyRoutingOperationDto)), TechnologyRoutingOperationVo.class); |
| | | return technologyRoutingOperationMapper.listTechnologyRoutingOperation(technologyRoutingOperationDto); |
| | | } |
| | | |
| | | @Override |
| | | public TechnologyRoutingOperationVo getTechnologyRoutingOperationInfo(Long id) { |
| | | TechnologyRoutingOperation technologyRoutingOperation = this.getById(id); |
| | | if (technologyRoutingOperation == null) { |
| | | return null; |
| | | } |
| | | return BeanUtil.copyProperties(technologyRoutingOperation, TechnologyRoutingOperationVo.class); |
| | | return technologyRoutingOperationMapper.getTechnologyRoutingOperationInfo(id); |
| | | } |
| | | |
| | | @Override |
| | |
| | | if (technologyRoutingOperation.getDragSort() == null || technologyRoutingOperation.getDragSort() <= 0) { |
| | | technologyRoutingOperation.setDragSort(nextDragSort(technologyRoutingOperation.getTechnologyRoutingId())); |
| | | } |
| | | return this.save(technologyRoutingOperation); |
| | | boolean saved = this.save(technologyRoutingOperation); |
| | | if (saved) { |
| | | TechnologyRoutingOperationParamSyncDto syncDto = new TechnologyRoutingOperationParamSyncDto(); |
| | | syncDto.setTechnologyRoutingOperationId(technologyRoutingOperation.getId()); |
| | | syncDto.setReplaceExisting(true); |
| | | technologyRoutingOperationParamService.syncTechnologyRoutingOperationParam(syncDto); |
| | | } |
| | | return saved; |
| | | } |
| | | |
| | | @Override |
| | |
| | | return removed; |
| | | } |
| | | |
| | | private LambdaQueryWrapper<TechnologyRoutingOperation> buildQueryWrapper(TechnologyRoutingOperationDto technologyRoutingOperation) { |
| | | LambdaQueryWrapper<TechnologyRoutingOperation> queryWrapper = Wrappers.lambdaQuery(); |
| | | queryWrapper.eq(technologyRoutingOperation.getId() != null, TechnologyRoutingOperation::getId, technologyRoutingOperation.getId()) |
| | | .eq(technologyRoutingOperation.getTechnologyRoutingId() != null, |
| | | TechnologyRoutingOperation::getTechnologyRoutingId, technologyRoutingOperation.getTechnologyRoutingId()) |
| | | .eq(technologyRoutingOperation.getProductModelId() != null, |
| | | TechnologyRoutingOperation::getProductModelId, technologyRoutingOperation.getProductModelId()) |
| | | .eq(technologyRoutingOperation.getTechnologyOperationId() != null, |
| | | TechnologyRoutingOperation::getTechnologyOperationId, technologyRoutingOperation.getTechnologyOperationId()) |
| | | .eq(technologyRoutingOperation.getIsQuality() != null, |
| | | TechnologyRoutingOperation::getIsQuality, technologyRoutingOperation.getIsQuality()) |
| | | .orderByAsc(TechnologyRoutingOperation::getDragSort) |
| | | .orderByAsc(TechnologyRoutingOperation::getId); |
| | | return queryWrapper; |
| | | @Override |
| | | public int sort(TechnologyRoutingOperation technologyRoutingOperation) { |
| | | //查询被改动的这条数据 |
| | | TechnologyRoutingOperation oldtechnologyRoutingOperation = technologyRoutingOperationMapper.selectById(technologyRoutingOperation.getId()); |
| | | //查询该工艺路线的所有工序并按照顺序排序 |
| | | List<TechnologyRoutingOperation> technologyRouteOperations = technologyRoutingOperationMapper.selectList(Wrappers.<TechnologyRoutingOperation>lambdaQuery() |
| | | .eq(TechnologyRoutingOperation::getTechnologyRoutingId, oldtechnologyRoutingOperation.getTechnologyRoutingId()) |
| | | .orderByAsc(TechnologyRoutingOperation::getDragSort)); |
| | | // 获取目标位置(移动到第几个之后) |
| | | Integer targetPosition = technologyRoutingOperation.getDragSort(); |
| | | if (targetPosition != null && targetPosition >= 0) { |
| | | // 移动元素到新的位置 |
| | | technologyRouteOperations.remove(oldtechnologyRoutingOperation); |
| | | technologyRouteOperations.add(targetPosition-1, oldtechnologyRoutingOperation); |
| | | // 更新所有受影响的排序字段 |
| | | for (int i = 0; i < technologyRouteOperations.size(); i++) { |
| | | TechnologyRoutingOperation item = technologyRouteOperations.get(i); |
| | | if (!item.getId().equals(oldtechnologyRoutingOperation.getId())) { |
| | | // 检查是否需要更新排序值 |
| | | if (item.getDragSort() != i+1) { |
| | | item.setDragSort(i+1); |
| | | technologyRoutingOperationMapper.updateById(item); |
| | | } |
| | | } else { |
| | | // 更新原记录的新排序位置 |
| | | oldtechnologyRoutingOperation.setDragSort(targetPosition); |
| | | technologyRoutingOperationMapper.updateById(oldtechnologyRoutingOperation); |
| | | } |
| | | } |
| | | return 1; |
| | | } |
| | | return 0; |
| | | } |
| | | |
| | | private Integer nextDragSort(Long technologyRoutingId) { |