Commit ad4e11fc by zhanghou

基本完成了940和950报文转化代码的编写

parent 0e6abdbd
...@@ -4,17 +4,10 @@ import com.prowidesoftware.brilliance.constants.Mx2MtConstants; ...@@ -4,17 +4,10 @@ import com.prowidesoftware.brilliance.constants.Mx2MtConstants;
import com.prowidesoftware.brilliance.exception.SwiftException; import com.prowidesoftware.brilliance.exception.SwiftException;
import com.prowidesoftware.brilliance.mx2mt.AbstractMx2MtFieldsGenerate; import com.prowidesoftware.brilliance.mx2mt.AbstractMx2MtFieldsGenerate;
import com.prowidesoftware.brilliance.util.StringUtil; import com.prowidesoftware.brilliance.util.StringUtil;
import com.prowidesoftware.swift.model.mx.MxCamt05300102;
import com.prowidesoftware.swift.model.mx.dic.AccountStatement2;
import com.prowidesoftware.swift.model.mx.dic.BankToCustomerStatementV02;
import com.prowidesoftware.swift.model.mx.dic.GroupHeader42;
import org.dom4j.Document; import org.dom4j.Document;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.math.BigDecimal;
import java.util.List;
/** /**
* <GrpHdr><MsgPgntn><PgNb> * <GrpHdr><MsgPgntn><PgNb>
* <Stmt><ElctrncSeqNb> * <Stmt><ElctrncSeqNb>
......
...@@ -37,18 +37,18 @@ public class Field60Generate extends AbstractMx2MtFieldsGenerate{ ...@@ -37,18 +37,18 @@ public class Field60Generate extends AbstractMx2MtFieldsGenerate{
String amt = ""; String amt = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT); Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String cd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Bal.Tp.CdOrPrtry.Cd"); String cd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Bal.Tp.CdOrPrtry.Cd");
if (BalanceType12Code.PRCD.equals(BalanceType12Code.valueOf(cd))) { if (BalanceType12Code.PRCD.value().equals(cd)) {
filed60Option = "F"; filed60Option = "F";
} else if (BalanceType12Code.ITBD.equals(BalanceType12Code.valueOf(cd))) { } else if (BalanceType12Code.ITBD.value().equals(cd)) {
filed60Option = "M"; filed60Option = "M";
} else { } else {
throw new SwiftException("ERROR", "cannot find filed60Option."); throw new SwiftException("ERROR", "cannot find filed60Option.");
} }
map.put("field60Option", filed60Option); map.put("field60Option", filed60Option);
String cdtDbtInd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Bal.CdtDbtInd"); String cdtDbtInd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Bal.CdtDbtInd");
if (CreditDebitCode.CRDT.equals(CreditDebitCode.valueOf(cdtDbtInd))) { if (CreditDebitCode.CRDT.value().equals(cdtDbtInd)) {
crdr = Mx2MtConstants.DRCRMARK_C; crdr = Mx2MtConstants.DRCRMARK_C;
} else if (CreditDebitCode.DBIT.equals(CreditDebitCode.valueOf(cdtDbtInd))) { } else if (CreditDebitCode.DBIT.value().equals(cdtDbtInd)) {
crdr = Mx2MtConstants.DRCRMARK_D; crdr = Mx2MtConstants.DRCRMARK_D;
} else { } else {
throw new SwiftException("ERROR", "cannot find filed60 D/C Mark."); throw new SwiftException("ERROR", "cannot find filed60 D/C Mark.");
......
...@@ -43,58 +43,67 @@ public class Field61ListGenerate extends AbstractMx2MtFieldsGenerate{ ...@@ -43,58 +43,67 @@ public class Field61ListGenerate extends AbstractMx2MtFieldsGenerate{
String ccy = ""; String ccy = "";
List<String> filed61List = new ArrayList<>(); List<String> filed61List = new ArrayList<>();
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT); Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String dt = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Ntry.ValDt.Dt"); int ntryCounts = getXmlNodeCounts(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Ntry");
String dt2 = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Ntry.BookgDt.Dt"); if(ntryCounts>0){
if(StringUtil.isNotEmpty(dt)){ for (int i = 0; i < ntryCounts; i++) {
XMLGregorianCalendar valueDateDt = DatatypeFactory.newInstance().newXMLGregorianCalendar(dt); String dt = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Ntry("+i+").ValDt.Dt");
valueDateStr = DateUtil.format(valueDateDt, "yyMMdd"); String dt2 = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Ntry("+i+").BookgDt.Dt");
} if(StringUtil.isNotEmpty(dt)){
if(StringUtil.isNotEmpty(dt2)){ XMLGregorianCalendar valueDateDt = DatatypeFactory.newInstance().newXMLGregorianCalendar(dt);
XMLGregorianCalendar entryDateDt = DatatypeFactory.newInstance().newXMLGregorianCalendar(dt); valueDateStr = DateUtil.format(valueDateDt, "yyMMdd");
entryDateStr = DateUtil.format(entryDateDt, "yyMMdd"); }
} if(StringUtil.isNotEmpty(dt2)){
String cdtDbtInd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Ntry.CdtDbtInd"); XMLGregorianCalendar entryDateDt = DatatypeFactory.newInstance().newXMLGregorianCalendar(dt);
String rvslInd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Ntry.RvslInd"); entryDateStr = DateUtil.format(entryDateDt, "yyMMdd");
if (CreditDebitCode.CRDT.equals(CreditDebitCode.valueOf(cdtDbtInd))) { }
if (Boolean.TRUE.equals(Boolean.getBoolean(rvslInd))) { String cdtDbtInd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Ntry("+i+").CdtDbtInd");
drCrMark = Mx2MtConstants.DRCRMARK_RD; String rvslInd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Ntry("+i+").RvslInd");
} else { if (CreditDebitCode.CRDT.value().equals(cdtDbtInd)) {
drCrMark = Mx2MtConstants.DRCRMARK_C; if (Boolean.TRUE.equals(Boolean.getBoolean(rvslInd))) {
} drCrMark = Mx2MtConstants.DRCRMARK_RD;
} else if (CreditDebitCode.DBIT.equals(CreditDebitCode.valueOf(cdtDbtInd))) { } else {
if (Boolean.TRUE.equals(Boolean.getBoolean(rvslInd))) { drCrMark = Mx2MtConstants.DRCRMARK_C;
drCrMark = Mx2MtConstants.DRCRMARK_RC; }
} else { } else if (CreditDebitCode.DBIT.value().equals(cdtDbtInd)) {
drCrMark = Mx2MtConstants.DRCRMARK_D; if (Boolean.TRUE.equals(Boolean.getBoolean(rvslInd))) {
drCrMark = Mx2MtConstants.DRCRMARK_RC;
} else {
drCrMark = Mx2MtConstants.DRCRMARK_D;
}
} else {
throw new SwiftException("ERROR", "cannot find filed61 D/C Mark.");
}
String amtStr = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Ntry("+i+").Amt");
String ccyStr = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Ntry("+i+").Amt@Ccy");
if (StringUtil.isNotEmpty(amtStr) && StringUtil.isNotEmpty(ccyStr)) {
amt = NumberUtil.formatAmt(new BigDecimal(amtStr), ccyStr);
ccy = ccyStr;
}
String cd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Ntry("+i+").BkTxCd.Prtry.Cd");
String endToEndId = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Ntry("+i+").NtryDtls.TxDtls.Refs.EndToEndId");
String addtlTxInf = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Ntry("+i+").NtryDtls.TxDtls.AddtlTxInf");
String acctSvcrRef = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Ntry("+i+").AcctSvcrRef");
StringBuilder sb = new StringBuilder();
sb.append(valueDateStr)
.append(entryDateStr)
.append(drCrMark)
.append(ccy)
.append(amt)
.append(cd)
.append(endToEndId);
if (StringUtil.isNotEmpty(acctSvcrRef)) {
sb.append("//"+acctSvcrRef);
}
if (StringUtil.isNotEmpty(addtlTxInf)) {
sb.append(Mx2MtConstants.NEW_LINE+addtlTxInf);
}
String addtlNtryInf = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Ntry("+i+").AddtlNtryInf");
if(StringUtil.isNotEmpty(addtlNtryInf)){
sb.append(Mx2MtConstants.NEW_LINE).append(":86:").append(StringUtil.getStringByEnter(addtlNtryInf, 35, 6));
}
filed61List.add(sb.toString());
} }
} else {
throw new SwiftException("ERROR", "cannot find filed61 D/C Mark.");
}
String amtStr = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Ntry.Amt");
String ccyStr = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Ntry.Amt@Ccy");
if (StringUtil.isNotEmpty(amtStr) && StringUtil.isNotEmpty(ccyStr)) {
amt = NumberUtil.formatAmt(new BigDecimal(amtStr), ccyStr);
ccy = ccyStr;
}
String cd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Ntry.BkTxCd.Prtry.Cd");
String endToEndId = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Ntry.NtryDtls.TxDtls.Refs.EndToEndId");
String addtlTxInf = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Ntry.NtryDtls.TxDtls.AddtlTxInf");
String acctSvcrRef = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Ntry.AcctSvcrRef");
StringBuilder sb = new StringBuilder();
sb.append(valueDateStr)
.append(entryDateStr)
.append(drCrMark)
.append(ccy)
.append(amt)
.append(cd)
.append(endToEndId);
if (StringUtil.isNotEmpty(acctSvcrRef)) {
sb.append("//"+acctSvcrRef);
}
if (StringUtil.isNotEmpty(addtlTxInf)) {
sb.append(Mx2MtConstants.NEW_LINE+addtlTxInf);
} }
filed61List.add(sb.toString());
if (filed61List.size() > 0) { if (filed61List.size() > 0) {
map.put("field61List", filed61List); map.put("field61List", filed61List);
} }
......
...@@ -5,13 +5,16 @@ import com.prowidesoftware.brilliance.exception.SwiftException; ...@@ -5,13 +5,16 @@ import com.prowidesoftware.brilliance.exception.SwiftException;
import com.prowidesoftware.brilliance.mx2mt.AbstractMx2MtFieldsGenerate; import com.prowidesoftware.brilliance.mx2mt.AbstractMx2MtFieldsGenerate;
import com.prowidesoftware.brilliance.util.DateUtil; import com.prowidesoftware.brilliance.util.DateUtil;
import com.prowidesoftware.brilliance.util.NumberUtil; import com.prowidesoftware.brilliance.util.NumberUtil;
import com.prowidesoftware.swift.model.mx.MxCamt05300102; import com.prowidesoftware.brilliance.util.StringUtil;
import com.prowidesoftware.swift.model.mx.dic.*; import com.prowidesoftware.swift.model.mx.dic.BalanceType12Code;
import com.prowidesoftware.swift.model.mx.dic.CreditDebitCode;
import org.dom4j.Document;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List;
/** /**
* <Stmt><Bal>[i]<Tp><CdOrPrtry><Cd> * <Stmt><Bal>[i]<Tp><CdOrPrtry><Cd>
...@@ -27,54 +30,43 @@ public class Field62Generate extends AbstractMx2MtFieldsGenerate{ ...@@ -27,54 +30,43 @@ public class Field62Generate extends AbstractMx2MtFieldsGenerate{
@Override @Override
public void fieldsGenerate() throws SwiftException{ public void fieldsGenerate() throws SwiftException{
try { try {
MxCamt05300102 mxCamt05300102 = (MxCamt05300102)map.get(Mx2MtConstants.MX_OBJECT); Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
if (mxCamt05300102 == null || mxCamt05300102.getBkToCstmrStmt() == null) { int balCounts = getXmlNodeCounts(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Bal");
return; if(balCounts>=1){
} String filed62Option = "";
BankToCustomerStatementV02 bkToCstmrStmt = mxCamt05300102.getBkToCstmrStmt(); String cd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Bal(1).Tp.CdOrPrtry.Cd");
List<AccountStatement2> stmtList = bkToCstmrStmt.getStmt(); if (BalanceType12Code.CLBD.equals(BalanceType12Code.valueOf(cd))) {
if (stmtList != null && stmtList.size() > 0) { filed62Option = "F";
AccountStatement2 stmt = stmtList.get(0); } else if (BalanceType12Code.ITBD.equals(BalanceType12Code.valueOf(cd))) {
List<CashBalance3> balList = stmt.getBal(); filed62Option = "M";
if (balList != null && balList.size() >= 2) { } else {
CashBalance3 bal = balList.get(1); throw new SwiftException("ERROR", "cannot find filed62Option.");
String filed62Option = ""; }
if (bal != null && bal.getTp() != null map.put("field62Option", filed62Option);
&& bal.getTp().getCdOrPrtry() != null) { String cdtDbtInd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Bal(1).CdtDbtInd");
if (BalanceType12Code.CLBD.equals(bal.getTp().getCdOrPrtry().getCd())) { String crdr = "";
filed62Option = "F"; if (CreditDebitCode.CRDT.value().equals(cdtDbtInd)) {
} else if (BalanceType12Code.ITBD.equals(bal.getTp().getCdOrPrtry().getCd())) { crdr = Mx2MtConstants.DRCRMARK_C;
filed62Option = "M"; } else if (CreditDebitCode.DBIT.value().equals(cdtDbtInd)) {
} else { crdr = Mx2MtConstants.DRCRMARK_D;
throw new SwiftException("ERROR", "cannot find filed62Option."); } else {
} throw new SwiftException("ERROR", "cannot find filed60 D/C Mark.");
map.put("field62Option", filed62Option); }
} String dt = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Bal(1).Dt.Dt");
if (bal != null) { String dateStr = "";
String crdr = ""; if (StringUtil.isNotEmpty(dt)) {
if (CreditDebitCode.CRDT.equals(bal.getCdtDbtInd())) { XMLGregorianCalendar dateDt = DatatypeFactory.newInstance().newXMLGregorianCalendar(dt);
crdr = Mx2MtConstants.DRCRMARK_C; dateStr = DateUtil.format(dateDt, "yyMMdd");
} else if (CreditDebitCode.DBIT.equals(bal.getCdtDbtInd())) { }
crdr = Mx2MtConstants.DRCRMARK_D; String amtStr = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Bal(1).Amt");
} else { String ccyStr = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Bal(1).Amt@Ccy");
throw new SwiftException("ERROR", "cannot find filed60 D/C Mark."); String amt = "";
} String ccy = "";
String dateStr = ""; if (StringUtil.isNotEmpty(amtStr) && StringUtil.isNotEmpty(ccyStr)) {
if (bal.getDt() != null) { amt = NumberUtil.formatAmt(new BigDecimal(amtStr), ccyStr);
dateStr = DateUtil.format(bal.getDt().getDt(), "yyMMdd"); ccy = ccyStr;
}
String ccy = "";
String amtStr = "";
ActiveOrHistoricCurrencyAndAmount ccyAndAmt = bal.getAmt();
if (ccyAndAmt != null) {
ccy = ccyAndAmt.getCcy();
BigDecimal amt = ccyAndAmt.getValue();
amtStr = NumberUtil.formatAmt(amt, ccy);
}
map.put("field62", crdr+dateStr+ccy+amtStr);
}
} }
map.put("field62", crdr+dateStr+ccy+amt);
} }
} catch(Exception e) { } catch(Exception e) {
logger.error(e.getMessage()); logger.error(e.getMessage());
......
...@@ -5,13 +5,16 @@ import com.prowidesoftware.brilliance.exception.SwiftException; ...@@ -5,13 +5,16 @@ import com.prowidesoftware.brilliance.exception.SwiftException;
import com.prowidesoftware.brilliance.mx2mt.AbstractMx2MtFieldsGenerate; import com.prowidesoftware.brilliance.mx2mt.AbstractMx2MtFieldsGenerate;
import com.prowidesoftware.brilliance.util.DateUtil; import com.prowidesoftware.brilliance.util.DateUtil;
import com.prowidesoftware.brilliance.util.NumberUtil; import com.prowidesoftware.brilliance.util.NumberUtil;
import com.prowidesoftware.swift.model.mx.MxCamt05300102; import com.prowidesoftware.brilliance.util.StringUtil;
import com.prowidesoftware.swift.model.mx.dic.*; import com.prowidesoftware.swift.model.mx.dic.BalanceType12Code;
import com.prowidesoftware.swift.model.mx.dic.CreditDebitCode;
import org.dom4j.Document;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List;
/** /**
* <Stmt><Bal>[i]<Tp><CdOrPrtry><Cd> * <Stmt><Bal>[i]<Tp><CdOrPrtry><Cd>
...@@ -28,53 +31,41 @@ public class Field64Generate extends AbstractMx2MtFieldsGenerate{ ...@@ -28,53 +31,41 @@ public class Field64Generate extends AbstractMx2MtFieldsGenerate{
@Override @Override
public void fieldsGenerate() throws SwiftException{ public void fieldsGenerate() throws SwiftException{
try { try {
MxCamt05300102 mxCamt05300102 = (MxCamt05300102)map.get(Mx2MtConstants.MX_OBJECT); map.put("field64", "");
if (mxCamt05300102 == null || mxCamt05300102.getBkToCstmrStmt() == null) { Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
return; int balCounts = getXmlNodeCounts(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Bal");
} if(balCounts>0){
BankToCustomerStatementV02 bkToCstmrStmt = mxCamt05300102.getBkToCstmrStmt(); for (int i = 0; i < balCounts; i++) {
List<AccountStatement2> stmtList = bkToCstmrStmt.getStmt(); String cd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Bal("+i+").Tp.CdOrPrtry.Cd");
if (stmtList != null && stmtList.size() > 0) { if(BalanceType12Code.CLAV.value().equals(cd)){
AccountStatement2 stmt = stmtList.get(0); String cdtDbtInd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Bal("+i+").CdtDbtInd");
List<CashBalance3> balList = stmt.getBal(); String crdr = "";
CashBalance3 bal = null; if (CreditDebitCode.CRDT.value().equals(cdtDbtInd)) {
if (balList != null && balList.size() > 0) { crdr = Mx2MtConstants.DRCRMARK_C;
for (CashBalance3 tmpBal : balList) { } else if (CreditDebitCode.DBIT.value().equals(cdtDbtInd)) {
if (tmpBal != null crdr = Mx2MtConstants.DRCRMARK_D;
&& tmpBal.getTp() != null } else {
&& tmpBal.getTp().getCdOrPrtry() != null throw new SwiftException("ERROR", "cannot find filed60 D/C Mark.");
&& BalanceType12Code.CLAV.equals(tmpBal.getTp().getCdOrPrtry().getCd())) {
bal = tmpBal;
break;
} }
String dt = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Bal("+i+").Dt.Dt");
String dateStr = "";
if (StringUtil.isNotEmpty(dt)) {
XMLGregorianCalendar dateDt = DatatypeFactory.newInstance().newXMLGregorianCalendar(dt);
dateStr = DateUtil.format(dateDt, "yyMMdd");
}
String amtStr = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Bal("+i+").Amt");
String ccyStr = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Bal("+i+").Amt@Ccy");
String amt = "";
String ccy = "";
if (StringUtil.isNotEmpty(amtStr) && StringUtil.isNotEmpty(ccyStr)) {
amt = NumberUtil.formatAmt(new BigDecimal(amtStr), ccyStr);
ccy = ccyStr;
}
map.put("field64", crdr+dateStr+ccy+amt);
} }
} }
if (bal != null) { //exist 64 }else{
String crdr = ""; map.put("field64", " ");
if (CreditDebitCode.CRDT.equals(bal.getCdtDbtInd())) {
crdr = Mx2MtConstants.DRCRMARK_C;
} else if (CreditDebitCode.DBIT.equals(bal.getCdtDbtInd())) {
crdr = Mx2MtConstants.DRCRMARK_D;
} else {
throw new SwiftException("ERROR", "cannot find filed64 D/C Mark.");
}
String dateStr = "";
if (bal.getDt() != null) {
dateStr = DateUtil.format(bal.getDt().getDt(), "yyMMdd");
}
String ccy = "";
String amtStr = "";
ActiveOrHistoricCurrencyAndAmount ccyAndAmt = bal.getAmt();
if (ccyAndAmt != null) {
ccy = ccyAndAmt.getCcy();
BigDecimal amt = ccyAndAmt.getValue();
amtStr = NumberUtil.formatAmt(amt, ccy);
}
String filed64 = crdr+dateStr+ccy+amtStr;
map.put("field64", filed64);
} else {
map.put("field64", "");
}
} }
} catch(Exception e) { } catch(Exception e) {
logger.error(e.getMessage()); logger.error(e.getMessage());
......
...@@ -5,13 +5,16 @@ import com.prowidesoftware.brilliance.exception.SwiftException; ...@@ -5,13 +5,16 @@ import com.prowidesoftware.brilliance.exception.SwiftException;
import com.prowidesoftware.brilliance.mx2mt.AbstractMx2MtFieldsGenerate; import com.prowidesoftware.brilliance.mx2mt.AbstractMx2MtFieldsGenerate;
import com.prowidesoftware.brilliance.util.DateUtil; import com.prowidesoftware.brilliance.util.DateUtil;
import com.prowidesoftware.brilliance.util.NumberUtil; import com.prowidesoftware.brilliance.util.NumberUtil;
import com.prowidesoftware.swift.model.mx.MxCamt05300102; import com.prowidesoftware.brilliance.util.StringUtil;
import com.prowidesoftware.swift.model.mx.dic.*; import com.prowidesoftware.swift.model.mx.dic.BalanceType12Code;
import com.prowidesoftware.swift.model.mx.dic.CreditDebitCode;
import org.dom4j.Document;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List;
/** /**
* <Stmt><Bal>[i]<Tp><CdOrPrtry><Cd> * <Stmt><Bal>[i]<Tp><CdOrPrtry><Cd>
...@@ -28,51 +31,41 @@ public class Field65Generate extends AbstractMx2MtFieldsGenerate { ...@@ -28,51 +31,41 @@ public class Field65Generate extends AbstractMx2MtFieldsGenerate {
@Override @Override
public void fieldsGenerate() throws SwiftException{ public void fieldsGenerate() throws SwiftException{
try { try {
MxCamt05300102 mxCamt05300102 = (MxCamt05300102)map.get(Mx2MtConstants.MX_OBJECT); map.put("field65", "");
if (mxCamt05300102 == null || mxCamt05300102.getBkToCstmrStmt() == null) { Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
return; int balCounts = getXmlNodeCounts(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Bal");
} if(balCounts>0){
BankToCustomerStatementV02 bkToCstmrStmt = mxCamt05300102.getBkToCstmrStmt(); for (int i = 0; i < balCounts; i++) {
List<AccountStatement2> stmtList = bkToCstmrStmt.getStmt(); String cd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Bal("+i+").Tp.CdOrPrtry.Cd");
if (stmtList != null && stmtList.size() > 0) { if(BalanceType12Code.FWAV.equals(BalanceType12Code.valueOf(cd))){
AccountStatement2 stmt = stmtList.get(0); String cdtDbtInd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Bal("+i+").CdtDbtInd");
List<CashBalance3> balList = stmt.getBal(); String crdr = "";
CashBalance3 bal = null; if (CreditDebitCode.CRDT.value().equals(cdtDbtInd)) {
if (balList != null && balList.size() > 0) { crdr = Mx2MtConstants.DRCRMARK_C;
for (CashBalance3 tmpBal : balList) { } else if (CreditDebitCode.DBIT.value().equals(cdtDbtInd)) {
if (tmpBal != null crdr = Mx2MtConstants.DRCRMARK_D;
&& tmpBal.getTp() != null } else {
&& tmpBal.getTp().getCdOrPrtry() != null throw new SwiftException("ERROR", "cannot find filed60 D/C Mark.");
&& BalanceType12Code.FWAV.equals(tmpBal.getTp().getCdOrPrtry().getCd())) {
bal = tmpBal;
break;
} }
String dt = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Bal("+i+").Dt.Dt");
String dateStr = "";
if (StringUtil.isNotEmpty(dt)) {
XMLGregorianCalendar dateDt = DatatypeFactory.newInstance().newXMLGregorianCalendar(dt);
dateStr = DateUtil.format(dateDt, "yyMMdd");
}
String amtStr = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Bal("+i+").Amt");
String ccyStr = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Bal("+i+").Amt@Ccy");
String amt = "";
String ccy = "";
if (StringUtil.isNotEmpty(amtStr) && StringUtil.isNotEmpty(ccyStr)) {
amt = NumberUtil.formatAmt(new BigDecimal(amtStr), ccyStr);
ccy = ccyStr;
}
map.put("field65", crdr+dateStr+ccy+amt);
} }
} }
if (bal != null) { //exist 65 }else{
String crdr = ""; map.put("field65", "");
if (CreditDebitCode.CRDT.equals(bal.getCdtDbtInd())) {
crdr = Mx2MtConstants.DRCRMARK_C;
} else if (CreditDebitCode.DBIT.equals(bal.getCdtDbtInd())) {
crdr = Mx2MtConstants.DRCRMARK_D;
} else {
throw new SwiftException("ERROR", "cannot find filed65 D/C Mark.");
}
String dateStr = "";
if (bal.getDt() != null) {
dateStr = DateUtil.format(bal.getDt().getDt(), "yyMMdd");
}
String ccy = "";
String amtStr = "";
ActiveOrHistoricCurrencyAndAmount ccyAndAmt = bal.getAmt();
if (ccyAndAmt != null) {
ccy = ccyAndAmt.getCcy();
BigDecimal amt = ccyAndAmt.getValue();
amtStr = NumberUtil.formatAmt(amt, ccy);
}
String filed65 = crdr+dateStr+ccy+amtStr;
map.put("field65", filed65);
}
} }
} catch(Exception e) { } catch(Exception e) {
logger.error(e.getMessage()); logger.error(e.getMessage());
......
...@@ -4,15 +4,10 @@ import com.prowidesoftware.brilliance.constants.Mx2MtConstants; ...@@ -4,15 +4,10 @@ import com.prowidesoftware.brilliance.constants.Mx2MtConstants;
import com.prowidesoftware.brilliance.exception.SwiftException; import com.prowidesoftware.brilliance.exception.SwiftException;
import com.prowidesoftware.brilliance.mx2mt.AbstractMx2MtFieldsGenerate; import com.prowidesoftware.brilliance.mx2mt.AbstractMx2MtFieldsGenerate;
import com.prowidesoftware.brilliance.util.StringUtil; import com.prowidesoftware.brilliance.util.StringUtil;
import com.prowidesoftware.swift.model.mx.MxCamt05300102; import org.dom4j.Document;
import com.prowidesoftware.swift.model.mx.dic.AccountStatement2;
import com.prowidesoftware.swift.model.mx.dic.BankToCustomerStatementV02;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.List;
/** /**
*<Stmt><AddtlStmtInf> *<Stmt><AddtlStmtInf>
* *
...@@ -24,17 +19,12 @@ public class Field86Generate extends AbstractMx2MtFieldsGenerate { ...@@ -24,17 +19,12 @@ public class Field86Generate extends AbstractMx2MtFieldsGenerate {
@Override @Override
public void fieldsGenerate() throws SwiftException { public void fieldsGenerate() throws SwiftException {
try { try {
MxCamt05300102 mxCamt05300102 = (MxCamt05300102) map.get(Mx2MtConstants.MX_OBJECT); String addtlStmtInf = "";
if (mxCamt05300102 == null || mxCamt05300102.getBkToCstmrStmt() == null) { Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
return; String stmtInf = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.AddtlStmtInf");
} if (StringUtil.isNotEmpty(stmtInf)) {
BankToCustomerStatementV02 bkToCstmrStmt = mxCamt05300102.getBkToCstmrStmt(); addtlStmtInf = stmtInf;
List<AccountStatement2> stmtList = bkToCstmrStmt.getStmt(); map.put("field86", addtlStmtInf);
if (stmtList != null && stmtList.size() > 0) {
AccountStatement2 stmt = stmtList.get(0);
if (StringUtils.isNotEmpty(stmt.getAddtlStmtInf())) {
map.put("field86", StringUtil.getStringByEnter(stmt.getAddtlStmtInf(), 35, 6));
}
} }
} catch (Exception e) { } catch (Exception e) {
logger.error(e.getMessage()); logger.error(e.getMessage());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment