2026-07-07 10:14:40 +08:00
|
|
|
package osi
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
|
|
"chis_osi/contract"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type FindHealthRecordQuery struct {
|
|
|
|
|
IDCard string
|
|
|
|
|
EMPIID string
|
|
|
|
|
PHRID string
|
|
|
|
|
PersonName string
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type FindRqbjQuery struct {
|
|
|
|
|
IDCard string
|
|
|
|
|
PHRID string
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type PersonSignResult struct {
|
|
|
|
|
PersonSign string `json:"personSign"`
|
2026-07-09 20:38:27 +08:00
|
|
|
IDCard string `json:"idCard"`
|
|
|
|
|
PHRID string `json:"phrId"`
|
2026-07-07 10:14:40 +08:00
|
|
|
}
|
|
|
|
|
|
2026-07-07 23:11:17 +08:00
|
|
|
func (c *Client) CreateHealthRecord(ctx context.Context, req contract.HealthRecordCreate) (contract.HealthRecordSaveResult, Result, error) {
|
|
|
|
|
req.ManageInfo = c.manageInfo()
|
|
|
|
|
var out contract.HealthRecordSaveResult
|
|
|
|
|
result, err := c.callUploadInfo(ctx, ServiceIDJKDACreate, req, &out)
|
|
|
|
|
return out, result, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (c *Client) UpdateHealthRecord(ctx context.Context, req contract.HealthRecordCreate) (contract.HealthRecordSaveResult, Result, error) {
|
|
|
|
|
req.ManageInfo = c.manageInfo()
|
|
|
|
|
var out contract.HealthRecordSaveResult
|
|
|
|
|
result, err := c.callUploadInfo(ctx, ServiceIDJKDAUpdate, req, &out)
|
|
|
|
|
return out, result, err
|
|
|
|
|
}
|
2026-07-07 10:14:40 +08:00
|
|
|
func (c *Client) FindHealthRecord(ctx context.Context, query FindHealthRecordQuery) ([]contract.FindHealthRecord, Result, error) {
|
|
|
|
|
baseInfo, err := query.baseInfo()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, Result{}, err
|
|
|
|
|
}
|
|
|
|
|
var records []contract.FindHealthRecord
|
|
|
|
|
result, err := c.Call(ctx, ServiceIDJKDAFind, baseInfo, &records)
|
|
|
|
|
return records, result, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (c *Client) FindRqbj(ctx context.Context, query FindRqbjQuery) (PersonSignResult, Result, error) {
|
|
|
|
|
baseInfo, err := query.baseInfo()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return PersonSignResult{}, Result{}, err
|
|
|
|
|
}
|
|
|
|
|
var personSign PersonSignResult
|
|
|
|
|
result, err := c.Call(ctx, ServiceIDJKDAFindRqbj, baseInfo, &personSign)
|
|
|
|
|
return personSign, result, err
|
|
|
|
|
}
|
|
|
|
|
|
2026-07-07 23:11:17 +08:00
|
|
|
func (c *Client) manageInfo() contract.ManageInfo {
|
|
|
|
|
return contract.ManageInfo{
|
|
|
|
|
DSFMC: c.config.UserName,
|
|
|
|
|
OperateUser: c.config.OperateUser,
|
|
|
|
|
OperateUnit: c.operateUnit(),
|
|
|
|
|
}
|
|
|
|
|
}
|
2026-07-07 10:14:40 +08:00
|
|
|
func (q FindHealthRecordQuery) baseInfo() (map[string]string, error) {
|
|
|
|
|
fields := []queryField{
|
|
|
|
|
{name: "idCard", value: q.IDCard},
|
|
|
|
|
{name: "empiId", value: q.EMPIID},
|
|
|
|
|
{name: "phrid", value: q.PHRID},
|
|
|
|
|
{name: "personName", value: q.PersonName},
|
|
|
|
|
}
|
|
|
|
|
return singleBaseInfo("find health record", fields)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (q FindRqbjQuery) baseInfo() (map[string]string, error) {
|
|
|
|
|
fields := []queryField{
|
|
|
|
|
{name: "idCard", value: q.IDCard},
|
|
|
|
|
{name: "phrid", value: q.PHRID},
|
|
|
|
|
}
|
|
|
|
|
return singleBaseInfo("find rqbj", fields)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type queryField struct {
|
|
|
|
|
name string
|
|
|
|
|
value string
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func singleBaseInfo(operation string, fields []queryField) (map[string]string, error) {
|
|
|
|
|
baseInfo := make(map[string]string, 1)
|
|
|
|
|
for _, field := range fields {
|
|
|
|
|
if field.value == "" {
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
baseInfo[field.name] = field.value
|
|
|
|
|
}
|
|
|
|
|
if len(baseInfo) != 1 {
|
|
|
|
|
return nil, fmt.Errorf("%s requires exactly one query key", operation)
|
|
|
|
|
}
|
|
|
|
|
return baseInfo, nil
|
|
|
|
|
}
|