Commit 793c4e7a by chengzhuoshen

优化代码,减少转换消耗时间

parent 12966dab
......@@ -184,19 +184,9 @@ public abstract class AbstractMx2MtCreator implements Mx2MtCreator {
}
list = newList;
newList = new ArrayList<>();
//根据AppHdr@xmlns获取版本对应的xsd文件
String appHdrXsdName = null;
Optional<String> namespace = NamespaceReader.findAppHdrNamespace(xml);
if (namespace.isPresent()) {
MxId appHdrMxId = new MxId(namespace.get());
appHdrXsdName = appHdrMxId.getBusinessProcess().name()
+ appHdrMxId.getFunctionality()
+ appHdrMxId.getVariant()
+ appHdrMxId.getVersion();
}
//根据Document@xmlns获取版本对应的xsd文件
String documentXsdName = "";
namespace = NamespaceReader.findDocumentNamespace(xml);
Optional<String> namespace = NamespaceReader.findDocumentNamespace(xml);
if (namespace.isPresent()) {
MxId documentMxId = new MxId(namespace.get());
documentXsdName = documentMxId.getBusinessProcess().name()
......@@ -214,7 +204,7 @@ public abstract class AbstractMx2MtCreator implements Mx2MtCreator {
String tmpPath = path.replaceAll("\\([0-9]+\\)", "");
boolean includeFlag = false;
for (String ignorePath : ingorePaths) {
if (tmpPath.indexOf(ignorePath) > -1) {
if (StringUtil.isNotEmpty(ignorePath) && tmpPath.indexOf(ignorePath) > -1) {
includeFlag = true;
break;
}
......@@ -223,8 +213,8 @@ public abstract class AbstractMx2MtCreator implements Mx2MtCreator {
newList.add(path);
}
}
list = newList;
newList = new ArrayList<>();
/*list = newList;
newList = new ArrayList<>();*/
}
} catch (IOException e) {
throw new SwiftException(e.getMessage());
......@@ -232,7 +222,7 @@ public abstract class AbstractMx2MtCreator implements Mx2MtCreator {
}
//3.过滤掉必填节点值,这些值不会在错误报告中显示
for (int i=0; i<list.size(); i++) {
/*for (int i=0; i<list.size(); i++) {
String path = list.get(i);
boolean requiredFlag = false;
if (path.indexOf("AppHdr") > -1) {
......@@ -243,7 +233,7 @@ public abstract class AbstractMx2MtCreator implements Mx2MtCreator {
if (!requiredFlag) {
newList.add(path);
}
}
}*/
return newList;
}
......
......@@ -34,6 +34,7 @@
<InstrId>Instrid-001</InstrId>
<EndToEndId>e2eid/02/03/2022/001</EndToEndId>
<UETR>5ddd156b-ba52-4d7d-a7ea-197cf311dc19</UETR>
<ClrSysRef>ddd</ClrSysRef>
</PmtId>
<IntrBkSttlmAmt Ccy="EUR">100.</IntrBkSttlmAmt>
<IntrBkSttlmDt>2022-03-04+01:00</IntrBkSttlmDt>
......@@ -59,6 +60,7 @@
<InstdAgt>
<FinInstnId>
<BICFI>AABBIE2X</BICFI>
<LEI>123456789</LEI>
</FinInstnId>
</InstdAgt>
<Dbtr>
......@@ -91,6 +93,9 @@
<Ctry>US</Ctry>
</PstlAdr>
</Cdtr>
<RgltryRptg>
<DbtCdtRptgInd>CRED</DbtCdtRptgInd>
</RgltryRptg>
</CdtTrfTxInf>
</FIToFICstmrCdtTrf>
</Document>
......
......@@ -50,6 +50,7 @@ Change Log
<InstrId>pacs9bizmsgidr02</InstrId>
<EndToEndId>pacs9bizmsgidr01</EndToEndId>
<UETR>8a562c67-ca16-48ba-b074-65581be6f001</UETR>
<ClrSysRef>123</ClrSysRef>
</PmtId>
<IntrBkSttlmAmt Ccy="CAD">2565972</IntrBkSttlmAmt>
<IntrBkSttlmDt>2021-04-27</IntrBkSttlmDt>
......
AppHdr
CxlDtls.TxInfAndSts.RslvdCase.Cretr.Pty
CxlDtls.TxInfAndSts.RslvdCase.Cretr.Agt
\ No newline at end of file
CxlDtls.TxInfAndSts.RslvdCase.Cretr.Agt
Document.RsltnOfInvstgtn.Assgnmt.Id
Document.RsltnOfInvstgtn.Assgnmt.Assgnr.Agt.FinInstnId.BICFI
Document.RsltnOfInvstgtn.Assgnmt.Assgne.Agt.FinInstnId.BICFI
Document.RsltnOfInvstgtn.Assgnmt.CreDtTm
Document.RsltnOfInvstgtn.Sts.Conf
Document.RsltnOfInvstgtn.CxlDtls.TxInfAndSts.CxlStsId
Document.RsltnOfInvstgtn.CxlDtls.TxInfAndSts.RslvdCase.Id
Document.RsltnOfInvstgtn.CxlDtls.TxInfAndSts.OrgnlGrpInf.OrgnlMsgId
Document.RsltnOfInvstgtn.CxlDtls.TxInfAndSts.OrgnlGrpInf.OrgnlMsgNmId
Document.RsltnOfInvstgtn.CxlDtls.TxInfAndSts.OrgnlUETR
AppHdr
Document.BkToCstmrAcctRpt.GrpHdr.MsgId
Document.BkToCstmrAcctRpt.GrpHdr.CreDtTm
Document.BkToCstmrAcctRpt.Rpt.Id
Document.BkToCstmrAcctRpt.Rpt.RptPgntn.PgNb
Document.BkToCstmrAcctRpt.Rpt.RptPgntn.LastPgInd
Document.BkToCstmrAcctRpt.Rpt.Acct.Id.IBAN
Document.BkToCstmrAcctRpt.Rpt.Acct.Id.Othr.Id
Document.BkToCstmrAcctRpt.Rpt.Acct.Ccy
AppHdr
Stmt.Ntry.Sts.Cd
Document.BkToCstmrStmt.GrpHdr.MsgId
Document.BkToCstmrStmt.GrpHdr.CreDtTm
Document.BkToCstmrStmt.Stmt.Id
Document.BkToCstmrStmt.Stmt.StmtPgntn.PgNb
Document.BkToCstmrStmt.Stmt.StmtPgntn.LastPgInd
Document.BkToCstmrStmt.Stmt.Acct.Id.IBAN
Document.BkToCstmrStmt.Stmt.Acct.Id.Othr.Id
Document.BkToCstmrStmt.Stmt.Acct.Ccy
Document.BkToCstmrStmt.Stmt.Bal.Tp.CdOrPrtry.Cd
Document.BkToCstmrStmt.Stmt.Bal.Tp.CdOrPrtry.Prtry
Document.BkToCstmrStmt.Stmt.Bal.CdtDbtInd
Document.BkToCstmrStmt.Stmt.Bal.Dt.Dt
Document.BkToCstmrStmt.Stmt.Bal.Dt.DtTm
AppHdr
BkTxCd
Document.BkToCstmrDbtCdtNtfctn.GrpHdr.MsgId
Document.BkToCstmrDbtCdtNtfctn.GrpHdr.CreDtTm
Document.BkToCstmrDbtCdtNtfctn.Ntfctn.Id
Document.BkToCstmrDbtCdtNtfctn.Ntfctn.Acct.Id.IBAN
Document.BkToCstmrDbtCdtNtfctn.Ntfctn.Acct.Id.Othr.Id
Document.BkToCstmrDbtCdtNtfctn.Ntfctn.Acct.Ccy
Document.BkToCstmrDbtCdtNtfctn.Ntfctn.Ntry.NtryRef
Document.BkToCstmrDbtCdtNtfctn.Ntfctn.Ntry.CdtDbtInd
Document.BkToCstmrDbtCdtNtfctn.Ntfctn.Ntry.Sts.Cd
AppHdr
Undrlyg.TxInf.Case.Cretr.Pty
Undrlyg.TxInf.Case.Cretr.Agt
\ No newline at end of file
Undrlyg.TxInf.Case.Cretr.Agt
Document.FIToFIPmtCxlReq.Assgnmt.Id
Document.FIToFIPmtCxlReq.Assgnmt.Assgnr.Agt.FinInstnId.BICFI
Document.FIToFIPmtCxlReq.Assgnmt.Assgne.Agt.FinInstnId.BICFI
Document.FIToFIPmtCxlReq.Assgnmt.CreDtTm
Document.FIToFIPmtCxlReq.Undrlyg.TxInf.Case.Id
Document.FIToFIPmtCxlReq.Undrlyg.TxInf.OrgnlGrpInf.OrgnlMsgId
Document.FIToFIPmtCxlReq.Undrlyg.TxInf.OrgnlGrpInf.OrgnlMsgNmId
Document.FIToFIPmtCxlReq.Undrlyg.TxInf.OrgnlEndToEndId
Document.FIToFIPmtCxlReq.Undrlyg.TxInf.OrgnlUETR
Document.FIToFIPmtCxlReq.Undrlyg.TxInf.OrgnlIntrBkSttlmDt
Document.FIToFIPmtCxlReq.Undrlyg.TxInf.CxlRsnInf.Rsn.Cd
AppHdr
Document.NtfctnToRcv.GrpHdr.MsgId
Document.NtfctnToRcv.GrpHdr.CreDtTm
Document.NtfctnToRcv.Ntfctn.Id
Document.NtfctnToRcv.Ntfctn.Itm.Id
AppHdr
Document.AcctRptgReq.GrpHdr.MsgId
Document.AcctRptgReq.GrpHdr.CreDtTm
Document.AcctRptgReq.RptgReq.ReqdMsgNmId
AppHdr
TxInfAndSts.InstgAgt
TxInfAndSts.InstdAgt
\ No newline at end of file
TxInfAndSts.InstdAgt
Document.FIToFIPmtStsRpt.GrpHdr.MsgId
Document.FIToFIPmtStsRpt.GrpHdr.CreDtTm
Document.FIToFIPmtStsRpt.TxInfAndSts.OrgnlGrpInf.OrgnlMsgId
Document.FIToFIPmtStsRpt.TxInfAndSts.OrgnlGrpInf.OrgnlMsgNmId
Document.FIToFIPmtStsRpt.TxInfAndSts.OrgnlEndToEndId
Document.FIToFIPmtStsRpt.TxInfAndSts.OrgnlUETR
Document.FIToFIPmtStsRpt.TxInfAndSts.TxSts
AppHdr
TxInf.InstgAgt
TxInf.InstdAgt
Document.PmtRtr.GrpHdr.MsgId
Document.PmtRtr.GrpHdr.CreDtTm
Document.PmtRtr.GrpHdr.NbOfTxs
Document.PmtRtr.GrpHdr.SttlmInf.SttlmMtd
Document.PmtRtr.TxInf.OrgnlEndToEndId
Document.PmtRtr.TxInf.OrgnlUETR
Document.PmtRtr.TxInf.IntrBkSttlmDt
Document.PmtRtr.TxInf.ChrgBr
Document.PmtRtr.TxInf.RtrRsnInf.Rsn.Cd
......@@ -2,3 +2,12 @@ AppHdr
CdtTrfTxInf.InstgAgt
CdtTrfTxInf.InstdAgt
CdtTrfTxInf.ChrgsInf.Agt
Document.FIToFICstmrCdtTrf.GrpHdr.MsgId
Document.FIToFICstmrCdtTrf.GrpHdr.CreDtTm
Document.FIToFICstmrCdtTrf.GrpHdr.NbOfTxs
Document.FIToFICstmrCdtTrf.GrpHdr.SttlmInf.SttlmMtd
Document.FIToFICstmrCdtTrf.CdtTrfTxInf.PmtId.InstrId
Document.FIToFICstmrCdtTrf.CdtTrfTxInf.PmtId.EndToEndId
Document.FIToFICstmrCdtTrf.CdtTrfTxInf.PmtId.UETR
Document.FIToFICstmrCdtTrf.CdtTrfTxInf.IntrBkSttlmDt
Document.FIToFICstmrCdtTrf.CdtTrfTxInf.ChrgBr
AppHdr
CdtTrfTxInf.InstgAgt
CdtTrfTxInf.InstdAgt
\ No newline at end of file
CdtTrfTxInf.InstdAgt
Document.FICdtTrf.GrpHdr.MsgId
Document.FICdtTrf.GrpHdr.CreDtTm
Document.FICdtTrf.GrpHdr.NbOfTxs
Document.FICdtTrf.GrpHdr.SttlmInf.SttlmMtd
Document.FICdtTrf.CdtTrfTxInf.PmtId.InstrId
Document.FICdtTrf.CdtTrfTxInf.PmtId.EndToEndId
Document.FICdtTrf.CdtTrfTxInf.PmtId.UETR
Document.FICdtTrf.CdtTrfTxInf.IntrBkSttlmDt
......@@ -2,15 +2,25 @@ package com.brilliance;
import com.brilliance.swift.SwiftTransfer;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.mx2mt.AbstractMx2MtCreator;
import com.brilliance.swift.vo.SwiftTranslationErrorInfo;
import com.brilliance.swift.vo.SwiftTranslationReport;
import com.brilliance.swift.vo.common.ExternalCreditorAgentInstructionCode;
import org.apache.commons.io.FileUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import org.junit.Test;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.*;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
......@@ -124,16 +134,13 @@ public class Mx2MtTest {
}
@Test
public void testMx2MtMap() throws IOException {
File file = FileUtils.toFile(Mx2MtTest.class.getResource("/swiftXml/MxPacs00800108.xml"));
String xmlStr = FileUtils.readFileToString(file);
Map<String, String> maps = SwiftTransfer.mx2MtMap(xmlStr, null);
for (String key : maps.keySet()) {
System.out.println(key + "=" + maps.get(key));
}
public void testXmlFilePath() {
SwiftTranslationReport str = SwiftTransfer.mx2MtPlus("d:/test/MxPacs00800108.xml", true, null, null);
System.out.println(str.getMessage());
}
/*@Test
@Test
public void testSwiftFile() {
try {
File file = FileUtils.toFile(Mx2MtTest.class.getResource("/swiftXml/test.xml"));
......@@ -163,5 +170,94 @@ public class Mx2MtTest {
e.printStackTrace();
}
}
*/
@Test
public void test() {
String tagName = "445566/TELB/123/HOLD/456456/PHOB/1123/HOLD/789/UDLC/yyy/HOLD/xxx/TELB/qqq";
String regex = "([/(UDLC|PHOB|TELB)/]{1}[0-9a-zA-Z/\\-\\?:\\(\\)\\.,'\\+]*)";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(tagName);
while (m.find()){
String str = m.group(1);
//System.out.println(str);
}
tagName = "123/UDLC/123/PHOB/456";
String[] strs = tagName.split("(?=/UDLC/|/TELB/|/PHOB/)");
System.out.println(strs[0]);
String tmpPath = "Document/FIToFICstmrCdtTrf/CdtTrfTxInf/ChrgsInf(1)/Amt".replaceAll("\\([0-9]+\\)", "");
System.out.println(tmpPath);
System.out.println("60".matches("50[CK]?"));
}
/**
* 找到xsd中所有节点都是必填的PATH放到map中
* @param prefixPath
* @param nodeList
* @param list
*/
private void buildPath(String prefixPath, List nodeList, List<String> list) {
for (int i=0; i<nodeList.size(); i++) {
Element e = (Element)nodeList.get(i);
String type = e.attributeValue("type");
List nodeList1 = e.selectNodes("//xs:simpleType[@name='"+type+"']");
if ("0".equals(e.attributeValue("minOccurs"))) {
continue;
}
if (nodeList1 != null && nodeList1.size() > 0) {
list.add(prefixPath + "." + e.attributeValue("name"));
} else {
nodeList1 = e.selectNodes("//xs:complexType[@name='"+type+"']");
Element element = (Element)nodeList1.get(0);
nodeList1 = element.selectNodes(".//xs:element");
buildPath(prefixPath + "." + e.attributeValue("name"), nodeList1, list);
}
}
}
public void readXsd2Txt(String xsdName) throws DocumentException, IOException {
URL resource = AbstractMx2MtCreator.class.getResource("/xsd/"+xsdName+".xsd");
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(resource);
Element element = document.getRootElement();
List<Node> nodeList = element.selectNodes(".//xs:element[@name='Document']");
element = (Element)nodeList.get(0);
String type = element.attributeValue("type");
nodeList = element.selectNodes("//xs:complexType[@name='"+type+"']");
element = (Element)nodeList.get(0);
nodeList = element.selectNodes(".//xs:element");
List<String> list = new ArrayList<>();
buildPath("Document", nodeList, list);
File file = new File(System.getProperty("user.dir")+"\\src\\main\\resources\\xmlPathIgnore\\"+xsdName+".txt");
List<String> orgList = FileUtils.readLines(file);
orgList.addAll(list);
FileWriter fw = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fw);
for (String str : orgList) {
bw.write(str);
bw.newLine();
}
bw.close();
fw.close();
}
@Test
public void testXsd2Txt() throws DocumentException, IOException {
List<String> xsdList = new ArrayList<>();
xsdList.add("camt02900109");
xsdList.add("camt05200108");
xsdList.add("camt05300108");
xsdList.add("camt05400108");
xsdList.add("camt05600108");
xsdList.add("camt05700106");
xsdList.add("camt06000105");
xsdList.add("pacs00200110");
xsdList.add("pacs00400109");
xsdList.add("pacs00800108");
xsdList.add("pacs00900108");
for (String xsdName : xsdList) {
readXsd2Txt(xsdName);
}
}
}
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