maia/.svn/pristine/07/07fc27784d60c30fc149bbbcc25...

233 lines
7.8 KiB
Plaintext
Executable File

package com.fp.general.score.save;
import java.io.File;
import java.math.BigDecimal;
import java.sql.Date;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import com.fp.common.exception.ExceptionHandler;
import com.fp.common.helper.BeanManager;
import com.fp.common.logger.APPLogger;
import com.fp.dto.save.SaveRequest;
import com.fp.loan.exception.LoanException;
import com.fp.persistence.commondb.NestedSave;
import com.fp.persistence.commondb.PersistenceHelper;
import com.fp.persistence.commondb.PersistenceManager;
import com.fp.persistence.commondb.data.SessionData;
import com.fp.persistence.commondb.data.ThreadFacade;
import com.fp.persistence.pgeneral.score.TgeneScoreAdjustment;
import com.fp.persistence.pgeneral.score.TgeneScoreAdjustmentKey;
import com.fp.persistence.pgeneral.score.TgeneScoreFileIssues;
import com.fp.persistence.pgeneral.score.TgeneScoreFileIssuesKey;
import com.fp.persistence.pgeneral.score.TgeneScoreHeader;
import com.fp.persistence.pgeneral.score.TgeneScoreHeaderKey;
/**
* Clase que se encarga de procesar una linea de archivo con información de pagos de créditos procedente de una canal de
* recaudación
*
* @author Omar Villanueva
* @version 2.1
*/
public class UploadLineScoreThread extends Thread {
private final Integer company;
/* Arvhivo a procesar */
private final File file;
/* Institución financiera a la que pertenece el archivo */
// private final String bank;
/* Número de Operación */
private final String account;
/* Linea del archivo a procesar */
private final String line;
/* Número de linea que se esta procesando */
private final int sequence;
private final Timestamp realDate;
/* Fecha de pago de la cuota del crédito */
//private final Date paymentDate;
/* Fecha de calififación */
private final Date scoreDate;
private final SaveRequest sr;
/**
* Constructor
*
* @param company
* @param file
* @param account
* @param line
* @param sequence
* @param realDate
* @param scoreDate
*/
public UploadLineScoreThread(Integer company, File file, String account, String line, int sequence, Timestamp realDate, Date scoreDate, SaveRequest sr) {
super();
this.company = company;
this.file = file;
this.account = account;
this.line = line;
this.sequence = sequence;
this.realDate = realDate;
this.scoreDate = scoreDate;
this.sr=sr;
}
@Override
public void run() {
try {
SessionData s = new SessionData();
s.setCompany(company);
ThreadFacade.setSaveRequest(s);
PersistenceHelper.setEntityManager(PersistenceManager.getInstance().createEntityManagerLocal());
PersistenceHelper.beginNewTransaction();
/* Procesar la linea de archivo */
process();
PersistenceHelper.commitNewTransaction();
} catch (Exception e) {
PersistenceHelper.rollbackNewTransaction();
ExceptionHandler eh = new ExceptionHandler(e, "es");
APPLogger.getLogger().error("codigo ==>" + eh.getCode());
APPLogger.getLogger().error("user ==>" + eh.getUserMessage());
APPLogger.getLogger().error("technical ==>" + eh.getTechnicalMessage());
APPLogger.getLogger().error("stacktrace ==>" + eh.getStackTrace());
try {
/* Guarda en TLOANPAYMENTBANKISSUES información de las lineas con problemas */
LogUploadIssues(eh);
} catch (Exception e1) {
e1.printStackTrace();
}
} finally {
PersistenceHelper.closeSession();
}
}
/**
* Método que procesa la linea de archivo. Carga la data en la tabla TLOANPAYMENTBANKPROCESS
*
* @throws Exception
*/
private void process() throws Exception {
processSP();
processHeader();
}
/**
* Método que procesa las lineas de archivos
*
* @throws Exception
*/
private void processSP() throws Exception {
String data[] = line.split("\t");
//TGENESCOREADJUSTMENT
TgeneScoreAdjustmentKey key1 = new TgeneScoreAdjustmentKey();
key1.setAccount(data[1].trim());
key1.setCompanycode(company);
key1.setDateto(realDate);
key1.setScoredate(new Timestamp (getDateByFormat(data[0].trim(), "dd/MM/yyyy").getTime()));
TgeneScoreAdjustment tgsa = new TgeneScoreAdjustment();
tgsa.setPk(key1);
tgsa.setAdjustmenttype("F");
tgsa.setCurrencycode(data[5].trim());
tgsa.setDatefrom(realDate);
tgsa.setJournalid(sr.getJournalId());
tgsa.setManualprovisionpercent(new BigDecimal(data[6].trim()));
tgsa.setModulecode(data[2].trim());
tgsa.setProductcode(data[3].trim());
tgsa.setSubproductcode(data[4].trim());
tgsa.setFilename(file.getName());
tgsa.setStatus("C"); // ESTADO CARGADO
PersistenceHelper.save(tgsa);
}
/**
* Método que ingresa cabecera en tabla: TGENESCOREHEADER
*
* @throws Exception
*/
private void processHeader() throws Exception {
String data[] = line.split("\t");
TgeneScoreHeader scoreHeader = new TgeneScoreHeader();
TgeneScoreHeaderKey scoreHeaderKey = new TgeneScoreHeaderKey();
scoreHeaderKey.setCompanycode(company);
scoreHeaderKey.setScoredate(getDateByFormat(data[0].trim(), "dd/MM/yyyy"));
scoreHeader.setPk(scoreHeaderKey);
scoreHeader.setFilecode(300);
scoreHeader.setTabulated("N");
PersistenceHelper.saveOrUpdate(scoreHeader);
}
/**
* Método que devuelve la fecha según el formato requerido
*
* @param pStrDate
* @param pFormat
* @return
* @throws Exception
*/
private Date getDateByFormat(String pStrDate, String pFormat) throws Exception {
Date date = null;
try {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pFormat);
date = new Date(simpleDateFormat.parse(pStrDate).getTime());
} catch (Exception e) {
throw new LoanException("LOAN-0038", "FECHA INCORRECTAMENTE DEFINIDA EN TLOANPAYMENTACCOBANK PARA INSTITUCIÓN FINANCIERA: {0}", account);
}
return date;
}
/**
* Método que guarda un log de las lineas de archivos que no pueden ser procesadas en la tabla
* TGENESCOREFILEISSUES
*
* @param eh
* @throws Exception
* @throws Exception
*/
private void LogUploadIssues(ExceptionHandler eh) throws Exception {
TgeneScoreFileIssuesKey key1 = new TgeneScoreFileIssuesKey();
key1.setLinenumber(sequence);
key1.setAccount(account);
key1.setCompany(company);
key1.setFilename(file.getName());
key1.setUploaddate(realDate);
TgeneScoreFileIssues scoreIssue = new TgeneScoreFileIssues();
scoreIssue.setPk(key1);
scoreIssue.setLinecontent(line);
if (eh.getUserMessage().length() > 100) {
scoreIssue.setUsermessage(eh.getUserMessage().substring(0, 100));
} else {
scoreIssue.setUsermessage(eh.getUserMessage());
}
if (eh.getTechnicalMessage().length() > 500) {
scoreIssue.setTechnicalmessage(eh.getTechnicalMessage().substring(0, 500));
} else {
scoreIssue.setTechnicalmessage(eh.getTechnicalMessage());
}
new NestedSave(company, scoreIssue).start();
}
}