This commit is contained in:
dlandy
2026-04-15 16:04:29 +08:00
parent 188b497e15
commit 9f66afe148
17 changed files with 1552 additions and 237 deletions

View File

@@ -7,7 +7,7 @@ MetaPlugin 是一个 IntelliJ IDEA 插件,用于把 XSD 结构转换为可配
当前项目中的插件信息:
- 插件名:`MetaPlugin`
- 插件 ID`com.dmiki.metaplugin`
- 当前版本:`1.0.0`
- 当前版本:`1.1.0`
- IDE 兼容下限:`sinceBuild = 193`IntelliJ IDEA 2019.3+
## 2. 核心能力
@@ -46,7 +46,7 @@ MetaPlugin 是一个 IntelliJ IDEA 插件,用于把 XSD 结构转换为可配
打包产物位于:
- `build/distributions/MetaPlugin-1.0.0.zip`
- `build/distributions/MetaPlugin-1.1.0.zip`
在 IDEA 中通过 `Settings -> Plugins -> Install Plugin from Disk...` 选择该 ZIP 安装。
@@ -93,7 +93,7 @@ MetaPlugin 是一个 IntelliJ IDEA 插件,用于把 XSD 结构转换为可配
- 包名:默认 `com.example.message`
- 注意这里填写的是“包名”,最终 `resultMap.type` 会自动拼接为:`包名 + 报文类型大写格式`
- 例如 `hvps.101.001.01` 会转为 `HVPS_101_001_01`
- 输出目录:支持绝对路径或相对项目根目录路径。
- 输出目录:支持绝对路径或相对模块根目录路径。
- 自定义属性:全局默认值,默认 `sign`
- 预处理属性:全局默认值,默认空。
@@ -147,11 +147,9 @@ MetaPlugin 是一个 IntelliJ IDEA 插件,用于把 XSD 结构转换为可配
### 8.3 输出目录与文件名
- 默认输出目录`src/main/resources` 下第一个不存在的目录
- `msgmapper`
- `msgmapper1`
- `msgmapper2`
- ... 依次类推
- 默认输出目录分两种情况
- 如果 XSD 位于某个 `resources` 目录下,则输出到该 `resources` 目录下第一个不存在的 `msgmapperN`
- 否则输出到 `XSD 父目录` 的同级第一个不存在的 `msgmapperN`
- 默认输出文件名:`报文类型.xml`
- 右键“生成选中节点XOM文件”时默认文件名`报文类型_节点名.xml`

218
docs/hvps.101.001.01.xsd Normal file
View File

