Files
gateway-dbc-fx/gnpdev/dbcfx/src/it/valueteam/gnp/manager/RequestManagerDonor.java

735 lines
40 KiB
Java
Raw Blame History

package it.valueteam.gnp.manager;
import it.telecomitalia.soa.customerlocationquery.x20150511.Parameter;
import it.telecomitalia.soa.customerlocationquery.x20150511.RetrieveByLineNumberRequestMessage;
import it.telecomitalia.soa.customerlocationquery.x20150511.RetrieveByLineNumberResponseMessage;
import it.telecomitalia.soa.customerlocationquerycustomtypes.x20150511.BusinessInteractionRelationship_LineNumber;
import it.telecomitalia.soa.customerlocationquerycustomtypes.x20150511.CharacteristicSpecificationRequest_LineNumber;
import it.telecomitalia.soa.customerlocationquerycustomtypes.x20150511.CharacteristicValueRequest_LineNumber;
import it.telecomitalia.soa.customerlocationquerycustomtypes.x20150511.CustomerOrderItemRequest_LineNumber;
import it.telecomitalia.soa.customerlocationquerycustomtypes.x20150511.ProductBundleRequest_LineNumber;
import it.telecomitalia.soa.customerlocationquerycustomtypes.x20150511.ProductCharacteristicValueRequest_LineNumber;
import it.telecomitalia.soa.customerlocationquerycustomtypes.x20150511.ProductOrderRequest_LineNumber;
import it.telecomitalia.soa.customerlocationquerycustomtypes.x20150511.ProductSpecCharacteristicRequest_LineNumber;
import it.telecomitalia.soa.customerlocationquerycustomtypes.x20150511.Request_LineNumber;
import it.telecomitalia.soa.wirelinelinecodequery.x20150511.VerifySecretCodeResponse;
import it.valueteam.gnp.dao.db.UtilityDao;
import it.valueteam.gnp.dao.db.hb.*;
import it.valueteam.gnp.exception.StateTransitionNotPossibleException;
import it.valueteam.gnp.log.ProcessLogger;
import it.valueteam.gnp.obj.ApplicationCostants;
import it.valueteam.gnp.obj.StatoRichiestaDon;
import it.valueteam.gnp.systemcontroller.ControllerFactory;
import it.valueteam.gnp.systemcontroller.SystemControllerIF;
import it.valueteam.gnp.systemcontroller.crm.SistemaCrmIF;
import it.valueteam.gnp.systemcontroller.formatcontroller.dbss.DBSSController;
import it.valueteam.gnp.systemcontroller.formatcontroller.dbss.WirelineLineCodeQueryResponseUtils;
import it.valueteam.gnp.systemcontroller.formatcontroller.now.NowController;
import it.valueteam.gnp.systemcontroller.olo.OLOControllerDonor;
import it.valueteam.gnp.utility.DateUtils;
import it.valueteam.gnp.utility.Resources;
import it.valueteam.gnp.utility.StateManagerDonor;
import it.valueteam.gnp.ws.dbss.client.CustomerLocationQueryClient;
import java.util.Date;
import java.util.List;
import dbcfx.soa.checkretailplatform.x20160704.CheckRetailPlatformRequest;
public class RequestManagerDonor {
private static NowController instance;
private final static String operationName = "OperationCode";
private final static String lineValue = "1";
private final static String serviceNumber = "ServiceNumber";
public static final int RET_CODE_OK_FROM_WS = 0;
public static final int RET_CODE_UTENZA_NON_PRESENTE_FROM_WS = 1;
public static final int RET_CODE_ERRORE_GENERICO_WS = 2;
public static final int RET_CODE_SERV_CRMB_NON_DISPONIBILE = 4;
public static final int RET_CODE_SERV_CRMR_NON_DISPONIBILE = 5;
//C06
public static final String ANOMALIA_LINEA_NON_PRESENTE_CCC="LINEA_NON_PRESENTE";
public static final String ANOMALIA_LINEA_NON_PRESENTE_CCC_DESCRIZIONE="Linea non presente sull'operation retrieveByLineNumber di customerLocationQuery";
public static final String ANOMALIA_ERRORE_CODICE_SERVIZIO_CCC="CODICE_ERRORE_SERVIZIO_CCC";
public static final String ANOMALIA_ERRORE_CODICE_SERVIZIO_CCC_DESCRIZIONE="L'operation retrieveByLineNumber di customerLocationQuery ha restituito un errore : ";
public static final String ANOMALIA_ERRORE_CODICE_SERVIZIO_NON_PREVISTO_CCC="CODICE_NON_PREVISTO_ERRORE_SERVIZIO_CCC";
public static final String ANOMALIA_ERRORE_CODICE_SERVIZIO_NON_PREVISTO_CCC_DESCRIZIONE="L'operation retrieveByLineNumber di customerLocationQuery ha restituito un errore non previsto : ";
public static final String VERIFICA_CS_ERRATA_DBSS="VERIFICA_CODICE_SEGRETO_ERRORE_DBSS";
public static final String VERIFICA_CS_ERRATA_DBSS_DESCRIZIONE="VERIFICA CODICE SEGRETO ERRORE INASPETTATO DBSS";
public static final String VERIFICA_CS_DBSS_NUMERAZIONE_NON_GESTITA="VERIFICA_CODICE_SEGRETO_NUMERAZIONE_NON_GESTITA";
public static final String VERIFICA_CS_DBSS_NUMERAZIONE_NON_GESTITA_DESCRIZIONE="VERIFICA CODICE SEGRETO NUMERAZIONE NON GESTITA DBSS";
public static final String VERIFICA_CS_DBSS_ESITO_NON_GESTITO="VERIFICA_CODICE_SEGRETO_ESITO_NON_GESTITO";
public static final String VERIFICA_CS_DBSS_ESITO_NON_GESTITO_DESCRIZIONE="VERIFICA CODICE SEGRETO ESITO NON GESTITO DBSS";
private RequestManagerDonor() {
}
/**
* Avanzamento stato in ACQUISITA
*
* @param oloRichiesteDonorIn
* @param log
* @return
* @throws Exception
*/
public static Long avanzaStatoInAcquisita(GnpOloRichiesteDonorIn oloRichiesteDonorIn, ProcessLogger log)
throws Exception {
GnpRichiesteDonor richiestaDonor = creaRichiestaMigrazione(oloRichiesteDonorIn);
GnpRichiesteDonorDAO richiesteDonorDAO = new GnpRichiesteDonorDAO();
richiesteDonorDAO.save(richiestaDonor);
logStoricoPassaggioStato(richiestaDonor.getIdRichiesta(), -1, StatoRichiestaDon.ACQUISITA, log);
return richiestaDonor.getIdRichiesta();
}
/**
* Inserisce nello storico della richiesta il passaggio di stato
* da -1 a 1
*
* @throws Exception
*/
public static void logStoricoPassaggioStato(Long idRichiesta, int statoDa, int statoA, ProcessLogger log) throws Exception {
GnpStoricoRichiesteDonor storicoRich = new GnpStoricoRichiesteDonor();
storicoRich.setIdRichiesta(idRichiesta);
storicoRich.setStatoDa((long) statoDa);
storicoRich.setStatoA((long) statoA);
GnpStoricoRichiesteDonorDAO storicoDonorDAO = new GnpStoricoRichiesteDonorDAO();
storicoDonorDAO.save(storicoRich);
log.write("9999", "ID RICHIESTA DONOR " + idRichiesta.toString()
+ " PASSA DALLO STATO " + (statoDa != -1 ? StatoRichiestaDon.getStatoDescr(statoDa) : "INIZIALE")
+ " ALLO STATO " + StatoRichiestaDon.getStatoDescr(statoA));
}
public static GnpRichiesteDonor creaRichiestaMigrazione(GnpOloRichiesteDonorIn oloRichiesteDonorIn) throws Exception {
GnpRichiesteDonor richiesteDonor = new GnpRichiesteDonor();
//Codice Olo Donating
richiesteDonor.setCowDonating(oloRichiesteDonorIn.getCodiceOperatoreDonating());
//Codice Olo Recipient
richiesteDonor.setCowRecipient(oloRichiesteDonorIn.getCodiceOperatoreRecipient());
//Directory Number ovvero il Cor ovvero il codice Risorsa
richiesteDonor.setDn(oloRichiesteDonorIn.getCor());
richiesteDonor.setCodiceOrdineRecipient(oloRichiesteDonorIn.getCodiceOrdineRecipient());
richiesteDonor.setStato((long) StatoRichiestaDon.ACQUISITA);
richiesteDonor.setDataRicezione(oloRichiesteDonorIn.getDataRicezione());
//Data Fine Wait - Calcolata con DataRicezione + 24H lavorative
richiesteDonor.setDfw(DateUtils.aggiungi24OreLavorative(oloRichiesteDonorIn.getDataRicezione()));
//Calcolata con DataRicezione + 17 giorni lavorativi
richiesteDonor.setDataScadenza(DateUtils.aggiungiGiorniLavorativiTodateImpostaOra
(oloRichiesteDonorIn.getDataRicezione(),
ApplicationCostants.GIORNI_CALCOLO_DATA_SCADENZA,
ApplicationCostants.ORA_CALCOLO_DATA_SCADENZA,
ApplicationCostants.MINUTI_CALCOLO_DATA_SCADENZA,
ApplicationCostants.SECONDI_CALCOLO_DATA_SCADENZA)
);
//I campi codice Sessione, CRMCompetenza, KoNonInviato, PresaInCarico, CodValidazione
//vengono inseriti successivamente nel processo
return richiesteDonor;
}
/**
* Avanzamento stato in ACCETTATA
*
* @param richiesta
* @param log
* @throws Exception
*/
public static void avanzaStatoInAccettata(GnpRichiesteDonor richiesta, ProcessLogger log) throws Exception {
GnpRichiesteDonorDAO ricDonorDAO = new GnpRichiesteDonorDAO();
int statoDa = richiesta.getStato().intValue();
int check = StateManagerDonor.checkTransition(richiesta.getIdRichiesta(), StatoRichiestaDon.ACCETTATA);
if (check != StateManagerDonor.TRANSIZIONE_NON_POSSIBILE) {
// CALCOLA DATA SCADENZA ALLA MEZZANOTTE DEL 16-esimo GIORNO
Date dataScadenza = DateUtils.aggiungiGiorniLavorativiTodateImpostaOra(new Date(), 16, 0, 0, 0);
richiesta.setStato((long) StatoRichiestaDon.ACCETTATA);
richiesta.setDataScadenza(dataScadenza);
ricDonorDAO.merge(richiesta);
logStoricoPassaggioStato(richiesta.getIdRichiesta(), statoDa, StatoRichiestaDon.ACCETTATA, log);
// Ricerca eventuali altre richieste stesso DN, stesso COW RECIPIENT
// DBCFX SM_525 Anomalia da pezzulla. Modifica da effettuare cambiare la SYSDATE della query in to_date(sysdate, 'DD-MON-YY'),
// formattandola quindi in giorno mese e anno e non considerando l'orario.
List altreRichieste = ricDonorDAO.getAltreRichiesteStessoCowDN(richiesta.getDn(), richiesta.getCowRecipient());
if (altreRichieste != null && altreRichieste.size() > 0) {
for (Object anAltreRichieste : altreRichieste) {
//ogni altra richiesta viene posta in scaduta
GnpRichiesteDonor altraR = (GnpRichiesteDonor) anAltreRichieste;
statoDa = altraR.getStato().intValue();
altraR.setStato((long) StatoRichiestaDon.SCADUTA);
altraR.setDataScadenza(dataScadenza);
ricDonorDAO.merge(altraR);
logStoricoPassaggioStato(altraR.getIdRichiesta(), statoDa, StatoRichiestaDon.SCADUTA, log);
}
}
} else {
throw new StateTransitionNotPossibleException("StateTransitionNotPossibleException");
}
}
public static void avanzaStatoInRifiutata(GnpRichiesteDonor richiesta, String descrizioneRifiuto, int codMotivoRifiuto, boolean cowNonTI, ProcessLogger log)
throws Exception {
GnpRichiesteDonorDAO dao = new GnpRichiesteDonorDAO();
int check = StateManagerDonor.checkTransition(richiesta.getIdRichiesta(), StatoRichiestaDon.RIFIUTATA);
int statoDa = richiesta.getStato().intValue();
if (check != StateManagerDonor.TRANSIZIONE_NON_POSSIBILE) {
if (cowNonTI || (statoDa == StatoRichiestaDon.ATTESA_VERIFICA && richiesta.getDfw().after(new Date()))) {
log.write("9999", "Passaggio di stato in RIFIUTATA ID RICHIESTA " + richiesta.getIdRichiesta());
richiesta.setStato((long) StatoRichiestaDon.RIFIUTATA);
richiesta.setCodValidazione((long) ApplicationCostants.COD_VALIDAZIONE_KO);
// Notifica a OLO
OLOControllerDonor.getInstance().accodaKORichiestaOloDonorOut(richiesta,
descrizioneRifiuto,
codMotivoRifiuto,
ApplicationCostants.PROCESSO_DONOR.OLO_OUT.CAUSALE_RIFIUTO_GESTIONALE,
ApplicationCostants.OLO_TIPO_COMUNICAZIONE_VER_GESTIONALI);
logStoricoPassaggioStato(richiesta.getIdRichiesta(), statoDa, StatoRichiestaDon.RIFIUTATA, log);
} else {
log.write("9999", "Passaggio di stato in RIFIUTATA non effettuato perche DFW scaduta: ID RICHIESTA " + richiesta.getIdRichiesta());
richiesta.setKoNonInviato(ApplicationCostants.PROCESSO_DONOR.KO_NON_INVIATO);
}
dao.merge(richiesta);
} else if (statoDa == StatoRichiestaDon.ACCETTATA) {
log.write("9999", "Passaggio di stato in RIFIUTATA non effettuato perche richiesta gia in ACCETTATA: ID RICHIESTA " + richiesta.getIdRichiesta());
richiesta.setKoNonInviato(ApplicationCostants.PROCESSO_DONOR.KO_NON_INVIATO);
} else {
throw new StateTransitionNotPossibleException("StateTransitionNotPossibleException");
}
}
/**
* Passaggio di stato in PRESAINCARICO.
* <p/>
* Ritorna false se il COW Donating non <20> mappato su uno di quelli Telecom
*
* @param richiesta
* @param log
* @return
* @throws Exception
*/
public static boolean avanzaStatoInPresaInCarico(GnpRichiesteDonor richiesta, ProcessLogger log)
throws Exception {
GnpRichiesteDonorDAO dao = new GnpRichiesteDonorDAO();
GnpDbssDonorOutDAO dbssDonorOutRecDAO = new GnpDbssDonorOutDAO();
boolean ret = true;
int check = StateManagerDonor.checkTransition(richiesta.getIdRichiesta(), StatoRichiestaDon.PRESA_IN_CARICO);
if (check != StateManagerDonor.TRANSIZIONE_NON_POSSIBILE) {
int statoDa = richiesta.getStato().intValue();
richiesta.setStato((long) StatoRichiestaDon.PRESA_IN_CARICO);
richiesta.setDataPresaincarico(new java.util.Date());
log.write("9999", "PRESA IN CARICO del DN :"+richiesta.getDn()+" IdRichiesta: "+richiesta.getIdRichiesta()+richiesta.getDataPresaincarico());
Boolean verificaWhiteList = new WhiteListManager().verificaCsWhiteListDonorDel274(richiesta.getDn(), richiesta.getCowDonating());
if (verificaWhiteList != null && verificaWhiteList) {
log.write("9999", "Risultato Verifica in WhiteList [TRUE]. Passaggio in ACCETTATA DN: "+richiesta.getDn());
avanzaStatoInAccettata(richiesta, log);
}
else if (verificaWhiteList != null && !verificaWhiteList) {
log.write("9999", "Verifica cs whitelist false"+" IDRichiesta: "+richiesta.getIdRichiesta());
avanzaStatoInRifiutata(richiesta, "Codice Segreto Errato", ApplicationCostants.PROCESSO_DONOR.OLO_OUT.COD_MOTIVO_11, false, log);
}
//verificaWhiteList == null
else {
log.write("9999", "Verifica cs whitelist null");
// Ricerco nell'anagrafica il cow Donating ricevuto
GnpAnagCowLineaTelecom anagCowLineaTelecom=null;
GnpAnagCowLineaTelecomDAO cowLineaDao;
GnpAnagCowTelecomDAO anagCowDAO = new GnpAnagCowTelecomDAO();
GnpAnagCowTelecom anagCowTelecom = anagCowDAO.findById(richiesta.getCowDonating());
//C09 2019 WA RICHIESTO ESCLUSIVAMENTE PER LA VERIFICA CS
if(Resources.getFLAG_CHECK_ANAG_COW_LINEA()) {
log.write("9999", "CONTROLLO SU TABELLA GNP_ANAG_COW_LINEA_TELECOM(FLAG WA ABILITATO) : "+richiesta.getIdRichiesta()+" COW: "+richiesta.getCowDonating()+" DN:"+richiesta.getDn());
cowLineaDao = new GnpAnagCowLineaTelecomDAO();
anagCowLineaTelecom = cowLineaDao.findByDnAndCowOld(richiesta.getDn(),richiesta.getCowDonating());
}
//C09 2019 WA RICHIESTO ESCLUSIVAMENTE PER LA VERIFICA CS SE E' UGUALE A NULL IL PROCESSO RESTA INVARIATO
if(anagCowLineaTelecom!=null) {
log.write("9999", "TROVATA LINEA SU TABELLA GNP_ANAG_COW_LINEA_TELECOM(FLAG WA ABILITATO) : "+richiesta.getIdRichiesta()+" COW VECCHIO: "+richiesta.getCowDonating()+
" COW NUOVO:"+anagCowLineaTelecom.getCowNew()+" DN:"+richiesta.getDn());
anagCowTelecom=new GnpAnagCowTelecom();
anagCowTelecom.setCow(anagCowLineaTelecom.getCowNew());
richiesta.setCowDonating(anagCowLineaTelecom.getCowNew());
// salvo la richiesta con stato acquisita
dao.save(richiesta);
}
// Se non trovo il cow nell'anagrafica:
// 1)Aggiorno la tabella GNP_RICHIESTE_DONOR con cod_validazione = 1
// 2)Inserisco un record nella tabella GNP_OLO_RICHIESTE_DONOR_OUT
if (anagCowTelecom == null) {
ret = false;
} else {
// DETERMINO LA PIATTAFORMA CRM DI COMPETENZA
/* C06 RE: GATEWAY DBCFX :Studio per il tracciamento di eventi non correttamente gestiti dal sistema
* cambio implementazione del recupero della piattaforma di competenza, non si basa pi<70> sull'anagrafica (anagCowTelecom)
* ma tramite il localizzatore. Per maggiori dettagli vedi mail
*/
if (!callCheckRetailPlatform(richiesta,log)) {
log.write("9999", "callCheckRetailPlatform false : "+richiesta.getIdRichiesta()+" COW DONATING: "+richiesta.getCowDonating()+"CRM recuperato: "+richiesta.getCrmCompetenza());
/*Se il metodo callCheckRetailPlatform ritorna false non faccio nulla perch<63> nel caso in cui
* si <20> verificato un errore non previsto, non effettuo la verifica CS ma sar<61> cura del BO sistemare la situazione
* un altro caso <20> che ha comunicato il rifiuto all'OLO e quindi non facci pi<70> nulla, in entrambi i casi
* al chiamante restituisco true perch<63> non deve fare pi<70> nulla
*/
ret = true;
return ret;
}
//USO IL CRM DI COMPETENZA RECUPERATO DAL SERVIZIO CUSTOMER LOCATION QUERY
String crmCompetenza = richiesta.getCrmCompetenza();
boolean utenzaDbss = false;
// X06 2016 - Integrazione con DBSS (nuovo sistema Retail)
if (Resources.getDBSS_DONOR_ACTIVE()) {
if(isUtenzaDBSS(crmCompetenza)){
log.write("9999", "isUtenzaDBSS: "+crmCompetenza+" DN:"+richiesta.getDn()+" Id-Richiesta: "+richiesta.getIdRichiesta());
callVerificaCSDBSS(log,richiesta,dbssDonorOutRecDAO);
utenzaDbss=true;
}
}
UtilityDao utilityDao = new UtilityDao();
//PP X5.2010 - aggiunto controllo se multilinea
if (utilityDao.isDnMultilinea(richiesta.getDn()) && crmCompetenza.equalsIgnoreCase("B") && !utenzaDbss) {
log.write("9999", "DN BUSINESS MULTILINEA: DBCFX SIMULA LA NOTIFICA OK DA CRM");
//-- PASSAGGIO FORZATO IN PRESA IN CARICO -------------------
dao.merge(richiesta);
logStoricoPassaggioStato(richiesta.getIdRichiesta(), statoDa, StatoRichiestaDon.PRESA_IN_CARICO, log);
//-----------------------------------------------------------
//-- PASSAGGIO FORZATO IN ATTESA VERIFICA -------------------
RequestManagerDonor.avanzaStatoInAttesaVerifica(richiesta.getCodiceSessione(), log);
//-----------------------------------------------------------
//-- PASSAGGIO FORZATO IN ACCETTATA -------------------------
RequestManagerDonor.avanzaStatoInAccettata(richiesta, log);
//-----------------------------------------------------------
} else if (!utenzaDbss) {
log.write("9999", "DN NON MULTILINEA");
//-- PASSAGGIO IN PRESA IN CARICO e INVIO NOTIFICA A CRM ---
SistemaCrmIF crmController = ControllerFactory.getSistemaCRMDonor(crmCompetenza);
crmController.notificaCRMDonor(richiesta.getIdRichiesta());
dao.merge(richiesta);
logStoricoPassaggioStato(richiesta.getIdRichiesta(), statoDa, StatoRichiestaDon.PRESA_IN_CARICO, log);
//-----------------------------------------------------------
}
}
}
return ret;
} else
throw new StateTransitionNotPossibleException("StateTransitionNotPossibleException");
}
protected static boolean callCheckRetailPlatform(GnpRichiesteDonor richiestaDonor,ProcessLogger log) throws Exception {
log.write("9999", " START callCheckRetailPlatform : " +richiestaDonor.getIdRichiesta() + "DN: "+ richiestaDonor.getDn());
String methSig = "[RequestManagerCSNPg35].[callCheckRetailPlatform] ";
boolean res=false;
CheckRetailPlatformRequest body = new CheckRetailPlatformRequest();
body.setDN(richiestaDonor.getDn());
RetrieveByLineNumberResponseMessage resp = checkDN(body,log);
res=gestisciResponseCheckRetail(methSig,resp,log,richiestaDonor);
log.write("9999", " END callCheckRetailPlatform : " +richiestaDonor.getIdRichiesta() + "DN: "+ richiestaDonor.getDn()+ "con esito: "+res);
return res;
}
private static boolean gestisciResponseCheckRetail(String methSig,RetrieveByLineNumberResponseMessage resp,ProcessLogger log,GnpRichiesteDonor richiestaDon) throws Exception {
//return code puo' essere a una cifra o due (es. 01 o 1)
int retCode = new Integer(resp.getProcessData().getReturnCode());
log.write("9999", " return code ricevuto da ws: " + retCode);
boolean foundByWs = false;
String crmComp = "";
switch (retCode) {
//0
case (RET_CODE_OK_FROM_WS):
//itera sui (tre) parameter, se ne trova uno con valore == 'Y' ne restituisce il name, altrimentii restituisce codice di errore
Parameter[] params = resp.getProcessData().getParameters().getParameter();
for (Parameter p : params) {
if (!("Y").equalsIgnoreCase(p.getValue())) {
continue; //se diverso da Y passa al successivo
}
log.write("9999", methSig + " - trovato el. con val. = Y e name " + p.getName());
if (SystemControllerIF.SystemProvider_CRMB_DESC.equals(p.getName())) {
crmComp = "B";
foundByWs = true;
} else if (SystemControllerIF.SystemProvider_CRMR_DESC.equals(p.getName())) {
// DISMISSIONE CRMR: nel caso la richiesta risulti proveniente da CRMR viene settato a D invece di R
crmComp = "D";
foundByWs = true;
} else if (SystemControllerIF.SystemProvider_DBSS_DESC.equals(p.getName())) {
crmComp = "D";
foundByWs = true;
} else {
log.write("9999", methSig + " valore non previsto");
log.write("0002", methSig + " ws response return code: " + retCode);
log.write("9999", methSig +" non avanza stato in rifiutato : " + retCode);
log.write("9999", methSig +" PER RICHIESTA DI INGLISA VIENE SETTATO IL CRM DI COMPETENZA A B");
//MODIFICA INGLISA NEL CASO IN CUI NON TROVO IL CRM CONTATTO B
//RequestManagerDonor.avanzaStatoInRifiutata(richiestaDon, "COW COR Errato", ApplicationCostants.PROCESSO_DONOR.OLO_OUT.COD_MOTIVO_COW_COR_ERRATO,true, log);
crmComp = "B";
foundByWs = true;
}
}
break;
case (RET_CODE_UTENZA_NON_PRESENTE_FROM_WS):
log.write("9999", methSig + " ws response return code [" + retCode + "] corrispondente a LINEA NON PRESENTE SU WS"+
"ANCHE SE DBSS RESTITUISCE UTENZA NON PRESENTE,PER RICHIESTA DI INGLISA VIENE SETTATO IL CRM DI COMPETENZA A B");
crmComp = "B";
foundByWs = true;
//RequestManagerDonor.avanzaStatoInRifiutata(richiestaDon, "COW COR Errato", ApplicationCostants.PROCESSO_DONOR.OLO_OUT.COD_MOTIVO_COW_COR_ERRATO,true, log);
break;
case (RET_CODE_SERV_CRMB_NON_DISPONIBILE):
case (RET_CODE_SERV_CRMR_NON_DISPONIBILE):
case (RET_CODE_ERRORE_GENERICO_WS):
log.write("0002", methSig + " ws response return code: " + retCode+ "corrispondente a un errore interno di CCC scrivo solo nella SCARTI CS");
buildScartiVerificaCs(richiestaDon,ANOMALIA_ERRORE_CODICE_SERVIZIO_CCC,ANOMALIA_ERRORE_CODICE_SERVIZIO_CCC_DESCRIZIONE+retCode,log);
break;
default:
log.write("9999", methSig + " ws response return code [" + retCode + "] non previsto da interfaccia");
log.write("0002", methSig + " ws response return code: " + retCode+ "corrispondente a un errore interno di CCC");
buildScartiVerificaCs(richiestaDon,ANOMALIA_ERRORE_CODICE_SERVIZIO_NON_PREVISTO_CCC,ANOMALIA_ERRORE_CODICE_SERVIZIO_NON_PREVISTO_CCC_DESCRIZIONE+retCode,log);
}
if (foundByWs) {
log.write("9999", methSig + " crm recuperato da DBSS e settato nella richiesta : " + crmComp);
richiestaDon.setCrmCompetenza(crmComp);
}
return foundByWs;
}
private static void buildScartiVerificaCs(GnpRichiesteDonor richiestaDon,String tipoAnomalia,String descrizioneAnomalia,ProcessLogger log) {
log.write("9999","START buildScartiVerificaCs DN: " + richiestaDon.getDn()+"Idrichiesta: "+richiestaDon.getIdRichiesta());
GnpScartiVerificaCsDAO scartiVerificaCsDao=new GnpScartiVerificaCsDAO();
GnpScartiVerificaCs scartiVerificaCs=new GnpScartiVerificaCs();
scartiVerificaCs.setIdRichiesta(richiestaDon.getIdRichiesta());
scartiVerificaCs.setDn(richiestaDon.getDn());
scartiVerificaCs.setTipoAnomalia(tipoAnomalia);
scartiVerificaCs.setDescrizioneAnomalia(descrizioneAnomalia);
scartiVerificaCs.setCodiceSegreto(richiestaDon.getCowDonating());
scartiVerificaCs.setDataInserimento(new Date());
scartiVerificaCsDao.merge(scartiVerificaCs);
log.write("9999","END buildScartiVerificaCs DN: " + richiestaDon.getDn()+"Idrichiesta: "+richiestaDon.getIdRichiesta());
}
/**
* @version 4.1 20180417 migliorati i log
*/
public static RetrieveByLineNumberResponseMessage checkDN(CheckRetailPlatformRequest body,ProcessLogger log) throws Exception {
String requestDn = body.getDN();
log.write("9999", "NowController RetrieveByLineNumberResponseMessage - Ricevuta richiesta DN ["+requestDn+"]");
CustomerLocationQueryClient client = new CustomerLocationQueryClient();
RetrieveByLineNumberRequestMessage requestMessage = new RetrieveByLineNumberRequestMessage();
Request_LineNumber request = new Request_LineNumber();
CharacteristicValueRequest_LineNumber characteristicValueRequest = new CharacteristicValueRequest_LineNumber();
characteristicValueRequest.setValue(lineValue);
CharacteristicSpecificationRequest_LineNumber characteristicSpecification = new CharacteristicSpecificationRequest_LineNumber();
characteristicSpecification.setName(operationName);
characteristicValueRequest.setCharacteristicSpecification(characteristicSpecification);
CharacteristicValueRequest_LineNumber[] characteristicValueArray = {characteristicValueRequest};
request.setCharacteristicValue(characteristicValueArray);
BusinessInteractionRelationship_LineNumber businessInteractionRelationship = new BusinessInteractionRelationship_LineNumber();
ProductOrderRequest_LineNumber productOrder = new ProductOrderRequest_LineNumber();
CustomerOrderItemRequest_LineNumber customerOrder = new CustomerOrderItemRequest_LineNumber();
ProductBundleRequest_LineNumber productBundle = new ProductBundleRequest_LineNumber();
ProductCharacteristicValueRequest_LineNumber productCharacteristic = new ProductCharacteristicValueRequest_LineNumber();
productCharacteristic.setValue(requestDn);
ProductSpecCharacteristicRequest_LineNumber productSpecCharachteristic = new ProductSpecCharacteristicRequest_LineNumber();
productSpecCharachteristic.setName(serviceNumber);
productCharacteristic.setProductSpecCharacteristic(productSpecCharachteristic);
ProductCharacteristicValueRequest_LineNumber[] productCharacteristicValue = {productCharacteristic};
productBundle.setProductCharacteristicValue(productCharacteristicValue);
customerOrder.setProductBundle(productBundle);
CustomerOrderItemRequest_LineNumber[] customerOrderItem = {customerOrder};
productOrder.setCustomerOrderItem(customerOrderItem);
businessInteractionRelationship.setProductOrder(productOrder);
request.setBusinessInteractionRelationship(businessInteractionRelationship);
requestMessage.setRequest(request);
RetrieveByLineNumberResponseMessage retrieveByLineNumberResponseMessage = client.retrieveByLineNumber(requestMessage);
String retCode = retrieveByLineNumberResponseMessage != null && retrieveByLineNumberResponseMessage.getProcessData() != null ?
retrieveByLineNumberResponseMessage.getProcessData().getReturnCode() : null;
log.write("9999", "NowController RetrieveByLineNumberResponseMessage Ottenuta risposta DN ["+requestDn+"] codice ["+retCode+"]");
String descr = retrieveByLineNumberResponseMessage != null && retrieveByLineNumberResponseMessage.getProcessData() != null ?
retrieveByLineNumberResponseMessage.getProcessData().getReturnDescription() : null;
log.write("9999", "NowController RetrieveByLineNumberResponseMessage Ottenuta risposta DN ["+requestDn+"] descrizione ["+descr+"]");
return retrieveByLineNumberResponseMessage;
}
/**
* Passaggio di stato in PRESAINCARICO.
* <p/>
* Ritorna false se il COW Donating non <20> mappato su uno di quelli Telecom
*
* @param richiesta
* @param log
* @return
* @throws Exception
*/
public static boolean avanzaStatoInPresaInCaricoTool(GnpRichiesteDonor richiesta,String piattaformaCompetenza, ProcessLogger log)
throws Exception {
GnpRichiesteDonorDAO dao = new GnpRichiesteDonorDAO();
GnpDbssDonorOutDAO dbssDonorOutRecDAO = new GnpDbssDonorOutDAO();
boolean ret = true;
//richiesta.setStato(new Long(StatoRichiestaDon.ACQUISITA));
//int check = StateManagerDonor.checkTransition(richiesta.getIdRichiesta(), StatoRichiestaDon.PRESA_IN_CARICO);
int check=1;
if (check != StateManagerDonor.TRANSIZIONE_NON_POSSIBILE) {
int statoDa = richiesta.getStato().intValue();
richiesta.setStato((long) StatoRichiestaDon.PRESA_IN_CARICO);
/*
*
* Penso che la presa in carico sia pi<70> corretta considerare la prima data e non questa
* quindi non sovrascrivere la precedente
*/
//richiesta.setDataPresaincarico(new java.util.Date());
log.write("9999", "Verifica cs whitelist null");
// Ricerco nell'anagrafica il cow Donating ricevuto
GnpAnagCowLineaTelecom anagCowLineaTelecom=null;
GnpAnagCowLineaTelecomDAO cowLineaDao;
GnpAnagCowTelecomDAO anagCowDAO = new GnpAnagCowTelecomDAO();
GnpAnagCowTelecom anagCowTelecom = anagCowDAO.findById(richiesta.getCowDonating());
//C09 2019 WA RICHIESTO ESCLUSIVAMENTE PER LA VERIFICA CS
if(Resources.getFLAG_CHECK_ANAG_COW_LINEA()) {
log.write("9999", "CONTROLLO SU TABELLA GNP_ANAG_COW_LINEA_TELECOM(FLAG WA ABILITATO) : "+richiesta.getIdRichiesta()+" COW: "+richiesta.getCowDonating()+" DN:"+richiesta.getDn());
cowLineaDao = new GnpAnagCowLineaTelecomDAO();
anagCowLineaTelecom = cowLineaDao.findByDnAndCowOld(richiesta.getDn(),richiesta.getCowDonating());
}
//C09 2019 WA RICHIESTO ESCLUSIVAMENTE PER LA VERIFICA CS SE E' UGUALE A NULL IL PROCESSO RESTA INVARIATO
if(anagCowLineaTelecom!=null) {
log.write("9999", "TROVATA LINEA SU TABELLA GNP_ANAG_COW_LINEA_TELECOM(FLAG WA ABILITATO) : "+richiesta.getIdRichiesta()+" COW VECCHIO: "+richiesta.getCowDonating()+
" COW NUOVO:"+anagCowLineaTelecom.getCowNew()+" DN:"+richiesta.getDn());
anagCowTelecom=new GnpAnagCowTelecom();
anagCowTelecom.setCow(anagCowLineaTelecom.getCowNew());
richiesta.setCowDonating(anagCowLineaTelecom.getCowNew());
// salvo la richiesta con stato acquisita
dao.save(richiesta);
}
// Se non trovo il cow nell'anagrafica:
// 1)Aggiorno la tabella GNP_RICHIESTE_DONOR con cod_validazione = 1
// 2)Inserisco un record nella tabella GNP_OLO_RICHIESTE_DONOR_OUT
if (anagCowTelecom == null) {
ret = false;
} else {
log.write("9999", "Piattaforma notificata da BO : "+piattaformaCompetenza+" DN:"+richiesta.getDn()+" Id-Richiesta: "+richiesta.getIdRichiesta());
//Setto la piattaforma di competenza con quello del campo settato dal BO
String crmCompetenza=piattaformaCompetenza;
richiesta.setCrmCompetenza(crmCompetenza);
boolean utenzaDbss = false;
if(isUtenzaDBSS(piattaformaCompetenza)){
log.write("9999", "isUtenzaDBSS: "+piattaformaCompetenza+" DN:"+richiesta.getDn()+" Id-Richiesta: "+richiesta.getIdRichiesta());
if (Resources.getDBSS_DONOR_ACTIVE()) {
callVerificaCSDBSS(log,richiesta,dbssDonorOutRecDAO);
utenzaDbss=true;
}
}
// X06 2016 - Integrazione con DBSS (nuovo sistema Retail)
UtilityDao utilityDao = new UtilityDao();
//PP X5.2010 - aggiunto controllo se multilinea
if (utilityDao.isDnMultilinea(richiesta.getDn()) && crmCompetenza.equalsIgnoreCase("B") && !utenzaDbss) {
log.write("9999", "DN BUSINESS MULTILINEA: DBCFX SIMULA LA NOTIFICA OK DA CRM");
//-- PASSAGGIO FORZATO IN PRESA IN CARICO -------------------
dao.merge(richiesta);
logStoricoPassaggioStato(richiesta.getIdRichiesta(), statoDa, StatoRichiestaDon.PRESA_IN_CARICO, log);
//-----------------------------------------------------------
//-- PASSAGGIO FORZATO IN ATTESA VERIFICA -------------------
RequestManagerDonor.avanzaStatoInAttesaVerifica(richiesta.getCodiceSessione(), log);
//-----------------------------------------------------------
//-- PASSAGGIO FORZATO IN ACCETTATA -------------------------
RequestManagerDonor.avanzaStatoInAccettata(richiesta, log);
//-----------------------------------------------------------
} else if (!utenzaDbss) {
log.write("9999", "DN NON MULTILINEA");
//-- PASSAGGIO IN PRESA IN CARICO e INVIO NOTIFICA A CRM ---
SistemaCrmIF crmController = ControllerFactory.getSistemaCRMDonor(crmCompetenza);
crmController.notificaCRMDonor(richiesta.getIdRichiesta());
dao.merge(richiesta);
logStoricoPassaggioStato(richiesta.getIdRichiesta(), statoDa, StatoRichiestaDon.PRESA_IN_CARICO, log);
//-----------------------------------------------------------
}
}
return ret;
} else
throw new StateTransitionNotPossibleException("StateTransitionNotPossibleException");
}
private static void callVerificaCSDBSS(ProcessLogger log,GnpRichiesteDonor richiesta,GnpDbssDonorOutDAO dbssDonorOutRecDAO) throws Exception {
log.write("9999", "START Chiamata al WS WirelineLineCodeQuery DBSS DN:["+richiesta.getDn()+"]");
// chiamata al WS WirelineLineCodeQuery
DBSSController dbssController = DBSSController.getInstance();
GnpDbssDonorOut dbssDonorOut = dbssController.creaRichiestaVerificaCS(richiesta);
VerifySecretCodeResponse dbssResponse = dbssController.callVerificaCS(dbssDonorOut);
String esito = null;
if (dbssResponse != null) {
WirelineLineCodeQueryResponseUtils util = new WirelineLineCodeQueryResponseUtils(dbssResponse);
esito = dbssResponse.getProcessData().getReturnDescription();
if (util.isCodiceSegretoCorretto()) {
log.write("9999", "CodiceSegreto Corretto: "+richiesta.getCrmCompetenza()+" DN:"+richiesta.getDn()+" Id-Richiesta: "+richiesta.getIdRichiesta());
// ESITO OK
richiesta.setCrmCompetenza("D");
// Valorizzazione del CODICE_CLIENTE
dbssDonorOut.setRespCodiceCliente(util.getCodiceCliente());
RequestManagerDonor.avanzaStatoInAccettata(richiesta, log);
} else if (util.isCodiceSegretoErrato()) {
log.write("9999", "CodiceSegreto Errato: "+richiesta.getCrmCompetenza()+" DN:"+richiesta.getDn()+" Id-Richiesta: "+richiesta.getIdRichiesta());
// ESITO KO, codice CIM codice segreto errato
richiesta.setCrmCompetenza("D");
RequestManagerDonor.avanzaStatoInRifiutata(richiesta, "Codice Segreto Errato", ApplicationCostants.PROCESSO_DONOR.OLO_OUT.COD_MOTIVO_11, true, log);
} else if (util.isNumerazioneNonGestita()) {
log.write("9999", "Numerazione non gestita: "+richiesta.getCrmCompetenza()+" DN:"+richiesta.getDn()+" Id-Richiesta: "+richiesta.getIdRichiesta());
buildScartiVerificaCs(richiesta,VERIFICA_CS_DBSS_NUMERAZIONE_NON_GESTITA,VERIFICA_CS_DBSS_NUMERAZIONE_NON_GESTITA_DESCRIZIONE,log);
}else {
log.write("9999", "Esito non gestito: "+richiesta.getCrmCompetenza()+" DN:"+richiesta.getDn()+" Id-Richiesta: "+richiesta.getIdRichiesta());
buildScartiVerificaCs(richiesta,VERIFICA_CS_DBSS_ESITO_NON_GESTITO,VERIFICA_CS_DBSS_ESITO_NON_GESTITO_DESCRIZIONE,log);
}
dbssDonorOut.setRespCodEsito(esito);
dbssDonorOut.setRespDataRicezione(new Date());
dbssDonorOutRecDAO.merge(dbssDonorOut);
}else {
log.write("9999", "Risposta vuota non gestita: "+richiesta.getCrmCompetenza()+" DN:"+richiesta.getDn()+" Id-Richiesta: "+richiesta.getIdRichiesta());
buildScartiVerificaCs(richiesta,VERIFICA_CS_DBSS_ESITO_NON_GESTITO,VERIFICA_CS_DBSS_ESITO_NON_GESTITO_DESCRIZIONE,log);
}
log.write("9999", "END Chiamata al WS WirelineLineCodeQuery DBSS DN:["+richiesta.getDn()+"]");
}
private static boolean isUtenzaDBSS(String piattaforma) {
return "D".equalsIgnoreCase(piattaforma);
}
public static void avanzaStatoInPresaInCaricoKO(GnpRichiesteDonor richiesta, ProcessLogger log)
throws Exception {
GnpRichiesteDonorDAO dao = new GnpRichiesteDonorDAO();
int check = StateManagerDonor.checkTransition(richiesta.getIdRichiesta(), StatoRichiestaDon.PRESA_IN_CARICO_KO);
if (check != StateManagerDonor.TRANSIZIONE_NON_POSSIBILE) {
int statoDa = richiesta.getStato().intValue();
richiesta.setStato(new Long(StatoRichiestaDon.PRESA_IN_CARICO_KO));
dao.merge(richiesta);
logStoricoPassaggioStato(richiesta.getIdRichiesta(), statoDa, StatoRichiestaDon.PRESA_IN_CARICO_KO, log);
} else
throw new StateTransitionNotPossibleException("StateTransitionNotPossibleException");
}
public static void passaggioStatoScaduta(GnpRichiesteDonor richiesta, ProcessLogger log)
throws Exception {
GnpRichiesteDonorDAO ricDonorDAO = new GnpRichiesteDonorDAO();
// IMPOSTA LO STATO IN SCADUTA
int statoDa = richiesta.getStato().intValue();
richiesta.setStato(new Long(StatoRichiestaDon.SCADUTA));
ricDonorDAO.merge(richiesta);
RequestManagerDonor.logStoricoPassaggioStato(richiesta.getIdRichiesta(),
statoDa,
StatoRichiestaDon.SCADUTA, log);
}
public static void avanzaStatoInAttesaVerifica(String codiceSessione, ProcessLogger log)
throws Exception {
GnpRichiesteDonorDAO dao = new GnpRichiesteDonorDAO();
GnpRichiesteDonor richiesta = dao.findByCodiceSessione(codiceSessione);
if (richiesta == null)
throw new Exception("Richiesta con codice sessione " + codiceSessione + " non trovata");
int statoDa = StateManagerDonor.checkTransition(richiesta.getIdRichiesta(), StatoRichiestaDon.ATTESA_VERIFICA);
if (statoDa != StateManagerDonor.TRANSIZIONE_NON_POSSIBILE) {
richiesta.setStato(new Long(StatoRichiestaDon.ATTESA_VERIFICA));
dao.merge(richiesta);
logStoricoPassaggioStato(richiesta.getIdRichiesta(), statoDa, StatoRichiestaDon.ATTESA_VERIFICA, log);
} else
throw new StateTransitionNotPossibleException("StateTransitionNotPossibleException");
}
}