feat(osi): 某人全部体检查询 JKTJ00002(T-306)
- osi.QueryHealthChecks(/auto/jktj/query,返回全部体检数组) - contract.HealthCheckRecordSummary:驼峰 idCard(≠最近一次小写 idcard)、checkId 可空 - HTTP 端点 GET /api/health-check/all - 单测含 null checkId 场景;实测端点已部署 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+4
-4
@@ -15,10 +15,9 @@ const (
|
||||
ServiceIDDrugs = "YPML00001"
|
||||
ServiceIDOrgs = "CXJG00002"
|
||||
|
||||
ServiceIDJKTJLast = "JKTJLSJL00002" // 最近一次体检(实测可用)
|
||||
ServiceIDJKTJList = "JKTJLIST00002" // 已检/待检人员列表(入参待厂家确认)
|
||||
// 单条查询 JKTJ00002:docx 标 auto/jktj/query,平台实测"没有url的接口配置"(未部署),
|
||||
// auto/jktj/find 待确认;确认前不登记路由。见 docs/04 §11、docs/06 B5。
|
||||
ServiceIDJKTJLast = "JKTJLSJL00002" // 最近一次体检(实测可用)
|
||||
ServiceIDJKTJQuery = "JKTJ00002" // 某人全部体检(实测可用,返回数组)
|
||||
ServiceIDJKTJList = "JKTJLIST00002" // 已检/待检人员名单(实测可用)
|
||||
)
|
||||
|
||||
const codeRetryableTimeout = "405"
|
||||
@@ -33,6 +32,7 @@ var servicePaths = map[string]string{
|
||||
ServiceIDDrugs: "/auto/ypmlcx/query",
|
||||
ServiceIDOrgs: "/auto/cxjg/query",
|
||||
ServiceIDJKTJLast: "/auto/jktjlscx/query",
|
||||
ServiceIDJKTJQuery: "/auto/jktj/query",
|
||||
ServiceIDJKTJList: "/auto/jktjlist/query",
|
||||
}
|
||||
|
||||
|
||||
+13
@@ -25,6 +25,19 @@ func (c *Client) LastHealthCheck(ctx context.Context, query FindHealthCheckQuery
|
||||
return summary, result, err
|
||||
}
|
||||
|
||||
// QueryHealthChecks 查询某人全部体检(JKTJ00002 /auto/jktj/query)。
|
||||
// data 为数组=该人全部体检历史;summaries 只取定位字段(checkId/checkDate 等),
|
||||
// 每条完整体检内容见返回的 Result.Raw。历史记录 checkId 可能为空,按 checkDate 区分。
|
||||
func (c *Client) QueryHealthChecks(ctx context.Context, query FindHealthCheckQuery) ([]contract.HealthCheckRecordSummary, Result, error) {
|
||||
baseInfo, err := query.baseInfo()
|
||||
if err != nil {
|
||||
return nil, Result{}, err
|
||||
}
|
||||
var summaries []contract.HealthCheckRecordSummary
|
||||
result, err := c.Call(ctx, ServiceIDJKTJQuery, baseInfo, &summaries)
|
||||
return summaries, result, err
|
||||
}
|
||||
|
||||
func (q FindHealthCheckQuery) baseInfo() (map[string]string, error) {
|
||||
fields := []queryField{
|
||||
{name: "idCard", value: q.IDCard},
|
||||
|
||||
@@ -44,6 +44,43 @@ func TestLastHealthCheckDecodesSummaryAndHitsPath(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestQueryHealthChecksDecodesArrayAndHitsPath(t *testing.T) {
|
||||
var seenPath string
|
||||
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
seenPath = r.URL.Path
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
// data 为数组=某人全部体检;idCard 驼峰;历史记录 checkId 为 null(脱敏假数据)
|
||||
_, _ = w.Write([]byte(`{"code":"01","message":"操作成功","data":[` +
|
||||
`{"checkId":"CHK-1","checkDate":"2025-06-23","idCard":"TEST-ID","personName":"测试"},` +
|
||||
`{"checkId":null,"checkDate":"2013-06-07","idCard":"TEST-ID","personName":"测试"}]}`))
|
||||
}))
|
||||
defer server.Close()
|
||||
|
||||
transport, err := NewTransport(TransportConfig{Timeout: time.Second})
|
||||
if err != nil {
|
||||
t.Fatalf("NewTransport: %v", err)
|
||||
}
|
||||
client := NewClient(ClientConfig{BaseURL: server.URL, UserName: "u", Ask: "k", Transport: transport})
|
||||
|
||||
records, result, err := client.QueryHealthChecks(context.Background(), FindHealthCheckQuery{IDCard: "TEST-ID"})
|
||||
if err != nil {
|
||||
t.Fatalf("QueryHealthChecks: %v", err)
|
||||
}
|
||||
if seenPath != "/osi/api/auto/jktj/query" {
|
||||
t.Fatalf("path = %q", seenPath)
|
||||
}
|
||||
if !result.Success || len(records) != 2 {
|
||||
t.Fatalf("records = %d result = %#v", len(records), result)
|
||||
}
|
||||
// 驼峰 idCard 应解出;历史记录 null checkId 解为空串且不报错
|
||||
if records[0].CheckID != "CHK-1" || records[0].IDCard != "TEST-ID" {
|
||||
t.Fatalf("row0 = %#v", records[0])
|
||||
}
|
||||
if records[1].CheckID != "" || records[1].CheckDate != "2013-06-07" {
|
||||
t.Fatalf("row1 (null checkId) = %#v", records[1])
|
||||
}
|
||||
}
|
||||
|
||||
func TestListHealthCheckPeopleDecodesRosterAndHitsPath(t *testing.T) {
|
||||
var seenPath string
|
||||
var seenBody map[string]any
|
||||
|
||||
Reference in New Issue
Block a user