Commit 18c184ec by chengzhuoshen

1.完成MX2MT 202<>pacs009001相互转换

2.优化MX2MT 940/950
parent 392516f6
......@@ -17,23 +17,23 @@ public class Camt053001Parse20Field extends AbstractMt2SwiftDtoParseFields {
public void parseFields() throws SwiftException {
try {
BankToCustomerStatement bankToCustomerStatement = context.get(BankToCustomerStatement.class);
if(context.get(AbstractMT.class).getMessageType().equals("940")){
MT940 mt940 = (MT940) context.get(AbstractMT.class);
Field20 field20 = mt940.getField20();
if(field20!=null){
bankToCustomerStatement.setMessageId(field20.getValue());
bankToCustomerStatement.setCd("FWAV");
}
}else {
MT950 mt950 = (MT950) context.get(AbstractMT.class);
Field20 field20 = mt950.getField20();
if(field20!=null){
bankToCustomerStatement.setMessageId(field20.getValue());
bankToCustomerStatement.setCd("");
}
Field20 field20 = getField20();
if (field20 != null) {
bankToCustomerStatement.setMessageId(field20.getValue());
}
}catch (Exception e) {
throw new SwiftException("ERROR", e.getMessage());
}
}
private Field20 getField20() {
AbstractMT abstractMT = context.get(AbstractMT.class);
if ("940".equals(abstractMT.getMessageType())) {
MT940 mt940 = (MT940) context.get(AbstractMT.class);
return mt940.getField20();
} else {
MT950 mt950 = (MT950) context.get(AbstractMT.class);
return mt950.getField20();
}
}
}
......@@ -2,9 +2,7 @@ package com.brilliance.swift.mt2SwiftDto.camt053001.impl;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mt2SwiftDto.AbstractMt2SwiftDtoParseFields;
import com.brilliance.swift.util.SwiftTransferUtil;
import com.brilliance.swift.vo.BankToCustomerStatement;
import com.brilliance.swift.vo.common.PartyAccount;
import com.prowidesoftware.swift.model.field.Field25;
import com.prowidesoftware.swift.model.mt.AbstractMT;
import com.prowidesoftware.swift.model.mt9xx.MT940;
......@@ -19,29 +17,23 @@ public class Camt053001Parse25aField extends AbstractMt2SwiftDtoParseFields {
public void parseFields() throws SwiftException {
try {
BankToCustomerStatement bankToCustomerStatement = context.get(BankToCustomerStatement.class);
if(context.get(AbstractMT.class).getMessageType().equals("940")){
MT940 mt940 = (MT940) context.get(AbstractMT.class);
Field25 field25 = mt940.getField25();
if(field25!=null){
PartyAccount account = new PartyAccount();
if (SwiftTransferUtil.checkIbanAccount(field25.getValue())) {
account.setIbanAcct(field25.getValue());
} else {
account.setAccount(field25.getValue());
}
bankToCustomerStatement.setAccount(account);
}
}else {
MT950 mt950 = (MT950) context.get(AbstractMT.class);
Field25 field25 = mt950.getField25();
if(field25!=null){
PartyAccount account = new PartyAccount();
account.setAccount(field25.getValue());
bankToCustomerStatement.setAccount(account);
}
Field25 field25 = getField25();
if (field25 != null) {
bankToCustomerStatement.setAccount(buildPartyAccount(field25.getValue()));
}
}catch (Exception e){
throw new SwiftException("ERROR", e.getMessage());
}
}
private Field25 getField25() {
AbstractMT abstractMT = context.get(AbstractMT.class);
if ("940".equals(abstractMT.getMessageType())) {
MT940 mt940 = (MT940) context.get(AbstractMT.class);
return mt940.getField25();
} else {
MT950 mt950 = (MT950) context.get(AbstractMT.class);
return mt950.getField25();
}
}
}
......@@ -17,24 +17,25 @@ public class Camt053001Parse28CField extends AbstractMt2SwiftDtoParseFields {
public void parseFields() throws SwiftException {
try {
BankToCustomerStatement bankToCustomerStatement = context.get(BankToCustomerStatement.class);
if(context.get(AbstractMT.class).getMessageType().equals("940")){
MT940 mt940 = (MT940) context.get(AbstractMT.class);
Field28C field28C = mt940.getField28C();
if(field28C!=null){
bankToCustomerStatement.setPgNb(field28C.getStatementNumber());
bankToCustomerStatement.setElctrncSeqNb(field28C.getSequenceNumber());
}
}else {
MT950 mt950 = (MT950) context.get(AbstractMT.class);
Field28C field28C = mt950.getField28C();
if(field28C!=null){
bankToCustomerStatement.setPgNb(field28C.getStatementNumber());
bankToCustomerStatement.setElctrncSeqNb(field28C.getSequenceNumber());
}
Field28C field28C = getField28C();
if(field28C != null){
bankToCustomerStatement.setPgNb(field28C.getStatementNumber());
bankToCustomerStatement.setElctrncSeqNb(field28C.getSequenceNumber());
}
}catch (Exception e){
throw new SwiftException("ERROR", e.getMessage());
}
}
private Field28C getField28C() {
AbstractMT abstractMT = context.get(AbstractMT.class);
if ("940".equals(abstractMT.getMessageType())) {
MT940 mt940 = (MT940) context.get(AbstractMT.class);
return mt940.getField28C();
} else {
MT950 mt950 = (MT950) context.get(AbstractMT.class);
return mt950.getField28C();
}
}
}
......@@ -4,8 +4,8 @@ import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mt2SwiftDto.AbstractMt2SwiftDtoParseFields;
import com.brilliance.swift.util.DateUtil;
import com.brilliance.swift.vo.BankToCustomerStatement;
import com.brilliance.swift.vo.common.BalDto;
import com.prowidesoftware.swift.model.field.DateContainer;
import com.brilliance.swift.vo.common.*;
import com.prowidesoftware.swift.model.field.Field60F;
import com.prowidesoftware.swift.model.field.Field60M;
import com.prowidesoftware.swift.model.mt.AbstractMT;
import com.prowidesoftware.swift.model.mt9xx.MT940;
......@@ -20,51 +20,55 @@ public class Camt053001Parse60aField extends AbstractMt2SwiftDtoParseFields {
public void parseFields() throws SwiftException {
try {
BankToCustomerStatement bankToCustomerStatement = context.get(BankToCustomerStatement.class);
if(context.get(AbstractMT.class).getMessageType().equals("940")){
MT940 mt940 = (MT940) context.get(AbstractMT.class);
if(mt940.getField60F()!=null){
}else if(mt940.getField60M()!=null){
Field60M field60M = mt940.getField60M();
BalDto balDto = new BalDto();
balDto.setCd("ITBD");
String dcMark = field60M.getDCMark();
if("D".equals(dcMark)){
balDto.setCdtDbtInd("DBIT");
}else if("C".equals(dcMark)) {
balDto.setCdtDbtInd("CRDT");
}else {
throw new SwiftException("ERROR", "cannot find filed60 D/C Mark.");
}
balDto.setDate(DateUtil.parseDate("20"+field60M.getDate(), "yyyyMMdd"));
balDto.setCcy(field60M.getCurrency());
balDto.setAmt(field60M.amount());
bankToCustomerStatement.setOpenBalance(balDto);
}
}else {
MT950 mt950 = (MT950) context.get(AbstractMT.class);
if(mt950.getField60F()!=null){
}else if(mt950.getField60M()!=null){
Field60M field60M = mt950.getField60M();
BalDto balDto = new BalDto();
balDto.setCd("ITBD");
String dcMark = field60M.getDCMark();
if("D".equals(dcMark)){
balDto.setCdtDbtInd("DBIT");
}else if("C".equals(dcMark)) {
balDto.setCdtDbtInd("CRDT");
}else {
throw new SwiftException("ERROR", "cannot find filed60 D/C Mark.");
}
balDto.setDate(DateUtil.parseDate("20"+field60M.getDate(), "yyyyMMdd"));
balDto.setCcy(field60M.getCurrency());
balDto.setAmt(field60M.amount());
bankToCustomerStatement.setOpenBalance(balDto);
Field60F field60F = getField60F();
if (field60F != null) {
CashBalance cashBalance = new CashBalance();
cashBalance.setCode(BalanceTypeCode.PRCD);
cashBalance.setCdtDbtCode("D".equals(field60F.getDCMark())? CdtDbtCode.DBIT:CdtDbtCode.CRDT);
cashBalance.setDate(DateUtil.parseDate("20"+field60F.getDate(), "yyyyMMdd"));
CcyFormatAmount ccyFormatAmount = new CcyFormatAmount();
ccyFormatAmount.setCcy(field60F.getCurrency());
ccyFormatAmount.setAmt(field60F.amount());
cashBalance.setAmt(ccyFormatAmount);
bankToCustomerStatement.setOpeningBalance(cashBalance);
} else {
Field60M field60M = getField60M();
if (field60M != null) {
CashBalance cashBalance = new CashBalance();
cashBalance.setCode(BalanceTypeCode.ITBD);
cashBalance.setCdtDbtCode("D".equals(field60M.getDCMark())? CdtDbtCode.DBIT:CdtDbtCode.CRDT);
cashBalance.setDate(DateUtil.parseDate("20"+field60M.getDate(), "yyyyMMdd"));
CcyFormatAmount ccyFormatAmount = new CcyFormatAmount();
ccyFormatAmount.setCcy(field60M.getCurrency());
ccyFormatAmount.setAmt(field60M.amount());
cashBalance.setAmt(ccyFormatAmount);
bankToCustomerStatement.setOpeningBalance(cashBalance);
}
}
}catch (Exception e){
throw new SwiftException("ERROR", e.getMessage());
}
}
private Field60F getField60F() {
AbstractMT abstractMT = context.get(AbstractMT.class);
if ("940".equals(abstractMT.getMessageType())) {
MT940 mt940 = (MT940) context.get(AbstractMT.class);
return mt940.getField60F();
} else {
MT950 mt950 = (MT950) context.get(AbstractMT.class);
return mt950.getField60F();
}
}
private Field60M getField60M() {
AbstractMT abstractMT = context.get(AbstractMT.class);
if ("940".equals(abstractMT.getMessageType())) {
MT940 mt940 = (MT940) context.get(AbstractMT.class);
return mt940.getField60M();
} else {
MT950 mt950 = (MT950) context.get(AbstractMT.class);
return mt950.getField60M();
}
}
}
......@@ -4,7 +4,11 @@ import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mt2SwiftDto.AbstractMt2SwiftDtoParseFields;
import com.brilliance.swift.util.DateUtil;
import com.brilliance.swift.vo.BankToCustomerStatement;
import com.brilliance.swift.vo.common.BalDto;
import com.brilliance.swift.vo.common.BalanceTypeCode;
import com.brilliance.swift.vo.common.CashBalance;
import com.brilliance.swift.vo.common.CcyFormatAmount;
import com.brilliance.swift.vo.common.CdtDbtCode;
import com.prowidesoftware.swift.model.field.Field62F;
import com.prowidesoftware.swift.model.field.Field62M;
import com.prowidesoftware.swift.model.mt.AbstractMT;
import com.prowidesoftware.swift.model.mt9xx.MT940;
......@@ -19,51 +23,55 @@ public class Camt053001Parse62aField extends AbstractMt2SwiftDtoParseFields {
public void parseFields() throws SwiftException {
try {
BankToCustomerStatement bankToCustomerStatement = context.get(BankToCustomerStatement.class);
if(context.get(AbstractMT.class).getMessageType().equals("940")){
MT940 mt940 = (MT940) context.get(AbstractMT.class);
if(mt940.getField62F()!=null){
}else if(mt940.getField62M()!=null){
Field62M field62M = mt940.getField62M();
BalDto balDto = new BalDto();
balDto.setCd("ITBD");
String dcMark = field62M.getDCMark();
if("D".equals(dcMark)){
balDto.setCdtDbtInd("DBIT");
}else if("C".equals(dcMark)) {
balDto.setCdtDbtInd("CRDT");
}else {
throw new SwiftException("ERROR", "cannot find filed60 D/C Mark.");
}
balDto.setDate(DateUtil.parseDate("20"+field62M.getDate(), "yyyyMMdd"));
balDto.setCcy(field62M.getCurrency());
balDto.setAmt(field62M.amount());
bankToCustomerStatement.setClosingBalance(balDto);
}
}else {
MT950 mt950 = (MT950) context.get(AbstractMT.class);
if(mt950.getField62F()!=null){
}else if(mt950.getField62M()!=null){
Field62M field62M = mt950.getField62M();
BalDto balDto = new BalDto();
balDto.setCd("ITBD");
String dcMark = field62M.getDCMark();
if("D".equals(dcMark)){
balDto.setCdtDbtInd("DBIT");
}else if("C".equals(dcMark)) {
balDto.setCdtDbtInd("CRDT");
}else {
throw new SwiftException("ERROR", "cannot find filed60 D/C Mark.");
}
balDto.setDate(DateUtil.parseDate("20"+field62M.getDate(), "yyyyMMdd"));
balDto.setCcy(field62M.getCurrency());
balDto.setAmt(field62M.amount());
bankToCustomerStatement.setClosingBalance(balDto);
Field62F field62F = getField62F();
if (field62F != null) {
CashBalance cashBalance = new CashBalance();
cashBalance.setCode(BalanceTypeCode.CLBD);
cashBalance.setCdtDbtCode("D".equals(field62F.getDCMark())? CdtDbtCode.DBIT:CdtDbtCode.CRDT);
cashBalance.setDate(DateUtil.parseDate("20"+field62F.getDate(), "yyyyMMdd"));
CcyFormatAmount ccyFormatAmount = new CcyFormatAmount();
ccyFormatAmount.setCcy(field62F.getCurrency());
ccyFormatAmount.setAmt(field62F.amount());
cashBalance.setAmt(ccyFormatAmount);
bankToCustomerStatement.setClosingBalance(cashBalance);
} else {
Field62M field62M = getField62M();
if (field62M != null) {
CashBalance cashBalance = new CashBalance();
cashBalance.setCode(BalanceTypeCode.ITBD);
cashBalance.setCdtDbtCode("D".equals(field62M.getDCMark())? CdtDbtCode.DBIT:CdtDbtCode.CRDT);
cashBalance.setDate(DateUtil.parseDate("20"+field62M.getDate(), "yyyyMMdd"));
CcyFormatAmount ccyFormatAmount = new CcyFormatAmount();
ccyFormatAmount.setCcy(field62M.getCurrency());
ccyFormatAmount.setAmt(field62M.amount());
cashBalance.setAmt(ccyFormatAmount);
bankToCustomerStatement.setClosingBalance(cashBalance);
}
}
}catch (Exception e){
throw new SwiftException("ERROR", e.getMessage());
}
}
private Field62F getField62F() {
AbstractMT abstractMT = context.get(AbstractMT.class);
if ("940".equals(abstractMT.getMessageType())) {
MT940 mt940 = (MT940) context.get(AbstractMT.class);
return mt940.getField62F();
} else {
MT950 mt950 = (MT950) context.get(AbstractMT.class);
return mt950.getField62F();
}
}
private Field62M getField62M() {
AbstractMT abstractMT = context.get(AbstractMT.class);
if ("940".equals(abstractMT.getMessageType())) {
MT940 mt940 = (MT940) context.get(AbstractMT.class);
return mt940.getField62M();
} else {
MT950 mt950 = (MT950) context.get(AbstractMT.class);
return mt950.getField62M();
}
}
}
......@@ -4,7 +4,10 @@ import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mt2SwiftDto.AbstractMt2SwiftDtoParseFields;
import com.brilliance.swift.util.DateUtil;
import com.brilliance.swift.vo.BankToCustomerStatement;
import com.brilliance.swift.vo.common.BalDto;
import com.brilliance.swift.vo.common.BalanceTypeCode;
import com.brilliance.swift.vo.common.CashBalance;
import com.brilliance.swift.vo.common.CcyFormatAmount;
import com.brilliance.swift.vo.common.CdtDbtCode;
import com.prowidesoftware.swift.model.field.Field64;
import com.prowidesoftware.swift.model.mt.AbstractMT;
import com.prowidesoftware.swift.model.mt9xx.MT940;
......@@ -19,47 +22,31 @@ public class Camt053001Parse64Field extends AbstractMt2SwiftDtoParseFields {
public void parseFields() throws SwiftException {
try {
BankToCustomerStatement bankToCustomerStatement = context.get(BankToCustomerStatement.class);
if(context.get(AbstractMT.class).getMessageType().equals("940")){
MT940 mt940 = (MT940) context.get(AbstractMT.class);
Field64 field64 = mt940.getField64();
if(field64!=null) {
BalDto balDto = new BalDto();
balDto.setCd("CLAV");
String dcMark = field64.getDCMark();
if("D".equals(dcMark)){
balDto.setCdtDbtInd("DBIT");
}else if("C".equals(dcMark)) {
balDto.setCdtDbtInd("CRDT");
}else {
throw new SwiftException("ERROR", "cannot find filed60 D/C Mark.");
}
balDto.setDate(DateUtil.parseDate("20"+field64.getDate(), "yyyyMMdd"));
balDto.setCcy(field64.getCurrency());
balDto.setAmt(field64.amount());
bankToCustomerStatement.setClosingAvailableBalance(balDto);
}
}else {
MT950 mt950 = (MT950) context.get(AbstractMT.class);
Field64 field64 = mt950.getField64();
if(field64!=null) {
BalDto balDto = new BalDto();
balDto.setCd("CLAV");
String dcMark = field64.getDCMark();
if("D".equals(dcMark)){
balDto.setCdtDbtInd("DBIT");
}else if("C".equals(dcMark)) {
balDto.setCdtDbtInd("CRDT");
}else {
throw new SwiftException("ERROR", "cannot find filed60 D/C Mark.");
}
balDto.setDate(DateUtil.parseDate("20"+field64.getDate(), "yyyyMMdd"));
balDto.setCcy(field64.getCurrency());
balDto.setAmt(field64.amount());
bankToCustomerStatement.setClosingAvailableBalance(balDto);
}
Field64 field64 = getField64();
if (field64 != null) {
CashBalance cashBalance = new CashBalance();
cashBalance.setCode(BalanceTypeCode.CLAV);
cashBalance.setCdtDbtCode("D".equals(field64.getDCMark())? CdtDbtCode.DBIT:CdtDbtCode.CRDT);
cashBalance.setDate(DateUtil.parseDate("20"+field64.getDate(), "yyyyMMdd"));
CcyFormatAmount ccyFormatAmount = new CcyFormatAmount();
ccyFormatAmount.setCcy(field64.getCurrency());
ccyFormatAmount.setAmt(field64.amount());
cashBalance.setAmt(ccyFormatAmount);
bankToCustomerStatement.setClosingAvailableBalance(cashBalance);
}
}catch (Exception e) {
throw new SwiftException("ERROR", e.getMessage());
}
}
private Field64 getField64() {
AbstractMT abstractMT = context.get(AbstractMT.class);
if ("940".equals(abstractMT.getMessageType())) {
MT940 mt940 = (MT940) context.get(AbstractMT.class);
return mt940.getField64();
} else {
MT950 mt950 = (MT950) context.get(AbstractMT.class);
return mt950.getField64();
}
}
}
......@@ -4,7 +4,7 @@ import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mt2SwiftDto.AbstractMt2SwiftDtoParseFields;
import com.brilliance.swift.util.DateUtil;
import com.brilliance.swift.vo.BankToCustomerStatement;
import com.brilliance.swift.vo.common.BalDto;
import com.brilliance.swift.vo.common.*;
import com.prowidesoftware.swift.model.field.Field65;
import com.prowidesoftware.swift.model.mt.AbstractMT;
import com.prowidesoftware.swift.model.mt9xx.MT940;
......@@ -20,26 +20,21 @@ public class Camt053001Parse65Field extends AbstractMt2SwiftDtoParseFields {
public void parseFields() throws SwiftException {
try {
BankToCustomerStatement bankToCustomerStatement = context.get(BankToCustomerStatement.class);
if(context.get(AbstractMT.class).getMessageType().equals("940")){
MT940 mt940 = (MT940) context.get(AbstractMT.class);
List<Field65> field65List = mt940.getField65();
if(field65List.size()>0){
for (int i = 0; i < field65List.size(); i++) {
BalDto balDto = new BalDto();
balDto.setCd("FWAV");
String dcMark = field65List.get(i).getDCMark();
if("D".equals(dcMark)){
balDto.setCdtDbtInd("DBIT");
}else if("C".equals(dcMark)) {
balDto.setCdtDbtInd("CRDT");
}else {
throw new SwiftException("ERROR", "cannot find filed60 D/C Mark.");
}
balDto.setDate(DateUtil.parseDate("20"+field65List.get(i).getDate(), "yyyyMMdd"));
balDto.setCcy(field65List.get(i).getCurrency());
balDto.setAmt(field65List.get(i).amount());
bankToCustomerStatement.addForwardAvailableBalance(balDto);
}
AbstractMT abstractMT = context.get(AbstractMT.class);
if (!"940".equals(abstractMT.getMessageType())) return;
MT940 mt940 = (MT940) context.get(AbstractMT.class);
List<Field65> field65List = mt940.getField65();
if (field65List.size() > 0) {
for (Field65 field65 : field65List) {
CashBalance cashBalance = new CashBalance();
cashBalance.setCode(BalanceTypeCode.FWAV);
cashBalance.setCdtDbtCode("D".equals(field65.getDCMark())? CdtDbtCode.DBIT:CdtDbtCode.CRDT);
cashBalance.setDate(DateUtil.parseDate("20"+field65.getDate(), "yyyyMMdd"));
CcyFormatAmount ccyFormatAmount = new CcyFormatAmount();
ccyFormatAmount.setCcy(field65.getCurrency());
ccyFormatAmount.setAmt(field65.amount());
cashBalance.setAmt(ccyFormatAmount);
bankToCustomerStatement.addForwardAvailableBalance(cashBalance);
}
}
}catch (Exception e) {
......
......@@ -6,9 +6,7 @@ import com.brilliance.swift.vo.BankToCustomerStatement;
import com.prowidesoftware.swift.model.Tag;
import com.prowidesoftware.swift.model.field.Field86;
import com.prowidesoftware.swift.model.mt.AbstractMT;
import com.prowidesoftware.swift.model.mt9xx.MT940;
import java.util.ArrayList;
import java.util.List;
/**
......@@ -16,15 +14,19 @@ import java.util.List;
* @create 2022-04-24 14:59
*/
public class Camt053001Parse86Field extends AbstractMt2SwiftDtoParseFields {
private String name = "86";
@Override
public void parseFields() throws SwiftException {
try {
BankToCustomerStatement bankToCustomerStatement = context.get(BankToCustomerStatement.class);
if(context.get(AbstractMT.class).getMessageType().equals("940")){
MT940 mt940 = (MT940) context.get(AbstractMT.class);
List<Tag> tags = mt940.getSwiftMessage().getBlock4().getTags();
if(tags.get(tags.size()-1).getName().equals("86")){
bankToCustomerStatement.addAddtlStmtInf(tags.get(tags.size()-1).getValue());
AbstractMT abstractMT = context.get(AbstractMT.class);
List<Tag> tags = abstractMT.getSwiftMessage().getBlock4().getTags();
if (tags.size() > 0) {
if (name.equals(tags.get(tags.size()-1).getName())) {
Field86 field86 = new Field86(tags.get(tags.size()-1).getValue());
bankToCustomerStatement.setAdditionalStatementInformation(field86.getValue().replace("\r\n", ""));
}
}
}catch (Exception e) {
......
......@@ -112,4 +112,6 @@ public class Field61ListGenerate extends AbstractMx2MtFieldsGenerate{
throw new SwiftException("ERROR", e.getMessage());
}
}
}
package com.brilliance.swift.mx2swiftdto;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.util.DateUtil;
import com.brilliance.swift.util.StringUtil;
import com.brilliance.swift.util.XmlUtil;
import com.brilliance.swift.vo.common.*;
import com.prowidesoftware.swift.model.mx.dic.*;
import org.dom4j.Document;
import java.math.BigDecimal;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public abstract class AbstractMx2SwiftDtoCreator implements Mx2SwiftDtoCreator{
......@@ -25,6 +29,10 @@ public abstract class AbstractMx2SwiftDtoCreator implements Mx2SwiftDtoCreator{
protected String bodyHdrParentElementName;
protected String defaultFormate = "yyyy-MM-dd HH:mm:ss,SSS";
protected String defaultDateFormate = "yyyy-MM-dd";
protected String getXmlNodeValue(String parentPath, Document document, String path) {
if (StringUtil.isNotEmpty(parentPath)) {
......@@ -143,6 +151,13 @@ public abstract class AbstractMx2SwiftDtoCreator implements Mx2SwiftDtoCreator{
return partyDto;
}
/**
* CashAccount38
* @param type
* @param document
* @param agtAcctPath
* @return
*/
protected PartyAccount acctConvertPartyAcct(String type, Document document, String agtAcctPath) {
String account = getXmlNodeValue(type, document, agtAcctPath+".Id.Othr.Id");
String ibanAcct = getXmlNodeValue(type, document, agtAcctPath+".Id.IBAN");
......@@ -175,33 +190,88 @@ public abstract class AbstractMx2SwiftDtoCreator implements Mx2SwiftDtoCreator{
return partyAccount;
}
protected PartyDto convertPartyDto(BranchAndFinancialInstitutionIdentification6 agt, CashAccount38 agtAcct) {
if (agt == null && agtAcct == null) {
return null;
}
PartyDto partyDto = new PartyDto();
if (agt != null) {
FinancialInstitutionIdentification18 finInstnId = agt.getFinInstnId();
if (finInstnId != null) {
partyDto.setPartyBic(finInstnId.getBICFI());
partyDto.setPartyName(finInstnId.getNm());
if (finInstnId.getPstlAdr() != null) {
partyDto.getAddressList().addAll(finInstnId.getPstlAdr().getAdrLine());
/**
* 根据下标转BalanceCash
* @param parentPath
* @param document
* @param balancePath
* @param index
* @return
*/
protected CashBalance convertCashBalanceByIndex(String parentPath, Document document, String balancePath, int index) {
try {
CashBalance cashBalance = null;
int cashBalanceCount = getXmlNodeCounts(parentPath, document, balancePath);
if (cashBalanceCount > index) {
int i = index - 1;
cashBalance = new CashBalance();
String code = getXmlNodeValue(parentPath, document, balancePath + "("+i+")" + ".Tp.CdOrPrtry.Cd");
String proprietary = getXmlNodeValue(parentPath, document, balancePath + "("+i+")" + ".Tp.CdOrPrtry.Prtry");
String cdtDbtCode = getXmlNodeValue(parentPath, document, balancePath + "("+i+")" + ".CdtDbtInd");
String dateStr = getXmlNodeValue(parentPath, document, balancePath + "("+i+")" + ".Dt.Dt");
if (StringUtil.isNotEmpty(dateStr)) {
Date date = DateUtil.parseDate(dateStr, defaultDateFormate);
cashBalance.setDate(date);
}
ClearingSystemMemberIdentification2 clrSysMmbId = finInstnId.getClrSysMmbId();
if (clrSysMmbId != null) {
ClearingSystemMember clrSysMmb = new ClearingSystemMember();
ClearingSystemIdentification2Choice clrSysId = clrSysMmbId.getClrSysId();
if (clrSysId != null) {
clrSysMmb.setCode(clrSysId.getCd());
clrSysMmb.setProprietary(clrSysId.getPrtry());
}
clrSysMmb.setId(clrSysMmbId.getMmbId());
partyDto.setClrSysMmb(clrSysMmb);
String ccy = getXmlNodeValue(parentPath, document, balancePath + "("+i+")" + ".Amt@Ccy");
String amtStr = getXmlNodeValue(parentPath, document, balancePath + "("+i+")" + ".Amt");
if (StringUtil.isNotEmpty(ccy) && StringUtil.isNotEmpty(amtStr)) {
CcyFormatAmount ccyFormatAmount = new CcyFormatAmount();
ccyFormatAmount.setCcy(ccy);
ccyFormatAmount.setAmt(new BigDecimal(amtStr));
cashBalance.setAmt(ccyFormatAmount);
}
cashBalance.setCode(BalanceTypeCode.valueOf(code));
cashBalance.setProprietary(proprietary);
cashBalance.setCdtDbtCode(CdtDbtCode.valueOf(cdtDbtCode));
}
return cashBalance;
} catch (ParseException e) {
throw new SwiftException(e.getMessage());
}
}
return partyDto;
/**
* 根据类型转BalanceCash
* @param parentPath
* @param document
* @param balancePath
* @param balanceType
* @return
*/
protected List<CashBalance> convertCashBalanceByType(String parentPath, Document document, String balancePath, BalanceTypeCode balanceTypeCode) {
try {
List<CashBalance> cashBalances = new ArrayList<>();
int cashBalanceCount = getXmlNodeCounts(parentPath, document, balancePath);
if (cashBalanceCount > 0) {
for (int i=0; i<cashBalanceCount; i++) {
String code = getXmlNodeValue(parentPath, document, balancePath + "("+i+")" + ".Tp.CdOrPrtry.Cd");
if (balanceTypeCode.value().equals(code)) {
CashBalance cashBalance = new CashBalance();
String proprietary = getXmlNodeValue(parentPath, document, balancePath + "("+i+")" + ".Tp.CdOrPrtry.Prtry");
String cdtDbtCode = getXmlNodeValue(parentPath, document, balancePath + "("+i+")" + ".CdtDbtInd");
String dateStr = getXmlNodeValue(parentPath, document, balancePath + "("+i+")" + ".Dt.Dt");
Date date = DateUtil.parseDate(dateStr, defaultDateFormate);
String ccy = getXmlNodeValue(parentPath, document, balancePath + "("+i+")" + ".Amt@Ccy");
String amtStr = getXmlNodeValue(parentPath, document, balancePath + "("+i+")" + ".Amt");
if (StringUtil.isNotEmpty(ccy) && StringUtil.isNotEmpty(amtStr)) {
CcyFormatAmount ccyFormatAmount = new CcyFormatAmount();
ccyFormatAmount.setCcy(ccy);
ccyFormatAmount.setAmt(new BigDecimal(amtStr));
cashBalance.setAmt(ccyFormatAmount);
}
cashBalance.setCode(BalanceTypeCode.valueOf(code));
cashBalance.setProprietary(proprietary);
cashBalance.setCdtDbtCode(CdtDbtCode.valueOf(cdtDbtCode));
cashBalance.setDate(date);
cashBalances.add(cashBalance);
}
}
}
return cashBalances;
} catch (ParseException e) {
throw new SwiftException(e.getMessage());
}
}
}
......@@ -22,6 +22,8 @@ public class Tag21Generate extends AbstractSwiftDto2MtTagGenerate {
List<Tag> tags = swiftMessage.getBlock4().getTags();
if (StringUtil.isNotEmpty(financialInstitutionCreditTransfer.getEndToEndId())) {
tags.add(new Tag(name, financialInstitutionCreditTransfer.getEndToEndId()));
} else {
tags.add(new Tag(name, "NONREF"));
}
}
}
......@@ -4,14 +4,13 @@ import com.brilliance.swift.swiftdto2mt.AbstractSwiftDto2MtCreator;
import com.brilliance.swift.swiftdto2mt.SwiftDto2MtContextIdentifier;
import com.brilliance.swift.swiftdto2mt.SwiftDto2MtTagGenerate;
import com.brilliance.swift.swiftdto2mt.mt940950.impl.*;
import com.brilliance.swift.util.StringUtil;
import com.brilliance.swift.vo.BankToCustomerStatement;
import com.brilliance.swift.vo.common.ReportEntry;
import java.util.ArrayList;
import java.util.List;
import static com.brilliance.swift.constants.Mx2MtConstants.MT_TYPE_940;
import static com.brilliance.swift.constants.Mx2MtConstants.MT_TYPE_950;
public class SwiftDto2Mt940950Creator extends AbstractSwiftDto2MtCreator {
@Override
public List<SwiftDto2MtTagGenerate> getGenerateTagList() {
......@@ -32,11 +31,20 @@ public class SwiftDto2Mt940950Creator extends AbstractSwiftDto2MtCreator {
@Override
protected String getMtType() {
BankToCustomerStatement bankToCustomerStatement = (BankToCustomerStatement)context.get(SwiftDto2MtContextIdentifier.SWIFT_DTO_OBJ, true);
if("FWAV".equals(bankToCustomerStatement.getCd())||bankToCustomerStatement.getAddtlStmtInf()!=null){
return MT_TYPE_940;
}else {
return MT_TYPE_950;
if (bankToCustomerStatement.getForwardAvailableBalances().size() > 0) {
return "940";
}
if (StringUtil.isNotEmpty(bankToCustomerStatement.getAdditionalStatementInformation())) {
return "940";
}
List<ReportEntry> reportEntries = bankToCustomerStatement.getReportEntries();
if (reportEntries.size() > 0) {
for (ReportEntry reportEntry : reportEntries) {
if (StringUtil.isNotEmpty(reportEntry.getAddtlNtryInf())) {
return "940";
}
}
}
return "950";
}
}
......@@ -3,8 +3,8 @@ package com.brilliance.swift.swiftdto2mt.mt940950.impl;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.swiftdto2mt.AbstractSwiftDto2MtTagGenerate;
import com.brilliance.swift.swiftdto2mt.SwiftDto2MtContextIdentifier;
import com.brilliance.swift.util.StringUtil;
import com.brilliance.swift.vo.BankToCustomerStatement;
import com.brilliance.swift.vo.common.PartyDto;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.Tag;
......@@ -22,7 +22,9 @@ public class Tag25aGenerate extends AbstractSwiftDto2MtTagGenerate {
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
if(bankToCustomerStatement.getAccount()!=null){
tags.add(new Tag(name, bankToCustomerStatement.getAccount().getAccount()));
PartyDto partyDto = new PartyDto();
partyDto.setPartyAcct(bankToCustomerStatement.getAccount());
tags.add(new Tag(name, getAccount(partyDto)));
}
}catch (Exception e){
throw new SwiftException("ERROR", e.getMessage());
......
......@@ -5,20 +5,20 @@ import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.swiftdto2mt.AbstractSwiftDto2MtTagGenerate;
import com.brilliance.swift.swiftdto2mt.SwiftDto2MtContextIdentifier;
import com.brilliance.swift.util.DateUtil;
import com.brilliance.swift.util.NumberUtil;
import com.brilliance.swift.vo.BankToCustomerStatement;
import com.brilliance.swift.vo.common.BalDto;
import com.brilliance.swift.vo.common.BalanceTypeCode;
import com.brilliance.swift.vo.common.CashBalance;
import com.brilliance.swift.vo.common.CcyFormatAmount;
import com.brilliance.swift.vo.common.CdtDbtCode;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.Tag;
import com.prowidesoftware.swift.model.mx.dic.CreditDebitCode;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import static com.brilliance.swift.constants.Mx2MtConstants.DRCRMARK_C;
import static com.brilliance.swift.constants.Mx2MtConstants.DRCRMARK_D;
import static com.brilliance.swift.swiftdto2mt.SwiftDto2MtContextIdentifier.CD_60F;
import static com.brilliance.swift.swiftdto2mt.SwiftDto2MtContextIdentifier.CD_60M;
public class Tag60aGenerate extends AbstractSwiftDto2MtTagGenerate {
......@@ -32,31 +32,32 @@ public class Tag60aGenerate extends AbstractSwiftDto2MtTagGenerate {
BankToCustomerStatement bankToCustomerStatement = (BankToCustomerStatement)context.get(SwiftDto2MtContextIdentifier.SWIFT_DTO_OBJ, true);
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
BalDto openBalance = bankToCustomerStatement.getOpenBalance();
if(openBalance!=null){
CashBalance openingBalance = bankToCustomerStatement.getOpeningBalance();
if(openingBalance != null){
String value = "";
String dcMark = "";
if(CD_60F.equals(openBalance.getCd())){
tags.add(new Tag(name_F, ""));
}else if(CD_60M.equals(openBalance.getCd())){
if(CreditDebitCode.CRDT.value().equals(openBalance.getCdtDbtInd())){
dcMark = DRCRMARK_C;
}else if(CreditDebitCode.DBIT.value().equals(openBalance.getCdtDbtInd())){
dcMark = DRCRMARK_D;
}else {
throw new SwiftException("ERROR", "cannot find filed60 D/C Mark.");
}
Date date = openBalance.getDate();
String ccy = openBalance.getCcy();
BigDecimal amt = openBalance.getAmt();
if(date!=null && ccy!=null){
String dateStr = DateUtil.format(date, "yyMMdd");
value = dcMark + dateStr + ccy + amt;
}
}else {
throw new SwiftException("ERROR", "cannot find filed60Option.");
if(CdtDbtCode.CRDT.equals(openingBalance.getCdtDbtCode())){
dcMark = DRCRMARK_C;
}else if(CreditDebitCode.DBIT.equals(openingBalance.getCdtDbtCode())){
dcMark = DRCRMARK_D;
}
String dateStr = "";
if (openingBalance.getDate() != null) {
dateStr = DateUtil.format(openingBalance.getDate(), "yyMMdd");
}
CcyFormatAmount ccyFormatAmount = openingBalance.getAmt();
String ccy = "";
String amtStr = "";
if (ccyFormatAmount != null) {
ccy = ccyFormatAmount.getCcy();
amtStr = NumberUtil.formatAmt(ccyFormatAmount.getAmt(), ccyFormatAmount.getCcy());
}
value = dcMark + dateStr + ccy + amtStr;
if (BalanceTypeCode.PRCD.equals(openingBalance.getCode())) {
tags.add(new Tag(name_F, value));
} else if (BalanceTypeCode.ITBD.equals(openingBalance.getCode())) {
tags.add(new Tag(name_M, value));
}
tags.add(new Tag(name_M, value));
}
}catch (Exception e){
throw new SwiftException("ERROR", e.getMessage());
......
......@@ -5,23 +5,28 @@ import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.swiftdto2mt.AbstractSwiftDto2MtTagGenerate;
import com.brilliance.swift.swiftdto2mt.SwiftDto2MtContextIdentifier;
import com.brilliance.swift.util.DateUtil;
import com.brilliance.swift.util.NumberUtil;
import com.brilliance.swift.util.StringUtil;
import com.brilliance.swift.vo.BankToCustomerStatement;
import com.brilliance.swift.vo.common.statementBreakdown;
import com.brilliance.swift.vo.common.BankTransactionCodeStructure;
import com.brilliance.swift.vo.common.CcyFormatAmount;
import com.brilliance.swift.vo.common.CdtDbtCode;
import com.brilliance.swift.vo.common.ReportEntry;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.Tag;
import com.prowidesoftware.swift.model.mx.dic.CreditDebitCode;
import org.apache.commons.io.FileUtils;
import java.math.BigDecimal;
import java.util.Date;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import static com.brilliance.swift.constants.Mx2MtConstants.*;
import java.util.Map;
public class Tag61Generate extends AbstractSwiftDto2MtTagGenerate {
private String name = "61";
private String name_61 = "61";
private String name_86 = "86";
@Override
public void tagGenerate() throws SwiftException {
......@@ -29,55 +34,49 @@ public class Tag61Generate extends AbstractSwiftDto2MtTagGenerate {
BankToCustomerStatement bankToCustomerStatement = (BankToCustomerStatement)context.get(SwiftDto2MtContextIdentifier.SWIFT_DTO_OBJ, true);
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
List<statementBreakdown> statementLineList = bankToCustomerStatement.getStatementLine();
StringBuilder sb = new StringBuilder();
if(statementLineList.size() > 0){
int count = 0;
for (statementBreakdown statementBreakdown : statementLineList) {
if(count>=1){
sb.append(Mx2MtConstants.NEW_LINE).append(":61:");
}
List<ReportEntry> reportEntries = bankToCustomerStatement.getReportEntries();
if(reportEntries.size() > 0){
for (ReportEntry reportEntry : reportEntries) {
String valueDateStr = "";
String bookDateStr = "";
String dcMark = "";
Date valueDate = statementBreakdown.getValueDate();
Date bookDate = statementBreakdown.getBookDate();
if(valueDate != null){
valueDateStr = DateUtil.format(valueDate, "yyMMdd");
String drCrMark = "";
String amt = "";
String ccy = "";
String txnCode = getTxnCode(reportEntry.getBankTransactionCodeStructure());
String endToEndId = reportEntry.getEndToEndId();
String addtlTxInf = reportEntry.getAddtlTxInf();
String acctSvcrRef = reportEntry.getAcctSvcrRef();
if (reportEntry.getValueDate() != null) {
valueDateStr = DateUtil.format(reportEntry.getValueDate(), "yyMMdd");
}
if(bookDate != null){
bookDateStr = DateUtil.format(valueDate, "yyMMdd");
if (reportEntry.getBookDate() != null) {
bookDateStr = DateUtil.format(reportEntry.getBookDate(), "yyMMdd");
}
if(CreditDebitCode.CRDT.value().equals(statementBreakdown.getCdtDbtInd())){
if("true".equals(statementBreakdown.getCdtDbtInd())){
dcMark = DRCRMARK_RD;
}else {
dcMark = DRCRMARK_C;
if (CdtDbtCode.CRDT.equals(reportEntry.getCdtDbtCode())) {
if (Boolean.TRUE.equals(reportEntry.getReversalIndicator())) {
drCrMark = Mx2MtConstants.DRCRMARK_RD;
} else {
drCrMark = Mx2MtConstants.DRCRMARK_C;
}
}else if(CreditDebitCode.DBIT.value().equals(statementBreakdown.getCdtDbtInd())){
if("true".equals(statementBreakdown.getCdtDbtInd())){
dcMark = DRCRMARK_RC;
}else {
dcMark = DRCRMARK_D;
} else if (CdtDbtCode.DBIT.equals(reportEntry.getCdtDbtCode())) {
if (Boolean.TRUE.equals(reportEntry.getReversalIndicator())) {
drCrMark = Mx2MtConstants.DRCRMARK_RC;
} else {
drCrMark = Mx2MtConstants.DRCRMARK_D;
}
}else {
throw new SwiftException("ERROR", "cannot find filed61 D/C Mark.");
}
String ccy = statementBreakdown.getCcy();
BigDecimal amt = statementBreakdown.getAmt();
String transactionType = statementBreakdown.getTransactionType();
String identificationCode = statementBreakdown.getIdentificationCode();
String endToEndId = statementBreakdown.getEndToEndId();
String acctSvcrRef = statementBreakdown.getAcctSvcrRef();
String addtlTxInf = statementBreakdown.getAddtlTxInf();
String addtlNtryInf = statementBreakdown.getAddtlNtryInf();
CcyFormatAmount ccyFormatAmount = reportEntry.getAmt();
if (ccyFormatAmount != null) {
amt = NumberUtil.formatAmt(ccyFormatAmount.getAmt(), ccyFormatAmount.getCcy());
ccy = ccyFormatAmount.getCcy();
}
StringBuilder sb = new StringBuilder();
sb.append(valueDateStr)
.append(bookDateStr)
.append(dcMark)
.append(drCrMark)
.append(ccy)
.append(amt)
.append(transactionType)
.append(identificationCode)
.append(txnCode)
.append(endToEndId);
if (StringUtil.isNotEmpty(acctSvcrRef)) {
sb.append("//"+acctSvcrRef);
......@@ -85,15 +84,53 @@ public class Tag61Generate extends AbstractSwiftDto2MtTagGenerate {
if (StringUtil.isNotEmpty(addtlTxInf)) {
sb.append(Mx2MtConstants.NEW_LINE+addtlTxInf);
}
if(StringUtil.isNotEmpty(addtlNtryInf)){
sb.append(Mx2MtConstants.NEW_LINE).append(":86:").append(StringUtil.getStringByEnter(addtlNtryInf, 35, 6));
tags.add(new Tag(name_61, sb.toString()));
String addtlNtryInf = reportEntry.getAddtlNtryInf();
if (StringUtil.isNotEmpty(addtlNtryInf)) {
tags.add(new Tag(name_86, addtlNtryInf));
}
count++;
}
}
tags.add(new Tag(name, sb.toString()));
}catch (Exception e){
throw new SwiftException("ERROR", e.getMessage());
}
}
/**
* 得到txntype+txnCode,从BankTransactionCode.Properties文件获取
* @return
*/
private String getTxnCode(BankTransactionCodeStructure bankTransactionCodeStructure) {
try {
if (bankTransactionCodeStructure == null) return "";
File file = new File(System.getProperty("user.dir")+"\\swiftCore\\src\\main\\resources\\BankTransactionCode.Properties");
List<String> strings = FileUtils.readLines(file);
Map<String, String> maps = new HashMap<>();
for (String s : strings) {
if (!s.startsWith("#")) {
String[] arr = s.split("=");
if (arr.length == 2) {
maps.put(arr[0].trim(), arr[1].trim());
}
}
}
String txnCode = maps.get(bankTransactionCodeStructure.getDomianCode()
+ "_"
+ bankTransactionCodeStructure.getFamilyCode()
+ "_"
+ bankTransactionCodeStructure.getSubFamilyCode());
if (StringUtil.isNotEmpty(txnCode)) {
return "F"+txnCode;
} else {
String code = bankTransactionCodeStructure.getCode();
if (StringUtil.isNotEmpty(code) && code.length() > 4) {
return code.substring(0, 4);
}
//TODO
return "S940";
}
} catch (IOException e) {
throw new SwiftException("ERROR", e.getMessage());
}
}
}
......@@ -4,19 +4,20 @@ import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.swiftdto2mt.AbstractSwiftDto2MtTagGenerate;
import com.brilliance.swift.swiftdto2mt.SwiftDto2MtContextIdentifier;
import com.brilliance.swift.util.DateUtil;
import com.brilliance.swift.util.NumberUtil;
import com.brilliance.swift.vo.BankToCustomerStatement;
import com.brilliance.swift.vo.common.BalDto;
import com.brilliance.swift.vo.common.BalanceTypeCode;
import com.brilliance.swift.vo.common.CashBalance;
import com.brilliance.swift.vo.common.CcyFormatAmount;
import com.brilliance.swift.vo.common.CdtDbtCode;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.Tag;
import com.prowidesoftware.swift.model.mx.dic.CreditDebitCode;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import static com.brilliance.swift.constants.Mx2MtConstants.DRCRMARK_C;
import static com.brilliance.swift.constants.Mx2MtConstants.DRCRMARK_D;
import static com.brilliance.swift.swiftdto2mt.SwiftDto2MtContextIdentifier.*;
public class Tag62aGenerate extends AbstractSwiftDto2MtTagGenerate {
......@@ -31,31 +32,32 @@ public class Tag62aGenerate extends AbstractSwiftDto2MtTagGenerate {
BankToCustomerStatement bankToCustomerStatement = (BankToCustomerStatement)context.get(SwiftDto2MtContextIdentifier.SWIFT_DTO_OBJ, true);
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
BalDto closingBalance = bankToCustomerStatement.getClosingBalance();
if(closingBalance!=null){
CashBalance closingBalance = bankToCustomerStatement.getClosingBalance();
if(closingBalance != null){
String value = "";
String dcMark = "";
if(CD_62F.equals(closingBalance.getCd())){
tags.add(new Tag(name_F, ""));
}else if(CD_62M.equals(closingBalance.getCd())){
if(CreditDebitCode.CRDT.value().equals(closingBalance.getCdtDbtInd())){
dcMark = DRCRMARK_C;
}else if(CreditDebitCode.DBIT.value().equals(closingBalance.getCdtDbtInd())){
dcMark = DRCRMARK_D;
}else {
throw new SwiftException("ERROR", "cannot find filed60 D/C Mark.");
}
Date date = closingBalance.getDate();
String ccy = closingBalance.getCcy();
BigDecimal amt = closingBalance.getAmt();
if(date!=null && ccy!=null){
String dateStr = DateUtil.format(date, "yyMMdd");
value = dcMark + dateStr + ccy + amt;
}
}else {
throw new SwiftException("ERROR", "cannot find filed60Option.");
if(CdtDbtCode.CRDT.equals(closingBalance.getCdtDbtCode())){
dcMark = DRCRMARK_C;
}else if(CreditDebitCode.DBIT.equals(closingBalance.getCdtDbtCode())){
dcMark = DRCRMARK_D;
}
String dateStr = "";
if (closingBalance.getDate() != null) {
dateStr = DateUtil.format(closingBalance.getDate(), "yyMMdd");
}
CcyFormatAmount ccyFormatAmount = closingBalance.getAmt();
String ccy = "";
String amtStr = "";
if (ccyFormatAmount != null) {
ccy = ccyFormatAmount.getCcy();
amtStr = NumberUtil.formatAmt(ccyFormatAmount.getAmt(), ccyFormatAmount.getCcy());
}
value = dcMark + dateStr + ccy + amtStr;
if (BalanceTypeCode.CLBD.equals(closingBalance.getCode())) {
tags.add(new Tag(name_F, value));
} else if (BalanceTypeCode.ITBD.equals(closingBalance.getCode())) {
tags.add(new Tag(name_M, value));
}
tags.add(new Tag(name_M, value));
}
}catch (Exception e){
throw new SwiftException("ERROR", e.getMessage());
......
......@@ -4,17 +4,17 @@ import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.swiftdto2mt.AbstractSwiftDto2MtTagGenerate;
import com.brilliance.swift.swiftdto2mt.SwiftDto2MtContextIdentifier;
import com.brilliance.swift.util.DateUtil;
import com.brilliance.swift.util.NumberUtil;
import com.brilliance.swift.vo.BankToCustomerStatement;
import com.brilliance.swift.vo.common.BalDto;
import com.brilliance.swift.vo.common.CashBalance;
import com.brilliance.swift.vo.common.CcyFormatAmount;
import com.brilliance.swift.vo.common.CdtDbtCode;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.Tag;
import com.prowidesoftware.swift.model.mx.dic.CreditDebitCode;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import static com.brilliance.swift.swiftdto2mt.SwiftDto2MtContextIdentifier.*;
import static com.brilliance.swift.constants.Mx2MtConstants.DRCRMARK_C;
import static com.brilliance.swift.constants.Mx2MtConstants.DRCRMARK_D;
......@@ -28,24 +28,27 @@ public class Tag64Generate extends AbstractSwiftDto2MtTagGenerate {
BankToCustomerStatement bankToCustomerStatement = (BankToCustomerStatement)context.get(SwiftDto2MtContextIdentifier.SWIFT_DTO_OBJ, true);
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
BalDto closingAvailableBalance = bankToCustomerStatement.getClosingAvailableBalance();
if(closingAvailableBalance!=null && CD_64.equals(closingAvailableBalance.getCd())){
CashBalance closingAvailableBalance = bankToCustomerStatement.getClosingAvailableBalance();
if(closingAvailableBalance != null){
String value = "";
String dcMark = "";
if(CreditDebitCode.CRDT.value().equals(closingAvailableBalance.getCdtDbtInd())){
if(CdtDbtCode.CRDT.equals(closingAvailableBalance.getCdtDbtCode())){
dcMark = DRCRMARK_C;
}else if(CreditDebitCode.DBIT.value().equals(closingAvailableBalance.getCdtDbtInd())){
}else if(CreditDebitCode.DBIT.equals(closingAvailableBalance.getCdtDbtCode())){
dcMark = DRCRMARK_D;
}else {
throw new SwiftException("ERROR", "cannot find filed60 D/C Mark.");
}
Date date = closingAvailableBalance.getDate();
String ccy = closingAvailableBalance.getCcy();
BigDecimal amt = closingAvailableBalance.getAmt();
if(date!=null && ccy!=null){
String dateStr = DateUtil.format(date, "yyMMdd");
value = dcMark + dateStr + ccy + amt;
String dateStr = "";
if (closingAvailableBalance.getDate() != null) {
dateStr = DateUtil.format(closingAvailableBalance.getDate(), "yyMMdd");
}
CcyFormatAmount ccyFormatAmount = closingAvailableBalance.getAmt();
String ccy = "";
String amtStr = "";
if (ccyFormatAmount != null) {
ccy = ccyFormatAmount.getCcy();
amtStr = NumberUtil.formatAmt(ccyFormatAmount.getAmt(), ccyFormatAmount.getCcy());
}
value = dcMark + dateStr + ccy + amtStr;
tags.add(new Tag(name, value));
}
}catch (Exception e){
......
package com.brilliance.swift.swiftdto2mt.mt940950.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.swiftdto2mt.AbstractSwiftDto2MtTagGenerate;
import com.brilliance.swift.swiftdto2mt.SwiftDto2MtContextIdentifier;
import com.brilliance.swift.util.DateUtil;
import com.brilliance.swift.util.NumberUtil;
import com.brilliance.swift.vo.BankToCustomerStatement;
import com.brilliance.swift.vo.common.BalDto;
import com.brilliance.swift.vo.common.CashBalance;
import com.brilliance.swift.vo.common.CcyFormatAmount;
import com.brilliance.swift.vo.common.CdtDbtCode;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.Tag;
import com.prowidesoftware.swift.model.mx.dic.CreditDebitCode;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import static com.brilliance.swift.swiftdto2mt.SwiftDto2MtContextIdentifier.*;
import static com.brilliance.swift.constants.Mx2MtConstants.DRCRMARK_C;
import static com.brilliance.swift.constants.Mx2MtConstants.DRCRMARK_D;
......@@ -29,34 +28,30 @@ public class Tag65Generate extends AbstractSwiftDto2MtTagGenerate {
BankToCustomerStatement bankToCustomerStatement = (BankToCustomerStatement)context.get(SwiftDto2MtContextIdentifier.SWIFT_DTO_OBJ, true);
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
List<BalDto> forwardAvailableBalanceList = bankToCustomerStatement.getForwardAvailableBalance();
StringBuilder sb = new StringBuilder();
if(forwardAvailableBalanceList.size()>0){
int count = 0;
for (BalDto forwardAvailableBalance : forwardAvailableBalanceList) {
if(count>=1){
sb.append(Mx2MtConstants.NEW_LINE).append(":65:");
List<CashBalance> forwardAvailableBalances = bankToCustomerStatement.getForwardAvailableBalances();
if(forwardAvailableBalances.size() > 0){
for (CashBalance cashBalance : forwardAvailableBalances) {
String value = "";
String dcMark = "";
if(CdtDbtCode.CRDT.equals(cashBalance.getCdtDbtCode())){
dcMark = DRCRMARK_C;
}else if(CreditDebitCode.DBIT.equals(cashBalance.getCdtDbtCode())){
dcMark = DRCRMARK_D;
}
if(forwardAvailableBalance!=null && CD_65.equals(forwardAvailableBalance.getCd())){
String dcMark = "";
if(CreditDebitCode.CRDT.value().equals(forwardAvailableBalance.getCdtDbtInd())){
dcMark = DRCRMARK_C;
}else if(CreditDebitCode.DBIT.value().equals(forwardAvailableBalance.getCdtDbtInd())){
dcMark = DRCRMARK_D;
}else {
throw new SwiftException("ERROR", "cannot find filed60 D/C Mark.");
}
Date date = forwardAvailableBalance.getDate();
String ccy = forwardAvailableBalance.getCcy();
BigDecimal amt = forwardAvailableBalance.getAmt();
if(date!=null && ccy!=null){
String dateStr = DateUtil.format(date, "yyMMdd");
sb.append(dcMark).append(dateStr).append(ccy).append(amt);
}
String dateStr = "";
if (cashBalance.getDate() != null) {
dateStr = DateUtil.format(cashBalance.getDate(), "yyMMdd");
}
count++;
CcyFormatAmount ccyFormatAmount = cashBalance.getAmt();
String ccy = "";
String amtStr = "";
if (ccyFormatAmount != null) {
ccy = ccyFormatAmount.getCcy();
amtStr = NumberUtil.formatAmt(ccyFormatAmount.getAmt(), ccyFormatAmount.getCcy());
}
value = dcMark + dateStr + ccy + amtStr;
tags.add(new Tag(name, value));
}
tags.add(new Tag(name, sb.toString()));
}
}catch (Exception e){
throw new SwiftException("ERROR", e.getMessage());
......
package com.brilliance.swift.swiftdto2mt.mt940950.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.swiftdto2mt.AbstractSwiftDto2MtTagGenerate;
import com.brilliance.swift.swiftdto2mt.SwiftDto2MtContextIdentifier;
......@@ -22,12 +21,9 @@ public class Tag86Generate extends AbstractSwiftDto2MtTagGenerate {
BankToCustomerStatement bankToCustomerStatement = (BankToCustomerStatement)context.get(SwiftDto2MtContextIdentifier.SWIFT_DTO_OBJ, true);
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
List<String> addtlStmtInfList = bankToCustomerStatement.getAddtlStmtInf();
StringBuilder sb = new StringBuilder();
if(addtlStmtInfList.size()>0){
String addtlStmtInf = addtlStmtInfList.get(0);
sb.append(StringUtil.getStringByEnter(addtlStmtInf, 35, 6));
tags.add(new Tag(name, sb.toString()));
String additionalStatementInformation = bankToCustomerStatement.getAdditionalStatementInformation();
if(StringUtil.isNotEmpty(additionalStatementInformation)){
tags.add(new Tag(name, StringUtil.getStringByEnter(additionalStatementInformation, 35, 6)));
}
}catch (Exception e){
throw new SwiftException("ERROR", e.getMessage());
......
package com.brilliance.swift.swiftdto2mx;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.util.DateUtil;
import com.brilliance.swift.util.StringUtil;
import com.brilliance.swift.vo.common.*;
import com.prowidesoftware.swift.model.mx.dic.*;
import javax.xml.datatype.DatatypeConfigurationException;
import java.text.ParseException;
import java.util.Date;
public abstract class AbstractSwiftDto2MxCreator implements SwiftDto2MxCreator{
protected SwiftDto2MxContext context;
......@@ -102,4 +108,49 @@ public abstract class AbstractSwiftDto2MxCreator implements SwiftDto2MxCreator{
}
return tr;
}
/**
* 将自定义对象CashBalance转Mx CashBalance8
*/
protected CashBalance8 convertCashBalance8(CashBalance cashBalance) {
try {
if (cashBalance == null) return null;
CashBalance8 cashBalance8 = new CashBalance8();
BalanceTypeCode balanceTypeCode = cashBalance.getCode();
String proprietary = cashBalance.getProprietary();
CdtDbtCode cdtDbtCode = cashBalance.getCdtDbtCode();
Date date = cashBalance.getDate();
CcyFormatAmount ccyFormatAmount = cashBalance.getAmt();
if (balanceTypeCode != null || StringUtil.isNotEmpty(proprietary)) {
BalanceType13 tp = new BalanceType13();
BalanceType10Choice cdOrPrtry = new BalanceType10Choice();
if (balanceTypeCode != null) {
cdOrPrtry.setCd(balanceTypeCode.value());
}
cdOrPrtry.setPrtry(proprietary);
tp.setCdOrPrtry(cdOrPrtry);
cashBalance8.setTp(tp);
}
if (cdtDbtCode != null) {
cashBalance8.setCdtDbtInd(CreditDebitCode.valueOf(cdtDbtCode.value()));
}
if (ccyFormatAmount != null) {
ActiveOrHistoricCurrencyAndAmount amt = new ActiveOrHistoricCurrencyAndAmount();
amt.setCcy(ccyFormatAmount.getCcy());
amt.setValue(ccyFormatAmount.getAmt());
cashBalance8.setAmt(amt);
}
if (date != null) {
DateAndDateTime2Choice dt = new DateAndDateTime2Choice();
dt.setDt(DateUtil.parseXMLGregorianCalendar(date));
cashBalance8.setDt(dt);
}
return cashBalance8;
} catch (DatatypeConfigurationException e) {
throw new SwiftException("Error", e.getMessage());
} catch (ParseException e) {
throw new SwiftException("Error", e.getMessage());
}
}
}
package com.brilliance.swift.vo;
import com.brilliance.swift.vo.common.BalDto;
import com.brilliance.swift.vo.common.PartyAccount;
import com.brilliance.swift.vo.common.statementBreakdown;
import com.brilliance.swift.vo.common.*;
import java.util.ArrayList;
import java.util.List;
......@@ -13,7 +11,7 @@ import java.util.List;
*/
public class BankToCustomerStatement extends SwiftDto{
protected String cd;
protected String endToEndId;
protected PartyAccount account;
......@@ -21,24 +19,48 @@ public class BankToCustomerStatement extends SwiftDto{
protected String elctrncSeqNb;
protected BalDto openingBalance;
protected CashBalance openingBalance;
protected List<statementBreakdown> statementLine;
protected List<ReportEntry> reportEntries;
protected BalDto closingBalance;
protected CashBalance closingBalance;
protected BalDto closingAvailableBalance;
protected CashBalance closingAvailableBalance;
protected List<BalDto> forwardAvailableBalance;
protected List<CashBalance> forwardAvailableBalances;
protected List<String> addtlStmtInf;
protected String additionalStatementInformation;
public String getCd() {
return cd;
public List<ReportEntry> getReportEntries() {
if(reportEntries == null){
reportEntries = new ArrayList<>();
}
return reportEntries;
}
public void setCd(String cd) {
this.cd = cd;
public BankToCustomerStatement addReportEntry(ReportEntry reportEntry) {
getReportEntries().add(reportEntry);
return this;
}
public List<CashBalance> getForwardAvailableBalances() {
if(forwardAvailableBalances == null){
forwardAvailableBalances = new ArrayList<>();
}
return forwardAvailableBalances;
}
public BankToCustomerStatement addForwardAvailableBalance(CashBalance cashBalance) {
getForwardAvailableBalances().add(cashBalance);
return this;
}
public String getEndToEndId() {
return endToEndId;
}
public void setEndToEndId(String endToEndId) {
this.endToEndId = endToEndId;
}
public PartyAccount getAccount() {
......@@ -65,62 +87,35 @@ public class BankToCustomerStatement extends SwiftDto{
this.elctrncSeqNb = elctrncSeqNb;
}
public BalDto getOpenBalance() {
public CashBalance getOpeningBalance() {
return openingBalance;
}
public void setOpenBalance(BalDto openBalance) {
this.openingBalance = openBalance;
}
public BalDto getClosingAvailableBalance() {
return closingAvailableBalance;
public void setOpeningBalance(CashBalance openingBalance) {
this.openingBalance = openingBalance;
}
public void setClosingAvailableBalance(BalDto closingAvailableBalance) {
this.closingAvailableBalance = closingAvailableBalance;
}
public List<BalDto> getForwardAvailableBalance() {
if(forwardAvailableBalance == null){
forwardAvailableBalance = new ArrayList<>();
}
return forwardAvailableBalance;
}
public BankToCustomerStatement addForwardAvailableBalance(BalDto forwardAvailableBalance) {
getForwardAvailableBalance().add(forwardAvailableBalance);
return this;
public CashBalance getClosingBalance() {
return closingBalance;
}
public List<String> getAddtlStmtInf() {
if(addtlStmtInf == null){
addtlStmtInf = new ArrayList<>();
}
return addtlStmtInf;
public void setClosingBalance(CashBalance closingBalance) {
this.closingBalance = closingBalance;
}
public BankToCustomerStatement addAddtlStmtInf(String addtlStmtInf) {
getAddtlStmtInf().add(addtlStmtInf);
return this;
public CashBalance getClosingAvailableBalance() {
return closingAvailableBalance;
}
public BankToCustomerStatement addStatementLine(statementBreakdown statementBreakdown){
getStatementLine().add(statementBreakdown);
return this;
}
public List<statementBreakdown> getStatementLine() {
if(statementLine == null){
statementLine = new ArrayList<>();
}
return statementLine;
public void setClosingAvailableBalance(CashBalance closingAvailableBalance) {
this.closingAvailableBalance = closingAvailableBalance;
}
public BalDto getClosingBalance() {
return closingBalance;
public String getAdditionalStatementInformation() {
return additionalStatementInformation;
}
public void setClosingBalance(BalDto closingBalance) {
this.closingBalance = closingBalance;
public void setAdditionalStatementInformation(String additionalStatementInformation) {
this.additionalStatementInformation = additionalStatementInformation;
}
}
package com.brilliance.swift.vo.common;
import java.math.BigDecimal;
import java.util.Date;
/**
* @author zh
* @create 2022-04-21 16:59
*/
public class BalDto {
private String cd;
private String CdtDbtInd;
private Date date;
private String ccy;
private BigDecimal amt = BigDecimal.ZERO;
public String getCd() {
return cd;
}
public void setCd(String cd) {
this.cd = cd;
}
public String getCdtDbtInd() {
return CdtDbtInd;
}
public void setCdtDbtInd(String cdtDbtInd) {
this.CdtDbtInd = cdtDbtInd;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public String getCcy() {
return ccy;
}
public void setCcy(String ccy) {
this.ccy = ccy;
}
public BigDecimal getAmt() {
return amt;
}
public void setAmt(BigDecimal amt) {
this.amt = amt;
}
}
package com.brilliance.swift.vo.common;
/**
* @author zh
* @create 2022-04-21 17:05
*/
public enum BalTypeEnum {
OB("Opening Balance"),
CB("Closing Balance"),
CAB("Closing Available Balance"),
FAB("Forward Available Balance");
BalTypeEnum(String s) {}
public String value() {
return name();
}
}
package com.brilliance.swift.vo.common;
public enum BalanceTypeCode {
CLAV("ClosingAvailable"),
CLBD("ClosingBooked"),
FWAV("ForwardAvailable"),
INFO("Information"),
ITAV("InterimAvailable"),
ITBD("InterimBooked"),
OPAV("OpeningAvailable"),
OPBD("OpeningBooked"),
PRCD("PreviouslyClosedBooked"),
XPCD("Expected");
BalanceTypeCode(String s) {}
public String value() {
return name();
}
}
package com.brilliance.swift.vo.common;
/**
* BNK = SECU CASH BKFE
* BRF = SECU CASH BROK
* CAR =
* CAS = SECU CORP CSLI
* CHK = PMNT ICHQ CCHQ
* CLR = PMNT RCHQ CASH
* CMP = SECU CASH CLAI
* CMS = CAMT ACCB SWEP
* CMT = CAMT ACCB TOPG
* CMZ = CAMT ACCB ZABA
* DIS = SECU CUST CAPG
* DIV = SECU CUST DVCA
* EXT = SECU NSET OWNE
* MAR = SECU COLL MARG
* MAT = SECU CORP REDM
* MGT = SECU CASH MNFE
* ODC = SECU CASH OVCH
* PRN = SECU NSET PRUD
* REC = SECU CORP TREC
* RED = ECU CASH GEN1
* RIG = SECU CORP RHTS
* SAL = SECU CORP ODLT
* SLE =
* STO = PMNT ICDT STDO
* STP = SECU CASH STAM
* SUB = SECU NSET SUBS
* SWP = SECU CASH SWAP
* TAX = SECU CASH WITH
* TCK = PMNT CNTR TCDP
* TCK = PMNT CNTR TCWD
* TRA = SECU SETT OWNI
* TRA = SECU NSET OWNI
* TRN = SECU CASH TRFE
* UWC = SECU CASH UNCO
* WAR = SECU CORP EXWA
* WAR = SECU CUST EXWA
*/
public class BankTransactionCodeStructure {
private String domianCode;
private String familyCode;
private String subFamilyCode;
private String code;
private String issuer;
public String getDomianCode() {
return domianCode;
}
public void setDomianCode(String domianCode) {
this.domianCode = domianCode;
}
public String getFamilyCode() {
return familyCode;
}
public void setFamilyCode(String familyCode) {
this.familyCode = familyCode;
}
public String getSubFamilyCode() {
return subFamilyCode;
}
public void setSubFamilyCode(String subFamilyCode) {
this.subFamilyCode = subFamilyCode;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getIssuer() {
return issuer;
}
public void setIssuer(String issuer) {
this.issuer = issuer;
}
}
package com.brilliance.swift.vo.common;
import java.util.Date;
public class CashBalance {
private BalanceTypeCode code;
private String proprietary;
private CdtDbtCode cdtDbtCode;
private Date date;
private CcyFormatAmount amt;
public BalanceTypeCode getCode() {
return code;
}
public void setCode(BalanceTypeCode code) {
this.code = code;
}
public String getProprietary() {
return proprietary;
}
public void setProprietary(String proprietary) {
this.proprietary = proprietary;
}
public CdtDbtCode getCdtDbtCode() {
return cdtDbtCode;
}
public void setCdtDbtCode(CdtDbtCode cdtDbtCode) {
this.cdtDbtCode = cdtDbtCode;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public CcyFormatAmount getAmt() {
return amt;
}
public void setAmt(CcyFormatAmount amt) {
this.amt = amt;
}
}
package com.brilliance.swift.vo.common;
public enum CdtDbtCode {
/**
* Operation is an increase.
*
*/
CRDT,
/**
* Operation is a decrease.
*
*/
DBIT;
public String value() {
return name();
}
public static CdtDbtCode fromValue(String v) {
return valueOf(v);
}
}
package com.brilliance.swift.vo.common;
import java.math.BigDecimal;
import java.util.Date;
/**
* @author zh
* @create 2022-04-21 14:08
*/
public class statementBreakdown {
public class ReportEntry {
private Date valueDate;
private Date BookDate;
private String cdtDbtInd;
private String rvslInd;
private String ccy;
private BigDecimal amt = BigDecimal.ZERO;
private String transactionType;
private String identificationCode;
private Date bookDate;
private CdtDbtCode cdtDbtCode;
private Boolean reversalIndicator;
private CcyFormatAmount amt;
private BankTransactionCodeStructure bankTransactionCodeStructure;
private String endToEndId;
private String acctSvcrRef;
private String addtlTxInf;
private String addtlNtryInf;
public Date getValueDate() {
......@@ -42,59 +24,43 @@ public class statementBreakdown {
}
public Date getBookDate() {
return BookDate;
return bookDate;
}
public void setBookDate(Date bookDate) {
BookDate = bookDate;
}
public String getCdtDbtInd() {
return cdtDbtInd;
}
public void setCdtDbtInd(String cdtDbtInd) {
this.cdtDbtInd = cdtDbtInd;
this.bookDate = bookDate;
}
public String getRvslInd() {
return rvslInd;
public CdtDbtCode getCdtDbtCode() {
return cdtDbtCode;
}
public void setRvslInd(String rvslInd) {
this.rvslInd = rvslInd;
public void setCdtDbtCode(CdtDbtCode cdtDbtCode) {
this.cdtDbtCode = cdtDbtCode;
}
public String getCcy() {
return ccy;
public Boolean getReversalIndicator() {
return reversalIndicator;
}
public void setCcy(String ccy) {
this.ccy = ccy;
public void setReversalIndicator(Boolean reversalIndicator) {
this.reversalIndicator = reversalIndicator;
}
public BigDecimal getAmt() {
public CcyFormatAmount getAmt() {
return amt;
}
public void setAmt(BigDecimal amt) {
public void setAmt(CcyFormatAmount amt) {
this.amt = amt;
}
public String getTransactionType() {
return transactionType;
public BankTransactionCodeStructure getBankTransactionCodeStructure() {
return bankTransactionCodeStructure;
}
public void setTransactionType(String transactionType) {
this.transactionType = transactionType;
}
public String getIdentificationCode() {
return identificationCode;
}
public void setIdentificationCode(String identificationCode) {
this.identificationCode = identificationCode;
public void setBankTransactionCodeStructure(BankTransactionCodeStructure bankTransactionCodeStructure) {
this.bankTransactionCodeStructure = bankTransactionCodeStructure;
}
public String getEndToEndId() {
......@@ -128,5 +94,4 @@ public class statementBreakdown {
public void setAddtlNtryInf(String addtlNtryInf) {
this.addtlNtryInf = addtlNtryInf;
}
}
#DOMIANCODE_FAMILYCODE_SUBFAMILYCODE = MT TRANSACTION CODE
SECU_CASH_BKFE = BNK
SECU_CASH_BROK = BRF
SECU_CORP_CSLI = CAS
PMNT_ICHQ_CCHQ = CHK
PMNT_RCHQ_CASH = CLR
SECU_CASH_CLAI = CMP
CAMT_ACCB_SWEP = CMS
CAMT_ACCB_TOPG = CMT
CAMT_ACCB_ZABA = CMZ
SECU_CUST_CAPG = DIS
SECU_CUST_DVCA = DIV
SECU_NSET_OWNE = EXT
SECU_COLL_MARG = MAR
SECU_CORP_REDM = MAT
SECU_CASH_MNFE = MGT
SECU_CASH_OVCH = ODC
SECU_NSET_PRUD = PRN
SECU_CORP_TREC = REC
SECU_CASH_GEN1 = RED
SECU_CORP_RHTS = RIG
SECU_CORP_ODLT = SAL
PMNT_ICDT_STDO = STO
SECU_CASH_STAM = STP
SECU_NSET_SUBS = SUB
SECU_CASH_SWAP = SWP
SECU_CASH_WITH = TAX
PMNT_CNTR_TCDP = TCK
PMNT_CNTR_TCWD = TCK
SECU_SETT_OWNI = TRA
SECU_NSET_OWNI = TRA
SECU_CASH_TRFE = TRN
SECU_CASH_UNCO = UWC
SECU_CORP_EXWA = WAR
SECU_CUST_EXWA = WAR
\ No newline at end of file
{
"cd": "FWAV",
"account": {
"account": "S15612345678012345"
"account": "15612345678012345"
},
"pgNb": "178",
"elctrncSeqNb": "200",
"openingBalance": {
"cd": "ITBD",
"CdtDbtInd": "DBIT",
"code": "ITBD",
"cdtDbtCode": "DBIT",
"date": "2022-03-30 00:00:00,000",
"ccy": "USD",
"amt": 120274.34
"amt": {
"ccy": "USD",
"amt": 120274.34
}
},
"statementLine": [
"reportEntries": [
{
"valueDate": "2022-03-30 00:00:00,000",
"BookDate": "2022-03-30 00:00:00,000",
"cdtDbtInd": "DBIT",
"rvslInd": "false",
"ccy": "USD",
"amt": 393.17,
"transactionType": "F",
"identificationCode": "CHK",
"bookDate": "2022-03-30 00:00:00,000",
"cdtDbtCode": "CRDT",
"amt": {
"ccy": "USD",
"amt": 393.17
},
"bankTransactionCodeStructure": {
"domianCode": "PMNT",
"familyCode": "ICHQ",
"subFamilyCode": "CCHQ"
},
"endToEndId": "S100000189-735",
"acctSvcrRef": "1309170100000390154395",
"addtlTxInf": "PLACI LOVECNAMENSKIH WUHAN",
"addtlNtryInf": "CHINESE BEIJING"
"addtlNtryInf": "CHINESE BEIJINGCHINESE SHANGHAICHINESE WUHANCHINESE GUANGZHOUCHINESE HANGZHOUCHINESE SHENZHEN"
},
{
"valueDate": "2022-03-30 00:00:00,000",
"BookDate": "2022-03-30 00:00:00,000",
"cdtDbtInd": "DBIT",
"rvslInd": "false",
"ccy": "USD",
"amt": 445,
"transactionType": "F",
"identificationCode": "CHK",
"bookDate": "2022-03-30 00:00:00,000",
"cdtDbtCode": "DBIT",
"reversalIndicator": true,
"amt": {
"ccy": "USD",
"amt": 445
},
"bankTransactionCodeStructure": {
"domianCode": "PMNT",
"familyCode": "ICHQ",
"subFamilyCode": "CCHQ"
},
"endToEndId": "S100000189-735",
"acctSvcrRef": "1309170100000390154395",
"addtlTxInf": "PLACI LOVECNAMENSKIH STORITEV"
}
],
"closingBalance": {
"cd": "ITBD",
"CdtDbtInd": "DBIT",
"code": "ITBD",
"cdtDbtCode": "DBIT",
"date": "2022-03-30 00:00:00,000",
"ccy": "USD",
"amt": 123456.29
"amt": {
"ccy": "USD",
"amt": 123456.29
}
},
"closingAvailableBalance": {
"cd": "CLAV",
"CdtDbtInd": "DBIT",
"code": "CLAV",
"cdtDbtCode": "DBIT",
"date": "2022-03-30 00:00:00,000",
"ccy": "USD",
"amt": 119609.29
"amt": {
"ccy": "USD",
"amt": 119609.29
}
},
"forwardAvailableBalance": [
"forwardAvailableBalances": [
{
"cd": "FWAV",
"CdtDbtInd": "DBIT",
"code": "FWAV",
"cdtDbtCode": "DBIT",
"date": "2022-03-30 00:00:00,000",
"ccy": "USD",
"amt": 120274.34
"amt": {
"ccy": "USD",
"amt": 120274.34
}
}
],
"addtlStmtInf": [
"HELLO WORLD"
],
"additionalStatementInformation": "HELLO WORLD",
"messageType": "camt.053.001",
"senderBic": "SHWHQWER123",
"receiverBic": "BJWHS12X",
"createDate": "2022-04-28 10:23:46,048",
"createDate": "2022-05-07 10:54:53,581",
"messagePriority": "NORM",
"messageId": "00010013800002001234",
"uetr": "8a562c67-ca16-48ba-b074-65581be6f001"
}
}
\ No newline at end of file
......@@ -2,14 +2,19 @@
:20:00010013800002001234
:25:S15612345678012345
:28:178/200
:60M:D220330USD120274.34
:61:220330220330DUSD393.17FCHKS100000189-735//1309170100000390154395
:60M:D220330USD120274,34
:61:220330220330CUSD393,17FCHKS100000189-735//1309170100000390154395
PLACI LOVECNAMENSKIH WUHAN
:86:CHINESE BEIJING
:61:220330220330DUSD445FCHKS100000189-735//1309170100000390154395
CHINESE SHANGHAI
CHINESE WUHAN
CHINESE GUANGZHOU
CHINESE HANGZHOU
CHINESE SHENZHEN
:61:220330220330RDUSD445,FCHKS100000189-735//1309170100000390154395
PLACI LOVECNAMENSKIH STORITEV
:62M:D220330USD123456.29
:64:D220330USD119609.29
:65:D220330USD120274.34
:62M:D220330USD123456,29
:64:D220330USD119609,29
:65:D220330USD120274,34
:86:HELLO WORLD
-}
\ No newline at end of file
......@@ -2,10 +2,10 @@
:20:00010013800002001234
:25:S15612345678012345
:28:178/200
:60M:D220330USD120274.34
:61:220330220330DUSD393.17FCHKS100000189-735//1309170100000390154395
:60M:D220330USD120274,34
:61:220330220330DUSD393,17FCHKS100000189-735//1309170100000390154395
PLACI LOVECNAMENSKIH WUHAN
:61:220330220330DUSD445FCHKS100000189-735//1309170100000390154395
PLACI LOVECNAMENSKIH STORITEV
:62M:D220330USD123456.29
:62M:D220330USD123456,29
-}
\ No newline at end of file
......@@ -45,7 +45,7 @@
<Othr>
<Id>789465123132165</Id>
<SchmeNm>
<Cd>741852</Cd>
<Cd>BBAN</Cd>
</SchmeNm>
</Othr>
</Id>
......@@ -83,7 +83,7 @@
<Othr>
<Id>789465123132165</Id>
<SchmeNm>
<Cd>741852</Cd>
<Cd>BBAN</Cd>
</SchmeNm>
</Othr>
</Id>
......@@ -94,7 +94,7 @@
<Othr>
<Id>789465123132165</Id>
<SchmeNm>
<Cd>741852</Cd>
<Cd>BBAN</Cd>
</SchmeNm>
</Othr>
</Id>
......@@ -172,7 +172,7 @@
<Othr>
<Id>789465123132165</Id>
<SchmeNm>
<Cd>741852</Cd>
<Cd>BBAN</Cd>
</SchmeNm>
</Othr>
</Id>
......@@ -196,7 +196,7 @@
<Othr>
<Id>789465123132165</Id>
<SchmeNm>
<Cd>741852</Cd>
<Cd>BBAN</Cd>
</SchmeNm>
</Othr>
</Id>
......@@ -219,7 +219,7 @@
<Othr>
<Id>789465123132165</Id>
<SchmeNm>
<Cd>741852</Cd>
<Cd>BBAN</Cd>
</SchmeNm>
</Othr>
</Id>
......
......@@ -45,7 +45,7 @@
<Othr>
<Id>789465123132165</Id>
<SchmeNm>
<Cd>741852</Cd>
<Cd>BBAN</Cd>
</SchmeNm>
</Othr>
</Id>
......@@ -95,7 +95,7 @@
<Othr>
<Id>789465123132165</Id>
<SchmeNm>
<Cd>741852</Cd>
<Cd>BBAN</Cd>
</SchmeNm>
</Othr>
</Id>
......@@ -115,7 +115,7 @@
<Othr>
<Id>789465123132165</Id>
<SchmeNm>
<Cd>741852</Cd>
<Cd>BBAN</Cd>
</SchmeNm>
</Othr>
</Id>
......@@ -146,7 +146,7 @@
<Othr>
<Id>789465123132165</Id>
<SchmeNm>
<Cd>741852</Cd>
<Cd>BBAN</Cd>
</SchmeNm>
</Othr>
</Id>
......@@ -157,7 +157,7 @@
<Othr>
<Id>789465123132165</Id>
<SchmeNm>
<Cd>741852</Cd>
<Cd>BBAN</Cd>
</SchmeNm>
</Othr>
</Id>
......@@ -202,7 +202,7 @@
<Othr>
<Id>789465123132165</Id>
<SchmeNm>
<Cd>741852</Cd>
<Cd>BBAN</Cd>
</SchmeNm>
</Othr>
</Id>
......@@ -212,11 +212,11 @@
</RmtInf>
<InstdAmt Ccy="USD">393.17</InstdAmt>
<InstrForCdtrAgt>
<Cd>GHJK</Cd>
<Cd>PHOB</Cd>
<InstrInf>789556</InstrInf>
</InstrForCdtrAgt>
<InstrForNxtAgt>
<Cd>QWDF</Cd>
<Cd>PHOA</Cd>
<InstrInf>823456</InstrInf>
</InstrForNxtAgt>
</UndrlygCstmrCdtTrf>
......@@ -294,7 +294,7 @@
<Othr>
<Id>789465123132165</Id>
<SchmeNm>
<Cd>741852</Cd>
<Cd>BBAN</Cd>
</SchmeNm>
</Othr>
</Id>
......@@ -318,7 +318,7 @@
<Othr>
<Id>789465123132165</Id>
<SchmeNm>
<Cd>741852</Cd>
<Cd>BBAN</Cd>
</SchmeNm>
</Othr>
</Id>
......@@ -341,7 +341,7 @@
<Othr>
<Id>789465123132165</Id>
<SchmeNm>
<Cd>741852</Cd>
<Cd>BBAN</Cd>
</SchmeNm>
</Othr>
</Id>
......
package com.brilliance.mt2mx.camt053001;
import com.prowidesoftware.swift.model.Tag;
import com.prowidesoftware.swift.model.field.Field61;
import com.prowidesoftware.swift.model.field.Field86;
import com.prowidesoftware.swift.model.mt.AbstractMT;
import java.io.File;
import java.util.List;
public class Test940Camt053001 {
public static void main(String[] args) throws Exception {
......@@ -9,5 +17,23 @@ public class Test940Camt053001 {
//SwiftDto swiftDto = new Mt2SwiftDtoCreateManager().mt2SwiftDto(file, "d:/test/940camt0530.txt", null);
//System.out.println(swiftDto.toString());
File file = new File(System.getProperty("user.dir")+"\\swiftCore\\src\\main\\resources\\swiftTxt\\MT940.txt");
AbstractMT abstractMT = AbstractMT.parse(file);
List<Tag> tagsList = abstractMT.getSwiftMessage().getBlock4().getTags();
for (int i=0; i< tagsList.size(); i++) {
Tag tag = tagsList.get(i);
if ("61".equals(tag.getName())) {
Field61 field61 = new Field61(tag.getValue());
System.out.println(field61.getDCMark());
System.out.println(field61.getFundsCode());
System.out.println(field61.getReferenceForTheAccountOwner());
System.out.println(field61.getReferenceOfTheAccountServicingInstitution());
System.out.println(field61.getSupplementaryDetails());
if ("86".equals(tagsList.get(i+1).getName())) {
Field86 field86 = new Field86(tagsList.get(i+1).getValue());
System.out.println(field86.getValue().replace("\r\n", ""));
}
}
}
}
}
package com.brilliance.mt2mx.pacs009001;
import com.brilliance.swift.SwiftTransfer;
import java.io.File;
public class Test {
private static void test202() {
String mx = SwiftTransfer.mt2Mx(
new File(System.getProperty("user.dir")+"\\swiftCore\\src\\main\\resources\\swiftTxt\\Mt202.txt"),
"d:/test/pacs00900109.xml", null);
System.out.println(mx);
}
private static void test202Cov() {
String mx = SwiftTransfer.mt2Mx(
new File(System.getProperty("user.dir")+"\\swiftCore\\src\\main\\resources\\swiftTxt\\Mt202_COV.txt"),
"d:/test/pacs00900109.xml", null);
System.out.println(mx);
}
public static void main(String[] args) throws Exception {
//test202();
test202Cov();
}
}
......@@ -9,7 +9,7 @@ public class Test940Camt053001 {
public static void main(String[] args) {
File file = new File(System.getProperty("user.dir")+"\\swiftCore\\src\\main\\resources\\swiftTxt\\MT940.txt");
SwiftDto swiftDto = new SwiftTransfer().mt2SwiftDto(file, "D:/MtToSwift/BankToCustomerStatement.json", null);
SwiftDto swiftDto = new SwiftTransfer().mt2SwiftDto(file, "D:/test/BankToCustomerStatement.json", null);
System.out.println(swiftDto.toString());
}
}
......@@ -9,7 +9,7 @@ public class Test950Camt053001 {
public static void main(String[] args) {
File file = new File(System.getProperty("user.dir")+"\\swiftCore\\src\\main\\resources\\swiftTxt\\MT950.txt");
SwiftDto swiftDto = new SwiftTransfer().mt2SwiftDto(file, "D:/MtToSwift/BankToStatement.json", null);
SwiftDto swiftDto = new SwiftTransfer().mt2SwiftDto(file, "D:/test/BankToStatement.json", null);
System.out.println(swiftDto.toString());
}
}
package com.brilliance.mx2mt.mt202;
import com.brilliance.swift.mx2mt.Mx2MtCreateManager;
import com.brilliance.swift.SwiftTransfer;
import java.io.File;
public class TestMx2MtFor202 {
public static void main(String[] args) throws Exception {
Mx2MtCreateManager mx2MtCreateManager = new Mx2MtCreateManager();
String mt202 = mx2MtCreateManager.mx2mt(
String mt202 = SwiftTransfer.mx2Mt(
new File(System.getProperty("user.dir")+"\\swiftCore\\src\\main\\resources\\swiftXml\\MxPacs00900102.xml"),
"d:/test/MT202.txt");
"d:/test/MT202.txt", null);
System.out.println(mt202);
}
}
package com.brilliance.mx2mt.mt202;
import com.brilliance.swift.mx2mt.Mx2MtCreateManager;
import com.brilliance.swift.SwiftTransfer;
import java.io.File;
public class TestMx2MtFor202COV {
public static void main(String[] args) throws Exception {
Mx2MtCreateManager mx2MtCreateManager = new Mx2MtCreateManager();
String mt202 = mx2MtCreateManager.mx2mt(
String mt202Cov = SwiftTransfer.mx2Mt(
new File(System.getProperty("user.dir")+"\\swiftCore\\src\\main\\resources\\swiftXml\\MxPacs00900102_COV.xml"),
"d:/test/MT202_COV.txt");
System.out.println(mt202);
"d:/test/MT202Cov.txt", null);
System.out.println(mt202Cov);
}
}
package com.brilliance.mx2swiftdto.fininstcdttsf;
import com.brilliance.swift.SwiftTransfer;
import com.brilliance.swift.vo.SwiftDto;
import java.io.File;
public class Test {
private static void test202() {
SwiftDto swiftDto = SwiftTransfer.mx2SwiftDto(new File(System.getProperty("user.dir")+"\\swiftCore\\src\\main\\resources\\swiftXml\\MxPacs00900102.xml"), "d:/test/FinancialInstitutionCreditTransfer.json", null);
System.out.println(swiftDto);
}
private static void test202Cov() {
SwiftDto swiftDto = SwiftTransfer.mx2SwiftDto(new File(System.getProperty("user.dir")+"\\swiftCore\\src\\main\\resources\\swiftXml\\MxPacs00900102_COV.xml"), "d:/test/FinancialInstitutionCreditTransfer.json", null);
System.out.println(swiftDto);
}
public static void main(String[] args) {
//test202();
test202Cov();
}
}
......@@ -11,7 +11,7 @@ import java.io.File;
public class Text940camt053001 {
public static void main(String[] args) {
File file = new File(System.getProperty("user.dir")+"\\swiftCore\\src\\main\\resources\\swiftJson\\BankToCustomerStatement.json");
String mtStr = SwiftTransfer.swiftDto2Mx(file,"D:/SwiftToMx/MxCamt05300108_940.xml");
String mtStr = SwiftTransfer.swiftDto2Mx(file,"D:/test/MxCamt05300108_940.xml");
System.out.println(mtStr);
}
}
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