diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/controller/CenterController.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/controller/CenterController.java index 40012e5f..e4eeeaa2 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/controller/CenterController.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/controller/CenterController.java @@ -1,8 +1,11 @@ package org.jeecg.modules.controller; import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; 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.service.CenterService; import org.jeecg.modules.service.ICet_4Service; @@ -12,6 +15,7 @@ import org.springframework.cache.annotation.Cacheable; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.validation.Valid; @RestController @RequestMapping("/cet") @@ -26,6 +30,8 @@ public class CenterController { /** * 统计四级表和六级表中存在的年级 + * + * @return {@link Result }<{@link JSONObject }> */ @GetMapping(value = "/getEntrydate") public Result getEntrydate() { @@ -58,6 +64,11 @@ public class CenterController { /** * 依据学院和年级获取四级和六级通过数据 + * + * @param college + * @param major + * @param entrydate + * @return {@link Result }<{@link JSONObject }> */ @GetMapping(value = "/getData") // @Cacheable(cacheNames = "getData", key = "#college+#major+#entrydate") @@ -101,16 +112,42 @@ public class CenterController { return null; } } + @GetMapping("/getRateByBatch") public Result getRateByBatch(@RequestParam("batch")String batch, @RequestParam("college") String college, @RequestParam("level")String level){ if (level.equals("cet4")){ return cet4Service.getRateByBatch(college,batch); }else return null; } + @PostMapping("/getRateByMajor") public Result getRateByMajor(@RequestBody JSONObject webData){ return cet4Service.getRateByMajor(webData); } + + + /** + * @param getRateByMajorAndLastestBatchParam + * @return {@link Result }<{@link JSONObject }> + */ + @PostMapping("/getRateByMajorAndLastestBatch") + @ApiOperation(value = "根据专业获取每个年级最新批次的通过率") + public Result 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 getRateByEntryDate(@RequestBody getRateByEntryDateDto getRateByEntryDateDtoParams) { + log.info("根据学院/专业的每个年级的通过率: {}", JSONObject.toJSONString(getRateByEntryDateDtoParams)); + return cet4Service.getRateByEntryDate(getRateByEntryDateDtoParams); + } @GetMapping("/getTest") public Result getTest() { return centerService.getTest(); diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/dto/getRateByEntryDateDto.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/dto/getRateByEntryDateDto.java new file mode 100644 index 00000000..f787b767 --- /dev/null +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/dto/getRateByEntryDateDto.java @@ -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; +} diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/dto/getRateByMajorAndLastestBatchDto.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/dto/getRateByMajorAndLastestBatchDto.java new file mode 100644 index 00000000..e960725e --- /dev/null +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/dto/getRateByMajorAndLastestBatchDto.java @@ -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; +} diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/mapper/Cet_4Mapper.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/mapper/Cet_4Mapper.java index d0da6328..22280c10 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/mapper/Cet_4Mapper.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/mapper/Cet_4Mapper.java @@ -4,6 +4,7 @@ import org.apache.ibatis.annotations.Param; import org.jeecg.modules.entity.Cet_4; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import java.util.Date; import java.util.List; /** @@ -13,5 +14,6 @@ import java.util.List; * @Version: V1.0 */ public interface Cet_4Mapper extends BaseMapper { + Date lastestDate(); } diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/mapper/xml/Cet_4Mapper.xml b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/mapper/xml/Cet_4Mapper.xml index e16a01b5..be3e8e97 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/mapper/xml/Cet_4Mapper.xml +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/mapper/xml/Cet_4Mapper.xml @@ -1,4 +1,7 @@ + \ No newline at end of file diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/ICet_4Service.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/ICet_4Service.java index 46cf1ff1..19b27bae 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/ICet_4Service.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/ICet_4Service.java @@ -3,6 +3,8 @@ package org.jeecg.modules.service; import com.alibaba.fastjson.JSONObject; 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 com.baomidou.mybatisplus.extension.service.IService; @@ -25,4 +27,8 @@ public interface ICet_4Service extends IService { Result getDataByStudent(JSONObject jsonObject); boolean cleanData(); + + Result getRateByMajorAndLastestBatch(getRateByMajorAndLastestBatchDto getRateByMajorAndLastestBatchParam); + + Result getRateByEntryDate(getRateByEntryDateDto getRateByEntryDateDtoParams); } diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/Cet_4ServiceImpl.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/Cet_4ServiceImpl.java index d3487f14..1d2ccf86 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/Cet_4ServiceImpl.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/Cet_4ServiceImpl.java @@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import io.swagger.annotations.ApiOperation; 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.CetClean; 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 javax.annotation.Resource; + import java.text.DecimalFormat; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -553,6 +556,123 @@ public class Cet_4ServiceImpl extends ServiceImpl implements return remove(cet4Wrapper); } + @Override + public Result getRateByMajorAndLastestBatch(getRateByMajorAndLastestBatchDto getRateByMajorAndLastestBatchParam) { + + LambdaQueryWrapper 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> maps = cet4Mapper.selectMaps(cet4Wrapper); + cet4Wrapper.select(Cet_4::getEntrydate).groupBy(Cet_4::getEntrydate); + List> entryDateList = cet4Mapper.selectMaps(cet4Wrapper); + + JSONArray ansArray = new JSONArray(); + for (Map Date : entryDateList) { + // 统计当前 entryDate 下的通过人数 + //所有参加过四级考试的学生 + Map attendMap4 = new HashMap<>(); + String currentEntryDate = (String) Date.get("entrydate"); + for (Map 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 getRateByEntryDate(getRateByEntryDateDto getRateByEntryDateDtoParams) { + LambdaQueryWrapper 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> maps = cet4Mapper.selectMaps(cet4Wrapper); + cet4Wrapper.select(Cet_4::getEntrydate).groupBy(Cet_4::getEntrydate); + List> entryDateList = cet4Mapper.selectMaps(cet4Wrapper); + + JSONArray ansArray = new JSONArray(); + for (Map Date : entryDateList) { + //当前年纪的总人数 + LambdaQueryWrapper 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 attendMap4 = new HashMap<>(); + String currentEntryDate = (String) Date.get("entrydate"); + for (Map 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和姓名获取四级数据 */