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
@GET
@Path(“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
@GET
@Produces({“application/json”})
@Override
public List findAll() {
List lista = super.findAll();
return lista;
}
//pesquisa por nome monta o combobox
@GET
@Path(“pesqnome/{parnome}”)
@Produces({“application/json”})
public List getPesqFuncNome(@PathParam(“parnome”) String parnome) {
List pesqFuncNome = PesqFuncNome(parnome);
return pesqFuncNome;
}
//pesquisa por sigla monta o combobox
@GET
@Path(“pesqsigla/{parsigla}”)
@Produces({“application/json”})
public List getPesqSigla(@PathParam(“parsigla”) String parsigla) {
List pesqSigla = PesqSigla(parsigla);
return pesqSigla;
}
//pesquisa por matricula monta o combobox
@GET
@Path(“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, w.id 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, s.id 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, s.id 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!