This commit is contained in:
zhouwentao 2024-05-22 15:06:24 +08:00
parent a5727d175d
commit e4cd87a92c
4 changed files with 309 additions and 8 deletions

View File

@ -0,0 +1,154 @@
package org.jeecg.modules.mini.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.mini.service.MiniTestCulturalService;
import org.jeecg.modules.web.dto.ArtCalculateInvestmentDTO;
import org.jeecg.modules.web.vo.QueryCalculateInvestmentVO;
import org.jeecg.modules.yx.constant.YxConstant;
import org.jeecg.modules.yx.entity.YxSchoolMajor;
import org.jeecg.modules.yx.service.IYxCalculationMajorService;
import org.jeecg.modules.yx.service.IYxSchoolMajorService;
import org.jeecg.modules.yx.util.ScoreUtil;
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.*;
/**
* @Description 艺术类接口
* @Author ZhouWenTao
* @Date 2023/9/18 17:16
*/
@Api(tags = "艺术类查询")
@RestController
@RequestMapping(value = "/mini/recommendMajor")
public class MiniRecommendMajorController {
@Resource
IYxSchoolMajorService yxSchoolMajorService;
@Resource
IYxCalculationMajorService yxCalculationMajorService;
@Resource
MiniTestCulturalService testCulturalService;
@ApiOperation(value = "投档分测算")
@GetMapping("/calculateInvestment")
public Result<?> calculateInvestment(QueryCalculateInvestmentVO queryCalculateInvestmentVO) {
BigDecimal culturalScore = new BigDecimal(queryCalculateInvestmentVO.getCulturalScore());
BigDecimal professionalScore = new BigDecimal(queryCalculateInvestmentVO.getProfessionalScore());
//获取 院校专业信息列表,录取方式notnull
LambdaQueryWrapper<YxSchoolMajor> 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<ArtCalculateInvestmentDTO> calculateInvestmentDTOList = new ArrayList<>();
Map<String,String> 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<String> 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<YxSchoolMajor> 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<YxSchoolMajor> schooMajorList = yxSchoolMajorService.list(yxSchoolMajorLambdaQueryWrapper);
try {
if (CollectionUtils.isEmpty(schooMajorList)) {
return Result.OK();
}
ArtCalculateInvestmentDTO artCalculateInvestmentDTO = null;
Integer schoolNum = 0;
//遍历 院校专业列表将录取方式院校代码储存起来
//mapkey:录取方式value: array[院校代码]
Map<String, Set<String>> maps = new LinkedHashMap<>();
Set<String> 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<YxSchoolMajor> 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);
}
}

View File

@ -239,10 +239,6 @@ public class YxHistoryMajorEnrollController extends JeecgController<YxHistoryMaj
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequiresPermissions("yx:yx_history_major_enroll:importExcel")
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)

View File

