qgraphflow 0.0.6 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +2 -2
  4. package/.cursor-plugin/plugin.json +1 -1
  5. package/.qoder-plugin/plugin.json +1 -1
  6. package/README.md +119 -70
  7. package/docs/clients.de.md +15 -24
  8. package/docs/clients.es.md +15 -24
  9. package/docs/clients.ja.md +15 -24
  10. package/docs/clients.md +15 -24
  11. package/docs/clients.pt.md +15 -24
  12. package/docs/clients.ru.md +15 -24
  13. package/docs/clients.zh-CN.md +15 -24
  14. package/docs/readme/README.de.md +120 -71
  15. package/docs/readme/README.es.md +120 -71
  16. package/docs/readme/README.ja.md +120 -71
  17. package/docs/readme/README.pt.md +120 -71
  18. package/docs/readme/README.ru.md +120 -71
  19. package/docs/readme/README.zh-CN.md +106 -59
  20. package/examples/jeepay/README.md +23 -0
  21. package/examples/jeepay/capabilities.graph.json +270 -0
  22. package/examples/jeepay/class.graph.json +237 -0
  23. package/examples/jeepay/collection.graph.json +3057 -0
  24. package/examples/jeepay/dataflow.graph.json +212 -0
  25. package/examples/jeepay/deployment.graph.json +222 -0
  26. package/examples/jeepay/engineering.graph.json +277 -0
  27. package/examples/jeepay/er.graph.json +482 -0
  28. package/examples/jeepay/flowchart.graph.json +312 -0
  29. package/examples/jeepay/relations.graph.json +289 -0
  30. package/examples/jeepay/sequence.graph.json +355 -0
  31. package/examples/jeepay/source.json +95 -0
  32. package/examples/jeepay/state.graph.json +175 -0
  33. package/examples/jeepay/usecase.graph.json +222 -0
  34. package/package.json +14 -3
  35. package/skills/q-flow/SKILL.md +28 -20
  36. package/skills/q-flow/agents/openai.yaml +1 -1
  37. package/skills/q-flow/assets/viewer/package.json +1 -1
  38. package/skills/q-flow/assets/viewer/src/architecture-overview-theme.js +22 -0
  39. package/skills/q-flow/assets/viewer/src/architecture-overview.js +340 -0
  40. package/skills/q-flow/assets/viewer/src/diagrams/architecture.js +8 -5
  41. package/skills/q-flow/assets/viewer/src/diagrams/card.js +35 -17
  42. package/skills/q-flow/assets/viewer/src/diagrams/deployment.js +7 -5
  43. package/skills/q-flow/assets/viewer/src/diagrams/drawing.js +5 -2
  44. package/skills/q-flow/assets/viewer/src/diagrams/registry.js +10 -0
  45. package/skills/q-flow/assets/viewer/src/diagrams/sequence.js +13 -7
  46. package/skills/q-flow/assets/viewer/src/edge-routing.js +43 -22
  47. package/skills/q-flow/assets/viewer/src/export-svg.js +27 -5
  48. package/skills/q-flow/assets/viewer/src/graph-validation.js +72 -15
  49. package/skills/q-flow/assets/viewer/src/i18n-messages.json +184 -8
  50. package/skills/q-flow/assets/viewer/src/layout-compaction.js +123 -0
  51. package/skills/q-flow/assets/viewer/src/layout-measure.js +14 -8
  52. package/skills/q-flow/assets/viewer/src/layout-policy.js +6 -0
  53. package/skills/q-flow/assets/viewer/src/layout-quality.js +61 -15
  54. package/skills/q-flow/assets/viewer/src/layout-refinement.js +271 -0
  55. package/skills/q-flow/assets/viewer/src/layout-semantics.js +8 -0
  56. package/skills/q-flow/assets/viewer/src/layout-spacing.js +23 -4
  57. package/skills/q-flow/assets/viewer/src/layout-templates.js +298 -0
  58. package/skills/q-flow/assets/viewer/src/node-svg.js +1 -1
  59. package/skills/q-flow/assets/viewer/src/orthogonal-routing.js +475 -0
  60. package/skills/q-flow/assets/viewer/src/presentation-graph.js +31 -0
  61. package/skills/q-flow/assets/viewer/src/route-clearance.js +144 -0
  62. package/skills/q-flow/assets/viewer/src/sequence-executions.js +22 -0
  63. package/skills/q-flow/assets/viewer/src/sequence-fragments.js +20 -2
  64. package/skills/q-flow/assets/viewer/src/session-graph.js +46 -3
  65. package/skills/q-flow/assets/viewer/src/text-layout.js +33 -6
  66. package/skills/q-flow/assets/viewer/src/view-identity.js +26 -0
  67. package/skills/q-flow/assets/viewer/src/visual-style.js +13 -5
  68. package/skills/q-flow/assets/viewer-dist/index.html +30 -28
  69. package/skills/q-flow/references/evidence-sources.md +7 -5
  70. package/skills/q-flow/references/graph-common.md +34 -34
  71. package/skills/q-flow/references/graph-schema.md +28 -7
  72. package/skills/q-flow/references/guided-intake.md +51 -71
  73. package/skills/q-flow/references/layout-routing.md +47 -0
  74. package/skills/q-flow/references/types/architecture.md +42 -22
  75. package/skills/q-flow/references/types/class.md +9 -2
  76. package/skills/q-flow/references/types/dataflow.md +11 -4
  77. package/skills/q-flow/references/types/deployment.md +11 -3
  78. package/skills/q-flow/references/types/er.md +8 -1
  79. package/skills/q-flow/references/types/flowchart.md +12 -5
  80. package/skills/q-flow/references/types/sequence.md +20 -16
  81. package/skills/q-flow/references/types/state.md +10 -3
  82. package/skills/q-flow/references/types/usecase.md +6 -0
  83. package/skills/q-flow/references/viewer-development.md +37 -24
  84. package/skills/q-flow/references/visual-contract.md +12 -6
  85. package/skills/q-flow/scripts/compile-layout.mjs +85 -102
  86. package/skills/q-flow/scripts/compile-sequence.mjs +4 -21
  87. package/skills/q-flow/scripts/generate-viewer.mjs +18 -9
  88. package/skills/q-flow/scripts/validate-graph.mjs +38 -21
  89. package/examples/order-flow.graph.json +0 -94
