I have a project done with JHipster. It uses spring-boot. I use this application as an ordering platform where I use several webservices from an ERP and also synchronize the data with android devices in the mobile version of the platform.
To consume ERP WSs, I use a class with annotation @Component and @Scheduled (fixedDelayString="90000") to run as a job every 90 seconds. It consumes 11 webservices. The problem is that this Job stops running at about every 12 hours.
I have another similar Job running on the same project, but it does not consume any external resource, it just does calculations.
The 2 Jobs stop at the same time and only a few REST methods work.
Does anyone have an idea what it might be?
follows class:
package br.inf.gati.gts.job;
@Component
public class SyncErpJob {
private final Logger log = LoggerFactory.getLogger(SyncErpJob.class);
@Autowired
private EmpresaFilialRepository empresaFilialRepo;
@Autowired
private ClienteRepository clienteRepo;
@Autowired
private ProdutoRepository produtoRepo;
@Autowired
private CondicaoPagtoRepository condPagtoRepo;
@Autowired
private TransportadoraRepository transpRepo;
@Autowired
private TabelaPrecoRepository tabPrecoRepo;
@Autowired
private TabelaPrecoProdutoRepository tabPrecoProdRepo;
@Autowired
private ExcecaoFiscalRepository excecaoRepo;
@Autowired
private OperacaoFiscalRepository operacaoRepo;
@Autowired
private ParamImpostosRepository impostosRepo;
@Autowired
private PedidoVendaRepository pedidoRepo;
@Autowired
private ContasReceberRepository contasRepo;
@Autowired
private MailService mailService;
@Value("${gts.webservice.soap.ativo}")
public Boolean ativo;
@Value("${gts.webservice.soap.erp.date.format}")
public String dateFormatPattern;
@Value("${gts.webservice.soap.erp.date.timezone}")
public String timeZoneParam;
@Value("${gts.webservice.soap.erp.url}")
private String url;
@Value("${gts.webservice.soap.erp.port}")
private String port;
@Scheduled(fixedDelayString = "${gts.webservice.soap.erp.time}")
public void ConsumoSOAPErp() {
if(ativo){
log.info("SEJ-MSG001: Percorrendo Webservices de consumo de dados do ERP!");
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SoapClientConfig.class);
List<EmpresaFilial> listaFiliais = empresaFilialRepo.findAll();
for (EmpresaFilial filial : listaFiliais){
log.info("SEJ-MSG003: Empresa:["+filial.getCdEmpresa()+"] Filial:["+filial.getCdFilial()+"]");
consomeCliente(filial, context);
consomeProduto(filial, context);
consomeCondPagto(filial, context);
// demais WS
}
context.close();
}else{
log.debug("Consumo de werbservices inativo!");
}
}
private void consomeCondPagto(EmpresaFilial filial, AnnotationConfigApplicationContext context) {
try{
CondPagtoWsClient condPagtoListaWs = context.getBean(CondPagtoWsClient.class);
condPagtoListaWs.setUrl(url);
condPagtoListaWs.setPort(port);
condPagtoListaWs.setDefaultUri(url+":"+port+"/WSDLCPGTO.apw");
CONDSLSTRESPONSE responseList = condPagtoListaWs.getCondPagtoLstResponse(filial.getCdEmpresa(), filial.getCdFilial());
List<STCPGTO> wsCondPagto = responseList.getCONDSLSTRESULT().getAREGS().getSTCPGTO();
for (STCPGTO stCond : wsCondPagto){
log.info("SEJ-MSG020: Cond.Pagto: cdCod:["+stCond.getCE4COD() +"] "
+ "Cond. Pagto:["+stCond.getCE4COND() +"]"
+ "dsCondPagto:["+stCond.getCE4DESCRI()+"]");
try{
BigInteger regNumErp = stCond.getCE4RECNO();
CondicaoPagto cond = null;
try{
cond = condPagtoRepo.findByFilialIdAndCdCondPagto(filial.getId(),
StringUtils.truncate(stCond.getCE4COD().trim(), 3));
}catch (NullPointerException e) {}
if (cond == null){
cond = new CondicaoPagto();
cond.setFilial(filial);
cond.setCdEmpresa( StringUtils.truncate(filial.getCdEmpresa(),2));//c2
cond.setCdFilial( StringUtils.truncate(filial.getCdFilial(),2));//c2
cond.setCdCondPagto( StringUtils.truncate(stCond.getCE4COD(),3));//c3
}
cond.setCdCondicao( StringUtils.truncate(stCond.getCE4COND(),60));//c60
cond.setDsCondPagto( StringUtils.truncate(stCond.getCE4DESCRI(),60));//c60
cond.setNrDiasPrazoMedio( new BigDecimal(stCond.getCE4PRAZO()));//float14,2
cond.setDtSincronizacao( ZonedDateTime.now());
cond.setIdAutorCriacao( Constants.SERVER);
CondicaoPagto condSalvo = condPagtoRepo.save(cond);
if (condSalvo != null){
CONDSRETRESPONSE responseRet = condPagtoListaWs.setCondPagtoRetResponse(filial.getCdEmpresa(), filial.getCdFilial(), regNumErp);
if (responseRet != null){
if (responseRet.getCONDSRETRESULT().getCRET().trim().equalsIgnoreCase(Constants.RET_SUCESSO)){
log.info("SEJ-MSG021: Cond. Pagto. Registro ["+regNumErp+"] integrado e notificado com successo!");
}else if (responseRet.getCONDSRETRESULT().getCRET().trim().equalsIgnoreCase(Constants.RET_FALHA)) {
log.error("SEJ-MSG022: Cond. Pagto. Registro ["+regNumErp+"] integrado e notificado com falha!");
}else {
log.error("SEJ-MSG024: Cond. Pagto. Registro ["+regNumErp+"] integrado e notificado com falha no retorno!");
log.warn("SEJ-MSG025: msg["+responseRet.getCONDSRETRESULT().getCMESSAGE()+"]");
log.warn("SEJ-MSG026: ret["+responseRet.getCONDSRETRESULT().getCRET()+"]");
}
}else{
log.error("SEJ-MSG018: Sem retorno da notificação ao ERP!");
}
}else{
log.error("SEJ-MSG019: Falha ao integrar Cond. Pagto. registro ["+regNumErp+"]");
}
}catch (Exception e) {
log.error("SEJ-ERR005: Erro no consumo de condição de pagamento", e);
}
}
}catch (RuntimeException e) {
log.error("SEJ-ERR006: Falha de comunicação no consumo de condição de pagamento", e);
}
}
private void consomeProduto(EmpresaFilial filial, AnnotationConfigApplicationContext context) {
try{
ProdutoWsClient produtoListaWs = context.getBean(ProdutoWsClient.class);
produtoListaWs.setUrl(url);
produtoListaWs.setPort(port);
produtoListaWs.setDefaultUri(url+":"+port+"/WSDLProd.apw");
PRODUTOLSTRESPONSE responseList = produtoListaWs.getProdLstResponse(filial.getCdEmpresa(), filial.getCdFilial());
List<STPROD> wsProdutos = responseList.getPRODUTOLSTRESULT().getAREGS().getSTPROD();
for (STPROD stProd : wsProdutos){
log.info("SEJ-MSG012: Produto: cdProduto:["+stProd.getCB1COD() +"] "
+ "dsProduto:["+stProd.getCB1DESC()+"]");
try{
BigInteger regNumErp = stProd.getCB1RECNO();
Produto prod = null;
try{
prod = produtoRepo.findByCdEmpresaAndCdFilialAndCdProduto(filial.getCdEmpresa(),
filial.getCdFilial(),
StringUtils.truncate(stProd.getCB1COD().trim(),15));
}catch (NullPointerException e) {}
if (prod == null){
prod = new Produto();
prod.setFilial(filial);
prod.setCdEmpresa( StringUtils.truncate(filial.getCdEmpresa().trim(),2));//c2
prod.setCdFilial( StringUtils.truncate(filial.getCdFilial().trim(),2));//c2
prod.setCdProduto( StringUtils.truncate(stProd.getCB1COD().trim(),15));//c15
}
prod.setDsProduto( StringUtils.truncate(stProd.getCB1DESC().trim(),120));//c120
prod.setCdFamilia( StringUtils.truncate(stProd.getCB1FPCOD().trim(),2));//c2
prod.setCdUnidadeMedida( StringUtils.truncate(stProd.getCB1UM().trim(),2));//c2
prod.setCdGrupo( StringUtils.truncate(stProd.getCB1GRUPO().trim(),4));//c4
prod.setCdGrtrib( StringUtils.truncate(stProd.getCB1GRTRIB().trim(),6));//c6
prod.setPcIpi( new BigDecimal(stProd.getCB1IPI()));//float5,2
prod.setlImportZnFranca( StringUtils.truncate(stProd.getCB1IMPZFRC().trim(),1).equals(Constants.SIM) ? true : false );//c1
prod.setCdProdutoSubst( StringUtils.truncate(stProd.getCB1ALTER().trim(),15));//c15
prod.setVlCmvStandard( new BigDecimal(stProd.getCB1CUSTD()));//float16,6
prod.setVlCmvRazao( new BigDecimal(stProd.getCCMVRAZAO()));//float16,6
prod.setIdOrigem( StringUtils.truncate(stProd.getCB1ORIGEM().trim(),1));//c1
prod.setCdClassFiscal( StringUtils.truncate(stProd.getCB1POSIPI().trim(),10));//c10
prod.setQtEstoqueDisp( new BigDecimal(stProd.getCESTOQUE()));//float16,0
prod.setPcReducPis( new BigDecimal(stProd.getCB1REDPIS()));//float5,2
prod.setPcReducCofins( new BigDecimal(stProd.getCB1REDCOF()));//float5,2
prod.setPcPis( new BigDecimal(stProd.getCB1PPIS()));//float5,2
prod.setPcCofins( new BigDecimal(stProd.getCB1PCOFINS()));//float5,2
prod.setIdSitTrib( StringUtils.truncate(stProd.getCB1SITTRIB().trim(),1));//c1
prod.setDsFichaTecnica( StringUtils.truncate(stProd.getCFICHADESC(),200));//c200
// campo nr_aliq_icms_interna criado em 30/09/2016 após reunião com cliente para definir os cálculos
prod.setNrAliqIcmsInterna( new BigDecimal(stProd.getCICMSNCM()));//float5,2);
// campo nr_aliq_icms_externa criado em 30/09/2016 após reunião com cliente para definir os cálculos
// Este campo não será usado atualmente, porem foi sugerido manter pelo Analista Fiscal
prod.setNrAliqIcmsExterna( new BigDecimal(stProd.getCICMSNCM()));//float5,2);
prod.setBlobFichaTecnica( stProd.getCFICHATEC().getBytes());
if (stProd.getCFICHATEC().length() > 0 ){
log.error("[[TESTE]] tamanho do blob maior que zero stProd.getCFICHATEC()[ " + stProd.getCFICHATEC() + " ]");
}
prod.setBlobFichaTecnicaContentType(Constants.CONTENT_TYPE_PDF);
Boolean lAtivo = StringUtils.truncate(stProd.getCB1ATIVO().trim(),1).equals(Constants.SIM) ? true : false; //c1
Boolean lEnvGts = StringUtils.truncate(stProd.getCB1ENVGTS().trim(),1).equals(Constants.ATIVO) ? true : false; //c1;
prod.setlAtivo( (lAtivo && lEnvGts));
try{
prod.setCfRentabilidadeprod(new BigDecimal(stProd.getCB1COEFICI().trim()));
}catch (NullPointerException e) {
prod.setCfRentabilidadeprod(new BigDecimal(0.0));
}catch (NumberFormatException e) {
prod.setCfRentabilidadeprod(new BigDecimal(0.0));
}
prod.setDtSincronizacao(ZonedDateTime.now());
prod.setIdAutorCriacao(Constants.SERVER);
Produto prodSalvo = produtoRepo.save(prod);
if (prodSalvo != null){
// if (prodSalvo != null || !prod.islAtivo()){
PRODRETRESPONSE responseRet = produtoListaWs.setProdRetResponse(filial.getCdEmpresa(), filial.getCdFilial(), regNumErp);
if (responseRet != null){
if (responseRet.getPRODRETRESULT().getCRET().trim().equalsIgnoreCase(Constants.RET_SUCESSO)){
log.info("SEJ-MSG013: Produto Registro ["+regNumErp+"] integrado e notificado com successo!");
}else if (responseRet.getPRODRETRESULT().getCRET().trim().equalsIgnoreCase(Constants.RET_FALHA)) {
log.error("SEJ-MSG014: Produto Registro ["+regNumErp+"] integrado e notificado com falha!");
}else {
log.error("SEJ-MSG015: Produto Registro ["+regNumErp+"] integrado e notificado com falha no retorno!");
log.warn("SEJ-MSG016: msg["+responseRet.getPRODRETRESULT().getCMESSAGE()+"]");
log.warn("SEJ-MSG017: ret["+responseRet.getPRODRETRESULT().getCRET()+"]");
}
}else{
log.error("SEJ-MSG018: Sem retorno da notificação ao ERP!");
}
}else{
log.error("SEJ-MSG019: Falha ao integrar Produto registro ["+regNumErp+"]");
}
}catch (Exception e) {
log.error("SEJ-ERR003: Erro no consumo de produtos", e);
}
}
}catch (RuntimeException e) {
log.error("SEJ-ERR004: Falha de comunicação no consumo de produtos", e);
}
}
private void consomeCliente(EmpresaFilial filial, AnnotationConfigApplicationContext context) {
try{
ClienteWsClient clienteListaWs = context.getBean(ClienteWsClient.class);
clienteListaWs.setUrl(url);
clienteListaWs.setPort(port);
clienteListaWs.setDefaultUri(url+":"+port+"/WSDLCLI.apw");
CLIENTELSTRESPONSE responseList = clienteListaWs.getClientLstResponse(filial.getCdEmpresa(), filial.getCdFilial());
List<STCLIENTE> wsClientes = responseList.getCLIENTELSTRESULT().getAREGS().getSTCLIENTE();
for (STCLIENTE stCli : wsClientes){
log.info("SEJ-MSG004: Cliente: CdCliente:["+stCli.getCA1COD() +"] "
+ "CdLoja:["+stCli.getCA1LOJA()+"] "
+ "Nome:["+stCli.getCA1NOME()+"]");
try{
BigInteger regNumErp = stCli.getCA1RECNO();
Cliente cliente = null;
try{
cliente = clienteRepo.findOneByFilialIdAndCdClienteAndCdLoja( filial.getId(),
StringUtils.truncate(stCli.getCA1COD().trim(),6),
StringUtils.truncate(stCli.getCA1LOJA().trim(),4));
}catch (NullPointerException e) {}
if (cliente == null){
cliente = new Cliente();
cliente.setFilial(filial);
cliente.setCdEmpresa( StringUtils.truncate(filial.getCdEmpresa().trim(),2)); //c2
cliente.setCdFilial( StringUtils.truncate(filial.getCdFilial().trim(),2));//c2
cliente.setCdCliente( StringUtils.truncate(stCli.getCA1COD().trim(),6));//c6
cliente.setCdLoja( StringUtils.truncate(stCli.getCA1LOJA().trim(),4));//c4
}
cliente.setNmCliente( StringUtils.truncate(stCli.getCA1NOME().trim(),60));//c60
cliente.setNmClienteReduc( StringUtils.truncate(cliente.getNmCliente(),20));//c20
cliente.setDsEndereco( StringUtils.truncate(stCli.getCA1END().trim(),80));//c80
cliente.setCdTipoCli( StringUtils.truncate(stCli.getCA1TIPO().trim(),1));//c1
cliente.setCdGrptrib( StringUtils.truncate(stCli.getCA1GRPTRIB().trim(),3));//c3
cliente.setSgUf( StringUtils.truncate(stCli.getCA1EST().trim(),2));//c2
cliente.setNmCidade( StringUtils.truncate(stCli.getCA1MUN().trim(),60));//c60
cliente.setNmBairro( StringUtils.truncate(stCli.getCA1BAIRRO().trim(),30));//c30
cliente.setCdCep( StringUtils.truncate(stCli.getCA1CEP().trim(),8));//c8
cliente.setNrDdd( StringUtils.truncate(stCli.getCA1DDD().trim(),3));//c3
cliente.setNrTelefone( StringUtils.truncate(stCli.getCA1TEL().trim(),15));//c15
cliente.setDsEmail( StringUtils.truncate(stCli.getCA1EMAIL().trim(),120));//c120
cliente.setNrCnpjCpf( StringUtils.truncate(stCli.getCA1CGC().trim(),14));//c14
cliente.setNmContato( StringUtils.truncate(stCli.getCA1CONTATO().trim(),15));//c15
cliente.setNrInscr( StringUtils.truncate(stCli.getCA1INSCR().trim(),18));//c18
cliente.setCdRegiao( StringUtils.truncate(stCli.getCA1REGIAO().trim(),3));//c3
cliente.setCdSuframa( StringUtils.truncate(stCli.getCA1SUFRAMA().trim(),12));//c12
cliente.setlContribIcms( StringUtils.truncate(stCli.getCA1CONTRIB().trim(),1).equalsIgnoreCase("1") ? true: false);//c1
cliente.setIdSimplesNacional( StringUtils.truncate(stCli.getCA1SIMPNAC(),1));//c1
cliente.setVlSaldoLimite( new BigDecimal(stCli.getCLIMCRED()));//float17,2
cliente.setInadimplente( StringUtils.truncate(stCli.getCSITCLI().trim(),1).equalsIgnoreCase(Constants.SIM) ? true: false);//c1
cliente.setDtSincronizacao(ZonedDateTime.now());
cliente.setIdAutorCriacao(Constants.SERVER);
Boolean lLiberado = StringUtils.truncate(stCli.getCATIVO().trim(),1).equals(Constants.SIM) ? true : false; //c1
cliente.setlLiberado( lLiberado);
Cliente clienteSalvo = clienteRepo.save(cliente);
if (clienteSalvo != null){
CLIRETRESPONSE responseRet = clienteListaWs.setClientRetResponse(filial.getCdEmpresa(), filial.getCdFilial(), regNumErp);
if (responseRet != null){
if (responseRet.getCLIRETRESULT().getCRET().trim().equalsIgnoreCase(Constants.RET_SUCESSO)){
log.info("SEJ-MSG005: Cliente Registro ["+regNumErp+"] integrado e notificado com successo!");
}else if (responseRet.getCLIRETRESULT().getCRET().trim().equalsIgnoreCase(Constants.RET_FALHA)) {
log.error("SEJ-MSG006: Cliente Registro ["+regNumErp+"] integrado e notificado com falha!");
}else {
log.error("SEJ-MSG007: Cliente Registro ["+regNumErp+"] integrado e notificado com falha no retorno!");
log.warn("SEJ-MSG008: msg["+responseRet.getCLIRETRESULT().getCMESSAGE()+"]");
log.warn("SEJ-MSG009: ret["+responseRet.getCLIRETRESULT().getCRET()+"]");
}
}else{
log.error("SEJ-MSG010: Sem retorno da notificação ao ERP!");
}
}else{
log.error("SEJ-MSG011: Falha ao integrar Cliente registro ["+regNumErp+"]");
}
}catch (Exception e) {
log.error("SEJ-ERR001: Erro no consumo de clientes", e);
}
}
}catch (RuntimeException e) {
log.error("SEJ-ERR002: Falha de comunicação no consumo de clientes", e);
}
}
}