zss
2026-04-25 f43cbe675407f42f72945e901f34b44d494129f3
src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationParamServiceImpl.java
@@ -3,6 +3,7 @@
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.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -38,7 +39,7 @@
    @Override
    public IPage<TechnologyRoutingOperationParamVo> pageTechnologyRoutingOperationParam(Page<TechnologyRoutingOperationParamDto> page,
                                                                                        TechnologyRoutingOperationParamDto dto) {
                                                                                         TechnologyRoutingOperationParamDto dto) {
        Page<TechnologyRoutingOperationParam> entityPage = new Page<>(page.getCurrent(), page.getSize(), page.getTotal());
        return this.page(entityPage, buildQueryWrapper(dto))
                .convert(item -> BeanUtil.copyProperties(item, TechnologyRoutingOperationParamVo.class));
@@ -62,7 +63,6 @@
    public boolean saveTechnologyRoutingOperationParam(TechnologyRoutingOperationParam item) {
        TechnologyRoutingOperation routingOperation = getRoutingOperation(item.getTechnologyRoutingOperationId());
        fillFromOperationParam(item, routingOperation);
        validateManualFields(item);
        checkDuplicate(item);
        return this.saveOrUpdate(item);
    }
@@ -75,7 +75,7 @@
    @Override
    public int syncTechnologyRoutingOperationParam(TechnologyRoutingOperationParamSyncDto syncDto) {
        if (syncDto == null || syncDto.getTechnologyRoutingOperationId() == null) {
            throw new ServiceException("technologyRoutingOperationId is required");
            throw new ServiceException("工艺路线工序ID不能为空");
        }
        TechnologyRoutingOperation routingOperation = getRoutingOperation(syncDto.getTechnologyRoutingOperationId());
        List<TechnologyOperationParam> operationParamList = technologyOperationParamMapper.selectList(
@@ -91,23 +91,25 @@
            );
        }
        int successCount = 0;
        for (TechnologyOperationParam operationParam : operationParamList) {
            boolean exists = technologyRoutingOperationParamMapper.selectCount(
                    Wrappers.<TechnologyRoutingOperationParam>lambdaQuery()
                            .eq(TechnologyRoutingOperationParam::getTechnologyRoutingOperationId, routingOperation.getId())
                            .eq(TechnologyRoutingOperationParam::getTechnologyOperationParamId, operationParam.getId())
            ) > 0;
            if (!replaceExisting && exists) {
                continue;
        if (CollectionUtils.isNotEmpty(operationParamList)) {
            for (TechnologyOperationParam operationParam : operationParamList) {
                boolean exists = technologyRoutingOperationParamMapper.selectCount(
                        Wrappers.<TechnologyRoutingOperationParam>lambdaQuery()
                                .eq(TechnologyRoutingOperationParam::getTechnologyRoutingOperationId, routingOperation.getId())
                                .eq(TechnologyRoutingOperationParam::getTechnologyOperationParamId, operationParam.getId())
                ) > 0;
                if (!replaceExisting && exists) {
                    continue;
                }
                TechnologyRoutingOperationParam snapshot = new TechnologyRoutingOperationParam();
                snapshot.setTechnologyRoutingOperationId(routingOperation.getId());
                snapshot.setTechnologyOperationParamId(operationParam.getId());
                snapshot.setTechnologyOperationId(operationParam.getTechnologyOperationId());
                snapshot.setStandardValue(operationParam.getStandardValue());
                fillFromOperationParam(snapshot, routingOperation);
                technologyRoutingOperationParamMapper.insert(snapshot);
                successCount++;
            }
            TechnologyRoutingOperationParam snapshot = new TechnologyRoutingOperationParam();
            snapshot.setTechnologyRoutingOperationId(routingOperation.getId());
            snapshot.setTechnologyOperationParamId(operationParam.getId());
            snapshot.setTechnologyOperationId(operationParam.getTechnologyOperationId());
            snapshot.setStandardValue(operationParam.getStandardValue());
            fillFromOperationParam(snapshot, routingOperation);
            technologyRoutingOperationParamMapper.insert(snapshot);
            successCount++;
        }
        return successCount;
    }
@@ -134,11 +136,11 @@
    private TechnologyRoutingOperation getRoutingOperation(Long technologyRoutingOperationId) {
        if (technologyRoutingOperationId == null) {
            throw new ServiceException("technologyRoutingOperationId is required");
            throw new ServiceException("工艺路线工序ID不能为空");
        }
        TechnologyRoutingOperation routingOperation = technologyRoutingOperationMapper.selectById(technologyRoutingOperationId);
        if (routingOperation == null) {
            throw new ServiceException("Technology routing operation not found");
            throw new ServiceException("工艺路线工序不存在");
        }
        return routingOperation;
    }
@@ -147,22 +149,54 @@
        if (item.getTechnologyOperationId() == null) {
            item.setTechnologyOperationId(routingOperation.getTechnologyOperationId());
        } else if (!item.getTechnologyOperationId().equals(routingOperation.getTechnologyOperationId())) {
            throw new ServiceException("technologyOperationId does not match routing operation");
            throw new ServiceException("工序ID与工艺路线工序不匹配");
        }
        if (item.getTechnologyOperationParamId() == null) {
        if (item.getTechnologyOperationParamId() != null) {
            TechnologyOperationParam operationParam = technologyOperationParamMapper.selectById(item.getTechnologyOperationParamId());
            if (operationParam == null) {
                throw new ServiceException("工序参数不存在");
            }
            if (!routingOperation.getTechnologyOperationId().equals(operationParam.getTechnologyOperationId())) {
                throw new ServiceException("工序参数不属于当前工艺路线工序");
            }
            TechnologyParam technologyParam = technologyParamMapper.selectById(operationParam.getTechnologyParamId());
            if (technologyParam == null) {
                throw new ServiceException("基础参数不存在");
            }
            fillFromTechnologyParam(item, technologyParam);
            if (item.getStandardValue() == null) {
                item.setStandardValue(operationParam.getStandardValue());
            }
            return;
        }
        TechnologyOperationParam operationParam = technologyOperationParamMapper.selectById(item.getTechnologyOperationParamId());
        if (operationParam == null) {
            throw new ServiceException("Technology operation param not found");
        if (item.getParamId() != null) {
            TechnologyParam technologyParam = technologyParamMapper.selectById(item.getParamId());
            if (technologyParam == null) {
                throw new ServiceException("基础参数不存在");
            }
            fillFromTechnologyParam(item, technologyParam);
            TechnologyOperationParam operationParam = technologyOperationParamMapper.selectOne(
                    Wrappers.<TechnologyOperationParam>lambdaQuery()
                            .eq(TechnologyOperationParam::getTechnologyOperationId, routingOperation.getTechnologyOperationId())
                            .eq(TechnologyOperationParam::getTechnologyParamId, item.getParamId())
                            .orderByAsc(TechnologyOperationParam::getId)
                            .last("limit 1")
            );
            if (operationParam != null) {
                item.setTechnologyOperationParamId(operationParam.getId());
                if (item.getStandardValue() == null) {
                    item.setStandardValue(operationParam.getStandardValue());
                }
            }
            return;
        }
        if (!routingOperation.getTechnologyOperationId().equals(operationParam.getTechnologyOperationId())) {
            throw new ServiceException("Operation param does not belong to routing operation");
        }
        TechnologyParam technologyParam = technologyParamMapper.selectById(operationParam.getTechnologyParamId());
        if (technologyParam == null) {
            throw new ServiceException("Technology param not found");
        }
        throw new ServiceException("paramId或technologyOperationParamId不能为空");
    }
    private void fillFromTechnologyParam(TechnologyRoutingOperationParam item, TechnologyParam technologyParam) {
        item.setParamId(technologyParam.getId());
        item.setParamCode(technologyParam.getParamCode());
        item.setParamName(technologyParam.getParamName());
@@ -173,18 +207,6 @@
        if (item.getRemark() == null || item.getRemark().trim().isEmpty()) {
            item.setRemark(technologyParam.getRemark());
        }
        if (item.getStandardValue() == null) {
            item.setStandardValue(operationParam.getStandardValue());
        }
    }
    private void validateManualFields(TechnologyRoutingOperationParam item) {
        if (item.getParamCode() == null || item.getParamCode().trim().isEmpty()) {
            throw new ServiceException("paramCode is required");
        }
        if (item.getParamName() == null || item.getParamName().trim().isEmpty()) {
            throw new ServiceException("paramName is required");
        }
    }
    private void checkDuplicate(TechnologyRoutingOperationParam item) {
@@ -193,12 +215,14 @@
                        .eq(TechnologyRoutingOperationParam::getTechnologyRoutingOperationId, item.getTechnologyRoutingOperationId())
                        .eq(item.getTechnologyOperationParamId() != null,
                                TechnologyRoutingOperationParam::getTechnologyOperationParamId, item.getTechnologyOperationParamId())
                        .eq(item.getTechnologyOperationParamId() == null && item.getParamCode() != null,
                        .eq(item.getTechnologyOperationParamId() == null && item.getParamId() != null,
                                TechnologyRoutingOperationParam::getParamId, item.getParamId())
                        .eq(item.getTechnologyOperationParamId() == null && item.getParamId() == null && item.getParamCode() != null,
                                TechnologyRoutingOperationParam::getParamCode, item.getParamCode())
                        .ne(item.getId() != null, TechnologyRoutingOperationParam::getId, item.getId())
        ) > 0;
        if (duplicate) {
            throw new ServiceException("Duplicate routing operation param");
            throw new ServiceException("工艺路线工序参数重复");
        }
    }
}