|
|
|
|
@ -311,17 +311,268 @@ func (s *YxCalculationMajorService) UserMajorDTOGetHistory(userMajorDTOList *[]d
|
|
|
|
|
func (s *YxCalculationMajorService) CheckEnrollProbability(schoolMajorDTOList *[]dto.SchoolMajorDTO, userScoreVO vo.UserScoreVO) error {
|
|
|
|
|
professionalCategory := userScoreVO.ProfessionalCategory
|
|
|
|
|
if "表演类" == professionalCategory {
|
|
|
|
|
// TODO: biaoyanService
|
|
|
|
|
s.BiaoYanRecommendMajorListSetEnrollProbability(schoolMajorDTOList, userScoreVO)
|
|
|
|
|
} else if "音乐类" == professionalCategory {
|
|
|
|
|
// TODO: musicService
|
|
|
|
|
s.YinYueRecommendMajorListSetEnrollProbability(schoolMajorDTOList, userScoreVO)
|
|
|
|
|
} else {
|
|
|
|
|
s.betaRecommendMajorListSetEnrollProbability(schoolMajorDTOList, userScoreVO)
|
|
|
|
|
s.BetaRecommendMajorListSetEnrollProbability(schoolMajorDTOList, userScoreVO)
|
|
|
|
|
}
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// betaRecommendMajorListSetEnrollProbability 美术与设计类,书法类,体育类 获取录取率
|
|
|
|
|
func (s *YxCalculationMajorService) betaRecommendMajorListSetEnrollProbability(recommendMajorList *[]dto.SchoolMajorDTO, userScoreVO vo.UserScoreVO) {
|
|
|
|
|
// BiaoYanRecommendMajorListSetEnrollProbability 表演类 获取录取率
|
|
|
|
|
func (s *YxCalculationMajorService) BiaoYanRecommendMajorListSetEnrollProbability(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 nowMajorTypeChild string
|
|
|
|
|
var batchKey string
|
|
|
|
|
for i := range *recommendMajorList {
|
|
|
|
|
item := &(*recommendMajorList)[i]
|
|
|
|
|
|
|
|
|
|
rulesEnrollProbability := item.PrivateRulesEnrollProbability
|
|
|
|
|
probabilityOperator := item.PrivateProbabilityOperator
|
|
|
|
|
|
|
|
|
|
// 当前子类型
|
|
|
|
|
nowMajorTypeChild = item.MajorTypeChild
|
|
|
|
|
// 整合为 表演类-XXX子类型
|
|
|
|
|
batchKey = professionalCategory + "-" + nowMajorTypeChild + "_" + item.Batch
|
|
|
|
|
|
|
|
|
|
// 获取对应批次的省控线
|
|
|
|
|
controlLineData, ok := historyScoreControlLineMap[batchKey]
|
|
|
|
|
if !ok {
|
|
|
|
|
if val, okDefault := historyScoreControlLineMap["本科"]; okDefault {
|
|
|
|
|
controlLineData = val
|
|
|
|
|
} else {
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 判断子类型,使用对应的成绩进行计算
|
|
|
|
|
professionalScore = userScoreVO.ProfessionalCategoryChildrenScore[item.MajorTypeChild]
|
|
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 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 {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|