feat(osi): 实现 JKDA 查询方法(T-203)

This commit is contained in:
ila
2026-07-07 10:14:40 +08:00
parent 332683eee6
commit cfbad76e6e
8 changed files with 249 additions and 14 deletions
+2 -1
View File
@@ -29,7 +29,8 @@
- [x] `contract/jkda.go` 查询响应结构体(T-201;创建/更新请求结构体留到 T-206)。
- [ ] `mapping/health_record.go` + `mapping/checkid.go`。
- [ ] `osi/jkda.go`:Create/Update/Find/FindRqbj。
- [x] `osi/jkda.go`:Find/FindRqbj(T-203;Find 已真实请求验收,FindRqbj 已按文档契约单测覆盖)。
- [ ] `osi/jkda.go`:Create/Update(T-206,依赖映射与字典缓存)。
- [ ] `handler` + `router`:暴露 `/api/health-record/save`(server 模式联调用)。
- [ ] 用 01 文档样例 + 联调样本写映射单测。
- **验收**:一条 PHIS 档案 → 映射 → create → 平台返回成功码(实测 `"01"`)与 `phrId`;重复投递被幂等跳过。
+7 -6
View File
@@ -6,11 +6,11 @@
## 当前快照
- 日期:2026-07-07
- 阶段:**Phase Q 查询契约已起步**;T-001~T-006、T-201 已验收,下一步进入 T-203
- 技术栈:Go 1.24 单二进制;`main.go -mode server|deliver`;配置读取使用 viper,支持环境变量覆盖;OSI 客户端已具备签名、信封、传输、基础判码与 JKDA00002 验证入口
- 生产代码:已有 `main.go`、`config/`、`contract/envelope.go`、`osi/sign.go`、`osi/transport.go`、`osi/codes.go`、`osi/client.go`、`verify_jkda.go`、`go.mod`/`go.sum`;`contract/jkda.go` 已建立 JKDA00002 查询响应契约;`mapping/`、`pipeline/` 等业务模块仍待后续任务建立
- 阶段:**Phase Q 查询档案已打通**;T-001~T-006、T-201、T-203 已验收,下一步进入 Phase M 的 T-102
- 技术栈:Go 1.24 单二进制;`main.go -mode server|deliver`;配置读取使用 viper,支持环境变量覆盖;OSI 客户端已具备签名、信封、传输、基础判码、JKDA00002 Find 与 JKDA00005 FindRqbj
- 生产代码:已有 `main.go`、`config/`、`contract/envelope.go`、`osi/sign.go`、`osi/transport.go`、`osi/codes.go`、`osi/client.go`、`verify_jkda.go`、`go.mod`/`go.sum`;`contract/jkda.go` 已建立 JKDA00002 查询响应契约;`osi/jkda.go` 已实现 Find/FindRqbj;`mapping/`、`pipeline/` 等业务模块仍待后续任务建立
- 联调现实:**JKDA00002 个人档案查询已用 Go 侧真实请求打通**,返回 `code="01" message="操作成功" data_count=1`;Python 联调样本和实测契约沉淀在 `docs/04 §8`
- 测试:`go test ./...` 通过;当前测试覆盖 mode 解析、配置加载与环境变量覆盖、MD5 签名、请求头组装、JSON POST 传输、头名大小写保留、identity 响应编码声明、超时配置、SOCKS5 代理地址校验、信封结构、serviceId 路由、成功/重试判码、Client.Call 请求与响应解析、JKDA00002 查询响应契约、JKDA00002 验证入口
- 测试:`go test ./...` 通过;当前测试覆盖 mode 解析、配置加载与环境变量覆盖、MD5 签名、请求头组装、JSON POST 传输、头名大小写保留、identity 响应编码声明、超时配置、SOCKS5 代理地址校验、信封结构、serviceId 路由、成功/重试判码、Client.Call 请求与响应解析、JKDA00002 查询响应契约、JKDA00002 Find、JKDA00005 FindRqbj、JKDA00002 验证入口
- 标准启动路径:`./init.sh` 已配置三步:依赖下载、`go test ./...`、`go run . -mode server -config config.yaml.example`
- 标准验证路径:`go test ./...`、`go build ./...`
- 当前 blocker:无硬 blocker。软限制:当前机器从 Git Bash 启动 Go 会出现标准库路径/构建缓存权限异常,`init.sh` 无法完整跑完;PowerShell 下等价 Go 命令和真实请求通过。厂家侧 B1/B2/B4/B5 契约缺口只影响阶段 4,不阻塞 Phase Q/M/D 的当前路径
@@ -27,6 +27,7 @@
| `osi/transport.go` | 已有 | OSI JSON POST 传输层;原始 HTTP/1.1 写请求以保留头名大小写;支持超时与可选 SOCKS5 |
| `osi/codes.go` | 已有 | serviceId 路由与成功/可重试判码 |
| `osi/client.go` | 已有 | 通用 `Call`:签名头 + 信封 + 传输 + 响应解析 |
| `osi/jkda.go` | 已有 | JKDA00002 Find 与 JKDA00005 FindRqbj |
| `verify_jkda.go` | 已有 | JKDA00002 真实请求验证辅助入口 |
| `config.yaml.example` | 已有 | 占位配置,不含真实凭据 |
| `go.mod` `go.sum` | 已有 | module `chis_osi`,依赖 viper 与 `golang.org/x/net/proxy` |
@@ -69,8 +70,8 @@ python3 scripts/query_health_record.py
## 下一步
1. T-203:实现 `osi/jkda.go` 的 Find / FindRqbj,使用 `contract.FindHealthRecord` 承接 `data` 数组。
2. T-102:T-203 后进入码表基线(按看板顺序)。
1. T-102:`mapping/dict.go` 全量码表(含 56 项民族)。
2. T-202:码表完成后进入健康档案映射与 checkId。
## 维护规则