Commit 237d6c10 by xionglin

camt10900101

parent dd8e22ba
......@@ -59,6 +59,8 @@ public class Mx2MtConstants {
public static final String MT_TYPE_299 = "299";
public static final String MT_TYPE_112 = "112";
public static final String OUT_PUT_FILE_PATH = "outPutFilePath";
public static final String MX_OBJECT = "mxObj";
......
......@@ -5,6 +5,7 @@ import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.mt103.Mx2Mt103Creator;
import com.brilliance.swift.mx2mt.mt103Retn.Mx2Mt103RetnCreator;
import com.brilliance.swift.mx2mt.mt110.Mx2Mt110Creator;
import com.brilliance.swift.mx2mt.mt112.Mx2Mt112Creator;
import com.brilliance.swift.mx2mt.mt192292.Mx2Mtn92Creator;
import com.brilliance.swift.mx2mt.mt196296.Mx2Mtn96Creator;
import com.brilliance.swift.mx2mt.mt202Retn.Mx2Mt202RetnCreator;
......@@ -122,6 +123,8 @@ public class Mx2MtCreatorManager {
return new Mx2Mt920Creator();
} else if("camt058001".equals(messageType)){
return new Mx2Mt292Creator();
} else if("camt109001".equals(messageType)){
return new Mx2Mt112Creator();
} else if("camt107001".equals(messageType)){
return new Mx2Mt110Creator();
}
......
package com.brilliance.swift.mx2mt.mt112;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtCreator;
import com.brilliance.swift.mx2mt.Mx2MtContextIdentifier;
import com.brilliance.swift.mx2mt.Mx2MtTagsGenerate;
import com.brilliance.swift.mx2mt.mt112.impl.*;
import com.brilliance.swift.util.XmlUtil;
import org.dom4j.Document;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class Mx2Mt112Creator extends AbstractMx2MtCreator {
@Override
public void preProcess() throws SwiftException {
super.preProcess();
Document document = (Document) context.get(Mx2MtContextIdentifier.MX_XMl_DOCUMENT,true);
Map<String,String> parentElementMaps = XmlUtil.getParentElementMaps(document);
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("Chq"));
}
@Override
public List<Mx2MtTagsGenerate> getGenerateTagList() {
List<Mx2MtTagsGenerate> fieldsGenerateList = new ArrayList<>();
fieldsGenerateList.add(new Field20Generate());
fieldsGenerateList.add(new Field21Generate());
fieldsGenerateList.add(new Field30Generate());
fieldsGenerateList.add(new Field32Generate());
fieldsGenerateList.add(new Field52AGenerate());
fieldsGenerateList.add(new Field59Generate());
fieldsGenerateList.add(new Field76Generate());
return fieldsGenerateList;
}
@Override
protected String getMtType() {
return Mx2MtConstants.MT_TYPE_112;
}
}
package com.brilliance.swift.mx2mt.mt112.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
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;
public class Field20Generate extends AbstractMx2MtTagsGenerate {
private static final String NAME = "20";
@Override
public void tagGenerate() throws SwiftException {
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
String messageId = getXmlNodeValue(grpHdrParentElementName,document,"GrpHdr.MsgId");
if ( StringUtil.isEmpty(messageId) ) {
messageId = getXmlNodeValue(appHdrParentElementName,document,"AppHdr.BizMsgIdr");
}
if ( StringUtil.isNotEmpty(messageId) ) {
if ( messageId.length() > 16 ) {
buildSTErrorInfo(13,"Block4/:20:",messageId);
messageId = messageId.substring(0,15) + "+";
}
tags.add(new Tag(NAME,messageId));
}
}
}
package com.brilliance.swift.mx2mt.mt112.impl;
import com.brilliance.swift.exception.SwiftException;
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;
public class Field21Generate extends AbstractMx2MtTagsGenerate {
private static String NAME ="21";
@Override
public void tagGenerate() throws SwiftException {
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
int chqCount = getXmlNodeCounts(bodyHdrParentElementName,document,"Chq");
if ( chqCount>0 ) {
String chqNb = getXmlNodeValue(bodyHdrParentElementName,document,"Chq.ChqNb");
if (StringUtil.isNotEmpty(chqNb)) {
if ( chqNb.length()>16 ) {
buildSTErrorInfo(13,"Block4/:21",chqNb);
chqNb = chqNb.substring(0,15) + "+";
}
tags.add(new Tag(NAME,chqNb));
}
}
}
}
package com.brilliance.swift.mx2mt.mt112.impl;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
import com.brilliance.swift.util.DateUtil;
import com.brilliance.swift.util.StringUtil;
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.List;
public class Field30Generate extends AbstractMx2MtTagsGenerate {
public static String name = "30";
@Override
public void tagGenerate() throws SwiftException {
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
String issueDtStr = getXmlNodeValue(bodyHdrParentElementName,document,"Chq.IsseDt");
if ( StringUtil.isNotEmpty(issueDtStr) ) {
try {
XMLGregorianCalendar issueDt = DatatypeFactory.newInstance().newXMLGregorianCalendar(issueDtStr);
String mtIssueDtStr = DateUtil.format(issueDt,"yyMMdd");
tags.add(new Tag(name,mtIssueDtStr));
} catch (DatatypeConfigurationException e) {
throw new RuntimeException(e);
}
}else {
buildSTErrorInfo(114,"Block4/:30",null);
tags.add(new Tag(name,"991231"));
}
}
}
package com.brilliance.swift.mx2mt.mt112.impl;
import com.brilliance.swift.exception.SwiftException;
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 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 Field32Generate extends AbstractMx2MtTagsGenerate {
private static String name_A = "32A";
private static String name_B = "32B";
@Override
public void tagGenerate() throws SwiftException {
try {
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
String bkDtStr = "";
String bkAmt = "";
String bkCcy = "";
String amt = getXmlNodeValue(bodyHdrParentElementName,document,"Chq.Amt");
String ccy = getXmlNodeValue(bodyHdrParentElementName,document,"Chq.Amt@Ccy");
if ("XAU".equalsIgnoreCase(ccy) || "XAG".equalsIgnoreCase(ccy)
|| "XPD".equalsIgnoreCase(ccy) || "XPT".equalsIgnoreCase(ccy)) {
buildSTErrorInfo(63,bodyHdrParentElementName+".Chq.Amt",ccy);
}
if ( StringUtil.isNotEmpty(ccy) && StringUtil.isNotEmpty(amt) ) {
bkAmt = NumberUtil.formatAmt(new BigDecimal(amt),ccy);
bkCcy = ccy;
}
String bkDtValue = getXmlNodeValue(bodyHdrParentElementName,document,"Chq.FctvDt.Dt");
if (StringUtil.isNotEmpty(bkDtValue)) {
XMLGregorianCalendar bkDt = DatatypeFactory.newInstance().newXMLGregorianCalendar();
bkDtStr = DateUtil.format(bkDt,"yyMMdd");
tags.add(new Tag(name_A,bkDtStr+bkCcy+bkAmt));
}else {
tags.add(new Tag(name_B,bkCcy+bkAmt));
}
} catch (DatatypeConfigurationException e) {
throw new RuntimeException(e);
}
}
}
package com.brilliance.swift.mx2mt.mt112.impl;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
import com.brilliance.swift.mx2mt.Mx2MtContextIdentifier;
import com.brilliance.swift.util.StringUtil;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.Tag;
import java.util.List;
public class Field52AGenerate extends AbstractMx2MtTagsGenerate {
private static String name_A = "52A";
private static String name_B = "52B";
private static String name_D = "52D";
private static String name = "52";
@Override
public void tagGenerate() throws SwiftException {
context.set(Mx2MtContextIdentifier.MX_TO_MT_ERROR_LOCATION, "Block4/52a");
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
int agentNum = getXmlNodeCounts(bodyHdrParentElementName,document,"Chq.DrwrAgt");
int agentCount = getXmlNodeCounts(bodyHdrParentElementName,document,"Chq.DrwrAgtAcct");
String agentPath = bodyHdrParentElementName + ".Chq.DrwrAgt";
String agentCountPath = bodyHdrParentElementName+ ".Chq.DrwrAgtAcct";
String account = "";
if ( agentNum >0 || agentCount>0 ) {
if(agentNum == 0) {
account = mx_to_mtAccount(bodyHdrParentElementName+".Chq.DrwrAgtAcct");
tags.add(new Tag(name_B,account));
}else {
Tag tag = mx_to_mtAgentGeneric(name,agentPath,agentCountPath,true,false,false,null);
if (tag != null) {
if (name_D.equals(tag.getName())) {
String value = mx_to_mtStartingLineCharacter(tag.getValue(), "Block4/:"+name_D+":");
tag.setValue(value);
}
tags.add(tag);
}
}
}
}
}
package com.brilliance.swift.mx2mt.mt112.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
import com.brilliance.swift.mx2mt.Mx2MtContextIdentifier;
import com.brilliance.swift.util.StringUtil;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.Tag;
import java.util.List;
public class Field59Generate extends AbstractMx2MtTagsGenerate {
private static String name = "59";
@Override
public void tagGenerate() throws SwiftException {
context.set(Mx2MtContextIdentifier.MX_TO_MT_ERROR_LOCATION, "Block4/59a");
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
int countryNum = getXmlNodeCounts(bodyHdrParentElementName,document,"Chq.Pyee.PstlAdr.Ctry");
String payStr = bodyHdrParentElementName + ".Chq.Pyee";
int addLineStr = getXmlNodeCounts(bodyHdrParentElementName,document,"Chq.Pyee.PstlAdr.AdrLine");
String payTra = "";
if ( countryNum >0 ) {
payTra = mx_to_mtPartyNameAndAddressLEI1(payStr);
tags.add(new Tag(name,payTra));
}else if (addLineStr >0 && !Mx2MtConstants.MX_TO_MT_DEFAULT_VALUE.equals(addLineStr)) {
payTra = mx_to_mtPartyNameAndUnstructuredAddress(payStr);
tags.add(new Tag(name,payTra));
}
}
}
package com.brilliance.swift.mx2mt.mt112.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
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.HashMap;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
public class Field76Generate extends AbstractMx2MtTagsGenerate {
private static String name = "76";
@Override
public void tagGenerate() throws SwiftException {
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
Map<String,String > map =new Hashtable<>();
map.put("ACCP","Accepted");
map.put("REJT","Rejected");
String mxStatusCode = getXmlNodeValue(bodyHdrParentElementName,document,"Chq.ChqCxlOrStopSts.Sts.Cd");
String mxStatusDes = "";
String mxAddInfo = getXmlNodeValue(bodyHdrParentElementName,document,"Chq.ChqCxlOrStopSts.AddtlInf");
for (Map.Entry<String,String > entry :map.entrySet()) {
if (mxStatusCode.equals(entry.getKey())) {
mxStatusDes = entry.getValue();
break;
}
}
String mx76String = "/" + mxStatusDes + "/" + mxAddInfo;
List<String> list = StringUtil.outStringList(mx76String, 35, "//");
String mt76 = "";
if (list != null && list.size() > 0) {
for (int i=0; i<list.size(); i++) {
String str = list.get(i);
if (i < 6) {
if (i == 0) {
mt76 = str;
} else {
mt76 += Mx2MtConstants.NEW_LINE + str;
}
}
}
}
if (StringUtil.isNotEmpty(mt76)) {
tags.add(new Tag(name, mt76));
}
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<RequestPayload>
<AppHdr xmlns="urn:iso:std:iso:20022:tech:xsd:head.001.001.02">
<Fr>
<FIId>
<FinInstnId>
<BICFI>HELSFIHHXXX</BICFI>
</FinInstnId>
</FIId>
</Fr>
<To>
<FIId>
<FinInstnId>
<BICFI>NDEAFIHHXXX</BICFI>
</FinInstnId>
</FIId>
</To>
<BizMsgIdr>CNCL-ID001</BizMsgIdr>
<MsgDefIdr>camt.109.001.01</MsgDefIdr>
<BizSvc>swift.cbprplus.02</BizSvc>
<CreDt>2022-07-22T10:17:51.619+08:00</CreDt>
<PssblDplct>false</PssblDplct>
<Prty>NORM</Prty>
</AppHdr>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.109.001.01">
<ChqCxlOrStopRpt>
<GrpHdr>
<MsgId>111</MsgId>
<CreDtTm>2023-06-27</CreDtTm>
<NbOfChqs>999</NbOfChqs>
</GrpHdr>
<Chq>
<InstrId>123</InstrId>
<OrgnlInstrId>AAA</OrgnlInstrId>
<ChqNb>123</ChqNb>
<IsseDt>2023-06-26</IsseDt>
<StlDt>2023-05-26</StlDt>
<Amt Ccy="USD">123</Amt>
<FctvDt>
<Dt>2022-05-09</Dt>
</FctvDt>
<Pyee>
<Nm>XL</Nm>
<PstlAdr>
<AdrLine>WH</AdrLine>
</PstlAdr>
</Pyee>
<DrwrAgt>
<FinInstnId>
<BICFI>CHASUS33</BICFI>
</FinInstnId>
</DrwrAgt>
<DrwrAgtAcct>
<Id>
<IBAN>ABC123</IBAN>
</Id>
</DrwrAgtAcct>
<ChqCxlOrStopSts>
<Sts>
<Cd>ACCP</Cd>
</Sts>
<AddtlInf>ABC</AddtlInf>
</ChqCxlOrStopSts>
</Chq>
</ChqCxlOrStopRpt>
</Document>
</RequestPayload>
\ No newline at end of file
......@@ -149,6 +149,9 @@ public class Mx2MtTest {
}
@Test
public void test112() { test("/swiftXml/camt10900101.xml",null);}
@Test
public void testXmlFilePath() {
SwiftTranslationReport str = SwiftTransfer.mx2MtPlus("d:/test/MxPacs00800108.xml", true, null, null);
System.out.println(str.getMessage());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment