Files
chis_osi/osi/jkda.go
T

104 lines
2.8 KiB
Go

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"`
IDCard string `json:"idCard"`
PHRID string `json:"phrId"`
}
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
}
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
}
func (c *Client) manageInfo() contract.ManageInfo {
return contract.ManageInfo{
DSFMC: c.config.UserName,
OperateUser: c.config.OperateUser,
OperateUnit: c.operateUnit(),
}
}
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
}