Files
chis_osi/osi/jktj.go
T
ilaandClaude Opus 4.8 f3c5e1bf8d 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>
2026-07-08 22:14:39 +08:00

90 lines
2.9 KiB
Go

package osi
import (
"context"
"fmt"
"chis_osi/contract"
)
type FindHealthCheckQuery struct {
IDCard string
PHRID string
EMPIID string
}
// LastHealthCheck 查询某人最近一次体检(JKTJLSJL00002 /auto/jktjlscx/query)。
// data 为单个体检对象(非数组);summary 只取定位字段,完整内容见返回的 Result.Raw。
func (c *Client) LastHealthCheck(ctx context.Context, query FindHealthCheckQuery) (contract.HealthCheckSummary, Result, error) {
baseInfo, err := query.baseInfo()
if err != nil {
return contract.HealthCheckSummary{}, Result{}, err
}
var summary contract.HealthCheckSummary
result, err := c.Call(ctx, ServiceIDJKTJLast, baseInfo, &summary)
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},
{name: "empiId", value: q.EMPIID},
{name: "phrid", value: q.PHRID},
}
return singleBaseInfo("last health check", fields)
}
type ListHealthCheckQuery struct {
CheckYear string // 必填:检查年度,如 "2025"
IDCard string // 可选:过滤到某人
CheckType string // 可选:0 已检 / 1 未检 / 2 全部
Page string // 默认 "1"
Rows string // 默认 "10"
}
// ListHealthCheckPeople 查询某年度已检/未检人员名单(JKTJLIST00002 /auto/jktjlist/query)。
// 返回人员名单 + checkType 状态,非体检明细;分页参数在 baseInfo 内,见 docs/04 §11.4。
func (c *Client) ListHealthCheckPeople(ctx context.Context, query ListHealthCheckQuery) ([]contract.HealthCheckPerson, Result, error) {
baseInfo, err := query.baseInfo()
if err != nil {
return nil, Result{}, err
}
var people []contract.HealthCheckPerson
result, err := c.Call(ctx, ServiceIDJKTJList, baseInfo, &people)
return people, result, err
}
func (q ListHealthCheckQuery) baseInfo() (map[string]string, error) {
if q.CheckYear == "" {
return nil, fmt.Errorf("list health check requires checkYear")
}
page, rows := q.Page, q.Rows
if page == "" {
page = "1"
}
if rows == "" {
rows = "10"
}
base := map[string]string{"checkYear": q.CheckYear, "page": page, "rows": rows}
if q.CheckType != "" {
base["checkType"] = q.CheckType
}
if q.IDCard != "" {
base["idCard"] = q.IDCard
}
return base, nil
}