package models import ( database "WorldEpcho/src/datasource" "encoding/json" "fmt" "log" ) // EmbuTestResult 定义了存储到数据库中的测试结果的数据结构 type EmbuTestResult struct { Id int64 `xorm:"pk autoincr 'id'"` // 主键,自增 AppId int64 `xorm:"'appId'"` Uid int64 `xorm:"'uid'"` TestData string `xorm:"'testData' json"` // 这里假设存储为JSON字符串 EvaluateResult string `xorm:"'EvaluateResult' json"` // 结果同样存为JSON字符串 EvaluateTime int64 `xorm:" 'EvaluateTime'"` ShareType string `json:"shareType" xorm:" 'ShareType' "` //分享类型, 使用逗号分割的字符串, 如: A,B,C,D } // TestResultDetail 定义了测试结果的详细数据结构 type FatherTestResultDetail struct { Emotional string `json:"Emotional"` //情感温暖理解 Overreach string `json:"Overreach"` //过分干涉 RejectDeny string `json:"RejectDeny"` //拒绝、否认 Punishment string `json:"Punishment"` //惩罚 Preferred string `json:"Preferred"` //偏爱被试 OverProtection string `json:"OverProtection"` //过度保护 【注意】FartherAverage中特有的字段 } type MotherTestResultDetail struct { Emotional string `json:"Emotional"` //情感温暖理解 Overreach string `json:"Overreach"` //过分干涉 RejectDeny string `json:"RejectDeny"` //拒绝、否认 Punishment string `json:"Punishment"` //惩罚 Preferred string `json:"Preferred"` //偏爱被试 } // 测试数据结构体 type TestResultData struct { FatherAverage FatherTestResultDetail `json:"FatherAverage"` MotherAverage MotherTestResultDetail `json:"MotherAverage"` } // 数据库插入一条记录 func InsertTestResult(testResult *EmbuTestResult) error { _, err := database.Engine.Insert(testResult) if err != nil { return fmt.Errorf("插入数据失败: %v", err) } fmt.Println("数据插入成功") return nil } //查询汇总评估 // QueryLatestSummary 根据appId和uid查询最新的EvaluateResult中的Summary /* func QueryLatestSummary1(appId int64, uid int64) (*EvaluationSummary, *EvaluateResultVal, error) { var result EmbuTestResult has, err := database.Engine.Where("appId = ? AND uid = ?", appId, uid).Desc("EvaluateTime").Get(&result) if err != nil { return nil, nil, err } if !has { log.Printf("No records found for appId: %s, uid: %s", appId, uid) return nil, nil, nil // 或者返回特定的错误,表明没有找到记录 } var evalResult struct { Summary EvaluationSummary `json:"Summary"` } if err := json.Unmarshal([]byte(result.EvaluateResult), &evalResult); err != nil { log.Printf("Error parsing evaluate result for ID %d: %v", result.Id, err) return nil, nil, err } return &evalResult.Summary, &result.EvaluateResult, nil } */ // QueryLatestSummary 根据appId和uid查询最新的EvaluateResult中的Summary func QueryLatestSummary(appId int64, uid int64) (*EvaluationSummary, *EvaluateResultVal, error) { var result EmbuTestResult has, err := database.Engine.Where("appId = ? AND uid = ?", appId, uid).Desc("EvaluateTime").Get(&result) if err != nil { return nil, nil, err } if !has { log.Printf("No records found for appId: %v, uid: %v", appId, uid) return nil, nil, nil // 或者返回特定的错误,表明没有找到记录 } var evalResult EvaluateResultVal if err := json.Unmarshal([]byte(result.EvaluateResult), &evalResult); err != nil { log.Printf("Error parsing evaluate result for ID %v: %v", result.Id, err) return nil, nil, err } // 这里假设EvaluateResultVal中已经包含了Summary,所以直接返回evalResult.Summary return &evalResult.Summary, &evalResult, nil }