Dar baixa em uma peça após cadastrar

Bom eu tenho um metodo que cadastra as peças que foram utilizadas na requisição
e elas tem estoques
mas meu metodo está enorme
alguém poderia me ajudar a dar uma melhorada nele dividir em mais de um metodo.

ou seja ao inserir um boletim ( se foi utilizado uma peça ) diminuir uma peça no estoque
e antes de inserir o boletim fazer uma verificação no estoque de peças disponiveis.

meu metodo:

public boolean inserir(List<Servicos> s, Requisicao r, String motivo, List<Pecas> p) throws SQLException {
    try {
        con.setAutoCommit(false);
        String select = "SELECT * FROM detalhe_status where id_statusdetalhes="+r.getReqStatus_Detalhes().getId_statusdetalhes()+" ";
        PreparedStatement stmt = con.prepareStatement(select);
        ResultSet rsSelect = stmt.executeQuery();
        rsSelect.next();
        if(rsSelect.getLong("idstatus")==1){
        PreparedStatement inserirServicos = con.prepareStatement("INSERT INTO boletim (idequipamento_requisicao,motivo) VALUES(?,?)", PreparedStatement.RETURN_GENERATED_KEYS);
        inserirServicos.setLong(1, r.getId());
        inserirServicos.setString(2, motivo);
        inserirServicos.executeUpdate();
        ResultSet rs = inserirServicos.getGeneratedKeys();
        rs.next();
        Long idGerado = rs.getLong(1);
        for (Servicos servicosBd : s) {
            String servicossql = "INSERT INTO relatorio_servicos (idservicos,idboletim) VALUES(" + servicosBd.getId_Servicos() + "," + idGerado + ")";
            PreparedStatement inserirservicos = con.prepareStatement(servicossql);
            inserirservicos.executeUpdate();
        }
  // adicionando peças
        for (Pecas pecasBD : p) {
            String pecassql = "INSERT INTO pecas_relatorio (idequipamento_requisicao,idpecas) VALUES(?,?)";
            PreparedStatement inserirpecas = con.prepareStatement(pecassql);
            inserirpecas.setLong(1, r.getId());
            inserirpecas.setInt(2, pecasBD.getIdpecas());
            inserirpecas.executeUpdate();
        }
        String status = "UPDATE detalhe_status set idequipamento_requisicao = ? , idusuario=?, idstatus=2, data=now(), observacao=?  where id_statusdetalhes="+r.getReqStatus_Detalhes().getId_statusdetalhes()+"";
        PreparedStatement statussmt = con.prepareStatement(status );
        statussmt.setLong(1, r.getId());
        statussmt.setLong(2, Sessao.getInstancia().getUsuario().getId()); 
        statussmt.setString(3, motivo);
        statussmt.executeUpdate();
        alerts.alertReqCadastrado();
        }
        else{
            alerts.reqFechada();
        }
        con.commit();
        return true;
    } catch (SQLException ex) {
        con.rollback();
        Logger.getLogger(RequisicaoDAO.class.getName()).log(Level.SEVERE, null, ex);
        return false;
    }
}

Como você quer fazer verificação, você pode criar um método booleano, que retorna true ou false de acordo com a disponibilidade. Daí vc usa este método em um if e daí da baixa no estoque ou não, de acordo com o return do método. Neste caso, você verifica se tem ou não no estoque. Quantidade ai já não seria em boolean. Afinal, neh, boolean so te retorna true ou false kkk

opa man como eu faria esse metodo
percorrendo a lista?

aq está meu novo codigo:

private CheckBox[] checkBoxes;

public void initialize(URL url, ResourceBundle rb) {
    initTable();
    tb.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() {
        @Override
        public void changed(ObservableValue observable, Object oldValue, Object newValue) {
            selecionada = (Requisicao) newValue;
        }
    });

  checkBoxes = new CheckBox[] {
  checkMonitor,
  checkTeclado,
  checkMouse,
  checkVGA,
  checkPlacaMae,
  checkHD,
  checkFonte,
  checkRam,
  checkCabos,
  checkGravador,
  checkBateria
    };  

}

para guardar o id dessa lista checkboxes:

public void xd(){
    List<Integer> pecasList = new ArrayList<>();
    for (int i = 0; i < checkBoxes.length; i++) {
        if (checkBoxes[i].isSelected()) {
            pecasList.add(i+1);
        }
    }
    
}

o meu DAO:

public List<Pecas> pegarPecasById(List<Integer> ids) {
    List<Pecas> pecaslist = new ArrayList<>();
if (ids.isEmpty()) {
    return new ArrayList<>(0);
} else {
    String sql = ids.stream().map(Object::toString).collect(Collectors.joining(",", "SELECT * FROM pecas WHERE id_pecas IN (", ")"));

    try {
        PreparedStatement stmt = con.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();
        while (rs.next()) {       
            Pecas pecas = new Pecas();
            pecas.setIdpecas(rs.getInt("id_pecas"));
            pecas.setNome(rs.getString("nome"));
            pecas.setQtd_Pecas(rs.getInt("qtdPecas"));
            pecaslist.add(pecas);
        }
        stmt.close();
        rs.close();
    } catch (SQLException ex) {
        Logger.getLogger(RequisicaoDAO.class.getName()).log(Level.SEVERE, null, ex);
        return null;
    }
    return pecaslist;
}   
}

e eu percorrendo a lista

    Alerts alerts = new Alerts();
    PecasDAO pecas = new PecasDAO();
    pecas.pegarPecasById(pecasList);
    for (Pecas checarQtd : pecas.pegarPecasById(pecasList)){
        if(checarQtd.getQtd_Pecas()>0){
            alerts.alertReqCadastrado();
        }else{
            alerts.alertSenhaDif();
        }
    }