This commit is contained in:
zhouwentao 2026-02-07 18:04:29 +08:00
parent 00b925fe03
commit 64e385e50c
4 changed files with 146 additions and 14 deletions

View File

@ -18,5 +18,5 @@ type YxHistoryScoreControlLine struct {
} }
func (YxHistoryScoreControlLine) TableName() string { func (YxHistoryScoreControlLine) TableName() string {
return "yx_history_score_control_line" return "yx_history_score_control_line_new"
} }

View File

@ -81,6 +81,11 @@ func (m *YxCalculationMajorMapper) FindRecommendList(query dto.SchoolMajorQuery)
params = append(params, query.MainSubjects) params = append(params, query.MainSubjects)
} }
if query.Keyword != "" {
baseSQL += " AND cm.major_name like ?"
params = append(params, query.Keyword)
}
// 3. 优化后的总数量COUNT SQL // 3. 优化后的总数量COUNT SQL
countSQL := fmt.Sprintf(` countSQL := fmt.Sprintf(`
SELECT COUNT(cm.id) FROM %s cm SELECT COUNT(cm.id) FROM %s cm

View File

@ -312,9 +312,8 @@ func (s *YxCalculationMajorService) CheckEnrollProbability(schoolMajorDTOList *[
professionalCategory := userScoreVO.ProfessionalCategory professionalCategory := userScoreVO.ProfessionalCategory
if "表演类" == professionalCategory { if "表演类" == professionalCategory {
s.BiaoYanRecommendMajorListSetEnrollProbability(schoolMajorDTOList, userScoreVO) s.BiaoYanRecommendMajorListSetEnrollProbability(schoolMajorDTOList, userScoreVO)
// TODO: biaoyanService
} else if "音乐类" == professionalCategory { } else if "音乐类" == professionalCategory {
// TODO: musicService s.YinYueRecommendMajorListSetEnrollProbability(schoolMajorDTOList, userScoreVO)
} else { } else {
s.BetaRecommendMajorListSetEnrollProbability(schoolMajorDTOList, userScoreVO) s.BetaRecommendMajorListSetEnrollProbability(schoolMajorDTOList, userScoreVO)
} }
@ -440,6 +439,138 @@ func (s *YxCalculationMajorService) BiaoYanRecommendMajorListSetEnrollProbabilit
} }
} }
// YinYueRecommendMajorListSetEnrollProbability 音乐类 获取录取率
func (s *YxCalculationMajorService) YinYueRecommendMajorListSetEnrollProbability(recommendMajorList *[]dto.SchoolMajorDTO, userScoreVO vo.UserScoreVO) {
if recommendMajorList == nil || len(*recommendMajorList) == 0 {
return
}
professionalCategory := userScoreVO.ProfessionalCategory
nowBatch := "本科"
// 获取省控线 Map
historyScoreControlLineMap, err := s.historyScoreControlLineService.MapsBatchByProfessionalCategoryOfYear(common.NowYear, professionalCategory, userScoreVO.CognitioPolyclinic)
if err != nil {
return
}
culturalScore := userScoreVO.CulturalScore
professionalScore := userScoreVO.ProfessionalScore
var rulesEnrollProbability string
var probabilityOperator string
var nowMajorTypeChild string
var batchKey string
for i := range *recommendMajorList {
item := &(*recommendMajorList)[i]
rulesEnrollProbability = item.PrivateRulesEnrollProbability
probabilityOperator = item.PrivateProbabilityOperator
// 当前子类型
nowMajorTypeChild = item.MajorTypeChild
// 主考科目
if "音乐表演" == nowMajorTypeChild {
nowMajorTypeChild += item.MainSubjects
}
// 整合为 表演类-XXX子类型
if "高职高专" == item.Batch {
batchKey = professionalCategory + "-" + nowMajorTypeChild + "_" + item.Batch
} else {
batchKey = professionalCategory + "-" + nowMajorTypeChild + "_本科"
}
// 获取对应批次的省控线
controlLineData, ok := historyScoreControlLineMap[batchKey]
if !ok {
continue
// if val, okDefault := historyScoreControlLineMap["本科"]; okDefault {
// controlLineData = val
// } else {
// continue
// }
}
// 判断子类型,使用对应的成绩进行计算
professionalScore = userScoreVO.ProfessionalCategoryChildrenScore[nowMajorTypeChild]
culturalControlLine := controlLineData.CulturalScore
specialControlLine := controlLineData.SpecialScore
if rulesEnrollProbability == "" {
continue
}
// 补全 probabilityOperator 逻辑
if rulesEnrollProbability == "文过专排" && probabilityOperator == "" {
probabilityOperator = "文*0+专*1"
} else if rulesEnrollProbability == "专过文排" && probabilityOperator == "" {
probabilityOperator = "文*1+专*0"
}
if probabilityOperator == "" {
item.EnrollProbability = common.Number5
continue
}
// 判断其他录取要求
if !calc.OtherScoreJudge(professionalScore, userScoreVO, *item) {
item.EnrollProbability = common.Number0
continue
}
// 判断是否过省控线
if !calc.CrossingControlLine(rulesEnrollProbability, culturalScore, professionalScore, culturalControlLine, specialControlLine) {
item.EnrollProbability = common.Number0
continue
}
// 计算学生折合分
studentScore := calc.ConvertIntoScore(rulesEnrollProbability, culturalScore, professionalScore, probabilityOperator)
item.PrivateStudentScore = studentScore
item.StudentScore = studentScore
// 权限检查
if !calc.HasComputeEnrollProbabilityPermissions(nowBatch, item.Batch) {
item.EnrollProbability = common.Number0
continue
}
// 录取方式计算
if common.CulturalControlLineGuoMain == rulesEnrollProbability {
if len(item.HistoryMajorEnrollList) == 0 {
item.EnrollProbability = common.Number0
continue
}
item.EnrollProbability = (studentScore * item.HistoryMajorEnrollList[0].AdmissionLine) * common.Number0p75
if studentScore >= item.HistoryMajorEnrollList[0].AdmissionLine {
item.EnrollProbability *= common.Number0p5
}
continue
} else {
nowYearProvincialControlLine := calc.ConvertIntoScore(rulesEnrollProbability, culturalControlLine, specialControlLine, probabilityOperator)
if nowYearProvincialControlLine <= 0 {
item.EnrollProbability = common.Number0
continue
}
diffMap := calc.ComputeHistoryMajorEnrollScoreLineDifferenceWithRulesEnrollProbability(item.MajorType, rulesEnrollProbability, probabilityOperator, item.HistoryMajorEnrollMap)
historyThreeYearDiff := diffMap["scoreDifference"].(float64)
if historyThreeYearDiff == 0 {
item.EnrollProbability = common.Number0
continue
}
nowYearDiff := studentScore - nowYearProvincialControlLine
enrollProbability := calc.CommonCheckEnrollProbability(nowYearDiff, historyThreeYearDiff)
item.EnrollProbability = calc.CommonCheckEnrollProbabilityBeilv(enrollProbability)
}
}
}
// BetaRecommendMajorListSetEnrollProbability 美术与设计类,书法类,体育类 获取录取率 // BetaRecommendMajorListSetEnrollProbability 美术与设计类,书法类,体育类 获取录取率
func (s *YxCalculationMajorService) BetaRecommendMajorListSetEnrollProbability(recommendMajorList *[]dto.SchoolMajorDTO, userScoreVO vo.UserScoreVO) { func (s *YxCalculationMajorService) BetaRecommendMajorListSetEnrollProbability(recommendMajorList *[]dto.SchoolMajorDTO, userScoreVO vo.UserScoreVO) {
if recommendMajorList == nil || len(*recommendMajorList) == 0 { if recommendMajorList == nil || len(*recommendMajorList) == 0 {

View File

@ -26,13 +26,9 @@ func (s *YxHistoryScoreControlLineService) MapsBatchByProfessionalCategoryOfYear
switch professionalCategory { switch professionalCategory {
case "表演类": case "表演类":
fallthrough
case "音乐类":
for _, item := range list { for _, item := range list {
// 复制对象逻辑,处理"本科A段"映射为"提前批"
// if item.Batch == "本科A段" {
// newItem := item
// newItem.Batch = "提前批"
// result[newItem.Batch] = newItem
// }
result[item.ProfessionalCategory+"_"+item.Batch] = item result[item.ProfessionalCategory+"_"+item.Batch] = item
} }
default: default: