添加按批次对比分析两个接口 #5
|
@ -1,8 +1,11 @@
|
||||||
package org.jeecg.modules.controller;
|
package org.jeecg.modules.controller;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.jeecg.common.api.vo.Result;
|
import org.jeecg.common.api.vo.Result;
|
||||||
|
import org.jeecg.modules.dto.getRateByEntryDateDto;
|
||||||
|
import org.jeecg.modules.dto.getRateByMajorAndLastestBatchDto;
|
||||||
import org.jeecg.modules.entity.Cet_6;
|
import org.jeecg.modules.entity.Cet_6;
|
||||||
import org.jeecg.modules.service.CenterService;
|
import org.jeecg.modules.service.CenterService;
|
||||||
import org.jeecg.modules.service.ICet_4Service;
|
import org.jeecg.modules.service.ICet_4Service;
|
||||||
|
@ -12,6 +15,7 @@ import org.springframework.cache.annotation.Cacheable;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import javax.validation.Valid;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/cet")
|
@RequestMapping("/cet")
|
||||||
|
@ -26,6 +30,8 @@ public class CenterController {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 统计四级表和六级表中存在的年级
|
* 统计四级表和六级表中存在的年级
|
||||||
|
*
|
||||||
|
* @return {@link Result }<{@link JSONObject }>
|
||||||
*/
|
*/
|
||||||
@GetMapping(value = "/getEntrydate")
|
@GetMapping(value = "/getEntrydate")
|
||||||
public Result<JSONObject> getEntrydate() {
|
public Result<JSONObject> getEntrydate() {
|
||||||
|
@ -58,6 +64,11 @@ public class CenterController {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 依据学院和年级获取四级和六级通过数据
|
* 依据学院和年级获取四级和六级通过数据
|
||||||
|
*
|
||||||
|
* @param college
|
||||||
|
* @param major
|
||||||
|
* @param entrydate
|
||||||
|
* @return {@link Result }<{@link JSONObject }>
|
||||||
*/
|
*/
|
||||||
@GetMapping(value = "/getData")
|
@GetMapping(value = "/getData")
|
||||||
// @Cacheable(cacheNames = "getData", key = "#college+#major+#entrydate")
|
// @Cacheable(cacheNames = "getData", key = "#college+#major+#entrydate")
|
||||||
|
@ -101,16 +112,42 @@ public class CenterController {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/getRateByBatch")
|
@GetMapping("/getRateByBatch")
|
||||||
public Result<JSONObject> getRateByBatch(@RequestParam("batch")String batch, @RequestParam("college") String college, @RequestParam("level")String level){
|
public Result<JSONObject> getRateByBatch(@RequestParam("batch")String batch, @RequestParam("college") String college, @RequestParam("level")String level){
|
||||||
if (level.equals("cet4")){
|
if (level.equals("cet4")){
|
||||||
return cet4Service.getRateByBatch(college,batch);
|
return cet4Service.getRateByBatch(college,batch);
|
||||||
}else return null;
|
}else return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/getRateByMajor")
|
@PostMapping("/getRateByMajor")
|
||||||
public Result<JSONObject> getRateByMajor(@RequestBody JSONObject webData){
|
public Result<JSONObject> getRateByMajor(@RequestBody JSONObject webData){
|
||||||
return cet4Service.getRateByMajor(webData);
|
return cet4Service.getRateByMajor(webData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param getRateByMajorAndLastestBatchParam
|
||||||
|
* @return {@link Result }<{@link JSONObject }>
|
||||||
|
*/
|
||||||
|
@PostMapping("/getRateByMajorAndLastestBatch")
|
||||||
|
@ApiOperation(value = "根据专业获取每个年级最新批次的通过率")
|
||||||
|
public Result<JSONObject> getRateByMajorAndLastestBatch(@Valid @RequestBody getRateByMajorAndLastestBatchDto getRateByMajorAndLastestBatchParam) {
|
||||||
|
log.info("根据专业获取最新批次的通过率入参:{}", JSONObject.toJSONString(getRateByMajorAndLastestBatchParam));
|
||||||
|
return cet4Service.getRateByMajorAndLastestBatch(getRateByMajorAndLastestBatchParam);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param getRateByEntryDateDtoParams
|
||||||
|
* @return {@link Result }<{@link JSONObject }>
|
||||||
|
*/
|
||||||
|
@PostMapping( "/getRateByEntryDate")
|
||||||
|
@ApiOperation(value = "根据学院/专业的每个年级的通过率")
|
||||||
|
public Result<JSONObject> getRateByEntryDate(@RequestBody getRateByEntryDateDto getRateByEntryDateDtoParams) {
|
||||||
|
log.info("根据学院/专业的每个年级的通过率: {}", JSONObject.toJSONString(getRateByEntryDateDtoParams));
|
||||||
|
return cet4Service.getRateByEntryDate(getRateByEntryDateDtoParams);
|
||||||
|
}
|
||||||
@GetMapping("/getTest")
|
@GetMapping("/getTest")
|
||||||
public Result<JSONObject> getTest() {
|
public Result<JSONObject> getTest() {
|
||||||
return centerService.getTest();
|
return centerService.getTest();
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
package org.jeecg.modules.dto;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
|
||||||
|
@ApiModel(value = "根据专业获取每个年级最新批次的通过率")
|
||||||
|
@Data
|
||||||
|
public class getRateByEntryDateDto {
|
||||||
|
// @ApiModelProperty(value = "年级")
|
||||||
|
// @NotBlank
|
||||||
|
// String entrydate;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "学院")
|
||||||
|
@NotBlank
|
||||||
|
private String college;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "专业")
|
||||||
|
private String major;
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
package org.jeecg.modules.dto;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author NanYu
|
||||||
|
* @date 2024/10/13
|
||||||
|
*/
|
||||||
|
@ApiModel(value = "根据专业获取每个年级最新批次的通过率")
|
||||||
|
@Data
|
||||||
|
public class getRateByMajorAndLastestBatchDto implements Serializable {
|
||||||
|
@ApiModelProperty(value = "学院")
|
||||||
|
@NotBlank
|
||||||
|
private String college;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "专业")
|
||||||
|
private String major;
|
||||||
|
}
|
|
@ -4,6 +4,7 @@ import org.apache.ibatis.annotations.Param;
|
||||||
import org.jeecg.modules.entity.Cet_4;
|
import org.jeecg.modules.entity.Cet_4;
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -13,5 +14,6 @@ import java.util.List;
|
||||||
* @Version: V1.0
|
* @Version: V1.0
|
||||||
*/
|
*/
|
||||||
public interface Cet_4Mapper extends BaseMapper<Cet_4> {
|
public interface Cet_4Mapper extends BaseMapper<Cet_4> {
|
||||||
|
Date lastestDate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
<mapper namespace="org.jeecg.modules.mapper.Cet_4Mapper">
|
<mapper namespace="org.jeecg.modules.mapper.Cet_4Mapper">
|
||||||
|
<select id="lastestDate" resultType="java.util.Date">
|
||||||
|
SELECT MAX(batch) AS latest_batch FROM cet_4;
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
|
@ -3,6 +3,8 @@ package org.jeecg.modules.service;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import org.jeecg.common.api.vo.Result;
|
import org.jeecg.common.api.vo.Result;
|
||||||
|
import org.jeecg.modules.dto.getRateByEntryDateDto;
|
||||||
|
import org.jeecg.modules.dto.getRateByMajorAndLastestBatchDto;
|
||||||
import org.jeecg.modules.entity.Cet_4;
|
import org.jeecg.modules.entity.Cet_4;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
|
||||||
|
@ -25,4 +27,8 @@ public interface ICet_4Service extends IService<Cet_4> {
|
||||||
|
|
||||||
Result<JSONObject> getDataByStudent(JSONObject jsonObject);
|
Result<JSONObject> getDataByStudent(JSONObject jsonObject);
|
||||||
boolean cleanData();
|
boolean cleanData();
|
||||||
|
|
||||||
|
Result<JSONObject> getRateByMajorAndLastestBatch(getRateByMajorAndLastestBatchDto getRateByMajorAndLastestBatchParam);
|
||||||
|
|
||||||
|
Result<JSONObject> getRateByEntryDate(getRateByEntryDateDto getRateByEntryDateDtoParams);
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
import org.jeecg.common.api.vo.Result;
|
import org.jeecg.common.api.vo.Result;
|
||||||
|
import org.jeecg.modules.dto.getRateByEntryDateDto;
|
||||||
|
import org.jeecg.modules.dto.getRateByMajorAndLastestBatchDto;
|
||||||
import org.jeecg.modules.entity.Cet4_major;
|
import org.jeecg.modules.entity.Cet4_major;
|
||||||
import org.jeecg.modules.entity.CetClean;
|
import org.jeecg.modules.entity.CetClean;
|
||||||
import org.jeecg.modules.entity.Cet_4;
|
import org.jeecg.modules.entity.Cet_4;
|
||||||
|
@ -22,6 +24,7 @@ import org.springframework.stereotype.Service;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
import java.text.DecimalFormat;
|
import java.text.DecimalFormat;
|
||||||
import java.text.ParseException;
|
import java.text.ParseException;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
|
@ -553,6 +556,123 @@ public class Cet_4ServiceImpl extends ServiceImpl<Cet_4Mapper, Cet_4> implements
|
||||||
return remove(cet4Wrapper);
|
return remove(cet4Wrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Result<JSONObject> getRateByMajorAndLastestBatch(getRateByMajorAndLastestBatchDto getRateByMajorAndLastestBatchParam) {
|
||||||
|
|
||||||
|
LambdaQueryWrapper<Cet_4> cet4Wrapper = new LambdaQueryWrapper<>();
|
||||||
|
|
||||||
|
Date lastestBatch = cet4Mapper.lastestDate();
|
||||||
|
cet4Wrapper.eq(Cet_4::getCollege, getRateByMajorAndLastestBatchParam.getCollege());
|
||||||
|
cet4Wrapper.eq(Cet_4::getBatch, lastestBatch);
|
||||||
|
//根据前端数据是否传major 判断是否添加 sql 条件
|
||||||
|
if (getRateByMajorAndLastestBatchParam.getMajor() != null && !getRateByMajorAndLastestBatchParam.getMajor().isEmpty()) {
|
||||||
|
cet4Wrapper.eq(Cet_4::getMajorname, getRateByMajorAndLastestBatchParam.getMajor());
|
||||||
|
}
|
||||||
|
long allStudentCount = cet4Mapper.selectCount(cet4Wrapper);
|
||||||
|
//创建所以年级的list
|
||||||
|
List<Map<String, Object>> maps = cet4Mapper.selectMaps(cet4Wrapper);
|
||||||
|
cet4Wrapper.select(Cet_4::getEntrydate).groupBy(Cet_4::getEntrydate);
|
||||||
|
List<Map<String, Object>> entryDateList = cet4Mapper.selectMaps(cet4Wrapper);
|
||||||
|
|
||||||
|
JSONArray ansArray = new JSONArray();
|
||||||
|
for (Map<String, Object> Date : entryDateList) {
|
||||||
|
// 统计当前 entryDate 下的通过人数
|
||||||
|
//所有参加过四级考试的学生
|
||||||
|
Map<String, Integer> attendMap4 = new HashMap<>();
|
||||||
|
String currentEntryDate = (String) Date.get("entrydate");
|
||||||
|
for (Map<String, Object> map : maps) {
|
||||||
|
String studentEntryDate = (String) map.get("entrydate");
|
||||||
|
String str = (String) map.get("id");
|
||||||
|
// 仅处理当前 entryDate 下的学生数据
|
||||||
|
if (currentEntryDate.equals(studentEntryDate)) {
|
||||||
|
if ((int) map.get("result") >= 425) {
|
||||||
|
attendMap4.put(str, 1);
|
||||||
|
} else {
|
||||||
|
if (!attendMap4.containsKey(str)) {//排除已经通过的人
|
||||||
|
attendMap4.put(str, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//累计通过的人数
|
||||||
|
int passNumber = (int) attendMap4.values().stream().filter(value -> value == 1).count();
|
||||||
|
//每个年级的累计通过率保留三位小数
|
||||||
|
double passRate = passNumber / (double) allStudentCount;
|
||||||
|
// passRate = passRate * 100;
|
||||||
|
//保留三位小数
|
||||||
|
DecimalFormat df = new DecimalFormat("#.###");
|
||||||
|
JSONObject json = new JSONObject();
|
||||||
|
json.put("entryDate", currentEntryDate);
|
||||||
|
json.put("passRate", df.format(passRate));
|
||||||
|
ansArray.add(json);
|
||||||
|
|
||||||
|
}
|
||||||
|
JSONObject result = new JSONObject();
|
||||||
|
result.put("data", ansArray);
|
||||||
|
|
||||||
|
return Result.ok(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Result<JSONObject> getRateByEntryDate(getRateByEntryDateDto getRateByEntryDateDtoParams) {
|
||||||
|
LambdaQueryWrapper<Cet_4> cet4Wrapper = new LambdaQueryWrapper<>();
|
||||||
|
cet4Wrapper.eq(Cet_4::getCollege, getRateByEntryDateDtoParams.getCollege());
|
||||||
|
//根据前端数据是否传major 判断是否添加 sql 条件
|
||||||
|
if (getRateByEntryDateDtoParams.getMajor() != null && !getRateByEntryDateDtoParams.getMajor().isEmpty()) {
|
||||||
|
cet4Wrapper.eq(Cet_4::getMajorname, getRateByEntryDateDtoParams.getMajor());
|
||||||
|
}
|
||||||
|
//创建所以年级的list
|
||||||
|
List<Map<String, Object>> maps = cet4Mapper.selectMaps(cet4Wrapper);
|
||||||
|
cet4Wrapper.select(Cet_4::getEntrydate).groupBy(Cet_4::getEntrydate);
|
||||||
|
List<Map<String, Object>> entryDateList = cet4Mapper.selectMaps(cet4Wrapper);
|
||||||
|
|
||||||
|
JSONArray ansArray = new JSONArray();
|
||||||
|
for (Map<String, Object> Date : entryDateList) {
|
||||||
|
//当前年纪的总人数
|
||||||
|
LambdaQueryWrapper<Cet_4> cet4StudentCount = new LambdaQueryWrapper<>();
|
||||||
|
cet4StudentCount.eq(Cet_4::getCollege, getRateByEntryDateDtoParams.getCollege())
|
||||||
|
.eq(Cet_4::getEntrydate, Date.get("entrydate"));
|
||||||
|
if (getRateByEntryDateDtoParams.getMajor() != null && !getRateByEntryDateDtoParams.getMajor().isEmpty()) {
|
||||||
|
cet4StudentCount.eq(Cet_4::getMajorname, getRateByEntryDateDtoParams.getMajor());
|
||||||
|
}
|
||||||
|
long allStudentCount = cet4Mapper.selectCount(cet4StudentCount);
|
||||||
|
// 统计当前 entryDate 下的通过人数
|
||||||
|
//所有参加过四级考试的学生
|
||||||
|
Map<String, Integer> attendMap4 = new HashMap<>();
|
||||||
|
String currentEntryDate = (String) Date.get("entrydate");
|
||||||
|
for (Map<String, Object> map : maps) {
|
||||||
|
String studentEntryDate = (String) map.get("entrydate");
|
||||||
|
String str = (String) map.get("id");
|
||||||
|
// 仅处理当前 entryDate 下的学生数据
|
||||||
|
if (currentEntryDate.equals(studentEntryDate)) {
|
||||||
|
if ((int) map.get("result") >= 425) {
|
||||||
|
attendMap4.put(str, 1);
|
||||||
|
} else {
|
||||||
|
if (!attendMap4.containsKey(str)) {//排除已经通过的人
|
||||||
|
attendMap4.put(str, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//累计通过的人数
|
||||||
|
int passNumber = (int) attendMap4.values().stream().filter(value -> value == 1).count();
|
||||||
|
//每个年级的累计通过率保留三位小数
|
||||||
|
double passRate = passNumber / (double) allStudentCount;
|
||||||
|
//百分比
|
||||||
|
passRate = passRate * 100;
|
||||||
|
//保留两位小数
|
||||||
|
DecimalFormat df = new DecimalFormat("#.##");
|
||||||
|
JSONObject json = new JSONObject();
|
||||||
|
json.put("entryDate", currentEntryDate);
|
||||||
|
json.put("passRate", df.format(passRate));
|
||||||
|
ansArray.add(json);
|
||||||
|
|
||||||
|
}
|
||||||
|
JSONObject result = new JSONObject();
|
||||||
|
result.put("data", ansArray);
|
||||||
|
return Result.ok(result);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 依据学生id和姓名获取四级数据
|
* 依据学生id和姓名获取四级数据
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue