chenhj
2026-04-22 196dec5ffae084f772dffc0fb1fc4441839f7952
src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationParamServiceImpl.java
@@ -62,7 +62,6 @@
    public boolean saveTechnologyRoutingOperationParam(TechnologyRoutingOperationParam item) {
        TechnologyRoutingOperation routingOperation = getRoutingOperation(item.getTechnologyRoutingOperationId());
        fillFromOperationParam(item, routingOperation);
        validateManualFields(item);
        checkDuplicate(item);
        return this.saveOrUpdate(item);
    }
@@ -75,7 +74,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(
@@ -134,11 +133,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 +146,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) {
            return;
        }
        if (item.getTechnologyOperationParamId() != null) {
        TechnologyOperationParam operationParam = technologyOperationParamMapper.selectById(item.getTechnologyOperationParamId());
        if (operationParam == null) {
            throw new ServiceException("Technology operation param not found");
                throw new ServiceException("工序参数不存在");
        }
        if (!routingOperation.getTechnologyOperationId().equals(operationParam.getTechnologyOperationId())) {
            throw new ServiceException("Operation param does not belong to routing operation");
                throw new ServiceException("工序参数不属于当前工艺路线工序");
        }
        TechnologyParam technologyParam = technologyParamMapper.selectById(operationParam.getTechnologyParamId());
        if (technologyParam == null) {
            throw new ServiceException("Technology param not found");
                throw new ServiceException("基础参数不存在");
        }
            fillFromTechnologyParam(item, technologyParam);
            if (item.getStandardValue() == null) {
                item.setStandardValue(operationParam.getStandardValue());
            }
            return;
        }
        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;
        }
        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 +204,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 +212,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("工艺路线工序参数重复");
        }
    }
}