@@ -0,0 +1,23 @@
1
+ # Jeepay source corpus
2
+
3
+ The only business dataset used by CI, Pages and package smoke tests is the public [Jeepay repository](https://github.com/jeequan/jeepay). `source.json` records the exact revision and SHA-256 of every referenced source file. No Java source, credentials or developer machine paths are distributed here.
4
+
5
+ The collection contains eleven views: platform capabilities, engineering layers, component relationships, unified-order flowchart and sequence, payment ER, Compose deployment, payment classes, order states, API use cases and unified-order data flow. All inputs contain facts and source anchors; generated coordinates and routing snapshots are deliberately excluded.
6
+
7
+ CI checks out the revision declared in `source.json`, verifies every node source and relationship site, and computes fresh layouts. Assertions cover preserved facts, valid notation and geometry, export, saving, cancellation and selected-view isolation. They do not lock a particular diagram's dimensions, node count, crossing count, candidate count or solver strategy.
8
+
9
+ For local checks, select the source explicitly:
10
+
11
+ ```bash
12
+ export JEEPAY_REPO_ROOT="<local Jeepay repository root>"
13
+ node --test tests/*.test.mjs skills/q-flow/scripts/*.test.mjs
14
+ node skills/q-flow/scripts/generate-viewer.mjs examples/jeepay/collection.graph.json output/jeepay --repo-root "$JEEPAY_REPO_ROOT"
15
+ ```
16
+
17
+ To refresh the corpus after reviewing updated Jeepay source and updating its eleven diagrams under `docs/qgraphflow/`, run:
18
+
19
+ ```bash
20
+ node scripts/refresh-jeepay-fixtures.mjs "$JEEPAY_REPO_ROOT"
21
+ ```
22
+
23
+ Review the changed facts, evidence and `source.json` together. No saved geometry baseline needs replacing. Schema tests may mutate a copy of a Jeepay graph to exercise invalid input; those mutations are never presented as repository facts. Pure geometry, text, notation and localization unit parameters are separate from the business corpus.
@@ -0,0 +1,270 @@
1
+ {
2
+ "meta": {
3
+ "title": "Jeepay 平台能力架构",
4
+ "subtitle": "Jeepay 源码与配置证据",
5
+ "sourceRef": "jeequan/jeepay@e1ac9086d679826bab593f20431b7ecd292eb685",
6
+ "scope": "项目核心支付能力",
7
+ "diagramType": "architecture",
8
+ "locale": "zh-CN",
9
+ "notes": [
10
+ "能力卡片以源码中的控制器和服务为准;退款、转账和分账是独立入口。",
11
+ "本图呈现能力与关键支撑,不代表所有能力均在同一请求链路中。"
12
+ ],
13
+ "architectureView": "capabilities",
14
+ "viewId": "jeepay-capabilities"
15
+ },
16
+ "nodes": [
17
+ {
18
+ "id": "unified",
19
+ "label": "UnifiedOrderController",
20
+ "kind": "business",
21
+ "module": "payment",
22
+ "source": {
23
+ "file": "jeepay-payment/src/main/java/com/jeequan/jeepay/pay/ctrl/payorder/UnifiedOrderController.java",
24
+ "lineStart": 44,
25
+ "lineEnd": 44,
26
+ "kind": "source"
27
+ },
28
+ "subtitle": "统一下单入口",
29
+ "tags": [
30
+ "core"
31
+ ],
32
+ "overviewText": [
33
+ "校验商户签名后选择支付方式,生成支付订单。"
34
+ ]
35
+ },
36
+ {
37
+ "id": "refund",
38
+ "label": "RefundOrderController",
39
+ "kind": "business",
40
+ "module": "refund",
41
+ "source": {
42
+ "file": "jeepay-payment/src/main/java/com/jeequan/jeepay/pay/ctrl/refund/RefundOrderController.java",
43
+ "lineStart": 57,
44
+ "lineEnd": 57,
45
+ "kind": "source"
46
+ },
47
+ "subtitle": "退款订单入口",
48
+ "overviewText": [
49
+ "面向已支付订单发起渠道退款。"
50
+ ]
51
+ },
52
+ {
53
+ "id": "transfer",
54
+ "label": "TransferOrderController",
55
+ "kind": "business",
56
+ "module": "transfer",
57
+ "source": {
58
+ "file": "jeepay-payment/src/main/java/com/jeequan/jeepay/pay/ctrl/transfer/TransferOrderController.java",
59
+ "lineStart": 55,
60
+ "lineEnd": 55,
61
+ "kind": "source"
62
+ },
63
+ "subtitle": "转账订单入口",
64
+ "overviewText": [
65
+ "向渠道发起转账。"
66
+ ]
67
+ },
68
+ {
69
+ "id": "division",
70
+ "label": "PayOrderDivisionExecController",
71
+ "kind": "business",
72
+ "module": "division",
73
+ "source": {
74
+ "file": "jeepay-payment/src/main/java/com/jeequan/jeepay/pay/ctrl/division/PayOrderDivisionExecController.java",
75
+ "lineStart": 57,
76
+ "lineEnd": 57,
77
+ "kind": "source"
78
+ },
79
+ "subtitle": "分账执行入口",
80
+ "overviewText": [
81
+ "按商户请求执行支付订单分账。"
82
+ ]
83
+ },
84
+ {
85
+ "id": "process",
86
+ "label": "PayOrderProcessService",
87
+ "kind": "component",
88
+ "module": "payment",
89
+ "source": {
90
+ "file": "jeepay-payment/src/main/java/com/jeequan/jeepay/pay/service/PayOrderProcessService.java",
91
+ "lineStart": 40,
92
+ "lineEnd": 40,
93
+ "kind": "source"
94
+ },
95
+ "subtitle": "支付成功后的订单处理",
96
+ "overviewText": [
97
+ "确认支付成功后处理订单业务。"
98
+ ]
99
+ },
100
+ {
101
+ "id": "notify",
102
+ "label": "PayMchNotifyService",
103
+ "kind": "component",
104
+ "module": "notification",
105
+ "source": {
106
+ "file": "jeepay-payment/src/main/java/com/jeequan/jeepay/pay/service/PayMchNotifyService.java",
107
+ "lineStart": 45,
108
+ "lineEnd": 45,
109
+ "kind": "source"
110
+ },
111
+ "subtitle": "保存并推送商户通知",
112
+ "overviewText": [
113
+ "保存通知记录并推送消息。"
114
+ ]
115
+ },
116
+ {
117
+ "id": "channel",
118
+ "label": "IPaymentService",
119
+ "kind": "component",
120
+ "module": "channel",
121
+ "source": {
122
+ "file": "jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/IPaymentService.java",
123
+ "lineStart": 30,
124
+ "lineEnd": 30,
125
+ "kind": "source"
126
+ },
127
+ "subtitle": "渠道支付接口契约",
128
+ "overviewText": [
129
+ "定义渠道支付检查与支付调用。"
130
+ ]
131
+ },
132
+ {
133
+ "id": "orderdb",
134
+ "label": "PayOrderService",
135
+ "kind": "data",
136
+ "module": "payment",
137
+ "source": {
138
+ "file": "jeepay-service/src/main/java/com/jeequan/jeepay/service/impl/PayOrderService.java",
139
+ "lineStart": 49,
140
+ "lineEnd": 49,
141
+ "kind": "source"
142
+ },
143
+ "subtitle": "支付订单持久化与条件更新",
144
+ "overviewText": [
145
+ "持久化并按原状态条件更新订单。"
146
+ ]
147
+ }
148
+ ],
149
+ "edges": [
150
+ {
151
+ "id": "c1",
152
+ "source": "unified",
153
+ "target": "channel",
154
+ "kind": "call",
155
+ "label": "调起渠道支付",
156
+ "evidence": "source",
157
+ "site": {
158
+ "file": "jeepay-payment/src/main/java/com/jeequan/jeepay/pay/ctrl/payorder/AbstractPayOrderController.java",
159
+ "lineStart": 205,
160
+ "lineEnd": 205
161
+ }
162
+ },
163
+ {
164
+ "id": "c2",
165
+ "source": "unified",
166
+ "target": "orderdb",
167
+ "kind": "data",
168
+ "label": "保存支付订单",
169
+ "evidence": "source",
170
+ "site": {
171
+ "file": "jeepay-payment/src/main/java/com/jeequan/jeepay/pay/ctrl/payorder/AbstractPayOrderController.java",
172
+ "lineStart": 201,
173
+ "lineEnd": 201
174
+ }
175
+ },
176
+ {
177
+ "id": "c3",
178
+ "source": "unified",
179
+ "target": "process",
180
+ "kind": "call",
181
+ "label": "处理支付结果",
182
+ "evidence": "source",
183
+ "site": {
184
+ "file": "jeepay-payment/src/main/java/com/jeequan/jeepay/pay/ctrl/payorder/AbstractPayOrderController.java",
185
+ "lineStart": 383,
186
+ "lineEnd": 383
187
+ }
188
+ },
189
+ {
190
+ "id": "c4",
191
+ "source": "process",
192
+ "target": "notify",
193
+ "kind": "call",
194
+ "label": "通知商户",
195
+ "evidence": "source",
196
+ "site": {
197
+ "file": "jeepay-payment/src/main/java/com/jeequan/jeepay/pay/service/PayOrderProcessService.java",
198
+ "lineStart": 60,
199
+ "lineEnd": 60
200
+ }
201
+ },
202
+ {
203
+ "id": "c5",
204
+ "source": "process",
205
+ "target": "orderdb",
206
+ "kind": "data",
207
+ "label": "查询订单",
208
+ "evidence": "source",
209
+ "site": {
210
+ "file": "jeepay-payment/src/main/java/com/jeequan/jeepay/pay/service/PayOrderProcessService.java",
211
+ "lineStart": 51,
212
+ "lineEnd": 51
213
+ }
214
+ }
215
+ ],
216
+ "layout": {
217
+ "sections": [
218
+ {
219
+ "id": "entry",
220
+ "title": "业务能力入口",
221
+ "mode": "grid",
222
+ "columns": 4,
223
+ "tone": "blue",
224
+ "items": [
225
+ {
226
+ "nodeId": "unified"
227
+ },
228
+ {
229
+ "nodeId": "refund"
230
+ },
231
+ {
232
+ "nodeId": "transfer"
233
+ },
234
+ {
235
+ "nodeId": "division"
236
+ }
237
+ ]
238
+ },
239
+ {
240
+ "id": "core",
241
+ "title": "支付处理",
242
+ "mode": "row",
243
+ "tone": "green",
244
+ "items": [
245
+ {
246
+ "nodeId": "channel"
247
+ },
248
+ {
249
+ "nodeId": "process"
250
+ }
251
+ ]
252
+ },
253
+ {
254
+ "id": "support",
255
+ "title": "订单与通知支撑",
256
+ "mode": "row",
257
+ "tone": "subtle",
258
+ "items": [
259
+ {
260
+ "nodeId": "orderdb"
261
+ },
262
+ {
263
+ "nodeId": "notify"
264
+ }
265
+ ]
266
+ }
267
+ ],
268
+ "direction": "down"
269
+ }
270
+ }
@@ -0,0 +1,237 @@
1
+ {
2
+ "meta": {
3
+ "title": "Jeepay 统一支付类图",
4
+ "subtitle": "Jeepay 源码与配置证据",
5
+ "sourceRef": "jeequan/jeepay@e1ac9086d679826bab593f20431b7ecd292eb685",
6
+ "scope": "控制器与渠道支付接口",
7
+ "diagramType": "class",
8
+ "locale": "zh-CN",
9
+ "notes": [
10
+ "类成员仅展示与统一下单有关的源码声明;省略其他方法。",
11
+ "IPaymentService 实现由通道模块扩展,图中以支付宝和微信实现为例。"
12
+ ],
13
+ "viewId": "jeepay-class"
14
+ },
15
+ "nodes": [
16
+ {
17
+ "id": "api",
18
+ "label": "ApiController",
19
+ "kind": "abstract",
20
+ "module": "payment",
21
+ "source": {
22
+ "file": "jeepay-payment/src/main/java/com/jeequan/jeepay/pay/ctrl/ApiController.java",
23
+ "lineStart": 39,
24
+ "lineEnd": 39,
25
+ "kind": "source"
26
+ },
27
+ "methods": [
28
+ "#getRQByWithMchSign(Class<T>): T"
29
+ ]
30
+ },
31
+ {
32
+ "id": "base",
33
+ "label": "AbstractPayOrderController",
34
+ "kind": "abstract",
35
+ "module": "payment",
36
+ "source": {
37
+ "file": "jeepay-payment/src/main/java/com/jeequan/jeepay/pay/ctrl/payorder/AbstractPayOrderController.java",
38
+ "lineStart": 64,
39
+ "lineEnd": 64,
40
+ "kind": "source"
41
+ },
42
+ "methods": [
43
+ "#unifiedOrder(String, UnifiedOrderRQ): ApiRes",
44
+ "-processChannelMsg(ChannelRetMsg, PayOrder): void"
45
+ ]
46
+ },
47
+ {
48
+ "id": "unified",
49
+ "label": "UnifiedOrderController",
50
+ "kind": "class",
51
+ "module": "payment",
52
+ "source": {
53
+ "file": "jeepay-payment/src/main/java/com/jeequan/jeepay/pay/ctrl/payorder/UnifiedOrderController.java",
54
+ "lineStart": 44,
55
+ "lineEnd": 44,
56
+ "kind": "source"
57
+ },
58
+ "methods": [
59
+ "+unifiedOrder(): ApiRes"
60
+ ]
61
+ },
62
+ {
63
+ "id": "iface",
64
+ "label": "IPaymentService",
65
+ "kind": "interface",
66
+ "module": "channel",
67
+ "source": {
68
+ "file": "jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/IPaymentService.java",
69
+ "lineStart": 30,
70
+ "lineEnd": 30,
71
+ "kind": "source"
72
+ },
73
+ "methods": [
74
+ "+getIfCode(): String",
75
+ "+preCheck(UnifiedOrderRQ, PayOrder): String",
76
+ "+pay(UnifiedOrderRQ, PayOrder, MchAppConfigContext): AbstractRS"
77
+ ]
78
+ },
79
+ {
80
+ "id": "abstractPayment",
81
+ "label": "AbstractPaymentService",
82
+ "kind": "abstract",
83
+ "module": "channel",
84
+ "source": {
85
+ "file": "jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/AbstractPaymentService.java",
86
+ "lineStart": 35,
87
+ "lineEnd": 35,
88
+ "kind": "source"
89
+ },
90
+ "methods": [
91
+ "+customPayOrderId(UnifiedOrderRQ, PayOrder, MchAppConfigContext): String"
92
+ ]
93
+ },
94
+ {
95
+ "id": "alipay",
96
+ "label": "AlipayPaymentService",
97
+ "kind": "class",
98
+ "module": "channel",
99
+ "source": {
100
+ "file": "jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/alipay/AlipayPaymentService.java",
101
+ "lineStart": 36,
102
+ "lineEnd": 36,
103
+ "kind": "source"
104
+ },
105
+ "methods": [
106
+ "+pay(UnifiedOrderRQ, PayOrder, MchAppConfigContext): AbstractRS"
107
+ ]
108
+ },
109
+ {
110
+ "id": "wxpay",
111
+ "label": "WxpayPaymentService",
112
+ "kind": "class",
113
+ "module": "channel",
114
+ "source": {
115
+ "file": "jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/WxpayPaymentService.java",
116
+ "lineStart": 46,
117
+ "lineEnd": 46,
118
+ "kind": "source"
119
+ },
120
+ "methods": [
121
+ "+pay(UnifiedOrderRQ, PayOrder, MchAppConfigContext): AbstractRS"
122
+ ]
123
+ },
124
+ {
125
+ "id": "orders",
126
+ "label": "PayOrderService",
127
+ "kind": "class",
128
+ "module": "payment",
129
+ "source": {
130
+ "file": "jeepay-service/src/main/java/com/jeequan/jeepay/service/impl/PayOrderService.java",
131
+ "lineStart": 49,
132
+ "lineEnd": 49,
133
+ "kind": "source"
134
+ },
135
+ "methods": [
136
+ "+updateInit2Ing(String, PayOrder): boolean",
137
+ "+updateIng2Success(String, String, String): boolean"
138
+ ]
139
+ }
140
+ ],
141
+ "edges": [
142
+ {
143
+ "id": "cl1",
144
+ "source": "unified",
145
+ "target": "base",
146
+ "kind": "inheritance",
147
+ "label": "extends",
148
+ "evidence": "source",
149
+ "site": {
150
+ "file": "jeepay-payment/src/main/java/com/jeequan/jeepay/pay/ctrl/payorder/UnifiedOrderController.java",
151
+ "lineStart": 44,
152
+ "lineEnd": 44
153
+ }
154
+ },
155
+ {
156
+ "id": "cl2",
157
+ "source": "base",
158
+ "target": "api",
159
+ "kind": "inheritance",
160
+ "label": "extends",
161
+ "evidence": "source",
162
+ "site": {
163
+ "file": "jeepay-payment/src/main/java/com/jeequan/jeepay/pay/ctrl/payorder/AbstractPayOrderController.java",
164
+ "lineStart": 64,
165
+ "lineEnd": 64
166
+ }
167
+ },
168
+ {
169
+ "id": "cl3",
170
+ "source": "abstractPayment",
171
+ "target": "iface",
172
+ "kind": "implementation",
173
+ "label": "implements",
174
+ "evidence": "source",
175
+ "site": {
176
+ "file": "jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/AbstractPaymentService.java",
177
+ "lineStart": 35,
178
+ "lineEnd": 35
179
+ }
180
+ },
181
+ {
182
+ "id": "cl4",
183
+ "source": "alipay",
184
+ "target": "abstractPayment",
185
+ "kind": "inheritance",
186
+ "label": "extends",
187
+ "evidence": "source",
188
+ "site": {
189
+ "file": "jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/alipay/AlipayPaymentService.java",
190
+ "lineStart": 36,
191
+ "lineEnd": 36
192
+ }
193
+ },
194
+ {
195
+ "id": "cl5",
196
+ "source": "wxpay",
197
+ "target": "abstractPayment",
198
+ "kind": "inheritance",
199
+ "label": "extends",
200
+ "evidence": "source",
201
+ "site": {
202
+ "file": "jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/WxpayPaymentService.java",
203
+ "lineStart": 46,
204
+ "lineEnd": 46
205
+ }
206
+ },
207
+ {
208
+ "id": "cl6",
209
+ "source": "base",
210
+ "target": "iface",
211
+ "kind": "dependency",
212
+ "label": "调用渠道接口",
213
+ "evidence": "source",
214
+ "site": {
215
+ "file": "jeepay-payment/src/main/java/com/jeequan/jeepay/pay/ctrl/payorder/AbstractPayOrderController.java",
216
+ "lineStart": 205,
217
+ "lineEnd": 205
218
+ }
219
+ },
220
+ {
221
+ "id": "cl7",
222
+ "source": "base",
223
+ "target": "orders",
224
+ "kind": "association",
225
+ "label": "持有 PayOrderService",
226
+ "evidence": "source",
227
+ "site": {
228
+ "file": "jeepay-payment/src/main/java/com/jeequan/jeepay/pay/ctrl/payorder/AbstractPayOrderController.java",
229
+ "lineStart": 67,
230
+ "lineEnd": 67
231
+ }
232
+ }
233
+ ],
234
+ "layout": {
235
+ "direction": "down"
236
+ }
237
+ }