273 lines
10 KiB
Plaintext
Executable File
273 lines
10 KiB
Plaintext
Executable File
package com.fp.bpm;
|
|
|
|
import java.math.BigDecimal;
|
|
import java.net.InetAddress;
|
|
import java.util.List;
|
|
|
|
import com.fp.base.persistence.util.helper.MessageManager;
|
|
import com.fp.common.helper.BeanManager;
|
|
import com.fp.common.logger.APPLogger;
|
|
import com.fp.dto.Request;
|
|
import com.fp.dto.Response;
|
|
import com.fp.dto.data.SaveData;
|
|
import com.fp.dto.helper.FileHelper;
|
|
import com.fp.persistence.commondb.NestedSave;
|
|
import com.fp.persistence.commondb.db.DataHelper;
|
|
import com.fp.persistence.commondb.helper.FormatDates;
|
|
import com.fp.persistence.pgeneral.date.TgeneAccountingDateBranch;
|
|
import com.fp.persistence.pgeneral.log.TgeneTransactionLog;
|
|
import com.fp.persistence.pgeneral.log.TgeneTransactionMessage;
|
|
import com.fp.persistence.pgeneral.trans.TgeneTransaction;
|
|
|
|
/**
|
|
* @author jorge
|
|
*
|
|
*/
|
|
public abstract class ActionExecutor {
|
|
|
|
/** Request de entrada de una transaccion */
|
|
protected Request request;
|
|
|
|
/** Objeto que contiene el log de una transaccion. */
|
|
protected TgeneTransactionLog log = null;
|
|
|
|
public abstract String execute(String pRequest, List<FileHelper> fileItem) throws Exception;
|
|
|
|
protected TgeneTransactionLog requestToLog() throws Exception {
|
|
InetAddress.getLocalHost().getAddress();
|
|
this.log = new TgeneTransactionLog();
|
|
this.log.setCompanycode(this.request.getCompany());
|
|
this.request.setJournalId(this.request.getJournalId());
|
|
// Fija parametros al objeto
|
|
this.log.setPk(this.request.getJournalId());
|
|
this.log.setTransactionmodule(this.request.getTransactionModule());
|
|
this.log.setTransactioncode(this.request.getTransactionCode());
|
|
this.log.setTransactionversion(this.request.getTransactionVersion());
|
|
// Fecha contable
|
|
if (this.request.getCompany() != null) {
|
|
TgeneAccountingDateBranch d = DataHelper.getInstance().getTgeneAccountingDateBranch(this.request.getCompany(), 0);
|
|
this.log.setAccountingdate(d.getAccountingdate());
|
|
this.request.put("accountingdate", d.getAccountingdate());
|
|
this.request.put("workingdate", d.getWorkingdate());
|
|
}
|
|
if ((this.request.getTransactionModule() != null) && (this.request.getTransactionCode() != null)
|
|
&& (this.request.getTransactionVersion() != null)) {
|
|
// Almacena en el request los datos generales de la definicion de una transaccion.
|
|
this.request.mbeans.put(
|
|
"tgenetransaction",
|
|
DataHelper.getInstance().getTgeneTransaction(this.request.getTransactionModule(), this.request.getTransactionCode(),
|
|
this.request.getTransactionVersion()));
|
|
}
|
|
this.log.setServer(this.getIp());
|
|
this.log.setRealdate(FormatDates.getInstance().getDataBaseTimestamp());
|
|
this.log.setBranchcode(this.request.getBranchCode());
|
|
this.log.setOfficecode(this.request.getOfficeCode());
|
|
this.log.setTerminalcode(this.request.getTerminalCode());
|
|
this.log.setUsercode(this.request.getUser());
|
|
this.log.setBrowser(this.request.getBrowser());
|
|
this.log.setOperativsystem(this.request.getOperativesystem());
|
|
this.request.mbeans.put("tgenetransactionlog", this.log);
|
|
return this.log;
|
|
}
|
|
|
|
/**
|
|
* Metodo que graba el log de transacciones cuando el resultado de ejecucion de la transaccion es ok.
|
|
*
|
|
* @param pTime Tiempo de ejecucion de la transaccion.
|
|
* @throws Exception
|
|
*/
|
|
public void saveLog(BigDecimal pTime, String pMethod) throws Exception {
|
|
// Si el valor del campo transaccion es null no grabar en ese caso se trata de obtener la lista de companias y
|
|
// no es la ejecucion de una trabsaccion
|
|
// o se trata de una lista de valores.
|
|
if (!this.isInsert()) {
|
|
return;
|
|
}
|
|
this.log.setDuration(pTime);
|
|
this.log.setResultcode(Response.RESPONSE_OK);
|
|
this.log.setUsermessage("OK");
|
|
this.log.setMethod(this.getMethod(pMethod));
|
|
this.setAditionaldata();
|
|
// PersistenceHelper.save(this.log);
|
|
// El log se graba en un hilo independiente.
|
|
new NestedSave(this.log.getCompanycode(), this.log).start();
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @throws Exception
|
|
*/
|
|
private void setAditionaldata() throws Exception {
|
|
// Fija datos del subject de la agenda, si no tiene un valor previo y el codigo de plantilla de mensaje es
|
|
// diferente de null.
|
|
this.log.setPersoncode(this.request.getLogperson());
|
|
this.setPerson();
|
|
this.log.setSolicitudenumber(this.request.getLogsolicitude()==null ?this.request.get("csolicitud")==null?this.request.getLogsolicitude():this.request.get("csolicitud").toString():this.request.getLogsolicitude());
|
|
this.setSolicitudnumber();
|
|
this.log.setAccount(this.request.getLogaccount());
|
|
this.setAccount();
|
|
|
|
if (this.request.mbeans.get("tgenetransaction") == null) {
|
|
return;
|
|
}
|
|
Integer messagecode = ((TgeneTransaction) this.request.mbeans.get("tgenetransaction")).getMessagecode();
|
|
if ((this.log.getAditionaldata() == null) && (messagecode != null)) {
|
|
String msg = MessageManager.getMessage(this.request);
|
|
if(msg.length() > 299){
|
|
this.log.setAditionaldata(msg.substring(0, 298));
|
|
}else{
|
|
this.log.setAditionaldata(msg);
|
|
}
|
|
if (this.request.getSubject() == null) {
|
|
this.request.setSubject(msg);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
private void setPerson() throws Exception {
|
|
if (this.log.getPersoncode() == null) {
|
|
try {
|
|
BeanManager.setBeanAttributeValue(this.log, "personcode",
|
|
SaveData.getPersoncode() == null ? null : Integer.valueOf(SaveData.getPersoncode()));
|
|
} catch (Exception e) {
|
|
APPLogger.getLogger().debug(e.getStackTrace()[0]);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void setAccount() throws Exception {
|
|
if (this.log.getAccount() == null) {
|
|
try {
|
|
BeanManager.setBeanAttributeValue(this.log, "account", SaveData.getAccount());
|
|
} catch (Exception e) {
|
|
// TODO: handle exception
|
|
}
|
|
}
|
|
}
|
|
|
|
private void setSolicitudnumber() throws Exception {
|
|
if (this.log.getSolicitudenumber() == null) {
|
|
try {
|
|
BeanManager.setBeanAttributeValue(this.log, "solicitudenumber", SaveData.getSolicitudenumber());
|
|
} catch (Exception e) {
|
|
// TODO: handle exception
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Metodo que almacena el log de auditoria, sin que este forme parte del tiempo de la transaccion.
|
|
*
|
|
* @param pTime Tiempo de ejecucion de la transaccion.
|
|
* @param pResultCode Codigo de resultado.
|
|
* @param pMessage Messaje de usuario.
|
|
* @throws Exception
|
|
*/
|
|
public void saveLogWithCommit(BigDecimal pTime, String pMethod, String pResultCode, String pMessage, String indata, String outdata)
|
|
throws Exception {
|
|
// Si el valor del campo transaccion es null no grabar en ese caso se trata de obtener la lista de companias y
|
|
// no es la ejecucion de una trabsaccion
|
|
// o se trata de una lista de valores.
|
|
if (!this.isInsert()) {
|
|
return;
|
|
}
|
|
|
|
this.log.setDuration(pTime);
|
|
this.log.setResultcode(pResultCode.length() > 20 ? pResultCode.substring(0, 19) : pResultCode);
|
|
this.log.setUsermessage(pMessage.length() > 200 ? pMessage.substring(0, 199) : pMessage);
|
|
this.log.setMethod(this.getMethod(pMethod));
|
|
// Mensajes de entrada y salida
|
|
TgeneTransactionMessage m = new TgeneTransactionMessage();
|
|
m.setPk(this.request.getJournalId());
|
|
m.setDatain(indata);
|
|
m.setDataout(outdata);
|
|
if(indata != null){
|
|
new NestedSave(this.log.getCompanycode(), this.log, m).start();
|
|
}else{
|
|
new NestedSave(this.log.getCompanycode(), this.log).start();
|
|
}
|
|
|
|
|
|
}
|
|
|
|
/**
|
|
* Verifica si almacena o no el log de auditoria.
|
|
*
|
|
* @return boolean
|
|
* @throws Exception
|
|
*/
|
|
private boolean isInsert() throws Exception {
|
|
if ((this.log == null) || (this.log.getTransactionmodule() == null) || (this.log.getTransactioncode() == null)) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Entrega las iniciales del metodo a almacenar en la tabla de log de transacciones.
|
|
*
|
|
* @param pMethod Nombre del metodo a ejecutar.
|
|
* @return String
|
|
* @throws Exception
|
|
*/
|
|
private String getMethod(String pMethod) throws Exception {
|
|
if (pMethod.compareTo("save") == 0) {
|
|
return "S";
|
|
}
|
|
if (pMethod.compareTo("query") == 0) {
|
|
return "Q";
|
|
}
|
|
if (pMethod.compareTo("logon") == 0) {
|
|
return "L";
|
|
}
|
|
return "";
|
|
}
|
|
|
|
/**
|
|
* Entrega la ip del servidor de aplicaciones.
|
|
*
|
|
* @return String
|
|
* @throws Exception
|
|
*/
|
|
private String getIp() throws Exception {
|
|
byte[] ip = InetAddress.getLocalHost().getAddress();
|
|
|
|
String sIPAddress = "";
|
|
|
|
for (int x = 0; x < ip.length; x++) {
|
|
if (x > 0) {
|
|
// A todos los numeros les anteponemos
|
|
// un punto menos al primero
|
|
sIPAddress += ".";
|
|
}
|
|
// Jugamos con los bytes y cambiamos el bit del signo
|
|
sIPAddress += ip[x] & 255;
|
|
}
|
|
return sIPAddress;
|
|
}
|
|
|
|
/**
|
|
* Entrega el valor de: request
|
|
*
|
|
* @return Request
|
|
*/
|
|
public Request getRequest() {
|
|
return this.request;
|
|
}
|
|
|
|
/**
|
|
* Fija el modulo, transaccion y version de origen.
|
|
*
|
|
* @throws Exception
|
|
*/
|
|
public void fillOriginalTransaction() throws Exception {
|
|
if (this.request != null) {
|
|
this.request.setOriginalTransactionModule(this.request.getTransactionModule());
|
|
this.request.setOriginalTransactionCode(this.request.getTransactionCode());
|
|
this.request.setOriginalTransactionVersion(this.request.getTransactionVersion());
|
|
}
|
|
}
|
|
}
|