Ajuda na logica

0 respostas
xandevieira

Bom dia, gostaria da ajuda de vcs para resolver um problema.
Tenho uma tabela Conta

private Integer cdEmpresa;
    private Integer cdConta;
    private Integer cdNivelPlano;
    private Integer cdGrupoConta;
    private Integer cdReduzido;
    private String cdContaContabil;
    private String nmConta;
    private Integer cdContaPai;
    private String flContaAtiva;
    private String flBalanco;    
    private String flRateio;
    private Character flRedutora;

Estou lendo uma planilha do excel para criar os objetos e inserir no banco da dados.

1	                ATIVO
11	                ATIVO CIRCULANTE
111	                DISPONIVEL
111.01	        CAIXA GERAL
111.01.0001	CAIXA OBRA HOSP. BOTUCATU
111.01.0005	CAIXA ENGENHARIA
111.01.0006	CAIXA FINANCEIRO
111.01.0007	CAIXA COMERCIAL
111.02	        BANCO CONTA MOVIMENTO
111.02.0001	BANCO BRADESCO SA
111.02.0002	CEF RIO CLARO
111.02.0007	CAIXA ECONOMICA FEDERAL
111.02.0008	BANCO BANESPA S/A
111.02.0009	BANCO SUDAMERIS/AMER.SUL
111.02.0010	BANCO ITAU S/A
111.02.0011	BANCO ITAU PAULISTA
111.02.0012	BANCO DO BRASIL
111.02.0018	NOSSA CAIXA / NOSSO BANCO
111.02.0019	BANCO CRUZEIRO DO SUL
111.03	       APLIC.FINANC.RENDA FIXA


public void leituraCTB(String arquivo) throws BiffException, IOException, SQLException{
		Workbook workbook = Workbook.getWorkbook(new File(arquivo));
		Sheet sheet = workbook.getSheet(0);
		PreparedStatement stmt = null; 
		try {
			String sql = "insert into ectbConta (cdEmpresa, cdConta, cdNivelPlano, cdGrupoConta, cdReduzido, cdContaContabil, nmConta, flContaAtiva, flBalanco, flRateio, flRedutora) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
			stmt = DataSource.getConexao().prepareStatement(sql);
			int linhas = sheet.getRows();
			System.out.println("Iniciando a leitura da planilha XLS:");
			ContaDB contaDB = new ContaDB(); 
			NivelPlanoDB nivelPlanoDB = new NivelPlanoDB();
//			  
			String[] np = "111.01.0006".split("\.");
			for (int i = 0; i < np.length; i++) {
				NivelPlano nivelPlano = new NivelPlano();
				nivelPlano.setCdEmpresa(1);
				nivelPlano.setCdNivelPlano(i+1);
				nivelPlano.setDeNivelPlano("Nível "+(i+1));
				nivelPlano.setNuDigitos(new Long(np[i].length()));
				nivelPlano.setTpAnaliSinte( i+1 != np.length ? "S" : "A");
				nivelPlano.setDeMascara("111.01.0006");
				nivelPlanoDB.insert(nivelPlano);
			}
			for(int i = 0; i < linhas; i++){
				System.out.println("Inserindo linha "+(i+1));
				Cell cell1 = sheet.getCell(0, i);
				Cell cell2 = sheet.getCell(1, i);
//				Cell cell3 = sheet.getCell(2, i);
				String as1 = cell1.getContents();
				String as2 = cell2.getContents();
//				String as3 = cell3.getContents();
				int cdGrupoConta = Integer.parseInt(TextUtils.characterToString(as1.charAt(0)));
				Conta conta = new Conta();
				conta.setCdEmpresa(1);
				conta.setCdConta(i+1);
				conta.setCdNivelPlano(TextUtils.count(as1));
				conta.setCdGrupoConta(cdGrupoConta);
				conta.setCdReduzido(i+1);
				conta.setCdContaContabil(as1.trim());
				conta.setNmConta(as2.trim());	
				conta.setFlContaAtiva("S");
				conta.setFlBalanco("N");
				conta.setFlRateio("N");
				conta.setFlRedutora('N');
//				conta.setCdContaPai(1);
				contaDB.insert(conta, stmt);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			System.out.println("Importação concluida");
			workbook.close();
		}
	}
	public void insert(Conta conta, PreparedStatement stmt) throws SQLException {
		try {
			stmt.setInt(1, conta.getCdEmpresa());
			stmt.setInt(2, conta.getCdConta());
			stmt.setInt(3, conta.getCdNivelPlano());
			stmt.setInt(4, conta.getCdGrupoConta());
			stmt.setInt(5, conta.getCdReduzido());
			stmt.setString(6, conta.getCdContaContabil());
			stmt.setString(7, conta.getNmConta());	
			stmt.setString(8, conta.getFlContaAtiva());
			stmt.setString(9, conta.getFlBalanco());
			stmt.setString(10, conta.getFlRateio());
			stmt.setString(11, conta.getFlRedutora().toString());
//			stmt.setInt(12, conta.getCdContaPai());
			stmt.executeUpdate();
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}

Até aqui tudo funcionando perfeitamente.
um problema que não estou tendo ideia de como resolver é que, conforme o nivel vai aumentando, tenho que ir colocando no campo CdContaPai o codigo da conta com nivel inferior.
ex.

1	                é a conta de mais alto nivel, não tem pai
11	                conta fila a 1
111	                conta filha da 11
111.01	        conta filha da 111
111.01.0001       conta filha da 111.01
...
111.02	        conta filha da 11
111.02.0001      conta filha da 111.02

e assim por diante.
Espero ter sido claro
Criado 17 de julho de 2009
Respostas 0
Participantes 1