diff --git a/src/main/java/com/sztzjy/digital_credit/FinancialBigDataApplication.java b/src/main/java/com/sztzjy/digital_credit/FinancialBigDataApplication.java index 2c18f3a..78305c5 100644 --- a/src/main/java/com/sztzjy/digital_credit/FinancialBigDataApplication.java +++ b/src/main/java/com/sztzjy/digital_credit/FinancialBigDataApplication.java @@ -1,5 +1,6 @@ package com.sztzjy.digital_credit; +import lombok.extern.slf4j.Slf4j; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -7,9 +8,10 @@ import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication -@EnableScheduling @Configuration @MapperScan(basePackages = "com.sztzjy.digital_credit.mapper") +@EnableScheduling +@Slf4j public class FinancialBigDataApplication { public static void main(String[] args) { 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 new file mode 100644 index 0000000..b440ae0 --- /dev/null +++ b/src/main/java/com/sztzjy/digital_credit/controller/task/StuTaskController.java @@ -0,0 +1,101 @@ +package com.sztzjy.digital_credit.controller.task; + +import cn.hutool.core.util.IdUtil; +import com.sztzjy.digital_credit.annotation.AnonymousAccess; +import com.sztzjy.digital_credit.entity.*; +import com.sztzjy.digital_credit.entity.dto.EducationAndBreachOfContractDTO; +import com.sztzjy.digital_credit.mapper.StuBreachOfContractTrainingMapper; +import com.sztzjy.digital_credit.mapper.StuScoreCenterMapper; +import com.sztzjy.digital_credit.mapper.StuUserMapper; +import com.sztzjy.digital_credit.mapper.TchClassAverageScoreMapper; +import com.sztzjy.digital_credit.util.ResultEntity; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.imageio.ImageIO; +import javax.servlet.http.HttpServletResponse; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.math.BigDecimal; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + + +@Slf4j +@Component +public class StuTaskController { + + @Autowired + TchClassAverageScoreMapper tchClassAverageScoreMapper; + + @Autowired + private StuUserMapper userMapper; + + + @Autowired + 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); + + //该班级平均分 + BigDecimal divide = sum.divide(BigDecimal.valueOf(userListByClassName.size()), 2, BigDecimal.ROUND_HALF_UP); + + TchClassAverageScore tchClassAverageScore= new TchClassAverageScore(); + tchClassAverageScore.setAveScore(divide.doubleValue()); + tchClassAverageScore.setClassName(className); + tchClassAverageScore.setCreateTime(new Date()); + tchClassAverageScore.setId(String.valueOf(IdUtil.getSnowflakeNextId())); + + tchClassAverageScoreMapper.insertSelective(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 new file mode 100644 index 0000000..2e92339 --- /dev/null +++ b/src/main/java/com/sztzjy/digital_credit/controller/tch/TchHomePageController.java @@ -0,0 +1,45 @@ +package com.sztzjy.digital_credit.controller.tch; + +import com.sztzjy.digital_credit.annotation.AnonymousAccess; +import com.sztzjy.digital_credit.entity.dto.TchAvgScoreByTimeDTO; +import com.sztzjy.digital_credit.entity.dto.TchAvgScoreByTimeParentDTO; +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 org.springframework.beans.factory.annotation.Autowired; +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.time.LocalDate; +import java.util.List; + +/** + * @author 17803 + * @date 2024-04-30 11:41 + */ + +@Api(tags = "教师端--首页") +@RestController +@RequestMapping("api/tch/home") +public class TchHomePageController { + + @Autowired + private TchHomePageService tchHomePageService; + + + @ApiOperation("班级平均成绩走势图") + @GetMapping("avgScoreTrendChart") + @AnonymousAccess + public ResultEntity> avgScoreTrendChart(String schoolId){ + + return tchHomePageService.avgScoreTrendChart(schoolId); + + } + + + + +} diff --git a/src/main/java/com/sztzjy/digital_credit/entity/StuScoreCenter.java b/src/main/java/com/sztzjy/digital_credit/entity/StuScoreCenter.java index 3710bf7..be99d6e 100644 --- a/src/main/java/com/sztzjy/digital_credit/entity/StuScoreCenter.java +++ b/src/main/java/com/sztzjy/digital_credit/entity/StuScoreCenter.java @@ -1,11 +1,12 @@ package com.sztzjy.digital_credit.entity; import java.math.BigDecimal; +import java.util.Date; import io.swagger.annotations.ApiModelProperty; /** * - * @author tz + * @author whb * stu_score_center */ public class StuScoreCenter { @@ -54,6 +55,12 @@ public class StuScoreCenter { @ApiModelProperty("重新实训次数(最多两次)") private Integer numberOfTraining; + @ApiModelProperty("完成时间") + private Date completionTime; + + @ApiModelProperty("班级名称") + private String className; + public Integer getId() { return id; } @@ -173,4 +180,20 @@ public class StuScoreCenter { public void setNumberOfTraining(Integer numberOfTraining) { this.numberOfTraining = numberOfTraining; } + + public Date getCompletionTime() { + return completionTime; + } + + public void setCompletionTime(Date completionTime) { + this.completionTime = completionTime; + } + + public String getClassName() { + return className; + } + + public void setClassName(String className) { + this.className = className == null ? null : className.trim(); + } } \ No newline at end of file diff --git a/src/main/java/com/sztzjy/digital_credit/entity/StuScoreCenterExample.java b/src/main/java/com/sztzjy/digital_credit/entity/StuScoreCenterExample.java index 037a581..7c57bfb 100644 --- a/src/main/java/com/sztzjy/digital_credit/entity/StuScoreCenterExample.java +++ b/src/main/java/com/sztzjy/digital_credit/entity/StuScoreCenterExample.java @@ -2,6 +2,7 @@ package com.sztzjy.digital_credit.entity; import java.math.BigDecimal; import java.util.ArrayList; +import java.util.Date; import java.util.List; public class StuScoreCenterExample { @@ -1054,6 +1055,136 @@ public class StuScoreCenterExample { addCriterion("number_of_training not between", value1, value2, "numberOfTraining"); return (Criteria) this; } + + public Criteria andCompletionTimeIsNull() { + addCriterion("completion_time is null"); + return (Criteria) this; + } + + public Criteria andCompletionTimeIsNotNull() { + addCriterion("completion_time is not null"); + return (Criteria) this; + } + + public Criteria andCompletionTimeEqualTo(Date value) { + addCriterion("completion_time =", value, "completionTime"); + return (Criteria) this; + } + + public Criteria andCompletionTimeNotEqualTo(Date value) { + addCriterion("completion_time <>", value, "completionTime"); + return (Criteria) this; + } + + public Criteria andCompletionTimeGreaterThan(Date value) { + addCriterion("completion_time >", value, "completionTime"); + return (Criteria) this; + } + + public Criteria andCompletionTimeGreaterThanOrEqualTo(Date value) { + addCriterion("completion_time >=", value, "completionTime"); + return (Criteria) this; + } + + public Criteria andCompletionTimeLessThan(Date value) { + addCriterion("completion_time <", value, "completionTime"); + return (Criteria) this; + } + + public Criteria andCompletionTimeLessThanOrEqualTo(Date value) { + addCriterion("completion_time <=", value, "completionTime"); + return (Criteria) this; + } + + public Criteria andCompletionTimeIn(List values) { + addCriterion("completion_time in", values, "completionTime"); + return (Criteria) this; + } + + public Criteria andCompletionTimeNotIn(List values) { + addCriterion("completion_time not in", values, "completionTime"); + return (Criteria) this; + } + + public Criteria andCompletionTimeBetween(Date value1, Date value2) { + addCriterion("completion_time between", value1, value2, "completionTime"); + return (Criteria) this; + } + + public Criteria andCompletionTimeNotBetween(Date value1, Date value2) { + addCriterion("completion_time not between", value1, value2, "completionTime"); + return (Criteria) this; + } + + public Criteria andClassNameIsNull() { + addCriterion("class_name is null"); + return (Criteria) this; + } + + public Criteria andClassNameIsNotNull() { + addCriterion("class_name is not null"); + return (Criteria) this; + } + + public Criteria andClassNameEqualTo(String value) { + addCriterion("class_name =", value, "className"); + return (Criteria) this; + } + + public Criteria andClassNameNotEqualTo(String value) { + addCriterion("class_name <>", value, "className"); + return (Criteria) this; + } + + public Criteria andClassNameGreaterThan(String value) { + addCriterion("class_name >", value, "className"); + return (Criteria) this; + } + + public Criteria andClassNameGreaterThanOrEqualTo(String value) { + addCriterion("class_name >=", value, "className"); + return (Criteria) this; + } + + public Criteria andClassNameLessThan(String value) { + addCriterion("class_name <", value, "className"); + return (Criteria) this; + } + + public Criteria andClassNameLessThanOrEqualTo(String value) { + addCriterion("class_name <=", value, "className"); + return (Criteria) this; + } + + public Criteria andClassNameLike(String value) { + addCriterion("class_name like", value, "className"); + return (Criteria) this; + } + + public Criteria andClassNameNotLike(String value) { + addCriterion("class_name not like", value, "className"); + return (Criteria) this; + } + + public Criteria andClassNameIn(List values) { + addCriterion("class_name in", values, "className"); + return (Criteria) this; + } + + public Criteria andClassNameNotIn(List values) { + addCriterion("class_name not in", values, "className"); + return (Criteria) this; + } + + public Criteria andClassNameBetween(String value1, String value2) { + addCriterion("class_name between", value1, value2, "className"); + return (Criteria) this; + } + + public Criteria andClassNameNotBetween(String value1, String value2) { + addCriterion("class_name not between", value1, value2, "className"); + return (Criteria) this; + } } public static class Criteria extends GeneratedCriteria { diff --git a/src/main/java/com/sztzjy/digital_credit/entity/TchClassAverageScore.java b/src/main/java/com/sztzjy/digital_credit/entity/TchClassAverageScore.java new file mode 100644 index 0000000..d35784d --- /dev/null +++ b/src/main/java/com/sztzjy/digital_credit/entity/TchClassAverageScore.java @@ -0,0 +1,71 @@ +package com.sztzjy.digital_credit.entity; + +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import org.springframework.format.annotation.DateTimeFormat; + +/** + * + * @author whb + * tch_class_average_score + */ +public class TchClassAverageScore { + @ApiModelProperty("id") + private String id; + + @ApiModelProperty("班级ID") + private String classId; + + @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; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id == null ? null : id.trim(); + } + + public String getClassId() { + return classId; + } + + public void setClassId(String classId) { + this.classId = classId == null ? null : classId.trim(); + } + + public String getClassName() { + return className; + } + + public void setClassName(String className) { + this.className = className == null ? null : className.trim(); + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Double getAveScore() { + return aveScore; + } + + public void setAveScore(Double aveScore) { + this.aveScore = aveScore; + } +} \ 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 new file mode 100644 index 0000000..5f17c39 --- /dev/null +++ b/src/main/java/com/sztzjy/digital_credit/entity/TchClassAverageScoreExample.java @@ -0,0 +1,530 @@ +package com.sztzjy.digital_credit.entity; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class TchClassAverageScoreExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public TchClassAverageScoreExample() { + oredCriteria = new ArrayList<>(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList<>(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(String value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(String value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(String value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(String value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(String value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(String value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLike(String value) { + addCriterion("id like", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotLike(String value) { + addCriterion("id not like", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(String value1, String value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(String value1, String value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andClassIdIsNull() { + addCriterion("class_id is null"); + return (Criteria) this; + } + + public Criteria andClassIdIsNotNull() { + addCriterion("class_id is not null"); + return (Criteria) this; + } + + public Criteria andClassIdEqualTo(String value) { + addCriterion("class_id =", value, "classId"); + return (Criteria) this; + } + + public Criteria andClassIdNotEqualTo(String value) { + addCriterion("class_id <>", value, "classId"); + return (Criteria) this; + } + + public Criteria andClassIdGreaterThan(String value) { + addCriterion("class_id >", value, "classId"); + return (Criteria) this; + } + + public Criteria andClassIdGreaterThanOrEqualTo(String value) { + addCriterion("class_id >=", value, "classId"); + return (Criteria) this; + } + + public Criteria andClassIdLessThan(String value) { + addCriterion("class_id <", value, "classId"); + return (Criteria) this; + } + + public Criteria andClassIdLessThanOrEqualTo(String value) { + addCriterion("class_id <=", value, "classId"); + return (Criteria) this; + } + + public Criteria andClassIdLike(String value) { + addCriterion("class_id like", value, "classId"); + return (Criteria) this; + } + + public Criteria andClassIdNotLike(String value) { + addCriterion("class_id not like", value, "classId"); + return (Criteria) this; + } + + public Criteria andClassIdIn(List values) { + addCriterion("class_id in", values, "classId"); + return (Criteria) this; + } + + public Criteria andClassIdNotIn(List values) { + addCriterion("class_id not in", values, "classId"); + return (Criteria) this; + } + + public Criteria andClassIdBetween(String value1, String value2) { + addCriterion("class_id between", value1, value2, "classId"); + return (Criteria) this; + } + + public Criteria andClassIdNotBetween(String value1, String value2) { + addCriterion("class_id not between", value1, value2, "classId"); + return (Criteria) this; + } + + public Criteria andClassNameIsNull() { + addCriterion("class_name is null"); + return (Criteria) this; + } + + public Criteria andClassNameIsNotNull() { + addCriterion("class_name is not null"); + return (Criteria) this; + } + + public Criteria andClassNameEqualTo(String value) { + addCriterion("class_name =", value, "className"); + return (Criteria) this; + } + + public Criteria andClassNameNotEqualTo(String value) { + addCriterion("class_name <>", value, "className"); + return (Criteria) this; + } + + public Criteria andClassNameGreaterThan(String value) { + addCriterion("class_name >", value, "className"); + return (Criteria) this; + } + + public Criteria andClassNameGreaterThanOrEqualTo(String value) { + addCriterion("class_name >=", value, "className"); + return (Criteria) this; + } + + public Criteria andClassNameLessThan(String value) { + addCriterion("class_name <", value, "className"); + return (Criteria) this; + } + + public Criteria andClassNameLessThanOrEqualTo(String value) { + addCriterion("class_name <=", value, "className"); + return (Criteria) this; + } + + public Criteria andClassNameLike(String value) { + addCriterion("class_name like", value, "className"); + return (Criteria) this; + } + + public Criteria andClassNameNotLike(String value) { + addCriterion("class_name not like", value, "className"); + return (Criteria) this; + } + + public Criteria andClassNameIn(List values) { + addCriterion("class_name in", values, "className"); + return (Criteria) this; + } + + public Criteria andClassNameNotIn(List values) { + addCriterion("class_name not in", values, "className"); + return (Criteria) this; + } + + public Criteria andClassNameBetween(String value1, String value2) { + addCriterion("class_name between", value1, value2, "className"); + return (Criteria) this; + } + + public Criteria andClassNameNotBetween(String value1, String value2) { + addCriterion("class_name not between", value1, value2, "className"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNull() { + addCriterion("create_time is null"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNotNull() { + addCriterion("create_time is not null"); + return (Criteria) this; + } + + public Criteria andCreateTimeEqualTo(Date value) { + addCriterion("create_time =", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotEqualTo(Date value) { + addCriterion("create_time <>", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThan(Date value) { + addCriterion("create_time >", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) { + addCriterion("create_time >=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThan(Date value) { + addCriterion("create_time <", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThanOrEqualTo(Date value) { + addCriterion("create_time <=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeIn(List values) { + addCriterion("create_time in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotIn(List values) { + addCriterion("create_time not in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeBetween(Date value1, Date value2) { + addCriterion("create_time between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotBetween(Date value1, Date value2) { + addCriterion("create_time not between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andAveScoreIsNull() { + addCriterion("ave_score is null"); + return (Criteria) this; + } + + public Criteria andAveScoreIsNotNull() { + addCriterion("ave_score is not null"); + return (Criteria) this; + } + + public Criteria andAveScoreEqualTo(Double value) { + addCriterion("ave_score =", value, "aveScore"); + return (Criteria) this; + } + + public Criteria andAveScoreNotEqualTo(Double value) { + addCriterion("ave_score <>", value, "aveScore"); + return (Criteria) this; + } + + public Criteria andAveScoreGreaterThan(Double value) { + addCriterion("ave_score >", value, "aveScore"); + return (Criteria) this; + } + + public Criteria andAveScoreGreaterThanOrEqualTo(Double value) { + addCriterion("ave_score >=", value, "aveScore"); + return (Criteria) this; + } + + public Criteria andAveScoreLessThan(Double value) { + addCriterion("ave_score <", value, "aveScore"); + return (Criteria) this; + } + + public Criteria andAveScoreLessThanOrEqualTo(Double value) { + addCriterion("ave_score <=", value, "aveScore"); + return (Criteria) this; + } + + public Criteria andAveScoreIn(List values) { + addCriterion("ave_score in", values, "aveScore"); + return (Criteria) this; + } + + public Criteria andAveScoreNotIn(List values) { + addCriterion("ave_score not in", values, "aveScore"); + return (Criteria) this; + } + + public Criteria andAveScoreBetween(Double value1, Double value2) { + addCriterion("ave_score between", value1, value2, "aveScore"); + return (Criteria) this; + } + + public Criteria andAveScoreNotBetween(Double value1, Double value2) { + addCriterion("ave_score not between", value1, value2, "aveScore"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/sztzjy/digital_credit/entity/dto/TchAvgScoreByTimeDTO.java b/src/main/java/com/sztzjy/digital_credit/entity/dto/TchAvgScoreByTimeDTO.java new file mode 100644 index 0000000..f4da193 --- /dev/null +++ b/src/main/java/com/sztzjy/digital_credit/entity/dto/TchAvgScoreByTimeDTO.java @@ -0,0 +1,23 @@ +package com.sztzjy.digital_credit.entity.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author 17803 + * @date 2024-04-30 14:57 + */ + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class TchAvgScoreByTimeDTO { + //得分,以逗号分隔,例如:2022-10-01,2022-10-02,2022-10-03 + private String avgScoreList; + + //日期列表,以逗号分隔,例如:20,21,10 + private String dataList; +} diff --git a/src/main/java/com/sztzjy/digital_credit/entity/dto/TchAvgScoreByTimeParentDTO.java b/src/main/java/com/sztzjy/digital_credit/entity/dto/TchAvgScoreByTimeParentDTO.java new file mode 100644 index 0000000..643138d --- /dev/null +++ b/src/main/java/com/sztzjy/digital_credit/entity/dto/TchAvgScoreByTimeParentDTO.java @@ -0,0 +1,26 @@ +package com.sztzjy.digital_credit.entity.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @author 17803 + * @date 2024-04-30 14:57 + */ + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class TchAvgScoreByTimeParentDTO { + + private String classList; + + + //日期列表,以逗号分隔,例如:20,21,10 + private TchAvgScoreByTimeDTO baseInfo; +} 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 11dd716..305272f 100644 --- a/src/main/java/com/sztzjy/digital_credit/mapper/StuScoreCenterMapper.java +++ b/src/main/java/com/sztzjy/digital_credit/mapper/StuScoreCenterMapper.java @@ -3,10 +3,8 @@ package com.sztzjy.digital_credit.mapper; import com.sztzjy.digital_credit.entity.StuScoreCenter; import com.sztzjy.digital_credit.entity.StuScoreCenterExample; import java.util.List; - -import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; -@Mapper + public interface StuScoreCenterMapper { long countByExample(StuScoreCenterExample example); diff --git a/src/main/java/com/sztzjy/digital_credit/mapper/TchClassAverageScoreMapper.java b/src/main/java/com/sztzjy/digital_credit/mapper/TchClassAverageScoreMapper.java new file mode 100644 index 0000000..f4e593d --- /dev/null +++ b/src/main/java/com/sztzjy/digital_credit/mapper/TchClassAverageScoreMapper.java @@ -0,0 +1,34 @@ +package com.sztzjy.digital_credit.mapper; + +import com.sztzjy.digital_credit.entity.TchClassAverageScore; +import com.sztzjy.digital_credit.entity.TchClassAverageScoreExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +public interface TchClassAverageScoreMapper { + long countByExample(TchClassAverageScoreExample example); + + int deleteByExample(TchClassAverageScoreExample example); + + int deleteByPrimaryKey(String id); + + int insert(TchClassAverageScore record); + + int insertSelective(TchClassAverageScore record); + + List selectByExample(TchClassAverageScoreExample example); + + TchClassAverageScore selectByPrimaryKey(String id); + + int updateByExampleSelective(@Param("record") TchClassAverageScore record, @Param("example") TchClassAverageScoreExample example); + + int updateByExample(@Param("record") TchClassAverageScore record, @Param("example") TchClassAverageScoreExample example); + + int updateByPrimaryKeySelective(TchClassAverageScore record); + + int updateByPrimaryKey(TchClassAverageScore record); + + //根据时间排序 + List selectByTime(@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 new file mode 100644 index 0000000..c79eb56 --- /dev/null +++ b/src/main/java/com/sztzjy/digital_credit/service/TchHomePageService.java @@ -0,0 +1,16 @@ +package com.sztzjy.digital_credit.service; + +import com.sztzjy.digital_credit.entity.dto.TchAvgScoreByTimeParentDTO; +import com.sztzjy.digital_credit.util.ResultEntity; + +import java.time.LocalDate; +import java.util.List; + +/** + * @author 17803 + * @date 2024-04-30 14:55 + */ +public interface TchHomePageService { + + ResultEntity> avgScoreTrendChart(String schoolId); +} diff --git a/src/main/java/com/sztzjy/digital_credit/service/impl/StuRateServiceImpl.java b/src/main/java/com/sztzjy/digital_credit/service/impl/StuRateServiceImpl.java index 4198e69..ee07d9f 100644 --- a/src/main/java/com/sztzjy/digital_credit/service/impl/StuRateServiceImpl.java +++ b/src/main/java/com/sztzjy/digital_credit/service/impl/StuRateServiceImpl.java @@ -870,7 +870,7 @@ public class StuRateServiceImpl implements StuRateService { StuUser user = userMapper.selectByPrimaryKey(userId); - //获取用户企业征信客观成绩 + //获取用户 企业征信 客观成绩 BigDecimal caseCorporateCreditObjScore = user.getCaseCorporateCreditObjScore(); if (user.getCaseCorporateCreditObjScore() == null){ caseCorporateCreditObjScore = BigDecimal.valueOf(0); @@ -884,7 +884,7 @@ public class StuRateServiceImpl implements StuRateService { if (caseCorporateCreditScore == null){ caseCorporateCreditScore = BigDecimal.valueOf(0); } - //赋值企业征信客观总的成绩 + //赋值 企业征信客观总的成绩 user.setCaseCorporateCreditScore(caseCorporateCreditScore.add(BigDecimal.valueOf(info))); userMapper.updateByPrimaryKeySelective(user); 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 new file mode 100644 index 0000000..28de42d --- /dev/null +++ b/src/main/java/com/sztzjy/digital_credit/service/impl/TchHomePageServiceImpl.java @@ -0,0 +1,117 @@ +package com.sztzjy.digital_credit.service.impl;/** + * @author 17803 + * @date 2024-04-30 14:55 + */ + +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.TchAvgScoreByTimeDTO; +import com.sztzjy.digital_credit.entity.dto.TchAvgScoreByTimeParentDTO; +import com.sztzjy.digital_credit.mapper.StuScoreCenterMapper; +import com.sztzjy.digital_credit.mapper.StuUserMapper; +import com.sztzjy.digital_credit.mapper.TchClassAverageScoreMapper; +import com.sztzjy.digital_credit.mapper.TchModuleWeithMapper; +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.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.util.*; +import java.util.stream.Collectors; + +@Service + +public class TchHomePageServiceImpl implements TchHomePageService { + + + @Autowired + private StuUserMapper userMapper; + + + @Autowired + private StuScoreCenterMapper scoreCenterMapper; + + @Autowired + private TchClassAverageScoreMapper tchClassAverageScoreMapper; + + + + @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); + } +} diff --git a/src/main/resources/generatorConfig.xml b/src/main/resources/generatorConfig.xml index f71b4cb..89e9c6c 100644 --- a/src/main/resources/generatorConfig.xml +++ b/src/main/resources/generatorConfig.xml @@ -66,7 +66,7 @@ - +
diff --git a/src/main/resources/mappers/StuScoreCenterMapper.xml b/src/main/resources/mappers/StuScoreCenterMapper.xml index 20521ce..1f67c73 100644 --- a/src/main/resources/mappers/StuScoreCenterMapper.xml +++ b/src/main/resources/mappers/StuScoreCenterMapper.xml @@ -17,6 +17,8 @@ + + @@ -79,7 +81,7 @@ id, learning_projects, training_duration, training_total_score, score_weight, training_score, class_ranking, completion_status, user_id, module, ascription, training_score_one, - training_score_two, training_score_three, number_of_training + training_score_two, training_score_three, number_of_training, completion_time, class_name @@ -276,6 +290,12 @@ number_of_training = #{record.numberOfTraining,jdbcType=INTEGER}, + + completion_time = #{record.completionTime,jdbcType=TIMESTAMP}, + + + class_name = #{record.className,jdbcType=VARCHAR}, + @@ -297,7 +317,9 @@ training_score_one = #{record.trainingScoreOne,jdbcType=DECIMAL}, training_score_two = #{record.trainingScoreTwo,jdbcType=DECIMAL}, training_score_three = #{record.trainingScoreThree,jdbcType=DECIMAL}, - number_of_training = #{record.numberOfTraining,jdbcType=INTEGER} + number_of_training = #{record.numberOfTraining,jdbcType=INTEGER}, + completion_time = #{record.completionTime,jdbcType=TIMESTAMP}, + class_name = #{record.className,jdbcType=VARCHAR} @@ -347,6 +369,12 @@ number_of_training = #{numberOfTraining,jdbcType=INTEGER}, + + completion_time = #{completionTime,jdbcType=TIMESTAMP}, + + + class_name = #{className,jdbcType=VARCHAR}, + where id = #{id,jdbcType=INTEGER} @@ -365,7 +393,9 @@ training_score_one = #{trainingScoreOne,jdbcType=DECIMAL}, training_score_two = #{trainingScoreTwo,jdbcType=DECIMAL}, training_score_three = #{trainingScoreThree,jdbcType=DECIMAL}, - number_of_training = #{numberOfTraining,jdbcType=INTEGER} + number_of_training = #{numberOfTraining,jdbcType=INTEGER}, + completion_time = #{completionTime,jdbcType=TIMESTAMP}, + class_name = #{className,jdbcType=VARCHAR} where id = #{id,jdbcType=INTEGER} \ No newline at end of file diff --git a/src/main/resources/mappers/TchClassAverageScoreMapper.xml b/src/main/resources/mappers/TchClassAverageScoreMapper.xml new file mode 100644 index 0000000..8b5c9f9 --- /dev/null +++ b/src/main/resources/mappers/TchClassAverageScoreMapper.xml @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, class_id, class_name, create_time, ave_score + + + + + delete from tch_class_average_score + where id = #{id,jdbcType=VARCHAR} + + + delete from tch_class_average_score + + + + + + insert into tch_class_average_score (id, class_id, class_name, + create_time, ave_score) + values (#{id,jdbcType=VARCHAR}, #{classId,jdbcType=VARCHAR}, #{className,jdbcType=VARCHAR}, + #{createTime,jdbcType=TIMESTAMP}, #{aveScore,jdbcType=DOUBLE}) + + + insert into tch_class_average_score + + + id, + + + class_id, + + + class_name, + + + create_time, + + + ave_score, + + + + + #{id,jdbcType=VARCHAR}, + + + #{classId,jdbcType=VARCHAR}, + + + #{className,jdbcType=VARCHAR}, + + + #{createTime,jdbcType=TIMESTAMP}, + + + #{aveScore,jdbcType=DOUBLE}, + + + + + + + update tch_class_average_score + + + id = #{record.id,jdbcType=VARCHAR}, + + + class_id = #{record.classId,jdbcType=VARCHAR}, + + + class_name = #{record.className,jdbcType=VARCHAR}, + + + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + + + ave_score = #{record.aveScore,jdbcType=DOUBLE}, + + + + + + + + update tch_class_average_score + set id = #{record.id,jdbcType=VARCHAR}, + class_id = #{record.classId,jdbcType=VARCHAR}, + class_name = #{record.className,jdbcType=VARCHAR}, + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + ave_score = #{record.aveScore,jdbcType=DOUBLE} + + + + + + update tch_class_average_score + + + class_id = #{classId,jdbcType=VARCHAR}, + + + class_name = #{className,jdbcType=VARCHAR}, + + + create_time = #{createTime,jdbcType=TIMESTAMP}, + + + ave_score = #{aveScore,jdbcType=DOUBLE}, + + + where id = #{id,jdbcType=VARCHAR} + + + update tch_class_average_score + set class_id = #{classId,jdbcType=VARCHAR}, + class_name = #{className,jdbcType=VARCHAR}, + create_time = #{createTime,jdbcType=TIMESTAMP}, + ave_score = #{aveScore,jdbcType=DOUBLE} + where id = #{id,jdbcType=VARCHAR} + + + + + + + + + \ No newline at end of file