package it.valueteam.gnp.controller; import it.valueteam.gnp.dao.db.hb.GnpDoppioDonatingOloBridge; import it.valueteam.gnp.dao.db.hb.GnpDoppioDonatingOloBridgeDAO; import it.valueteam.gnp.dao.db.hb.GnpOloRichiesteIn; import it.valueteam.gnp.dao.db.hb.GnpPitagoraA375In; import it.valueteam.gnp.dao.db.hb.GnpRichiesteRec; import it.valueteam.gnp.dao.db.hb.GnpRichiesteRecDAO; import it.valueteam.gnp.dao.db.hb.crm.AbstractGnpCrmInRec; import it.valueteam.gnp.exception.StateTransitionNotPossibleException; import it.valueteam.gnp.jms.MessageHandler; import it.valueteam.gnp.log.Loggable; import it.valueteam.gnp.log.ProcessLogger; import it.valueteam.gnp.manager.RequestDoppioDonatingManager; import it.valueteam.gnp.manager.RequestManagerRec; import it.valueteam.gnp.obj.ApplicationCostants; import it.valueteam.gnp.obj.CRMMap; import it.valueteam.gnp.obj.LogInfo; import it.valueteam.gnp.obj.LogProcess; import it.valueteam.gnp.obj.StatoRichiestaDoppioDonating; import it.valueteam.gnp.obj.StatoRichiestaRec; import it.valueteam.gnp.obj.jms.NotificationMessage; import it.valueteam.gnp.obj.jms.NotificationMessageIF; import it.valueteam.gnp.obj.jms.UniqueIdNotificationMessage; import it.valueteam.gnp.systemcontroller.ControllerFactory; import it.valueteam.gnp.systemcontroller.SystemController; import it.valueteam.gnp.systemcontroller.SystemControllerIF; import it.valueteam.gnp.systemcontroller.crm.SistemaCrmIF; import it.valueteam.gnp.systemcontroller.formatcontroller.doppiodonating.DoppioDonatingFormatController; import it.valueteam.gnp.systemcontroller.formatcontroller.pitagora.WSPitagoraFormatController; import it.valueteam.gnp.systemcontroller.pitagora.WSPitagoraController; import it.valueteam.gnp.utility.Func; import it.valueteam.gnp.utility.Resources; /** *

* Title: DoppioDonatingController * Description: kit X5 2009: gestisce le richieste di tipo doppio donating * Copyright: Copyright (c) 2009 * Company: Value team *

* * @author Danilo Del Fio * @version 1.0 * @version 2.0 20180717 corretta gestione richiesta duale null */ public class DoppioDonatingController extends SystemController implements Loggable { protected ProcessLogger log; protected String codiceProcesso = "YB"; protected final static String versione = "1.0.0"; private GnpDoppioDonatingOloBridgeDAO richiesteDDDAO; private static DoppioDonatingController onlyInstance; private final static String TIPO_SERVIZIO_FONIA = "F"; protected DoppioDonatingController() throws Exception { try { LogProcess logProcess = new LogProcess(); logProcess.setCodice(codiceProcesso); logProcess.setProcess(this); log = new ProcessLogger(logProcess); richiesteDDDAO= new GnpDoppioDonatingOloBridgeDAO(); } catch (Exception ex) { System.out.println("Errore nella creazione del ProcessLogger"); throw ex; } } /** * Utilizzato per ottenere l'istanza del controller * @throws Exception * @return DoppioDonatingController */ public static DoppioDonatingController getInstance() throws Exception { if (onlyInstance == null) { synchronized (DoppioDonatingController.class) { if (onlyInstance == null) onlyInstance = new DoppioDonatingController(); } } return onlyInstance; } public LogInfo getLogInfo() throws Exception { LogInfo logInfo = new LogInfo(); logInfo.setProcess(getClass().getName()); logInfo.setLogPath(Resources.getLogPath()); logInfo.setTypeInfo(Resources.getTypeInfo()); logInfo.setTypeDebug(Resources.getTypeDebug()); logInfo.setTypeError(Resources.getTypeError()); return logInfo; } public void handleMessage(NotificationMessage messaggio) throws Exception { int notificationtype = messaggio.getNotificationType(); // 0004 N - INIZIO TRATTAMENTO MESSAGGIO log.write("0004", this.getVersione() + "TIPO_NOTIFICA = ["+ messaggio.getNotificationType() + "]"); try { switch (notificationtype) { case NotificationMessageIF.NotificationType_DOPPIO_DONATING_OUT: handleOutgoingMessages(messaggio); break; default: log.write("9999", "NOTIFICATION TYPE SCONOSCIUTO" + Func.getFieldDescription(messaggio)); break; } // Log 0006 (N) = 'FINE TRATTAMENTO MESSAGGIO' log.write("0006", "TIPO_NOTIFICA = [" + messaggio.getNotificationType() + "]"); } catch (Exception ex) { log.write("0007", "TIPO_NOTIFICA = [" + messaggio.getNotificationType() + "] -" +ex.toString()+" - tracciato:"+Func.getFieldDescription(messaggio)); ex.printStackTrace(); throw ex; } catch (Throwable th) { th.printStackTrace(); // ******************************************************************************************* log.write("0007", "TIPO_NOTIFICA = [" + messaggio.getNotificationType() + "] -" +th.toString()+" - tracciato:"+Func.getFieldDescription(messaggio)); throw new Exception(th.toString()); // in ogni caso faccio // tornare il msg in coda // ******************************************************************************************** } } /** * Il metodo inserisce in coda un messaggio di notifica doppio donating * @param gestioneRec GnpRichiesteRec */ public void notificaRichiestaDoppioDonating(GnpRichiesteRec richiestaRec) throws Exception { NotificationMessage messaggioOut = null; messaggioOut= creaNotificationMessageDoppioDonatingOut(richiestaRec.getIdRichiesta(),richiestaRec.getProcesso()); if(messaggioOut!=null) { inserisciMessaggioInCoda(messaggioOut); } } public void elaboraRispostaOLO(GnpDoppioDonatingOloBridge richiestaDoppioDonating, GnpOloRichiesteIn oloRichiestaIn) throws Exception { try { boolean changedState = false; // Flag che indica che la richiesta ha cambiato stato if (oloRichiestaIn.getTipoComunicazione().intValue() == ApplicationCostants.OLO_TIPO_COMUNICAZIONE_VER_FORMALI) { if (oloRichiestaIn.getStatoRichiesta().intValue() == ApplicationCostants.OLO_STATO_RICHIESTA_KO) { int codiceCausale = Integer.parseInt((oloRichiestaIn.getCodiceMotivoRifiuto())); gestisciKoOLO(oloRichiestaIn.getTipoComunicazione().intValue(),codiceCausale, richiestaDoppioDonating); } else { RequestDoppioDonatingManager.avanzaStatoInAccettata(richiestaDoppioDonating,oloRichiestaIn.getCodiceSessione(), log); } changedState = true; } else if (oloRichiestaIn.getTipoComunicazione().intValue() == ApplicationCostants.OLO_TIPO_COMUNICAZIONE_VER_GESTIONALI) { if (oloRichiestaIn.getStatoRichiesta().intValue() == ApplicationCostants.OLO_STATO_RICHIESTA_KO) { int codiceCausale = Integer.parseInt((oloRichiestaIn.getCodiceMotivoRifiuto())); gestisciKoOLO(oloRichiestaIn.getTipoComunicazione().intValue(), codiceCausale,richiestaDoppioDonating); } else { RequestDoppioDonatingManager.avanzaStatoInValidata(richiestaDoppioDonating, log); } changedState = true; } else if (oloRichiestaIn.getTipoComunicazione().intValue() == ApplicationCostants.OLO_TIPO_COMUNICAZIONE_MUTATA_VOLONTA) { // aggiorno la richiesta e la salvo updateMutataVolonta(richiestaDoppioDonating); log.write("9999", "ACQUISITA TIPO COMUNICAZIONE MUTATA VOLONTA' PER ID_RICHIESTA : " + richiestaDoppioDonating.getUniqueId()); } else { log.write("9999", "TIPO COMUNICAZIONE:" + oloRichiestaIn.getTipoComunicazione().intValue() + " NON SUPPORTATO PER LA RICHIESTA CON ID_ESIGENZA: " + oloRichiestaIn.getCodiceOrdineRecipient()); } if(changedState) modificaRichiestaBusinessPerOLOIn(richiestaDoppioDonating, oloRichiestaIn); } catch (StateTransitionNotPossibleException e) { log.write("9999", "RICHIESTA DI TRANSIZIONE DI STATO INCONSISTENTE SU ID_RICHIESTA=" + richiestaDoppioDonating.getUniqueId()); throw e; } } private void updateMutataVolonta(GnpDoppioDonatingOloBridge richiestaDoppioDonating) { GnpRichiesteRecDAO daoBusiness = new GnpRichiesteRecDAO(); GnpRichiesteRec richiestaRec = daoBusiness.findById(richiestaDoppioDonating.getIdRichiesta()); richiestaRec.setMutataVolonta(new Long(1)); daoBusiness.merge(richiestaRec); } public void verificaA375(GnpRichiesteRec richiestaRec,GnpPitagoraA375In pitagoraA375In, boolean isSpeciale, boolean isInbound,boolean isFlagDichiarazioneChecked) throws Exception{ // verifico la tipologia del processo che stiamo gestendo if (pitagoraA375In.getTipoProcesso().equals(WSPitagoraFormatController.TIPO_PROCESSO_RIENTRO)) { // FONIA if(pitagoraA375In.getStato().equals(WSPitagoraController.ESITO_OK)) { // ESITO = OK // FONIA OK !!! WSPitagoraController.getInstance().gestisciRichiestaDaInviareAlWS(richiestaRec); } else {// ESITO = KO if (pitagoraA375In.getCodiceKo().equals(WSPitagoraController.ESITO_KO_A375)) { // esito KO = A1 if (isSpeciale || (isInbound && isFlagDichiarazioneChecked)) { GnpRichiesteRecDAO richRecDAO = new GnpRichiesteRecDAO(); richiestaRec.setVerificataA375(WSPitagoraFormatController.VERIFICATA_A375); richRecDAO.merge(richiestaRec); // inserisco nella richiesta i valori che identificano una richiesta dati // verificare il tipo_processo e tipo_atterraggio WSPitagoraController.getInstance().gestisciRichiestaDaInviareAlWS(richiestaRec); } else { RequestManagerRec.avanzaStatoInVerificataKO(richiestaRec, WSPitagoraController.ESITO_KO_A375, log); } } else { // esito KO <> A1 RequestManagerRec.avanzaStatoInRifiutataPitagora(richiestaRec, pitagoraA375In.getCodiceKo(), pitagoraA375In.getDescrizioneKo(), true, CRMMap.NOTIFICA_RIFIUTATAPITAGORA_A375, log); } } } else { // DATI if(pitagoraA375In.getStato().equals(WSPitagoraController.ESITO_OK)) { // ESITO = OK // DATI OK !!! if(richiestaRec.getVerificataA375().equals(WSPitagoraFormatController.VERIFICATA_A375)) { // INVIO NOTIFICA A CRM CON TIPO_EVENTO=VALIDAZIONE_ANTITRUST ED ESITO=OK SistemaCrmIF crmController = ControllerFactory.getSistemaCrmFromPiattaformaProvenienza(richiestaRec.getPiattaformaProvenienza()); crmController.notificaCRM(richiestaRec.getIdRichiesta(), CRMMap.NOTIFICA_VALIDATAPITAGORA_A375); } RequestManagerRec.avanzaStatoInVerificataOK(richiestaRec, WSPitagoraController.ESITO_OK,true, log); } else {// ESITO = KO if (pitagoraA375In.getCodiceKo().equals(WSPitagoraController.ESITO_KO_A375)) { // esito KO = A1 if (isSpeciale || (isInbound && isFlagDichiarazioneChecked)) { GnpRichiesteRecDAO richRecDAO = new GnpRichiesteRecDAO(); richiestaRec.setVerificataA375(WSPitagoraFormatController.VERIFICATA_A375); richRecDAO.merge(richiestaRec); // INVIO NOTIFICA A CRM CON TIPO_EVENTO=VALIDAZIONE_ANTITRUST ED ESITO=OK SistemaCrmIF crmController = ControllerFactory.getSistemaCrmFromPiattaformaProvenienza(richiestaRec.getPiattaformaProvenienza()); crmController.notificaCRM(richiestaRec.getIdRichiesta(), CRMMap.NOTIFICA_VALIDATAPITAGORA_A375); } else { RequestManagerRec.avanzaStatoInVerificataKO(richiestaRec, WSPitagoraController.ESITO_KO_A375, log); // INVIO NOTIFICA A CRM CON TIPO_EVENTO=VALIDAZIONE_ANTITRUST, ESITO=KO e CAUSALE=A1 SistemaCrmIF crmController = ControllerFactory.getSistemaCrmFromPiattaformaProvenienza(richiestaRec.getPiattaformaProvenienza()); crmController.notificaCRM(richiestaRec.getIdRichiesta(), CRMMap.NOTIFICA_RIFIUTATAPITAGORA_A375); } } } } } private void gestisciKoOLO(int tipoCom, int codiceCausale,GnpDoppioDonatingOloBridge richiestaDoppioDonating) throws Exception{ switch(tipoCom){ case ApplicationCostants.OLO_TIPO_COMUNICAZIONE_VER_FORMALI: if(codiceCausale==ApplicationCostants.KO_SUPERMENTO_SOGLIA_VER_FORMALI){ RequestDoppioDonatingManager.avanzaStatoInDaReinviare(richiestaDoppioDonating,codiceCausale, log); }else{ RequestDoppioDonatingManager.avanzaStatoInAccettataKO(richiestaDoppioDonating, codiceCausale,log); } break; //ST 2018-BU-71554 Ottimizzazione gestione KO Fase 2 /* * Cambiare eventualmente gestione risottomissione nel caso di richiesta * appartenente al CRMB. In questo caso avanzare la richiesta direttamente in rifiutataOLO */ case ApplicationCostants.OLO_TIPO_COMUNICAZIONE_VER_GESTIONALI: if(codiceCausale==ApplicationCostants.KO_TRASLOCO_VER_GESTIONALI){ int numKoTrasloco = richiestaDoppioDonating.getNumKoTraslocoOlo() == null ? 0 : richiestaDoppioDonating.getNumKoTraslocoOlo().intValue()+1; if(numKoTrasloco