- GET /api/health-record/find 按 idCard/phrid/personName/empiId 查询 - 回写平台完整响应(Result.Raw),未建模字段不丢失 - 抽 buildOSIClient 共用构造,verify 与 server 复用 - 默认仅绑 127.0.0.1(端点返回真实档案 PII,避免暴露局域网) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
85 lines
2.0 KiB
Go
85 lines
2.0 KiB
Go
package main
|
||
|
||
import (
|
||
"context"
|
||
"flag"
|
||
"fmt"
|
||
"os"
|
||
|
||
"chis_osi/config"
|
||
)
|
||
|
||
type appMode string
|
||
|
||
const (
|
||
modeServer appMode = "server"
|
||
modeDeliver appMode = "deliver"
|
||
)
|
||
|
||
func parseMode(raw string) (appMode, error) {
|
||
switch appMode(raw) {
|
||
case modeServer:
|
||
return modeServer, nil
|
||
case modeDeliver:
|
||
return modeDeliver, nil
|
||
default:
|
||
return "", fmt.Errorf("invalid mode %q, want server or deliver", raw)
|
||
}
|
||
}
|
||
|
||
func main() {
|
||
modeFlag := flag.String("mode", string(modeServer), "运行模式:server 或 deliver")
|
||
configPath := flag.String("config", "config.yaml", "配置文件路径")
|
||
addr := flag.String("addr", "127.0.0.1:8080", "server 模式 HTTP 监听地址(默认仅本机,档案含 PII 勿绑 0.0.0.0)")
|
||
verifyJKDA := flag.Bool("verify-jkda", false, "阶段0联调验收:从 OSI_VERIFY_ID_CARD 读取身份证并查询 JKDA00002")
|
||
flag.Parse()
|
||
|
||
mode, err := parseMode(*modeFlag)
|
||
if err != nil {
|
||
fmt.Fprintln(os.Stderr, err)
|
||
os.Exit(2)
|
||
}
|
||
|
||
cfg, err := config.Load(*configPath)
|
||
if err != nil {
|
||
fmt.Fprintf(os.Stderr, "load config: %v\n", err)
|
||
os.Exit(2)
|
||
}
|
||
|
||
if *verifyJKDA {
|
||
idCard, err := resolveVerifyIDCard(*verifyJKDA, os.Getenv)
|
||
if err != nil {
|
||
fmt.Fprintf(os.Stderr, "verify JKDA00002: %v\n", err)
|
||
os.Exit(2)
|
||
}
|
||
result, err := runJKDAFindCheck(context.Background(), cfg, idCard)
|
||
if err != nil {
|
||
fmt.Fprintf(os.Stderr, "verify JKDA00002 failed: code=%s message=%s err=%v\n", result.Code, result.Message, err)
|
||
os.Exit(1)
|
||
}
|
||
fmt.Printf("JKDA00002 code=%s message=%s data_count=%d\n", result.Code, result.Message, result.DataCount)
|
||
return
|
||
}
|
||
|
||
if mode == modeServer {
|
||
if err := runServer(cfg, *addr); err != nil {
|
||
fmt.Fprintf(os.Stderr, "server: %v\n", err)
|
||
os.Exit(1)
|
||
}
|
||
return
|
||
}
|
||
|
||
fmt.Printf("chis_osi mode=%s\n", mode)
|
||
}
|
||
|
||
func resolveVerifyIDCard(enabled bool, getenv func(string) string) (string, error) {
|
||
if !enabled {
|
||
return "", nil
|
||
}
|
||
idCard := getenv("OSI_VERIFY_ID_CARD")
|
||
if idCard == "" {
|
||
return "", fmt.Errorf("OSI_VERIFY_ID_CARD is required when -verify-jkda is set")
|
||
}
|
||
return idCard, nil
|
||
}
|