This commit is contained in:
parent
62efdad5c0
commit
de7adf04e8
|
@ -223,8 +223,9 @@ var ErrCodeMsgMap = map[ErrCode]string{
|
|||
|
||||
ErrCodeHvyogoSrvFail: "慧用工接口服务错误",
|
||||
|
||||
ErrCodeRavenIQTestSrvFail: "瑞文智商测试表服务错误",
|
||||
ErrCodeRavenIQTestNotExist: "瑞文智商测试表不存在",
|
||||
ErrCodeRavenIQTestSrvFail: "瑞文智商测试表服务错误",
|
||||
ErrCodeRavenIQTestNotExist: "瑞文智商测试表不存在",
|
||||
ErrCodeRavenIQTestQuestionNotExist: "瑞文智商测试表题目不存在",
|
||||
}
|
||||
|
||||
const (
|
||||
|
@ -546,8 +547,8 @@ const (
|
|||
ErrCodeHandleWsFail ErrCode = -100001 // 长链连接失败
|
||||
|
||||
// RavenIQTest: 101xxx
|
||||
ErrCodeRavenIQTestSrvOk ErrCode = ErrCodeOk
|
||||
ErrCodeRavenIQTestSrvFail ErrCode = -101001 // 瑞文智商测试表服务错误
|
||||
ErrCodeRavenIQTestNotExist ErrCode = -101002 // 瑞文智商测试表不存在
|
||||
|
||||
ErrCodeRavenIQTestSrvOk ErrCode = ErrCodeOk
|
||||
ErrCodeRavenIQTestSrvFail ErrCode = -101001 // 瑞文智商测试表服务错误
|
||||
ErrCodeRavenIQTestNotExist ErrCode = -101002 // 瑞文智商测试表不存在
|
||||
ErrCodeRavenIQTestQuestionNotExist ErrCode = -101003 // 瑞文智商测试表题目不存在
|
||||
)
|
||||
|
|
|
@ -24,6 +24,7 @@ func (vo *ApiListVO) CopyRavenIQTest(test *dbstruct.RavenIQTest) *ApiListVO {
|
|||
if test == nil {
|
||||
return vo
|
||||
}
|
||||
vo.IQResult = &apollostruct.IQResult{}
|
||||
vo.Id = test.GetId()
|
||||
vo.UserId = test.GetUserId()
|
||||
vo.Age = test.GetAge()
|
||||
|
|
|
@ -8,6 +8,7 @@ import (
|
|||
func (p *ApiCreateReq) ProvideNotNullValue() (params []*validator.JsonParam) {
|
||||
params = make([]*validator.JsonParam, 0)
|
||||
params = append(params, validator.NewInt64PtrParam("请提供您的年龄!", p.Age))
|
||||
params = append(params, validator.NewStructSliceParam("请提供您的答案!", len(p.RavenIQTest.AnswerList)))
|
||||
return params
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
package apollostruct
|
||||
|
||||
type QuestionMapCfg struct {
|
||||
Map map[int64]*RavenIQTestQuestion `json:"map"`
|
||||
Map map[int64]*RavenIQTestQuestion `json:"map"`
|
||||
ClassList []int64 `json:"class_list"`
|
||||
}
|
||||
|
||||
type RavenIQTestQuestion struct {
|
||||
|
@ -24,7 +25,7 @@ type AgeScore2IQResultMapCfg struct {
|
|||
}
|
||||
|
||||
type ClassScore2ClassResultMapCfg struct {
|
||||
ClassId2ClassScoreBlockListMap map[int64][]int64 `json:"class_id_2_class_score_block_list_map" bson:"class_id_2_class_score_block_list_map"` // 大类Id到大类分数分布区域的映射map
|
||||
Map map[int64][]int64 `json:"map" bson:"map"` // 大类Id到大类分数分布区域的映射map
|
||||
}
|
||||
|
||||
type IQResultMapCfg struct {
|
||||
|
|
|
@ -5617,7 +5617,7 @@ func (m *Mongo) GetRavenIQTestById(ctx *gin.Context, id int64) (*dbstruct.RavenI
|
|||
err := col.Find(ctx, query).One(test)
|
||||
if err == qmgo.ErrNoSuchDocuments {
|
||||
err = nil
|
||||
return test, err
|
||||
return nil, err
|
||||
}
|
||||
return test, err
|
||||
}
|
||||
|
|
|
@ -3592,7 +3592,7 @@ func (s *Service) ApiHvyogoWorkerUpdate(ctx *gin.Context, req *hvyogoproto.ApiWo
|
|||
func (s *Service) ApiCreateRavenIQTest(ctx *gin.Context, req *Raven_IQ_testproto.ApiCreateReq) (ec errcode.ErrCode) {
|
||||
ec = errcode.ErrCodeRavenIQTestSrvOk
|
||||
|
||||
// 计算总得分
|
||||
// 缓存数据准备
|
||||
questionMapcfg := apollostruct.QuestionMapCfg{}
|
||||
err := apollo.GetJson(consts.QuestionMapKey, &questionMapcfg, apollo.ApolloOpts().SetNamespace("Raven_IQ_test"))
|
||||
if err != nil {
|
||||
|
@ -3600,25 +3600,6 @@ func (s *Service) ApiCreateRavenIQTest(ctx *gin.Context, req *Raven_IQ_testproto
|
|||
return errcode.ErrCodeApolloReadFail
|
||||
}
|
||||
|
||||
classScoreMap := make(map[int64]int64)
|
||||
for _, answer := range req.AnswerList {
|
||||
if answer.GetSelectedOption() == questionMapcfg.Map[answer.GetQuestionId()].CorrectOption {
|
||||
classScoreMap[answer.GetQuestionId()] += 1
|
||||
}
|
||||
}
|
||||
|
||||
req.ClassScoreList = make([]*dbstruct.RavenIQTestClassScore, 0)
|
||||
totalScore := float64(0)
|
||||
for classId, score := range classScoreMap {
|
||||
req.ClassScoreList = append(req.ClassScoreList, &dbstruct.RavenIQTestClassScore{
|
||||
ClassId: goproto.Int64(classId),
|
||||
Score: goproto.Int64(score),
|
||||
})
|
||||
totalScore += float64(score)
|
||||
}
|
||||
req.TotalScore = goproto.Float64(totalScore)
|
||||
|
||||
// 换算智商及百分位
|
||||
ageScore2IQResultMapCfg := apollostruct.AgeScore2IQResultMapCfg{}
|
||||
err = apollo.GetJson(consts.AgeScore2IQResultMapKey, &ageScore2IQResultMapCfg, apollo.ApolloOpts().SetNamespace("Raven_IQ_test"))
|
||||
if err != nil {
|
||||
|
@ -3635,15 +3616,42 @@ func (s *Service) ApiCreateRavenIQTest(ctx *gin.Context, req *Raven_IQ_testproto
|
|||
return
|
||||
}
|
||||
|
||||
// 计算总得分
|
||||
classScoreMap := make(map[int64]int64)
|
||||
for _, classId := range questionMapcfg.ClassList {
|
||||
classScoreMap[classId] = 0
|
||||
}
|
||||
for _, answer := range req.AnswerList {
|
||||
question, ok := questionMapcfg.Map[answer.GetQuestionId()]
|
||||
if !ok {
|
||||
return errcode.ErrCodeRavenIQTestQuestionNotExist
|
||||
}
|
||||
if answer.GetSelectedOption() == question.CorrectOption {
|
||||
classScoreMap[answer.GetQuestionId()] += 1
|
||||
}
|
||||
}
|
||||
|
||||
req.ClassScoreList = make([]*dbstruct.RavenIQTestClassScore, 0)
|
||||
totalScore := float64(0)
|
||||
for classId, score := range classScoreMap {
|
||||
req.ClassScoreList = append(req.ClassScoreList, &dbstruct.RavenIQTestClassScore{
|
||||
ClassId: goproto.Int64(classId),
|
||||
Score: goproto.Int64(score),
|
||||
})
|
||||
totalScore += float64(score)
|
||||
}
|
||||
req.TotalScore = goproto.Float64(totalScore)
|
||||
|
||||
// 换算智商及百分位
|
||||
ageBlockIdx := util.GetLastLessOrEqualForInt64(ageScore2IQResultMapCfg.AgeBlockList, req.GetAge())
|
||||
list := ageScore2IQResultMapCfg.AgeBlockIndex2ScoreBlockListMap[ageBlockIdx]
|
||||
scoreBlockIdx := util.GetLastLessOrEqualForFloat64(list, req.GetTotalScore())
|
||||
IQBlockId := ageScore2IQResultMapCfg.ScoreBlockIndex2IQBlockIdMap[scoreBlockIdx]
|
||||
|
||||
for _, classScore := range req.ClassScoreList {
|
||||
classScoreBlockList := classScore2ClassResultMapCfg.ClassId2ClassScoreBlockListMap[classScore.GetClassId()]
|
||||
classScoreBlockList := classScore2ClassResultMapCfg.Map[classScore.GetClassId()]
|
||||
classScoreBlockIdx := util.GetLastLessOrEqualForInt64(classScoreBlockList, classScore.GetScore())
|
||||
classScore.ClassBlockId = goproto.Int64(int64(classScoreBlockIdx))
|
||||
classScore.ClassBlockId = goproto.Int64(classScore.GetClassId()*100 + int64(classScoreBlockIdx)) // 100 * 大类id + 偏移量
|
||||
}
|
||||
|
||||
req.IQBlockId = goproto.Int64(IQBlockId)
|
||||
|
|
Loading…
Reference in New Issue