Commit 0e6abdbd by zhanghou

修改了部分910和900的类,完成了部分940,950报文实现类的编写

parent 7f1ddaab
......@@ -34,34 +34,6 @@ public abstract class AbstractMx2MtFieldsGenerate implements Mx2MtFieldsGenerate
return XmlUtil.getChildrenCount(document, path, null);
}
protected String getMtFormatAccount(CashAccount16 dbtrAcct) {
String account = "";
String iban = "";
String otherId = "";
if (dbtrAcct != null) {
if (dbtrAcct.getId() != null) {
iban = dbtrAcct.getId().getIBAN();
if (StringUtil.isEmpty(iban)) {
GenericAccountIdentification1 othr = dbtrAcct.getId().getOthr();
if (othr != null) {
if (othr.getSchmeNm() != null) {
otherId = othr.getSchmeNm().getCd();
}
if (StringUtil.isEmpty(otherId)) {
otherId = othr.getId();
}
}
}
}
}
if (!StringUtil.isEmpty(iban)) {
account = "/"+iban;
} else if (!StringUtil.isEmpty(otherId)) {
account = "//CH"+otherId;
}
return account;
}
protected String getBicCode(String type, Document document, String path) {
//AnyBIC BICFI BICOrBEI BIC
String bicCode = getXmlNodeValue(type, document, path+".AnyBIC");
......
package com.prowidesoftware.brilliance.mx2mt.mt900910;
import com.prowidesoftware.brilliance.constants.Mx2MtConstants;
import com.prowidesoftware.brilliance.exception.SwiftException;
import com.prowidesoftware.brilliance.mx2mt.AbstractMx2MtCreator;
import com.prowidesoftware.brilliance.mx2mt.Mx2MtFieldsGenerate;
import com.prowidesoftware.brilliance.mx2mt.mt900910.impl.*;
import com.prowidesoftware.brilliance.exception.SwiftException;
import com.prowidesoftware.brilliance.util.*;
import com.prowidesoftware.swift.model.mx.MxCamt05400102;
import com.prowidesoftware.swift.model.mx.dic.*;
import com.prowidesoftware.brilliance.util.StringUtil;
import com.prowidesoftware.brilliance.util.XmlUtil;
import com.prowidesoftware.swift.model.mx.dic.CreditDebitCode;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class Mx2Mt900910Creator extends AbstractMx2MtCreator {
......
package com.prowidesoftware.brilliance.mx2mt.mt900910.impl;
import com.prowidesoftware.brilliance.constants.Mx2MtConstants;
import com.prowidesoftware.brilliance.mx2mt.AbstractMx2MtFieldsGenerate;
import com.prowidesoftware.brilliance.exception.SwiftException;
import com.prowidesoftware.brilliance.mx2mt.AbstractMx2MtFieldsGenerate;
import com.prowidesoftware.brilliance.util.StringUtil;
import com.prowidesoftware.swift.model.mx.MxCamt05400102;
import com.prowidesoftware.swift.model.mx.dic.BankToCustomerDebitCreditNotificationV02;
import com.prowidesoftware.swift.model.mx.dic.GroupHeader42;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......
package com.prowidesoftware.brilliance.mx2mt.mt900910.impl;
import com.prowidesoftware.brilliance.constants.Mx2MtConstants;
import com.prowidesoftware.brilliance.mx2mt.AbstractMx2MtFieldsGenerate;
import com.prowidesoftware.brilliance.exception.SwiftException;
import com.prowidesoftware.brilliance.mx2mt.AbstractMx2MtFieldsGenerate;
import com.prowidesoftware.brilliance.util.StringUtil;
import com.prowidesoftware.swift.model.mx.MxCamt05400102;
import com.prowidesoftware.swift.model.mx.dic.*;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
/**
* <Ntfctn><Ntry><NtryDtls><TxDtls><Refs><EndToEndId>
*/
......
package com.prowidesoftware.brilliance.mx2mt.mt900910.impl;
import com.prowidesoftware.brilliance.constants.Mx2MtConstants;
import com.prowidesoftware.brilliance.mx2mt.AbstractMx2MtFieldsGenerate;
import com.prowidesoftware.brilliance.exception.SwiftException;
import com.prowidesoftware.brilliance.mx2mt.AbstractMx2MtFieldsGenerate;
import com.prowidesoftware.brilliance.util.StringUtil;
import com.prowidesoftware.swift.model.mx.MxCamt05400102;
import com.prowidesoftware.swift.model.mx.dic.*;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
/**
* <Ntfctn><Acct><Id><IBAN>
* <Ntfctn><Acct><Id><<Othr><Id>
......@@ -25,14 +21,14 @@ public class Field25aGenerate extends AbstractMx2MtFieldsGenerate {
try {
String iban = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String BAN = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Ntfctn.Acct.Id.IBAN");
if (StringUtil.isNotEmpty(BAN)) {
iban = BAN;
String ban = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Ntfctn.Acct.Id.IBAN");
if (StringUtil.isNotEmpty(ban)) {
iban = ban;
map.put("field25a", iban);
}else {
String Id = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Ntfctn.Acct.Id.Othr.Id");
if (StringUtil.isNotEmpty(Id)) {
iban = Id;
String id = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Ntfctn.Acct.Id.Othr.Id");
if (StringUtil.isNotEmpty(id)) {
iban = id;
map.put("field25a", iban);
}
}
......
package com.prowidesoftware.brilliance.mx2mt.mt900910.impl;
import com.prowidesoftware.brilliance.constants.Mx2MtConstants;
import com.prowidesoftware.brilliance.mx2mt.AbstractMx2MtFieldsGenerate;
import com.prowidesoftware.brilliance.exception.SwiftException;
import com.prowidesoftware.brilliance.mx2mt.AbstractMx2MtFieldsGenerate;
import com.prowidesoftware.brilliance.util.DateUtil;
import com.prowidesoftware.brilliance.util.NumberUtil;
import com.prowidesoftware.brilliance.util.StringUtil;
import com.prowidesoftware.swift.model.mx.MxCamt05400102;
import com.prowidesoftware.swift.model.mx.dic.*;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -15,7 +13,6 @@ import org.slf4j.LoggerFactory;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import java.math.BigDecimal;
import java.util.List;
/**
* <Ntfctn><Ntry><ValDt><Dt>
......
......@@ -21,17 +21,19 @@ public class Field52aGenerate extends AbstractMx2MtFieldsGenerate {
String bicCode = getBicCode(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Ntfctn.Ntry.NtryDtls.TxDtls.RltdAgts.DbtrAgt.FinInstnId");
String memberId = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Ntfctn.Ntry.NtryDtls.TxDtls.RltdAgts.DbtrAgt.FinInstnId.ClrSysMmbId.MmbId");
String name = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Ntfctn.Ntry.NtryDtls.TxDtls.RltdAgts.DbtrAgt.FinInstnId.Nm");
memberId = "/" + memberId;
if(memberId.length()>35)memberId = memberId.substring(0,35);
if (StringUtil.isNotEmpty(bicCode)) {
field52aOption = "A";
if (StringUtil.isNotEmpty(memberId)) {
field52a = "/" + memberId + Mx2MtConstants.NEW_LINE + bicCode;
field52a = memberId + Mx2MtConstants.NEW_LINE + bicCode;
} else {
field52a = bicCode;
}
}else if(StringUtil.isNotEmpty(name)){
field52aOption = "D";
if (StringUtil.isNotEmpty(memberId)) {
field52a = "/" + memberId + Mx2MtConstants.NEW_LINE + name;
field52a = memberId + Mx2MtConstants.NEW_LINE + name;
}
int adrLineCount = getXmlNodeCounts(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Ntfctn.Ntry.NtryDtls.TxDtls.RltdAgts.DbtrAgt.FinInstnId.PstlAdr.AdrLine");
if(adrLineCount>0){
......
......@@ -25,17 +25,19 @@ public class Field56aGenerate extends AbstractMx2MtFieldsGenerate {
String bicCode = getBicCode(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Ntfctn.Ntry.NtryDtls.TxDtls.RltdAgts.IntrmyAgt1.FinInstnId");
String memberId = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Ntfctn.Ntry.NtryDtls.TxDtls.RltdAgts.IntrmyAgt1.FinInstnId.ClrSysMmbId.MmbId");
String name = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Ntfctn.Ntry.NtryDtls.TxDtls.RltdAgts.IntrmyAgt1.FinInstnId.Nm");
memberId = "/" + memberId;
if(memberId.length()>35)memberId = memberId.substring(0,35);
if (StringUtil.isNotEmpty(bicCode)) {
field56aOption = "A";
if (StringUtil.isNotEmpty(memberId)) {
field56a = "/" + memberId + Mx2MtConstants.NEW_LINE + bicCode;
field56a = memberId + Mx2MtConstants.NEW_LINE + bicCode;
} else {
field56a = bicCode;
}
}else if(StringUtil.isNotEmpty(name)){
field56aOption = "D";
if (StringUtil.isNotEmpty(memberId)) {
field56a = "/" + memberId + Mx2MtConstants.NEW_LINE + name;;
field56a = memberId + Mx2MtConstants.NEW_LINE + name;;
}
int adrLineCount = getXmlNodeCounts(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Ntfctn.Ntry.NtryDtls.TxDtls.RltdAgts.IntrmyAgt1.FinInstnId.PstlAdr.AdrLine");
if(adrLineCount>0){
......
package com.prowidesoftware.brilliance.mx2mt.mt900910.impl;
import com.prowidesoftware.brilliance.constants.Mx2MtConstants;
import com.prowidesoftware.brilliance.mx2mt.AbstractMx2MtFieldsGenerate;
import com.prowidesoftware.brilliance.exception.SwiftException;
import com.prowidesoftware.brilliance.mx2mt.AbstractMx2MtFieldsGenerate;
import com.prowidesoftware.brilliance.util.StringUtil;
import com.prowidesoftware.swift.model.mx.MxCamt05400102;
import com.prowidesoftware.swift.model.mx.dic.*;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
public class Field72Generate extends AbstractMx2MtFieldsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field72Generate.class);
......@@ -21,9 +17,9 @@ public class Field72Generate extends AbstractMx2MtFieldsGenerate {
try {
String field72 = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String AddtlTxInf = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Ntfctn.Ntry.NtryDtls.TxDtls.AddtlTxInf");
if(StringUtil.isNotEmpty(AddtlTxInf)){
field72 = StringUtil.getStringByEnter(AddtlTxInf, 35, 6);
String addtlTxInf = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Ntfctn.Ntry.NtryDtls.TxDtls.AddtlTxInf");
if(StringUtil.isNotEmpty(addtlTxInf)){
field72 = StringUtil.getStringByEnter(addtlTxInf, 35, 6);
}
map.put("field72", field72);
} catch (Exception e) {
......
......@@ -6,14 +6,17 @@ import com.prowidesoftware.brilliance.mx2mt.AbstractMx2MtCreator;
import com.prowidesoftware.brilliance.mx2mt.Mx2MtFieldsGenerate;
import com.prowidesoftware.brilliance.mx2mt.mt940950.impl.*;
import com.prowidesoftware.brilliance.util.TemplateUtil;
import com.prowidesoftware.brilliance.util.XmlUtil;
import com.prowidesoftware.swift.model.mx.MxCamt05300102;
import com.prowidesoftware.swift.model.mx.dic.*;
import org.apache.commons.lang.StringUtils;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class Mx2Mt940950Creator extends AbstractMx2MtCreator {
......@@ -36,6 +39,14 @@ public class Mx2Mt940950Creator extends AbstractMx2MtCreator {
* field64
*/
@Override
public void preProcess() {
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
Map<String, String> parentElementMaps = XmlUtil.getParentElementMaps(document);
map.put(Mx2MtConstants.GRPHDR_PARENT_ELEMENT_NAME, parentElementMaps.get("GrpHdr"));
map.put(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, parentElementMaps.get("Stmt"));
map.put(Mx2MtConstants.MT_TEMPLATE_NAME, "swift_mt_940_950.vm");
}
@Override
public List<Mx2MtFieldsGenerate> getFieldsGenerateList() {
List<Mx2MtFieldsGenerate> fieldsGenerateList = new ArrayList<>();
......@@ -56,14 +67,6 @@ public class Mx2Mt940950Creator extends AbstractMx2MtCreator {
return fieldsGenerateList;
}
@Override
public String generateMtMsg() {
postProcess();
String outPutFilePath = (String) map.get(Mx2MtConstants.OUT_PUT_FILE_PATH);
return TemplateUtil.makeFileByTemplate("swift_mt_940_950.vm", map, outPutFilePath, "utf-8");
}
/**
* 符合以下其中一个条件,则为940,否则为950报文
* (1)<Stmt><Ntry>[j]数组中,节点<AddtlNtryInf>有值
......@@ -73,42 +76,25 @@ public class Mx2Mt940950Creator extends AbstractMx2MtCreator {
*/
public boolean getMtMsg() {
try {
MxCamt05300102 mxCamt05300102 = (MxCamt05300102) map.get(Mx2MtConstants.MX_OBJECT);
if (mxCamt05300102 == null || mxCamt05300102.getBkToCstmrStmt() == null) {
return false;
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String addtlNtryInf = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Ntry.AddtlNtryInf");
if(StringUtils.isNotEmpty(addtlNtryInf)){
return true;
}
BankToCustomerStatementV02 bkToCstmrStmt = mxCamt05300102.getBkToCstmrStmt();
List<AccountStatement2> stmtList = bkToCstmrStmt.getStmt();
if (stmtList != null && stmtList.size() > 0) {
AccountStatement2 stmt = stmtList.get(0);
List<ReportEntry2> ntryList = stmt.getNtry();
if (ntryList.size() > 0 && StringUtils.isNotEmpty(ntryList.get(0).getAddtlNtryInf()))
return true;
List<CashBalance3> balList = stmt.getBal();
if (balList != null && balList.size() > 0) {
for (CashBalance3 tmpBal : balList) {
if (tmpBal != null
&& tmpBal.getTp() != null
&& tmpBal.getTp().getCdOrPrtry() != null
&& BalanceType12Code.FWAV.equals(tmpBal.getTp().getCdOrPrtry().getCd())) {
return true;
}
}
}
if (StringUtils.isNotEmpty(stmt.getAddtlStmtInf()))
return true;
return false;
String cd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Ntry.Bal.Tp.CdOrPrtry.Cd");
if(StringUtils.isNotEmpty(cd)){
return true;
}
String addtlStmtInf = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "stmt.AddtlStmtInf");
if(StringUtils.isNotEmpty(addtlStmtInf)){
return true;
}
return false;
} catch (Exception e) {
logger.error(e.getMessage());
throw new SwiftException("ERROR", "Mx2Mt950Creator.getMtMsg() error");
}
return false;
}
@Override
protected String getMtType() {
if (getMtMsg()) {
......
......@@ -3,9 +3,8 @@ package com.prowidesoftware.brilliance.mx2mt.mt940950.impl;
import com.prowidesoftware.brilliance.constants.Mx2MtConstants;
import com.prowidesoftware.brilliance.exception.SwiftException;
import com.prowidesoftware.brilliance.mx2mt.AbstractMx2MtFieldsGenerate;
import com.prowidesoftware.swift.model.mx.MxCamt05300102;
import com.prowidesoftware.swift.model.mx.dic.BankToCustomerStatementV02;
import com.prowidesoftware.swift.model.mx.dic.GroupHeader42;
import com.prowidesoftware.brilliance.util.StringUtil;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -15,17 +14,15 @@ import org.slf4j.LoggerFactory;
public class Field20Generate extends AbstractMx2MtFieldsGenerate{
private static final Logger logger = LoggerFactory.getLogger(Field20Generate.class);
@Override
public void fieldsGenerate() throws SwiftException{
try {
MxCamt05300102 mxCamt05300102 = (MxCamt05300102)map.get(Mx2MtConstants.MX_OBJECT);
if (mxCamt05300102 == null || mxCamt05300102.getBkToCstmrStmt() == null) {
return;
String msgId = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String id = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "GrpHdr.MsgId");
if (StringUtil.isNotEmpty(id)) {
msgId = id;
map.put("field20", msgId);
}
BankToCustomerStatementV02 bkToCstmrStmt = mxCamt05300102.getBkToCstmrStmt();
GroupHeader42 grpHdr = bkToCstmrStmt.getGrpHdr();
map.put("field20", grpHdr.getMsgId());
} catch(Exception e) {
logger.error(e.getMessage());
throw new SwiftException("ERROR", e.getMessage());
......
......@@ -4,16 +4,10 @@ import com.prowidesoftware.brilliance.constants.Mx2MtConstants;
import com.prowidesoftware.brilliance.exception.SwiftException;
import com.prowidesoftware.brilliance.mx2mt.AbstractMx2MtFieldsGenerate;
import com.prowidesoftware.brilliance.util.StringUtil;
import com.prowidesoftware.swift.model.mx.MxCamt05300102;
import com.prowidesoftware.swift.model.mx.dic.AccountIdentification4Choice;
import com.prowidesoftware.swift.model.mx.dic.AccountStatement2;
import com.prowidesoftware.swift.model.mx.dic.BankToCustomerStatementV02;
import com.prowidesoftware.swift.model.mx.dic.GenericAccountIdentification1;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
/**
* <Stmt><Acct><Id><IBAN>
* <Stmt><Acct><Id><Othr><Id>
......@@ -25,26 +19,14 @@ public class Field25aGenerate extends AbstractMx2MtFieldsGenerate{
@Override
public void fieldsGenerate() throws SwiftException{
try {
MxCamt05300102 mxCamt05300102 = (MxCamt05300102)map.get(Mx2MtConstants.MX_OBJECT);
if (mxCamt05300102 == null || mxCamt05300102.getBkToCstmrStmt() == null) {
return;
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String iban = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Acct.Id.IBAN");
if (StringUtil.isNotEmpty(iban)){
map.put("field25a", iban);
}
BankToCustomerStatementV02 bkToCstmrStmt = mxCamt05300102.getBkToCstmrStmt();
List<AccountStatement2> stmtList = bkToCstmrStmt.getStmt();
if (stmtList != null && stmtList.size() > 0) {
AccountStatement2 accountStatement2 = stmtList.get(0);
if (accountStatement2.getAcct() != null
&& accountStatement2.getAcct().getId() != null) {
AccountIdentification4Choice id = accountStatement2.getAcct().getId();
if (!StringUtil.isEmpty(id.getIBAN())) {
map.put("field25a", id.getIBAN());
} else {
GenericAccountIdentification1 othr = id.getOthr();
if (othr != null) {
map.put("field25a", othr.getId());
}
}
}
String id = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Acct.Id.Othr.Id");
if (StringUtil.isNotEmpty(id)){
map.put("field25a", id);
}
} catch(Exception e) {
logger.error(e.getMessage());
......
......@@ -8,6 +8,7 @@ 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.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -25,33 +26,18 @@ public class Field28CGenerate extends AbstractMx2MtFieldsGenerate{
@Override
public void fieldsGenerate() throws SwiftException{
try {
MxCamt05300102 mxCamt05300102 = (MxCamt05300102)map.get(Mx2MtConstants.MX_OBJECT);
if (mxCamt05300102 == null || mxCamt05300102.getBkToCstmrStmt() == null) {
return;
}
BankToCustomerStatementV02 bkToCstmrStmt = mxCamt05300102.getBkToCstmrStmt();
BigDecimal seqNb = null;
List<AccountStatement2> stmtList = bkToCstmrStmt.getStmt();
if (stmtList != null && stmtList.size() > 0) {
AccountStatement2 accountStatement2 = stmtList.get(0);
if (accountStatement2 != null) {
seqNb = accountStatement2.getElctrncSeqNb();
}
}
String pgNb = "";
GroupHeader42 grpHdr = bkToCstmrStmt.getGrpHdr();
if (grpHdr != null && grpHdr.getMsgPgntn() != null) {
pgNb = grpHdr.getMsgPgntn().getPgNb();
}
if (seqNb == null && StringUtil.isEmpty(pgNb)) {
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String elctrncSeqNb = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.ElctrncSeqNb");
String pgNb = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "GrpHdr.MsgPgntn.PgNb");
if(StringUtil.isEmpty(elctrncSeqNb)&&StringUtil.isEmpty(pgNb)){
throw new SwiftException("ERROR", "Convert MT950 field28C is required!");
} else {
if (seqNb == null) { //only <Stmt><ElctrncSeqNb>
}else {
if(StringUtil.isEmpty(elctrncSeqNb)){
map.put("field28C", pgNb);
} else if (StringUtil.isEmpty(pgNb)) { //only <GrpHdr><MsgPgntn><PgNb>
map.put("field28C", seqNb.toString());
} else { //<Stmt><ElctrncSeqNb> + "/" + GrpHdr><MsgPgntn><PgNb>
map.put("field28C", seqNb.toString() + "/" + pgNb);
}else if(StringUtil.isEmpty(pgNb)){
map.put("field28C",elctrncSeqNb);
}else {
map.put("field28C", elctrncSeqNb + "/" + pgNb);
}
}
} catch(Exception e) {
......
......@@ -5,13 +5,16 @@ import com.prowidesoftware.brilliance.exception.SwiftException;
import com.prowidesoftware.brilliance.mx2mt.AbstractMx2MtFieldsGenerate;
import com.prowidesoftware.brilliance.util.DateUtil;
import com.prowidesoftware.brilliance.util.NumberUtil;
import com.prowidesoftware.swift.model.mx.MxCamt05300102;
import com.prowidesoftware.swift.model.mx.dic.*;
import com.prowidesoftware.brilliance.util.StringUtil;
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.LoggerFactory;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import java.math.BigDecimal;
import java.util.List;
/**
* <Stmt><Bal>[i]<Tp><CdOrPrtry><Cd>
......@@ -27,54 +30,41 @@ public class Field60Generate extends AbstractMx2MtFieldsGenerate{
@Override
public void fieldsGenerate() throws SwiftException{
try {
MxCamt05300102 mxCamt05300102 = (MxCamt05300102)map.get(Mx2MtConstants.MX_OBJECT);
if (mxCamt05300102 == null || mxCamt05300102.getBkToCstmrStmt() == null) {
return;
String filed60Option = "";
String crdr = "";
String dt = "";
String ccy = "";
String amt = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String cd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Bal.Tp.CdOrPrtry.Cd");
if (BalanceType12Code.PRCD.equals(BalanceType12Code.valueOf(cd))) {
filed60Option = "F";
} else if (BalanceType12Code.ITBD.equals(BalanceType12Code.valueOf(cd))) {
filed60Option = "M";
} else {
throw new SwiftException("ERROR", "cannot find filed60Option.");
}
BankToCustomerStatementV02 bkToCstmrStmt = mxCamt05300102.getBkToCstmrStmt();
List<AccountStatement2> stmtList = bkToCstmrStmt.getStmt();
if (stmtList != null && stmtList.size() > 0) {
AccountStatement2 stmt = stmtList.get(0);
List<CashBalance3> balList = stmt.getBal();
if (balList != null && balList.size() > 0) {
CashBalance3 bal = balList.get(0);
String filed60Option = "";
if (bal != null && bal.getTp() != null
&& bal.getTp().getCdOrPrtry() != null) {
if (BalanceType12Code.PRCD.equals(bal.getTp().getCdOrPrtry().getCd())) {
filed60Option = "F";
} else if (BalanceType12Code.ITBD.equals(bal.getTp().getCdOrPrtry().getCd())) {
filed60Option = "M";
} else {
throw new SwiftException("ERROR", "cannot find filed60Option.");
}
map.put("field60Option", filed60Option);
}
if (bal != null) {
String crdr = "";
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 filed60 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);
}
map.put("field60", crdr+dateStr+ccy+amtStr);
}
}
map.put("field60Option", filed60Option);
String cdtDbtInd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Bal.CdtDbtInd");
if (CreditDebitCode.CRDT.equals(CreditDebitCode.valueOf(cdtDbtInd))) {
crdr = Mx2MtConstants.DRCRMARK_C;
} else if (CreditDebitCode.DBIT.equals(CreditDebitCode.valueOf(cdtDbtInd))) {
crdr = Mx2MtConstants.DRCRMARK_D;
} else {
throw new SwiftException("ERROR", "cannot find filed60 D/C Mark.");
}
String dateStr = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Bal.Dt.Dt");
if(StringUtil.isNotEmpty(dateStr)){
XMLGregorianCalendar XmlDt = DatatypeFactory.newInstance().newXMLGregorianCalendar(dateStr);
dt = DateUtil.format(XmlDt, "yyMMdd");
}
String amtStr = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Bal.Amt");
String ccyStr = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Bal.Amt@Ccy");
if (StringUtil.isNotEmpty(amtStr) && StringUtil.isNotEmpty(ccyStr)) {
amt = NumberUtil.formatAmt(new BigDecimal(amtStr), ccyStr);
ccy = ccyStr;
}
map.put("field60", crdr+dt+ccy+amt);
} catch(Exception e) {
logger.error(e.getMessage());
throw new SwiftException("ERROR", e.getMessage());
......
......@@ -6,12 +6,14 @@ import com.prowidesoftware.brilliance.mx2mt.AbstractMx2MtFieldsGenerate;
import com.prowidesoftware.brilliance.util.DateUtil;
import com.prowidesoftware.brilliance.util.NumberUtil;
import com.prowidesoftware.brilliance.util.StringUtil;
import com.prowidesoftware.swift.model.mx.MxCamt05300102;
import com.prowidesoftware.swift.model.mx.dic.*;
import org.apache.commons.lang.StringUtils;
import com.prowidesoftware.swift.model.mx.dic.CreditDebitCode;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
......@@ -34,92 +36,67 @@ public class Field61ListGenerate extends AbstractMx2MtFieldsGenerate{
@Override
public void fieldsGenerate() throws SwiftException{
try {
MxCamt05300102 mxCamt05300102 = (MxCamt05300102)map.get(Mx2MtConstants.MX_OBJECT);
if (mxCamt05300102 == null || mxCamt05300102.getBkToCstmrStmt() == null) {
return;
String valueDateStr = "";
String entryDateStr = "";
String drCrMark = "";
String amt = "";
String ccy = "";
List<String> filed61List = new ArrayList<>();
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String dt = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Ntry.ValDt.Dt");
String dt2 = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Ntry.BookgDt.Dt");
if(StringUtil.isNotEmpty(dt)){
XMLGregorianCalendar valueDateDt = DatatypeFactory.newInstance().newXMLGregorianCalendar(dt);
valueDateStr = DateUtil.format(valueDateDt, "yyMMdd");
}
BankToCustomerStatementV02 bkToCstmrStmt = mxCamt05300102.getBkToCstmrStmt();
List<AccountStatement2> stmtList = bkToCstmrStmt.getStmt();
if (stmtList != null && stmtList.size() > 0) {
AccountStatement2 stmt = stmtList.get(0);
List<ReportEntry2> ntryList = stmt.getNtry();
if (ntryList.size() > 0) {
List<String> filed61List = new ArrayList<>();
for (int i=0; i<ntryList.size(); i++) {
ReportEntry2 ntry = ntryList.get(i);
String valueDateStr = DateUtil.format(ntry.getValDt().getDt(), "yyMMdd");
String entryDateStr = DateUtil.format(ntry.getBookgDt().getDt(), "yyMMdd");
String drCrMark = "";
if (CreditDebitCode.CRDT.equals(ntry.getCdtDbtInd())) {
if (Boolean.TRUE.equals(ntry.isRvslInd())) {
drCrMark = Mx2MtConstants.DRCRMARK_RD;
} else {
drCrMark = Mx2MtConstants.DRCRMARK_C;
}
} else if (CreditDebitCode.DBIT.equals(ntry.getCdtDbtInd())) {
if (Boolean.TRUE.equals(ntry.isRvslInd())) {
drCrMark = Mx2MtConstants.DRCRMARK_RC;
} else {
drCrMark = Mx2MtConstants.DRCRMARK_D;
}
} else {
throw new SwiftException("ERROR", "cannot find filed61 D/C Mark.");
}
String ccy = "";
String amtStr = "";
ActiveOrHistoricCurrencyAndAmount ccyAndAmt = ntry.getAmt();
if (ccyAndAmt != null) {
ccy = ccyAndAmt.getCcy();
amtStr = NumberUtil.formatAmt(ccyAndAmt.getValue(), ccy);
}
//TODO
String txnTypeAndIdentification = "";
BankTransactionCodeStructure4 bkTxCd = ntry.getBkTxCd();
if (bkTxCd != null) {
ProprietaryBankTransactionCodeStructure1 prtry = bkTxCd.getPrtry();
if (prtry != null) {
txnTypeAndIdentification = prtry.getCd();
}
}
String referenceForTheAccountOwner = "";
String supplementDetails = "";
List<EntryDetails1> ntryDtlsList = ntry.getNtryDtls();
if (ntryDtlsList.size() > 0) {
EntryDetails1 ntryDtls = ntryDtlsList.get(0);
List<EntryTransaction2> txDtlsList = ntryDtls.getTxDtls();
if (txDtlsList.size() > 0) {
EntryTransaction2 txDtls = txDtlsList.get(0);
if (txDtls.getRefs() != null) {
referenceForTheAccountOwner = txDtls.getRefs().getEndToEndId();
}
supplementDetails = txDtls.getAddtlTxInf();
}
}
String referenceForTheAccountServInst = ntry.getAcctSvcrRef();
StringBuilder sb = new StringBuilder();
sb.append(valueDateStr)
.append(entryDateStr)
.append(drCrMark)
.append(ccy)
.append(amtStr)
.append(txnTypeAndIdentification)
.append(referenceForTheAccountOwner);
if (!StringUtil.isEmpty(referenceForTheAccountServInst)) {
sb.append("//"+referenceForTheAccountServInst);
}
if (!StringUtil.isEmpty(supplementDetails)) {
sb.append(Mx2MtConstants.NEW_LINE+supplementDetails);
}
if (StringUtils.isNotEmpty(ntry.getAddtlNtryInf()))
sb.append(Mx2MtConstants.NEW_LINE).append(":86:").append(StringUtil.getStringByEnter(ntry.getAddtlNtryInf(), 35, 6));
filed61List.add(sb.toString());
}
if (filed61List.size() > 0) {
map.put("field61List", filed61List);
}
if(StringUtil.isNotEmpty(dt2)){
XMLGregorianCalendar entryDateDt = DatatypeFactory.newInstance().newXMLGregorianCalendar(dt);
entryDateStr = DateUtil.format(entryDateDt, "yyMMdd");
}
String cdtDbtInd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Ntry.CdtDbtInd");
String rvslInd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Stmt.Ntry.RvslInd");
if (CreditDebitCode.CRDT.equals(CreditDebitCode.valueOf(cdtDbtInd))) {
if (Boolean.TRUE.equals(Boolean.getBoolean(rvslInd))) {
drCrMark = Mx2MtConstants.DRCRMARK_RD;
} else {
drCrMark = Mx2MtConstants.DRCRMARK_C;
}
} else if (CreditDebitCode.DBIT.equals(CreditDebitCode.valueOf(cdtDbtInd))) {
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.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) {
map.put("field61List", filed61List);
}
} catch(Exception e) {
logger.error(e.getMessage());
......
......@@ -12,7 +12,7 @@ public class Mx2Mt940 {
String s = null;
try {
URL resource = Mx2Mt940.class.getClassLoader().getResource("swiftXml/");
s = new Mx2MtCreateManager().mx2mt(new File(resource.getPath()+"MxCamt05300102_940.xml"));
s = new Mx2MtCreateManager().mx2mt(new File(resource.getPath()+"MxCamt05300102_940.xml"),"D:/test/MT940.txt");
} catch (Exception e) {
e.printStackTrace();
}
......
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