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 }