diff --git a/src/main/java/com/sztzjy/digital_credit/controller/task/StuTaskController.java b/src/main/java/com/sztzjy/digital_credit/controller/task/StuTaskController.java index b440ae0..a218408 100644 --- a/src/main/java/com/sztzjy/digital_credit/controller/task/StuTaskController.java +++ b/src/main/java/com/sztzjy/digital_credit/controller/task/StuTaskController.java @@ -26,13 +26,17 @@ import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.math.BigDecimal; +import java.math.RoundingMode; import java.nio.file.Files; import java.nio.file.Paths; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; +import java.time.ZoneId; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; @@ -51,47 +55,97 @@ public class StuTaskController { private StuScoreCenterMapper scoreCenterMapper; - // @Scheduled(cron = "*/30 * * * * *") - @Scheduled(cron ="0 0 0 * * ?") - public void updateUserRank(){ - log.info("定时任务:==================计算班级平均分======================"); - - //获取今天所有成绩 - StuUserExample userExample = new StuUserExample(); - userExample.createCriteria().getAllCriteria(); - List stuUsersList = userMapper.selectByExample(userExample); - //根据学校ID查询所有的班级列表 class_name - List classNameList = stuUsersList.stream().map(StuUser::getClassName).distinct().collect(Collectors.toList()); - - for (String className : classNameList) { - - StuUserExample userExample1 = new StuUserExample(); - userExample1.createCriteria().andClassNameEqualTo(className); - //获取该班所有学生 - List userListByClassName = userMapper.selectByExample(userExample1); - //汇总总分 - List totalScoreByClassName = userListByClassName.stream().map(StuUser::getTotalScore).collect(Collectors.toList()); - - //求和 - BigDecimal sum = totalScoreByClassName.stream() - .reduce(BigDecimal.ZERO, BigDecimal::add); + // 计算每天每个班级的平均成绩 每天00.00执行 + @Scheduled(cron = "0 0 0 * * ?") + public void getClassScore() { - //该班级平均分 - BigDecimal divide = sum.divide(BigDecimal.valueOf(userListByClassName.size()), 2, BigDecimal.ROUND_HALF_UP); + log.info("定时任务:==================计算班级平均分======================"); + // 算平均值,存表 + //查出所有数据 + List classIdList = userMapper.selectClassId(); + for (String classId : classIdList) { + BigDecimal avgScore = BigDecimal.ZERO; + BigDecimal count = BigDecimal.ZERO; + + StuUserExample userExample = new StuUserExample(); + userExample.createCriteria().andClassIdEqualTo(classId); + List stuUsersList = userMapper.selectByExample(userExample); + + + // 创建存储等级人数的Map + Map gradeCounts = new HashMap<>(); + gradeCounts.put("excellent", 0); + gradeCounts.put("good", 0); + gradeCounts.put("general", 0); + gradeCounts.put("fail", 0); + + BigDecimal classMaxScore = BigDecimal.ZERO; // 最高分,默认为0 + BigDecimal classMinScore = null; // 最低分,默认为null + String schoolId = ""; + + for (StuUser score : stuUsersList) { + //第一个比较对象 + BigDecimal totalScore = score.getTotalScore(); + if (totalScore == null) { + totalScore = BigDecimal.ZERO; + } + schoolId = score.getSchoolId(); + + // 计算最高分 + if (totalScore.compareTo(classMaxScore) >= 0) { + classMaxScore = totalScore; + } + // 计算最低分 + if (classMinScore == null || totalScore.compareTo(classMinScore) <= 0) { + classMinScore = totalScore; + } + + count = count.add(BigDecimal.ONE); + avgScore = avgScore.add(totalScore); + // 计算等级人数 + if (totalScore.compareTo(BigDecimal.valueOf(90)) >= 0 && totalScore.compareTo(BigDecimal.valueOf(100)) <= 0) { + gradeCounts.put("excellent", gradeCounts.get("excellent") + 1); + } else if (totalScore.compareTo(BigDecimal.valueOf(80)) >= 0 && totalScore.compareTo(BigDecimal.valueOf(89)) <= 0) { + gradeCounts.put("good", gradeCounts.get("good") + 1); + } else if (totalScore.compareTo(BigDecimal.valueOf(60)) >= 0 && totalScore.compareTo(BigDecimal.valueOf(79)) <= 0) { + gradeCounts.put("general", gradeCounts.get("general") + 1); + } else if (totalScore.compareTo(BigDecimal.valueOf(0)) >= 0 && totalScore.compareTo(BigDecimal.valueOf(59)) <= 0) { + gradeCounts.put("fail", gradeCounts.get("fail") + 1); + } + } TchClassAverageScore tchClassAverageScore= new TchClassAverageScore(); - tchClassAverageScore.setAveScore(divide.doubleValue()); - tchClassAverageScore.setClassName(className); - tchClassAverageScore.setCreateTime(new Date()); - tchClassAverageScore.setId(String.valueOf(IdUtil.getSnowflakeNextId())); - - tchClassAverageScoreMapper.insertSelective(tchClassAverageScore); + //时间为年月日 + LocalDate currentDate = LocalDate.now(); + Date date = Date.from(currentDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); + tchClassAverageScore.setSchoolId(schoolId); + tchClassAverageScore.setCreateTime(date); + tchClassAverageScore.setId(IdUtil.simpleUUID()); + tchClassAverageScore.setClassMaxScore(classMaxScore); + tchClassAverageScore.setClassMinScore(classMinScore); + tchClassAverageScore.setExcellentCount(gradeCounts.get("excellent")); + tchClassAverageScore.setGoodCount(gradeCounts.get("good")); + tchClassAverageScore.setGeneralCount(gradeCounts.get("general")); + tchClassAverageScore.setFailCount(gradeCounts.get("fail")); + tchClassAverageScore.setClassId(classId); + + StuUserExample stuUserExample1 = new StuUserExample(); + stuUserExample1.createCriteria().andSchoolIdEqualTo(schoolId).andClassIdEqualTo(classId); + List userTables = userMapper.selectByExample(stuUserExample1); + StuUser userTable = userTables.get(0); + + tchClassAverageScore.setClassName(userTable.getClassName()); + if (count.compareTo(BigDecimal.ZERO) == 0) { + tchClassAverageScore.setClassAverageScore(BigDecimal.ZERO); + } else { + BigDecimal divideScore = avgScore.divide(count, 2, RoundingMode.HALF_UP); + tchClassAverageScore.setClassAverageScore(divideScore); + } + tchClassAverageScoreMapper.insert(tchClassAverageScore); } - log.info("定时任务:==================执行结束======================"); - } diff --git a/src/main/java/com/sztzjy/digital_credit/controller/tch/TchHomePageController.java b/src/main/java/com/sztzjy/digital_credit/controller/tch/TchHomePageController.java index 2e92339..207f8d5 100644 --- a/src/main/java/com/sztzjy/digital_credit/controller/tch/TchHomePageController.java +++ b/src/main/java/com/sztzjy/digital_credit/controller/tch/TchHomePageController.java @@ -1,20 +1,28 @@ package com.sztzjy.digital_credit.controller.tch; import com.sztzjy.digital_credit.annotation.AnonymousAccess; +import com.sztzjy.digital_credit.entity.dto.ClassAVGScoreVo; import com.sztzjy.digital_credit.entity.dto.TchAvgScoreByTimeDTO; import com.sztzjy.digital_credit.entity.dto.TchAvgScoreByTimeParentDTO; +import com.sztzjy.digital_credit.entity.dto.TeaClassScoreDto; +import com.sztzjy.digital_credit.mapper.StuUserMapper; import com.sztzjy.digital_credit.service.TchHomePageService; import com.sztzjy.digital_credit.util.ResultEntity; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.time.LocalDate; +import java.util.Date; import java.util.List; +import java.util.Map; /** * @author 17803 @@ -29,17 +37,42 @@ public class TchHomePageController { @Autowired private TchHomePageService tchHomePageService; + @Autowired + private StuUserMapper userMapper; + @ApiOperation("班级平均成绩走势图") @GetMapping("avgScoreTrendChart") @AnonymousAccess - public ResultEntity> avgScoreTrendChart(String schoolId){ + public ResultEntity> avgScoreTrendChart(String schoolId){ + + List info = tchHomePageService.avgScoreTrendChart(schoolId); + return new ResultEntity<>(info); + + } + - return tchHomePageService.avgScoreTrendChart(schoolId); + + @AnonymousAccess + @GetMapping("/getClassScoreCount") + @ApiOperation("班级成绩统计分析饼状图") + public ResultEntity getClassAVGScore(@ApiParam("班级框为空时传") @RequestParam(required = false) String schoolId, + @ApiParam("班级框不为空时传") @RequestParam(required = false) String classId, + @ApiParam("年月日格式/yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") @RequestParam Date time) { + return new ResultEntity<>(tchHomePageService.getClassScoreCount(schoolId, classId, time)); } + @AnonymousAccess + @GetMapping("/getClassNameBySchoolId") + @ApiOperation("班级下拉框") + public ResultEntity>> getClassNameBySchoolId(@RequestParam String schoolId) { + List> nameAndId = userMapper.selectClassNameBySchoolId(schoolId); + return new ResultEntity<>(nameAndId); + } + + } diff --git a/src/main/java/com/sztzjy/digital_credit/entity/TchClassAverageScore.java b/src/main/java/com/sztzjy/digital_credit/entity/TchClassAverageScore.java index d35784d..9b4a502 100644 --- a/src/main/java/com/sztzjy/digital_credit/entity/TchClassAverageScore.java +++ b/src/main/java/com/sztzjy/digital_credit/entity/TchClassAverageScore.java @@ -1,11 +1,9 @@ package com.sztzjy.digital_credit.entity; +import java.math.BigDecimal; import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; -import org.springframework.format.annotation.DateTimeFormat; - /** * * @author whb @@ -21,14 +19,36 @@ public class TchClassAverageScore { @ApiModelProperty("班级名称") private String className; - @DateTimeFormat(pattern = "yyyy-MM-dd") - @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") @ApiModelProperty("创建时间") private Date createTime; @ApiModelProperty("平均分") private Double aveScore; + @ApiModelProperty("优秀人数") + private Integer excellentCount; + + @ApiModelProperty("良好人数") + private Integer goodCount; + + @ApiModelProperty("一般人数") + private Integer generalCount; + + @ApiModelProperty("不及格人数") + private Integer failCount; + + @ApiModelProperty("班级最高分") + private BigDecimal classMaxScore; + + @ApiModelProperty("班级最低分") + private BigDecimal classMinScore; + + @ApiModelProperty("班级平均分") + private BigDecimal classAverageScore; + + @ApiModelProperty("学校ID") + private String schoolId; + public String getId() { return id; } @@ -68,4 +88,68 @@ public class TchClassAverageScore { public void setAveScore(Double aveScore) { this.aveScore = aveScore; } + + public Integer getExcellentCount() { + return excellentCount; + } + + public void setExcellentCount(Integer excellentCount) { + this.excellentCount = excellentCount; + } + + public Integer getGoodCount() { + return goodCount; + } + + public void setGoodCount(Integer goodCount) { + this.goodCount = goodCount; + } + + public Integer getGeneralCount() { + return generalCount; + } + + public void setGeneralCount(Integer generalCount) { + this.generalCount = generalCount; + } + + public Integer getFailCount() { + return failCount; + } + + public void setFailCount(Integer failCount) { + this.failCount = failCount; + } + + public BigDecimal getClassMaxScore() { + return classMaxScore; + } + + public void setClassMaxScore(BigDecimal classMaxScore) { + this.classMaxScore = classMaxScore; + } + + public BigDecimal getClassMinScore() { + return classMinScore; + } + + public void setClassMinScore(BigDecimal classMinScore) { + this.classMinScore = classMinScore; + } + + public BigDecimal getClassAverageScore() { + return classAverageScore; + } + + public void setClassAverageScore(BigDecimal classAverageScore) { + this.classAverageScore = classAverageScore; + } + + public String getSchoolId() { + return schoolId; + } + + public void setSchoolId(String schoolId) { + this.schoolId = schoolId == null ? null : schoolId.trim(); + } } \ No newline at end of file diff --git a/src/main/java/com/sztzjy/digital_credit/entity/TchClassAverageScoreExample.java b/src/main/java/com/sztzjy/digital_credit/entity/TchClassAverageScoreExample.java index 5f17c39..9ec6e8d 100644 --- a/src/main/java/com/sztzjy/digital_credit/entity/TchClassAverageScoreExample.java +++ b/src/main/java/com/sztzjy/digital_credit/entity/TchClassAverageScoreExample.java @@ -1,5 +1,6 @@ package com.sztzjy.digital_credit.entity; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -434,6 +435,496 @@ public class TchClassAverageScoreExample { addCriterion("ave_score not between", value1, value2, "aveScore"); return (Criteria) this; } + + public Criteria andExcellentCountIsNull() { + addCriterion("excellent_count is null"); + return (Criteria) this; + } + + public Criteria andExcellentCountIsNotNull() { + addCriterion("excellent_count is not null"); + return (Criteria) this; + } + + public Criteria andExcellentCountEqualTo(Integer value) { + addCriterion("excellent_count =", value, "excellentCount"); + return (Criteria) this; + } + + public Criteria andExcellentCountNotEqualTo(Integer value) { + addCriterion("excellent_count <>", value, "excellentCount"); + return (Criteria) this; + } + + public Criteria andExcellentCountGreaterThan(Integer value) { + addCriterion("excellent_count >", value, "excellentCount"); + return (Criteria) this; + } + + public Criteria andExcellentCountGreaterThanOrEqualTo(Integer value) { + addCriterion("excellent_count >=", value, "excellentCount"); + return (Criteria) this; + } + + public Criteria andExcellentCountLessThan(Integer value) { + addCriterion("excellent_count <", value, "excellentCount"); + return (Criteria) this; + } + + public Criteria andExcellentCountLessThanOrEqualTo(Integer value) { + addCriterion("excellent_count <=", value, "excellentCount"); + return (Criteria) this; + } + + public Criteria andExcellentCountIn(List values) { + addCriterion("excellent_count in", values, "excellentCount"); + return (Criteria) this; + } + + public Criteria andExcellentCountNotIn(List values) { + addCriterion("excellent_count not in", values, "excellentCount"); + return (Criteria) this; + } + + public Criteria andExcellentCountBetween(Integer value1, Integer value2) { + addCriterion("excellent_count between", value1, value2, "excellentCount"); + return (Criteria) this; + } + + public Criteria andExcellentCountNotBetween(Integer value1, Integer value2) { + addCriterion("excellent_count not between", value1, value2, "excellentCount"); + return (Criteria) this; + } + + public Criteria andGoodCountIsNull() { + addCriterion("good_count is null"); + return (Criteria) this; + } + + public Criteria andGoodCountIsNotNull() { + addCriterion("good_count is not null"); + return (Criteria) this; + } + + public Criteria andGoodCountEqualTo(Integer value) { + addCriterion("good_count =", value, "goodCount"); + return (Criteria) this; + } + + public Criteria andGoodCountNotEqualTo(Integer value) { + addCriterion("good_count <>", value, "goodCount"); + return (Criteria) this; + } + + public Criteria andGoodCountGreaterThan(Integer value) { + addCriterion("good_count >", value, "goodCount"); + return (Criteria) this; + } + + public Criteria andGoodCountGreaterThanOrEqualTo(Integer value) { + addCriterion("good_count >=", value, "goodCount"); + return (Criteria) this; + } + + public Criteria andGoodCountLessThan(Integer value) { + addCriterion("good_count <", value, "goodCount"); + return (Criteria) this; + } + + public Criteria andGoodCountLessThanOrEqualTo(Integer value) { + addCriterion("good_count <=", value, "goodCount"); + return (Criteria) this; + } + + public Criteria andGoodCountIn(List values) { + addCriterion("good_count in", values, "goodCount"); + return (Criteria) this; + } + + public Criteria andGoodCountNotIn(List values) { + addCriterion("good_count not in", values, "goodCount"); + return (Criteria) this; + } + + public Criteria andGoodCountBetween(Integer value1, Integer value2) { + addCriterion("good_count between", value1, value2, "goodCount"); + return (Criteria) this; + } + + public Criteria andGoodCountNotBetween(Integer value1, Integer value2) { + addCriterion("good_count not between", value1, value2, "goodCount"); + return (Criteria) this; + } + + public Criteria andGeneralCountIsNull() { + addCriterion("general_count is null"); + return (Criteria) this; + } + + public Criteria andGeneralCountIsNotNull() { + addCriterion("general_count is not null"); + return (Criteria) this; + } + + public Criteria andGeneralCountEqualTo(Integer value) { + addCriterion("general_count =", value, "generalCount"); + return (Criteria) this; + } + + public Criteria andGeneralCountNotEqualTo(Integer value) { + addCriterion("general_count <>", value, "generalCount"); + return (Criteria) this; + } + + public Criteria andGeneralCountGreaterThan(Integer value) { + addCriterion("general_count >", value, "generalCount"); + return (Criteria) this; + } + + public Criteria andGeneralCountGreaterThanOrEqualTo(Integer value) { + addCriterion("general_count >=", value, "generalCount"); + return (Criteria) this; + } + + public Criteria andGeneralCountLessThan(Integer value) { + addCriterion("general_count <", value, "generalCount"); + return (Criteria) this; + } + + public Criteria andGeneralCountLessThanOrEqualTo(Integer value) { + addCriterion("general_count <=", value, "generalCount"); + return (Criteria) this; + } + + public Criteria andGeneralCountIn(List values) { + addCriterion("general_count in", values, "generalCount"); + return (Criteria) this; + } + + public Criteria andGeneralCountNotIn(List values) { + addCriterion("general_count not in", values, "generalCount"); + return (Criteria) this; + } + + public Criteria andGeneralCountBetween(Integer value1, Integer value2) { + addCriterion("general_count between", value1, value2, "generalCount"); + return (Criteria) this; + } + + public Criteria andGeneralCountNotBetween(Integer value1, Integer value2) { + addCriterion("general_count not between", value1, value2, "generalCount"); + return (Criteria) this; + } + + public Criteria andFailCountIsNull() { + addCriterion("fail_count is null"); + return (Criteria) this; + } + + public Criteria andFailCountIsNotNull() { + addCriterion("fail_count is not null"); + return (Criteria) this; + } + + public Criteria andFailCountEqualTo(Integer value) { + addCriterion("fail_count =", value, "failCount"); + return (Criteria) this; + } + + public Criteria andFailCountNotEqualTo(Integer value) { + addCriterion("fail_count <>", value, "failCount"); + return (Criteria) this; + } + + public Criteria andFailCountGreaterThan(Integer value) { + addCriterion("fail_count >", value, "failCount"); + return (Criteria) this; + } + + public Criteria andFailCountGreaterThanOrEqualTo(Integer value) { + addCriterion("fail_count >=", value, "failCount"); + return (Criteria) this; + } + + public Criteria andFailCountLessThan(Integer value) { + addCriterion("fail_count <", value, "failCount"); + return (Criteria) this; + } + + public Criteria andFailCountLessThanOrEqualTo(Integer value) { + addCriterion("fail_count <=", value, "failCount"); + return (Criteria) this; + } + + public Criteria andFailCountIn(List values) { + addCriterion("fail_count in", values, "failCount"); + return (Criteria) this; + } + + public Criteria andFailCountNotIn(List values) { + addCriterion("fail_count not in", values, "failCount"); + return (Criteria) this; + } + + public Criteria andFailCountBetween(Integer value1, Integer value2) { + addCriterion("fail_count between", value1, value2, "failCount"); + return (Criteria) this; + } + + public Criteria andFailCountNotBetween(Integer value1, Integer value2) { + addCriterion("fail_count not between", value1, value2, "failCount"); + return (Criteria) this; + } + + public Criteria andClassMaxScoreIsNull() { + addCriterion("class_max_score is null"); + return (Criteria) this; + } + + public Criteria andClassMaxScoreIsNotNull() { + addCriterion("class_max_score is not null"); + return (Criteria) this; + } + + public Criteria andClassMaxScoreEqualTo(BigDecimal value) { + addCriterion("class_max_score =", value, "classMaxScore"); + return (Criteria) this; + } + + public Criteria andClassMaxScoreNotEqualTo(BigDecimal value) { + addCriterion("class_max_score <>", value, "classMaxScore"); + return (Criteria) this; + } + + public Criteria andClassMaxScoreGreaterThan(BigDecimal value) { + addCriterion("class_max_score >", value, "classMaxScore"); + return (Criteria) this; + } + + public Criteria andClassMaxScoreGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("class_max_score >=", value, "classMaxScore"); + return (Criteria) this; + } + + public Criteria andClassMaxScoreLessThan(BigDecimal value) { + addCriterion("class_max_score <", value, "classMaxScore"); + return (Criteria) this; + } + + public Criteria andClassMaxScoreLessThanOrEqualTo(BigDecimal value) { + addCriterion("class_max_score <=", value, "classMaxScore"); + return (Criteria) this; + } + + public Criteria andClassMaxScoreIn(List values) { + addCriterion("class_max_score in", values, "classMaxScore"); + return (Criteria) this; + } + + public Criteria andClassMaxScoreNotIn(List values) { + addCriterion("class_max_score not in", values, "classMaxScore"); + return (Criteria) this; + } + + public Criteria andClassMaxScoreBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("class_max_score between", value1, value2, "classMaxScore"); + return (Criteria) this; + } + + public Criteria andClassMaxScoreNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("class_max_score not between", value1, value2, "classMaxScore"); + return (Criteria) this; + } + + public Criteria andClassMinScoreIsNull() { + addCriterion("class_min_score is null"); + return (Criteria) this; + } + + public Criteria andClassMinScoreIsNotNull() { + addCriterion("class_min_score is not null"); + return (Criteria) this; + } + + public Criteria andClassMinScoreEqualTo(BigDecimal value) { + addCriterion("class_min_score =", value, "classMinScore"); + return (Criteria) this; + } + + public Criteria andClassMinScoreNotEqualTo(BigDecimal value) { + addCriterion("class_min_score <>", value, "classMinScore"); + return (Criteria) this; + } + + public Criteria andClassMinScoreGreaterThan(BigDecimal value) { + addCriterion("class_min_score >", value, "classMinScore"); + return (Criteria) this; + } + + public Criteria andClassMinScoreGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("class_min_score >=", value, "classMinScore"); + return (Criteria) this; + } + + public Criteria andClassMinScoreLessThan(BigDecimal value) { + addCriterion("class_min_score <", value, "classMinScore"); + return (Criteria) this; + } + + public Criteria andClassMinScoreLessThanOrEqualTo(BigDecimal value) { + addCriterion("class_min_score <=", value, "classMinScore"); + return (Criteria) this; + } + + public Criteria andClassMinScoreIn(List values) { + addCriterion("class_min_score in", values, "classMinScore"); + return (Criteria) this; + } + + public Criteria andClassMinScoreNotIn(List values) { + addCriterion("class_min_score not in", values, "classMinScore"); + return (Criteria) this; + } + + public Criteria andClassMinScoreBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("class_min_score between", value1, value2, "classMinScore"); + return (Criteria) this; + } + + public Criteria andClassMinScoreNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("class_min_score not between", value1, value2, "classMinScore"); + return (Criteria) this; + } + + public Criteria andClassAverageScoreIsNull() { + addCriterion("class_average_score is null"); + return (Criteria) this; + } + + public Criteria andClassAverageScoreIsNotNull() { + addCriterion("class_average_score is not null"); + return (Criteria) this; + } + + public Criteria andClassAverageScoreEqualTo(BigDecimal value) { + addCriterion("class_average_score =", value, "classAverageScore"); + return (Criteria) this; + } + + public Criteria andClassAverageScoreNotEqualTo(BigDecimal value) { + addCriterion("class_average_score <>", value, "classAverageScore"); + return (Criteria) this; + } + + public Criteria andClassAverageScoreGreaterThan(BigDecimal value) { + addCriterion("class_average_score >", value, "classAverageScore"); + return (Criteria) this; + } + + public Criteria andClassAverageScoreGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("class_average_score >=", value, "classAverageScore"); + return (Criteria) this; + } + + public Criteria andClassAverageScoreLessThan(BigDecimal value) { + addCriterion("class_average_score <", value, "classAverageScore"); + return (Criteria) this; + } + + public Criteria andClassAverageScoreLessThanOrEqualTo(BigDecimal value) { + addCriterion("class_average_score <=", value, "classAverageScore"); + return (Criteria) this; + } + + public Criteria andClassAverageScoreIn(List values) { + addCriterion("class_average_score in", values, "classAverageScore"); + return (Criteria) this; + } + + public Criteria andClassAverageScoreNotIn(List values) { + addCriterion("class_average_score not in", values, "classAverageScore"); + return (Criteria) this; + } + + public Criteria andClassAverageScoreBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("class_average_score between", value1, value2, "classAverageScore"); + return (Criteria) this; + } + + public Criteria andClassAverageScoreNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("class_average_score not between", value1, value2, "classAverageScore"); + return (Criteria) this; + } + + public Criteria andSchoolIdIsNull() { + addCriterion("school_id is null"); + return (Criteria) this; + } + + public Criteria andSchoolIdIsNotNull() { + addCriterion("school_id is not null"); + return (Criteria) this; + } + + public Criteria andSchoolIdEqualTo(String value) { + addCriterion("school_id =", value, "schoolId"); + return (Criteria) this; + } + + public Criteria andSchoolIdNotEqualTo(String value) { + addCriterion("school_id <>", value, "schoolId"); + return (Criteria) this; + } + + public Criteria andSchoolIdGreaterThan(String value) { + addCriterion("school_id >", value, "schoolId"); + return (Criteria) this; + } + + public Criteria andSchoolIdGreaterThanOrEqualTo(String value) { + addCriterion("school_id >=", value, "schoolId"); + return (Criteria) this; + } + + public Criteria andSchoolIdLessThan(String value) { + addCriterion("school_id <", value, "schoolId"); + return (Criteria) this; + } + + public Criteria andSchoolIdLessThanOrEqualTo(String value) { + addCriterion("school_id <=", value, "schoolId"); + return (Criteria) this; + } + + public Criteria andSchoolIdLike(String value) { + addCriterion("school_id like", value, "schoolId"); + return (Criteria) this; + } + + public Criteria andSchoolIdNotLike(String value) { + addCriterion("school_id not like", value, "schoolId"); + return (Criteria) this; + } + + public Criteria andSchoolIdIn(List values) { + addCriterion("school_id in", values, "schoolId"); + return (Criteria) this; + } + + public Criteria andSchoolIdNotIn(List values) { + addCriterion("school_id not in", values, "schoolId"); + return (Criteria) this; + } + + public Criteria andSchoolIdBetween(String value1, String value2) { + addCriterion("school_id between", value1, value2, "schoolId"); + return (Criteria) this; + } + + public Criteria andSchoolIdNotBetween(String value1, String value2) { + addCriterion("school_id not between", value1, value2, "schoolId"); + return (Criteria) this; + } } public static class Criteria extends GeneratedCriteria { diff --git a/src/main/java/com/sztzjy/digital_credit/entity/dto/ClassAVGScoreVo.java b/src/main/java/com/sztzjy/digital_credit/entity/dto/ClassAVGScoreVo.java new file mode 100644 index 0000000..d22bc55 --- /dev/null +++ b/src/main/java/com/sztzjy/digital_credit/entity/dto/ClassAVGScoreVo.java @@ -0,0 +1,25 @@ +package com.sztzjy.digital_credit.entity.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + + +@Data +public class ClassAVGScoreVo { + @ApiModelProperty("班级名称") + private String className; + + @ApiModelProperty("班级平均分") + private List classAverageScore; + + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @ApiModelProperty("最早得分日期") + private List startTime; +} diff --git a/src/main/java/com/sztzjy/digital_credit/entity/dto/TeaClassScoreDto.java b/src/main/java/com/sztzjy/digital_credit/entity/dto/TeaClassScoreDto.java new file mode 100644 index 0000000..8b28d6e --- /dev/null +++ b/src/main/java/com/sztzjy/digital_credit/entity/dto/TeaClassScoreDto.java @@ -0,0 +1,217 @@ +package com.sztzjy.digital_credit.entity.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.util.Date; + + +public class TeaClassScoreDto { + private String id; + + @ApiModelProperty("学校ID") + private String schoolId; + + @ApiModelProperty("班级ID") + private String classId; + + @ApiModelProperty("班级名称") + private String className; + + @ApiModelProperty("优秀人数") + private Integer excellentCount; + + @ApiModelProperty("良好人数") + private Integer goodCount; + + @ApiModelProperty("一般人数") + private Integer generalCount; + + @ApiModelProperty("不及格人数") + private Integer failCount; + + @ApiModelProperty("班级最高分") + private BigDecimal classMaxScore; + + @ApiModelProperty("班级最低分") + private BigDecimal classMinScore; + + @ApiModelProperty("班级平均分") + private BigDecimal classAverageScore; + + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") + @ApiModelProperty("得分日期") + private Date startTime; + + + @ApiModelProperty("学校优秀人数") + private Integer schoolExcellentCount; + @ApiModelProperty("学校良好人数") + private Integer schoolGoodCount; + @ApiModelProperty("学校一般人数") + private Integer schoolGeneralCount; + @ApiModelProperty("学校不及格人数") + private Integer schoolFailCount; + @ApiModelProperty("学校班级最高分") + private BigDecimal schoolMaxScore; + @ApiModelProperty("学校班级最低分") + private BigDecimal schoolMinScore; + @ApiModelProperty("学校班级平均分") + private BigDecimal schoolAverageScore; + + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getSchoolId() { + return schoolId; + } + + public void setSchoolId(String schoolId) { + this.schoolId = schoolId; + } + + public String getClassId() { + return classId; + } + + public void setClassId(String classId) { + this.classId = classId; + } + + public String getClassName() { + return className; + } + + public void setClassName(String className) { + this.className = className; + } + + public Integer getExcellentCount() { + return excellentCount; + } + + public void setExcellentCount(Integer excellentCount) { + this.excellentCount = excellentCount; + } + + public Integer getGoodCount() { + return goodCount; + } + + public void setGoodCount(Integer goodCount) { + this.goodCount = goodCount; + } + + public Integer getGeneralCount() { + return generalCount; + } + + public void setGeneralCount(Integer generalCount) { + this.generalCount = generalCount; + } + + public Integer getFailCount() { + return failCount; + } + + public void setFailCount(Integer failCount) { + this.failCount = failCount; + } + + public BigDecimal getClassMaxScore() { + return classMaxScore; + } + + public void setClassMaxScore(BigDecimal classMaxScore) { + this.classMaxScore = classMaxScore; + } + + public BigDecimal getClassMinScore() { + return classMinScore; + } + + public void setClassMinScore(BigDecimal classMinScore) { + this.classMinScore = classMinScore; + } + + public BigDecimal getClassAverageScore() { + return classAverageScore; + } + + public void setClassAverageScore(BigDecimal classAverageScore) { + this.classAverageScore = classAverageScore; + } + + public Date getStartTime() { + return startTime; + } + + public void setStartTime(Date startTime) { + this.startTime = startTime; + } + + public Integer getSchoolExcellentCount() { + return schoolExcellentCount; + } + + public void setSchoolExcellentCount(Integer schoolExcellentCount) { + this.schoolExcellentCount = schoolExcellentCount; + } + + public Integer getSchoolGoodCount() { + return schoolGoodCount; + } + + public void setSchoolGoodCount(Integer schoolGoodCount) { + this.schoolGoodCount = schoolGoodCount; + } + + public Integer getSchoolGeneralCount() { + return schoolGeneralCount; + } + + public void setSchoolGeneralCount(Integer schoolGeneralCount) { + this.schoolGeneralCount = schoolGeneralCount; + } + + public Integer getSchoolFailCount() { + return schoolFailCount; + } + + public void setSchoolFailCount(Integer schoolFailCount) { + this.schoolFailCount = schoolFailCount; + } + + public BigDecimal getSchoolMaxScore() { + return schoolMaxScore; + } + + public void setSchoolMaxScore(BigDecimal schoolMaxScore) { + this.schoolMaxScore = schoolMaxScore; + } + + public BigDecimal getSchoolMinScore() { + return schoolMinScore; + } + + public void setSchoolMinScore(BigDecimal schoolMinScore) { + this.schoolMinScore = schoolMinScore; + } + + public BigDecimal getSchoolAverageScore() { + return schoolAverageScore; + } + + public void setSchoolAverageScore(BigDecimal schoolAverageScore) { + this.schoolAverageScore = schoolAverageScore; + } +} \ No newline at end of file diff --git a/src/main/java/com/sztzjy/digital_credit/mapper/StuScoreCenterMapper.java b/src/main/java/com/sztzjy/digital_credit/mapper/StuScoreCenterMapper.java index 305272f..eba6190 100644 --- a/src/main/java/com/sztzjy/digital_credit/mapper/StuScoreCenterMapper.java +++ b/src/main/java/com/sztzjy/digital_credit/mapper/StuScoreCenterMapper.java @@ -4,6 +4,7 @@ import com.sztzjy.digital_credit.entity.StuScoreCenter; import com.sztzjy.digital_credit.entity.StuScoreCenterExample; import java.util.List; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; public interface StuScoreCenterMapper { long countByExample(StuScoreCenterExample example); diff --git a/src/main/java/com/sztzjy/digital_credit/mapper/StuUserMapper.java b/src/main/java/com/sztzjy/digital_credit/mapper/StuUserMapper.java index d53056d..7e60592 100644 --- a/src/main/java/com/sztzjy/digital_credit/mapper/StuUserMapper.java +++ b/src/main/java/com/sztzjy/digital_credit/mapper/StuUserMapper.java @@ -3,7 +3,10 @@ package com.sztzjy.digital_credit.mapper; import com.sztzjy.digital_credit.entity.StuUser; import com.sztzjy.digital_credit.entity.StuUserExample; import java.util.List; +import java.util.Map; + import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; public interface StuUserMapper { long countByExample(StuUserExample example); @@ -28,5 +31,9 @@ public interface StuUserMapper { int updateByPrimaryKey(StuUser record); + @Select("select class_id from stu_user group By class_id") + List selectClassId(); + @Select("select distinct(class_id),class_name from stu_user where school_id = #{schoolId}") + List> selectClassNameBySchoolId(@Param("schoolId") String schoolId); } \ No newline at end of file diff --git a/src/main/java/com/sztzjy/digital_credit/mapper/TchClassAverageScoreMapper.java b/src/main/java/com/sztzjy/digital_credit/mapper/TchClassAverageScoreMapper.java index f4e593d..c791900 100644 --- a/src/main/java/com/sztzjy/digital_credit/mapper/TchClassAverageScoreMapper.java +++ b/src/main/java/com/sztzjy/digital_credit/mapper/TchClassAverageScoreMapper.java @@ -30,5 +30,10 @@ public interface TchClassAverageScoreMapper { int updateByPrimaryKey(TchClassAverageScore record); //根据时间排序 - List selectByTime(@Param("className") String className); +// List selectByTime(@Param("className") String className); + + @Select("select class_name from tch_class_average_score where school_id = #{schoolId} group by class_name") + List selectClassNameBySchool(@Param("schoolId")String schoolId); + + List selectAndOrderByTime(@Param("schoolId")String schoolId,@Param("className")String className); } \ No newline at end of file diff --git a/src/main/java/com/sztzjy/digital_credit/service/TchHomePageService.java b/src/main/java/com/sztzjy/digital_credit/service/TchHomePageService.java index c79eb56..208cd4b 100644 --- a/src/main/java/com/sztzjy/digital_credit/service/TchHomePageService.java +++ b/src/main/java/com/sztzjy/digital_credit/service/TchHomePageService.java @@ -1,9 +1,12 @@ package com.sztzjy.digital_credit.service; +import com.sztzjy.digital_credit.entity.dto.ClassAVGScoreVo; import com.sztzjy.digital_credit.entity.dto.TchAvgScoreByTimeParentDTO; +import com.sztzjy.digital_credit.entity.dto.TeaClassScoreDto; import com.sztzjy.digital_credit.util.ResultEntity; import java.time.LocalDate; +import java.util.Date; import java.util.List; /** @@ -11,6 +14,16 @@ import java.util.List; * @date 2024-04-30 14:55 */ public interface TchHomePageService { + //班级平均成绩走势图 + List avgScoreTrendChart(String schoolId); - ResultEntity> avgScoreTrendChart(String schoolId); + /** + * 班级成绩统计分析饼状图 + * @param schoolId + * @param classId + * @param time + * @return + */ + + TeaClassScoreDto getClassScoreCount(String schoolId, String classId, Date time); } diff --git a/src/main/java/com/sztzjy/digital_credit/service/impl/TchHomePageServiceImpl.java b/src/main/java/com/sztzjy/digital_credit/service/impl/TchHomePageServiceImpl.java index 28de42d..34eb568 100644 --- a/src/main/java/com/sztzjy/digital_credit/service/impl/TchHomePageServiceImpl.java +++ b/src/main/java/com/sztzjy/digital_credit/service/impl/TchHomePageServiceImpl.java @@ -7,8 +7,10 @@ import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateTime; import com.sztzjy.digital_credit.entity.*; +import com.sztzjy.digital_credit.entity.dto.ClassAVGScoreVo; import com.sztzjy.digital_credit.entity.dto.TchAvgScoreByTimeDTO; import com.sztzjy.digital_credit.entity.dto.TchAvgScoreByTimeParentDTO; +import com.sztzjy.digital_credit.entity.dto.TeaClassScoreDto; import com.sztzjy.digital_credit.mapper.StuScoreCenterMapper; import com.sztzjy.digital_credit.mapper.StuUserMapper; import com.sztzjy.digital_credit.mapper.TchClassAverageScoreMapper; @@ -17,11 +19,13 @@ import com.sztzjy.digital_credit.service.TchHomePageService; import com.sztzjy.digital_credit.util.ResultEntity; import org.apache.commons.lang3.StringUtils; import org.checkerframework.checker.units.qual.A; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import java.math.BigDecimal; +import java.math.RoundingMode; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; @@ -46,72 +50,173 @@ public class TchHomePageServiceImpl implements TchHomePageService { +// @Override +// public ResultEntity> avgScoreTrendChart(String schoolId) { +// +// List tchAvgScoreByTimeParentDTOS = new ArrayList(); +// +// //每天平均成绩集合 +// List avgScoreListByDate = new ArrayList<>(); +// +// //根据学校ID查询所有的班级列表 class_name +// StuUserExample userExample = new StuUserExample(); +// userExample.createCriteria().andSchoolIdEqualTo(schoolId); +// +// //学校所有班级 +// List userList = userMapper.selectByExample(userExample); +// +// if (userList.isEmpty()) +// { +// return new ResultEntity<>(HttpStatus.OK,"schoolId不存在"); +// } +// +// // 查询出所有班级名 +// List distinctClassNames = userList.stream() +// .map(item -> item.getClassName()) +// .distinct() +// .collect(Collectors.toList()); +// +// //遍历所有班级 +// for (String className : distinctClassNames) { +// TchAvgScoreByTimeParentDTO tchAvgScoreByTimeParentDTO = new TchAvgScoreByTimeParentDTO(); +// +// tchAvgScoreByTimeParentDTO.setClassList(className); +// +// +// List tchClassAverageScores = tchClassAverageScoreMapper.selectByTime(className); +// +// //成绩列表 +// List avgDoubleList = tchClassAverageScores.stream().map(TchClassAverageScore::getAveScore).collect(Collectors.toList()); +// //时间列表 +// List dateList = tchClassAverageScores.stream().map(TchClassAverageScore::getCreateTime).collect(Collectors.toList()); +// +// ArrayList stringArrayList = new ArrayList<>(); +// +// dateList.forEach(item ->{ +// SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd"); +// String formattedDate = outputFormat.format(item); +// stringArrayList.add(formattedDate); +// }); +// +// TchAvgScoreByTimeDTO tchAvgScoreByTimeDTO = new TchAvgScoreByTimeDTO(); +// tchAvgScoreByTimeDTO.setAvgScoreList(StringUtils.join(avgDoubleList, ",")); +// tchAvgScoreByTimeDTO.setDataList(StringUtils.join(stringArrayList, ",")); +// +// tchAvgScoreByTimeParentDTO.setBaseInfo(tchAvgScoreByTimeDTO); +// +// tchAvgScoreByTimeParentDTOS.add(tchAvgScoreByTimeParentDTO); +// avgScoreListByDate.clear(); +// +// } +// +// return new ResultEntity<>(HttpStatus.OK,"查询成功",tchAvgScoreByTimeParentDTOS); +// } +// + + /** + * 班级平均成绩走势图 + * @param schoolId + * @return + */ @Override - public ResultEntity> avgScoreTrendChart( String schoolId) { - - List tchAvgScoreByTimeParentDTOS = new ArrayList(); - - - - //每天平均成绩集合 - List avgScoreListByDate = new ArrayList<>(); - - //根据学校ID查询所有的班级列表 class_name - StuUserExample userExample = new StuUserExample(); - userExample.createCriteria().andSchoolIdEqualTo(schoolId); - - //学校所有班级 - List userList = userMapper.selectByExample(userExample); - - if (userList.isEmpty()) - { - return new ResultEntity<>(HttpStatus.OK,"schoolId不存在"); + public List avgScoreTrendChart(String schoolId) { + List classNameList = tchClassAverageScoreMapper.selectClassNameBySchool(schoolId); + List voList = new ArrayList<>(); + for (String className : classNameList) { + ClassAVGScoreVo vo = new ClassAVGScoreVo(); + vo.setClassName(className); + List list = tchClassAverageScoreMapper.selectAndOrderByTime(schoolId, className); + if (list.isEmpty()) { + continue; + } + List scoreList = new ArrayList(); + List dateList = new ArrayList<>(); + for (TchClassAverageScore classScore : list) { + scoreList.add(classScore.getClassAverageScore()); + dateList.add(classScore.getCreateTime()); + } + vo.setClassAverageScore(scoreList); + vo.setStartTime(dateList); + voList.add(vo); } + return voList; + } - // 查询出所有班级名 - List distinctClassNames = userList.stream() - .map(item -> item.getClassName()) - .distinct() - .collect(Collectors.toList()); - - //遍历所有班级 - for (String className : distinctClassNames) { - TchAvgScoreByTimeParentDTO tchAvgScoreByTimeParentDTO = new TchAvgScoreByTimeParentDTO(); - - tchAvgScoreByTimeParentDTO.setClassList(className); - - - List tchClassAverageScores = tchClassAverageScoreMapper.selectByTime(className); - - //成绩列表 - List avgDoubleList = tchClassAverageScores.stream().map(TchClassAverageScore::getAveScore).collect(Collectors.toList()); - //时间列表 - List dateList = tchClassAverageScores.stream().map(TchClassAverageScore::getCreateTime).collect(Collectors.toList()); - - ArrayList stringArrayList = new ArrayList<>(); - - dateList.forEach(item ->{ - SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd"); - String formattedDate = outputFormat.format(item); - stringArrayList.add(formattedDate); - }); - - - - - TchAvgScoreByTimeDTO tchAvgScoreByTimeDTO = new TchAvgScoreByTimeDTO(); - tchAvgScoreByTimeDTO.setAvgScoreList(StringUtils.join(avgDoubleList, ",")); - tchAvgScoreByTimeDTO.setDataList(StringUtils.join(stringArrayList, ",")); - - tchAvgScoreByTimeParentDTO.setBaseInfo(tchAvgScoreByTimeDTO); - tchAvgScoreByTimeParentDTOS.add(tchAvgScoreByTimeParentDTO); - avgScoreListByDate.clear(); + /** + * 班级成绩统计分析饼状图 + * @param schoolId + * @param classId + * @param time + * @return + */ + @Override + public TeaClassScoreDto getClassScoreCount(String schoolId, String classId, Date time) { + TchClassAverageScoreExample teaClassScoreExample = new TchClassAverageScoreExample(); + TchClassAverageScoreExample.Criteria criteria = teaClassScoreExample.createCriteria(); + Date startTime = null; + //班级框为空 统计学校下的所有数据返回 + if (classId == null && schoolId != null) { + criteria.andSchoolIdEqualTo(schoolId).andCreateTimeEqualTo(time); + List teaClassScores = tchClassAverageScoreMapper.selectByExample(teaClassScoreExample); + int schoolExcellentCount = 0; + int schoolGoodCount = 0; + int schoolGeneralCount = 0; + int schoolFailCount = 0; + BigDecimal maxScoreBySchoolId = BigDecimal.ZERO; + BigDecimal minScoreBySchoolId = BigDecimal.ZERO; + BigDecimal avgScoreBySchoolId = BigDecimal.ZERO; + for (TchClassAverageScore teaClassScore : teaClassScores) { + schoolExcellentCount = schoolExcellentCount + teaClassScore.getExcellentCount(); + schoolGoodCount = schoolGoodCount + teaClassScore.getGoodCount(); + schoolGeneralCount = schoolGeneralCount + teaClassScore.getGeneralCount(); + schoolFailCount = schoolFailCount + teaClassScore.getFailCount(); + + BigDecimal maxScore = teaClassScore.getClassMaxScore(); + if (maxScore == null) { + maxScore = BigDecimal.ZERO; + } + BigDecimal minScore = teaClassScore.getClassMinScore(); + if (minScore == null) { + minScore = BigDecimal.ZERO; + } + // 计算最高分 + if (maxScore.compareTo(maxScoreBySchoolId) >= 0) { + maxScoreBySchoolId = maxScore; + } + // 计算最低分 + if (minScoreBySchoolId.compareTo(BigDecimal.ZERO) == 0 || minScore.compareTo(minScoreBySchoolId) <= 0) { + minScoreBySchoolId = minScore; + } + //所有班级平均分累加 + avgScoreBySchoolId = avgScoreBySchoolId.add(teaClassScore.getClassAverageScore()).setScale(2, RoundingMode.HALF_UP); + startTime = teaClassScore.getCreateTime(); + } + TeaClassScoreDto teaClassScoreDto = new TeaClassScoreDto(); + teaClassScoreDto.setSchoolExcellentCount(schoolExcellentCount); + teaClassScoreDto.setSchoolGoodCount(schoolGoodCount); + teaClassScoreDto.setSchoolGeneralCount(schoolGeneralCount); + teaClassScoreDto.setSchoolFailCount(schoolFailCount); + teaClassScoreDto.setSchoolMaxScore(maxScoreBySchoolId); + teaClassScoreDto.setSchoolMinScore(minScoreBySchoolId); + teaClassScoreDto.setStartTime(startTime); + if (teaClassScores.size() > 0) { + BigDecimal finalAVGScore = avgScoreBySchoolId.divide(BigDecimal.valueOf(teaClassScores.size()), 2, RoundingMode.HALF_UP); + teaClassScoreDto.setSchoolAverageScore(finalAVGScore); + } + return teaClassScoreDto; + } else { //选中某个班级返回 + criteria.andClassIdEqualTo(classId).andCreateTimeEqualTo(time); + List teaClassScores = tchClassAverageScoreMapper.selectByExample(teaClassScoreExample); + if (teaClassScores.isEmpty()) { + return new TeaClassScoreDto(); + } + TchClassAverageScore teaClassScore = teaClassScores.get(0); + TeaClassScoreDto teaClassScoreDto = new TeaClassScoreDto(); + BeanUtils.copyProperties(teaClassScore, teaClassScoreDto); + return teaClassScoreDto; } - - - - return new ResultEntity<>(HttpStatus.OK,"查询成功",tchAvgScoreByTimeParentDTOS); } + } diff --git a/src/main/resources/mappers/TchClassAverageScoreMapper.xml b/src/main/resources/mappers/TchClassAverageScoreMapper.xml index 8b5c9f9..29a2e6f 100644 --- a/src/main/resources/mappers/TchClassAverageScoreMapper.xml +++ b/src/main/resources/mappers/TchClassAverageScoreMapper.xml @@ -7,6 +7,14 @@ + + + + + + + + @@ -67,7 +75,8 @@ - id, class_id, class_name, create_time, ave_score + id, class_id, class_name, create_time, ave_score, excellent_count, good_count, general_count, + fail_count, class_max_score, class_min_score, class_average_score, school_id @@ -148,8 +211,7 @@ - - + update tch_class_average_score @@ -167,6 +229,30 @@ ave_score = #{record.aveScore,jdbcType=DOUBLE}, + + excellent_count = #{record.excellentCount,jdbcType=INTEGER}, + + + good_count = #{record.goodCount,jdbcType=INTEGER}, + + + general_count = #{record.generalCount,jdbcType=INTEGER}, + + + fail_count = #{record.failCount,jdbcType=INTEGER}, + + + class_max_score = #{record.classMaxScore,jdbcType=DECIMAL}, + + + class_min_score = #{record.classMinScore,jdbcType=DECIMAL}, + + + class_average_score = #{record.classAverageScore,jdbcType=DECIMAL}, + + + school_id = #{record.schoolId,jdbcType=VARCHAR}, + @@ -178,7 +264,15 @@ class_id = #{record.classId,jdbcType=VARCHAR}, class_name = #{record.className,jdbcType=VARCHAR}, create_time = #{record.createTime,jdbcType=TIMESTAMP}, - ave_score = #{record.aveScore,jdbcType=DOUBLE} + ave_score = #{record.aveScore,jdbcType=DOUBLE}, + excellent_count = #{record.excellentCount,jdbcType=INTEGER}, + good_count = #{record.goodCount,jdbcType=INTEGER}, + general_count = #{record.generalCount,jdbcType=INTEGER}, + fail_count = #{record.failCount,jdbcType=INTEGER}, + class_max_score = #{record.classMaxScore,jdbcType=DECIMAL}, + class_min_score = #{record.classMinScore,jdbcType=DECIMAL}, + class_average_score = #{record.classAverageScore,jdbcType=DECIMAL}, + school_id = #{record.schoolId,jdbcType=VARCHAR} @@ -198,6 +292,30 @@ ave_score = #{aveScore,jdbcType=DOUBLE}, + + excellent_count = #{excellentCount,jdbcType=INTEGER}, + + + good_count = #{goodCount,jdbcType=INTEGER}, + + + general_count = #{generalCount,jdbcType=INTEGER}, + + + fail_count = #{failCount,jdbcType=INTEGER}, + + + class_max_score = #{classMaxScore,jdbcType=DECIMAL}, + + + class_min_score = #{classMinScore,jdbcType=DECIMAL}, + + + class_average_score = #{classAverageScore,jdbcType=DECIMAL}, + + + school_id = #{schoolId,jdbcType=VARCHAR}, + where id = #{id,jdbcType=VARCHAR} @@ -206,24 +324,37 @@ set class_id = #{classId,jdbcType=VARCHAR}, class_name = #{className,jdbcType=VARCHAR}, create_time = #{createTime,jdbcType=TIMESTAMP}, - ave_score = #{aveScore,jdbcType=DOUBLE} + ave_score = #{aveScore,jdbcType=DOUBLE}, + excellent_count = #{excellentCount,jdbcType=INTEGER}, + good_count = #{goodCount,jdbcType=INTEGER}, + general_count = #{generalCount,jdbcType=INTEGER}, + fail_count = #{failCount,jdbcType=INTEGER}, + class_max_score = #{classMaxScore,jdbcType=DECIMAL}, + class_min_score = #{classMinScore,jdbcType=DECIMAL}, + class_average_score = #{classAverageScore,jdbcType=DECIMAL}, + school_id = #{schoolId,jdbcType=VARCHAR} where id = #{id,jdbcType=VARCHAR} - - select from tch_class_average_score - where - - class_name = #{className,jdbcType=VARCHAR} - + where school_id = #{schoolId,jdbcType=VARCHAR} + AND class_name = #{className} AND create_time >= DATE_SUB(NOW(), INTERVAL 6 MONTH) - order by create_time asc + order by create_time - - - \ No newline at end of file