diff --git a/server/modules/yx/entity/yx_history_score_control_line.go b/server/modules/yx/entity/yx_history_score_control_line.go index 2c02323..c4702f1 100644 --- a/server/modules/yx/entity/yx_history_score_control_line.go +++ b/server/modules/yx/entity/yx_history_score_control_line.go @@ -5,12 +5,12 @@ import "time" // YxHistoryScoreControlLine 历年各专业省控分数线实体 type YxHistoryScoreControlLine struct { ID string `gorm:"column:id;primaryKey" json:"id"` - Year string `gorm:"column:year" json:"year"` // 年份 + Year string `gorm:"column:year" json:"year"` // 年份 ProfessionalCategory string `gorm:"column:professional_category" json:"professionalCategory"` // 专业类别 - Category string `gorm:"column:category" json:"category"` // 文理科 - Batch string `gorm:"column:batch" json:"batch"` // 批次 - CulturalScore float64 `gorm:"column:cultural_score" json:"culturalScore"` // 文化分 - SpecialScore float64 `gorm:"column:special_score" json:"specialScore"` // 专业分 + Category string `gorm:"column:category" json:"category"` // 文理科 + Batch string `gorm:"column:batch" json:"batch"` // 批次 + CulturalScore float64 `gorm:"column:cultural_score" json:"culturalScore"` // 文化分 + SpecialScore float64 `gorm:"column:special_score" json:"specialScore"` // 专业分 CreateBy string `gorm:"column:create_by" json:"createBy"` CreateTime time.Time `gorm:"column:create_time" json:"createTime"` UpdateBy string `gorm:"column:update_by" json:"updateBy"` @@ -18,5 +18,5 @@ type YxHistoryScoreControlLine struct { } func (YxHistoryScoreControlLine) TableName() string { - return "yx_history_score_control_line" + return "yx_history_score_control_line_new" } diff --git a/server/modules/yx/mapper/yx_calculation_major_mapper.go b/server/modules/yx/mapper/yx_calculation_major_mapper.go index 5c01171..a6d8f66 100644 --- a/server/modules/yx/mapper/yx_calculation_major_mapper.go +++ b/server/modules/yx/mapper/yx_calculation_major_mapper.go @@ -81,6 +81,11 @@ func (m *YxCalculationMajorMapper) FindRecommendList(query dto.SchoolMajorQuery) params = append(params, query.MainSubjects) } + if query.Keyword != "" { + baseSQL += " AND cm.major_name like ?" + params = append(params, query.Keyword) + } + // 3. 优化后的总数量COUNT SQL countSQL := fmt.Sprintf(` SELECT COUNT(cm.id) FROM %s cm diff --git a/server/modules/yx/service/yx_calculation_major_service.go b/server/modules/yx/service/yx_calculation_major_service.go index e951038..ceb3b48 100644 --- a/server/modules/yx/service/yx_calculation_major_service.go +++ b/server/modules/yx/service/yx_calculation_major_service.go @@ -312,9 +312,8 @@ func (s *YxCalculationMajorService) CheckEnrollProbability(schoolMajorDTOList *[ professionalCategory := userScoreVO.ProfessionalCategory if "表演类" == professionalCategory { s.BiaoYanRecommendMajorListSetEnrollProbability(schoolMajorDTOList, userScoreVO) - // TODO: biaoyanService } else if "音乐类" == professionalCategory { - // TODO: musicService + s.YinYueRecommendMajorListSetEnrollProbability(schoolMajorDTOList, userScoreVO) } else { 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 美术与设计类,书法类,体育类 获取录取率 func (s *YxCalculationMajorService) BetaRecommendMajorListSetEnrollProbability(recommendMajorList *[]dto.SchoolMajorDTO, userScoreVO vo.UserScoreVO) { if recommendMajorList == nil || len(*recommendMajorList) == 0 { diff --git a/server/modules/yx/service/yx_history_score_control_line_service.go b/server/modules/yx/service/yx_history_score_control_line_service.go index 0943259..321053c 100644 --- a/server/modules/yx/service/yx_history_score_control_line_service.go +++ b/server/modules/yx/service/yx_history_score_control_line_service.go @@ -26,13 +26,9 @@ func (s *YxHistoryScoreControlLineService) MapsBatchByProfessionalCategoryOfYear switch professionalCategory { case "表演类": + fallthrough + case "音乐类": for _, item := range list { - // 复制对象逻辑,处理"本科A段"映射为"提前批" - // if item.Batch == "本科A段" { - // newItem := item - // newItem.Batch = "提前批" - // result[newItem.Batch] = newItem - // } result[item.ProfessionalCategory+"_"+item.Batch] = item } default: