Gerador de Matrícula !

0 respostas
juniorsatanas

Pessoal minha meta para 2016 é eliminar um WS java pesadão, que consome um banco lerdo PostgreSQL !

Meus usuários geram constantemente MATRÍCULAS para ser usadas em alguns sistemas etc…!

A algum tempo em migrei o gerador de matrícula de PHP para Java, agora quero migrar para NodeJS.

Só que eu não tenho a mínima idéia de como fazer isso em NODEJS.

A regra do Gerador é a seguinte:

imagine a ultima matricula gerada: 90384015

as próximas seriam :
90384016
90384017
90384018
90384019
9038401X
90384020
90384021

Toda vez que chega em 9 ele muda o sufixo para X, e gravo a quantidade solicitada no banco, quando vou gerar pesquiso a ultima.

Alguém tem idéia como devo iniciar ?
Eu já tenho um WS NodeJs que lista as mátriculas importadas do PostgreSQL para o MongoDB.

EM PHP

90466316 90466317 90466318 90466319 9046631X 90466410
90466411 90466412 90466413 90466414 90466415 90466416
90466417 90466418 90466419 9046641X 90466510

$prefixo = substr($matricula,-8, -2);

//$digito  = ‘1’;

$sufixo  = substr($matricula,-1);
if($sufixo != 9 and $sufixo != "X"){
            $sufixo += 1;
                $matricula = $prefixo . $digito . $sufixo;}
        else if ($sufixo==9){
            $sufixo = "X";
                $matricula = $prefixo . $digito . $sufixo;}
        else if($sufixo == "X"){
                $sufixo   = 0;
                $prefixo += 1;
                $matricula = $prefixo . $digito . $sufixo;}

EM JAVA

public class Gera {

public static void main(String[] args) {

String matricula = “90384019”;

String digito = “1”;

int quantidade = 100;

int contador = 1;
// retorna desde o primeiro digito até o sexto;
String prefixoString = matricula.substring(0, 6);

    // retorna o último digito independente do tamanho da string
String sufixoString = matricula.substring(matricula.length() - 1);

    // convertemos prefixo de string para int para poder incrementá-lo
    // caso sufixoString seja igual a "X"
int prefixoInt = Integer.parseInt(prefixoString);

while (contador < quantidade) {
contador ++;        
switch (sufixoString) {
    case "9":
        sufixoString = "X";
        break;
    case "X":
        sufixoString = "0";
        prefixoInt += 1;
        break;
    default:
        // convertemos sufixoString para int para poder somá-lo com um
        // e após a soma o transformamos de novo em string
        int sufixoInt = Integer.parseInt(sufixoString);
        sufixoString = String.valueOf(sufixoInt + 1);
        break;
}
     
        String novaMatricula = prefixoInt + digito + sufixoString;
        System.out.println(novaMatricula);

}
}
}

NO WS

1d

imports

import java.math.BigInteger;

import java.util.ArrayList;

import java.util.List;

import javax.ejb.Stateless;

import javax.persistence.Query;

import javax.ws.rs.GET;

import javax.ws.rs.Path;

import javax.ws.rs.PathParam;

import javax.ws.rs.Produces;

/**
*

  • @author jr
  • @author wldomiciano
  • 20/03/2016
    */
    @Stateless
    @Path(“gerador”)
    public class GeradorFacadeREST extends AbstractFacade {
public GeradorFacadeREST() {

super(Gerador.class);

}
//cadastra a lista de matriculas

//Recebe a lista de matrícula do gerarmatriculaPOST

<a class="mention" href="/u/get">@GET</a>

<a class="mention" href="/u/path">@Path</a>(“gerar/{pardigito}/{parquantidade}/{paridfuncionario}/{paridunidade}”)

@Produces({“application/json”})

public List getGerador(

@PathParam(“pardigito”) Integer pardigito,

@PathParam(“parquantidade”) Integer parquantidade,

@PathParam(“paridfuncionario”) BigInteger paridfuncionario,

@PathParam(“paridunidade”) Integer paridunidade ) {
List<Gerador> listaGerador = new ArrayList<Gerador>();
List<String> listaMatricula = gerarmatriculaPOST(pardigito, parquantidade);

Query query = getEntityManager().createQuery("FROM Funcionario WHERE id=:paridfuncionario");
query.setParameter("paridfuncionario", paridfuncionario);
Funcionario f = (Funcionario) query.getSingleResult();
for (String matricula : listaMatricula) {
    Gerador gerador = new Gerador();
    gerador.setMatricula(matricula);
    gerador.setDigito(pardigito);
    gerador.setQuantidade(parquantidade);
    gerador.setFuncionarioFk(f);
    gerador.setUnidadeFk(paridunidade);
    gerador.setNomeFuncionario(f.getNome());
    super.create(gerador);
    listaGerador.add(gerador);
}
return listaGerador;

}

//lista todos

<a class="mention" href="/u/get">@GET</a>

@Produces({“application/json”})

<a class="mention" href="/u/override">@Override</a>

public List findAll() {

List lista = super.findAll();

return lista;

}
//pesquisa por nome monta o combobox

<a class="mention" href="/u/get">@GET</a>

<a class="mention" href="/u/path">@Path</a>(“pesqnome/{parnome}”)

@Produces({“application/json”})

public List getPesqFuncNome(@PathParam(“parnome”) String parnome) {

List pesqFuncNome = PesqFuncNome(parnome);

return pesqFuncNome;

}
//pesquisa por sigla monta o combobox

<a class="mention" href="/u/get">@GET</a>

<a class="mention" href="/u/path">@Path</a>(“pesqsigla/{parsigla}”)

@Produces({“application/json”})

public List getPesqSigla(@PathParam(“parsigla”) String parsigla) {

List pesqSigla = PesqSigla(parsigla);

return pesqSigla;

}
//pesquisa por matricula monta o combobox

<a class="mention" href="/u/get">@GET</a>

<a class="mention" href="/u/path">@Path</a>(“pesqmatricula/{parmatricula}”)

@Produces({“application/json”})

public List getPesqMatricula(@PathParam(“parmatricula”) String parmatricula) {

List pesqMatricula = PesqMatricula(parmatricula);

return pesqMatricula;

}
/*========================================================================================

============================   GERADOR DE MATŔICULA    =================================

Pesquisa  a ultima matrícula baseado no tipo, 1 tercerizado

2 cooperado, gerando baseado na quantidade solicitada

*/

private List gerarmatriculaPOST(Integer pardigito, Integer parquantidade) {

//pesquisa a ultima matrícula gerada, digito define se tercerizado ou cooperado

String hql = SELECT max(matricula) FROM Gerador WHERE digito = :pardigito;

Query query = getEntityManager().createQuery(hql);

query.setParameter(pardigito, pardigito);

String matricula = (String) query.getSingleResult();

Integer digito = pardigito;

Integer quantidade = parquantidade;

Integer contador = 0;

// retorna desde o primeiro digito até o sexto;

String prefixoString = matricula.substring(0, 6);

// retorna o último digito independente do tamanho da string

String sufixoString = matricula.substring(matricula.length() - 1);

// convertemos prefixo de string para int para poder incrementá-lo

// caso sufixoString seja igual a "X"

int prefixoInt = Integer.parseInt(prefixoString);

//intera a quantidade de matrículas solicitadas

List list = new ArrayList<>();

while (contador < quantidade) {

contador++;

switch (sufixoString) {

case 9:

sufixoString = X;

break;

case X:

sufixoString = 0;

prefixoInt += 1;

break;

default:

// convertemos sufixoString para int para poder somá-lo com um

// e após a soma o transformamos de novo em string

int sufixoInt = Integer.parseInt(sufixoString);

sufixoString = String.valueOf(sufixoInt + 1);

break;

}

String novaMatricula = prefixoInt + “” + digito + “” + sufixoString;

//retorna a lista de matrícula

list.add(novaMatricula);

}

return list;

}
private List PesqFuncNome(String parnome) {

String hql = ("SELECT w.nome, <a href="http://w.id">w.id</a> FROM "

+ "Funcionario w "

+ "WHERE w.nome "

+ "LIKE :parnome "

+ “ORDER BY w.nome”);

Query query = getEntityManager().createQuery(hql);

query.setParameter(“parnome”, “%” + parnome.toUpperCase() + “%”);

List lista = query.getResultList();

return lista;

}
public List PesqSigla(String parsigla) {

String hql = "SELECT s.sigla, <a href="http://s.id">s.id</a> FROM "

+ "Organograma s "

+ "WHERE s.sigla "

+ "LIKE :parsigla "

+ “ORDER BY s.sigla”;

Query query = getEntityManager().createQuery(hql);

query.setParameter(“parsigla”, “%” + parsigla.toUpperCase() + “%”);

List lista = query.getResultList();

return lista;

}
public List PesqMatricula(String parmatricula) {

String hql = "SELECT s.matricula, <a href="http://s.id">s.id</a> FROM "

+ "FuncionarioContrato s "

+ "WHERE s.matricula "

+ "LIKE :parmatricula "

+ “ORDER BY s.matricula”;

Query query = getEntityManager().createQuery(hql);

query.setParameter(“parmatricula”, “%” + parmatricula.toUpperCase() + “%”);

List lista = query.getResultList();

return lista;

}

Obrigado!

Criado 11 de março de 2016
Respostas 0
Participantes 1