a1
unknown
java
2 years ago
30 kB
5
Indexable
package ScanCA; import java.math.BigDecimal; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Vector; import jdbc.JDBCPool; import mq.QManager; import mqaccess.MQAccess; import org.springframework.jdbc.support.rowset.SqlRowSet; import uti.Encrypts; import uti.Func; import uti.Para; import uti.SIBSRLA_NEW; import uti.SIBS_NEW; import uti.SendEmail; import com.ibm.broker.javacompute.MbJavaComputeNode; import com.ibm.broker.plugin.MbElement; import com.ibm.broker.plugin.MbException; import com.ibm.broker.plugin.MbMessage; import com.ibm.broker.plugin.MbMessageAssembly; import com.ibm.broker.plugin.MbOutputTerminal; import com.ibm.broker.plugin.MbXMLNSC; import com.ibm.mq.MQMessage; import com.ibm.mq.MQPutMessageOptions; import com.ibm.mq.MQQueue; import com.ibm.mq.MQQueueManager; import dto.TMTranDTO; public class New1_ScanCA_JavaCompute extends MbJavaComputeNode { // luu giao dich tmtran public static List<TMTranDTO>[] collectTMTransArr = null; // public static List<TMTranDTO> collectTMTrans= new Vector<TMTranDTO>(); public static boolean RequestStopAll = false;//<MSG><HDR><TABLE>STOP</TABLE></HDR></MSG> private static Map<String, Boolean> isMaskAcctNum; public static int threadNum = 1; public static boolean isArrayInitialized = false; public static Object arrayInitializedLock = new Object(); public static boolean logSMSEnable = false; //thulv hotfix MQAccess mqaccess = new MQAccess(); MQQueueManager mqmng = mqaccess.accessQMgr(Para.QueueManager); MQQueue mqIris = mqaccess.accessMQueue(mqmng, Para.QueueAutoMsgIRIS); MQQueue mqVietel = mqaccess.accessMQueue(mqmng, Para.QueueAutoMsgVietel); MQQueue mqVnpt = mqaccess.accessMQueue(mqmng, Para.QueueAutoMsgVNPT); MQQueue mq = mqaccess.accessMQueue(mqmng, Para.QueueAUTOMSGLOG); MQMessage msgQ = new MQMessage(); MQPutMessageOptions pmo = new MQPutMessageOptions(); public void onInitialize(){ Func.log(Para.fullPathLog + ".ca",Func.getTime() + " Flow_CA is started!"); try{ isMaskAcctNum = new HashMap<String, Boolean>(); isMaskAcctNum.put("9", false); isMaskAcctNum.put("10", false); String query = "select id, para2 from services where id in (9,10)"; JDBCPool.init(); SqlRowSet rs = JDBCPool.jdbcTemplate.queryForRowSet(query); while (rs.next()) { String serviceID = rs.getString("id"); String para2 = rs.getString("para2"); boolean isMask = !(" ".equals(para2) || "0".equals(para2) || para2 == null); isMaskAcctNum.put(serviceID, isMask); } try{ threadNum = Integer.parseInt(getUserDefinedAttribute("THREAD_GOP_TIN").toString()); }catch (Exception e) { } collectTMTransArr = new List[threadNum]; for (int i = 0; i < collectTMTransArr.length; i++) { // ArrayList<TMTranDTO> arrayList = new ArrayList<>(); // collectTMTransArr[i] = Collections.synchronizedList(arrayList); collectTMTransArr[i] = new Vector<TMTranDTO>(); } try{ SIBSRLA_NEW.MAX_CONN_POOL_SIZE = Integer.parseInt(getUserDefinedAttribute("CONN_POOL_SIZE").toString()); }catch (Exception e) { } try{ SIBSRLA_NEW.MAX_CONN_LIFE_TIME_IN_MINUTES = Long.parseLong(getUserDefinedAttribute("CONN_LIFE_MINUTES").toString()); }catch (Exception e) { } try{ SIBSRLA_NEW.SIBS_HOST = getUserDefinedAttribute("SIBS_HOST").toString(); }catch (Exception e) { } try{ SIBSRLA_NEW.SIBS_USER = getUserDefinedAttribute("SIBS_USER").toString(); }catch (Exception e) { } try{ SIBSRLA_NEW.SIBS_PASSWORD = getUserDefinedAttribute("SIBS_PASSWORD").toString(); }catch (Exception e) { } try{ String LOG_SMS_ENABLE = getUserDefinedAttribute("LOG_SMS_ENABLE").toString(); if ("1".equals(LOG_SMS_ENABLE)){ logSMSEnable = true; } }catch (Exception e) { } } finally{ synchronized (New1_ScanCA_JavaCompute.arrayInitializedLock) { isArrayInitialized = true; arrayInitializedLock.notifyAll(); Func.log(Para.fullPathLog + ".ca"," Flow_CA Initialized!"); } } } public void evaluate(MbMessageAssembly assembly) throws MbException { //long d = System.currentTimeMillis(); try { //Func.log(Para.fullPathLog + ".ca","begin:"); MbOutputTerminal out = getOutputTerminal("out"); MbOutputTerminal alt = getOutputTerminal("alternate"); MbElement rootElement= assembly.getMessage().getRootElement(); /* process */ String sOutMessage = null; String sTable = getHeader(rootElement, "TABLE"); if (sTable == null) return; if (sTable.toUpperCase().indexOf("TMTR24") > -1){ // du lieu tu TMTR24 (DU LIEU NIGHTMODE) processTMTran(rootElement, assembly, alt, "1"); return; } else if (sTable.toUpperCase().indexOf("TMTRAN") > -1){ // du lieu tu TMTRAN processTMTran(rootElement, assembly, alt, "0"); return; } else if (sTable.toUpperCase().indexOf("DDTRN2") > -1){ // du lieu tu DDTRN2 (các giao dịch tự động kiểu đổ lương) sOutMessage = processDDTRN2(rootElement, assembly, alt); } else if (sTable.toUpperCase().indexOf("STOP") > -1){ // request stop tien trinh gop tin nhan RequestStopAll = true; Func.log(Para.fullPathLog + ".ca","request Stop flow!"); return; } else if (sTable.toUpperCase().indexOf("XTABLEX") > -1){ // tao tin nhan tu bang tam gop tin nhan sOutMessage = CreateMessageFromXTABLEX(rootElement, assembly, alt); } if (sOutMessage == null) return; sOutMessage = Func.TrimMessage(sOutMessage); String[] sOutArr = sOutMessage.split("\\~"); /* end*/ // long ttt = System.currentTimeMillis(); //thulv hot fix tach queue try { for(String outMsg : sOutArr){ // if(outMsg.contains(Para.portVietel)){ // // outMsg="<MSG>"+outMsg+"</MSG>"; // msgQ.clearMessage(); // msgQ.writeString(outMsg); // mqVietel.put(msgQ, pmo); // mq.put(msgQ, pmo); // // }else if(outMsg.contains(Para.portVNPT)){ // // outMsg="<MSG>"+outMsg+"</MSG>"; // msgQ.clearMessage(); // msgQ.writeString(outMsg); // mqVnpt.put(msgQ, pmo); // mq.put(msgQ, pmo); // // // }else if(outMsg.contains(Para.portIRIS)){ outMsg="<MSG>"+outMsg+"</MSG>"; msgQ.clearMessage(); msgQ.writeString(outMsg); mqIris.put(msgQ, pmo); mq.put(msgQ, pmo); }else{ MbMessage outMessage = new MbMessage(); MbMessageAssembly outAssembly = new MbMessageAssembly(assembly, outMessage); MbElement outRoot = outMessage.getRootElement().createElementAsLastChild("XMLNSC"); outRoot.createElementAsLastChild(MbElement.TYPE_NAME, "MSG", outMsg); //outMessage.finalizeMessage(MbMessage.FINALIZE_NONE); if (outAssembly != null){ out.propagate(outAssembly); //outAssembly.getMessage().clearMessage(); } } } } catch (Exception e) { Func.log(Para.fullPathLog + ".ca2", "Khong day duoc msg ra Queue:" + e.toString()); } // Func.log(Para.fullPathLog + ".ca","_timePropagate=" + (System.currentTimeMillis() - ttt)); } catch (Exception e) { Func.log(Para.fullPathLog + ".ca","evaluate_error=" + e.toString()); } finally { //Func.log(Para.fullPathLog + ".ca","_evaluate=" + (System.currentTimeMillis() - d)); } } // tao tin nhan tu bang XTABLEX: da gop tin nhan private String CreateMessageFromXTABLEX(MbElement rootElement, MbMessageAssembly assembly, MbOutputTerminal alt) { // JDBCPool.jdbcTemplate.execute("insert into CA2 values (sysdate)"); // long tAll = System.currentTimeMillis(); List<String> columns = new Vector<String>(); List<String> values = new Vector<String>(); String sStat = getData(rootElement, "TMTXSTAT"); if (sStat != null) sStat = sStat.trim(); String sAccNo = getData(rootElement, "TMACCTNO"); String sAmt = getData(rootElement, "TMTXAMT"); String sCurr = getData(rootElement, "TMGLCUR"); if (sCurr != null) sCurr = sCurr.trim(); else sCurr = ""; String sDorc = getData(rootElement, "TMDORC"); if (sDorc != null) sDorc = sDorc.trim(); else sDorc = ""; String sDate = getData(rootElement, "TMENTDT7"); String sTime = getData(rootElement, "TMTIMENT"); String sTmapptype = getData(rootElement, "TMAPPTYPE"); String sTMTXCD= getData(rootElement, "TMTXCD"); String sEFTH = getData(rootElement, "TMEFTH"); String sHasFee= getData(rootElement, "HASFEE"); String sFee= getData(rootElement, "FEE"); String sFeeDorc= getData(rootElement, "FEEDORC"); columns.add("TMTXSTAT"); columns.add("TMACCTNO"); columns.add("TMTXAMT"); columns.add("TMGLCUR"); columns.add("TMDORC"); columns.add("TMENTDT7"); columns.add("TMTIMENT"); columns.add("TMAPPTYPE"); columns.add("TMEFTH"); columns.add("HASFEE"); columns.add("FEE"); columns.add("FEEDORC"); columns.add("TMTXCD"); values.add(sStat); values.add(sAccNo); values.add(sAmt); values.add(sCurr); values.add(sDorc); values.add(sDate); values.add(sTime); values.add(sTmapptype); values.add(sEFTH); if (sEFTH != null) sEFTH = sEFTH.trim(); else sEFTH = ""; values.add(sHasFee); values.add(sFee); values.add(sFeeDorc); values.add(sTMTXCD); String cbal = null; String sService = "9"; StringBuilder sMsgBody = new StringBuilder(); String sChange = ""; String sGomPhiGD = ""; String sDorcForLimit = ""; // Func.log(Para.fullPathLog + ".ca",sAccNo + "|" + sAmt + "_timeSetdata=" + (System.currentTimeMillis() - tAll)); // long ttt1 = System.currentTimeMillis(); if ("1".equals(sHasFee)){ BigDecimal dAmt1= null; BigDecimal dAmt2= null; if (sStat.equals("CE")) { // Giao dịch đảo dAmt1= new BigDecimal((sDorc.equals("C")? "-" : "") + sAmt); dAmt2= new BigDecimal((sFeeDorc.equals("C")? "-" : "") + sFee); } else { dAmt1= new BigDecimal((sDorc.equals("C")? "" : "-") + sAmt); dAmt2= new BigDecimal((sFeeDorc.equals("C")? "" : "-") + sFee); } dAmt1 = dAmt1.add(dAmt2); sAmt = String.valueOf(dAmt1); if (dAmt1.compareTo(BigDecimal.ZERO)>0){ sChange = "+"; sService = "9"; sDorcForLimit = "C"; } else { sChange = ""; sService = "10"; sDorcForLimit = "D"; } //sGomPhiGD = "(gom phi GD)"; } else { if (sStat.equals("CE")) { if (sDorc.equals("C")) sChange = "-"; else sChange = "+"; } else { if (sDorc.equals("C")) sChange = "+"; else sChange = "-"; } if (sDorc.equals("C")) sService = "9"; else sService = "10"; sDorcForLimit = sDorc; } // Func.log(Para.fullPathLog + ".ca",sAccNo + "|" + sAmt + "_timeBeforeCbal=" + (System.currentTimeMillis() - ttt1)); //get cbal: long d1 = System.currentTimeMillis(); try { int curTime = Func.getNumberTime(); if (Func.SWITCH_START <= curTime || curTime <= Func.SWITCH_END){ // get cbal by jdbc cbal = SIBS_NEW.getCbal(sAccNo); } else { // get cbal by record level access cbal = SIBSRLA_NEW.getCbal(sAccNo); if (cbal == null){ cbal = SIBSRLA_NEW.getCbal(sAccNo); } if (cbal == null){ if (!sDate.equals(Func.getJulianDate())){ cbal = SIBSRLA_NEW.getCbal2(sAccNo); } else { Func.logx(Para.fullPathLog + ".ca2","_tmtran: ko phat sinh trong ddmemo!"); cbal = null; } } } } catch (Exception e) { cbal = null; } long dcbal = (System.currentTimeMillis() - d1); if (dcbal > 100){ Func.logx(Para.fullPathLog + ".ca2","_cbal=" + dcbal); } // ttt1 = System.currentTimeMillis(); sMsgBody.append("TK"); if (isMaskAcctNum.get(sService)){ sMsgBody.append(sAccNo.substring(0, 3) + "xxx" + sAccNo.substring(sAccNo.length() - 4, sAccNo.length())); }else{ sMsgBody.append(sAccNo); } sMsgBody.append(" tai BIDV "); sMsgBody.append(sChange); sMsgBody.append(Func.formatCurrency(sAmt, sCurr)); sMsgBody.append(sCurr); sMsgBody.append(sGomPhiGD); sMsgBody.append(" vao "); sMsgBody.append(Func.formatForSMS(sTime, sDate)); if (cbal != null){ sMsgBody.append(". So du:"); sMsgBody.append(Func.formatCurrency(cbal, sCurr)); sMsgBody.append(sCurr); } else { Func.log(Para.fullPathLog + ".error","_tmtran_" + "ERROR: Khong lay duoc so du cua giao dich: " + sMsgBody); SendEmail.email("ERROR: Khong lay duoc so du cua giao dich: " + sMsgBody); } if (sEFTH != null && !sEFTH.equals("")){ sMsgBody.append(". ND: "); sMsgBody.append(sEFTH); } //test if ("1".equals(sHasFee)){ Func.logx(Para.fullPathLog + ".ca2",sService + "______co phi____:" + sMsgBody); } else { Func.logx(Para.fullPathLog + ".ca2",sService + "________________:" + sMsgBody); } int iServiceID = Integer.parseInt(sService); long d2 = System.currentTimeMillis(); if (logSMSEnable = true){ Func.logx(Para.fullPathLog + ".ca2","SIBS_HOST:" + SIBSRLA_NEW.SIBS_HOST + "|SIBS_USER:" + SIBSRLA_NEW.SIBS_USER + "|TMACCTNO:"+ sAccNo + "|TMACCTNO:"+ sAccNo + "|TMENTDT7:" + sDate + "|TMTIMENT:" + sTime + "|TMTXAMT:" + sAmt + "|SMS:" + sMsgBody); } //String sOutMessage = JDBCPool.createMessage(sMsgBody, iServiceID, null, sAccNo, null); //List<String> result = JDBCPool.createMsgCA_TMTran_New(sAccNo, sAmt, sMsgBody.toString(), sTmapptype,sDorcForLimit, iServiceID); List<String> result = JDBCPool.createMsgCA_TMTran_New_V2( sAccNo, sAmt, sMsgBody.toString(), sTmapptype,sDorcForLimit, iServiceID, sDate, sCurr); long d2x = System.currentTimeMillis() - d2; if (d2x > 5000){ Func.logx(Para.fullPathLog + ".ca2",sAccNo + "|" + sAmt + "_ora=" + d2x); } // ttt1 = System.currentTimeMillis(); String sOutMessage = null; String resultCode = null; if (result != null){ resultCode = result.get(0); sOutMessage = result.get(1); } if (resultCode.equals("3")){ Func.logx(Para.fullPathLog + ".ca2", sAccNo + "|" + sAmt + "_tmtran:Gd chua du han muc!"); return null; } if (sOutMessage == null ){ try { SentToQueue(assembly, alt, "XTABLEX", "", columns, values); } catch (Exception e) { Func.logx(Para.fullPathLog + ".ca2","Khong day duoc msg ra QueueCDCCATRANSLOG:" + e.toString()); } return null; } else { if (cbal==null) { Func.log(Para.fullPathLog + "_error.sodu","_tmtran_" + "ERROR: Khong lay duoc so du cua giao dich: " + sOutMessage); } } // Func.log(Para.fullPathLog + ".ca",sAccNo + "|" + sAmt + "_timeAFterOra=" + (System.currentTimeMillis() - ttt1)); // Func.log(Para.fullPathLog + ".ca",sAccNo + "|" + sAmt + "_timeScanCa=" + (System.currentTimeMillis() - tAll)); return sOutMessage; } public void onDelete(){ // SIBSRLA.closeConnection(); SIBSRLA_NEW.shutdownAS400ConnectionPool(); SIBS_NEW.shutdownAS400JDBCConnectionPool(); JDBCPool.destroy(); Func.log(Para.fullPathLog + ".ca"," Flow_CA has been stopped!"); } /* * 0: ok ko phai lam gi tiep; 1: dua message vao queue backup; */ private int processTMTran(MbElement rootElement, MbMessageAssembly assembly, MbOutputTerminal alt, String isNightMode) { List<String> columns = new Vector<String>(); List<String> values = new Vector<String>(); String sAct = getHeader(rootElement, "ACT"); String sStat = getData(rootElement, "TMTXSTAT"); String sAccNo = getData(rootElement, "TMACCTNO"); String sAmt = getData(rootElement, "TMTXAMT"); String sCurr = getData(rootElement, "TMGLCUR"); String sDorc = getData(rootElement, "TMDORC"); String sDate = getData(rootElement, "TMENTDT7"); String sTime = getData(rootElement, "TMTIMENT"); String sSeq = getData(rootElement, "TMTXSEQ"); String sTellID = getData(rootElement, "TMTELLID"); String sBrn = getData(rootElement, "TMSRVBRN"); String sTmsseq = getData(rootElement, "TMSSEQ"); String sTmapptype = getData(rootElement, "TMAPPTYPE"); String sTMTXCD= getData(rootElement, "TMTXCD"); String sEFTH = Func.getRemark(getData(rootElement, "TMEFTH"),sTMTXCD); String sTMTLMNE= getData(rootElement, "TMTLXMNE"); String sTMHOSTTXCD= getData(rootElement, "TMHOSTTXCD"); String sTMHAFFT= getData(rootElement, "TMHAFFT"); columns.add("TMTXSTAT"); columns.add("TMACCTNO"); columns.add("TMTXAMT"); columns.add("TMGLCUR"); columns.add("TMDORC"); columns.add("TMENTDT7"); columns.add("TMTIMENT"); columns.add("TMTXSEQ"); columns.add("TMTELLID"); columns.add("TMSRVBRN"); columns.add("TMSSEQ"); columns.add("TMAPPTYPE"); columns.add("TMEFTH"); columns.add("TMTLXMNE"); columns.add("TMHOSTTXCD"); columns.add("TMHAFFT"); columns.add("TMTXCD"); values.add(sStat); values.add(sAccNo); values.add(sAmt); values.add(sCurr); values.add(sDorc); values.add(sDate); values.add(sTime); values.add(sSeq); values.add(sTellID); values.add(sBrn); values.add(sTmsseq); values.add(sTmapptype); values.add(sEFTH); values.add(sTMTLMNE); values.add(sTMHOSTTXCD); values.add(sTMHAFFT); values.add(sTMTXCD); if (!validateTMTran(sStat, sAccNo, sAmt, sCurr, sDorc, sDate, sTime, sSeq, sTellID, sBrn, sTmsseq, sEFTH)){ Func.log(Para.fullPathLog + ".ca","tmtran:validate: fail!"); return 0; } //long d2 = System.currentTimeMillis(); Func.log(Para.fullPathLog + ".ca","_tmtran=" + sStat + "#" +sAccNo + "#" +sAmt + "#" +sCurr + "#" +sDorc + "#" +sDate + "#" +sTime + "#" +sSeq + "#" +sTellID + "#" +sBrn + "#" +sTmsseq + "#" +sTmapptype + "#" +sEFTH + "#" +sTMTLMNE + "#" +sTMHOSTTXCD + "#" +sTMHAFFT + "#" +sTMTXCD); List<String> result = JDBCPool.VerifyMsgCA_TMTran(sAct, sStat, sAccNo, sAmt, sCurr, sDorc, sDate, sTime, sSeq, sTellID, sBrn, sTmsseq, sEFTH, sTmapptype, sTMTLMNE, sTMHOSTTXCD, sTMHAFFT, sTMTXCD, isNightMode); //long d2x = System.currentTimeMillis() - d2; //Func.log(Para.fullPathLog + ".ca","_ora=" + d2x); //String sOutMessage = null; String resultCode = null; if (result != null){ resultCode = result.get(0); //sOutMessage = result.get(1); } if (result == null || resultCode == null){ try { Func.log(Para.fullPathLog + ".error","Loi khi goi procedure:" + result + resultCode + "_tmtran=" + sStat + "#" +sAccNo + "#" +sAmt + "#" +sCurr + "#" +sDorc + "#" +sDate + "#" +sTime + "#" +sSeq + "#" +sTellID + "#" +sBrn + "#" +sTmsseq + "#" +sTmapptype + "#" +sEFTH + "#" +sTMTLMNE + "#" +sTMHOSTTXCD + "#" +sTMHAFFT + "#" +sTMTXCD); SentToQueue(assembly, alt, "TMTRAN",sAct, columns, values); } catch (Exception e) { Func.log(Para.fullPathLog + ".ca","Khong day duoc msg ra QueueCDCCATRANSLOG:" + e.toString()); } Func.log(Para.fullPathLog + ".ca","_tmtran has error, check stderr:Tai khoan " + sAccNo + "|" + sDorc + "|" +resultCode); return 0; } Func.log(Para.fullPathLog + ".ca","_tmtran resultCode=" + result.get(0)); if (result.get(0).equals("1")){ Func.log(Para.fullPathLog + ".ca",sAccNo + "|" + sDorc +"_tmtran: chua dkdv!"); return 0; } if (result.get(0).equals("2")){ Func.log(Para.fullPathLog + ".ca",sAccNo + "|" + sDorc +"_tmtran:Gd ton tai!"); return 0; } if (result.get(0).equals("3")){ Func.log(Para.fullPathLog + ".ca",sAccNo + "|" + sAmt +"_tmtran:Gd chua du han muc!"); return 0; } if (result.get(0).equals("4")){ Func.log(Para.fullPathLog + ".ca",sAccNo + "|" + sTellID +"_tmtran:Gd duoc khai bao ngat!"); return 0; } if (!New1_ScanCA_JavaCompute.RequestStopAll){ TMTranDTO dto = new TMTranDTO(sAct, sStat, sAccNo, sAmt, sCurr, sDorc, sDate, sTime, sSeq, sTellID, sBrn, sTmsseq, sEFTH, sTmapptype, sTMTLMNE, sTMHOSTTXCD, sTMHAFFT, sTMTXCD, isNightMode); // kiem tra neu trong bang tam co qua nhieu gd thi phai dung lai, tranh tran bo nho // if (collectTMTrans.size() >= TMTranDTO.MAX_TRANS){ if (isFullTransArray()){ RequestStopAll = true; // Func.log(Para.fullPathLog + ".error", "Loi collectTMTrans.size() >= TMTranDTO.MAX_TRANS:" + String.valueOf(collectTMTrans.size())); Func.log(Para.fullPathLog + ".error", "Loi collectTMTrans.size() >= TMTranDTO.MAX_TRANS"); SentToQueue(assembly, alt, "TMTRAN",sAct, columns, values); return 1;//dua vao queue tam } // them giao dich vao bang // collectTMTrans.add(dto); long t = System.currentTimeMillis(); String hash = Encrypts.sha256(dto.getPartitionKey() + "BSMS"); // Func.log(Para.fullPathLog + ".ca", "_time hash:" + (System.currentTimeMillis() - t)); t = System.currentTimeMillis(); int mod = Math.abs(hash.hashCode()) % threadNum; // Func.log(Para.fullPathLog + ".ca", "_time mod:" + (System.currentTimeMillis() - t)); t = System.currentTimeMillis(); collectTMTransArr[mod].add(dto); // Func.log(Para.fullPathLog + ".ca", "_time add:" + (System.currentTimeMillis() - t)); } else { Func.log(Para.fullPathLog + ".error", "RequestStopAll=true! HAY STOP, START LAI ScanCA_1"); SentToQueue(assembly, alt, "TMTRAN",sAct, columns, values); return 1;//dua vao queue tam } return 0; } private boolean isFullTransArray(){ for (int i = 0; i < collectTMTransArr.length; i++){ if (collectTMTransArr[i] != null && collectTMTransArr[i].size() > TMTranDTO.MAX_TRANS){ return true; } } return false; } private String processDDTRN2(MbElement rootElement, MbMessageAssembly assembly, MbOutputTerminal alt) { List<String> columns = new Vector<String>(); List<String> values = new Vector<String>(); String sAct = getHeader(rootElement, "ACT"); String sTRSTAT = getData(rootElement, "TRSTAT"); String sBATCH = getData(rootElement, "BATCH"); String sSEQ = getData(rootElement, "SEQ"); String sTRACCT = getData(rootElement, "TRACCT"); String sTRATYP = getData(rootElement, "TRATYP"); String sTRBR = getData(rootElement, "TRBR"); String sDORC = getData(rootElement, "DORC"); String sTRANCD = getData(rootElement, "TRANCD"); String sAMT = getData(rootElement, "AMT"); String sTRCTYP = getData(rootElement, "TRCTYP"); String sTRDATE = getData(rootElement, "TRDATE"); String sTRTIME = getData(rootElement, "TRTIME"); String sTRUSER = getData(rootElement, "TRUSER"); String sEFTACC = getData(rootElement, "EFTACC"); String sTREFTH = Func.getRemark(getData(rootElement, "TREFTH"),sTRANCD); String sTRJOBN = getData(rootElement, "TRJOBN"); columns.add("TRSTAT"); columns.add("BATCH"); columns.add("SEQ"); columns.add("TRACCT"); columns.add("TRATYP"); columns.add("TRBR"); columns.add("DORC"); columns.add("TRANCD"); columns.add("AMT"); columns.add("TRCTYP"); columns.add("TRDATE"); columns.add("TRTIME"); columns.add("TRUSER"); columns.add("EFTACC"); columns.add("TREFTH"); columns.add("TRJOBN"); values.add(sTRSTAT); values.add(sBATCH); values.add(sSEQ); values.add(sTRACCT); values.add(sTRATYP); values.add(sTRBR); values.add(sDORC); values.add(sTRANCD); values.add(sAMT); values.add(sTRCTYP); values.add(sTRDATE); values.add(sTRTIME); values.add(sTRUSER); values.add(sEFTACC); values.add(sTREFTH); values.add(sTRJOBN); if (!validateDDTrn2(sTRSTAT, sBATCH, sSEQ, sTRACCT, sTRATYP, sTRBR, sDORC, sTRANCD, sAMT, sTRCTYP, sTRDATE, sTRTIME, sTRJOBN)){ Func.log(Para.fullPathLog + ".ca","ddtrn2:validate: fail!"); return null; } long d2 = System.currentTimeMillis(); List<String> result = JDBCPool.createMsgCA_DDTrn2(sAct, sTRSTAT, sBATCH, sSEQ, sTRACCT, sTRATYP, sTRBR, sDORC, sTRANCD, sAMT, sTRCTYP, sTRDATE, sTRTIME, sTRUSER, sEFTACC, sTREFTH, sTRJOBN); long d2x = System.currentTimeMillis() - d2; if (d2x > 50){ Func.log(Para.fullPathLog + ".ca","_ora=" + d2x); } String sOutMessage = null; String resultCode = null; if (result != null){ resultCode = result.get(0); sOutMessage = result.get(1); } if (result == null || resultCode == null || (resultCode.equals("0") && sOutMessage == null )){ SentToQueue(assembly, alt, "DDTRN2",sAct, columns, values); Func.log(Para.fullPathLog + ".ca","_ddtrn2 has error, check stderr:Tai khoan " + sTRACCT + "|" + sDORC + "|" +resultCode); return null; } if (resultCode.equals("1")){ //Func.log(Para.fullPathLog + ".ca","_ddtrn2: chua dkdv!"); return null; } if (resultCode.equals("2")){ Func.log(Para.fullPathLog + ".ca","_ddtrn2:Gd ton tai!"); return null; } if (resultCode.equals("3")){ Func.log(Para.fullPathLog + ".ca","_ddtrn2:Gd chua du han muc!"); return null; } if (resultCode.equals("4")){ Func.log(Para.fullPathLog + ".ca","_ddtrn2:Gd batch!"); return null; } //get cbal: //long d1 = System.currentTimeMillis(); try { String cbal = null; int curTime = Func.getNumberTime(); if (Func.SWITCH_START <= curTime || curTime <= Func.SWITCH_END ){ cbal = SIBS_NEW.getCbal(sTRACCT); } else { cbal = SIBSRLA_NEW.getCbal(sTRACCT); if (cbal == null){ cbal = SIBSRLA_NEW.getCbal(sTRACCT); } if (cbal == null){ if (!sTRDATE.equals(Func.getJulianDate())){ cbal = SIBSRLA_NEW.getCbal2(sTRACCT); } else { Func.log(Para.fullPathLog + ".ca","_ddtrn2: ko phat sinh trong ddmemo!"); cbal = null; } } } if (cbal != null){ sOutMessage = sOutMessage.replaceFirst( Func.CBALFLAG, ";So du:" + Func.formatCurrency(cbal, sTRCTYP) + sTRCTYP.trim()); } else { Func.log(Para.fullPathLog + ".error","_ddtrn2_" + "ERROR: Khong lay duoc so du cua giao dich: " + sAct + "#" + sTRSTAT + "#" + sBATCH + "#" + sSEQ + "#" + sTRACCT + "#" + sTRATYP + "#" + sTRBR + "#" + sDORC + "#" + sTRANCD + "#" + sAMT + "#" + sTRCTYP + "#" + sTRDATE + "#" + sTRTIME + "#" + sTRUSER + "#" + sEFTACC + "#" + sTREFTH + "#" + sTRJOBN); SendEmail.email("ERROR: Khong lay duoc so du cua giao dich: " + sAct + "#" + sTRSTAT + "#" + sBATCH + "#" + sSEQ + "#" + sTRACCT + "#" + sTRATYP + "#" + sTRBR + "#" + sDORC + "#" + sTRANCD + "#" + sAMT + "#" + sTRCTYP + "#" + sTRDATE + "#" + sTRTIME + "#" + sTRUSER + "#" + sEFTACC + "#" + sTREFTH + "#" + sTRJOBN); Func.log(Para.fullPathLog + "_error.sodu","_ddtrn2_" + "ERROR: Khong lay duoc so du cua giao dich: " + sOutMessage); sOutMessage = sOutMessage.replaceFirst(Func.CBALFLAG, ""); } } catch (Exception e) { Func.log(Para.fullPathLog + ".error","_ddtrn2_" + "ERROR: Khong lay duoc so du cua giao dich: " + sAct + "#" + sTRSTAT + "#" + sBATCH + "#" + sSEQ + "#" + sTRACCT + "#" + sTRATYP + "#" + sTRBR + "#" + sDORC + "#" + sTRANCD + "#" + sAMT + "#" + sTRCTYP + "#" + sTRDATE + "#" + sTRTIME + "#" + sTRUSER + "#" + sEFTACC + "#" + sTREFTH + "#" + sTRJOBN); SendEmail.email("ERROR: Khong lay duoc so du cua giao dich: " + sAct + "#" + sTRSTAT + "#" + sBATCH + "#" + sSEQ + "#" + sTRACCT + "#" + sTRATYP + "#" + sTRBR + "#" + sDORC + "#" + sTRANCD + "#" + sAMT + "#" + sTRCTYP + "#" + sTRDATE + "#" + sTRTIME + "#" + sTRUSER + "#" + sEFTACC + "#" + sTREFTH + "#" + sTRJOBN); sOutMessage = sOutMessage.replaceFirst(Func.CBALFLAG, ""); } //long dsibs = System.currentTimeMillis() - d1; //if (dsibs > 10){ Func.log(Para.fullPathLog + ".ca","_ddtrn2=" + (System.currentTimeMillis() -d2)); //} return sOutMessage; } private boolean validateDDTrn2(String strstat, String sbatch, String sseq, String stracct, String stratyp, String strbr, String sdorc, String strancd, String samt, String strctyp, String strdate, String strtime, String strjobn) { if (stracct == null || stracct.equals("") || sdorc == null || sdorc.equals("") || samt == null || samt.equals("")){ return false; } /*if (strjobn != null){ if (strjobn.trim().toUpperCase().equalsIgnoreCase("DDRUNC") || strjobn.trim().toUpperCase().equalsIgnoreCase("CDRUNC")){ return false; } }*/ return true; } private boolean validateTMTran(String sStat, String sAccNo, String sAmt, String sCurr, String sDorc, String sDate, String sTime, String sSeq, String sTellID, String sBrn, String sTmsseq, String sEFTH){ try { if (sAccNo == null || sAccNo.equals("") || sAmt == null || sAmt.equals("") || sDorc == null || sDorc.equals("") || sDate == null || sDate.equals("") || sSeq == null || sSeq.equals("") || sTellID == null || sTellID.equals("") ){ return false; } return true; } catch (Exception e) { return false; } } private String getHeader(MbElement rootElement, String tabName) { // try { // return rootElement.getFirstElementByPath("/XMLNSC/MSG/HDR/" + tabName).getValue().toString(); // } catch (Exception e) { // Func.log(Para.fullPathLog + ".ca","getHeader=" + e.toString()); // return null; // } return ScanCAUtils.getHeader(rootElement, tabName); } private String getData(MbElement rootElement, String tagName) { // try { // return rootElement.getFirstElementByPath("/XMLNSC/MSG/DATA/" + tagName).getValue().toString(); // } catch (Exception e) { // return null; // } return ScanCAUtils.getData(rootElement, tagName); } public static void SentToQueue(MbMessageAssembly assembly, MbOutputTerminal out, String table, String act, List<String> columns, List<String> values){ //MbOutputTerminal out = getOutputTerminal("out"); //MbOutputTerminal alt = getOutputTerminal("alternate"); try{ MbMessage outMessage = new MbMessage(); MbElement outBody = outMessage.getRootElement().createElementAsFirstChild("XMLNSC"); MbElement msg1 = outBody.createElementAsFirstChild(MbXMLNSC.FOLDER, "MSG", null); MbElement data = msg1.createElementAsFirstChild(MbXMLNSC.FOLDER, "DATA", null); for(int i=0; i< columns.size(); i++){ data.createElementAsLastChild(MbXMLNSC.FOLDER,columns.get(i),values.get(i)); } MbElement hdr = msg1.createElementAsFirstChild(MbXMLNSC.FOLDER, "HDR", null); hdr.createElementAsLastChild(MbXMLNSC.FOLDER,"TABLE",table); hdr.createElementAsLastChild(MbXMLNSC.FOLDER,"ACT",act); MbMessageAssembly outAssembly = new MbMessageAssembly(assembly, outMessage); out.propagate(outAssembly); //outMessage.finalizeMessage(MbMessage.FINALIZE_NONE); outMessage.clearMessage(); outMessage = null; outAssembly = null; } catch (Exception e){ System.err.println(e); System.out.println("SentToQueue err=" + e.toString()); } } }
Editor is loading...