Files
chis_osi/main.go
T
ilaandClaude Opus 4.8 47eaf1051e feat(handler): server 模式健康档案查询端点(T-208)
- 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>
2026-07-08 00:05:22 +08:00

85 lines
2.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
}