191 lines
5.8 KiB
Go
191 lines
5.8 KiB
Go
// Package service 业务逻辑层
|
||
package service
|
||
|
||
import (
|
||
"server/modules/user/vo"
|
||
"server/modules/yx/dto"
|
||
"server/modules/yx/entity"
|
||
"server/modules/yx/mapper"
|
||
|
||
"github.com/google/uuid"
|
||
)
|
||
|
||
type YxCalculationMajorService struct {
|
||
historyMajorEnrollService *YxHistoryMajorEnrollService
|
||
mapper *mapper.YxCalculationMajorMapper
|
||
}
|
||
|
||
func NewYxCalculationMajorService() *YxCalculationMajorService {
|
||
return &YxCalculationMajorService{
|
||
historyMajorEnrollService: NewYxHistoryMajorEnrollService(),
|
||
mapper: mapper.NewYxCalculationMajorMapper(),
|
||
}
|
||
}
|
||
|
||
func (s *YxCalculationMajorService) List(page, size int) ([]entity.YxCalculationMajor, int64, error) {
|
||
return s.mapper.FindAll(page, size)
|
||
}
|
||
|
||
func (s *YxCalculationMajorService) GetByID(id string) (*entity.YxCalculationMajor, error) {
|
||
return s.mapper.FindByID(id)
|
||
}
|
||
|
||
func (s *YxCalculationMajorService) Create(item *entity.YxCalculationMajor) error {
|
||
item.ID = uuid.New().String()
|
||
return s.mapper.Create(item)
|
||
}
|
||
|
||
func (s *YxCalculationMajorService) Update(item *entity.YxCalculationMajor) error {
|
||
return s.mapper.Update(item)
|
||
}
|
||
|
||
func (s *YxCalculationMajorService) UpdateFields(id string, fields map[string]interface{}) error {
|
||
return s.mapper.UpdateFields(id, fields)
|
||
}
|
||
|
||
func (s *YxCalculationMajorService) Delete(id string) error {
|
||
return s.mapper.Delete(id)
|
||
}
|
||
|
||
func (s *YxCalculationMajorService) GetByScoreID(scoreID string) ([]entity.YxCalculationMajor, error) {
|
||
return s.mapper.FindByScoreID(scoreID)
|
||
}
|
||
|
||
func (s *YxCalculationMajorService) BatchCreate(items []entity.YxCalculationMajor) error {
|
||
for i := range items {
|
||
items[i].ID = uuid.New().String()
|
||
}
|
||
return s.mapper.BatchCreate(items, 100)
|
||
}
|
||
|
||
func (s *YxCalculationMajorService) BatchUpdate(items []entity.YxCalculationMajor) error {
|
||
return s.mapper.BatchUpdate(items)
|
||
}
|
||
|
||
func (s *YxCalculationMajorService) BatchUpsert(items []entity.YxCalculationMajor, updateColumns []string) error {
|
||
for i := range items {
|
||
if items[i].ID == "" {
|
||
items[i].ID = uuid.New().String()
|
||
}
|
||
}
|
||
return s.mapper.BatchUpsert(items, updateColumns)
|
||
}
|
||
|
||
func (s *YxCalculationMajorService) BatchDelete(ids []string) error {
|
||
return s.mapper.BatchDelete(ids)
|
||
}
|
||
|
||
func (s *YxCalculationMajorService) DeleteByScoreID(scoreID string) error {
|
||
return s.mapper.DeleteByScoreID(scoreID)
|
||
}
|
||
|
||
// 函数名 根据用户查询类型获取专业列表
|
||
// 详细描述(可选)
|
||
//
|
||
// 参数说明:
|
||
//
|
||
// professionalCategory - 专业分类
|
||
// cognitioPolyclinic - 文理文科
|
||
// professionalCategoryChildren - 专业分类子项
|
||
//
|
||
// 返回值说明:
|
||
//
|
||
// 返回值类型 - 返回值描述
|
||
func (s *YxCalculationMajorService) ListByUserQueryType(professionalCategory string, cognitioPolyclinic string,
|
||
professionalCategoryChildren []string) ([]dto.SchoolMajorDTO, error) {
|
||
// 构造查询条件
|
||
query := dto.SchoolMajorQuery{
|
||
MajorType: professionalCategory,
|
||
Category: cognitioPolyclinic,
|
||
// MainSubjects: "器乐",
|
||
// MajorTypeChildren: []string{
|
||
// "音乐教育",
|
||
// },
|
||
}
|
||
years := []string{"2025", "2024"}
|
||
|
||
// 执行院校查询
|
||
majorItems, err := mapper.NewYxSchoolMajorMapper().SelectSchoolMajor(query)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
// 分别收集专业名称和院校代码集合(去重)
|
||
majorNameSet := make(map[string]bool)
|
||
schoolCodeSet := make(map[string]bool)
|
||
for _, dto := range majorItems {
|
||
majorNameSet[dto.MajorName] = true
|
||
schoolCodeSet[dto.SchoolCode] = true
|
||
}
|
||
// 转换为切片用于查询
|
||
majorNames := make([]string, 0, len(majorNameSet))
|
||
schoolCodes := make([]string, 0, len(schoolCodeSet))
|
||
for name := range majorNameSet {
|
||
majorNames = append(majorNames, name)
|
||
}
|
||
for code := range schoolCodeSet {
|
||
schoolCodes = append(schoolCodes, code)
|
||
}
|
||
// 执行查询院校专业的历年数据 - 类似Java中的in查询
|
||
historyItems, err := s.historyMajorEnrollService.ListBySchoolCodesAndMajorNames(
|
||
schoolCodes,
|
||
majorNames,
|
||
query.Category, // 文科/理科
|
||
query.MajorType, // 专业类型
|
||
years, // 年份
|
||
)
|
||
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
|
||
// 构建历史数据映射:schoolCode_majorName_batch_year -> historyItem
|
||
allHistoryMajorEnrollMap := make(map[string]entity.YxHistoryMajorEnroll)
|
||
for _, historyItem := range historyItems {
|
||
key := historyItem.SchoolCode + "_" + historyItem.MajorName + "_" + historyItem.Batch + "_" + historyItem.Year
|
||
allHistoryMajorEnrollMap[key] = historyItem
|
||
}
|
||
// 将历史数据填充到每个专业数据中
|
||
for i, majorItem := range majorItems {
|
||
// 为每个majorItem创建独立的历史数据映射
|
||
historyMap := make(map[string]dto.YxHistoryMajorEnrollDTO)
|
||
|
||
for _, year := range years {
|
||
key := majorItem.SchoolCode + "_" + majorItem.MajorName + "_" + majorItem.Batch + "_" + year
|
||
if historyItem, ok := allHistoryMajorEnrollMap[key]; ok {
|
||
// 类型转换:entity -> dto
|
||
dtoItem := dto.YxHistoryMajorEnrollDTO{
|
||
Year: historyItem.Year,
|
||
EnrollmentCode: historyItem.EnrollmentCode,
|
||
RulesEnrollProbability: historyItem.RulesEnrollProbability,
|
||
ProbabilityOperator: historyItem.ProbabilityOperator,
|
||
AdmissionLine: historyItem.AdmissionLine,
|
||
ControlLine: historyItem.ControlLine,
|
||
// 复制其他需要的字段
|
||
}
|
||
historyMap[year] = dtoItem
|
||
}
|
||
}
|
||
majorItems[i].HistoryMajorEnrollMap = historyMap
|
||
}
|
||
|
||
return majorItems, nil
|
||
}
|
||
|
||
// 函数名 给专业列表计算录取率
|
||
// 详细描述(可选)
|
||
//
|
||
// 参数说明:
|
||
//
|
||
// schoolMajorDTOList - 专业列表
|
||
// professionalCategory - 专业分类
|
||
// cognitioPolyclinic - 文理文科
|
||
// professionalCategoryChildren - 专业分类子项
|
||
//
|
||
// 返回值说明:
|
||
//
|
||
// 返回值类型 - 返回值描述
|
||
func (s *YxCalculationMajorService) CheckEnrollProbability(schoolMajorDTOList *[]dto.SchoolMajorDTO, userScoreVO vo.UserScoreVO) error {
|
||
|
||
return nil
|
||
}
|