diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/controller/MiniMajorController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/controller/MiniMajorController.java index a4058be..b8e4d8c 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/controller/MiniMajorController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/controller/MiniMajorController.java @@ -2,19 +2,34 @@ package org.jeecg.modules.mini.controller; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang.StringUtils; +import org.apache.shiro.SecurityUtils; import org.jeecg.common.api.vo.Result; +import org.jeecg.common.system.vo.LoginUser; +import org.jeecg.common.util.AssertUtils; import org.jeecg.common.util.RedisUtil; +import org.jeecg.modules.mini.service.MiniTestCulturalService; +import org.jeecg.modules.web.dto.ArtCalculateInvestmentDTO; import org.jeecg.modules.web.dto.ArtRecommendMajorBaseDTO; +import org.jeecg.modules.web.vo.QueryCalculateInvestmentVO; import org.jeecg.modules.web.vo.QueryRecommendMajorVO; +import org.jeecg.modules.yx.constant.YxConstant; +import org.jeecg.modules.yx.entity.YxSchoolMajor; +import org.jeecg.modules.yx.entity.YxUserScore; import org.jeecg.modules.yx.service.*; +import org.jeecg.modules.yx.util.ScoreUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import javax.annotation.Resource; +import java.math.BigDecimal; import java.util.*; /** @@ -33,6 +48,12 @@ public class MiniMajorController { private IYxCalculationMajorService yxCalculationMajorService; @Autowired private RedisUtil redisUtil; + @Resource + private MiniTestCulturalService testCulturalService; + @Resource + private IYxSchoolMajorService yxSchoolMajorService; + @Resource + private IYxUserScoreService yxUserScoreService; @ApiOperation(value = "小程序端-智能推荐") @GetMapping("/recommendMajor/aiAuto") @@ -41,6 +62,11 @@ public class MiniMajorController { return Result.OK(artRecommendMajorBaseDTO); } + @GetMapping(value = "/groupByBatchNumber") + public Result groupByBatchNumber(QueryRecommendMajorVO queryRecommendMajorVO){ + return Result.OK(yxCalculationMajorService.groupByBatchNumber(queryRecommendMajorVO)); + } + @GetMapping(value = "/recommendMajor/page") public Result recommendMajorPage(QueryRecommendMajorVO queryRecommendMajorVO) { return Result.OK(yxCalculationMajorService.recommendMajorPage(queryRecommendMajorVO)); @@ -109,4 +135,143 @@ public class MiniMajorController { return Result.OK(dataList); } + @ApiOperation(value = "文化分测算") + @GetMapping(value = "/testCultural") + public Result testCultural(QueryRecommendMajorVO queryRecommendMajorVO) { + LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + //根据 院校代码,获取 院校的招生专业,计算各专业的录取分数 + String schoolCode = queryRecommendMajorVO.getSchoolCode(); + String year = queryRecommendMajorVO.getYear(); + AssertUtils.notNull(loginUser, "未获取到登录信息"); + AssertUtils.notNull(year, "请选择年份"); + return Result.OK(testCulturalService.testCultural(schoolCode, year)); + } + + @ApiOperation(value = "投档分测算") + @GetMapping("/calculateInvestment") + public Result calculateInvestment(QueryCalculateInvestmentVO queryCalculateInvestmentVO) { + BigDecimal culturalScore = new BigDecimal(queryCalculateInvestmentVO.getCulturalScore()); + BigDecimal professionalScore = new BigDecimal(queryCalculateInvestmentVO.getProfessionalScore()); + //获取 院校专业信息列表,录取方式notnull + LambdaQueryWrapper yxSchoolMajorLambdaQueryWrapper = new LambdaQueryWrapper<>(); + yxSchoolMajorLambdaQueryWrapper.isNotNull(YxSchoolMajor::getRulesEnrollProbability); + //字段匹配: batch 批次,category 文理分科,majorType 专业类型 + if (!"高职高专".equals(queryCalculateInvestmentVO.getBatch())) { + yxSchoolMajorLambdaQueryWrapper.ne(YxSchoolMajor::getBatch, "高职高专"); + } else { + yxSchoolMajorLambdaQueryWrapper.eq(YxSchoolMajor::getBatch, queryCalculateInvestmentVO.getBatch()); + } + + yxSchoolMajorLambdaQueryWrapper.eq(StringUtils.isNotBlank(queryCalculateInvestmentVO.getCategory()), YxSchoolMajor::getCategory, queryCalculateInvestmentVO.getCategory()); + yxSchoolMajorLambdaQueryWrapper.eq(StringUtils.isNotBlank(queryCalculateInvestmentVO.getProfessionalCategory()), YxSchoolMajor::getMajorType, queryCalculateInvestmentVO.getProfessionalCategory()); + yxSchoolMajorLambdaQueryWrapper.orderByDesc(YxSchoolMajor::getRulesEnrollProbabilitySx); + List calculateInvestmentDTOList = new ArrayList<>(); + Map rulesEnrollProbabilityMap=new HashMap<>(); + rulesEnrollProbabilityMap.put("专过文排","专过文排"); + rulesEnrollProbabilityMap.put("文*0.8+专*0.5","文8专2"); + rulesEnrollProbabilityMap.put("文*0.7+专*0.75","文7专3"); + rulesEnrollProbabilityMap.put("文*0.6+专*1","文6专4"); + rulesEnrollProbabilityMap.put("文*0.5+专*1.25","文5专5"); + if (!"体育类".equals(queryCalculateInvestmentVO.getProfessionalCategory())) { + //非体育类 + List rulesEnrollProbabilityList = null; + if ("高职高专".equals(queryCalculateInvestmentVO.getBatch())) { + rulesEnrollProbabilityList = Arrays.asList("文*0.5+专*1.25"); + }else{ + rulesEnrollProbabilityList = Arrays.asList("文*0.8+专*0.5", "文*0.7+专*0.75", "文*0.6+专*1", "文*0.5+专*1.25", "专过文排"); + } + + yxSchoolMajorLambdaQueryWrapper.in(YxSchoolMajor::getRulesEnrollProbability, rulesEnrollProbabilityList); + List schooMajorList = yxSchoolMajorService.list(yxSchoolMajorLambdaQueryWrapper); + BigDecimal wenhuaBili = null; + BigDecimal zhuanyeBili = null; + ArtCalculateInvestmentDTO artCalculateInvestmentDTO = null; + for (String probabilityOperator : rulesEnrollProbabilityList) { + artCalculateInvestmentDTO = new ArtCalculateInvestmentDTO(); + if (probabilityOperator.equals("专过文排")) { + artCalculateInvestmentDTO.setRulesEnrollProbability(rulesEnrollProbabilityMap.get(probabilityOperator)); + artCalculateInvestmentDTO.setProbabilityOperator("文*1"); + artCalculateInvestmentDTO.setScore(culturalScore); + artCalculateInvestmentDTO.setSchoolNum((int) schooMajorList.stream().filter(s->s.getRulesEnrollProbability().equals("专过文排")).count()); + calculateInvestmentDTOList.add(artCalculateInvestmentDTO); + } else { + wenhuaBili = null; + zhuanyeBili = null; + String[] operators = probabilityOperator.split("\\+"); + for (String operator : operators) { + if (operator.contains("文")) { + wenhuaBili = new BigDecimal(operator.split("\\*")[1]); + } + if (operator.contains("专")) { + zhuanyeBili = new BigDecimal(operator.split("\\*")[1]); + } + } + if (wenhuaBili == null || zhuanyeBili == null) { + wenhuaBili = YxConstant.bigDecimal100; + zhuanyeBili = YxConstant.bigDecimal100; + } + artCalculateInvestmentDTO = new ArtCalculateInvestmentDTO(); + artCalculateInvestmentDTO.setRulesEnrollProbability(rulesEnrollProbabilityMap.get(probabilityOperator)); + artCalculateInvestmentDTO.setProbabilityOperator(probabilityOperator); + artCalculateInvestmentDTO.setScore((culturalScore.multiply(wenhuaBili)).add((professionalScore.multiply(zhuanyeBili)))); + artCalculateInvestmentDTO.setSchoolNum((int) schooMajorList.stream().filter(s->s.getProbabilityOperator().contains(probabilityOperator)).count()); + calculateInvestmentDTOList.add(artCalculateInvestmentDTO); + } + } + } else { + List schooMajorList = yxSchoolMajorService.list(yxSchoolMajorLambdaQueryWrapper); + try { + if (CollectionUtils.isEmpty(schooMajorList)) { + return Result.OK(); + } + ArtCalculateInvestmentDTO artCalculateInvestmentDTO = null; + Integer schoolNum = 0; + //遍历 院校专业列表,将录取方式,院校代码储存起来 + //map,key:录取方式,value: array[院校代码] + Map> maps = new LinkedHashMap<>(); + Set schoolCodeSet = null; + for (YxSchoolMajor yxSchoolMajor : schooMajorList) { + schoolCodeSet = maps.getOrDefault(yxSchoolMajor.getRulesEnrollProbability(), new HashSet<>()); + schoolCodeSet.add(yxSchoolMajor.getSchoolCode()); + maps.put(yxSchoolMajor.getRulesEnrollProbability(), schoolCodeSet); + } + if (maps.isEmpty()) { + return Result.OK(); + } + //根据录取方式,计算折合分数 + for (String rulesEnrollProbability : maps.keySet()) { + Optional any = schooMajorList.stream().filter(s -> s.getRulesEnrollProbability().equals(rulesEnrollProbability)).findAny(); + if (any.isPresent()) { + YxSchoolMajor yxSchoolMajor = any.get(); + artCalculateInvestmentDTO = new ArtCalculateInvestmentDTO(); + artCalculateInvestmentDTO.setSchoolNum(maps.get(rulesEnrollProbability).size()); + artCalculateInvestmentDTO.setRulesEnrollProbability(yxSchoolMajor.getRulesEnrollProbabilitySx()); + artCalculateInvestmentDTO.setProbabilityOperator(yxSchoolMajor.getProbabilityOperator()); + artCalculateInvestmentDTO.setScore(ScoreUtil.convertIntoScore(rulesEnrollProbability, culturalScore, professionalScore, null, yxSchoolMajor.getProbabilityOperator())); + calculateInvestmentDTOList.add(artCalculateInvestmentDTO); + } + } + } catch (Exception e) { + return Result.error("计算折合分出错,请联系管理员"); + } + } + return Result.OK(calculateInvestmentDTOList); + } + + @ApiOperation(value = "根据批次及专业类别获取专业列表") + @GetMapping(value = "/schoolMajorListByBatchAndMajorType") + public Result schoolMajorListByBatchAndMajorType(QueryRecommendMajorVO queryRecommendMajorVO){ + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(YxSchoolMajor::getBatch,queryRecommendMajorVO.getBatch()); + if (StringUtils.isNotBlank(queryRecommendMajorVO.getProfessionalCategory())) { + lambdaQueryWrapper.eq(YxSchoolMajor::getMajorType,queryRecommendMajorVO.getProfessionalCategory()); + }else{ + YxUserScore activeCurrentUserScore = yxUserScoreService.getActiveCurrentUserScore(); + lambdaQueryWrapper.eq(YxSchoolMajor::getMajorType,activeCurrentUserScore.getProfessionalCategory()); + } + lambdaQueryWrapper.isNotNull(YxSchoolMajor::getRulesEnrollProbability); + lambdaQueryWrapper.groupBy(YxSchoolMajor::getMajorCode); + List yxSchoolMajorList = yxSchoolMajorService.list(lambdaQueryWrapper); + return Result.OK(yxSchoolMajorList); + } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/dto/ArtRecommendMajorBaseDTO.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/dto/ArtRecommendMajorBaseDTO.java index 6ff7f6e..8f6bc16 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/dto/ArtRecommendMajorBaseDTO.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/dto/ArtRecommendMajorBaseDTO.java @@ -6,6 +6,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; +import java.util.ArrayList; import java.util.List; /** diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/mapper/YxCalculationMajorMapper.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/mapper/YxCalculationMajorMapper.java index efb7a95..dc91c5e 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/mapper/YxCalculationMajorMapper.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/mapper/YxCalculationMajorMapper.java @@ -22,4 +22,6 @@ public interface YxCalculationMajorMapper extends BaseMapper void insertBatch(@Param("tableName") String tableName,@Param("scoreId")String scoreId,@Param("list") List list); void insertBatchNew(@Param("tableName") String tableName,@Param("scoreId")String scoreId,@Param("list") List list); + + List groupByBatchNumber(@Param(value = "tableName")String tableName,@Param("queryvo") QueryRecommendMajorVO queryRecommendMajorVO); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/mapper/xml/YxCalculationMajorMapper.xml b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/mapper/xml/YxCalculationMajorMapper.xml index bc99a86..e613300 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/mapper/xml/YxCalculationMajorMapper.xml +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/mapper/xml/YxCalculationMajorMapper.xml @@ -403,5 +403,162 @@ ORDER BY enroll_probability DESC + + diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/service/IYxCalculationMajorService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/service/IYxCalculationMajorService.java index 6b3b647..4232729 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/service/IYxCalculationMajorService.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/service/IYxCalculationMajorService.java @@ -61,4 +61,5 @@ public interface IYxCalculationMajorService extends IService */ void copyNew(String oldScoreId, String newScoreId, String oldCalculationMajorTableName, String newCalculationMajorTableName); + List groupByBatchNumber(QueryRecommendMajorVO queryRecommendMajorVO); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/service/impl/YxCalculationMajorServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/service/impl/YxCalculationMajorServiceImpl.java index f86b3f3..54ea28e 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/service/impl/YxCalculationMajorServiceImpl.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/service/impl/YxCalculationMajorServiceImpl.java @@ -1,6 +1,7 @@ package org.jeecg.modules.yx.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.commons.collections.CollectionUtils; @@ -173,7 +174,6 @@ public class YxCalculationMajorServiceImpl extends ServiceImpl recommendMajorList = baseMapper.recommendMajorList(activeCurrentUserScore.getCalculationTableName(),queryRecommendMajorVO); ArtRecommendMajorBaseDTO artRecommendMajorBaseDTO = this.checkLevelNum(recommendMajorList); @@ -357,6 +357,53 @@ public class YxCalculationMajorServiceImpl extends ServiceImpl groupByBatchNumber(QueryRecommendMajorVO queryRecommendMajorVO) { + YxUserScore activeCurrentUserScore = yxUserScoreService.getActiveCurrentUserScore(); + queryRecommendMajorVO.setScoreId(activeCurrentUserScore.getId()); + //文理分科 + queryRecommendMajorVO.setCognitioPolyclinic(activeCurrentUserScore.getCognitioPolyclinic()); + //专业类别 + queryRecommendMajorVO.setProfessionalCategory(activeCurrentUserScore.getProfessionalCategory()); + //有子级专业 + if (StringUtils.isNotBlank(activeCurrentUserScore.getProfessionalCategoryChildren()) && !"高职高专".equals(queryRecommendMajorVO.getBatch())) { + queryRecommendMajorVO.setPCategoryChildrenList(new ArrayList<>(Arrays.asList(activeCurrentUserScore.getProfessionalCategoryChildren().split(",")))); + if("表演类".equals(activeCurrentUserScore.getProfessionalCategory())){ + queryRecommendMajorVO.getPCategoryChildrenList().add("兼报"); + } + } + //标签类别 + if (StringUtils.isNotBlank(queryRecommendMajorVO.getTagsStrs())) { + queryRecommendMajorVO.setTagsList(Arrays.asList(queryRecommendMajorVO.getTagsStrs().split(","))); + } + //院校类型 + if (StringUtils.isNotBlank(queryRecommendMajorVO.getSchoolNatureStrs())) { + queryRecommendMajorVO.setSchoolNatureList(Arrays.asList(queryRecommendMajorVO.getSchoolNatureStrs().split(","))); + } + //院校地区 + if (StringUtils.isNotBlank(queryRecommendMajorVO.getProvince())) { + queryRecommendMajorVO.setAddressList(Arrays.asList(queryRecommendMajorVO.getProvince().split(","))); + } + //科研教学 + if (StringUtils.isNotBlank(queryRecommendMajorVO.getKyjxStrs())) { + queryRecommendMajorVO.setKyjxList(Arrays.asList(queryRecommendMajorVO.getKyjxStrs().split(","))); + } + //录取方式 + String rulesEnrollProbability = queryRecommendMajorVO.getRulesEnrollProbability(); + if (StringUtils.isNotBlank(rulesEnrollProbability)) { + queryRecommendMajorVO.setRulesEnrollProbabilityList(Arrays.asList(rulesEnrollProbability.split(","))); + } + //获取推荐志愿信息service + List haveMajorList = baseMapper.groupByBatchNumber(activeCurrentUserScore.getCalculationTableName(),queryRecommendMajorVO); + /*List calculationMajorList = baseMapper.selectList(new LambdaQueryWrapper() + .select(YxCalculationMajor::getBatch,YxCalculationMajor::getEnrollProbability) + .eq(YxCalculationMajor::getScoreId, activeCurrentUserScore.getId()) + .gt(YxCalculationMajor::getEnrollProbability,60) + .groupBy(YxCalculationMajor::getBatch)); + List haveMajorList=new ArrayList<>();*/ + return haveMajorList; + } + private void setSchoolTagsList(List recommendMajorList) { if (CollectionUtils.isNotEmpty(recommendMajorList)) { Set schoolIdSet = recommendMajorList.stream().map(RecommendMajorDTO::getSchoolId).collect(Collectors.toSet());