package employeecollection import ( "strings" "github.com/bytedance/sonic" ) // ExtractApprovalOpinion 从通用审批实例的终态决策快照中提取审批意见文本。 // 快照来自渠道审批详情(`info` 对象),审批意见位于 `comments[].comment_content`; // 兼容 `content` 与 `text` 两种等价键。取最后一条非空意见作为最终审批意见。 // 无法解析或没有意见时返回空字符串:意见缺失不影响申请与账单事实。 func ExtractApprovalOpinion(snapshot []byte) string { if len(snapshot) == 0 { return "" } var payload map[string]any if err := sonic.Unmarshal(snapshot, &payload); err != nil { return "" } opinion := "" if raw, ok := payload["comments"].([]any); ok { for _, item := range raw { comment, ok := item.(map[string]any) if !ok { continue } if content := commentText(comment); content != "" { opinion = content } } } if opinion != "" { return opinion } return commentText(payload) } // commentText 按优先顺序读取审批意见文本。 func commentText(container map[string]any) string { for _, key := range []string{"comment_content", "content", "text"} { value, ok := container[key].(string) if !ok { continue } if trimmed := strings.TrimSpace(value); trimmed != "" { return trimmed } } return "" }