@ -3,6 +3,7 @@ package org.jeecg.modules.yx.controller;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
@ -17,10 +18,13 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.exception.JeecgBootException;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.AssertUtils;
import org.jeecg.modules.yx.constant.YxConstant;
import org.jeecg.modules.yx.dto.LiNianShuJuDTO;
import org.jeecg.modules.yx.dto.SchoolMajorImport3;
import org.jeecg.modules.yx.dto.SchoolMajorLqfsDTO;
import org.jeecg.modules.yx.dto.YxSchoolMajorDTO;
import org.jeecg.modules.yx.entity.*;
import org.jeecg.modules.yx.service.*;
@ -37,6 +41,8 @@ import org.jeecgframework.poi.excel.entity.ImportParams;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -258,10 +264,90 @@ public class YxSchoolMajorController extends JeecgController<YxSchoolMajor, IYxS
}
/**
* 导入刷新专业录取方式
*/
@RequiresPermissions("yx:yx_school_major:importExcel")
@RequestMapping(value = "/importExcelLqfs", method = RequestMethod.POST)
public Result<?> importExcelLqfs(HttpServletRequest request, HttpServletResponse response) {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
// 获取上传文件对象
MultipartFile file = entity.getValue();
ImportParams params = new ImportParams();
params.setTitleRows(2);
params.setHeadRows(1);
params.setNeedSave(true);
long start = System.currentTimeMillis();
int index = 3;
try {
//加载省控线
List<SchoolMajorLqfsDTO> list = ExcelImportUtil.importExcel(file.getInputStream(), SchoolMajorLqfsDTO.class, params);
String a="_";
String key;
List<YxSchoolMajor> yxSchoolMajorList =yxSchoolMajorService.list();
Map<String,YxSchoolMajor> schoolMajorMap = new HashMap<>();
List<YxSchoolMajor> updatesList = new ArrayList<>();
for (YxSchoolMajor item : yxSchoolMajorList) {
index++;
key = item.getSchoolCode()+a+item.getBatch()+a+item.getMajorName()+a+item.getCategory();
schoolMajorMap.put(key,item);
}
YxSchoolMajor yxSchoolMajor;
String probabilityOperator ="";
for (SchoolMajorLqfsDTO item : list) {
index++;
probabilityOperator="";
key = item.getSchoolCode()+a+item.getBatch()+a+item.getMajorName()+a+item.getCategory();
if(StringUtils.isBlank(item.getProbabilityOperatorWen()) && StringUtils.isBlank(item.getProbabilityOperatorZhuan())){
continue;
}
if(StringUtils.isNotBlank(item.getProbabilityOperatorWen())){
probabilityOperator+="文*"+item.getProbabilityOperatorWen();
}
if(StringUtils.isNotBlank(item.getProbabilityOperatorZhuan())){
if(StringUtils.isNotBlank(item.getProbabilityOperatorWen())){
probabilityOperator+="+";
}
probabilityOperator+="专*"+item.getProbabilityOperatorZhuan();
}
yxSchoolMajor = schoolMajorMap.get(key);
yxSchoolMajor.setRulesEnrollProbabilitySx(item.getRulesEnrollProbabilitySx());
yxSchoolMajor.setRulesEnrollProbability(probabilityOperator);
yxSchoolMajor.setProbabilityOperator(probabilityOperator);
updatesList.add(yxSchoolMajor);
}
service.updateBatchById(updatesList);
log.info("消耗时间" + (System.currentTimeMillis() - start) + "毫秒");
return Result.ok("文件导入成功!数据行数:" + list.size());
} catch (Exception e) {
System.out.println("索引:"+index);
String msg = e.getMessage();
log.error(msg, e);
if (msg != null && msg.indexOf("Duplicate entry") >= 0) {
return Result.error("文件导入失败:有重复数据!");
} else {
return Result.error("文件导入失败:" + e.getMessage() + ",行:" + index);
}
} finally {
try {
file.getInputStream().close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return Result.error("文件导入失败!");
}
/**
* 刷新专业信息importExcel1Xz
*/
@RequestMapping(value = "/importExcel1Xz", method = RequestMethod.POST)
/*@RequestMapping(value = "/importExcel1Xz", method = RequestMethod.POST)
public Result<?> importExcel1Xz(HttpServletRequest request, HttpServletResponse response) {
// 获取上传文件对象
File file = new File("C:\\Users\\Denim\\Desktop\\艺体志愿宝数据\\招录限制.xlsx");
@ -460,9 +546,9 @@ public class YxSchoolMajorController extends JeecgController<YxSchoolMajor, IYxS
/**
*//**
* 刷新专业信息
*/
*//*
@RequestMapping(value = "/importExcel1", method = RequestMethod.POST)
public Result<?> importExcel1(HttpServletRequest request, HttpServletResponse response) {
// 获取上传文件对象
@ -730,7 +816,7 @@ public class YxSchoolMajorController extends JeecgController<YxSchoolMajor, IYxS
//service.updateRulesEnrollProbabilityByOldLastYearData();
service.updateRulesEnrollProbabilityByOldLastYearData2();
return Result.OK();
}
}*/

View File

@ -0,0 +1,65 @@
package org.jeecg.modules.yx.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
import java.io.Serializable;
/**
* @author ZhouWenTao
* @create 2024-05-21-20:19
*/
@Data
public class SchoolMajorLqfsDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**学校代码*/
@Excel(name = "学校代码", width = 15)
@ApiModelProperty(value = "学校代码")
private java.lang.String schoolCode;
/**批次*/
@Excel(name = "批次", width = 15)
@ApiModelProperty(value = "批次")
private java.lang.String batch;
/**专业代码*/
@Excel(name = "专业代码", width = 15)
@ApiModelProperty(value = "专业代码")
private java.lang.String enrollmentCode;
/**专业名称*/
@Excel(name = "专业名称", width = 15)
@ApiModelProperty(value = "专业名称")
private java.lang.String majorName;
/**专业类型*/
@Excel(name = "专业类型", width = 15)
@ApiModelProperty(value = "专业类型")
private String majorType;
/**科类(文科/理科)*/
@Excel(name = "科类(文科/理科)", width = 15)
@ApiModelProperty(value = "科类(文科/理科)")
private java.lang.String category;
/**录取方式缩写*/
@Excel(name = "录取方式缩写(用于筛选条件)", width = 15)
@ApiModelProperty(value = "录取方式缩写(用于筛选条件)")
private String rulesEnrollProbabilitySx;
// 学校代码 批次 专业代码 专业名称 专业类型 科类(文科/理科) 计划招生人数 录取方式缩写(用于筛选条件)
// 对外录取方式 对外录取方式运算符() 对外录取方式运算符() 内部录取方式 内部录取方式运算符
/**对外录取方式*/
@Excel(name = "对外录取方式", width = 15)
@ApiModelProperty(value = "对外录取方式")
private java.lang.String rulesEnrollProbability;
/**对外录取方式运算符(文)*/
@Excel(name = "对外录取方式运算符(文)", width = 15)
@ApiModelProperty(value = "对外录取方式运算符(文)")
private java.lang.String probabilityOperatorWen;
/**对外录取方式运算符(专)*/
@Excel(name = "对外录取方式运算符(专)", width = 15)
@ApiModelProperty(value = "对外录取方式运算符(专)")
private java.lang.String probabilityOperatorZhuan;
/**对外录取方式*/
@Excel(name = "内部录取方式", width = 15)
@ApiModelProperty(value = "内部录取方式")
private java.lang.String privateRulesEnrollProbability;
}