package com.fitbank.bpm.common; import com.fitbank.common.Helper; import com.fitbank.common.MessageIdGenerator; import com.fitbank.common.RequestData; import com.fitbank.common.exception.FitbankException; import com.fitbank.common.logger.FitbankLogger; import com.fitbank.dto.GeneralResponse; import com.fitbank.dto.management.Detail; import com.fitbank.dto.management.Field; import com.fitbank.dto.management.Record; import com.fitbank.dto.management.Table; public class ExecuteNonTransaction extends AbstractFitSend { /** * */ private static final long serialVersionUID = 1L; public Detail execute(Detail pDetail, String pSubsystem, String pTransaction, String pVersion) throws Exception { Detail originalDetail = pDetail.cloneMe(); try { this.setDetailHeader(pDetail, pSubsystem, pTransaction, pVersion); pDetail = this.send(pDetail); this.processLoanForBack(originalDetail); Helper.commitTransaction(); Helper.beginTransaction(); } catch (FitbankException e) { FitbankLogger.getLogger().warn(e, e); GeneralResponse gr = new GeneralResponse(e.getCode(), e.getMessage()); pDetail.findFieldByNameCreate("_BPM_FIT_RES").setValue(gr); throw e; } catch (Exception e) { FitbankLogger.getLogger().warn(e, e); throw e; } return pDetail; } /** * @param pDetail * @param pSubsystem * @param pTransaction * @param pVersion * @throws Exception */ private void setDetailHeader(Detail pDetail, String pSubsystem, String pTransaction, String pVersion) throws Exception { pDetail.setMessageid(MessageIdGenerator.getInstance().generateId("BPM")); pDetail.setSubsystem(pSubsystem); pDetail.setTransaction(pTransaction); pDetail.setVersion(pVersion); pDetail.setSessionid(RequestData.getDetail().getSessionid()); pDetail.setTerminal(RequestData.getDetail().getTerminal()); pDetail.setUser(RequestData.getDetail().getUser()); pDetail.findFieldByNameCreate("__BPM_CALL_").setValue("1"); for (Field f : pDetail.getFields()) { if ((f.getName().compareTo("RESPONSE") == 0) || (f.getName().indexOf("_USER_") == 0) || (f.getName().compareTo("_AUT_ESTADO") == 0)) { f.setValue(null); } } } /** * @param pDetail * @param pSubsystem * @param pTransaction * @throws Exception */ private void processLoanForBack(Detail pDetail) throws Exception { Table t = pDetail.findTableByName("TAUTORIZACIONFLUJO"); if (t == null) { return; } Record record = t.getRecords().iterator().next(); if (record != null) { if (record.findFieldByName("TSUBSISTEMATRANSACCIONES+CSUBSISTEMA") == null) { return; } String subsystem = (String) record.findFieldByName("TSUBSISTEMATRANSACCIONES+CSUBSISTEMA").getValue(); String transaction = (String) record.findFieldByName("TSUBSISTEMATRANSACCIONES+CTRANSACCION").getValue(); if ((subsystem.compareTo("06") == 0) && (transaction.compareTo("2200") == 0)) { this.setDetailHeader(pDetail, "05", "7700", "01"); pDetail.findFieldByNameCreate("SECUENCIASOLICITUD").setValue(1); pDetail.findFieldByNameCreate("CHECKBACKTOBCKARULES").setValue("1"); pDetail = this.send(pDetail); } } } }