Commit 793c4e7a by chengzhuoshen

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

parent 12966dab
...@@ -184,19 +184,9 @@ public abstract class AbstractMx2MtCreator implements Mx2MtCreator { ...@@ -184,19 +184,9 @@ public abstract class AbstractMx2MtCreator implements Mx2MtCreator {
} }
list = newList; list = newList;
newList = new ArrayList<>(); 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文件 //根据Document@xmlns获取版本对应的xsd文件
String documentXsdName = ""; String documentXsdName = "";
namespace = NamespaceReader.findDocumentNamespace(xml); Optional<String> namespace = NamespaceReader.findDocumentNamespace(xml);
if (namespace.isPresent()) { if (namespace.isPresent()) {
MxId documentMxId = new MxId(namespace.get()); MxId documentMxId = new MxId(namespace.get());
documentXsdName = documentMxId.getBusinessProcess().name() documentXsdName = documentMxId.getBusinessProcess().name()
...@@ -214,7 +204,7 @@ public abstract class AbstractMx2MtCreator implements Mx2MtCreator { ...@@ -214,7 +204,7 @@ public abstract class AbstractMx2MtCreator implements Mx2MtCreator {
String tmpPath = path.replaceAll("\\([0-9]+\\)", ""); String tmpPath = path.replaceAll("\\([0-9]+\\)", "");
boolean includeFlag = false; boolean includeFlag = false;
for (String ignorePath : ingorePaths) { for (String ignorePath : ingorePaths) {
if (tmpPath.indexOf(ignorePath) > -1) { if (StringUtil.isNotEmpty(ignorePath) && tmpPath.indexOf(ignorePath) > -1) {
includeFlag = true; includeFlag = true;
break; break;
} }
...@@ -223,8 +213,8 @@ public abstract class AbstractMx2MtCreator implements Mx2MtCreator { ...@@ -223,8 +213,8 @@ public abstract class AbstractMx2MtCreator implements Mx2MtCreator {
newList.add(path); newList.add(path);
} }
} }
list = newList; /*list = newList;
newList = new ArrayList<>(); newList = new ArrayList<>();*/
} }
} catch (IOException e) { } catch (IOException e) {
throw new SwiftException(e.getMessage()); throw new SwiftException(e.getMessage());
...@@ -232,7 +222,7 @@ public abstract class AbstractMx2MtCreator implements Mx2MtCreator { ...@@ -232,7 +222,7 @@ public abstract class AbstractMx2MtCreator implements Mx2MtCreator {
} }
//3.过滤掉必填节点值,这些值不会在错误报告中显示 //3.过滤掉必填节点值,这些值不会在错误报告中显示
for (int i=0; i<list.size(); i++) { /*for (int i=0; i<list.size(); i++) {
String path = list.get(i); String path = list.get(i);
boolean requiredFlag = false; boolean requiredFlag = false;
if (path.indexOf("AppHdr") > -1) { if (path.indexOf("AppHdr") > -1) {
...@@ -243,7 +233,7 @@ public abstract class AbstractMx2MtCreator implements Mx2MtCreator { ...@@ -243,7 +233,7 @@ public abstract class AbstractMx2MtCreator implements Mx2MtCreator {
if (!requiredFlag) { if (!requiredFlag) {
newList.add(path); newList.add(path);
} }
} }*/
return newList; return newList;
} }
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
<InstrId>Instrid-001</InstrId> <InstrId>Instrid-001</InstrId>
<EndToEndId>e2eid/02/03/2022/001</EndToEndId> <EndToEndId>e2eid/02/03/2022/001</EndToEndId>
<UETR>5ddd156b-ba52-4d7d-a7ea-197cf311dc19</UETR> <UETR>5ddd156b-ba52-4d7d-a7ea-197cf311dc19</UETR>
<ClrSysRef>ddd</ClrSysRef>
</PmtId> </PmtId>
<IntrBkSttlmAmt Ccy="EUR">100.</IntrBkSttlmAmt> <IntrBkSttlmAmt Ccy="EUR">100.</IntrBkSttlmAmt>
<IntrBkSttlmDt>2022-03-04+01:00</IntrBkSttlmDt> <IntrBkSttlmDt>2022-03-04+01:00</IntrBkSttlmDt>
...@@ -59,6 +60,7 @@ ...@@ -59,6 +60,7 @@
<InstdAgt> <InstdAgt>
<FinInstnId> <FinInstnId>
<BICFI>AABBIE2X</BICFI> <BICFI>AABBIE2X</BICFI>
<LEI>123456789</LEI>
</FinInstnId> </FinInstnId>
</InstdAgt> </InstdAgt>
<Dbtr> <Dbtr>
...@@ -91,6 +93,9 @@ ...@@ -91,6 +93,9 @@
<Ctry>US</Ctry> <Ctry>US</Ctry>
</PstlAdr> </PstlAdr>
</Cdtr> </Cdtr>
<RgltryRptg>
<DbtCdtRptgInd>CRED</DbtCdtRptgInd>
</RgltryRptg>
</CdtTrfTxInf> </CdtTrfTxInf>
</FIToFICstmrCdtTrf> </FIToFICstmrCdtTrf>
</Document> </Document>
......
...@@ -50,6 +50,7 @@ Change Log ...@@ -50,6 +50,7 @@ Change Log
<InstrId>pacs9bizmsgidr02</InstrId> <InstrId>pacs9bizmsgidr02</InstrId>
<EndToEndId>pacs9bizmsgidr01</EndToEndId> <EndToEndId>pacs9bizmsgidr01</EndToEndId>
<UETR>8a562c67-ca16-48ba-b074-65581be6f001</UETR> <UETR>8a562c67-ca16-48ba-b074-65581be6f001</UETR>
<ClrSysRef>123</ClrSysRef>
</PmtId> </PmtId>
<IntrBkSttlmAmt Ccy="CAD">2565972</IntrBkSttlmAmt> <IntrBkSttlmAmt Ccy="CAD">2565972</IntrBkSttlmAmt>
<IntrBkSttlmDt>2021-04-27</IntrBkSttlmDt> <IntrBkSttlmDt>2021-04-27</IntrBkSttlmDt>
......
AppHdr AppHdr
CxlDtls.TxInfAndSts.RslvdCase.Cretr.Pty CxlDtls.TxInfAndSts.RslvdCase.Cretr.Pty
CxlDtls.TxInfAndSts.RslvdCase.Cretr.Agt CxlDtls.TxInfAndSts.RslvdCase.Cretr.Agt
\ No newline at end of file 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 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 AppHdr
Stmt.Ntry.Sts.Cd 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 AppHdr
BkTxCd 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 AppHdr
Undrlyg.TxInf.Case.Cretr.Pty Undrlyg.TxInf.Case.Cretr.Pty
Undrlyg.TxInf.Case.Cretr.Agt Undrlyg.TxInf.Case.Cretr.Agt
\ No newline at end of file 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 AppHdr
Document.NtfctnToRcv.GrpHdr.MsgId
Document.NtfctnToRcv.GrpHdr.CreDtTm
Document.NtfctnToRcv.Ntfctn.Id
Document.NtfctnToRcv.Ntfctn.Itm.Id
AppHdr AppHdr
Document.AcctRptgReq.GrpHdr.MsgId
Document.AcctRptgReq.GrpHdr.CreDtTm
Document.AcctRptgReq.RptgReq.ReqdMsgNmId
AppHdr AppHdr
TxInfAndSts.InstgAgt TxInfAndSts.InstgAgt
TxInfAndSts.InstdAgt TxInfAndSts.InstdAgt
\ No newline at end of file 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 AppHdr
TxInf.InstgAgt TxInf.InstgAgt
TxInf.InstdAgt 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 ...@@ -2,3 +2,12 @@ AppHdr
CdtTrfTxInf.InstgAgt CdtTrfTxInf.InstgAgt
CdtTrfTxInf.InstdAgt CdtTrfTxInf.InstdAgt
CdtTrfTxInf.ChrgsInf.Agt 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 AppHdr
CdtTrfTxInf.InstgAgt CdtTrfTxInf.InstgAgt
CdtTrfTxInf.InstdAgt CdtTrfTxInf.InstdAgt
\ No newline at end of file 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; ...@@ -2,15 +2,25 @@ package com.brilliance;
import com.brilliance.swift.SwiftTransfer; import com.brilliance.swift.SwiftTransfer;
import com.brilliance.swift.constants.Mx2MtConstants; import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.mx2mt.AbstractMx2MtCreator;
import com.brilliance.swift.vo.SwiftTranslationErrorInfo; import com.brilliance.swift.vo.SwiftTranslationErrorInfo;
import com.brilliance.swift.vo.SwiftTranslationReport; import com.brilliance.swift.vo.SwiftTranslationReport;
import com.brilliance.swift.vo.common.ExternalCreditorAgentInstructionCode;
import org.apache.commons.io.FileUtils; 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 org.junit.Test;
import java.io.BufferedWriter;
import java.io.File; import java.io.File;
import java.io.FileWriter;
import java.io.IOException; 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.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
...@@ -124,16 +134,13 @@ public class Mx2MtTest { ...@@ -124,16 +134,13 @@ public class Mx2MtTest {
} }
@Test @Test
public void testMx2MtMap() throws IOException { public void testXmlFilePath() {
File file = FileUtils.toFile(Mx2MtTest.class.getResource("/swiftXml/MxPacs00800108.xml")); SwiftTranslationReport str = SwiftTransfer.mx2MtPlus("d:/test/MxPacs00800108.xml", true, null, null);
String xmlStr = FileUtils.readFileToString(file); System.out.println(str.getMessage());
Map<String, String> maps = SwiftTransfer.mx2MtMap(xmlStr, null);
for (String key : maps.keySet()) {
System.out.println(key + "=" + maps.get(key));
}
} }
/*@Test
@Test
public void testSwiftFile() { public void testSwiftFile() {
try { try {
File file = FileUtils.toFile(Mx2MtTest.class.getResource("/swiftXml/test.xml")); File file = FileUtils.toFile(Mx2MtTest.class.getResource("/swiftXml/test.xml"));
...@@ -163,5 +170,94 @@ public class Mx2MtTest { ...@@ -163,5 +170,94 @@ public class Mx2MtTest {
e.printStackTrace(); 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