|
|
|
|
@@ -9,12 +9,14 @@ import it.valueteam.gnp.obj.LogInfo;
|
|
|
|
|
import it.valueteam.gnp.obj.LogProcess;
|
|
|
|
|
import it.valueteam.gnp.utility.DateUtils;
|
|
|
|
|
import it.valueteam.gnp.utility.Resources;
|
|
|
|
|
import it.valueteam.gnpgo.core.object.GnpgoSemaforoSummary;
|
|
|
|
|
import it.valueteam.gnp.utility.UserTransactionUtility;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import javax.transaction.UserTransaction;
|
|
|
|
|
import java.io.File;
|
|
|
|
|
import java.io.FileInputStream;
|
|
|
|
|
import java.io.FileOutputStream;
|
|
|
|
|
import java.text.SimpleDateFormat;
|
|
|
|
|
|
|
|
|
|
import java.util.*;
|
|
|
|
|
|
|
|
|
|
public class Dwhe2eRepoSaldiNettiIn extends InternalSenderProcess implements Loggable, ProcessIF {
|
|
|
|
|
@@ -84,15 +86,18 @@ public class Dwhe2eRepoSaldiNettiIn extends InternalSenderProcess implements Log
|
|
|
|
|
//leggo i file da cartella CO
|
|
|
|
|
List<String> listFileName = getListFileName(Resources.getPATH_FILE_DWHE2E_REPOSALDINETTI_CON_IN());
|
|
|
|
|
readFilesAndStore(listFileName);
|
|
|
|
|
//per ogni nome file, se .csv allora prendine il nome assoluto DWHE2E_DBCFX_USCITE_CON_aaaammgg
|
|
|
|
|
//per ogni nome file
|
|
|
|
|
for(String fileName : listFileName){
|
|
|
|
|
|
|
|
|
|
String estensioneFname = fileName.substring(fileName.lastIndexOf("."),fileName.length());
|
|
|
|
|
if (estensioneFname.equals(Resources.getDWHE2E_REPOSALDINETTI_FILENAME_EXT())) {
|
|
|
|
|
|
|
|
|
|
//String fileNameAbsolute = fileName.substring(0,fileName.lastIndexOf("."));
|
|
|
|
|
generaFileOut(generaRecordAndStoreOut(fileName),
|
|
|
|
|
Resources.getDWHE2E_REPOSALDINETTI_NOME_FILE_CON_OUT(),
|
|
|
|
|
//aggiungo a DBCFX_DWHE2E_USCITE_XXX_ + yyyymmdd.csv al nome file
|
|
|
|
|
String nomeFileOut = Resources.getDWHE2E_REPOSALDINETTI_NOME_FILE_CON_OUT();
|
|
|
|
|
nomeFileOut += DateUtils.toString(new Date(), Resources.getDWHE2E_REPOSALDINETTI_DATA_FILENAME()) + Resources.getDWHE2E_REPOSALDINETTI_FILENAME_EXT();
|
|
|
|
|
|
|
|
|
|
generaFileOut(generaRecordAndStoreOut(fileName,nomeFileOut),
|
|
|
|
|
nomeFileOut,
|
|
|
|
|
Resources.getPATH_FILE_DWHE2E_REPOSALDINETTI_CON_OUT(),
|
|
|
|
|
fileName);
|
|
|
|
|
}
|
|
|
|
|
@@ -107,8 +112,11 @@ public class Dwhe2eRepoSaldiNettiIn extends InternalSenderProcess implements Log
|
|
|
|
|
String estensioneFname = fileName.substring(fileName.lastIndexOf("."),fileName.length());
|
|
|
|
|
if (estensioneFname.equals(Resources.getDWHE2E_REPOSALDINETTI_FILENAME_EXT())) {
|
|
|
|
|
|
|
|
|
|
//String fileNameAbsolute = fileName.substring(0,fileName.lastIndexOf("."));
|
|
|
|
|
generaFileOut(generaRecordAndStoreOut(fileName),
|
|
|
|
|
//aggiungo a DBCFX_DWHE2E_USCITE_XXX_ + yyyymmdd.csv al nome file
|
|
|
|
|
String nomeFileOut = Resources.getDWHE2E_REPOSALDINETTI_NOME_FILE_CON_OUT();
|
|
|
|
|
nomeFileOut += DateUtils.toString(new Date(), Resources.getDWHE2E_REPOSALDINETTI_DATA_FILENAME()) + Resources.getDWHE2E_REPOSALDINETTI_FILENAME_EXT();
|
|
|
|
|
|
|
|
|
|
generaFileOut(generaRecordAndStoreOut(fileName,nomeFileOut),
|
|
|
|
|
Resources.getDWHE2E_REPOSALDINETTI_NOME_FILE_BUS_OUT(),
|
|
|
|
|
Resources.getPATH_FILE_DWHE2E_REPOSALDINETTI_BUS_OUT(),
|
|
|
|
|
fileName);
|
|
|
|
|
@@ -167,7 +175,7 @@ public class Dwhe2eRepoSaldiNettiIn extends InternalSenderProcess implements Log
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
log.write("9999", "End readFiles");
|
|
|
|
|
log.write("9999", "End readFilesAndStore");
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -228,6 +236,7 @@ public class Dwhe2eRepoSaldiNettiIn extends InternalSenderProcess implements Log
|
|
|
|
|
|
|
|
|
|
private void spostaFile(String sDir, File inFile) throws Exception
|
|
|
|
|
{
|
|
|
|
|
log.write("9999", "Start spostaFile");
|
|
|
|
|
log.write("9999","Sposto il file : " + inFile.getName());
|
|
|
|
|
File out = new File(sDir + inFile.getName() );
|
|
|
|
|
FileInputStream fis = new FileInputStream(inFile);
|
|
|
|
|
@@ -241,6 +250,7 @@ public class Dwhe2eRepoSaldiNettiIn extends InternalSenderProcess implements Log
|
|
|
|
|
fis.close();
|
|
|
|
|
fos.close();
|
|
|
|
|
log.write("9999","Cancello file : " + inFile.getName());
|
|
|
|
|
log.write("9999", "End spostaFile");
|
|
|
|
|
inFile.delete();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -255,18 +265,38 @@ public class Dwhe2eRepoSaldiNettiIn extends InternalSenderProcess implements Log
|
|
|
|
|
GnpDwhe2eSaldinettiIn gnpDwhe2eSaldinettiIn = new GnpDwhe2eSaldinettiIn();
|
|
|
|
|
gnpDwhe2eSaldinettiIn.setNomeFile(nomeFile);
|
|
|
|
|
gnpDwhe2eSaldinettiIn.setCrm(piattaforma);
|
|
|
|
|
gnpDwhe2eSaldinettiIn.setIdRichiesta(Long.valueOf(parts[0]));
|
|
|
|
|
gnpDwhe2eSaldinettiIn.setLinea(parts[1]);
|
|
|
|
|
gnpDwhe2eSaldinettiIn.setCor(parts[2]);
|
|
|
|
|
gnpDwhe2eSaldinettiIn.setE2eDataCessazione(DateUtils.toDate(parts[3],DATACESSAZIONE_FORMAT));
|
|
|
|
|
gnpDwhe2eSaldinettiIn.setE2eServizioAccesso(parts[4]);
|
|
|
|
|
gnpDwhe2eSaldinettiIn.setE2eDimensione1(parts[5]);
|
|
|
|
|
gnpDwhe2eSaldinettiIn.setE2eDimensione2(parts[6]);
|
|
|
|
|
gnpDwhe2eSaldinettiIn.setE2eDimensione3(parts[7]);
|
|
|
|
|
gnpDwhe2eSaldinettiIn.setE2eDimensione4(parts[8]);
|
|
|
|
|
gnpDwhe2eSaldinettiIn.setE2eDimensione5(parts[9]);
|
|
|
|
|
|
|
|
|
|
log.write("9999", "Oggetto creato gnpVerificaCsWhitelist = "+gnpDwhe2eSaldinettiIn.toString());
|
|
|
|
|
if (0<parts.length)
|
|
|
|
|
gnpDwhe2eSaldinettiIn.setIdRichiesta(Long.valueOf(parts[0]));
|
|
|
|
|
|
|
|
|
|
if (1<parts.length)
|
|
|
|
|
gnpDwhe2eSaldinettiIn.setLinea(parts[1]);
|
|
|
|
|
|
|
|
|
|
if (2<parts.length)
|
|
|
|
|
gnpDwhe2eSaldinettiIn.setCor(parts[2]);
|
|
|
|
|
|
|
|
|
|
if (3<parts.length)
|
|
|
|
|
gnpDwhe2eSaldinettiIn.setE2eDataCessazione(DateUtils.toDate(parts[3],DATACESSAZIONE_FORMAT));
|
|
|
|
|
|
|
|
|
|
if (4<parts.length)
|
|
|
|
|
gnpDwhe2eSaldinettiIn.setE2eServizioAccesso(parts[4]);
|
|
|
|
|
|
|
|
|
|
if (5<parts.length)
|
|
|
|
|
gnpDwhe2eSaldinettiIn.setE2eDimensione1(parts[5]);
|
|
|
|
|
|
|
|
|
|
if (6<parts.length)
|
|
|
|
|
gnpDwhe2eSaldinettiIn.setE2eDimensione2(parts[6]);
|
|
|
|
|
|
|
|
|
|
if (7<parts.length)
|
|
|
|
|
gnpDwhe2eSaldinettiIn.setE2eDimensione3(parts[7]);
|
|
|
|
|
|
|
|
|
|
if (8<parts.length)
|
|
|
|
|
gnpDwhe2eSaldinettiIn.setE2eDimensione4(parts[8]);
|
|
|
|
|
|
|
|
|
|
if (9<parts.length)
|
|
|
|
|
gnpDwhe2eSaldinettiIn.setE2eDimensione5(parts[9]);
|
|
|
|
|
|
|
|
|
|
log.write("9999", "Oggetto creato GnpDwhe2eSaldinettiIn = "+gnpDwhe2eSaldinettiIn.toString());
|
|
|
|
|
|
|
|
|
|
log.write("9999", "End getDataFromLine");
|
|
|
|
|
|
|
|
|
|
@@ -274,9 +304,9 @@ public class Dwhe2eRepoSaldiNettiIn extends InternalSenderProcess implements Log
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void aggiungiInfoAndSave(List<GnpDwhe2eSaldinettiIn> gnpDwhe2eSaldinettiIn){
|
|
|
|
|
private void aggiungiInfoAndSave(List<GnpDwhe2eSaldinettiIn> gnpDwhe2eSaldinettiIn) throws Exception {
|
|
|
|
|
log.write("9999", "Start aggiungiInfoAndSave");
|
|
|
|
|
//instanzia le classi DAO
|
|
|
|
|
//istanzia le classi DAO
|
|
|
|
|
//del.82
|
|
|
|
|
GnpRichiesteDonor82DAO daoRichiesteD82 = new GnpRichiesteDonor82DAO();
|
|
|
|
|
//del 274
|
|
|
|
|
@@ -287,66 +317,120 @@ public class Dwhe2eRepoSaldiNettiIn extends InternalSenderProcess implements Log
|
|
|
|
|
//DAO per storare le richieste IN
|
|
|
|
|
GnpDwhe2eSaldinettiInDAO dwhe2eSaldinettiInDAO = new GnpDwhe2eSaldinettiInDAO();
|
|
|
|
|
|
|
|
|
|
//effettua la ricerca nelle tabelle sfruttando ID_RICHIESTA per poi aggiorna i campi dbcfx
|
|
|
|
|
for(GnpDwhe2eSaldinettiIn dwhe2eItem : gnpDwhe2eSaldinettiIn ){
|
|
|
|
|
// del. 82
|
|
|
|
|
GnpRichiesteDonor82 gnpRichiestaDonor82 = daoRichiesteD82.findById(dwhe2eItem.getIdRichiesta());
|
|
|
|
|
if(gnpRichiestaDonor82!=null){
|
|
|
|
|
dwhe2eItem.popolaAggiuntiviFX(gnpRichiestaDonor82.getCowRecipient(),this.DEL_82_TIPOUSCITA, this.DEL_82);
|
|
|
|
|
dwhe2eSaldinettiInDAO.save(dwhe2eItem);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
// del. 274
|
|
|
|
|
GnpRichiesteDonor gnpRichiestaDonor274 = daoRichiesteDonor.findById(dwhe2eItem.getIdRichiesta());
|
|
|
|
|
if(gnpRichiestaDonor274!=null){
|
|
|
|
|
dwhe2eItem.popolaAggiuntiviFX(gnpRichiestaDonor274.getCowRecipient(),this.DEL_274_TIPOUSCITA, this.DEL_274);
|
|
|
|
|
dwhe2eSaldinettiInDAO.save(dwhe2eItem);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
// del. 103 uscite Donor nativi olo
|
|
|
|
|
GnpRichiesteCsNpg103 gnpRichiesteCsNpg103NativiOlo = daoCsNpg103.findById(dwhe2eItem.getIdRichiesta());
|
|
|
|
|
if(gnpRichiesteCsNpg103NativiOlo!=null){
|
|
|
|
|
dwhe2eItem.popolaAggiuntiviFX(gnpRichiesteCsNpg103NativiOlo.getCodOpRecipient(),this.DEL_103_NATOLO_TIPOUSCITA, this.DEL_103);
|
|
|
|
|
dwhe2eSaldinettiInDAO.save(dwhe2eItem);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
// del. 103 uscite Donor nativi olo
|
|
|
|
|
GnpRichiesteCsNpg103 gnpRichiesteCsNpg103StdVoip = daoCsNpg103.findById(dwhe2eItem.getIdRichiesta());
|
|
|
|
|
if(gnpRichiesteCsNpg103StdVoip!=null){
|
|
|
|
|
dwhe2eItem.popolaAggiuntiviFX(gnpRichiesteCsNpg103StdVoip.getCodOpRecipient(),this.DEL_103_STD_VOIP_TIPOUSCITA, this.DEL_103);
|
|
|
|
|
dwhe2eSaldinettiInDAO.save(dwhe2eItem);
|
|
|
|
|
}
|
|
|
|
|
UserTransaction utx;
|
|
|
|
|
try {
|
|
|
|
|
utx = UserTransactionUtility.beginUserTransaction();
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
log.error(e, "aggiungiInfoAndSave: beginUserTransaction");
|
|
|
|
|
throw e;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
try{
|
|
|
|
|
//effettua la ricerca nelle tabelle sfruttando ID_RICHIESTA per poi aggiorna i campi dbcfx
|
|
|
|
|
for(GnpDwhe2eSaldinettiIn dwhe2eItem : gnpDwhe2eSaldinettiIn ){
|
|
|
|
|
// del. 82
|
|
|
|
|
GnpRichiesteDonor82 gnpRichiestaDonor82 = daoRichiesteD82.findById(dwhe2eItem.getIdRichiesta());
|
|
|
|
|
if(gnpRichiestaDonor82!=null){
|
|
|
|
|
dwhe2eItem.popolaAggiuntiviFX(gnpRichiestaDonor82.getCowRecipient(),this.DEL_82_TIPOUSCITA, this.DEL_82);
|
|
|
|
|
dwhe2eSaldinettiInDAO.save(dwhe2eItem);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
// del. 274
|
|
|
|
|
GnpRichiesteDonor gnpRichiestaDonor274 = daoRichiesteDonor.findById(dwhe2eItem.getIdRichiesta());
|
|
|
|
|
if(gnpRichiestaDonor274!=null){
|
|
|
|
|
dwhe2eItem.popolaAggiuntiviFX(gnpRichiestaDonor274.getCowRecipient(),this.DEL_274_TIPOUSCITA, this.DEL_274);
|
|
|
|
|
dwhe2eSaldinettiInDAO.save(dwhe2eItem);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
// del. 103 uscite Donor nativi olo
|
|
|
|
|
GnpRichiesteCsNpg103 gnpRichiesteCsNpg = daoCsNpg103.findById(dwhe2eItem.getIdRichiesta());
|
|
|
|
|
if(gnpRichiesteCsNpg!=null && gnpRichiesteCsNpg.getProcesso().equalsIgnoreCase("DONOR_NAT_OLO")){
|
|
|
|
|
dwhe2eItem.popolaAggiuntiviFX(gnpRichiesteCsNpg.getCodOpRecipient(),this.DEL_103_NATOLO_TIPOUSCITA, this.DEL_103);
|
|
|
|
|
dwhe2eSaldinettiInDAO.save(dwhe2eItem);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
// del. 103 uscite Donor nativi olo
|
|
|
|
|
if(gnpRichiesteCsNpg!=null && gnpRichiesteCsNpg.getProcesso().equalsIgnoreCase("CSNPg103")){
|
|
|
|
|
dwhe2eItem.popolaAggiuntiviFX(gnpRichiesteCsNpg.getCodOpRecipient(),this.DEL_103_STD_VOIP_TIPOUSCITA, this.DEL_103);
|
|
|
|
|
dwhe2eSaldinettiInDAO.save(dwhe2eItem);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
UserTransactionUtility.endUserTransaction(utx, true);
|
|
|
|
|
}catch (Exception ex) {
|
|
|
|
|
try {
|
|
|
|
|
log.write("9999", "UserTransactionUtility.endUserTransaction rollback");
|
|
|
|
|
// Rollback the transaction
|
|
|
|
|
UserTransactionUtility.endUserTransaction(utx, false);
|
|
|
|
|
log.error(ex, "aggiungiInfoAndSave try rollback");
|
|
|
|
|
ex.printStackTrace();
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
log.error(e, "aggiungiInfoAndSave catch rollback");
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
throw e;
|
|
|
|
|
}
|
|
|
|
|
throw ex;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
log.write("9999", "End aggiungiInfoAndSave");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//TODO
|
|
|
|
|
private List<GnpDwhe2eSaldinettiOut> generaRecordAndStoreOut(String fileName){
|
|
|
|
|
private List<GnpDwhe2eSaldinettiOut> generaRecordAndStoreOut(String fileNameIn, String fileNameOut) throws Exception {
|
|
|
|
|
|
|
|
|
|
UserTransaction utx;
|
|
|
|
|
try {
|
|
|
|
|
utx = UserTransactionUtility.beginUserTransaction();
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
log.error(e, "generaRecordAndStoreOut: beginUserTransaction");
|
|
|
|
|
throw e;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
log.write("9999", "Start generaRecordAndStoreOut");
|
|
|
|
|
GnpDwhe2eSaldinettiOutDAO saldinettiOutDAO =new GnpDwhe2eSaldinettiOutDAO();
|
|
|
|
|
GnpDwhe2eSaldinettiInDAO saldinettiInDAO =new GnpDwhe2eSaldinettiInDAO();
|
|
|
|
|
|
|
|
|
|
//preleva dalla dwhe2eSaldinettiInDAO tutti i record con quel nome file facendo
|
|
|
|
|
//group by e torna l'istanza di una list<dwhe2eSaldinettiOut>.
|
|
|
|
|
//Il flag Lavorato ad N è settato nel costruttore quando fa il mapping HB
|
|
|
|
|
List<GnpDwhe2eSaldinettiOut> listSaldinettiOut = saldinettiInDAO.groupBy(fileName);
|
|
|
|
|
List<GnpDwhe2eSaldinettiOut> listSaldinettiOut = saldinettiInDAO.groupBy(fileNameIn);
|
|
|
|
|
|
|
|
|
|
//salva i record nella tabella di out
|
|
|
|
|
for(GnpDwhe2eSaldinettiOut itemOut : listSaldinettiOut){
|
|
|
|
|
saldinettiOutDAO.save(itemOut);
|
|
|
|
|
try{
|
|
|
|
|
//salva i record nella tabella di out
|
|
|
|
|
for(GnpDwhe2eSaldinettiOut itemOut : listSaldinettiOut){
|
|
|
|
|
itemOut.setNomeFile(fileNameOut);
|
|
|
|
|
saldinettiOutDAO.save(itemOut);
|
|
|
|
|
}
|
|
|
|
|
UserTransactionUtility.endUserTransaction(utx, true);
|
|
|
|
|
|
|
|
|
|
}catch (Exception ex) {
|
|
|
|
|
try {
|
|
|
|
|
log.write("9999", "UserTransactionUtility.endUserTransaction rollback");
|
|
|
|
|
// Rollback the transaction
|
|
|
|
|
UserTransactionUtility.endUserTransaction(utx, false);
|
|
|
|
|
log.error(ex, "generaRecordAndStoreOut try rollback");
|
|
|
|
|
ex.printStackTrace();
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
log.error(e, "generaRecordAndStoreOut catch rollback");
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
throw e;
|
|
|
|
|
}
|
|
|
|
|
throw ex;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
log.write("9999", "End generaRecordAndStoreOut");
|
|
|
|
|
//ritorna la lista
|
|
|
|
|
return listSaldinettiOut;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//TODO
|
|
|
|
|
private void generaFileOut(List<GnpDwhe2eSaldinettiOut> results, String nomeFileOut, String pathFileDwhe2eOut, String nomeFileIn ){
|
|
|
|
|
log.write("9999", "Start generaFileOut");
|
|
|
|
|
// DAO out
|
|
|
|
|
GnpDwhe2eSaldinettiOutDAO saldinettiOutDAO =new GnpDwhe2eSaldinettiOutDAO();
|
|
|
|
|
|
|
|
|
|
//aggiungo yyyymmdd.csv al nome file
|
|
|
|
|
nomeFileOut += DateUtils.toString(new Date(), Resources.getDWHE2E_REPOSALDINETTI_DATA_FILENAME()) + Resources.getDWHE2E_REPOSALDINETTI_FILENAME_EXT();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
log.write("9999", "TROVATI " + results.size() + " RECORD DA INSERIRE NEL FILE PER DWHE2E SALDI NETTI - FILENAME: " + nomeFileOut);
|
|
|
|
|
@@ -383,13 +467,14 @@ public class Dwhe2eRepoSaldiNettiIn extends InternalSenderProcess implements Log
|
|
|
|
|
closeFile(true);
|
|
|
|
|
|
|
|
|
|
//aggiorno flag_elaborato a "Y"
|
|
|
|
|
saldinettiOutDAO.updateFlagElaborato(nomeFileIn, "Y");
|
|
|
|
|
saldinettiOutDAO.updateFlagElaborato(nomeFileOut, "Y");
|
|
|
|
|
|
|
|
|
|
} catch (Exception ex) {
|
|
|
|
|
log.write("0003", "ERRORE NEL RECUPERO DEI DATI PER MONITORAGGIO E2E " + ex.toString());
|
|
|
|
|
log.write("0003", "ERRORE NEL RECUPERO DEI DATI PER DWHE2E_REPOSALDINETTI E2E " + ex.toString());
|
|
|
|
|
// il file è già stato creato con l'header. Per questo elimino
|
|
|
|
|
deleteFile(pathFileDwhe2eOut + nomeFileOut, true);
|
|
|
|
|
}
|
|
|
|
|
log.write("9999", "End generaFileOut");
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|