@@ -0,0 +1,218 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="urn:cnaps:std:hvps:2010:tech:xsd:hvps.111.001.01"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:cnaps:std:hvps:2010:tech:xsd:hvps.111.001.01"
elementFormDefault="qualified">
<!-- 根节点 Document -->
<xs:element name="Document" type="Document"/>
<!-- 1. 文档结构 -->
<xs:complexType name="Document">
<xs:sequence>
<xs:element name="FIToFICstmrCdtTrf" type="FIToFICstmrCdtTrf"/>
</xs:sequence>
</xs:complexType>
<!-- 2. 金融机构间客户汇兑主体 (大额汇兑) -->
<xs:complexType name="FIToFICstmrCdtTrf">
<xs:sequence>
<!-- 业务公共报头 -->
<xs:element name="GrpHdr" type="GroupHeader"/>
<!-- 资金交易明细 (大额报文通常只有一笔明细) -->
<xs:element name="CdtTrfTxInf" type="CreditTransferTransactionInformation" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<!-- 3. 业务头 (Group Header) -->
<xs:complexType name="GroupHeader">
<xs:sequence>
<xs:element name="MsgId" type="Max35Text"/> <!-- 报文标识号 -->
<xs:element name="CreDtTm" type="ISODateTime"/> <!-- 报文创建时间 -->
<xs:element name="InstgPty" type="InstructingParty"/> <!-- 发起参与机构 -->
<xs:element name="InstdPty" type="InstructedParty"/> <!-- 接收参与机构 -->
<xs:element name="SysCd" type="SystemCode"/> <!-- 系统代码 (如 HVPS) -->
<xs:element name="Rmk" type="Max256Text" minOccurs="0"/> <!-- 备注 -->
</xs:sequence>
</xs:complexType>
<!-- 4. 汇兑交易信息 (Transaction Information) -->
<xs:complexType name="CreditTransferTransactionInformation">
<xs:sequence>
<xs:element name="PmtId" type="PaymentIdentification"/> <!-- 支付标识 -->
<xs:element name="PmtTpInf" type="PaymentTypeInformation" minOccurs="0"/> <!-- 支付类型信息 (业务种类) -->
<xs:element name="IntrBkSttlmAmt" type="ActiveCurrencyAndAmount"/> <!-- 银行间结算金额 -->
<xs:element name="Dbtr" type="PartyIdentification"/> <!-- 付款人 -->
<xs:element name="DbtrAcct" type="CashAccount" minOccurs="0"/> <!-- 付款人账户 -->
<xs:element name="DbtrAgt" type="BranchAndFinancialInstitutionIdentification"/> <!-- 付款行 -->
<xs:element name="CdtrAgt" type="BranchAndFinancialInstitutionIdentification"/> <!-- 收款行 -->
<xs:element name="Cdtr" type="PartyIdentification"/> <!-- 收款人 -->
<xs:element name="CdtrAcct" type="CashAccount"/> <!-- 收款人账户 -->
<xs:element name="Purp" type="Purpose" minOccurs="0"/> <!-- 用途/附言 -->
</xs:sequence>
</xs:complexType>
<!-- ==== 以下为子组件装配定义 ==== -->
<xs:complexType name="PaymentIdentification">
<xs:sequence>
<xs:element name="EndToEndId" type="Max35Text"/> <!-- 端到端标识号 -->
<xs:element name="TxId" type="Max35Text"/> <!-- 交易标识号 -->
</xs:sequence>
</xs:complexType>
<xs:complexType name="InstructingParty">
<xs:sequence>
<xs:element name="InstgDrctPty" type="Max14Text"/> <!-- 发起直接参与机构 (14位行号) -->
<xs:element name="InstgPty" type="Max14Text" minOccurs="0"/> <!-- 发起间接参与机构 -->
</xs:sequence>
</xs:complexType>
<xs:complexType name="InstructedParty">
<xs:sequence>
<xs:element name="InstdDrctPty" type="Max14Text"/> <!-- 接收直接参与机构 (14位行号) -->
<xs:element name="InstdPty" type="Max14Text" minOccurs="0"/> <!-- 接收间接参与机构 -->
</xs:sequence>
</xs:complexType>
<xs:complexType name="PartyIdentification">
<xs:sequence>
<xs:element name="Nm" type="Max60Text"/> <!-- 户名 -->
<xs:element name="PstlAdr" type="PostalAddress" minOccurs="0"/> <!-- 地址 -->
</xs:sequence>
</xs:complexType>
<xs:complexType name="CashAccount">
<xs:sequence>
<xs:element name="Id" type="AccountIdentification"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="AccountIdentification">
<xs:sequence>
<xs:element name="Othr" type="GenericAccountIdentification"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="GenericAccountIdentification">
<xs:sequence>
<xs:element name="Id" type="Max32Text"/> <!-- 账号 (一般最长32位) -->
</xs:sequence>
</xs:complexType>
<xs:complexType name="BranchAndFinancialInstitutionIdentification">
<xs:sequence>
<xs:element name="FinInstnId" type="FinancialInstitutionIdentification"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="FinancialInstitutionIdentification">
<xs:sequence>
<xs:element name="ClrSysMmbId" type="ClearingSystemMemberIdentification"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ClearingSystemMemberIdentification">
<xs:sequence>
<xs:element name="MmbId" type="Max14Text"/> <!-- CNAPS 14位支付行号 -->
</xs:sequence>
</xs:complexType>
<xs:complexType name="PaymentTypeInformation">
<xs:sequence>
<xs:element name="CtgyPurp" type="CategoryPurpose"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="CategoryPurpose">
<xs:sequence>
<xs:element name="Prtry" type="Max5Text"/> <!-- 二代支付中业务种类为最多5位数字如大额A100 -->
</xs:sequence>
</xs:complexType>
<xs:complexType name="Purpose">
<xs:sequence>
<xs:element name="Prtry" type="Max256Text"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="PostalAddress">
<xs:sequence>
<xs:element name="AdrLine" type="Max256Text" minOccurs="0" maxOccurs="2"/>
</xs:sequence>
</xs:complexType>
<!-- ==== 以下为基本数据类型 (Simple Types) ==== -->
<xs:simpleType name="Max35Text">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="35"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Max32Text">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="32"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Max14Text">
<xs:restriction base="xs:string">
<xs:length value="14"/> <!-- 人行行号通常定长14位 -->
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Max5Text">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="5"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Max60Text">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="60"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Max256Text">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="256"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="SystemCode">
<xs:restriction base="xs:string">
<xs:enumeration value="HVPS"/> <!-- 单笔大额 -->
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ISODateTime">
<xs:restriction base="xs:dateTime"/>
</xs:simpleType>
<!-- 人民币金额类型定义 -->
<xs:complexType name="ActiveCurrencyAndAmount">
<xs:simpleContent>
<xs:extension base="ActiveCurrencyAndAmount_SimpleType">
<xs:attribute name="Ccy" type="ActiveCurrencyCode" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:simpleType name="ActiveCurrencyAndAmount_SimpleType">
<xs:restriction base="xs:decimal">
<xs:fractionDigits value="2"/>
<xs:totalDigits value="18"/>
<xs:minInclusive value="0.01"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ActiveCurrencyCode">
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z]{3,3}"/> <!-- 绝大多数情况为 CNY -->
</xs:restriction>
</xs:simpleType>
</xs:schema>