Commit dfee5fc4 by chengzhuoshen

1.重构Mx2Mt 103代码 根据swift官方mapping文档

2.移除202/900/910/940/950之前的代码,待开发。
parent 7d8e6adb
......@@ -157,7 +157,6 @@ public class SwiftTransfer {
SwiftDto swiftDto = new Mx2SwiftDtoCreatorManager().convert(xmlStr, null, null);
String mtStr = new SwiftDto2MtCreatorManager().swiftDto2Mt(swiftDto, null, extraMap);
Map<String, String> maps = MessageReader.getSwfMsgInfoViaMsg(mtStr);
maps.put("std", "MX");
AbstractMX abstractMx = AbstractMX.parse(xmlStr);
if (abstractMx != null) {
maps.put("xty", abstractMx.getMxId().id());//ISO20022类型
......
......@@ -79,9 +79,11 @@ public class Mx2MtConstants {
public static final String HEAD3_MT202_COVER = "{119:COV}";
public static final String APPHDR_PARENT_ELEMENT_NAME = "appHdrParentElementName";
public static final String GRPHDR_PARENT_ELEMENT_NAME = "grpHdrParentElementName";
public static final String MAINBODY_PARENT_ELEMENT_NAME = "mainBodyParentElementName";
public static final String BODY_PARENT_ELEMENT_NAME = "bodyParentElementName";
public static final String MT_TEMPLATE_NAME = "mtTemplateName";
......@@ -89,6 +91,7 @@ public class Mx2MtConstants {
public static final String MX_END_TO_END_ID_DEFAULT_VALUE = "NOTPROVIDED";
public static final String MX_TO_MT_DEFAULT_VALUE = "NOTPROVIDED";
/**
* 外部参数名称
*/
......
package com.brilliance.swift.mx2mt;
import com.brilliance.swift.util.StringUtil;
import com.brilliance.swift.util.XmlUtil;
import org.dom4j.Document;
import java.util.Map;
public abstract class AbstractMx2MtFieldsGenerate implements Mx2MtFieldsGenerate {
protected Map<String, Object> map = null;
protected void withMap(Map<String, Object> targetMap) {
map = targetMap;
}
protected String getXmlNodeValue(String type, Document document, String path) {
String parentPath = (String)map.get(type);
if (StringUtil.isNotEmpty(parentPath)) {
path = parentPath + "." + path;
}
return XmlUtil.getXmlNodeValue(document, path);
}
protected int getXmlNodeCounts(String type, Document document, String path) {
String parentPath = (String)map.get(type);
if (StringUtil.isNotEmpty(parentPath)) {
path = parentPath + "." + path;
}
return XmlUtil.getChildrenCount(document, path, null);
}
protected String getBicCode(String type, Document document, String path) {
//AnyBIC BICFI BICOrBEI BIC
String bicCode = getXmlNodeValue(type, document, path+".AnyBIC");
if (StringUtil.isEmpty(bicCode)) {
bicCode = getXmlNodeValue(type, document, path+".BICFI");
}
if (StringUtil.isEmpty(bicCode)) {
bicCode = getXmlNodeValue(type, document, path+".BICOrBEI");
}
if (StringUtil.isEmpty(bicCode)) {
bicCode = getXmlNodeValue(type, document, path+".BIC");
}
return bicCode;
}
}
package com.brilliance.swift.mx2mt;
import com.brilliance.swift.context.ContextImpl;
public class Mx2MtContext extends ContextImpl {
private static final long serialVersionUID = 4923591374686577252L;
}
package com.brilliance.swift.mx2mt;
public class Mx2MtContextIdentifier {
public static final String MX_XMl_DOCUMENT = "mx.xml.document";
public static final String MX_OBJ = "mx.obj";
public static final String MT_TXT = "mt.txt";
public static final String MX_TO_MT_OUTPUT_FILE_PATH = "mx.to.mt.output.filepath";
public static final String APPHDR_PARENT_ELEMENT_NAME = "apphdr.parent.element.name";
public static final String GRPHDR_PARENT_ELEMENT_NAME = "grphdr.parent.element.name";
public static final String BODY_PARENT_ELEMENT_NAME = "body.parent.element.name";
public static final String MX_SENDER_BIC = "mx.sender.bic";
public static final String MX_RECEIVER_BIC = "mx.receiver.bic";
}
package com.brilliance.swift.mx2mt;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.mt103.Mx2Mt103Creator;
import com.brilliance.swift.mx2mt.mt202cov202.Mx2Mt202Creator;
import com.brilliance.swift.mx2mt.mt900910.Mx2Mt900910Creator;
import com.brilliance.swift.mx2mt.mt940950.Mx2Mt940950Creator;
import com.prowidesoftware.swift.model.mx.AbstractMX;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.util.List;
import java.util.Map;
public class Mx2MtCreateManager {
private static final Logger logger = LoggerFactory.getLogger(Mx2MtCreateManager.class);
private String msgType = "";
private Object mxObj = null;
private String xmlStr = "";
public String getMsgType() {
return msgType;
}
public void setMsgType(String msgType) {
this.msgType = msgType;
}
public Object getMxObj() {
return mxObj;
}
public void setMxObj(Object mxObj) {
this.mxObj = mxObj;
}
public void init(String xmlStr) {
AbstractMX abstractMX = AbstractMX.parse(xmlStr);
msgType = (abstractMX.getMxId().getBusinessProcess().name()
+ abstractMX.getMxId().getFunctionality()
+ abstractMX.getMxId().getVariant())
//+ abstractMX.getMxId().getVersion())
.trim()
.replace(".", "");
mxObj = abstractMX;
this.xmlStr = xmlStr;
}
public String mx2mt(File file, String outPutFilePath, Map<String, Object> extraMap) throws Exception {
String xmlStr = FileUtils.readFileToString(file);
init(xmlStr);
return convert(outPutFilePath, extraMap);
}
public String mx2mt(File file, String outPutFilePath) throws Exception {
return mx2mt(file, outPutFilePath, null);
}
public String mx2mt(File file) throws Exception {
return mx2mt(file, null, null);
}
public String mx2mt(String xmlStr, String outPutFilePath, Map<String, Object> extraMap) throws Exception {
init(xmlStr);
return convert(outPutFilePath, extraMap);
}
public String mx2mt(String xmlStr, String outPutFilePath) throws Exception {
return mx2mt(xmlStr, outPutFilePath, null);
}
public String mx2mt(String xmlStr) throws Exception {
return mx2mt(xmlStr, null, null);
}
public String convert(String outPutFilePath, Map<String, Object> extraMap) throws SwiftException {
AbstractMx2MtCreator creator = getMx2MtCreator(msgType);
creator.withXmlDocument(xmlStr).withObj(mxObj).withOutPutFilePath(outPutFilePath).withExtraMap(extraMap);
creator.preProcess();
creator.generateHead1();
creator.generateHead2();
creator.generateHead3();
List<Mx2MtFieldsGenerate> generateList = creator.getFieldsGenerateList();
for (int i=0; i<generateList.size(); i++) {
AbstractMx2MtFieldsGenerate fieldsGenerate = (AbstractMx2MtFieldsGenerate) generateList.get(i);
fieldsGenerate.withMap(creator.getMap());
fieldsGenerate.fieldsGenerate();
}
creator.generateHead5();
creator.postProcess();
return creator.generateMtMsg();
}
public AbstractMx2MtCreator getMx2MtCreator(String msgType) throws SwiftException {
if ("pacs008001".equals(msgType)) {
return new Mx2Mt103Creator();
} else if ("pacs009001".equals(msgType)){
return new Mx2Mt202Creator();
} else if ("camt053001".equals(msgType)){
return new Mx2Mt940950Creator();
} else if ("camt054001".equals(msgType)){
return new Mx2Mt900910Creator();
} else {
throw new SwiftException("Invalid message type");
}
}
}
package com.brilliance.swift.mx2mt;
import java.util.List;
import com.brilliance.swift.exception.SwiftException;
public interface Mx2MtCreator {
/**
* prepare data
*/
public void preProcess();
/**
* generate {1:}
*/
public void generateHead1();
/**
* generate {2:}
*/
public void generateHead2();
/**
* Optional
* generate {3:}
*/
public void generateHead3();
/**
* generate {4:}
*/
public List<Mx2MtFieldsGenerate> getFieldsGenerateList();
/**
* generate {5:}
*/
public void generateHead5();
/**
* Contains the following features
* validate
* special process
*/
public void postProcess();
void preProcess() throws SwiftException;
void withBlock1() throws SwiftException;
void withBlock2() throws SwiftException;
void withBlock3() throws SwiftException;
void withBlock4() throws SwiftException;
void withBlock5() throws SwiftException;
void postProcess() throws SwiftException;
}
package com.brilliance.swift.mx2mt;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.mt103.Mx2Mt103Creator;
import com.brilliance.swift.mx2mt.mt900910.Mx2Mt900910Creator;
import com.brilliance.swift.mx2mt.mt940950.Mx2Mt940950Creator;
import com.brilliance.swift.util.StringUtil;
import com.prowidesoftware.swift.model.mx.AbstractMX;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import java.util.Map;
public class Mx2MtCreatorManager {
public String mx2Mt(String xml, String fileOutputPath, Map<String, Object> extraMap) throws SwiftException {
try {
AbstractMX abstractMX = AbstractMX.parse(xml);
String messageType = (abstractMX.getMxId().getBusinessProcess().name()
+ "."
+ abstractMX.getMxId().getFunctionality()
+ "."
+ abstractMX.getMxId().getVariant())
//+ abstractMX.getMxId().getVersion())
.trim();
Mx2MtContext context = new Mx2MtContext();
Document document = DocumentHelper.parseText(xml);
context.set(Mx2MtContextIdentifier.MX_XMl_DOCUMENT, document);
context.set(Mx2MtContextIdentifier.MX_TO_MT_OUTPUT_FILE_PATH, fileOutputPath);
context.set(Mx2MtContextIdentifier.MX_OBJ, abstractMX);
String applicationMode = "O";//代表是收报,默认值
if (extraMap != null) {
applicationMode = (String) extraMap.get(Mx2MtConstants.APPLICATION_MODE);
if (StringUtil.isEmpty(applicationMode)) {
String bnkBic = (String)extraMap.get("bnkBic");//得到本行的bicCode
if (StringUtil.isNotEmpty(bnkBic) && abstractMX.getAppHdr() != null) {
if (bnkBic.equals(abstractMX.getAppHdr().from())) {
applicationMode = "I";//如果发报行和本行bic一样,表示是发报
}
}
}
}
context.putAll(extraMap);
context.set(Mx2MtConstants.APPLICATION_MODE, applicationMode);
AbstractMx2MtCreator creator = getCreator(messageType);
creator.setContext(context);
creator.preProcess();
creator.withBlock1();
creator.withBlock2();
creator.withBlock3();
creator.withBlock4();
creator.withBlock5();
creator.postProcess();
String xmlStr = (String)context.get(Mx2MtContextIdentifier.MT_TXT);
return xmlStr;
} catch (DocumentException e) {
throw new SwiftException("ERROR", e.getMessage());
}
}
public AbstractMx2MtCreator getCreator(String messageType) {
if ("pacs.008.001".equals(messageType)) {
return new Mx2Mt103Creator();
} else if ("pacs.009.001".equals(messageType)) {
return new Mx2Mt103Creator();
}else if("camt.054.001".equals(messageType)){
return new Mx2Mt900910Creator();
} else if("camt.053.001".equals(messageType)){
return new Mx2Mt940950Creator();
}
else {
throw new SwiftException("Invalid message type");
}
}
}
......@@ -2,8 +2,8 @@ package com.brilliance.swift.mx2mt;
import com.brilliance.swift.exception.SwiftException;
public interface Mx2MtFieldsGenerate {
public interface Mx2MtTagsGenerate {
public void fieldsGenerate() throws SwiftException;
public void tagGenerate() throws SwiftException;
}
......@@ -3,50 +3,67 @@ package com.brilliance.swift.mx2mt.mt103;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtCreator;
import com.brilliance.swift.mx2mt.Mx2MtFieldsGenerate;
import com.brilliance.swift.mx2mt.Mx2MtContextIdentifier;
import com.brilliance.swift.mx2mt.Mx2MtTagsGenerate;
import com.brilliance.swift.mx2mt.mt103.impl.*;
import com.brilliance.swift.util.StringUtil;
import com.brilliance.swift.util.XmlUtil;
import com.brilliance.swift.vo.common.ServiceLevelCode;
import com.prowidesoftware.swift.model.SwiftBlock3;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.Tag;
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 Mx2Mt103Creator extends AbstractMx2MtCreator {
private static final Logger logger = LoggerFactory.getLogger(Mx2Mt103Creator.class);
@Override
public void preProcess() {
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
super.preProcess();
Document document = (Document)context.get(Mx2MtContextIdentifier.MX_XMl_DOCUMENT, true);
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("CdtTrfTxInf"));
map.put(Mx2MtConstants.MT_TEMPLATE_NAME, "swift_mt_103.vm");
context.set(Mx2MtContextIdentifier.APPHDR_PARENT_ELEMENT_NAME, parentElementMaps.get("AppHdr"));
context.set(Mx2MtContextIdentifier.GRPHDR_PARENT_ELEMENT_NAME, parentElementMaps.get("GrpHdr"));
context.set(Mx2MtContextIdentifier.BODY_PARENT_ELEMENT_NAME, parentElementMaps.get("CdtTrfTxInf"));
}
@Override
public void generateHead3() {
try {
String head3 = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String uetr = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.PmtId.UETR");
if (StringUtil.isNotEmpty(uetr)) {
head3 += "{121:"+uetr+"}";
}
map.put("head3", head3);
} catch (Exception e) {
throw new SwiftException(e.getMessage());
}
public void withBlock3() throws SwiftException {
super.withBlock3();
SwiftBlock3 block3 = context.get(SwiftMessage.class).getBlock3();
Document document = (Document)context.get(Mx2MtContextIdentifier.MX_XMl_DOCUMENT, true);
String bodyParentPath = (String)context.get(Mx2MtContextIdentifier.BODY_PARENT_ELEMENT_NAME, true);
String serviceType = "";
int serviceLevelCount = getXmlNodeCounts(bodyParentPath, document, "CdtTrfTxInf.PmtTpInf.SvcLvl");
if (serviceLevelCount > 0) {
for (int i=0; i<serviceLevelCount; i++) {
String serviceLevelCode = getXmlNodeValue(bodyParentPath, document, "CdtTrfTxInf.PmtTpInf.SvcLvl("+i+").Cd");
if (ServiceLevelCode.G001.value().equals(serviceLevelCode)
|| ServiceLevelCode.G002.value().equals(serviceLevelCode)
|| ServiceLevelCode.G003.value().equals(serviceLevelCode)
|| ServiceLevelCode.G004.value().equals(serviceLevelCode)) {
serviceType = serviceLevelCode.substring(1);
break;
}
}
}
if (StringUtil.isNotEmpty(serviceType)) {
block3.getTags().add(new Tag("111", serviceType));
}
String uetr = getXmlNodeValue(bodyParentPath, document, "CdtTrfTxInf.PmtId.UETR");
if (StringUtil.isNotEmpty(uetr)) {
block3.getTags().add(new Tag("121", uetr));
}
}
@Override
public List<Mx2MtFieldsGenerate> getFieldsGenerateList() {
List<Mx2MtFieldsGenerate> fieldsGenerateList = new ArrayList<>();
fieldsGenerateList.add(new Field13CGenerate());
public List<Mx2MtTagsGenerate> getGenerateTagList() {
List<Mx2MtTagsGenerate> fieldsGenerateList = new ArrayList<>();
fieldsGenerateList.add(new Field20Generate());
fieldsGenerateList.add(new Field13CGenerate());
fieldsGenerateList.add(new Field23BGenerate());
fieldsGenerateList.add(new Field23EGenerate());
fieldsGenerateList.add(new Field26TGenerate());
......@@ -70,11 +87,6 @@ public class Mx2Mt103Creator extends AbstractMx2MtCreator {
}
@Override
public void postProcess() {
//TODO validate
}
@Override
protected String getMtType() {
return Mx2MtConstants.MT_TYPE_103;
}
......
package com.brilliance.swift.mx2mt.mt103.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.util.DateUtil;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
import com.brilliance.swift.util.StringUtil;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.Tag;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import java.util.ArrayList;
import java.util.List;
public class Field13CGenerate extends AbstractMx2MtFieldsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field13CGenerate.class);
public class Field13CGenerate extends AbstractMx2MtTagsGenerate {
private static String name = "13C";
@Override
public void fieldsGenerate() throws SwiftException {
public void tagGenerate() throws SwiftException {
try {
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
List<String> filed13CList = new ArrayList<>();
String dbtDtTmStr = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.SttlmTmIndctn.DbtDtTm");
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
String dbtDtTmStr = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.SttlmTmIndctn.DbtDtTm");
if (StringUtil.isNotEmpty(dbtDtTmStr)) {
XMLGregorianCalendar dbtDtTm = DatatypeFactory.newInstance().newXMLGregorianCalendar(dbtDtTmStr);
String hourTime = DateUtil.format(dbtDtTm, "HHmm");
filed13CList.add("/SNDTIME/"+hourTime+"+0800");
String value = "/SNDTIME/" + String.valueOf(dbtDtTm.getHour()) + String.valueOf(dbtDtTm.getMinute()) + dbtDtTmStr.substring(dbtDtTmStr.length()-6);
tags.add(new Tag(name, value));
}
String cdtDtTmStr = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.SttlmTmIndctn.CdtDtTm");
String cdtDtTmStr = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.SttlmTmIndctn.CdtDtTm");
if (StringUtil.isNotEmpty(cdtDtTmStr)) {
XMLGregorianCalendar cdtDtTm = DatatypeFactory.newInstance().newXMLGregorianCalendar(cdtDtTmStr);
String hourTime = DateUtil.format(cdtDtTm, "HHmm");
filed13CList.add("/RNCTIME/"+hourTime+"+0800");
String value = "/RNCTIME/" + String.valueOf(cdtDtTm.getHour()) + String.valueOf(cdtDtTm.getMinute()) + dbtDtTmStr.substring(cdtDtTmStr.length()-6);
tags.add(new Tag(name, value));
}
String clsTmStr = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.SttlmTmReq.CLSTm");
if (StringUtil.isNotEmpty(clsTmStr)) {
XMLGregorianCalendar clsTm = DatatypeFactory.newInstance().newXMLGregorianCalendar(clsTmStr);
String value = "/CLSTIME/" + String.valueOf(clsTm.getHour()) + String.valueOf(clsTm.getMinute()) + clsTmStr.substring(clsTmStr.length()-6);
tags.add(new Tag(name, value));
}
String tillTmStr = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.SttlmTmReq.TillTm");
if (StringUtil.isNotEmpty(tillTmStr)) {
XMLGregorianCalendar tillTm = DatatypeFactory.newInstance().newXMLGregorianCalendar(tillTmStr);
String value = "/TILTIME/" + String.valueOf(tillTm.getHour()) + String.valueOf(tillTm.getMinute()) + tillTmStr.substring(tillTmStr.length()-6);
tags.add(new Tag(name, value));
}
String frTmStr = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.SttlmTmReq.FrTm");
if (StringUtil.isNotEmpty(frTmStr)) {
XMLGregorianCalendar frTm = DatatypeFactory.newInstance().newXMLGregorianCalendar(frTmStr);
String value = "/FROTIME/" + String.valueOf(frTm.getHour()) + String.valueOf(frTm.getMinute()) + frTmStr.substring(frTmStr.length()-6);
tags.add(new Tag(name, value));
}
String clsDtTmStr = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.SttlmTmReq.CLSTm");
if (StringUtil.isNotEmpty(clsDtTmStr)) {
XMLGregorianCalendar clsDtTm = DatatypeFactory.newInstance().newXMLGregorianCalendar(clsDtTmStr);
String hourTime = DateUtil.format(clsDtTm, "HHmm");
filed13CList.add("/CLSTIME/"+hourTime+"+0800");
String rejTmStr = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.SttlmTmReq.RjctTm");
if (StringUtil.isNotEmpty(rejTmStr)) {
XMLGregorianCalendar rejTm = DatatypeFactory.newInstance().newXMLGregorianCalendar(rejTmStr);
String value = "/REJTIME/" + String.valueOf(rejTm.getHour()) + String.valueOf(rejTm.getMinute()) + rejTmStr.substring(rejTmStr.length()-6);
tags.add(new Tag(name, value));
}
map.put("field13CList", filed13CList);
} catch(Exception e) {
} catch(DatatypeConfigurationException e) {
throw new SwiftException("ERROR", e.getMessage());
}
}
......
package com.brilliance.swift.mx2mt.mt103.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
import com.brilliance.swift.util.StringUtil;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.Tag;
import java.util.List;
/**
* <GrpHdr><MsgId>
* CdtTrfTxInf.PmtId.InstrId
* GrpHdr.MsgId
* AppHdr.BizMsgIdr
*/
public class Field20Generate extends AbstractMx2MtFieldsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field20Generate.class);
public class Field20Generate extends AbstractMx2MtTagsGenerate {
private static String name = "20";
@Override
public void fieldsGenerate() throws SwiftException {
try {
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String msgId = getXmlNodeValue(Mx2MtConstants.GRPHDR_PARENT_ELEMENT_NAME, document, "GrpHdr.MsgId");
map.put("field20", msgId);
} catch(Exception e) {
throw new SwiftException("ERROR", e.getMessage());
public void tagGenerate() throws SwiftException {
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
String messageId = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.PmtId.InstrId");
if (StringUtil.isEmpty(messageId)) {
messageId = getXmlNodeValue(grpHdrParentElementName, document, "GrpHdr.MsgId");
}
if (StringUtil.isEmpty(messageId)) {
messageId = getXmlNodeValue(appHdrParentElementName, document, "AppHdr.BizMsgIdr");
}
if (StringUtil.isNotEmpty(messageId)) {
tags.add(new Tag(name, messageId));
}
}
}
package com.brilliance.swift.mx2mt.mt103.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.Tag;
import java.util.List;
/**
* 若<Cd>节点值为“SDVA”,则取默认值“CRED”,否则直接取<Prtry>节点作为23B的值
* <CdtTrfTxInf>[1]<PmtTpInf><SvcLvl><Cd>
* <CdtTrfTxInf>[1]<PmtTpInf><SvcLvl><Prtry>
*
* 23B 默认是 CRED
*/
public class Field23BGenerate extends AbstractMx2MtFieldsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field23BGenerate.class);
public class Field23BGenerate extends AbstractMx2MtTagsGenerate {
private static String name = "23B";
@Override
public void fieldsGenerate() throws SwiftException {
try {
String field23B = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String cd = getXmlNodeValue(Mx2MtConstants.GRPHDR_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.PmtTpInf.SvcLvl.Cd");
field23B = "SDVA".equals(cd) ? "CRED" : getXmlNodeValue(Mx2MtConstants.GRPHDR_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.PmtTpInf.SvcLvl.Prtry");
map.put("field23B",field23B);
} catch(Exception e) {
throw new SwiftException("ERROR", e.getMessage());
}
public void tagGenerate() throws SwiftException {
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
tags.add(new Tag(name, "CRED"));
}
}
package com.brilliance.swift.mx2mt.mt103.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
import com.brilliance.swift.util.StringUtil;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.brilliance.swift.vo.common.CategoryPurposeCode;
import com.brilliance.swift.vo.common.ServiceLevelCode;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.Tag;
import java.util.ArrayList;
import java.util.List;
/**
* //1)code部分的取值:
* //1.1)若<PmtTpInf><SvcLvl><Cd>节点为“SDVA”,则取值“SDVA”;
* //1.2)若<CtgyPurp><Cd>节点有值,则直接取此节点作为23E的值;
* //1.3)若<InstrForCdtrAgt><Cd>有值,则直接取此节点作为23E的值
* //2)直接取节点<InstrInf>的内容作为addtion information的值
* <CdtTrfTxInf>[1]<PmtTpInf><CtgyPurp><Cd>
* <CdtTrfTxInf>[1]<InstrForCdtrAgt><Cd>
* <CdtTrfTxInf>[1]<InstrForCdtrAgt><InstrInf>
*
*/
public class Field23EGenerate extends AbstractMx2MtFieldsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field23EGenerate.class);
public class Field23EGenerate extends AbstractMx2MtTagsGenerate {
private static String name = "23E";
@Override
public void fieldsGenerate() throws SwiftException {
try {
List<String> field23EList = new ArrayList<>();
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String svclvlCd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.PmtTpInf.SvcLvl.Cd");
if ("SDVA".equals(svclvlCd)) {
field23EList.add(svclvlCd);
public void tagGenerate() throws SwiftException {
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
//CdtTrfTxInf.PmtTpInf.SvcLvl
int svcLvlCount = getXmlNodeCounts(bodyHdrParentElementName, document, "CdtTrfTxInf.PmtTpInf.SvcLvl");
if (svcLvlCount > 0) {
for (int i=0; i<svcLvlCount; i++) {
String code = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.PmtTpInf.SvcLvl("+i+").Cd");
if (ServiceLevelCode.SDVA.value().equals(code)) {
tags.add(new Tag(name, code));
break;
}
}
}
//CdtTrfTxInf.PmtTpInf.CtgyPurp.Cd
String ctgyPurpCode = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.PmtTpInf.CtgyPurp.Cd");
String ctgyPurpProprietary = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.PmtTpInf.CtgyPurp.Prtry");
if (CategoryPurposeCode.INTC.value().equals(ctgyPurpCode) || CategoryPurposeCode.CORT.value().equals(ctgyPurpCode)) {
tags.add(new Tag(name, ctgyPurpCode));
} else {
String proprietary = CategoryPurposeCode.INTC.value() + " " + CategoryPurposeCode.CORT.value();
if (proprietary.equalsIgnoreCase(ctgyPurpProprietary)) {
tags.add(new Tag(name, CategoryPurposeCode.INTC.value()));
tags.add(new Tag(name, CategoryPurposeCode.CORT.value()));
}
String ctgyPurpCd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.PmtTpInf.CtgyPurp.Cd");
if (StringUtil.isNotEmpty(ctgyPurpCd)) {
field23EList.add(ctgyPurpCd);
}
//CdtTrfTxInf.InstrForCdtrAgt
int instrForCdtrAgtCount = getXmlNodeCounts(bodyHdrParentElementName, document, "CdtTrfTxInf.InstrForCdtrAgt");
if (instrForCdtrAgtCount > 0) {
List<String> list = new ArrayList<>();
String totalInstrInf = "";
for (int i=0; i<instrForCdtrAgtCount; i++) {
if (i == 2) break;//只取2个CdtrAgt
String code = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.InstrForCdtrAgt("+i+").Cd");
String instrInf = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.InstrForCdtrAgt("+i+").InstrInf");
if (StringUtil.isNotEmpty(code)) {
list.addAll(mx_to_mt23E(code, instrInf));
} else {
totalInstrInf += instrInf;
}
}
String instrForCdtrAgtCd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.InstrForCdtrAgt.Cd");
if (StringUtil.isNotEmpty(instrForCdtrAgtCd)) {
String instrInf = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.InstrForCdtrAgt.InstrInf");
if (StringUtil.isNotEmpty(instrInf)) {
if (instrInf.length() > 30) {
instrInf = instrInf.substring(0, 30);
}
instrForCdtrAgtCd += "/" + instrInf;
if (totalInstrInf.length() > 0) {
list.addAll(mx_to_mt23E_BIS(totalInstrInf));
}
if (list.size() > 0) {
for (String value : list) {
tags.add(new Tag(name, value));
}
field23EList.add(instrForCdtrAgtCd);
}
map.put("field23EList", field23EList);
} catch(Exception e) {
throw new SwiftException("ERROR", e.getMessage());
}
}
}
package com.brilliance.swift.mx2mt.mt103.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
import com.brilliance.swift.util.StringUtil;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.Tag;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* <CdtTrfTxInf>[1]<Purp><Prtry>
*/
public class Field26TGenerate extends AbstractMx2MtFieldsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field26TGenerate.class);
public class Field26TGenerate extends AbstractMx2MtTagsGenerate {
private static String name = "26T";
@Override
public void fieldsGenerate() throws SwiftException {
try {
String field26T = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
field26T = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.Purp.Prtry");
map.put("field26T",field26T);
} catch (Exception e) {
throw new SwiftException("ERROR", e.getMessage());
public void tagGenerate() throws SwiftException {
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
String proprietary = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.Purp.Prtry");
if (StringUtil.isNotEmpty(proprietary)) {
String regex = ".*:26T:(.*).*";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(proprietary);
if (m.find()) {
/**
* group(0)就是指的整个串,group(1)指的是第一个括号里的东西,group(2)指的第二个括号里的东西
*/
String code = m.group(1);
if (code.matches("[A-Z0-9]{3}")) {
tags.add(new Tag(name, code));
}
}
}
}
}
package com.brilliance.swift.mx2mt.mt103.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
import com.brilliance.swift.util.DateUtil;
import com.brilliance.swift.util.NumberUtil;
import com.brilliance.swift.util.StringUtil;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.Tag;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import java.math.BigDecimal;
import java.util.List;
public class Field32AGenerate extends AbstractMx2MtFieldsGenerate {
public class Field32AGenerate extends AbstractMx2MtTagsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field32AGenerate.class);
private static String name = "32A";
@Override
public void fieldsGenerate() throws SwiftException {
public void tagGenerate() throws SwiftException {
try {
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
String intrBkSttlmDtStr = "";
String intrBkSttlmAmt = "";
String intrBkSttlmccy = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String intrBkSttlmDtValue = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.IntrBkSttlmDt");
String intrBkSttlmDtValue = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.IntrBkSttlmDt");
if (StringUtil.isNotEmpty(intrBkSttlmDtValue)) {
XMLGregorianCalendar intrBkSttlmDt = DatatypeFactory.newInstance().newXMLGregorianCalendar(intrBkSttlmDtValue);
intrBkSttlmDtStr = DateUtil.format(intrBkSttlmDt, "yyMMdd");
}
String amt = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.IntrBkSttlmAmt");
String ccy = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.IntrBkSttlmAmt@Ccy");
String amt = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.IntrBkSttlmAmt");
String ccy = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.IntrBkSttlmAmt@Ccy");
if (StringUtil.isNotEmpty(amt) && StringUtil.isNotEmpty(ccy)) {
intrBkSttlmAmt = NumberUtil.formatAmt(new BigDecimal(amt), ccy);
intrBkSttlmccy = ccy;
}
map.put("field32A", intrBkSttlmDtStr+intrBkSttlmccy+intrBkSttlmAmt);
} catch (Exception e) {
tags.add(new Tag(name, intrBkSttlmDtStr+intrBkSttlmccy+intrBkSttlmAmt));
} catch (DatatypeConfigurationException e) {
throw new SwiftException("ERROR", e.getMessage());
}
}
......
package com.brilliance.swift.mx2mt.mt103.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
import com.brilliance.swift.mx2mt.Mx2MtContextIdentifier;
import com.brilliance.swift.util.NumberUtil;
import com.brilliance.swift.util.StringUtil;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.brilliance.swift.util.SwiftTransferUtil;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.Tag;
import java.math.BigDecimal;
import java.util.List;
public class Field33BGenerate extends AbstractMx2MtFieldsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field33BGenerate.class);
public class Field33BGenerate extends AbstractMx2MtTagsGenerate {
private static String name = "33B";
@Override
public void fieldsGenerate() throws SwiftException {
try {
String field33B = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String amt = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.InstdAmt");
String ccy = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.InstdAmt@Ccy");
if (StringUtil.isNotEmpty(amt) && StringUtil.isNotEmpty(ccy)) {
field33B = ccy + NumberUtil.formatAmt(new BigDecimal(amt), ccy);
public void tagGenerate() throws SwiftException {
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
String amt = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.InstdAmt");
String ccy = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.InstdAmt@Ccy");
if (StringUtil.isNotEmpty(amt) && StringUtil.isNotEmpty(ccy)) {
tags.add(new Tag(name, ccy + NumberUtil.formatAmt(new BigDecimal(amt), ccy)));
} else {
String senderBic = (String)context.get(Mx2MtContextIdentifier.MX_SENDER_BIC, true);
String receiverBic = (String)context.get(Mx2MtContextIdentifier.MX_RECEIVER_BIC, true);
if (StringUtil.isNotEmpty(senderBic)
&& SwiftTransferUtil.checkInEuCountryList(senderBic.substring(4, 6))
&& StringUtil.isNotEmpty(receiverBic)
&& SwiftTransferUtil.checkInEuCountryList(receiverBic.substring(4, 6))){
amt = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.IntrBkSttlmAmt");
ccy = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.IntrBkSttlmAmt@Ccy");
if (StringUtil.isNotEmpty(amt) && StringUtil.isNotEmpty(ccy)) {
tags.add(new Tag(name, ccy+NumberUtil.formatAmt(new BigDecimal(amt), ccy)));
}
}
map.put("field33B", field33B);
} catch (Exception e) {
throw new SwiftException(e.getMessage());
}
}
}
package com.brilliance.swift.mx2mt.mt103.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
import com.brilliance.swift.util.StringUtil;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.Tag;
public class Field36Generate extends AbstractMx2MtFieldsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field36Generate.class);
import java.math.BigDecimal;
import java.util.List;
public class Field36Generate extends AbstractMx2MtTagsGenerate {
private static String name = "36";
@Override
public void fieldsGenerate() throws SwiftException {
try {
String field36 = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String exchangeRate = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.XchgRate");
if (StringUtil.isNotEmpty(exchangeRate)) {
field36 = exchangeRate.replace(".", ",");
public void tagGenerate() throws SwiftException {
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
String exchangeRateStr = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.XchgRate");
if (StringUtil.isNotEmpty(exchangeRateStr)) {
exchangeRateStr = String.valueOf(new BigDecimal(exchangeRateStr));
if (exchangeRateStr.startsWith("-")) {
exchangeRateStr = exchangeRateStr.replace("-", "");
}
if(exchangeRateStr.indexOf(".") > 0){//去掉小数点后不需要的0
exchangeRateStr = exchangeRateStr.replaceAll("0+?$", "");
}
map.put("field36",field36);
} catch (Exception e) {
throw new SwiftException("ERROR", e.getMessage());
exchangeRateStr = exchangeRateStr.replace(".", ",");//小数点替换成,
tags.add(new Tag(name, exchangeRateStr));
}
}
}
......@@ -2,87 +2,58 @@ package com.brilliance.swift.mx2mt.mt103.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
import com.brilliance.swift.util.StringUtil;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.Tag;
import java.util.List;
/**
* 1,如果<AnyBIC>节点有值,则设置50 option为“A”,且BIC为此节点的值
* 2,若节点<IBAN>有值,则在此节点值前面加上“/”后,作为50的账号;
* 3,若节点<Othr><Id>有值,则在此节点值前面加上“//CH”后,作为50的账号;
* <CdtTrfTxInf>[1]<Dbtr><Id><OrgId><AnyBIC>
* <CdtTrfTxInf>[1]<DbtrAcct><Id><IBAN>
* <CdtTrfTxInf>[1]<DbtrAcct><Id><Othr><Id>
* 1,待补充???
* 2,账号取值规则与50A相同
* 1,若<Dbtr><Nm>有录入,则设置50 option为“K”,且名称取自此节点,而地址需要合并截取???
* 2,账号取值规则与50A相同
* <CdtTrfTxInf>[1]<Dbtr><Nm>
* <CdtTrfTxInf>[1]<Dbtr><PstlAdr><AdrLine>
*
*/
public class Field50AGenerate extends AbstractMx2MtFieldsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field50AGenerate.class);
public class Field50AGenerate extends AbstractMx2MtTagsGenerate {
private static String name_A = "50A";
private static String name_F = "50F";
private static String name_K = "50K";
@Override
public void fieldsGenerate() throws SwiftException {
public void tagGenerate() throws SwiftException {
//TODO 为F条件待补充
try {
String field50Option = "";
String field50 = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String bicCode = getBicCode(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.Dbtr.Id.OrgId");
String account = getAccount();
String name = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.Dbtr.Nm");
if (StringUtil.isNotEmpty(bicCode)) {
field50Option = "A";
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
String bicCode = mx_to_mtAnyBIC(bodyHdrParentElementName + ".CdtTrfTxInf.Dbtr");
String account = mx_to_mtAccount(bodyHdrParentElementName + ".CdtTrfTxInf.DbtrAcct");
String value = "";
if (StringUtil.isNotEmpty(bicCode)) {
if (StringUtil.isNotEmpty(account)) {
value = account + Mx2MtConstants.NEW_LINE + bicCode;
} else {
value = bicCode;
}
tags.add(new Tag(name_A, value));
} else {
String name = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.Dbtr.Nm");
int addressLineCount = getXmlNodeCounts(bodyHdrParentElementName, document, "CdtTrfTxInf.Dbtr.PstlAdr.AdrLine");
if (addressLineCount > 0) {
String mtNameAddress = mx_to_mtFinancialInstitutionNameAndUnstructuredAddress(bodyHdrParentElementName + ".CdtTrfTxInf.Dbtr");
if (StringUtil.isNotEmpty(account)) {
field50 = account + Mx2MtConstants.NEW_LINE + bicCode;
value = account + Mx2MtConstants.NEW_LINE + mtNameAddress;
} else {
field50 = bicCode;
value = mtNameAddress;
}
} else if (StringUtil.isNotEmpty(name)){
field50Option = "K";
if (name.length() > 35) name = name.substring(0, 35);
tags.add(new Tag(name_K, value));
} else if (StringUtil.isNotEmpty(name)) {
if (StringUtil.isNotEmpty(account)) {
field50 = account + Mx2MtConstants.NEW_LINE + name;
value = account + Mx2MtConstants.NEW_LINE + name;
} else {
field50 = name;
value = name;
}
int addressCounts = getXmlNodeCounts(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.Dbtr.PstlAdr.AdrLine");
if (addressCounts > 0) {
for (int i=0; i<addressCounts; i++) {
if (i == 3) break;
String address = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.Dbtr.PstlAdr.AdrLine("+i+")");
if (address.length() > 35) address = address.substring(0, 35);
field50 += Mx2MtConstants.NEW_LINE + address;
}
}
}
map.put("field50Option", field50Option);
map.put("field50", field50);
} catch (Exception e) {
throw new SwiftException(e.getMessage());
}
}
private String getAccount() {
try {
String account = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String iban = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.DbtrAcct.Id.IBAN");
String otherId = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.DbtrAcct.Id.Othr.Id");
if (StringUtil.isNotEmpty(iban)) {
account = "/" + iban;
} else if (StringUtil.isNotEmpty(otherId)) {
account = "//CH" + otherId;
}
if (StringUtil.isNotEmpty(account) && account.length() > 35) {
account = account.substring(0, 35);
tags.add(new Tag(name_K, value));
}
return account;
} catch (Exception e) {
throw new SwiftException(e.getMessage());
}
}
}
package com.brilliance.swift.mx2mt.mt103.impl;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
public class Field51AGenerate extends AbstractMx2MtFieldsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field51AGenerate.class);
public class Field51AGenerate extends AbstractMx2MtTagsGenerate {
@Override
public void fieldsGenerate() throws SwiftException {
map.put("field51", "");
public void tagGenerate() throws SwiftException {
}
}
......@@ -2,86 +2,67 @@ package com.brilliance.swift.mx2mt.mt103.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
import com.brilliance.swift.util.StringUtil;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.Tag;
import java.util.List;
/**
* 1,若节点<BICFI>有值,则设置52 option为“A”,同时BIC取此栏位;
* 2,若节点<IBAN>有值,则作为52的账号;
* 3,若节点<Othr><SchmeNm><Cd>有值,则取“//CH”+<Othr><Id>,则作为52的账号;否则直接取<Othr><Id>,则作为52的账号。
* <CdtTrfTxInf>[1]<DbtrAgt><FinInstnId><BICFI>
* <CdtTrfTxInf>[1]<DbtrAgtAcct><Id><IBAN>
* <CdtTrfTxInf>[1]<DbtrAgtAcct><Id><Othr><Id>
* <CdtTrfTxInf>[1]<DbtrAgtAcct><Id><Othr><SchmeNm><Cd>
* * 1,若节点<Nm>有值,则设置52 option为“D”,且名称取自此节点,而地址需要合并截取???
* * 2,账号取值规则和节点与52A相同
* * <CdtTrfTxInf>[1]<DbtrAgt><FinInstnId><Nm>
* * <CdtTrfTxInf>[1]<DbtrAgt><FinInstnId><PstlAdr><AdrLine>[1],<AdrLine>[2],<AdrLine>[3]
*对于所有代理行,如果xml报文中有代理行的bic,并且账户和清算代码都存在,则MT账号取账户;
* * 如果代理行没有bic,MT账号优先取清算代码,没有的话再取账户。
*/
public class Field52AGenerate extends AbstractMx2MtFieldsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field52AGenerate.class);
public class Field52AGenerate extends AbstractMx2MtTagsGenerate {
private static String name_A = "52A";
private static String name_D = "52D";
@Override
public void fieldsGenerate() throws SwiftException {
try {
String field52Option = "";
String field52 = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String bicCode = getBicCode(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.DbtrAgt.FinInstnId");
String account = getAccount();
String name = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.DbtrAgt.FinInstnId.Nm");
if (StringUtil.isNotEmpty(bicCode)) {
field52Option = "A";
if (StringUtil.isNotEmpty(account)) {
field52 = account + Mx2MtConstants.NEW_LINE + bicCode;
} else {
field52 = bicCode;
}
} else if (StringUtil.isNotEmpty(name)){
field52Option = "D";
if (name.length() > 35) name = name.substring(0, 35);
if (StringUtil.isNotEmpty(account)) {
field52 = account + Mx2MtConstants.NEW_LINE + name;
} else {
field52 = name;
}
int addressCounts = getXmlNodeCounts(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.DbtrAgt.FinInstnId.PstlAdr.AdrLine");
if (addressCounts > 0) {
for (int i=0; i<addressCounts; i++) {
if (i == 3) break;
String address = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.DbtrAgt.FinInstnId.PstlAdr.AdrLine("+i+")");
if (address.length() > 35) address = address.substring(0, 35);
field52 += Mx2MtConstants.NEW_LINE + address;
}
}
public void tagGenerate() throws SwiftException {
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
String bicCode = mx_to_mtBICFI(bodyHdrParentElementName + ".CdtTrfTxInf.DbtrAgt");
String account = mx_to_mtAccount(bodyHdrParentElementName + ".CdtTrfTxInf.DbtrAgtAcct");
String mtClearSystemId = mx_to_mtClearingIdentifier(bodyHdrParentElementName + ".CdtTrfTxInf.DbtrAgt");
String mtAccount = "";
String value = "";
if (StringUtil.isNotEmpty(bicCode)) {
if (StringUtil.isNotEmpty(account)) {
mtAccount = account;
} else {
mtAccount = mtClearSystemId;
}
map.put("field52Option", field52Option);
map.put("field52", field52);
} catch (Exception e) {
throw new SwiftException(e.getMessage());
}
}
private String getAccount() {
try {
String account = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String iban = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.DbtrAgtAcct.Id.IBAN");
String otherId = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.DbtrAgtAcct.Id.Othr.Id");
//String schmeNameCd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.DbtrAgtAcct.Id.SchmeNm.Cd");
if (StringUtil.isNotEmpty(iban)) {
account = "/" + iban;
} else if (StringUtil.isNotEmpty(otherId)) {
account = "//CH" + otherId;
if (StringUtil.isNotEmpty(mtAccount)) {
value = mtAccount + Mx2MtConstants.NEW_LINE + bicCode;
} else {
value = bicCode;
}
tags.add(new Tag(name_A, value));
} else {
String name = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.DbtrAgt.FinInstnId.Nm");
String countryCode = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.DbtrAgt.FinInstnId.PstlAdr.Ctry");
int addressLineCount = getXmlNodeCounts(bodyHdrParentElementName, document, "CdtTrfTxInf.DbtrAgt.FinInstnId.PstlAdr.AdrLine");
String mtNameAddress = "";
if (addressLineCount > 0) {
mtNameAddress = mx_to_mtFinancialInstitutionNameAndUnstructuredAddress(bodyHdrParentElementName+ ".CdtTrfTxInf.DbtrAgt.FinInstnId");
} else if (StringUtil.isNotEmpty(countryCode)) {
mtNameAddress = mx_to_mtFinancialInstitutionNameAndStructuredAddress(bodyHdrParentElementName+ ".CdtTrfTxInf.DbtrAgt.FinInstnId", false);
} else if (StringUtil.isNotEmpty(name)) {
mtNameAddress = mx_to_mtFinancialInstitutionNameAndUnstructuredAddress(bodyHdrParentElementName+ ".CdtTrfTxInf.DbtrAgt.FinInstnId");
}
if (StringUtil.isEmpty(mtNameAddress)) return;//如果name和地址不存在,返回。
if (StringUtil.isNotEmpty(mtClearSystemId)) {
mtAccount = mtClearSystemId;
} else {
mtAccount = account;
}
if (StringUtil.isNotEmpty(account) && account.length() > 35) {
account = account.substring(0, 35);
if (StringUtil.isNotEmpty(mtAccount)) {
value = mtAccount + Mx2MtConstants.NEW_LINE + mtNameAddress;
} else {
value = mtNameAddress;
}
return account;
} catch (Exception e) {
throw new SwiftException(e.getMessage());
tags.add(new Tag(name_D, value));
}
}
}
\ No newline at end of file
......@@ -2,85 +2,68 @@ package com.brilliance.swift.mx2mt.mt103.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
import com.brilliance.swift.util.StringUtil;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.Tag;
import java.util.List;
/**
* //1,若节点<BICFI>有值,则设置54 option为“A”,同时BIC取此栏位;
* //2,若节点<IBAN>有值,则作为54的账号;
* //3,若节点<Othr><Id>有值,则作为54的账号;
* //<GrpHdr><SttlmInf><InstdRmbrsmntAgt><FinInstnId><BICFI>
* //<GrpHdr><SttlmInf><InstdRmbrsmntAgtAcct><Id><IBAN>
* //<GrpHdr><SttlmInf><InstdRmbrsmntAgtAcct><Id><Othr><Id>
* * //1,若节点<Nm>有值,则设置54 option为“D”,且名称取自此节点,而地址需要合并截取???
* * //2,账号取值规则和节点与54A相同
* * //<GrpHdr><SttlmInf><InstdRmbrsmntAgt><FinInstnId><Nm>
* * //<GrpHdr><SttlmInf><InstdRmbrsmntAgt><FinInstnId><PstlAdr><AdrLine>[1],<AdrLine>[2],<AdrLine>[3]
*对于所有代理行,如果xml报文中有代理行的bic,并且账户和清算代码都存在,则MT账号取账户;
* * 如果代理行没有bic,MT账号优先取清算代码,没有的话再取账户。
*/
public class Field54AGenerate extends AbstractMx2MtFieldsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field54AGenerate.class);
public class Field54AGenerate extends AbstractMx2MtTagsGenerate {
private static String name_A = "54A";
private static String name_D = "54D";
@Override
public void fieldsGenerate() throws SwiftException {
try {
String field54Option = "";
String field54 = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String bicCode = getBicCode(Mx2MtConstants.GRPHDR_PARENT_ELEMENT_NAME, document, "GrpHdr.SttlmInf.InstdRmbrsmntAgt.FinInstnId");
String account = getAccount();
String name = getXmlNodeValue(Mx2MtConstants.GRPHDR_PARENT_ELEMENT_NAME, document, "GrpHdr.SttlmInf.InstdRmbrsmntAgt.FinInstnId.Nm");
if (StringUtil.isNotEmpty(bicCode)) {
field54Option = "A";
if (StringUtil.isNotEmpty(account)) {
field54 = account + Mx2MtConstants.NEW_LINE + bicCode;
} else {
field54 = bicCode;
}
} else if (StringUtil.isNotEmpty(name)){
field54Option = "D";
if (name.length() > 35) name = name.substring(0, 35);
if (StringUtil.isNotEmpty(account)) {
field54 = account + Mx2MtConstants.NEW_LINE + name;
} else {
field54 = name;
}
int addressCounts = getXmlNodeCounts(Mx2MtConstants.GRPHDR_PARENT_ELEMENT_NAME, document, "GrpHdr.SttlmInf.InstdRmbrsmntAgt.FinInstnId.PstlAdr.AdrLine");
if (addressCounts > 0) {
for (int i=0; i<addressCounts; i++) {
if (i == 3) break;
String address = getXmlNodeValue(Mx2MtConstants.GRPHDR_PARENT_ELEMENT_NAME, document, "GrpHdr.SttlmInf.InstdRmbrsmntAgt.FinInstnId.PstlAdr.AdrLine("+i+")");
if (address.length() > 35) address = address.substring(0, 35);
field54 += Mx2MtConstants.NEW_LINE + address;
}
}
public void tagGenerate() throws SwiftException {
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
String value = "";
String bicCode = mx_to_mtBICFI(grpHdrParentElementName + ".GrpHdr.SttlmInf.InstdRmbrsmntAgt");
String account = mx_to_mtAccount(grpHdrParentElementName + ".GrpHdr.SttlmInf.InstdRmbrsmntAgtAcct");
String mtClearSystemId = mx_to_mtClearingIdentifier(grpHdrParentElementName + ".GrpHdr.SttlmInf.InstdRmbrsmntAgt");
String mtAccount = "";
if (StringUtil.isNotEmpty(bicCode)) {
if (StringUtil.isNotEmpty(account)) {
mtAccount = account;
} else {
mtAccount = mtClearSystemId;
}
map.put("field54Option", field54Option);
map.put("field54", field54);
} catch (Exception e) {
throw new SwiftException(e.getMessage());
}
}
private String getAccount() {
try {
String account = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String iban = getXmlNodeValue(Mx2MtConstants.GRPHDR_PARENT_ELEMENT_NAME, document, "GrpHdr.SttlmInf.InstdRmbrsmntAgtAcct.Id.IBAN");
String otherId = getXmlNodeValue(Mx2MtConstants.GRPHDR_PARENT_ELEMENT_NAME, document, "GrpHdr.SttlmInf.InstdRmbrsmntAgtAcct.Id.Othr.Id");
//String schmeNameCd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.DbtrAgtAcct.Id.SchmeNm.Cd");
if (StringUtil.isNotEmpty(iban)) {
account = "/" + iban;
} else if (StringUtil.isNotEmpty(otherId)) {
account = "//CH" + otherId;
if (StringUtil.isNotEmpty(mtAccount)) {
value = mtAccount + Mx2MtConstants.NEW_LINE + bicCode;
} else {
value = bicCode;
}
tags.add(new Tag(name_A, value));
} else {
String name = getXmlNodeValue(grpHdrParentElementName, document, "GrpHdr.SttlmInf.InstdRmbrsmntAgt.FinInstnId.Nm");
String countryCode = getXmlNodeValue(grpHdrParentElementName, document, "GrpHdr.SttlmInf.InstdRmbrsmntAgt.FinInstnId.PstlAdr.Ctry");
int addressLineCount = getXmlNodeCounts(grpHdrParentElementName, document, "GrpHdr.SttlmInf.InstdRmbrsmntAgt.FinInstnId.PstlAdr.AdrLine");
String mtNameAddress = "";
if (addressLineCount > 0) {
mtNameAddress = mx_to_mtFinancialInstitutionNameAndUnstructuredAddress(grpHdrParentElementName+ ".GrpHdr.SttlmInf.InstdRmbrsmntAgt.FinInstnId");
} else if (StringUtil.isNotEmpty(countryCode)) {
mtNameAddress = mx_to_mtFinancialInstitutionNameAndStructuredAddress(grpHdrParentElementName+ ".GrpHdr.SttlmInf.InstdRmbrsmntAgt.FinInstnId", false);
} else if (StringUtil.isNotEmpty(name)) {
mtNameAddress = mx_to_mtFinancialInstitutionNameAndUnstructuredAddress(grpHdrParentElementName+ ".GrpHdr.SttlmInf.InstdRmbrsmntAgt.FinInstnId");
}
if (StringUtil.isEmpty(mtNameAddress)) return;//如果name和地址不存在,返回。
if (StringUtil.isNotEmpty(mtClearSystemId)) {
mtAccount = mtClearSystemId;
} else {
mtAccount = account;
}
if (StringUtil.isNotEmpty(account) && account.length() > 35) {
account = account.substring(0, 35);
if (StringUtil.isNotEmpty(mtAccount)) {
value = mtAccount + Mx2MtConstants.NEW_LINE + mtNameAddress;
} else {
value = mtNameAddress;
}
return account;
} catch (Exception e) {
throw new SwiftException(e.getMessage());
tags.add(new Tag(name_D, value));
}
}
}
......
......@@ -2,86 +2,68 @@ package com.brilliance.swift.mx2mt.mt103.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
import com.brilliance.swift.util.StringUtil;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.Tag;
import java.util.List;
/**
* //1,若节点<BICFI>有值,则设置55 option为“A”,同时BIC取此栏位
* //2,若节点<IBAN>有值,则作为55的账号;
* //3,若节点<Othr><Id>有值,则作为55的账号;
* //<GrpHdr><SttlmInf><ThrdRmbrsmntAgt><FinInstnId><BICFI>
* //<GrpHdr><SttlmInf><ThrdRmbrsmntAgtAcct><Id><IBAN>
* //<GrpHdr><SttlmInf><ThrdRmbrsmntAgtAcct><Id><Othr><Id>
* * //1,若节点<Nm>有值,则设置55 option为“D”,且名称取自此节点,而地址需要合并截取???
* * //2,账号取值规则和节点与55A相同
* * //<GrpHdr><SttlmInf><ThrdRmbrsmntAgt><FinInstnId><Nm>
* * //<GrpHdr><SttlmInf><ThrdRmbrsmntAgt><FinInstnId><PstlAdr><AdrLine>[1],<AdrLine>[2],<AdrLine>[3]
*对于所有代理行,如果xml报文中有代理行的bic,并且账户和清算代码都存在,则MT账号取账户;
* * 如果代理行没有bic,MT账号优先取清算代码,没有的话再取账户。
*/
public class Field55AGenerate extends AbstractMx2MtFieldsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field55AGenerate.class);
@Override
public void fieldsGenerate() throws SwiftException {
try {
String field55Option = "";
String field55 = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String bicCode = getBicCode(Mx2MtConstants.GRPHDR_PARENT_ELEMENT_NAME, document, "GrpHdr.SttlmInf.ThrdRmbrsmntAgt.FinInstnId");
String account = getAccount();
String name = getXmlNodeValue(Mx2MtConstants.GRPHDR_PARENT_ELEMENT_NAME, document, "GrpHdr.SttlmInf.ThrdRmbrsmntAgt.FinInstnId.Nm");
if (StringUtil.isNotEmpty(bicCode)) {
field55Option = "A";
if (StringUtil.isNotEmpty(account)) {
field55 = account + Mx2MtConstants.NEW_LINE + bicCode;
} else {
field55 = bicCode;
}
} else if (StringUtil.isNotEmpty(name)){
field55Option = "D";
if (name.length() > 35) name = name.substring(0, 35);
if (StringUtil.isNotEmpty(account)) {
field55 = account + Mx2MtConstants.NEW_LINE + name;
} else {
field55 = name;
}
int addressCounts = getXmlNodeCounts(Mx2MtConstants.GRPHDR_PARENT_ELEMENT_NAME, document, "GrpHdr.SttlmInf.ThrdRmbrsmntAgt.FinInstnId.PstlAdr.AdrLine");
if (addressCounts > 0) {
for (int i=0; i<addressCounts; i++) {
if (i == 3) break;
String address = getXmlNodeValue(Mx2MtConstants.GRPHDR_PARENT_ELEMENT_NAME, document, "GrpHdr.SttlmInf.ThrdRmbrsmntAgt.FinInstnId.PstlAdr.AdrLine("+i+")");
if (address.length() > 35) address = address.substring(0, 35);
field55 += Mx2MtConstants.NEW_LINE + address;
}
}
}
map.put("field55Option", field55Option);
map.put("field55", field55);
} catch (Exception e) {
throw new SwiftException(e.getMessage());
}
public class Field55AGenerate extends AbstractMx2MtTagsGenerate {
}
private static String name_A = "55A";
private String getAccount() {
try {
String account = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String iban = getXmlNodeValue(Mx2MtConstants.GRPHDR_PARENT_ELEMENT_NAME, document, "GrpHdr.SttlmInf.ThrdRmbrsmntAgtAcct.Id.IBAN");
String otherId = getXmlNodeValue(Mx2MtConstants.GRPHDR_PARENT_ELEMENT_NAME, document, "GrpHdr.SttlmInf.ThrdRmbrsmntAgtAcct.Id.Othr.Id");
//String schmeNameCd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.DbtrAgtAcct.Id.SchmeNm.Cd");
if (StringUtil.isNotEmpty(iban)) {
account = "/" + iban;
} else if (StringUtil.isNotEmpty(otherId)) {
account = "//CH" + otherId;
private static String name_D = "55D";
@Override
public void tagGenerate() throws SwiftException {
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
String value = "";
String bicCode = mx_to_mtBICFI(grpHdrParentElementName + ".GrpHdr.SttlmInf.ThrdRmbrsmntAgt");
String account = mx_to_mtAccount(grpHdrParentElementName + ".GrpHdr.SttlmInf.ThrdRmbrsmntAgtAcct");
String mtClearSystemId = mx_to_mtClearingIdentifier(grpHdrParentElementName + ".GrpHdr.SttlmInf.ThrdRmbrsmntAgt");
String mtAccount = "";
if (StringUtil.isNotEmpty(bicCode)) {
if (StringUtil.isNotEmpty(account)) {
mtAccount = account;
} else {
mtAccount = mtClearSystemId;
}
if (StringUtil.isNotEmpty(mtAccount)) {
value = mtAccount + Mx2MtConstants.NEW_LINE + bicCode;
} else {
value = bicCode;
}
tags.add(new Tag(name_A, value));
} else {
String name = getXmlNodeValue(grpHdrParentElementName, document, "GrpHdr.SttlmInf.ThrdRmbrsmntAgt.FinInstnId.Nm");
String countryCode = getXmlNodeValue(grpHdrParentElementName, document, "GrpHdr.SttlmInf.ThrdRmbrsmntAgt.FinInstnId.PstlAdr.Ctry");
int addressLineCount = getXmlNodeCounts(grpHdrParentElementName, document, "GrpHdr.SttlmInf.ThrdRmbrsmntAgt.FinInstnId.PstlAdr.AdrLine");
String mtNameAddress = "";
if (addressLineCount > 0) {
mtNameAddress = mx_to_mtFinancialInstitutionNameAndUnstructuredAddress(grpHdrParentElementName+ ".GrpHdr.SttlmInf.ThrdRmbrsmntAgt.FinInstnId");
} else if (StringUtil.isNotEmpty(countryCode)) {
mtNameAddress = mx_to_mtFinancialInstitutionNameAndStructuredAddress(grpHdrParentElementName+ ".GrpHdr.SttlmInf.ThrdRmbrsmntAgt.FinInstnId", false);
} else if (StringUtil.isNotEmpty(name)) {
mtNameAddress = mx_to_mtFinancialInstitutionNameAndUnstructuredAddress(grpHdrParentElementName+ ".GrpHdr.SttlmInf.ThrdRmbrsmntAgt.FinInstnId");
}
if (StringUtil.isEmpty(mtNameAddress)) return;//如果name和地址不存在,返回。
if (StringUtil.isNotEmpty(mtClearSystemId)) {
mtAccount = mtClearSystemId;
} else {
mtAccount = account;
}
if (StringUtil.isNotEmpty(account) && account.length() > 35) {
account = account.substring(0, 35);
if (StringUtil.isNotEmpty(mtAccount)) {
value = mtAccount + Mx2MtConstants.NEW_LINE + mtNameAddress;
} else {
value = mtNameAddress;
}
return account;
} catch (Exception e) {
throw new SwiftException(e.getMessage());
tags.add(new Tag(name_D, value));
}
}
}
......@@ -2,110 +2,73 @@ package com.brilliance.swift.mx2mt.mt103.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
import com.brilliance.swift.util.StringUtil;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.Tag;
import java.util.List;
/**
* //1,若节点<BICFI>有值,则设置56 option为“A”,同时BIC取此栏位;
* //2,若节点<IBAN>有值,则作为56A的账号;
* //3,若节点<Othr><Id>有值,则作为56A的账号;
* //<CdtTrfTxInf>[1]<IntrmyAgt1><FinInstnId><BICFI>
* //<CdtTrfTxInf>[1]<IntrmyAgt1Acct><Id><IBAN>
* //<CdtTrfTxInf>[1]<IntrmyAgt1Acct><Id><Othr><Id>
* //<CdtTrfTxInf>[1]<IntrmyAgt1Acct><Id><Othr><SchmeNm><Cd>
* //如果<IntrmyAgt1><FinInstnId><BICFI>为空,且<IntrmyAgt1><FinInstnId><Nm>为空,
* * //但节点<IBAN>有值,或者节点<Othr><Id>有值,则设置56option为“C”
* * //若节点<Id><Othr><Id>不为空,则取“//CH”+此节点作为账号,否则取节点<MmbId>作为账号:
* * //<CdtTrfTxInf>[1]<IntrmyAgt1><FinInstnId><ClrSysMmbId><ClrSysId><Cd>
* * //<CdtTrfTxInf>[1]<IntrmyAgt1><FinInstnId><ClrSysMmbId><ClrSysId><Prtry>
* * //<CdtTrfTxInf>[1]<IntrmyAgt1><FinInstnId><ClrSysMmbId><MmbId>
* * //<CdtTrfTxInf>[1]<IntrmyAgt1Acct><Id><Othr><Id>
* * //1,若节点<Nm>有值,则设置56 option为“D”,且名称取自此节点,而地址需要合并截取???
* * //2,账号取值规则和节点与56A相同
* * //<CdtTrfTxInf>[1]<IntrmyAgt1><FinInstnId><Nm>
* * //<CdtTrfTxInf>[1]<IntrmyAgt1><FinInstnId><PstlAdr><AdrLine>[1],<AdrLine>[2],<AdrLine>[3]
*对于所有代理行,如果xml报文中有代理行的bic,并且账户和清算代码都存在,则MT账号取账户;
* 如果代理行没有bic,MT账号优先取清算代码,没有的话再取账户。
*/
public class Field56AGenerate extends AbstractMx2MtFieldsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field56AGenerate.class);
public class Field56AGenerate extends AbstractMx2MtTagsGenerate {
private static String name_A = "56A";
private static String name_D = "56D";
@Override
public void fieldsGenerate() throws SwiftException {
try {
String field56Option = "";
String field56 = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String bicCode = getBicCode(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.IntrmyAgt1.FinInstnId");
String account = getAccount();
String name = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.IntrmyAgt1.FinInstnId.Nm");
if (StringUtil.isNotEmpty(bicCode)) {
field56Option = "A";
if (StringUtil.isNotEmpty(account)) {
field56 = account + Mx2MtConstants.NEW_LINE + bicCode;
} else {
field56 = bicCode;
}
} else if (StringUtil.isNotEmpty(name)){
field56Option = "D";
if (name.length() > 35) name = name.substring(0, 35);
if (StringUtil.isNotEmpty(account)) {
field56 = account + Mx2MtConstants.NEW_LINE + name;
} else {
field56 = name;
}
int addressCounts = getXmlNodeCounts(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.IntrmyAgt1.FinInstnId.PstlAdr.AdrLine");
if (addressCounts > 0) {
for (int i=0; i<addressCounts; i++) {
if (i == 3) break;
String address = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.IntrmyAgt1.FinInstnId.PstlAdr.AdrLine("+i+")");
if (address.length() > 35) address = address.substring(0, 35);
field56 += Mx2MtConstants.NEW_LINE + address;
}
}
} else if (StringUtil.isNotEmpty(account)){
field56Option = "C";
String iban = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.IntrmyAgt1Acct.Id.IBAN");
String otherId = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.IntrmyAgt1Acct.Id.Othr.Id");
String mmbId = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.IntrmyAgt1.FinInstnId.ClrSysMmbId.MmbId");
//String schmeNameCd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.DbtrAgtAcct.Id.SchmeNm.Cd");
if (StringUtil.isNotEmpty(otherId)) {
account = "//CH" + otherId;
} else if (StringUtil.isNotEmpty(mmbId)) {
account = "/" + mmbId;
} else {
account = "/" + iban;
}
if (account.length() > 35) {
account = account.substring(0, 35);
}
field56 = account;
public void tagGenerate() throws SwiftException {
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
String bicCode = mx_to_mtBICFI(bodyHdrParentElementName + ".CdtTrfTxInf.IntrmyAgt1");
String account = mx_to_mtAccount(bodyHdrParentElementName + ".CdtTrfTxInf.IntrmyAgt1Acct");
String mtClearSystemId = mx_to_mtClearingIdentifier(bodyHdrParentElementName + ".CdtTrfTxInf.IntrmyAgt1");
String mtClearChannelId = mx_to_mtClearingIdentifierAndChannel(bodyHdrParentElementName + ".CdtTrfTxInf.IntrmyAgt1");
String mtAccount = "";
String value = "";
if (StringUtil.isNotEmpty(bicCode)) {
if (StringUtil.isNotEmpty(account)) {
mtAccount = account;
} else if (StringUtil.isNotEmpty(mtClearChannelId)){
mtAccount = mtClearChannelId;
} else {
mtAccount = mtClearSystemId;
}
map.put("field56Option", field56Option);
map.put("field56", field56);
} catch (Exception e) {
throw new SwiftException(e.getMessage());
}
}
private String getAccount() {
try {
String account = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String iban = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.IntrmyAgt1Acct.Id.IBAN");
String otherId = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.IntrmyAgt1Acct.Id.Othr.Id");
//String schmeNameCd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.DbtrAgtAcct.Id.SchmeNm.Cd");
if (StringUtil.isNotEmpty(iban)) {
account = "/" + iban;
} else if (StringUtil.isNotEmpty(otherId)) {
account = "//CH" + otherId;
if (StringUtil.isNotEmpty(mtAccount)) {
value = mtAccount + Mx2MtConstants.NEW_LINE + bicCode;
} else {
value = bicCode;
}
tags.add(new Tag(name_A, value));
} else {
String name = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.IntrmyAgt1.FinInstnId.Nm");
String countryCode = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.IntrmyAgt1.FinInstnId.PstlAdr.Ctry");
int addressLineCount = getXmlNodeCounts(bodyHdrParentElementName, document, "CdtTrfTxInf.IntrmyAgt1.FinInstnId.PstlAdr.AdrLine");
String mtNameAddress = "";
if (addressLineCount > 0) {
mtNameAddress = mx_to_mtFinancialInstitutionNameAndUnstructuredAddress(bodyHdrParentElementName+ ".CdtTrfTxInf.IntrmyAgt1.FinInstnId");
} else if (StringUtil.isNotEmpty(countryCode)) {
mtNameAddress = mx_to_mtFinancialInstitutionNameAndStructuredAddress(bodyHdrParentElementName+ ".CdtTrfTxInf.IntrmyAgt1.FinInstnId", false);
} else if (StringUtil.isNotEmpty(name)) {
mtNameAddress = mx_to_mtFinancialInstitutionNameAndUnstructuredAddress(bodyHdrParentElementName+ ".CdtTrfTxInf.IntrmyAgt1.FinInstnId");
}
if (StringUtil.isEmpty(mtNameAddress)) return;//如果name和地址不存在,返回。
if (StringUtil.isNotEmpty(mtClearChannelId)) {
mtAccount = mtClearChannelId;
} else if (StringUtil.isNotEmpty(mtClearSystemId)) {
mtAccount = mtClearSystemId;
} else {
mtAccount = account;
}
if (StringUtil.isNotEmpty(account) && account.length() > 35) {
account = account.substring(0, 35);
if (StringUtil.isNotEmpty(mtAccount)) {
value = mtAccount + Mx2MtConstants.NEW_LINE + mtNameAddress;
} else {
value = mtNameAddress;
}
return account;
} catch (Exception e) {
throw new SwiftException(e.getMessage());
tags.add(new Tag(name_D, value));
}
}
}
......@@ -2,110 +2,73 @@ package com.brilliance.swift.mx2mt.mt103.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
import com.brilliance.swift.util.StringUtil;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.Tag;
import java.util.List;
/**
* //1,若节点<BICFI>有值,则设置57 option为“A”,同时BIC取此栏位;
* //2,若节点<IBAN>有值,则作为57A的账号;
* //3,若节点<Othr><Id>有值,则作为57A的账号;
* //<CdtTrfTxInf>[1]<CdtrAgt><FinInstnId><BICFI>
* //<CdtTrfTxInf>[1]<CdtrAgtAcct><Id><IBAN>
* //<CdtTrfTxInf>[1]<CdtrAgtAcct><Id><Othr><Id>
* //<CdtTrfTxInf>[1]<CdtrAgtAcct><Id><Othr><SchmeNm><Cd>
* * //如果<CdtrAgt><FinInstnId><BICFI>为空,且<CdtrAgt><FinInstnId><Nm>为空,
* * // 但节点<IBAN>有值,或者节点<Othr><Id>有值,则设置57 option为“C”
* * //若节点<Id><Othr><Id>不为空,则取“//CH”+此节点作为账号,否则取节点<MmbId>作为账号:
* * //<CdtTrfTxInf>[1]<CdtrAgt><FinInstnId><ClrSysMmbId><ClrSysId><Cd>
* * //<CdtTrfTxInf>[1]<CdtrAgt><FinInstnId><ClrSysMmbId><ClrSysId><Prtry>
* * //<CdtTrfTxInf>[1]<CdtrAgt><FinInstnId><ClrSysMmbId><MmbId>
* * //<CdtTrfTxInf>[1]<CdtrAgtAcct><Id><Othr><Id>
* * //1,若节点<Nm>有值,则设置57 option为“D”,且名称取自此节点,而地址需要合并截取???
* * //2,账号取值规则和节点与57A相同
* * //<CdtTrfTxInf>[1]<CdtrAgt><FinInstnId><Nm>
* * //<CdtTrfTxInf>[1]<CdtrAgt><FinInstnId><PstlAdr><AdrLine>[1],<AdrLine>[2],<AdrLine>[3]
*对于所有代理行,如果xml报文中有代理行的bic,并且账户和清算代码都存在,则MT账号取账户;
* * 如果代理行没有bic,MT账号优先取清算代码,没有的话再取账户。
*/
public class Field57AGenerate extends AbstractMx2MtFieldsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field57AGenerate.class);
public class Field57AGenerate extends AbstractMx2MtTagsGenerate {
private static String name_A = "57A";
private static String name_D = "57D";
@Override
public void fieldsGenerate() throws SwiftException {
try {
String field57Option = "";
String field57 = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String bicCode = getBicCode(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.CdtrAgt.FinInstnId");
String account = getAccount();
String name = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.CdtrAgt.FinInstnId.Nm");
if (StringUtil.isNotEmpty(bicCode)) {
field57Option = "A";
if (StringUtil.isNotEmpty(account)) {
field57 = account + Mx2MtConstants.NEW_LINE + bicCode;
} else {
field57 = bicCode;
}
} else if (StringUtil.isNotEmpty(name)){
field57Option = "D";
if (name.length() > 35) name = name.substring(0, 35);
if (StringUtil.isNotEmpty(account)) {
field57 = account + Mx2MtConstants.NEW_LINE + name;
} else {
field57 = name;
}
int addressCounts = getXmlNodeCounts(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.CdtrAgt.FinInstnId.PstlAdr.AdrLine");
if (addressCounts > 0) {
for (int i=0; i<addressCounts; i++) {
if (i == 3) break;
String address = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.CdtrAgt.FinInstnId.PstlAdr.AdrLine("+i+")");
if (address.length() > 35) address = address.substring(0, 35);
field57 += Mx2MtConstants.NEW_LINE + address;
}
}
} else if (StringUtil.isNotEmpty(account)){
field57Option = "C";
String iban = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.CdtrAgtAcct.Id.IBAN");
String otherId = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.CdtrAgtAcct.Id.Othr.Id");
String mmbId = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.CdtrAgt.FinInstnId.ClrSysMmbId.MmbId");
//String schmeNameCd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.DbtrAgtAcct.Id.SchmeNm.Cd");
if (StringUtil.isNotEmpty(otherId)) {
account = "//CH" + otherId;
} else if (StringUtil.isNotEmpty(mmbId)) {
account = "/" + mmbId;
} else {
account = "/" + iban;
}
if (account.length() > 35) {
account = account.substring(0, 35);
}
field57 = account;
public void tagGenerate() throws SwiftException {
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
String bicCode = mx_to_mtBICFI(bodyHdrParentElementName + ".CdtTrfTxInf.CdtrAgt");
String account = mx_to_mtAccount(bodyHdrParentElementName + ".CdtTrfTxInf.CdtrAgtAcct");
String mtClearSystemId = mx_to_mtClearingIdentifier(bodyHdrParentElementName + ".CdtTrfTxInf.CdtrAgt");
String mtClearChannelId = mx_to_mtClearingIdentifierAndChannel(bodyHdrParentElementName + ".CdtTrfTxInf.CdtrAgt");
String mtAccount = "";
String value = "";
if (StringUtil.isNotEmpty(bicCode)) {
if (StringUtil.isNotEmpty(account)) {
mtAccount = account;
} else if (StringUtil.isNotEmpty(mtClearChannelId)){
mtAccount = mtClearChannelId;
} else {
mtAccount = mtClearSystemId;
}
map.put("field57Option", field57Option);
map.put("field57", field57);
} catch (Exception e) {
throw new SwiftException(e.getMessage());
}
}
private String getAccount() {
try {
String account = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String iban = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.CdtrAgtAcct.Id.IBAN");
String otherId = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.CdtrAgtAcct.Id.Othr.Id");
//String schmeNameCd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.DbtrAgtAcct.Id.SchmeNm.Cd");
if (StringUtil.isNotEmpty(iban)) {
account = "/" + iban;
} else if (StringUtil.isNotEmpty(otherId)) {
account = "//CH" + otherId;
if (StringUtil.isNotEmpty(mtAccount)) {
value = mtAccount + Mx2MtConstants.NEW_LINE + bicCode;
} else {
value = bicCode;
}
tags.add(new Tag(name_A, value));
} else {
String name = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.CdtrAgt.FinInstnId.Nm");
String countryCode = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.CdtrAgt.FinInstnId.PstlAdr.Ctry");
int addressLineCount = getXmlNodeCounts(bodyHdrParentElementName, document, "CdtTrfTxInf.CdtrAgt.FinInstnId.PstlAdr.AdrLine");
String mtNameAddress = "";
if (addressLineCount > 0) {
mtNameAddress = mx_to_mtFinancialInstitutionNameAndUnstructuredAddress(bodyHdrParentElementName+ ".CdtTrfTxInf.CdtrAgt.FinInstnId");
} else if (StringUtil.isNotEmpty(countryCode)) {
mtNameAddress = mx_to_mtFinancialInstitutionNameAndStructuredAddress(bodyHdrParentElementName+ ".CdtTrfTxInf.CdtrAgt.FinInstnId", false);
} else if (StringUtil.isNotEmpty(name)) {
mtNameAddress = mx_to_mtFinancialInstitutionNameAndUnstructuredAddress(bodyHdrParentElementName+ ".CdtTrfTxInf.CdtrAgt.FinInstnId");
}
if (StringUtil.isEmpty(mtNameAddress)) return;//如果name和地址不存在,返回。
if (StringUtil.isNotEmpty(mtClearChannelId)) {
mtAccount = mtClearChannelId;
} else if (StringUtil.isNotEmpty(mtClearSystemId)) {
mtAccount = mtClearSystemId;
} else {
mtAccount = account;
}
if (StringUtil.isNotEmpty(account) && account.length() > 35) {
account = account.substring(0, 35);
if (StringUtil.isNotEmpty(mtAccount)) {
value = mtAccount + Mx2MtConstants.NEW_LINE + mtNameAddress;
} else {
value = mtNameAddress;
}
return account;
} catch (Exception e) {
throw new SwiftException(e.getMessage());
tags.add(new Tag(name_D, value));
}
}
}
......@@ -2,87 +2,84 @@ package com.brilliance.swift.mx2mt.mt103.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
import com.brilliance.swift.util.StringUtil;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.Tag;
import java.util.List;
/**
*1.如果bicCode = MX_To_MTAnyBIC(CdtTrfTxInf.Cdtr)有值,就是59A,account = MX_To_MTAccount(CdtTrfTxInf.CdtrAcct)
* 2.如果CdtTrfTxInf.Cdtr.PstlAdr.Ctry有值,就是59F,nameAddress = MX_To_MTPartyNameAndAddressLEI1(CdtTrfTxInf.Cdtr),account = MX_To_MTAccount(CdtTrfTxInf.CdtrAcct)
* 3.如果CdtTrfTxInf.Cdtr.PstlAdr.AdrLine有值,StructuredAddressIndicator = MX_To_MTAddressLineType(CdtTrfTxInf.Cdtr)
* 如果StructuredAddressIndicator = true, 就是59F,nameAddress = MX_To_MTPartyNameAndAddressLEI2(CdtTrfTxInf.Cdtr),account = MX_To_MTAccount(CdtTrfTxInf.CdtrAcct)
* 如果StructuredAddressIndicator = false, 就是59, nameAddress = MX_To_MTPartyNameAndUnstructuredAddress(CdtTrfTxInf.Cdtr),account = MX_To_MTAccount(CdtTrfTxInf.CdtrAcct)
* 4.如果CdtTrfTxInf.Cdtr.Nm有值,就是59, nameAddress = MX_To_MTPartyNameAndUnstructuredAddress(CdtTrfTxInf.Cdtr),account = MX_To_MTAccount(CdtTrfTxInf.CdtrAcct)
*
* "1,若节点<Nm>有值,则设置59 option为“”,且名称取自此节点,而地址需要合并截取???
* 2,若节点<IBAN>有值,则在此节点的值前面加上“/”后,作为59账号的值;
* 3,若节点<Othr><Id>有值,且节点<Othr><SchmeNm><Cd>有值,则在节点<Othr><Id>的值前面加上“//CH”后,作为59账号的值;
* 4,若节点<Othr><Id>有值,且节点<Othr><SchmeNm><Cd>没值,则在节点<Othr><Id>的值前面加上“/”后,作为59账号的值;" "<CdtTrfTxInf>[1]<Cdtr><Nm>
* <CdtTrfTxInf>[1]<Cdtr><PstlAdr><AdrLine>[1],<AdrLine>[2],<AdrLine>[3]
* <CdtTrfTxInf>[1]<CdtrAcct><Id><IBAN>
* <CdtTrfTxInf>[1]<CdtrAcct><Id><Othr><Id>
* <CdtTrfTxInf>[1]<CdtrAcct><Id><Othr><SchmeNm><Cd>"
* * 1,若节点<AnyBIC>有值,则设置59 option为“A”,同时BIC取此栏位;
* * 2,账号取值规则和节点与59相同
* * <CdtTrfTxInf>[1]<Cdtr><Id><OrgId><AnyBIC>
* **/
public class Field59Generate extends AbstractMx2MtFieldsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field59Generate.class);
public class Field59Generate extends AbstractMx2MtTagsGenerate {
private static String name_A = "59A";
private static String name_F = "59F";
private static String name = "59";
@Override
public void fieldsGenerate() throws SwiftException {
try {
String field59Option = "";
String field59 = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String bicCode = getBicCode(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.Cdtr.Id.OrgId");
String account = getAccount();
String name = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.Cdtr.Nm");
if (StringUtil.isNotEmpty(name)){
field59Option = "NOLETTER";
if (name.length() > 35) name = name.substring(0, 35);
public void tagGenerate() throws SwiftException {
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
String partyPath = bodyHdrParentElementName + ".CdtTrfTxInf.Cdtr";
String partyAcctPath = bodyHdrParentElementName + ".CdtTrfTxInf.CdtrAcct";
String bicCode = mx_to_mtAnyBIC(partyPath);
String account = mx_to_mtAccount(partyAcctPath);
String countryCode = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.Cdtr.PstlAdr.Ctry");
int addressLineCount = getXmlNodeCounts(bodyHdrParentElementName, document, "CdtTrfTxInf.Cdtr.PstlAdr.AdrLine");
String partyName = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.Cdtr.Nm");
String value = "";
if (StringUtil.isNotEmpty(bicCode)) {
if (StringUtil.isNotEmpty(account)) {
value = account + Mx2MtConstants.NEW_LINE + bicCode;
} else {
value = bicCode;
}
tags.add(new Tag(name_A, value));
} else if (StringUtil.isNotEmpty(countryCode)){
String nameAddress = mx_to_mtPartyNameAndAddressLEI1(partyPath);
if (StringUtil.isNotEmpty(account)) {
value = account + Mx2MtConstants.NEW_LINE + nameAddress;
} else {
value = nameAddress;
}
tags.add(new Tag(name_F, value));
} else if (addressLineCount > 0){
boolean structuredAddressIndicator = mx_to_mtAddressLineType(partyPath);
if (structuredAddressIndicator) {
String nameAddress = mx_to_mtPartyNameAndAddressLEI2(partyPath);
if (StringUtil.isNotEmpty(account)) {
field59 = account + Mx2MtConstants.NEW_LINE + name;
value = account + Mx2MtConstants.NEW_LINE + nameAddress;
} else {
field59 = name;
}
int addressCounts = getXmlNodeCounts(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.Cdtr.PstlAdr.AdrLine");
if (addressCounts > 0) {
for (int i=0; i<addressCounts; i++) {
if (i == 3) break;
String address = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.Cdtr.PstlAdr.AdrLine("+i+")");
if (address.length() > 35) address = address.substring(0, 35);
field59 += Mx2MtConstants.NEW_LINE + address;
}
value = nameAddress;
}
} else if (StringUtil.isNotEmpty(bicCode)) {
field59Option = "A";
tags.add(new Tag(name_F, value));
} else {
String nameAddress = mx_to_mtFinancialInstitutionNameAndUnstructuredAddress(partyPath);
if (StringUtil.isNotEmpty(account)) {
field59 = account + Mx2MtConstants.NEW_LINE + bicCode;
value = account + Mx2MtConstants.NEW_LINE + nameAddress;
} else {
field59 = bicCode;
value = nameAddress;
}
tags.add(new Tag(name, value));
}
map.put("field59Option", field59Option);
map.put("field59", field59);
} catch (Exception e) {
throw new SwiftException(e.getMessage());
}
}
private String getAccount() {
try {
String account = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String iban = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.CdtrAcct.Id.IBAN");
String otherId = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.CdtrAcct.Id.Othr.Id");
//String schmeNameCd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.DbtrAgtAcct.Id.SchmeNm.Cd");
if (StringUtil.isNotEmpty(iban)) {
account = "/" + iban;
} else if (StringUtil.isNotEmpty(otherId)) {
account = "//CH" + otherId;
}
if (StringUtil.isNotEmpty(account) && account.length() > 35) {
account = account.substring(0, 35);
} else if (StringUtil.isNotEmpty(partyName)){
String nameAddress = mx_to_mtFinancialInstitutionNameAndUnstructuredAddress(partyPath);
if (StringUtil.isNotEmpty(account)) {
value = account + Mx2MtConstants.NEW_LINE + nameAddress;
} else {
value = nameAddress;
}
return account;
} catch (Exception e) {
throw new SwiftException(e.getMessage());
tags.add(new Tag(name, value));
}
}
}
package com.brilliance.swift.mx2mt.mt103.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
import com.brilliance.swift.util.StringUtil;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.Tag;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 取此节点按4*35的格式拆分,放入70栏位中
* <CdtTrfTxInf>[1]<RmtInf><Ustrd>[1]
*70域取值规则:
* MX_To_MTRemittanceInformation()
* 参数1:CdtTrfTxInf.UltmtCdtr
* 参数2:CdtTrfTxInf.UltmtDbtr
* 参数3: CdtTrfTxInf.PmtId.EndToEndId
* 参数4:CdtTrfTxInf.RltdRmtInf.RmtId
* 参数5:CdtTrfTxInf.RmtInf
* 参数6:CdtTrfTxInf.Purp
* 1.如果参数4和参数5不存在
* ①如果参数1有值,/ULTB/MX_To_MTUltimateParty(CdtTrfTxInf.UltmtCdtr),长度超过140就截图139位,最后一位给+
* ②如果参数2有值,/ULTD/MX_To_MTUltimateParty(CdtTrfTxInf.UltmtDbtr),长度超过140就截图139位,最后一位给+
* ③如果参数6有值,并且CdtTrfTxInf.Purp.Prty 不能mapping 【:26T:[A-Z0-9]{3}】,/PURP/CdtTrfTxInf.Purp.Cd
* ④如果参数3有值,并且CdtTrfTxInf.PmtId.EndToEndId不等于NOTPROVIDED并且CdtTrfTxInf.RmtInf.Ustrd不包含/ROC/,那么/ROC/CdtTrfTxInf.PmtId.EndToEndId
* 2.如果参数4存在,/RELID/CdtTrfTxInf.RltdRmtInf.RmtId
* 3.如果参数5存在,
* CdtTrfTxInf.RmtInf.Ustrd有值,/URI/CdtTrfTxInf.RmtInf.Ustrd
* CdtTrfTxInf.RmtInf.Strd有值,/SRI/CdtTrfTxInf.RmtInf.Strd
*/
public class Field70Generate extends AbstractMx2MtFieldsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field70Generate.class);
public class Field70Generate extends AbstractMx2MtTagsGenerate {
private static String name = "70";
@Override
public void fieldsGenerate() throws SwiftException {
try {
String field70 = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
int ustrdCounts = getXmlNodeCounts(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.RmtInf.Ustrd");
if (ustrdCounts > 0) {
String ustrd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.RmtInf.Ustrd(0)");
field70 = StringUtil.getStringByEnter(ustrd, 35, 4);
}
map.put("field70", field70);
} catch (Exception e) {
throw new SwiftException("ERROR", e.getMessage());
public void tagGenerate() throws SwiftException {
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
String mt70FullString = "";
String mtUltimateCreditor = mx_to_mtUltimateParty(bodyHdrParentElementName + ".CdtTrfTxInf.UltmtCdtr");
if (StringUtil.isNotEmpty(mtUltimateCreditor)) {
String str = "/ULTB/" + mtUltimateCreditor;
if (str.length() > 140) str = str.substring(0, 139) + "+";
if (StringUtil.isEmpty(mt70FullString)) {
mt70FullString += str;
} else {
mt70FullString += "//" + str;
}
}
String mtUltimateDebtor = mx_to_mtUltimateParty(bodyHdrParentElementName + ".CdtTrfTxInf.UltmtDbtr");
if (StringUtil.isNotEmpty(mtUltimateDebtor)) {
String str = "/ULTD/" + mtUltimateDebtor;
if (str.length() > 140) str = str.substring(0, 139) + "+";
if (StringUtil.isEmpty(mt70FullString)) {
mt70FullString += str;
} else {
mt70FullString += "//" + str;
}
}
String mxPurposeCode = getXmlNodeValue(bodyHdrParentElementName, document, ".CdtTrfTxInf.Purp.Cd");
String mxPurposeProprietary = getXmlNodeValue(bodyHdrParentElementName, document, ".CdtTrfTxInf.Purp.Prtry");
boolean mxPurposeFlag = true;
if (StringUtil.isEmpty(mxPurposeCode)) {
mxPurposeFlag = false;
} else if (StringUtil.isNotEmpty(mxPurposeProprietary)) {
String regex = ".*:26T:(.*).*";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(mxPurposeProprietary);
if (m.find()) {
/**
* group(0)就是指的整个串,group(1)指的是第一个括号里的东西,group(2)指的第二个括号里的东西
*/
String code = m.group(1);
if (code.matches("[A-Z0-9]{3}")) {
mxPurposeFlag = false;
}
}
}
if (mxPurposeFlag) {
if (StringUtil.isEmpty(mt70FullString)) {
mt70FullString += "/PURP/" + mxPurposeCode;
} else {
mt70FullString += "///PURP/" + mxPurposeCode;
}
}
String endToEndIdentification = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.PmtId.EndToEndId");
if (StringUtil.isNotEmpty(endToEndIdentification)) {
if (StringUtil.isEmpty(mt70FullString)) {
mt70FullString += "/ROC/" + endToEndIdentification;
} else {
mt70FullString += "///ROC/" + endToEndIdentification;
}
}
String relatedRemittanceInformation = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.RltdRmtInf.RmtId");
if (StringUtil.isNotEmpty(relatedRemittanceInformation)) {
if (StringUtil.isEmpty(mt70FullString)) {
mt70FullString += "/RELID/" + relatedRemittanceInformation;
} else {
mt70FullString += "///RELID/" + relatedRemittanceInformation;
}
}
String remittanceInfoUnstructured = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.RmtInf.Ustrd");
if (StringUtil.isNotEmpty(remittanceInfoUnstructured)) {
if (StringUtil.isEmpty(mt70FullString)) {
mt70FullString += "/URI/" + remittanceInfoUnstructured;
} else {
mt70FullString += "///URI/" + remittanceInfoUnstructured;
}
}
int remittanceInfoStructuredCount = getXmlNodeCounts(bodyHdrParentElementName, document, "CdtTrfTxInf.RmtInf.Strd");
if (remittanceInfoStructuredCount > 0) {
if (StringUtil.isEmpty(mt70FullString)) {
mt70FullString += "/SRI/+";
} else {
mt70FullString += "///SRI/+";
}
}
if (StringUtil.isNotEmpty(mt70FullString)) {
String value = StringUtil.getStringByEnter(mt70FullString, 35, 4);
tags.add(new Tag(name, value));
}
}
}
\ No newline at end of file
package com.brilliance.swift.mx2mt.mt103.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
import com.brilliance.swift.util.NumberUtil;
import com.brilliance.swift.util.StringUtil;
import com.prowidesoftware.swift.model.mx.dic.ChargeBearerType1Code;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.brilliance.swift.vo.common.ChargeForEnum;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.Tag;
import java.math.BigDecimal;
import java.util.List;
/**
* 1)如果节点值为 'CRED',则71A取值为“BEN”
* 2)如果节点值为 'DEBT',则71A取值为“OUR”
* 3)如果节点值为'SHAR',则71A取值为“SHA”
* <CdtTrfTxInf>[1]<ChrgBr>
* * //1,若71A为“BEN”或“SHA”,则此节点取值为71F
* * //CdtTrfTxInf>[1]<ChrgsInf><Amt Ccy="XXX">
* * 1,若71A为“OUR”,则此节点取值为71G;
* * <CdtTrfTxInf>[1]<ChrgsInf><Amt Ccy="XXX">
*
*/
public class Field71AGenerate extends AbstractMx2MtFieldsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field71AGenerate.class);
public class Field71AGenerate extends AbstractMx2MtTagsGenerate {
private static String name_A = "71A";
private static String name_F = "71F";
private static String name_G = "71G";
@Override
public void fieldsGenerate() throws SwiftException {
try {
String field71Option = "";
String field71 = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String chrgBr = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.ChrgBr");
if (StringUtil.isNotEmpty(chrgBr)) {
if (ChargeBearerType1Code.CRED.value().equals(chrgBr)) {
field71Option = "BEN";
} else if (ChargeBearerType1Code.DEBT.value().equals(chrgBr)) {
field71Option = "OUR";
} else if (ChargeBearerType1Code.SHAR.value().equals(chrgBr)) {
field71Option = "SHA";
public void tagGenerate() throws SwiftException {
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
String chrgBr = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.ChrgBr");
if (StringUtil.isNotEmpty(chrgBr)) {
if (ChargeForEnum.CRED.value().equals(chrgBr)) {
tags.add(new Tag(name_A, "BEN"));
} else if (ChargeForEnum.DEBT.value().equals(chrgBr)) {
tags.add(new Tag(name_A, "OUR"));
} else if (ChargeForEnum.SHAR.value().equals(chrgBr)) {
tags.add(new Tag(name_A, "SHA"));
}
}
int chrgsInfCount = getXmlNodeCounts(bodyHdrParentElementName, document, "CdtTrfTxInf.ChrgsInf");
if (chrgsInfCount > 0) {
if (ChargeForEnum.CRED.value().equals(chrgBr) || ChargeForEnum.SHAR.value().equals(chrgBr)) {
for (int i=0; i<chrgsInfCount; i++) {
String amt = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.ChrgsInf("+i+").Amt");
String ccy = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.ChrgsInf("+i+").Amt@Ccy");
if (StringUtil.isNotEmpty(amt) && StringUtil.isNotEmpty(ccy)) {
tags.add(new Tag(name_F, ccy + NumberUtil.formatAmt(new BigDecimal(amt), ccy)));
}
}
String amt = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.ChrgsInf");
String ccy = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.ChrgsInf@Ccy");
if (StringUtil.isNotEmpty(amt) && StringUtil.isNotEmpty(ccy)) {
field71 = ccy + NumberUtil.formatAmt(new BigDecimal(amt), ccy);
} else {
String ccy = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.ChrgsInf(0).Amt@Ccy");
String amt = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.ChrgsInf(0).Amt");
if (StringUtil.isNotEmpty(ccy) && StringUtil.isNotEmpty(amt)) {
BigDecimal sumAmt = new BigDecimal(amt);
if (chrgsInfCount > 1) {
for (int i=1; i<chrgsInfCount; i++) {
if (ccy.equals(getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.ChrgsInf("+i+").Amt@Ccy"))) {
BigDecimal tmpAmt = new BigDecimal(getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.ChrgsInf("+i+").Amt"));
sumAmt = sumAmt.add(tmpAmt);
}
}
}
tags.add(new Tag(name_G, ccy + NumberUtil.formatAmt(sumAmt, ccy)));
}
}
map.put("field71Option", field71Option);
map.put("field71", field71);
} catch(Exception e) {
throw new SwiftException(e.getMessage());
}
}
}
package com.brilliance.swift.mx2mt.mt103.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
import com.brilliance.swift.util.StringUtil;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.Tag;
import java.util.List;
/**
* // 1,取<RgltryRptg>[1]<Dtls>[1]<Inf>[1]作为第一行信息
* //2,取<RgltryRptg>[2]<Dtls>[1]<Inf>[1]作为第二行信息
* //3,取<RgltryRptg>[3]<Dtls>[1]<Inf>[1]作为第二行信息
* //<CdtTrfTxInf>[1]<RgltryRptg>[1]<Dtls>[1]<Inf>[1]
*MTRegulatoryReportingConcatenated
* 1.将报文中所有CdtTrfTxInf.RgltryRptg.Dtls.Inf有值的拼接起来组成MTRegulatoryReportingConcatenated
* 2.如果MTRegulatoryReportingConcatenated不包含/ORDERRES/,并且CdtTrfTxInf.Dbtr.CtryOfRes有值,
* remainSpace = 105 - MTRegulatoryReportingConcatenated - 10(/ORDERRES/的长度)
* ①如果remainSpace长度大于0,但是remainSpace长度大于CdtTrfTxInf.Dbtr.CtryOfRes长度
* MTRegulatoryReportingConcatenated = MTRegulatoryReportingConcatenated + /ORDERRES/ + CdtTrfTxInf.Dbtr.CtryOfRes
* ②如果remainSpace长度大于0,但是remainSpace长度不大于CdtTrfTxInf.Dbtr.CtryOfRes长度
* MTRegulatoryReportingConcatenated = MTRegulatoryReportingConcatenated + /ORDERRES/ + CdtTrfTxInf.Dbtr.CtryOfRes截取到remainSpace-1位,最后一位给+
* 2.如果MTRegulatoryReportingConcatenated不包含/BENEFRES/,并且CdtTrfTxInf.Cdtr.CtryOfRes有值,
* remainSpace = 105 - MTRegulatoryReportingConcatenated - 10(/BENEFRES/的长度)
* ①如果remainSpace长度大于0,但是remainSpace长度大于CdtTrfTxInf.Cdtr.CtryOfRes长度
* MTRegulatoryReportingConcatenated = MTRegulatoryReportingConcatenated + /BENEFRES/ + CdtTrfTxInf.Cdtr.CtryOfRes
* ②如果remainSpace长度大于0,但是remainSpace长度不大于CdtTrfTxInf.Cdtr.CtryOfRes长度
* MTRegulatoryReportingConcatenated = MTRegulatoryReportingConcatenated + /BENEFRES/ + CdtTrfTxInf.Cdtr.CtryOfRes截取到remainSpace-1位,最后一位给+
* 3.如果MTRegulatoryReportingConcatenated长度大于105,MTRegulatoryReportingConcatenated = MTRegulatoryReportingConcatenated截取到104位,最后一位给+
* 4.将MTRegulatoryReportingConcatenated组装成3*35
*/
public class Field77BGenerate extends AbstractMx2MtFieldsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field77BGenerate.class);
public class Field77BGenerate extends AbstractMx2MtTagsGenerate {
private static String name = "77B";
@Override
public void fieldsGenerate() throws SwiftException {
try {
String field77B = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
int size = getXmlNodeCounts(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.RgltryRptg");
if (size > 0) {
for (int i=0; i<size; i++) {
if (i == 3) break;
String dtlsInf = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.RgltryRptg("+i+").Dtls.Inf");
/*if (i == 0) {
dtlsInf = "/" + dtlsInf;
public void tagGenerate() throws SwiftException {
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
String mtRegulatoryReporting = "";
int mxRegulatoryReportingCount = getXmlNodeCounts(bodyHdrParentElementName, document, "CdtTrfTxInf.RgltryRptg");
if (mxRegulatoryReportingCount > 0) {
for (int i=0; i<mxRegulatoryReportingCount; i++) {
int mxRegulatoryReportingDetailCount = getXmlNodeCounts(bodyHdrParentElementName, document, "CdtTrfTxInf.RgltryRptg("+i+").Dtls");
if (mxRegulatoryReportingDetailCount > 0) {
for (int j=0; j<mxRegulatoryReportingDetailCount; j++) {
int mxRegulatoryReportingDetailInfCount = getXmlNodeCounts(bodyHdrParentElementName, document, "CdtTrfTxInf.RgltryRptg("+i+").Dtls("+j+").Inf");
if (mxRegulatoryReportingDetailInfCount > 0) {
for (int k=0; k<mxRegulatoryReportingDetailInfCount; k++) {
mtRegulatoryReporting += getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.RgltryRptg("+i+").Dtls("+j+").Inf("+k+")");
}
}
}
}
}
}
if (mtRegulatoryReporting.indexOf("/ORDERRES/") == -1) {
int remainLength = 105 - mtRegulatoryReporting.length() - 10;
if (remainLength > 0) {
String ctryOfRes = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.Dbtr.CtryOfRes");
if (StringUtil.isNotEmpty(ctryOfRes)) {
if (remainLength < ctryOfRes.length()) {
mtRegulatoryReporting = mtRegulatoryReporting + "/ORDERRES/" + ctryOfRes.substring(0, remainLength-1) + "+";
} else {
dtlsInf = "//" + dtlsInf;
}*/
if (dtlsInf.length() > 35) {
dtlsInf = dtlsInf.substring(0, 35);
mtRegulatoryReporting = mtRegulatoryReporting + "/ORDERRES/" + ctryOfRes;
}
if (i == 0) {
field77B += dtlsInf;
}
}
}
if (mtRegulatoryReporting.indexOf("/BENEFRES/") == -1) {
int remainLength = 105 - mtRegulatoryReporting.length() - 10;
if (remainLength > 0) {
String ctryOfRes = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.Cdtr.CtryOfRes");
if (StringUtil.isNotEmpty(ctryOfRes)) {
if (remainLength < ctryOfRes.length()) {
mtRegulatoryReporting = mtRegulatoryReporting + "/BENEFRES/" + ctryOfRes.substring(0, remainLength-1) + "+";
} else {
field77B += Mx2MtConstants.NEW_LINE + dtlsInf;
mtRegulatoryReporting = mtRegulatoryReporting + "/BENEFRES/" + ctryOfRes;
}
}
}
map.put("field77B", field77B);
} catch (Exception e) {
throw new SwiftException("ERROR", e.getMessage());
}
if (mtRegulatoryReporting.length() > 105) mtRegulatoryReporting = mtRegulatoryReporting.substring(0, 104) + "+";
if (StringUtil.isNotEmpty(mtRegulatoryReporting)) {
String value = StringUtil.getStringByEnter(mtRegulatoryReporting, 35, 3);
tags.add(new Tag(name, value));
}
}
}
......
package com.brilliance.swift.mx2mt.mt202cov202;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtCreator;
import com.brilliance.swift.mx2mt.Mx2MtFieldsGenerate;
import com.brilliance.swift.mx2mt.Mx2MtContextIdentifier;
import com.brilliance.swift.mx2mt.Mx2MtTagsGenerate;
import com.brilliance.swift.mx2mt.mt202cov202.impl.*;
import com.brilliance.swift.mx2mt.mt202cov202.impl.cov.*;
import com.brilliance.swift.util.StringUtil;
import com.brilliance.swift.util.XmlUtil;
import com.brilliance.swift.vo.common.ServiceLevelCode;
import com.prowidesoftware.swift.model.SwiftBlock3;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.Tag;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class Mx2Mt202Creator extends AbstractMx2MtCreator {
private static final Logger logger = LoggerFactory.getLogger(Mx2Mt202Creator.class);
@Override
public void preProcess() {
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
super.preProcess();
Document document = (Document)context.get(Mx2MtContextIdentifier.MX_XMl_DOCUMENT, true);
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("CdtTrfTxInf"));
map.put(Mx2MtConstants.MT_TEMPLATE_NAME, "swift_mt_202cov.vm");
context.set(Mx2MtContextIdentifier.APPHDR_PARENT_ELEMENT_NAME, parentElementMaps.get("AppHdr"));
context.set(Mx2MtContextIdentifier.GRPHDR_PARENT_ELEMENT_NAME, parentElementMaps.get("GrpHdr"));
context.set(Mx2MtContextIdentifier.BODY_PARENT_ELEMENT_NAME, parentElementMaps.get("CdtTrfTxInf"));
}
@Override
public void generateHead3() {
String head3 = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String uetr = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.PmtId.UETR");
if (StringUtil.isNotEmpty(uetr)) {
head3 += "{121:"+uetr+"}";
}
boolean mt202CoverFlag = false;
Map<String, String> maps = XmlUtil.getParentElementMaps(document);
Iterator<String> keys = maps.keySet().iterator();
for (; keys.hasNext(); ) {
String key = keys.next();
String value = maps.get(key);
String fullPath = value + "." + key;
if (fullPath.indexOf("UndrlygCstmrCdtTrf") > -1
&& StringUtil.isNotEmpty(XmlUtil.getXmlNodeValue(document, fullPath))){
mt202CoverFlag = true;
break;
public void withBlock3() throws SwiftException {
super.withBlock3();
SwiftBlock3 block3 = context.get(SwiftMessage.class).getBlock3();
Document document = (Document)context.get(Mx2MtContextIdentifier.MX_XMl_DOCUMENT, true);
String bodyParentPath = (String)context.get(Mx2MtContextIdentifier.BODY_PARENT_ELEMENT_NAME, true);
String serviceType = "";
int serviceLevelCount = getXmlNodeCounts(bodyParentPath, document, "CdtTrfTxInf.PmtTpInf.SvcLvl");
if (serviceLevelCount > 0) {
for (int i=0; i<serviceLevelCount; i++) {
String serviceLevelCode = getXmlNodeValue(bodyParentPath, document, "CdtTrfTxInf.PmtTpInf.SvcLvl("+i+").Cd");
if (ServiceLevelCode.G001.value().equals(serviceLevelCode)
|| ServiceLevelCode.G002.value().equals(serviceLevelCode)
|| ServiceLevelCode.G003.value().equals(serviceLevelCode)
|| ServiceLevelCode.G004.value().equals(serviceLevelCode)) {
serviceType = serviceLevelCode.substring(1);
break;
}
}
}
if (mt202CoverFlag) {
head3 += Mx2MtConstants.HEAD3_MT202_COVER;
if (StringUtil.isNotEmpty(serviceType)) {
block3.getTags().add(new Tag("111", serviceType));
}
String uetr = getXmlNodeValue(bodyParentPath, document, "CdtTrfTxInf.PmtId.UETR");
if (StringUtil.isNotEmpty(uetr)) {
block3.getTags().add(new Tag("121", uetr));
}
map.put("head3", head3);
}
@Override
public List<Mx2MtFieldsGenerate> getFieldsGenerateList() {
List<Mx2MtFieldsGenerate> fieldsGenerateList = new ArrayList<>();
public List<Mx2MtTagsGenerate> getGenerateTagList() {
List<Mx2MtTagsGenerate> fieldsGenerateList = new ArrayList<>();
fieldsGenerateList.add(new Field20Generate());
fieldsGenerateList.add(new Field21Generate());
fieldsGenerateList.add(new Field13CGenerate());
......@@ -80,11 +86,6 @@ public class Mx2Mt202Creator extends AbstractMx2MtCreator {
}
@Override
public void postProcess() {
}
@Override
protected String getMtType() {
return Mx2MtConstants.MT_TYPE_202;
}
......
package com.brilliance.swift.mx2mt.mt202cov202.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.util.DateUtil;
import com.brilliance.swift.util.StringUtil;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import java.util.ArrayList;
import java.util.List;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
/**
* 1,如果<DbtDtTm>节点有值,则转为/SNDTIME/HHMM+0800,HHMM是此节点中的时间,+0800是香港时区
* 2,如果<CdtDtTm>节点有值,则转为/RNCTIME/HHMM+0800,HHMM是此节点中的时间,+0800是香港时区
* 3,如果<CLSTm>节点有值,则转为/CLSTIME/HHMM+0800,HHMM是此节点中的时间,+0800是香港时区
* <CdtTrfTxInf>[1]<SttlmTmIndctn><DbtDtTm>
* <CdtTrfTxInf>[1]<SttlmTmIndctn><CdtDtTm>
* <CdtTrfTxInf>[1]<SttlmTmReq><CLSTm>
*
*/
public class Field13CGenerate extends AbstractMx2MtFieldsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field13CGenerate.class);
public class Field13CGenerate extends AbstractMx2MtTagsGenerate {
@Override
public void fieldsGenerate() throws SwiftException {
try {
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
List<String> filed13CList = new ArrayList<>();
String dbtDtTmStr = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.SttlmTmIndctn.DbtDtTm");
if (StringUtil.isNotEmpty(dbtDtTmStr)) {
XMLGregorianCalendar dbtDtTm = DatatypeFactory.newInstance().newXMLGregorianCalendar(dbtDtTmStr);
String hourTime = DateUtil.format(dbtDtTm, "HHmm");
filed13CList.add("/SNDTIME/"+hourTime+"+0800");
}
String cdtDtTmStr = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.SttlmTmIndctn.CdtDtTm");
if (StringUtil.isNotEmpty(cdtDtTmStr)) {
XMLGregorianCalendar cdtDtTm = DatatypeFactory.newInstance().newXMLGregorianCalendar(cdtDtTmStr);
String hourTime = DateUtil.format(cdtDtTm, "HHmm");
filed13CList.add("/RNCTIME/"+hourTime+"+0800");
}
String clsDtTmStr = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.SttlmTmReq.CLSTm");
if (StringUtil.isNotEmpty(clsDtTmStr)) {
XMLGregorianCalendar clsDtTm = DatatypeFactory.newInstance().newXMLGregorianCalendar(clsDtTmStr);
String hourTime = DateUtil.format(clsDtTm, "HHmm");
filed13CList.add("/CLSTIME/"+hourTime+"+0800");
}
map.put("field13CList", filed13CList);
} catch(Exception e) {
throw new SwiftException("ERROR", e.getMessage());
}
public void tagGenerate() throws SwiftException {
}
}
package com.brilliance.swift.mx2mt.mt202cov202.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
/**
* <GrpHdr><MsgId>
*/
public class Field20Generate extends AbstractMx2MtFieldsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field20Generate.class);
public class Field20Generate extends AbstractMx2MtTagsGenerate {
@Override
public void fieldsGenerate() throws SwiftException {
try {
String field20 = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
field20 = getXmlNodeValue(Mx2MtConstants.GRPHDR_PARENT_ELEMENT_NAME, document, "GrpHdr.MsgId");
map.put("field20", field20);
} catch(Exception e) {
throw new SwiftException("ERROR", e.getMessage());
}
public void tagGenerate() throws SwiftException {
}
}
package com.brilliance.swift.mx2mt.mt202cov202.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.util.StringUtil;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
/**
* <CdtTrfTxInf>[1]<PmtId><EndToEndId>
*/
public class Field21Generate extends AbstractMx2MtFieldsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field21Generate.class);
public class Field21Generate extends AbstractMx2MtTagsGenerate {
@Override
public void fieldsGenerate() throws SwiftException {
try {
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String field21 = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.PmtId.EndToEndId");
if (StringUtil.isEmpty(field21)) {
field21 = "NONREF";
}
map.put("field21", field21);
} catch(Exception e) {
throw new SwiftException("ERROR", e.getMessage());
}
public void tagGenerate() throws SwiftException {
}
}
package com.brilliance.swift.mx2mt.mt202cov202.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.util.DateUtil;
import com.brilliance.swift.util.NumberUtil;
import com.brilliance.swift.util.StringUtil;
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 com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
/**
* 直接取<IntrBkSttlmDt>节点作为32A的value date,Amt和Ccy看另一个节点,XXX是货币
* <CdtTrfTxInf>[1]<IntrBkSttlmDt>
* <CdtTrfTxInf>[1]<IntrBkSttlmAmt Ccy="XXX"'>
*/
public class Field32AGenerate extends AbstractMx2MtFieldsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field32AGenerate.class);
public class Field32AGenerate extends AbstractMx2MtTagsGenerate {
@Override
public void fieldsGenerate() throws SwiftException {
try {
String intrBkSttlmDtStr = "";
String intrBkSttlmAmt = "";
String intrBkSttlmccy = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String intrBkSttlmDtValue = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.IntrBkSttlmDt");
if (StringUtil.isNotEmpty(intrBkSttlmDtValue)) {
XMLGregorianCalendar intrBkSttlmDt = DatatypeFactory.newInstance().newXMLGregorianCalendar(intrBkSttlmDtValue);
intrBkSttlmDtStr = DateUtil.format(intrBkSttlmDt, "yyMMdd");
}
String amt = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.IntrBkSttlmAmt");
String ccy = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.IntrBkSttlmAmt@Ccy");
if (StringUtil.isNotEmpty(amt) && StringUtil.isNotEmpty(ccy)) {
intrBkSttlmAmt = NumberUtil.formatAmt(new BigDecimal(amt), ccy);
intrBkSttlmccy = ccy;
}
map.put("field32A", intrBkSttlmDtStr+intrBkSttlmccy+intrBkSttlmAmt);
} catch (Exception e) {
throw new SwiftException("ERROR", e.getMessage());
}
public void tagGenerate() throws SwiftException {
}
}
package com.brilliance.swift.mx2mt.mt202cov202.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.util.StringUtil;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
/**
* 1,若节点<BICFI>有值,则设置52 option为“A”,同时BIC取此栏位
......@@ -18,69 +13,11 @@ import org.slf4j.LoggerFactory;
* <CdtTrfTxInf>[1]<DbtrAcct><Id><Othr><Id>
* <CdtTrfTxInf>[1]<DbtrAcct><Id><Othr><SchmeNm><Cd>
*/
public class Field52AGenerate extends AbstractMx2MtFieldsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field52AGenerate.class);
public class Field52AGenerate extends AbstractMx2MtTagsGenerate {
@Override
public void fieldsGenerate() throws SwiftException {
try {
String field52Option = "";
String field52 = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String bicCode = getBicCode(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.Dbtr.FinInstnId");
String account = getAccount();
String name = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.Dbtr.FinInstnId.Nm");
if (StringUtil.isNotEmpty(bicCode)) {
field52Option = "A";
if (StringUtil.isNotEmpty(account)) {
field52 = account + Mx2MtConstants.NEW_LINE + bicCode;
} else {
field52 = bicCode;
}
} else if (StringUtil.isNotEmpty(name)){
field52Option = "D";
if (name.length() > 35) name = name.substring(0, 35);
if (StringUtil.isNotEmpty(account)) {
field52 = account + Mx2MtConstants.NEW_LINE + name;
} else {
field52 = name;
}
int addressCounts = getXmlNodeCounts(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.Dbtr.FinInstnId.PstlAdr.AdrLine");
if (addressCounts > 0) {
for (int i=0; i<addressCounts; i++) {
if (i == 3) break;
String address = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.Dbtr.FinInstnId.PstlAdr.AdrLine("+i+")");
if (address.length() > 35) address = address.substring(0, 35);
field52 += Mx2MtConstants.NEW_LINE + address;
}
}
}
map.put("field52Option", field52Option);
map.put("field52A", field52);
} catch (Exception e) {
throw new SwiftException(e.getMessage());
}
}
public void tagGenerate() throws SwiftException {
private String getAccount() {
try {
String account = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String iban = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.DbtrAcct.Id.IBAN");
String otherId = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.DbtrAcct.Id.Othr.Id");
//String schmeNameCd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.DbtrAgtAcct.Id.SchmeNm.Cd");
if (StringUtil.isNotEmpty(iban)) {
account = "/" + iban;
} else if (StringUtil.isNotEmpty(otherId)) {
account = "//CH" + otherId;
}
if (StringUtil.isNotEmpty(account) && account.length() > 35) {
account = account.substring(0, 35);
}
return account;
} catch (Exception e) {
throw new SwiftException(e.getMessage());
}
}
}
package com.brilliance.swift.mx2mt.mt202cov202.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.util.StringUtil;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
/**
* 1,若节点<BICFI>有值,则设置53 option为“A”,同时BIC取此栏位;
* 2,若节点<IBAN>有值,则作为53A的账号;
* 3,若节点<Othr><Id>有值,则作为53A的账号;
* <GrpHdr><SttlmInf><InstgRmbrsmntAgt><FinInstnId><BICFI>
* <GrpHdr><SttlmInf><InstgRmbrsmntAgtAcct><Id><IBAN>
* <GrpHdr><SttlmInf><InstgRmbrsmntAgtAcct><Id><Othr><Id>
* <GrpHdr><SttlmInf><InstgRmbrsmntAgtAcct><Id><Othr><SchmeNm><Cd> * 如果<SttlmAcct><Id><IBAN>或<SttlmAcct><Id><Othr><Id>有值,则设置53 option为“B”:
* * 1)若节点<IBAN>有值,则作为53B的账号;
* * 2)若节点<Othr><Id>有值,则作为53B的账号;
* * <GrpHdr><SttlmInf><SttlmAcct><Id><IBAN>
* * <GrpHdr><SttlmInf><SttlmAcct><Id><Othr><Id>
* * <GrpHdr><SttlmInf><SttlmAcct><Id><Othr><SchmeNm><Cd>
* * 1,若节点<Nm>有值,则设置53 option为“D”,且名称取自此节点,而地址需要合并截取???
* * 2,账号取值规则和节点与53A相同
* * <GrpHdr><SttlmInf><InstgRmbrsmntAgt><FinInstnId><Nm>
* * <GrpHdr><SttlmInf><InstgRmbrsmntAgt><FinInstnId><PstlAdr><AdrLine>[1],<AdrLine>[2],<AdrLine>[3]
*/
public class Field53AGenerate extends AbstractMx2MtFieldsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field53AGenerate.class);
public class Field53AGenerate extends AbstractMx2MtTagsGenerate {
@Override
public void fieldsGenerate() throws SwiftException {
try {
String field53Option = "";
String field53 = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String bicCode = getBicCode(Mx2MtConstants.GRPHDR_PARENT_ELEMENT_NAME, document, "GrpHdr.SttlmInf.InstgRmbrsmntAgt.FinInstnId");
String account = getAccount();
String sttlmAccount = getSttlmAccount();
String name = getXmlNodeValue(Mx2MtConstants.GRPHDR_PARENT_ELEMENT_NAME, document, "GrpHdr.SttlmInf.InstgRmbrsmntAgt.FinInstnId.Nm");
if (StringUtil.isNotEmpty(bicCode)) {
field53Option = "A";
if (StringUtil.isNotEmpty(account)) {
field53 = account + Mx2MtConstants.NEW_LINE + bicCode;
} else {
field53 = bicCode;
}
} else if (StringUtil.isNotEmpty(sttlmAccount)){
field53Option = "B";
field53 = sttlmAccount;
} else if (StringUtil.isNotEmpty(name)){
field53Option = "D";
if (name.length() > 35) name = name.substring(0, 35);
if (StringUtil.isNotEmpty(account)) {
field53 = account + Mx2MtConstants.NEW_LINE + name;
} else {
field53 = name;
}
int addressCounts = getXmlNodeCounts(Mx2MtConstants.GRPHDR_PARENT_ELEMENT_NAME, document, "GrpHdr.SttlmInf.InstgRmbrsmntAgt.FinInstnId.PstlAdr.AdrLine");
if (addressCounts > 0) {
for (int i=0; i<addressCounts; i++) {
if (i == 3) break;
String address = getXmlNodeValue(Mx2MtConstants.GRPHDR_PARENT_ELEMENT_NAME, document, "GrpHdr.SttlmInf.InstgRmbrsmntAgt.FinInstnId.PstlAdr.AdrLine("+i+")");
if (address.length() > 35) address = address.substring(0, 35);
field53 += Mx2MtConstants.NEW_LINE + address;
}
}
}
map.put("field53Option", field53Option);
map.put("field53A", field53);
} catch (Exception e) {
throw new SwiftException(e.getMessage());
}
}
private String getAccount() {
try {
String account = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String iban = getXmlNodeValue(Mx2MtConstants.GRPHDR_PARENT_ELEMENT_NAME, document, "GrpHdr.SttlmInf.InstgRmbrsmntAgtAcct.Id.IBAN");
String otherId = getXmlNodeValue(Mx2MtConstants.GRPHDR_PARENT_ELEMENT_NAME, document, "GrpHdr.SttlmInf.InstgRmbrsmntAgtAcct.Id.Othr.Id");
//String schmeNameCd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.DbtrAgtAcct.Id.SchmeNm.Cd");
if (StringUtil.isNotEmpty(iban)) {
account = "/" + iban;
} else if (StringUtil.isNotEmpty(otherId)) {
account = "//CH" + otherId;
}
if (StringUtil.isNotEmpty(account) && account.length() > 35) {
account = account.substring(0, 35);
}
return account;
} catch (Exception e) {
throw new SwiftException(e.getMessage());
}
}
public void tagGenerate() throws SwiftException {
private String getSttlmAccount() {
try {
String account = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String iban = getXmlNodeValue(Mx2MtConstants.GRPHDR_PARENT_ELEMENT_NAME, document, "GrpHdr.SttlmInf.SttlmAcct.Id.IBAN");
String otherId = getXmlNodeValue(Mx2MtConstants.GRPHDR_PARENT_ELEMENT_NAME, document, "GrpHdr.SttlmInf.SttlmAcct.Id.Othr.Id");
//String schmeNameCd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.DbtrAgtAcct.Id.SchmeNm.Cd");
if (StringUtil.isNotEmpty(iban)) {
account = "/" + iban;
} else if (StringUtil.isNotEmpty(otherId)) {
account = "//CH" + otherId;
}
if (StringUtil.isNotEmpty(account) && account.length() > 35) {
account = account.substring(0, 35);
}
return account;
} catch (Exception e) {
throw new SwiftException(e.getMessage());
}
}
}
package com.brilliance.swift.mx2mt.mt202cov202.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.util.StringUtil;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
/**
* 1,若节点<BICFI>有值,则设置54 option为“A”,同时BIC取此栏位;
* 2,若节点<IBAN>有值,则作为54A的账号;
* 3,若节点<Othr><Id>有值,则作为54A的账号;
* <GrpHdr><SttlmInf><InstdRmbrsmntAgt><FinInstnId><BICFI>
* <GrpHdr><SttlmInf><InstdRmbrsmntAgtAcct><Id><IBAN>
* <GrpHdr><SttlmInf><InstdRmbrsmntAgtAcct><Id><Othr><Id>
* <GrpHdr><SttlmInf><InstdRmbrsmntAgtAcct><Id><Othr><SchmeNm><Cd>
* 1,若节点<Nm>有值,则设置54 option为“D”,且名称取自此节点,而地址需要合并截取???
* * 2,账号取值规则和节点与54A相同
* * <GrpHdr><SttlmInf><InstdRmbrsmntAgt><FinInstnId><Nm>
* * <GrpHdr><SttlmInf><InstdRmbrsmntAgt><FinInstnId><PstlAdr><AdrLine>[1],<AdrLine>[2],<AdrLine>[3]
*
*/
public class Field54AGenerate extends AbstractMx2MtFieldsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field54AGenerate.class);
public class Field54AGenerate extends AbstractMx2MtTagsGenerate {
@Override
public void fieldsGenerate() throws SwiftException {
try {
String field54Option = "";
String field54 = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String bicCode = getBicCode(Mx2MtConstants.GRPHDR_PARENT_ELEMENT_NAME, document, "GrpHdr.SttlmInf.InstdRmbrsmntAgt.FinInstnId");
String account = getAccount();
String name = getXmlNodeValue(Mx2MtConstants.GRPHDR_PARENT_ELEMENT_NAME, document, "GrpHdr.SttlmInf.InstdRmbrsmntAgt.FinInstnId.Nm");
if (StringUtil.isNotEmpty(bicCode)) {
field54Option = "A";
if (StringUtil.isNotEmpty(account)) {
field54 = account + Mx2MtConstants.NEW_LINE + bicCode;
} else {
field54 = bicCode;
}
} else if (StringUtil.isNotEmpty(name)){
field54Option = "D";
if (name.length() > 35) name = name.substring(0, 35);
if (StringUtil.isNotEmpty(account)) {
field54 = account + Mx2MtConstants.NEW_LINE + name;
} else {
field54 = name;
}
int addressCounts = getXmlNodeCounts(Mx2MtConstants.GRPHDR_PARENT_ELEMENT_NAME, document, "GrpHdr.SttlmInf.InstdRmbrsmntAgt.FinInstnId.PstlAdr.AdrLine");
if (addressCounts > 0) {
for (int i=0; i<addressCounts; i++) {
if (i == 3) break;
String address = getXmlNodeValue(Mx2MtConstants.GRPHDR_PARENT_ELEMENT_NAME, document, "GrpHdr.SttlmInf.InstdRmbrsmntAgt.FinInstnId.PstlAdr.AdrLine("+i+")");
if (address.length() > 35) address = address.substring(0, 35);
field54 += Mx2MtConstants.NEW_LINE + address;
}
}
}
map.put("field54Option", field54Option);
map.put("field54A", field54);
} catch (Exception e) {
throw new SwiftException(e.getMessage());
}
}
public void tagGenerate() throws SwiftException {
private String getAccount() {
try {
String account = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String iban = getXmlNodeValue(Mx2MtConstants.GRPHDR_PARENT_ELEMENT_NAME, document, "GrpHdr.SttlmInf.InstdRmbrsmntAgtAcct.Id.IBAN");
String otherId = getXmlNodeValue(Mx2MtConstants.GRPHDR_PARENT_ELEMENT_NAME, document, "GrpHdr.SttlmInf.InstdRmbrsmntAgtAcct.Id.Othr.Id");
//String schmeNameCd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.DbtrAgtAcct.Id.SchmeNm.Cd");
if (StringUtil.isNotEmpty(iban)) {
account = "/" + iban;
} else if (StringUtil.isNotEmpty(otherId)) {
account = "//CH" + otherId;
}
if (StringUtil.isNotEmpty(account) && account.length() > 35) {
account = account.substring(0, 35);
}
return account;
} catch (Exception e) {
throw new SwiftException(e.getMessage());
}
}
}
package com.brilliance.swift.mx2mt.mt202cov202.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.util.StringUtil;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
/**
* 1,若节点<BICFI>有值,则设置56 option为“A”,同时BIC取此栏位;
* 2,若节点<IBAN>有值,则作为56A的账号;
* 3,若节点<Othr><Id>有值,则作为56A的账号;
* <CdtTrfTxInf>[1]<IntrmyAgt1><FinInstnId><BICFI>
* <CdtTrfTxInf>[1]<IntrmyAgt1Acct><Id><IBAN>
* <CdtTrfTxInf>[1]<IntrmyAgt1Acct><Id><Othr><Id>
* <CdtTrfTxInf>[1]<IntrmyAgt1Acct><Id><Othr><SchmeNm><Cd>
* * 1,若节点<Nm>有值,则设置56 option为“D”,且名称取自此节点,而地址需要合并截取???
* * 2,账号取值规则和节点与56A相同
* * <CdtTrfTxInf>[1]<IntrmyAgt1><FinInstnId><Nm>
* * <CdtTrfTxInf>[1]<IntrmyAgt1><FinInstnId><PstlAdr><AdrLine>[1],<AdrLine>[2],<AdrLine>[3]
*/
public class Field56AGenerate extends AbstractMx2MtFieldsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field56AGenerate.class);
public class Field56AGenerate extends AbstractMx2MtTagsGenerate {
@Override
public void fieldsGenerate() throws SwiftException {
try {
String field56Option = "";
String field56 = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String bicCode = getBicCode(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.IntrmyAgt1.FinInstnId");
String account = getAccount();
String name = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.IntrmyAgt1.FinInstnId.Nm");
if (StringUtil.isNotEmpty(bicCode)) {
field56Option = "A";
if (StringUtil.isNotEmpty(account)) {
field56 = account + Mx2MtConstants.NEW_LINE + bicCode;
} else {
field56 = bicCode;
}
} else if (StringUtil.isNotEmpty(name)){
field56Option = "D";
if (name.length() > 35) name = name.substring(0, 35);
if (StringUtil.isNotEmpty(account)) {
field56 = account + Mx2MtConstants.NEW_LINE + name;
} else {
field56 = name;
}
int addressCounts = getXmlNodeCounts(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.IntrmyAgt1.FinInstnId.PstlAdr.AdrLine");
if (addressCounts > 0) {
for (int i=0; i<addressCounts; i++) {
if (i == 3) break;
String address = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.IntrmyAgt1.FinInstnId.PstlAdr.AdrLine("+i+")");
if (address.length() > 35) address = address.substring(0, 35);
field56 += Mx2MtConstants.NEW_LINE + address;
}
}
}
map.put("field56Option", field56Option);
map.put("field56A", field56);
} catch (Exception e) {
throw new SwiftException(e.getMessage());
}
}
public void tagGenerate() throws SwiftException {
private String getAccount() {
try {
String account = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String iban = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.IntrmyAgt1Acct.Id.IBAN");
String otherId = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.IntrmyAgt1Acct.Id.Othr.Id");
//String schmeNameCd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.DbtrAgtAcct.Id.SchmeNm.Cd");
if (StringUtil.isNotEmpty(iban)) {
account = "/" + iban;
} else if (StringUtil.isNotEmpty(otherId)) {
account = "//CH" + otherId;
}
if (StringUtil.isNotEmpty(account) && account.length() > 35) {
account = account.substring(0, 35);
}
return account;
} catch (Exception e) {
throw new SwiftException(e.getMessage());
}
}
}
package com.brilliance.swift.mx2mt.mt202cov202.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.util.StringUtil;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
/**
* 1,若节点<BICFI>有值,则设置57 option为“A”,同时BIC取此栏位;
* 2,若节点<IBAN>有值,则作为57A的账号;
* 3,若节点<Othr><Id>有值,则作为57A的账号;
* <CdtTrfTxInf>[1]<CdtrAgt><FinInstnId><BICFI>
* <CdtTrfTxInf>[1]<CdtrAgtAcct><Id><IBAN>
* <CdtTrfTxInf>[1]<CdtrAgtAcct><Id><Othr><Id>
* <CdtTrfTxInf>[1]<CdtrAgtAcct><Id><Othr><SchmeNm><Cd>
* * 1,若节点<Nm>有值,则设置57 option为“D”,且名称取自此节点,而地址需要合并截取???
* * 2,账号取值规则和节点与57A相同
* * <CdtTrfTxInf>[1]<CdtrAgt><FinInstnId><Nm>
* * <CdtTrfTxInf>[1]<CdtrAgt><FinInstnId><PstlAdr><AdrLine>[1],<AdrLine>[2],<AdrLine>[3]
*/
public class Field57AGenerate extends AbstractMx2MtFieldsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field57AGenerate.class);
public class Field57AGenerate extends AbstractMx2MtTagsGenerate {
@Override
public void fieldsGenerate() throws SwiftException {
try {
String field57Option = "";
String field57 = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String bicCode = getBicCode(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.CdtrAgt.FinInstnId");
String account = getAccount();
String name = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.CdtrAgt.FinInstnId.Nm");
if (StringUtil.isNotEmpty(bicCode)) {
field57Option = "A";
if (StringUtil.isNotEmpty(account)) {
field57 = account + Mx2MtConstants.NEW_LINE + bicCode;
} else {
field57 = bicCode;
}
} else if (StringUtil.isNotEmpty(name)){
field57Option = "D";
if (name.length() > 35) name = name.substring(0, 35);
if (StringUtil.isNotEmpty(account)) {
field57 = account + Mx2MtConstants.NEW_LINE + name;
} else {
field57 = name;
}
int addressCounts = getXmlNodeCounts(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.CdtrAgt.FinInstnId.PstlAdr.AdrLine");
if (addressCounts > 0) {
for (int i=0; i<addressCounts; i++) {
if (i == 3) break;
String address = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.CdtrAgt.FinInstnId.PstlAdr.AdrLine("+i+")");
if (address.length() > 35) address = address.substring(0, 35);
field57 += Mx2MtConstants.NEW_LINE + address;
}
}
}
map.put("field57Option", field57Option);
map.put("field57A", field57);
} catch (Exception e) {
throw new SwiftException(e.getMessage());
}
}
public void tagGenerate() throws SwiftException {
private String getAccount() {
try {
String account = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String iban = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.CdtrAgtAcct.Id.IBAN");
String otherId = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.CdtrAgtAcct.Id.Othr.Id");
//String schmeNameCd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.DbtrAgtAcct.Id.SchmeNm.Cd");
if (StringUtil.isNotEmpty(iban)) {
account = "/" + iban;
} else if (StringUtil.isNotEmpty(otherId)) {
account = "//CH" + otherId;
}
if (StringUtil.isNotEmpty(account) && account.length() > 35) {
account = account.substring(0, 35);
}
return account;
} catch (Exception e) {
throw new SwiftException(e.getMessage());
}
}
}
package com.brilliance.swift.mx2mt.mt202cov202.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.util.StringUtil;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
/**
* 1,若节点<BICFI>有值,则设置58 option为“A”,同时BIC取此栏位;
* 2,若节点<IBAN>有值,则作为58A的账号;
* 3,若节点<Othr><Id>有值,则作为58A的账号;
* <CdtTrfTxInf>[1]<Cdtr><FinInstnId><BICFI>
* <CdtTrfTxInf>[1]<CdtrAcct><Id><IBAN>
* <CdtTrfTxInf>[1]<CdtrAcct><Id><Othr><Id>
* <CdtTrfTxInf>[1]<CdtrAcct><Id><Othr><SchmeNm><Cd>
* * 1,若节点<Nm>有值,则设置58 option为“D”,且名称取自此节点,而地址需要合并截取???
* * 2,账号取值规则和节点与58A相同
* * <CdtTrfTxInf>[1]<Cdtr><FinInstnId><Nm>
* * <CdtTrfTxInf>[1]<Cdtr><FinInstnId><PstlAdr><AdrLine>[1],<AdrLine>[2],<AdrLine>[3]
*/
public class Field58AGenerate extends AbstractMx2MtFieldsGenerate {
public class Field58AGenerate extends AbstractMx2MtTagsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field58AGenerate.class);
@Override
public void fieldsGenerate() throws SwiftException {
try {
String field58Option = "";
String field58 = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String bicCode = getBicCode(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.Cdtr.FinInstnId");
String account = getAccount();
String name = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.Cdtr.FinInstnId.Nm");
if (StringUtil.isNotEmpty(bicCode)) {
field58Option = "A";
if (StringUtil.isNotEmpty(account)) {
field58 = account + Mx2MtConstants.NEW_LINE + bicCode;
} else {
field58 = bicCode;
}
} else if (StringUtil.isNotEmpty(name)){
field58Option = "D";
if (name.length() > 35) name = name.substring(0, 35);
if (StringUtil.isNotEmpty(account)) {
field58 = account + Mx2MtConstants.NEW_LINE + name;
} else {
field58 = name;
}
int addressCounts = getXmlNodeCounts(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.Cdtr.FinInstnId.PstlAdr.AdrLine");
if (addressCounts > 0) {
for (int i=0; i<addressCounts; i++) {
if (i == 3) break;
String address = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.Cdtr.FinInstnId.PstlAdr.AdrLine("+i+")");
if (address.length() > 35) address = address.substring(0, 35);
field58 += Mx2MtConstants.NEW_LINE + address;
}
}
}
map.put("field58Option", field58Option);
map.put("field58A", field58);
} catch (Exception e) {
throw new SwiftException(e.getMessage());
}
}
public void tagGenerate() throws SwiftException {
private String getAccount() {
try {
String account = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String iban = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.CdtrAcct.Id.IBAN");
String otherId = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.CdtrAcct.Id.Othr.Id");
//String schmeNameCd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.DbtrAgtAcct.Id.SchmeNm.Cd");
if (StringUtil.isNotEmpty(iban)) {
account = "/" + iban;
} else if (StringUtil.isNotEmpty(otherId)) {
account = "//CH" + otherId;
}
if (StringUtil.isNotEmpty(account) && account.length() > 35) {
account = account.substring(0, 35);
}
return account;
} catch (Exception e) {
throw new SwiftException(e.getMessage());
}
}
}
package com.brilliance.swift.mx2mt.mt202cov202.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.util.StringUtil;
import com.prowidesoftware.swift.model.mx.dic.Instruction4Code;
import com.prowidesoftware.swift.model.mx.dic.Instruction5Code;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.List;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
/**
* 1,若<BICFI>有值,则转为“/INS/此节点的值”
* 2,如果<Nm>有值,则取值为“/INS/”+此节点的值,超过35字节则将剩下内容用“//内容“的方式进行截取
* 3,如果节点<InstrForCdtrAgt><Cd>没有值,但节点<InstrForCdtrAgt><InstrInf>有值,则取值“/ACC/”+<InstrForCdtrAgt><InstrInf>节点的值
* 4,如果节点<InstrForCdtrAgt><Cd>值为PHOB,则取值“/PHONBEN/”+<InstrForCdtrAgt><InstrInf>节点的值
* 5,如果节点<InstrForCdtrAgt><Cd>值为TELB,则取值“/PHONBEN/”+<InstrForCdtrAgt><InstrInf>节点的值
* 6,如果节点<InstrForNxtAgt><Cd>值为PHOA,且56a不存在,则取值“/PHON/”+<InstrForNxtAgt><InstrInf>节点的值
* 7,如果节点<InstrForNxtAgt><Cd>值为TELA,则取值“/TELE/”+<InstrForNxtAgt><InstrInf>节点的值
* 8,如果节点<InstrForNxtAgt><Cd>值为空,且<InstrInf>节点有值,则取值“/REC/”+<InstrForNxtAgt><InstrInf>节点的值
* 9,如果节点<InstrForNxtAgt><Cd>值为PHOA,且56a存在,则取值“/PHONIBK/”+<InstrForNxtAgt><InstrInf>节点的值
* <CdtTrfTxInf>[1]<PrvsInstgAgt1><FinInstnId><BICFI>
* <CdtTrfTxInf>[1]<PrvsInstgAgt1><FinInstnId><Nm>
* <CdtTrfTxInf>[1]<InstrForCdtrAgt><Cd>
* <CdtTrfTxInf>[1]<InstrForCdtrAgt><InstrInf>
* <CdtTrfTxInf>[1]<InstrForNxtAgt><Cd>
* <CdtTrfTxInf>[1]<InstrForNxtAgt><InstrInf>
* <CdtTrfTxInf>[1]<RmtInf><Ustrd>
*/
public class Field72Generate extends AbstractMx2MtFieldsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field72Generate.class);
public class Field72Generate extends AbstractMx2MtTagsGenerate {
@Override
public void fieldsGenerate() throws SwiftException {
try {
List<String> field72List = new ArrayList<>();
List<String> field72TmpList = new ArrayList<>();
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String bicCode = getBicCode(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.PrvsInstgAgt1.FinInstnId");
if (StringUtil.isEmpty(bicCode)) {
bicCode = getBicCode(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.PrvsInstgAgt.FinInstnId");
}
String name = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.PrvsInstgAgt1.FinInstnId.Nm");
if (StringUtil.isEmpty(name)) {
name = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.PrvsInstgAgt.FinInstnId.Nm");
}
if (StringUtil.isNotEmpty(bicCode)) {
bicCode = Mx2MtConstants.INS + bicCode;
field72TmpList.addAll(StringUtil.outStringList(bicCode, 35, "//"));
} else if (StringUtil.isNotEmpty(name)) {
name = Mx2MtConstants.INS + name;
field72TmpList.addAll(StringUtil.outStringList(name, 35, "//"));
}
String instrForCdtrAgtCard = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.InstrForCdtrAgt.Cd");
String instrForCdtrAgtInstrInf = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.InstrForCdtrAgt.InstrInf");
if (instrForCdtrAgtCard == null && StringUtil.isNotEmpty(instrForCdtrAgtInstrInf)) {
String cdtrAgtCode = Mx2MtConstants.ACC + instrForCdtrAgtInstrInf;
field72TmpList.addAll(StringUtil.outStringList(cdtrAgtCode, 35, "//"));
} else if (Instruction5Code.PHOB.value().equals(instrForCdtrAgtCard) && StringUtil.isNotEmpty(instrForCdtrAgtInstrInf)) {
String cdtrAgtCode = Mx2MtConstants.PHONBEN + instrForCdtrAgtInstrInf;
field72TmpList.addAll(StringUtil.outStringList(cdtrAgtCode, 35, "//"));
} else if (Instruction5Code.TELB.value().equals(instrForCdtrAgtCard) && StringUtil.isNotEmpty(instrForCdtrAgtInstrInf)) {
String cdtrAgtCode = Mx2MtConstants.PHONBEN + instrForCdtrAgtInstrInf;
field72TmpList.addAll(StringUtil.outStringList(cdtrAgtCode, 35, "//"));
}
String instrForNxtAgtCard = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.InstrForNxtAgt.Cd");
String instrForNxtAgtInstrInf = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.InstrForNxtAgt.InstrInf");
if (StringUtil.isEmpty(instrForNxtAgtCard) && StringUtil.isNotEmpty(instrForNxtAgtInstrInf)) {
String nextAgentCode = Mx2MtConstants.REC + instrForNxtAgtInstrInf;
field72TmpList.addAll(StringUtil.outStringList(nextAgentCode, 35, "//"));
} else if (Instruction4Code.TELA.value().equals(instrForNxtAgtCard) && StringUtil.isNotEmpty(instrForNxtAgtInstrInf)) {
String nextAgentCode = Mx2MtConstants.TELE + instrForNxtAgtInstrInf;
field72TmpList.addAll(StringUtil.outStringList(nextAgentCode, 35, "//"));
} else if (Instruction4Code.PHOA.value().equals(instrForNxtAgtCard) && StringUtil.isNotEmpty(instrForNxtAgtInstrInf)) {
String field56Option = (String)map.get("field56Option");
String nextAgentCode = "";
if (StringUtil.isEmpty(field56Option)) {
nextAgentCode = Mx2MtConstants.PHON + instrForNxtAgtInstrInf;
} else {
nextAgentCode = Mx2MtConstants.PHONIBK + instrForNxtAgtInstrInf;
}
field72TmpList.addAll(StringUtil.outStringList(nextAgentCode, 35, "//"));
}
for (int i=0; i<field72TmpList.size(); i++) {
if (i == 6) break;
if (i == 0) {
field72List.add(":72:" + field72TmpList.get(i));
} else {
field72List.add(field72TmpList.get(i));
}
}
map.put("field72List", field72List);
public void tagGenerate() throws SwiftException {
} catch (Exception e) {
throw new SwiftException("ERROR", e.getMessage());
}
}
}
package com.brilliance.swift.mx2mt.mt202cov202.impl.cov;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.util.StringUtil;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
/**
* 1,若<AnyBIC>节点有值,则取为B\50A,且BIC取此值
* 2,若节点<IBAN>有值,则在此节点值前面加上“/”后,作为50A的账号;
* 3,若节点<Othr><SchmeNm><Cd>有值,则取“//CH”+<Othr><Id>,则作为B\50A的账号;否则直接取<Othr><Id>,则作为B\50A的账号。
* <CdtTrfTxInf>[1]<UndrlygCstmrCdtTrf><Dbtr><Id><OrgId><AnyBIC>
* <CdtTrfTxInf>[1]<UndrlygCstmrCdtTrf><DbtrAcct><Id><IBAN>
* <CdtTrfTxInf>[1]<UndrlygCstmrCdtTrf><DbtrAcct><Id><Othr><Id>
* <CdtTrfTxInf>[1]<UndrlygCstmrCdtTrf><DbtrAcct><Id><Othr><SchmeNm><Cd>
* * 1,待补充???
* * 2,账号取值规则与B\50A相同
* * 1,若<Dbtr><Nm>有录入,则设置B\50 option为“K”,且名称取自此节点,而地址需要合并截取???
* * 2,账号取值规则与B\50A相同
* * <CdtTrfTxInf>[1]<UndrlygCstmrCdtTrf><Dbtr><Nm>
* * <CdtTrfTxInf>[1]<UndrlygCstmrCdtTrf><Dbtr><PstlAdr><AdrLine>
*/
public class Field50AGenerate extends AbstractMx2MtFieldsGenerate {
public class Field50AGenerate extends AbstractMx2MtTagsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field50AGenerate.class);
@Override
public void fieldsGenerate() throws SwiftException {
public void tagGenerate() throws SwiftException {
// TODO 50F取值待补充
try {
String field50BOption = "";
String field50B = "";
Document document = (Document) map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String bicCode = getBicCode(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.Dbtr.Id.OrgId");
String name = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.Dbtr.Nm");
String account = getAccount();
if (StringUtil.isNotEmpty(bicCode)) {
field50BOption = "A";
if (StringUtil.isNotEmpty(account)) {
field50B = account + Mx2MtConstants.NEW_LINE + bicCode;
} else {
field50B = bicCode;
}
} else if (StringUtil.isNotEmpty(name)) {
field50BOption = "K";
if (name.length() > 35) name = name.substring(0, 35);
if (StringUtil.isNotEmpty(account)) {
field50B = account + Mx2MtConstants.NEW_LINE + name;
} else {
field50B = name;
}
int addressCounts = getXmlNodeCounts(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.Dbtr.PstlAdr.AdrLine");
if (addressCounts > 0) {
for (int i=0; i<addressCounts; i++) {
if (i == 3) break;
String address = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.Dbtr.PstlAdr.AdrLine("+i+")");
if (address.length() > 35) address = address.substring(0, 35);
field50B += Mx2MtConstants.NEW_LINE + address;
}
}
}
map.put("field50BOption", field50BOption);
map.put("field50B", field50B);
} catch (Exception e) {
throw new SwiftException(e.getMessage());
}
}
private String getAccount() {
try {
String account = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String iban = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.DbtrAcct.Id.IBAN");
String otherId = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.DbtrAcct.Id.Othr.Id");
if (StringUtil.isNotEmpty(iban)) {
account = "/" + iban;
} else if (StringUtil.isNotEmpty(otherId)) {
account = "//CH" + otherId;
}
if (StringUtil.isNotEmpty(account) && account.length() > 35) {
account = account.substring(0, 35);
}
return account;
} catch (Exception e) {
throw new SwiftException(e.getMessage());
}
}
}
package com.brilliance.swift.mx2mt.mt202cov202.impl.cov;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.util.NumberUtil;
import com.brilliance.swift.util.StringUtil;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
import java.math.BigDecimal;
/**
* 直接取此节点作为33B的货币和金额,XXX是货币
* <CdtTrfTxInf>[1]<UndrlygCstmrCdtTrf><InstdAmt Ccy="xxx">
*/
public class FieldB33BGenerate extends AbstractMx2MtFieldsGenerate {
private static final Logger logger = LoggerFactory.getLogger(FieldB33BGenerate.class);
public class FieldB33BGenerate extends AbstractMx2MtTagsGenerate {
@Override
public void fieldsGenerate() throws SwiftException {
try {
Document document = (Document) map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String filed33B = "";
String ccy = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.InstdAmt@Ccy");
String amt = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.InstdAmt");
if (StringUtil.isNotEmpty(ccy) && StringUtil.isNotEmpty(amt)) {
String amtStr = NumberUtil.formatAmt(new BigDecimal(amt), ccy);
filed33B = ccy+amtStr;
}
map.put("field33B", filed33B);
} catch(Exception e) {
throw new SwiftException("ERROR", e.getMessage());
}
public void tagGenerate() throws SwiftException {
}
}
package com.brilliance.swift.mx2mt.mt202cov202.impl.cov;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.util.StringUtil;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
/**
* 1,若<BICFI>节点有值,则取为B\52A,且BIC取此值
* 2,若节点<IBAN>有值,则在此节点值前面加上“/”后,作为52A的账号;
* 3,若节点<Othr><SchmeNm><Cd>有值,则取“//CH”+<Othr><Id>,则作为B\50A的账号;否则直接取<Othr><Id>,则作为B\52A的账号。
* <CdtTrfTxInf>[1]<UndrlygCstmrCdtTrf><DbtrAgt><FinInstnId><BICFI>
* <CdtTrfTxInf>[1]<UndrlygCstmrCdtTrf><DbtrAgtAcct><Id><IBAN>
* <CdtTrfTxInf>[1]<UndrlygCstmrCdtTrf><DbtrAgtAcct><Id><Othr><Id>
* <CdtTrfTxInf>[1]<UndrlygCstmrCdtTrf><DbtrAgtAcct><Id><Othr><SchmeNm><Cd>
* * 1,若节点<Nm>有值,则设置B\52 option为“D”,且名称取自此节点,而地址需要合并截取???
* * 2,账号取值规则和节点与B\52A相同
* * <CdtTrfTxInf>[1]<UndrlygCstmrCdtTrf><DbtrAgt><FinInstnId><Nm>
* * <CdtTrfTxInf>[1]<UndrlygCstmrCdtTrf><DbtrAgt><FinInstnId><PstlAdr><AdrLine>[1],<AdrLine>[2],<AdrLine>[3]
*/
public class FieldB52AGenerate extends AbstractMx2MtFieldsGenerate {
private static final Logger logger = LoggerFactory.getLogger(FieldB52AGenerate.class);
public class FieldB52AGenerate extends AbstractMx2MtTagsGenerate {
@Override
public void fieldsGenerate() throws SwiftException {
try {
String field52BOption = "";
String field52B = "";
Document document = (Document) map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String bicCode = getBicCode(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.DbtrAgt.FinInstnId");
String name = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.DbtrAgt.FinInstnId.Nm");
String account = getAccount();
if (StringUtil.isNotEmpty(bicCode)) {
field52BOption = "A";
if (StringUtil.isNotEmpty(account)) {
field52B = account + Mx2MtConstants.NEW_LINE + bicCode;
} else {
field52B = bicCode;
}
} else if (StringUtil.isNotEmpty(name)) {
field52BOption = "D";
if (name.length() > 35) name = name.substring(0, 35);
if (StringUtil.isNotEmpty(account)) {
field52B = account + Mx2MtConstants.NEW_LINE + name;
} else {
field52B = name;
}
int addressCounts = getXmlNodeCounts(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.DbtrAgt.FinInstnId.PstlAdr.AdrLine");
if (addressCounts > 0) {
for (int i=0; i<addressCounts; i++) {
if (i == 3) break;
String address = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.DbtrAgt.FinInstnId.PstlAdr.AdrLine("+i+")");
if (address.length() > 35) address = address.substring(0, 35);
field52B += Mx2MtConstants.NEW_LINE + address;
}
}
}
map.put("field52BOption", field52BOption);
map.put("field52B", field52B);
} catch (Exception e) {
throw new SwiftException(e.getMessage());
}
}
public void tagGenerate() throws SwiftException {
private String getAccount() {
try {
String account = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String iban = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.DbtrAgtAcct.Id.IBAN");
String otherId = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.DbtrAgtAcct.Id.Othr.Id");
if (StringUtil.isNotEmpty(iban)) {
account = "/" + iban;
} else if (StringUtil.isNotEmpty(otherId)) {
account = "//CH" + otherId;
}
if (StringUtil.isNotEmpty(account) && account.length() > 35) {
account = account.substring(0, 35);
}
return account;
} catch (Exception e) {
throw new SwiftException(e.getMessage());
}
}
}
package com.brilliance.swift.mx2mt.mt202cov202.impl.cov;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.util.StringUtil;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
/**
* 1,若节点<BICFI>有值,则设置B\56 option为“A”,同时BIC取此栏位;
* 2,若节点<IBAN>有值,则作为56A的账号;
* 3,若节点<Othr><SchmeNm><Cd>有值,则取“//CH”+<Othr><Id>,则作为B\56A的账号;否则直接取<Othr><Id>,则作为B\56A的账号。
* <CdtTrfTxInf>[1]<UndrlygCstmrCdtTrf><IntrmyAgt1><FinInstnId><BICFI>
* <CdtTrfTxInf>[1]<UndrlygCstmrCdtTrf><IntrmyAgt1Acct><Id><IBAN>
* <CdtTrfTxInf>[1]<UndrlygCstmrCdtTrf><IntrmyAgt1Acct><Id><Othr><Id>
* <CdtTrfTxInf>[1]<UndrlygCstmrCdtTrf><IntrmyAgt1Acct><Id><Othr><SchmeNm><Cd>
* 56c
* 如果<IntrmyAgt1><FinInstnId><BICFI>为空,且<IntrmyAgt1><FinInstnId><Nm>为空,但节点<IBAN>有值,或者节点<Othr><Id>有值,则设置B\56option为“C”
* 若节点<Id><Othr><Id>不为空,则取“//CH”+此节点作为账号,否则取节点<MmbId>作为账号:
<CdtTrfTxInf>[1]<UndrlygCstmrCdtTrf><IntrmyAgt1><FinInstnId><ClrSysMmbId><ClrSysId><Cd>
<CdtTrfTxInf>[1]<UndrlygCstmrCdtTrf><IntrmyAgt1><FinInstnId><ClrSysMmbId><ClrSysId><Prtry>
<CdtTrfTxInf>[1]<UndrlygCstmrCdtTrf><IntrmyAgt1><FinInstnId><ClrSysMmbId><MmbId>
* 56d
* 1,若节点<Nm>有值,则设置B\56 option为“D”,且名称取自此节点,而地址需要合并截取???
* 2,账号取值规则和节点与B\56A相同
* <CdtTrfTxInf>[1]<UndrlygCstmrCdtTrf><IntrmyAgt1><FinInstnId><Nm>
* <CdtTrfTxInf>[1]<UndrlygCstmrCdtTrf><IntrmyAgt1><FinInstnId><PstlAdr><AdrLine>[1],<AdrLine>[2],<AdrLine>[3]
*/
public class FieldB56Generate extends AbstractMx2MtFieldsGenerate {
public class FieldB56Generate extends AbstractMx2MtTagsGenerate {
private static final Logger logger = LoggerFactory.getLogger(FieldB56Generate.class);
@Override
public void fieldsGenerate() throws SwiftException {
try {
String field56BOption = "";
String field56B = "";
Document document = (Document) map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String bicCode = getBicCode(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.IntrmyAgt1.FinInstnId");
String name = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.IntrmyAgt1.FinInstnId.Nm");
String account = getAccount();
if (StringUtil.isNotEmpty(bicCode)) {
field56BOption = "A";
if (StringUtil.isNotEmpty(account)) {
field56B = account + Mx2MtConstants.NEW_LINE + bicCode;
} else {
field56B = bicCode;
}
} else if (StringUtil.isNotEmpty(name)) {
field56BOption = "D";
if (name.length() > 35) name = name.substring(0, 35);
if (StringUtil.isNotEmpty(account)) {
field56B = account + Mx2MtConstants.NEW_LINE + name;
} else {
field56B = name;
}
int addressCounts = getXmlNodeCounts(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.IntrmyAgt1.FinInstnId.PstlAdr.AdrLine");
if (addressCounts > 0) {
for (int i=0; i<addressCounts; i++) {
if (i == 3) break;
String address = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.IntrmyAgt1.FinInstnId.PstlAdr.AdrLine("+i+")");
if (address.length() > 35) address = address.substring(0, 35);
field56B += Mx2MtConstants.NEW_LINE + address;
}
}
} else if (StringUtil.isNotEmpty(account)) {
field56BOption = "C";
String iban = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.IntrmyAgt1Acct.Id.IBAN");
String otherId = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.IntrmyAgt1Acct.Id.Othr.Id");
String mmbId = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.IntrmyAgt1.FinInstnId.ClrSysMmbId.MmbId");
//String schmeNameCd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.DbtrAgtAcct.Id.SchmeNm.Cd");
if (StringUtil.isNotEmpty(otherId)) {
account = "//CH" + otherId;
} else if (StringUtil.isNotEmpty(mmbId)) {
account = "/" + mmbId;
} else {
account = "/" + iban;
}
if (account.length() > 35) {
account = account.substring(0, 35);
}
field56B = account;
}
map.put("field56BOption", field56BOption);
map.put("field56B", field56B);
} catch (Exception e) {
throw new SwiftException(e.getMessage());
}
}
public void tagGenerate() throws SwiftException {
private String getAccount() {
try {
String account = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String iban = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.IntrmyAgt1Acct.Id.IBAN");
String otherId = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.IntrmyAgt1Acct.Id.Othr.Id");
if (StringUtil.isNotEmpty(iban)) {
account = "/" + iban;
} else if (StringUtil.isNotEmpty(otherId)) {
account = "//CH" + otherId;
}
if (StringUtil.isNotEmpty(account) && account.length() > 35) {
account = account.substring(0, 35);
}
return account;
} catch (Exception e) {
throw new SwiftException(e.getMessage());
}
}
}
package com.brilliance.swift.mx2mt.mt202cov202.impl.cov;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.util.StringUtil;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
/**
* 57A
* 1,若节点<BICFI>有值,则设置B\57 option为“A”,同时BIC取此栏位;
* 2,若节点<IBAN>有值,则作为57A的账号;
* 3,若节点<Othr><SchmeNm><Cd>有值,则取“//CH”+<Othr><Id>,则作为B\57A的账号;否则直接取<Othr><Id>,则作为B\57A的账号。
* <CdtTrfTxInf>[1]<<UndrlygCstmrCdtTrf>CdtrAgt><FinInstnId><BICFI>
* <CdtTrfTxInf>[1]<UndrlygCstmrCdtTrf><CdtrAgtAcct><Id><IBAN>
* <CdtTrfTxInf>[1]<UndrlygCstmrCdtTrf><CdtrAgtAcct><Id><Othr><Id>
* <CdtTrfTxInf>[1]<UndrlygCstmrCdtTrf><CdtrAgtAcct><Id><Othr><SchmeNm><Cd>
* 57C
* 如果<CdtrAgt><FinInstnId><BICFI>为空,且<CdtrAgt><FinInstnId><Nm>为空,但节点<IBAN>有值,或者节点<Othr><Id>有值,则设置B\57 option为“C”
* 若节点<Id><Othr><Id>不为空,则取“//CH”+此节点作为账号,否则取节点<MmbId>作为账号:
* 57d
* 1,若节点<Nm>有值,则设置B\57 option为“D”,且名称取自此节点,而地址需要合并截取???
* 2,账号取值规则和节点与B\57A相同
* <CdtTrfTxInf>[1]<UndrlygCstmrCdtTrf><CdtrAgt><FinInstnId><Nm>
* <CdtTrfTxInf>[1]<UndrlygCstmrCdtTrf><CdtrAgt><FinInstnId><PstlAdr><AdrLine>[1],<AdrLine>[2],<AdrLine>[3]
*/
public class FieldB57Generate extends AbstractMx2MtFieldsGenerate {
public class FieldB57Generate extends AbstractMx2MtTagsGenerate {
private static final Logger logger = LoggerFactory.getLogger(FieldB57Generate.class);
@Override
public void fieldsGenerate() throws SwiftException {
try {
String field57BOption = "";
String field57B = "";
Document document = (Document) map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String bicCode = getBicCode(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.CdtrAgt.FinInstnId");
String name = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.CdtrAgt.FinInstnId.Nm");
String account = getAccount();
if (StringUtil.isNotEmpty(bicCode)) {
field57BOption = "A";
if (StringUtil.isNotEmpty(account)) {
field57B = account + Mx2MtConstants.NEW_LINE + bicCode;
} else {
field57B = bicCode;
}
} else if (StringUtil.isNotEmpty(name)) {
field57BOption = "D";
if (name.length() > 35) name = name.substring(0, 35);
if (StringUtil.isNotEmpty(account)) {
field57B = account + Mx2MtConstants.NEW_LINE + name;
} else {
field57B = name;
}
int addressCounts = getXmlNodeCounts(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.CdtrAgt.FinInstnId.PstlAdr.AdrLine");
if (addressCounts > 0) {
for (int i=0; i<addressCounts; i++) {
if (i == 3) break;
String address = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.CdtrAgt.FinInstnId.PstlAdr.AdrLine("+i+")");
if (address.length() > 35) address = address.substring(0, 35);
field57B += Mx2MtConstants.NEW_LINE + address;
}
}
} else if (StringUtil.isNotEmpty(account)) {
field57BOption = "C";
String iban = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.CdtrAgtAcct.Id.IBAN");
String otherId = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.CdtrAgtAcct.Id.Othr.Id");
String mmbId = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.CdtrAgt.FinInstnId.ClrSysMmbId.MmbId");
//String schmeNameCd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.DbtrAgtAcct.Id.SchmeNm.Cd");
if (StringUtil.isNotEmpty(otherId)) {
account = "//CH" + otherId;
} else if (StringUtil.isNotEmpty(mmbId)) {
account = "/" + mmbId;
} else {
account = "/" + iban;
}
if (account.length() > 35) {
account = account.substring(0, 35);
}
field57B = account;
}
map.put("field57BOption", field57BOption);
map.put("field57B", field57B);
} catch (Exception e) {
throw new SwiftException(e.getMessage());
}
}
public void tagGenerate() throws SwiftException {
private String getAccount() {
try {
String account = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String iban = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.CdtrAgtAcct.Id.IBAN");
String otherId = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.CdtrAgtAcct.Id.Othr.Id");
if (StringUtil.isNotEmpty(iban)) {
account = "/" + iban;
} else if (StringUtil.isNotEmpty(otherId)) {
account = "//CH" + otherId;
}
if (StringUtil.isNotEmpty(account) && account.length() > 35) {
account = account.substring(0, 35);
}
return account;
} catch (Exception e) {
throw new SwiftException(e.getMessage());
}
}
}
package com.brilliance.swift.mx2mt.mt202cov202.impl.cov;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.util.StringUtil;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
/**
* 1,若节点<Nm>有值,则设置B\59 option为“”,且名称取自此节点,而地址需要合并截取???
* 2,若节点<IBAN>有值,则在此节点的值前面加上“/”后,作为B\59账号的值;
* 3,若节点<Othr><Id>有值,且节点<Othr><SchmeNm><Cd>有值,则在节点<Othr><Id>的值前面加上“//CH”后,作为B\59账号的值;
* 4,若节点<Othr><Id>有值,且节点<Othr><SchmeNm><Cd>没值,则在节点<Othr><Id>的值前面加上“/”后,作为B\59账号的值;
* <CdtTrfTxInf>[1]<UndrlygCstmrCdtTrf><Cdtr><Nm>
* <CdtTrfTxInf>[1]<UndrlygCstmrCdtTrf><Cdtr><PstlAdr><AdrLine>[1],<AdrLine>[2],<AdrLine>[3]
* <CdtTrfTxInf>[1]<UndrlygCstmrCdtTrf><CdtrAcct><Id><IBAN>
* <CdtTrfTxInf>[1]<UndrlygCstmrCdtTrf><CdtrAcct><Id><Othr><Id>
* <CdtTrfTxInf>[1]<UndrlygCstmrCdtTrf><CdtrAcct><Id><Othr><SchmeNm><Cd>
* 1,若节点<AnyBIC>有值,则设置B\59 option为“A”,同时BIC取此栏位;
* 2,账号取值规则和节点与B\59相同
* <CdtTrfTxInf>[1]<UndrlygCstmrCdtTrf><Cdtr><Id><OrgId><AnyBIC>
*/
public class FieldB59Generate extends AbstractMx2MtFieldsGenerate {
public class FieldB59Generate extends AbstractMx2MtTagsGenerate {
private static final Logger logger = LoggerFactory.getLogger(FieldB59Generate.class);
@Override
public void fieldsGenerate() throws SwiftException {
try {
String field59BOption = "";
String field59B = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String bicCode = getBicCode(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.Cdtr.Id.OrgId");
String account = getAccount();
String name = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.Cdtr.Nm");
if (StringUtil.isNotEmpty(name)){
field59BOption = "NOLETTER";
if (name.length() > 35) name = name.substring(0, 35);
if (StringUtil.isNotEmpty(account)) {
field59B = account + Mx2MtConstants.NEW_LINE + name;
} else {
field59B = name;
}
int addressCounts = getXmlNodeCounts(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.Cdtr.PstlAdr.AdrLine");
if (addressCounts > 0) {
for (int i=0; i<addressCounts; i++) {
if (i == 3) break;
String address = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.Cdtr.PstlAdr.AdrLine("+i+")");
if (address.length() > 35) address = address.substring(0, 35);
field59B += Mx2MtConstants.NEW_LINE + address;
}
}
} else if (StringUtil.isNotEmpty(bicCode)) {
field59BOption = "A";
if (StringUtil.isNotEmpty(account)) {
field59B = account + Mx2MtConstants.NEW_LINE + bicCode;
} else {
field59B = bicCode;
}
}
map.put("field59BOption", field59BOption);
map.put("field59B", field59B);
} catch (Exception e) {
throw new SwiftException(e.getMessage());
}
}
public void tagGenerate() throws SwiftException {
private String getAccount() {
try {
String account = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String iban = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.CdtrAcct.Id.IBAN");
String otherId = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.CdtrAcct.Id.Othr.Id");
//String schmeNameCd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.DbtrAgtAcct.Id.SchmeNm.Cd");
if (StringUtil.isNotEmpty(iban)) {
account = "/" + iban;
} else if (StringUtil.isNotEmpty(otherId)) {
account = "//CH" + otherId;
}
if (StringUtil.isNotEmpty(account) && account.length() > 35) {
account = account.substring(0, 35);
}
return account;
} catch (Exception e) {
throw new SwiftException(e.getMessage());
}
}
}
......@@ -2,33 +2,16 @@ package com.brilliance.swift.mx2mt.mt202cov202.impl.cov;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
import com.brilliance.swift.util.StringUtil;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 取此节点按4*35的格式拆分,放入70栏位中(最多4行每行最多35个字符)
* <CdtTrfTxInf>[1]<UndrlygCstmrCdtTrf><RmtInf><Ustrd>[1]
*/
public class FieldB70Generate extends AbstractMx2MtFieldsGenerate {
private static final Logger logger = LoggerFactory.getLogger(FieldB70Generate.class);
public class FieldB70Generate extends AbstractMx2MtTagsGenerate {
@Override
public void fieldsGenerate() throws SwiftException {
try {
String field70B = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
int ustrdCounts = getXmlNodeCounts(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.RmtInf.Ustrd");
if (ustrdCounts > 0) {
String ustrd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.RmtInf.Ustrd(0)");
field70B = StringUtil.getStringByEnter(ustrd, 35, 4);
}
map.put("field70B", field70B);
} catch (Exception e) {
throw new SwiftException("ERROR", e.getMessage());
}
public void tagGenerate() throws SwiftException {
}
}
......@@ -2,7 +2,7 @@ package com.brilliance.swift.mx2mt.mt202cov202.impl.cov;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
import com.brilliance.swift.util.StringUtil;
import org.dom4j.Document;
import org.slf4j.Logger;
......@@ -11,46 +11,10 @@ import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.List;
public class FieldB72Generate extends AbstractMx2MtFieldsGenerate {
private static final Logger logger = LoggerFactory.getLogger(FieldB72Generate.class);
public class FieldB72Generate extends AbstractMx2MtTagsGenerate {
@Override
public void fieldsGenerate() throws SwiftException {
try {
List<String> field72List = new ArrayList<>();
List<String> field72TmpList = new ArrayList<>();
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String bicCode = getBicCode(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.PrvsInstgAgt1.FinInstnId");
String name = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.PrvsInstgAgt1.FinInstnId.Nm");
if (StringUtil.isNotEmpty(bicCode)) {
bicCode = Mx2MtConstants.INS + bicCode;
field72TmpList.addAll(StringUtil.outStringList(bicCode, 35, "//"));
} else if (StringUtil.isNotEmpty(name)) {
name = Mx2MtConstants.INS + name;
field72TmpList.addAll(StringUtil.outStringList(name, 35, "//"));
}
String cdtrAgtInstrInf = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.InstrForCdtrAgt.InstrInf");
if (StringUtil.isNotEmpty(cdtrAgtInstrInf)) {
cdtrAgtInstrInf = Mx2MtConstants.ACC + cdtrAgtInstrInf;
field72TmpList.addAll(StringUtil.outStringList(cdtrAgtInstrInf, 35, "//"));
}
String nxtAgtInstrInf = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.InstrForNxtAgt.InstrInf");
if (StringUtil.isNotEmpty(nxtAgtInstrInf)) {
nxtAgtInstrInf = Mx2MtConstants.REC + nxtAgtInstrInf;
field72TmpList.addAll(StringUtil.outStringList(nxtAgtInstrInf, 35, "//"));
}
for (int i=0; i<field72TmpList.size(); i++) {
if (i == 6) break;
if (i == 0) {
field72List.add(":72:" + field72TmpList.get(i));
} else {
field72List.add(field72TmpList.get(i));
}
}
map.put("field72BList", field72List);
} catch (Exception e) {
throw new SwiftException("ERROR", e.getMessage());
}
public void tagGenerate() throws SwiftException {
}
}
......@@ -3,14 +3,14 @@ package com.brilliance.swift.mx2mt.mt900910;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtCreator;
import com.brilliance.swift.mx2mt.Mx2MtFieldsGenerate;
import com.brilliance.swift.mx2mt.Mx2MtContextIdentifier;
import com.brilliance.swift.mx2mt.Mx2MtTagsGenerate;
import com.brilliance.swift.mx2mt.mt900910.impl.*;
import com.brilliance.swift.util.StringUtil;
import com.brilliance.swift.util.XmlUtil;
import com.prowidesoftware.swift.model.SwiftBlock3;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.mx.dic.CreditDebitCode;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.List;
......@@ -18,31 +18,31 @@ import java.util.Map;
public class Mx2Mt900910Creator extends AbstractMx2MtCreator {
private static final Logger logger = LoggerFactory.getLogger(Mx2Mt900910Creator.class);
@Override
public void preProcess() {
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
super.preProcess();
Document document = (Document)context.get(Mx2MtContextIdentifier.MX_XMl_DOCUMENT, true);
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("Ntfctn"));
map.put(Mx2MtConstants.MT_TEMPLATE_NAME, "swift_mt_900_910.vm");
context.set(Mx2MtContextIdentifier.APPHDR_PARENT_ELEMENT_NAME, parentElementMaps.get("AppHdr"));
context.set(Mx2MtContextIdentifier.GRPHDR_PARENT_ELEMENT_NAME, parentElementMaps.get("GrpHdr"));
context.set(Mx2MtContextIdentifier.BODY_PARENT_ELEMENT_NAME, parentElementMaps.get("Ntfctn"));
}
@Override
public void generateHead3() {
String head3 = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String uetr = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Ntfctn.Ntry.NtryDtls.TxDtls.Refs.UETR");
public void withBlock3() throws SwiftException {
super.withBlock3();
SwiftBlock3 block3 = context.get(SwiftMessage.class).getBlock3();
Document document = (Document)context.get(Mx2MtContextIdentifier.MX_XMl_DOCUMENT, true);
String bodyParentPath = (String)context.get(Mx2MtContextIdentifier.BODY_PARENT_ELEMENT_NAME, true);
/*String uetr = getXmlNodeValue(bodyParentPath, document, "CdtTrfTxInf.PmtId.UETR");
if (StringUtil.isNotEmpty(uetr)) {
head3 += "{121:"+uetr+"}";
}
map.put("head3", head3);
block3.getTags().add(new Tag("121", uetr));
}*/
}
@Override
public List<Mx2MtFieldsGenerate> getFieldsGenerateList() {
List<Mx2MtFieldsGenerate> fieldsGenerateList = new ArrayList<>();
public List<Mx2MtTagsGenerate> getGenerateTagList() {
List<Mx2MtTagsGenerate> fieldsGenerateList = new ArrayList<>();
fieldsGenerateList.add(new Field13DGenerate());
fieldsGenerateList.add(new Field20Generate());
fieldsGenerateList.add(new Field21Generate());
......@@ -56,33 +56,17 @@ public class Mx2Mt900910Creator extends AbstractMx2MtCreator {
}
@Override
public void postProcess() {
String mtType = (String)map.get(Mx2MtConstants.MT_TYPE);
if (Mx2MtConstants.MT_TYPE_910.equals(mtType)) {
String field50a = (String)map.get("field50a");
String field52a = (String)map.get("field52a");
if (StringUtil.isEmpty(field50a) && StringUtil.isEmpty(field52a)) {
throw new SwiftException("ERROR", "Either field 50a or field 52a must be present.");
}
}
}
@Override
protected String getMtType() {
try {
String mtType = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String cdtDbtInd = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Ntfctn.Ntry.CdtDbtInd");
//judge 900 or 910
if (CreditDebitCode.DBIT.equals(CreditDebitCode.valueOf(cdtDbtInd))) {
mtType = Mx2MtConstants.MT_TYPE_900;
} else if (CreditDebitCode.CRDT.equals(CreditDebitCode.valueOf(cdtDbtInd))) {
mtType = Mx2MtConstants.MT_TYPE_910;
}
map.put(Mx2MtConstants.MT_TYPE, mtType);
return mtType;
} catch (Exception e) {
logger.error(e.getMessage());
throw new SwiftException("ERROR", e.getMessage());
String mtType = "";
Document document = (Document)context.get(Mx2MtContextIdentifier.MX_XMl_DOCUMENT);
String bodyParentPath = (String)context.get(Mx2MtContextIdentifier.BODY_PARENT_ELEMENT_NAME, true);
String cdtDbtInd = getXmlNodeValue(bodyParentPath, document, "Ntfctn.Ntry.CdtDbtInd");
//judge 900 or 910
if (CreditDebitCode.DBIT.equals(CreditDebitCode.valueOf(cdtDbtInd))) {
mtType = Mx2MtConstants.MT_TYPE_900;
} else if (CreditDebitCode.CRDT.equals(CreditDebitCode.valueOf(cdtDbtInd))) {
mtType = Mx2MtConstants.MT_TYPE_910;
}
return mtType;
}
}
package com.brilliance.swift.mx2mt.mt900910.impl;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Field13DGenerate extends AbstractMx2MtFieldsGenerate {
public class Field13DGenerate extends AbstractMx2MtTagsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field13DGenerate.class);
@Override
public void fieldsGenerate() throws SwiftException {
//no mapping
map.put("field13D", "");
public void tagGenerate() throws SwiftException {
}
}
......@@ -2,7 +2,7 @@ package com.brilliance.swift.mx2mt.mt900910.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
import com.brilliance.swift.util.StringUtil;
import org.dom4j.Document;
import org.slf4j.Logger;
......@@ -11,24 +11,12 @@ import org.slf4j.LoggerFactory;
/**
* <GrpHdr><MsgId>
*/
public class Field20Generate extends AbstractMx2MtFieldsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field20Generate.class);
public class Field20Generate extends AbstractMx2MtTagsGenerate {
@Override
public void fieldsGenerate() throws SwiftException {
try {
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);
}
} catch (Exception e) {
throw new SwiftException("ERROR", e.getMessage());
}
public void tagGenerate() throws SwiftException {
}
}
package com.brilliance.swift.mx2mt.mt900910.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.util.StringUtil;
import org.dom4j.Document;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* <Ntfctn><Ntry><NtryDtls><TxDtls><Refs><EndToEndId>
*/
public class Field21Generate extends AbstractMx2MtFieldsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field21Generate.class);
public class Field21Generate extends AbstractMx2MtTagsGenerate {
@Override
public void fieldsGenerate() throws SwiftException {
try {
String endToEndId = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String id = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Ntfctn.Ntry.NtryDtls.TxDtls.Refs.EndToEndId");
if (StringUtil.isNotEmpty(id)) {
endToEndId = id;
map.put("field21", endToEndId);
}
} catch (Exception e) {
throw new SwiftException("ERROR", e.getMessage());
}
public void tagGenerate() throws SwiftException {
}
}
package com.brilliance.swift.mx2mt.mt900910.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.util.StringUtil;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
/**
* <Ntfctn><Acct><Id><IBAN>
* <Ntfctn><Acct><Id><<Othr><Id>
*/
public class Field25aGenerate extends AbstractMx2MtFieldsGenerate {
public class Field25aGenerate extends AbstractMx2MtTagsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field25aGenerate.class);
@Override
public void fieldsGenerate() throws SwiftException {
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;
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;
map.put("field25a", iban);
}
}
} catch (Exception e) {
throw new SwiftException("ERROR", e.getMessage());
}
public void tagGenerate() throws SwiftException {
}
}
package com.brilliance.swift.mx2mt.mt900910.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.util.DateUtil;
import com.brilliance.swift.util.NumberUtil;
import com.brilliance.swift.util.StringUtil;
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 com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
/**
* <Ntfctn><Ntry><ValDt><Dt>
* <Ntfctn><Ntry><Amt Ccy="XXX">
*/
public class Field32AGenerate extends AbstractMx2MtFieldsGenerate {
public class Field32AGenerate extends AbstractMx2MtTagsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field32AGenerate.class);
@Override
public void fieldsGenerate() throws SwiftException {
try {
String dt = "";
String amt = "";
String ccy = "";
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String dateStr = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Ntfctn.Ntry.ValDt.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, "Ntfctn.Ntry.Amt");
String ccyStr = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Ntfctn.Ntry.Amt@Ccy");
if (StringUtil.isNotEmpty(amtStr)&&StringUtil.isNotEmpty(ccyStr)) {
amt = NumberUtil.formatAmt(new BigDecimal(amtStr), ccyStr);
ccy = ccyStr;
map.put("field32A",dt+ccy+amt);
}
} catch (Exception e) {
throw new SwiftException("ERROR", e.getMessage());
}
public void tagGenerate() throws SwiftException {
}
}
package com.brilliance.swift.mx2mt.mt900910.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.util.StringUtil;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
/**
* 50A
......@@ -18,78 +13,11 @@ import org.slf4j.LoggerFactory;
* <Ntfctn><Ntry><NtryDtls><TxDtls><RltdPties><Dbtr><Pty><Nm>
* <Ntfctn><Ntry><NtryDtls><TxDtls><RltdPties><Dbtr><Pty><PstlAdr><AdrLine>
*/
public class Field50aGenerate extends AbstractMx2MtFieldsGenerate {
public class Field50aGenerate extends AbstractMx2MtTagsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field50aGenerate.class);
@Override
public void fieldsGenerate() throws SwiftException {
String mtType = (String)map.get(Mx2MtConstants.MT_TYPE);
if (!Mx2MtConstants.MT_TYPE_910.equals(mtType)) {
return;
}
try {
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String field50aOption = "";
String field50a = "";
String bicCode = getBicCode(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Ntfctn.Ntry.NtryDtls.TxDtls.RltdPties.Dbtr.Id.OrgId");
String name = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Ntfctn.Ntry.NtryDtls.TxDtls.RltdPties.Dbtr.Nm");
String account = getAccount();
if(StringUtil.isNotEmpty(bicCode)){
field50aOption = "A";
if (StringUtil.isNotEmpty(account)) {
field50a = account + Mx2MtConstants.NEW_LINE + bicCode;
} else {
field50a = bicCode;
}
}else if(StringUtil.isNotEmpty(name)){
field50aOption = "K";
if (name.length() > 35) name = name.substring(0, 35);
if (StringUtil.isNotEmpty(account)) {
field50a = account + Mx2MtConstants.NEW_LINE + name;
} else {
field50a = name;
}
int adrLineCounts = getXmlNodeCounts(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Ntfctn.Ntry.NtryDtls.TxDtls.RltdPties.Dbtr.PstlAdr.AdrLine");
if(adrLineCounts>0){
for (int i=0; i<adrLineCounts; i++) {
if (i == 3) {
break;
}
String adrLine = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Ntfctn.Ntry.NtryDtls.TxDtls.RltdPties.Dbtr.PstlAdr.AdrLine("+i+")");
if (adrLine.length() > 35) adrLine = adrLine.substring(0, 35);
field50a += Mx2MtConstants.NEW_LINE + adrLine;
}
public void tagGenerate() throws SwiftException {
}
}
if (StringUtil.isNotEmpty(field50aOption) && StringUtil.isNotEmpty(field50a)) {
map.put("field50aOption", field50aOption);
map.put("field50a", field50a);
}
} catch (Exception e) {
throw new SwiftException("ERROR", e.getMessage());
}
}
private String getAccount(){
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String account = "";
String otherId = "";
String iban = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Ntfctn.Ntry.NtryDtls.TxDtls.RltdPties.DbtrAcct.Id.IBAN");
if(StringUtil.isEmpty(iban)){
otherId = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Ntfctn.Ntry.NtryDtls.TxDtls.RltdPties.DbtrAcct.Id.Othr.SchmeNm.Cd");
if(StringUtil.isEmpty(otherId)){
otherId = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Ntfctn.Ntry.NtryDtls.TxDtls.RltdPties.DbtrAcct.Id.Othr.Id");
}
}
if (StringUtil.isNotEmpty(iban)) {
account = "/"+iban;
} else if (StringUtil.isNotEmpty(otherId)) {
account = "//CH"+otherId;
}
if (StringUtil.isNotEmpty(account) && account.length() > 35) {
account = account.substring(0, 35);
}
return account;
}
}
package com.brilliance.swift.mx2mt.mt900910.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.util.StringUtil;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
//<Ntfctn><Ntry><NtryDtls><TxDtls><RltdPties><Dbtr><Pty><Id><OrgId><AnyBIC>
public class Field52aGenerate extends AbstractMx2MtFieldsGenerate {
public class Field52aGenerate extends AbstractMx2MtTagsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field52aGenerate.class);
@Override
public void fieldsGenerate() throws SwiftException {
try {
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String field52aOption = "";
String field52a = "";
String bicCode = getBicCode(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Ntfctn.Ntry.NtryDtls.TxDtls.RltdPties.Dbtr.Pty.Id.OrgId.AnyBIC");
String name = getBicCode(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Ntfctn.Ntry.NtryDtls.TxDtls.RltdPties.Dbtr.Pty.Nm");
if (StringUtil.isNotEmpty(bicCode)) {
field52a = bicCode;
}else if(StringUtil.isNotEmpty(name)){
field52aOption = "D";
int adrLineCount = getXmlNodeCounts(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Ntfctn.Ntry.NtryDtls.TxDtls.RltdPties.Dbtr.Pty.PstlAdr.AdrLine");
if(adrLineCount>0){
for (int i=0; i<adrLineCount; i++) {
if (i == 3) {
break;
}
String adrLine = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Ntfctn.Ntry.NtryDtls.TxDtls.RltdPties.Dbtr.Pty.PstlAdr.AdrLine("+i+")");
if (adrLine.length() > 35) adrLine = adrLine.substring(0, 35);
field52a += Mx2MtConstants.NEW_LINE + adrLine;
}
}
}
if (StringUtil.isNotEmpty(field52aOption) && StringUtil.isNotEmpty(field52a)) {
map.put("field52aOption", field52aOption);
map.put("field52a", field52a);
}
} catch (Exception e) {
throw new SwiftException("ERROR", e.getMessage());
}
public void tagGenerate() throws SwiftException {
}
}
package com.brilliance.swift.mx2mt.mt900910.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.util.StringUtil;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
public class Field56aGenerate extends AbstractMx2MtFieldsGenerate {
public class Field56aGenerate extends AbstractMx2MtTagsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field56aGenerate.class);
@Override
public void fieldsGenerate() throws SwiftException {
String mtType = (String)map.get(Mx2MtConstants.MT_TYPE);
if (!Mx2MtConstants.MT_TYPE_910.equals(mtType)) {
return;
}
try {
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
String field56aOption = "";
String field56a = "";
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;
} else {
field56a = bicCode;
}
}else if(StringUtil.isNotEmpty(name)){
field56aOption = "D";
if (StringUtil.isNotEmpty(memberId)) {
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){
for (int i=0; i<adrLineCount; i++) {
if (i == 3) {
break;
}
String adrLine = getXmlNodeValue(Mx2MtConstants.MAINBODY_PARENT_ELEMENT_NAME, document, "Ntfctn.Ntry.NtryDtls.TxDtls.RltdAgts.IntrmyAgt1.FinInstnId.PstlAdr.AdrLine("+i+")");
if (adrLine.length() > 35) adrLine = adrLine.substring(0, 35);
field56a += Mx2MtConstants.NEW_LINE + adrLine;
}
}
}
if (StringUtil.isNotEmpty(field56aOption) && StringUtil.isNotEmpty(field56a)) {
map.put("field56aOption", field56aOption);
map.put("field56a", field56a);
}
} catch (Exception e) {
throw new SwiftException("ERROR", e.getMessage());
}
public void tagGenerate() throws SwiftException {
}
}
package com.brilliance.swift.mx2mt.mt900910.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtFieldsGenerate;
import com.brilliance.swift.util.StringUtil;
import org.dom4j.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
public class Field72Generate extends AbstractMx2MtFieldsGenerate {
public class Field72Generate extends AbstractMx2MtTagsGenerate {
private static final Logger logger = LoggerFactory.getLogger(Field72Generate.class);
@Override
public void fieldsGenerate() throws SwiftException {
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);
}
map.put("field72", field72);
} catch (Exception e) {
logger.error(e.getMessage());
throw new SwiftException("ERROR", e.getMessage());
}
public void tagGenerate() throws SwiftException {
}
}
package com.brilliance.swift.mx2mt.mt940950;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtCreator;
import com.brilliance.swift.mx2mt.Mx2MtFieldsGenerate;
import com.brilliance.swift.mx2mt.Mx2MtContextIdentifier;
import com.brilliance.swift.mx2mt.Mx2MtTagsGenerate;
import com.brilliance.swift.mx2mt.mt940950.impl.*;
import com.brilliance.swift.util.XmlUtil;
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;
......@@ -17,49 +14,29 @@ import java.util.Map;
public class Mx2Mt940950Creator extends AbstractMx2MtCreator {
private static final Logger logger = LoggerFactory.getLogger(Mx2Mt940950Creator.class);
/**
* Object MxCamt05300102
* receiverBic
* senderBic
* field20
* field25a
* field28c
* field60Option
* field60F
* field60A
* field61List
* field62Option
* field62F
* field62M
* field64
*/
@Override
public void preProcess() {
Document document = (Document)map.get(Mx2MtConstants.MX_XML_DOCUMENT);
super.preProcess();
Document document = (Document)context.get(Mx2MtContextIdentifier.MX_XMl_DOCUMENT, true);
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");
context.set(Mx2MtContextIdentifier.APPHDR_PARENT_ELEMENT_NAME, parentElementMaps.get("AppHdr"));
context.set(Mx2MtContextIdentifier.GRPHDR_PARENT_ELEMENT_NAME, parentElementMaps.get("GrpHdr"));
context.set(Mx2MtContextIdentifier.BODY_PARENT_ELEMENT_NAME, parentElementMaps.get("Stmt"));
}
@Override
public List<Mx2MtFieldsGenerate> getFieldsGenerateList() {
public List<Mx2MtTagsGenerate> getGenerateTagList() {
List<Mx2MtFieldsGenerate> fieldsGenerateList = new ArrayList<>();
if (getMtMsg()){
fieldsGenerateList.add(new Field21Generate());
fieldsGenerateList.add(new Field65Generate());
fieldsGenerateList.add(new Field86Generate());
}
List<Mx2MtTagsGenerate> fieldsGenerateList = new ArrayList<>();
fieldsGenerateList.add(new Field20Generate());
fieldsGenerateList.add(new Field21Generate());
fieldsGenerateList.add(new Field25aGenerate());
fieldsGenerateList.add(new Field28CGenerate());
fieldsGenerateList.add(new Field60Generate());
fieldsGenerateList.add(new Field61ListGenerate());
fieldsGenerateList.add(new Field61Generate());
fieldsGenerateList.add(new Field62Generate());
fieldsGenerateList.add(new Field64Generate());
fieldsGenerateList.add(new Field65Generate());
fieldsGenerateList.add(new Field86Generate());
return fieldsGenerateList;
}
......@@ -72,25 +49,7 @@ public class Mx2Mt940950Creator extends AbstractMx2MtCreator {
* @return true:940, false:950
*/
public boolean getMtMsg() {
try {
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;
}
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 true;
}
@Override
protected String getMtType() {
......@@ -100,18 +59,4 @@ public class Mx2Mt940950Creator extends AbstractMx2MtCreator {
return Mx2MtConstants.MT_TYPE_950;
}
}
/**
* set field 21 = ""
* set filed 65 = ""
* set filed 86 = ""
*/
@Override
public void postProcess() {
if (Mx2MtConstants.MT_TYPE_950.equals(getMtType())) {
map.put("field21", "");
map.put("field65", "");
map.put("field86", "");
}
}
}
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