Skip to content

Commit

Permalink
Corretto problema elaborazione tracciati di notifica pagamenti per co…
Browse files Browse the repository at this point in the history
…nnettore GovPay.

Vengono ora inserite correttamente tutte i flussi di rendicontazione.
  • Loading branch information
pintorig committed Mar 6, 2023
1 parent 2141404 commit b52fb63
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 18 deletions.
Expand Up @@ -108,6 +108,8 @@ public void elaboraTracciatoNotificaPagamenti(Dominio dominio, ConnettoreNotific
it.govpay.core.beans.tracciati.TracciatoNotificaPagamenti beanDati = null;
Integer numeroOreIntervallo = connettore.getIntervalloCreazioneTracciato();

log.info("Elaborazione Tracciato "+this.tipoTracciato+" per il Dominio ["+codDominio+"] in corso...");

log.debug("Elaborazione Tracciato "+this.tipoTracciato+" per il Dominio ["+codDominio+"], controllo intervallo elaborazione...");
TracciatoNotificaPagamenti ultimoTracciatoCreatoPerTipo = null;
try {
Expand Down Expand Up @@ -137,10 +139,10 @@ public void elaboraTracciatoNotificaPagamenti(Dominio dominio, ConnettoreNotific
case SECIM:
case GOVPAY:
case MAGGIOLI_JPPA:
log.debug("Elaborazione Tracciato "+this.tipoTracciato+" per il Dominio ["+codDominio+"], nuovo intervallo ricerca RT: Da [" +SimpleDateFormatUtils.newSimpleDateFormatDataOreMinutiSecondi().format(dataRtDa)+"] a ["+SimpleDateFormatUtils.newSimpleDateFormatDataOreMinutiSecondi().format(dataRtA)+"]");
log.info("Elaborazione Tracciato "+this.tipoTracciato+" per il Dominio ["+codDominio+"], nuovo intervallo ricerca RT: Da [" +SimpleDateFormatUtils.newSimpleDateFormatDataOreMinutiSecondi().format(dataRtDa)+"] a ["+SimpleDateFormatUtils.newSimpleDateFormatDataOreMinutiSecondi().format(dataRtA)+"]");
break;
case HYPERSIC_APK:
log.debug("Elaborazione Tracciato "+this.tipoTracciato+" per il Dominio ["+codDominio+"], nuovo intervallo ricerca rendicontazioni: Da [" +SimpleDateFormatUtils.newSimpleDateFormatDataOreMinutiSecondi().format(dataRtDa)+"] a ["+SimpleDateFormatUtils.newSimpleDateFormatDataOreMinutiSecondi().format(dataRtA)+"]");
log.info("Elaborazione Tracciato "+this.tipoTracciato+" per il Dominio ["+codDominio+"], nuovo intervallo ricerca rendicontazioni: Da [" +SimpleDateFormatUtils.newSimpleDateFormatDataOreMinutiSecondi().format(dataRtDa)+"] a ["+SimpleDateFormatUtils.newSimpleDateFormatDataOreMinutiSecondi().format(dataRtA)+"]");
break;
}

Expand All @@ -154,7 +156,7 @@ public void elaboraTracciatoNotificaPagamenti(Dominio dominio, ConnettoreNotific

// se l'estremo dell'intervallo di ricerca e' nel futuro allora non devo eseguire l'elaborazione
if(dataRtA.getTime() > now.getTime()) {
log.debug("Elaborazione Tracciato "+this.tipoTracciato+" per il Dominio ["+codDominio+"], dataA ["
log.info("Elaborazione Tracciato "+this.tipoTracciato+" per il Dominio ["+codDominio+"], dataA ["
+SimpleDateFormatUtils.newSimpleDateFormatDataOreMinutiSecondi().format(dataRtA)+"] successiva a NOW ["+SimpleDateFormatUtils.newSimpleDateFormatDataOreMinutiSecondi().format(now)+"], non devo generare il tracciato");
return;
}
Expand Down Expand Up @@ -193,7 +195,7 @@ public void elaboraTracciatoNotificaPagamenti(Dominio dominio, ConnettoreNotific

if(countTracciatiInStatoNonTerminalePerDominio == 0) {
try {
log.debug("Elaborazione Tracciato "+this.tipoTracciato+" per il Dominio ["+codDominio+"], non sono stati trovati tracciati in sospeso, ricerco record da inserire in un nuovo tracciato");
log.info("Elaborazione Tracciato "+this.tipoTracciato+" per il Dominio ["+codDominio+"], non sono stati trovati tracciati in sospeso, ricerco record da inserire in un nuovo tracciato");

tracciatiNotificaPagamentiBD = new TracciatiNotificaPagamentiBD(configWrapper);

Expand Down Expand Up @@ -278,6 +280,18 @@ public void elaboraTracciatoNotificaPagamenti(Dominio dominio, ConnettoreNotific
c2.add(Calendar.MILLISECOND, -1);
dataRtA = c2.getTime();
}

switch (this.tipoTracciato) {
case MYPIVOT:
case SECIM:
case GOVPAY:
case MAGGIOLI_JPPA:
log.info("Elaborazione Tracciato "+this.tipoTracciato+" per il Dominio ["+codDominio+"], verranno utilizzate le RT comprese tra le seguenti date: Da [" +SimpleDateFormatUtils.newSimpleDateFormatDataOreMinutiSecondi().format(dataRtDa)+"] a ["+SimpleDateFormatUtils.newSimpleDateFormatDataOreMinutiSecondi().format(dataRtA)+"]");
break;
case HYPERSIC_APK:
log.info("Elaborazione Tracciato "+this.tipoTracciato+" per il Dominio ["+codDominio+"], verranno utilizzate le rendicontazioni comprese tra le seguenti date: Da [" +SimpleDateFormatUtils.newSimpleDateFormatDataOreMinutiSecondi().format(dataRtDa)+"] a ["+SimpleDateFormatUtils.newSimpleDateFormatDataOreMinutiSecondi().format(dataRtA)+"]");
break;
}

// ricerca delle RT per dominio arrivate tra DataRtDa e DataRtA
RptBD rptBD = new RptBD(tracciatiNotificaPagamentiBD);
Expand Down Expand Up @@ -458,7 +472,7 @@ public void elaboraTracciatoNotificaPagamenti(Dominio dominio, ConnettoreNotific
throw new ServiceException("TipoDatabase ["+tipoDatabase+"] non gestito.");
}

log.debug("Elaborazione Tracciato "+this.tipoTracciato+" per il Dominio ["+codDominio+"], salvataggio contenuto completato");
log.info("Elaborazione Tracciato "+this.tipoTracciato+" per il Dominio ["+codDominio+"], salvataggio contenuto completato");

if(!tracciatiNotificaPagamentiBD.isAutoCommit()) tracciatiNotificaPagamentiBD.commit();
} catch (java.io.IOException e) { // gestione errori scrittura zip
Expand All @@ -471,6 +485,8 @@ public void elaboraTracciatoNotificaPagamenti(Dominio dominio, ConnettoreNotific
} finally {
if(!tracciatiNotificaPagamentiBD.isAutoCommit()) tracciatiNotificaPagamentiBD.setAutoCommit(true);
}
} else {
log.info("Elaborazione Tracciato "+this.tipoTracciato+" per il Dominio ["+codDominio+"] completata non sono state trovate entries da inserire nel tracciato.");
}
} catch(Throwable e) {
log.error("Errore durante l'elaborazione del tracciato "+this.tipoTracciato+": " + e.getMessage(), e);
Expand All @@ -479,6 +495,8 @@ public void elaboraTracciatoNotificaPagamenti(Dominio dominio, ConnettoreNotific
tracciatiNotificaPagamentiBD.closeConnection();
}
}
} else {
log.info("Elaborazione Tracciato "+this.tipoTracciato+" per il Dominio ["+codDominio+"] completata non e' stato creato un nuovo tracciato poiche' ci sono ["+countTracciatiInStatoNonTerminalePerDominio+"] tracciati da spedire.");
}
}

Expand Down Expand Up @@ -661,7 +679,7 @@ private void popolaTracciatoGovpay(ConnettoreNotificaPagamenti connettore, BDCon
throws java.io.IOException, ServiceException, JAXBException, SAXException, ValidationException, IOException {
String codDominio = dominio.getCodDominio();

log.debug("Elaborazione Tracciato "+this.tipoTracciato+" per il Dominio ["+codDominio+"] in corso...");
log.debug("Creazione contenuto del tracciato "+this.tipoTracciato+" per il Dominio ["+codDominio+"] in corso...");

// Entry 1. metadati dell'estrazione

Expand All @@ -677,7 +695,7 @@ private void popolaTracciatoGovpay(ConnettoreNotificaPagamenti connettore, BDCon

// Entry 2. sintesi pagamenti

log.debug("Creazione file di sintesi pagamenti in corso...");
log.info("Creazione file di sintesi pagamenti in corso...");

CSVUtils csvUtils = CSVUtils.getInstance(CSVFormat.DEFAULT);

Expand Down Expand Up @@ -715,14 +733,14 @@ private void popolaTracciatoGovpay(ConnettoreNotificaPagamenti connettore, BDCon

beanDati.setNumRtTotali(totaleRt);

log.debug("Creazione file di sintesi pagamenti completato, inserite ["+totaleRt+"] RT.");
log.info("Creazione file di sintesi pagamenti completato, inserite ["+totaleRt+"] RT.");

// chiusa entry
zos.flush();
zos.closeEntry();

// Entry 3. ricevute
log.debug("Creazione ricevute in corso...");
log.info("Creazione ricevute in corso...");

offset = 0;
rtList = rptBD.ricercaRtDominio(codDominio, dataRtDa, dataRtA, listaTipiPendenza, offset, limit);
Expand Down Expand Up @@ -772,11 +790,15 @@ private void popolaTracciatoGovpay(ConnettoreNotificaPagamenti connettore, BDCon
}while(rtList.size() > 0);


log.debug("Creazione ricevute completata, inserite ["+totaleRt+"] ricevute.");
log.info("Creazione ricevute completata, inserite ["+totaleRt+"] ricevute.");

// Entry 4. sintesi flussi

log.debug("Creazione file di sintesi flussi in corso...");
log.info("Creazione file di sintesi flussi in corso...");

log.info("Ricerco i flussi per il Dominio ["+codDominio
+"], che hanno data acquisizione compresa tra le seguenti date: Da [" +SimpleDateFormatUtils.newSimpleDateFormatDataOreMinutiSecondi().format(dataRtDa)
+"] a ["+SimpleDateFormatUtils.newSimpleDateFormatDataOreMinutiSecondi().format(dataRtA)+"], in stato ACCETTATA, per i tipi pendenza ["+((listaTipiPendenza != null && !listaTipiPendenza.isEmpty()) ? StringUtils.join(listaTipiPendenza, ", ") : "tutti")+"]");

ZipEntry frOutputEntry = new ZipEntry(GOVPAY_FLUSSI_RENDICONTAZIONE_CSV_FILE_NAME);
zos.putNextEntry(frOutputEntry);
Expand All @@ -785,7 +807,11 @@ private void popolaTracciatoGovpay(ConnettoreNotificaPagamenti connettore, BDCon

FrBD frBD = new FrBD(rptBD);

frBD.setAtomica(false);
frBD.setAtomica(false);

long countFrDominio = frBD.countFrDominio(codDominio, dataRtDa, dataRtA, listaTipiPendenza);

log.info("La procedura inserira' ["+countFrDominio+"] entries all'interno del file di sintesi flussi.");

offset = 0;
int totaleFr= 0;
Expand All @@ -808,17 +834,17 @@ private void popolaTracciatoGovpay(ConnettoreNotificaPagamenti connettore, BDCon

offset += limit;
frList = frBD.ricercaFrDominio(codDominio, dataRtDa, dataRtA, listaTipiPendenza, offset, limit);
}while(rtList.size() > 0);
}while(frList.size() > 0);

log.debug("Creazione file di sintesi flussi rendicontazione completato, inseriti ["+totaleFr+"] Flussi.");
log.info("Creazione file di sintesi flussi rendicontazione completato, inseriti ["+totaleFr+"] Flussi.");

// chiusa entry
zos.flush();
zos.closeEntry();


// Entry 5. flussi
log.debug("Creazione flussi in corso...");
log.info("Creazione flussi in corso...");

offset = 0;
totaleFr= 0;
Expand Down Expand Up @@ -849,12 +875,12 @@ private void popolaTracciatoGovpay(ConnettoreNotificaPagamenti connettore, BDCon

offset += limit;
frList = frBD.ricercaFrDominio(codDominio, dataRtDa, dataRtA, listaTipiPendenza, offset, limit);
}while(rtList.size() > 0);
}while(frList.size() > 0);

log.debug("Creazione flussi rendicontazione completata, inseriti ["+totaleFr+"] flussi.");
log.info("Creazione flussi rendicontazione completata, inseriti ["+totaleFr+"] flussi.");


log.debug("Elaborazione Tracciato "+this.tipoTracciato+" per il Dominio ["+codDominio+"] completato.");
log.info("Creazione contenuto del tracciato "+this.tipoTracciato+" per il Dominio ["+codDominio+"] completato.");
}


Expand Down
36 changes: 36 additions & 0 deletions jars/orm/src/main/java/it/govpay/bd/pagamento/FrBD.java
Expand Up @@ -28,6 +28,7 @@

import org.openspcoop2.generic_project.beans.CustomField;
import org.openspcoop2.generic_project.beans.IField;
import org.openspcoop2.generic_project.beans.NonNegativeNumber;
import org.openspcoop2.generic_project.beans.UpdateField;
import org.openspcoop2.generic_project.exception.ExpressionException;
import org.openspcoop2.generic_project.exception.ExpressionNotImplementedException;
Expand Down Expand Up @@ -600,4 +601,39 @@ public List<Fr> ricercaFrDominio(String codDominio, Date dataAcquisizioneDa, Dat
}

}

public long countFrDominio(String codDominio, Date dataAcquisizioneDa, Date dataAcquisizioneA, List<String> listaTipiPendenza) throws ServiceException{
try {
if(this.isAtomica()) {
this.setupConnection(this.getIdTransaction());
}

IExpression exp = this.getFrService().newExpression();
exp.equals(FR.model().COD_DOMINIO, codDominio).and();
if(dataAcquisizioneDa != null) {
exp.greaterEquals(FR.model().DATA_ACQUISIZIONE, dataAcquisizioneDa);
}
exp.lessEquals(FR.model().DATA_ACQUISIZIONE, dataAcquisizioneA);
exp.equals(FR.model().STATO, StatoFr.ACCETTATA.toString());
if(listaTipiPendenza != null && !listaTipiPendenza.isEmpty()) {
listaTipiPendenza.removeAll(Collections.singleton(null));
exp.in(FR.model().ID_SINGOLO_VERSAMENTO.ID_VERSAMENTO.ID_TIPO_VERSAMENTO.COD_TIPO_VERSAMENTO, listaTipiPendenza);
}

NonNegativeNumber count = this.getFrService().count(exp);

return count.longValue();
} catch(NotImplementedException e) {
throw new ServiceException(e);
} catch (ExpressionNotImplementedException e) {
throw new ServiceException(e);
} catch (ExpressionException e) {
throw new ServiceException(e);
} finally {
if(this.isAtomica()) {
this.closeConnection();
}
}

}
}

0 comments on commit b52fb63

Please sign in to comment.