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<StuUser> stuUsersList = userMapper.selectByExample(userExample);
+        //根据学校ID查询所有的班级列表 class_name
+        List<String> classNameList = stuUsersList.stream().map(StuUser::getClassName).distinct().collect(Collectors.toList());
+
+        for (String className : classNameList) {
+
+            StuUserExample userExample1 = new StuUserExample();
+            userExample1.createCriteria().andClassNameEqualTo(className);
+            //获取该班所有学生
+            List<StuUser> userListByClassName = userMapper.selectByExample(userExample1);
+            //汇总总分
+            List<BigDecimal> 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<List<TchAvgScoreByTimeParentDTO>> 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<Date> values) {
+            addCriterion("completion_time in", values, "completionTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCompletionTimeNotIn(List<Date> 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<String> values) {
+            addCriterion("class_name in", values, "className");
+            return (Criteria) this;
+        }
+
+        public Criteria andClassNameNotIn(List<String> 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<Criteria> 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<Criteria> 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<Criterion> criteria;
+
+        protected GeneratedCriteria() {
+            super();
+            criteria = new ArrayList<>();
+        }
+
+        public boolean isValid() {
+            return criteria.size() > 0;
+        }
+
+        public List<Criterion> getAllCriteria() {
+            return criteria;
+        }
+
+        public List<Criterion> 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<String> values) {
+            addCriterion("id in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotIn(List<String> 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<String> values) {
+            addCriterion("class_id in", values, "classId");
+            return (Criteria) this;
+        }
+
+        public Criteria andClassIdNotIn(List<String> 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<String> values) {
+            addCriterion("class_name in", values, "className");
+            return (Criteria) this;
+        }
+
+        public Criteria andClassNameNotIn(List<String> 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<Date> values) {
+            addCriterion("create_time in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotIn(List<Date> 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<Double> values) {
+            addCriterion("ave_score in", values, "aveScore");
+            return (Criteria) this;
+        }
+
+        public Criteria andAveScoreNotIn(List<Double> 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<TchClassAverageScore> 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<TchClassAverageScore> 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<List<TchAvgScoreByTimeParentDTO>> 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<List<TchAvgScoreByTimeParentDTO>> avgScoreTrendChart( String schoolId) {
+
+        List<TchAvgScoreByTimeParentDTO> tchAvgScoreByTimeParentDTOS = new ArrayList<TchAvgScoreByTimeParentDTO>();
+
+
+
+        //每天平均成绩集合
+        List<Double> avgScoreListByDate = new ArrayList<>();
+
+        //根据学校ID查询所有的班级列表 class_name
+        StuUserExample userExample = new StuUserExample();
+        userExample.createCriteria().andSchoolIdEqualTo(schoolId);
+
+        //学校所有班级
+        List<StuUser> userList = userMapper.selectByExample(userExample);
+
+        if (userList.isEmpty())
+        {
+            return new ResultEntity<>(HttpStatus.OK,"schoolId不存在");
+        }
+
+        //        查询出所有班级名
+        List<String> distinctClassNames = userList.stream()
+                .map(item -> item.getClassName())
+                .distinct()
+                .collect(Collectors.toList());
+
+        //遍历所有班级
+        for (String className : distinctClassNames) {
+            TchAvgScoreByTimeParentDTO tchAvgScoreByTimeParentDTO = new TchAvgScoreByTimeParentDTO();
+
+            tchAvgScoreByTimeParentDTO.setClassList(className);
+
+
+            List<TchClassAverageScore> tchClassAverageScores = tchClassAverageScoreMapper.selectByTime(className);
+
+            //成绩列表
+            List<Double> avgDoubleList = tchClassAverageScores.stream().map(TchClassAverageScore::getAveScore).collect(Collectors.toList());
+            //时间列表
+            List<Date> dateList = tchClassAverageScores.stream().map(TchClassAverageScore::getCreateTime).collect(Collectors.toList());
+
+            ArrayList<String> 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 @@
 <!--        <table tableName="tch_module_weith" domainObjectName="TchModuleWeith" />-->
 <!--                <table tableName="tch_assessment_points" domainObjectName="TchAssessmentPoints" />-->
         <!--        <table tableName="training_report" domainObjectName="TrainingReport" />-->
-        <table tableName="stu_breach_of_contract_training" domainObjectName="StuBreachOfContractTraining" />
+        <table tableName="tch_class_average_score" domainObjectName="TchClassAverageScore" />
     </context>
 
 
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 @@
     <result column="training_score_two" jdbcType="DECIMAL" property="trainingScoreTwo" />
     <result column="training_score_three" jdbcType="DECIMAL" property="trainingScoreThree" />
     <result column="number_of_training" jdbcType="INTEGER" property="numberOfTraining" />
+    <result column="completion_time" jdbcType="TIMESTAMP" property="completionTime" />
+    <result column="class_name" jdbcType="VARCHAR" property="className" />
   </resultMap>
   <sql id="Example_Where_Clause">
     <where>
@@ -79,7 +81,7 @@
   <sql id="Base_Column_List">
     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
   </sql>
   <select id="selectByExample" parameterType="com.sztzjy.digital_credit.entity.StuScoreCenterExample" resultMap="BaseResultMap">
     select
@@ -116,14 +118,14 @@
       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)
     values (#{id,jdbcType=INTEGER}, #{learningProjects,jdbcType=VARCHAR}, #{trainingDuration,jdbcType=INTEGER}, 
       #{trainingTotalScore,jdbcType=DECIMAL}, #{scoreWeight,jdbcType=DECIMAL}, #{trainingScore,jdbcType=DECIMAL}, 
       #{classRanking,jdbcType=INTEGER}, #{completionStatus,jdbcType=VARCHAR}, #{userId,jdbcType=VARCHAR}, 
       #{module,jdbcType=VARCHAR}, #{ascription,jdbcType=VARCHAR}, #{trainingScoreOne,jdbcType=DECIMAL}, 
-      #{trainingScoreTwo,jdbcType=DECIMAL}, #{trainingScoreThree,jdbcType=DECIMAL}, #{numberOfTraining,jdbcType=INTEGER}
-      )
+      #{trainingScoreTwo,jdbcType=DECIMAL}, #{trainingScoreThree,jdbcType=DECIMAL}, #{numberOfTraining,jdbcType=INTEGER}, 
+      #{completionTime,jdbcType=TIMESTAMP}, #{className,jdbcType=VARCHAR})
   </insert>
   <insert id="insertSelective" parameterType="com.sztzjy.digital_credit.entity.StuScoreCenter">
     insert into stu_score_center
@@ -173,6 +175,12 @@
       <if test="numberOfTraining != null">
         number_of_training,
       </if>
+      <if test="completionTime != null">
+        completion_time,
+      </if>
+      <if test="className != null">
+        class_name,
+      </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides=",">
       <if test="id != null">
@@ -220,6 +228,12 @@
       <if test="numberOfTraining != null">
         #{numberOfTraining,jdbcType=INTEGER},
       </if>
+      <if test="completionTime != null">
+        #{completionTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="className != null">
+        #{className,jdbcType=VARCHAR},
+      </if>
     </trim>
   </insert>
   <select id="countByExample" parameterType="com.sztzjy.digital_credit.entity.StuScoreCenterExample" resultType="java.lang.Long">
@@ -276,6 +290,12 @@
       <if test="record.numberOfTraining != null">
         number_of_training = #{record.numberOfTraining,jdbcType=INTEGER},
       </if>
+      <if test="record.completionTime != null">
+        completion_time = #{record.completionTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="record.className != null">
+        class_name = #{record.className,jdbcType=VARCHAR},
+      </if>
     </set>
     <if test="_parameter != null">
       <include refid="Update_By_Example_Where_Clause" />
@@ -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}
     <if test="_parameter != null">
       <include refid="Update_By_Example_Where_Clause" />
     </if>
@@ -347,6 +369,12 @@
       <if test="numberOfTraining != null">
         number_of_training = #{numberOfTraining,jdbcType=INTEGER},
       </if>
+      <if test="completionTime != null">
+        completion_time = #{completionTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="className != null">
+        class_name = #{className,jdbcType=VARCHAR},
+      </if>
     </set>
     where id = #{id,jdbcType=INTEGER}
   </update>
@@ -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}
   </update>
 </mapper>
\ 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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.sztzjy.digital_credit.mapper.TchClassAverageScoreMapper">
+  <resultMap id="BaseResultMap" type="com.sztzjy.digital_credit.entity.TchClassAverageScore">
+    <id column="id" jdbcType="VARCHAR" property="id" />
+    <result column="class_id" jdbcType="VARCHAR" property="classId" />
+    <result column="class_name" jdbcType="VARCHAR" property="className" />
+    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+    <result column="ave_score" jdbcType="DOUBLE" property="aveScore" />
+  </resultMap>
+  <sql id="Example_Where_Clause">
+    <where>
+      <foreach collection="oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Update_By_Example_Where_Clause">
+    <where>
+      <foreach collection="example.oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Base_Column_List">
+    id, class_id, class_name, create_time, ave_score
+  </sql>
+  <select id="selectByExample" parameterType="com.sztzjy.digital_credit.entity.TchClassAverageScoreExample" resultMap="BaseResultMap">
+    select
+    <if test="distinct">
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from tch_class_average_score
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null">
+      order by ${orderByClause}
+    </if>
+  </select>
+  <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
+    select 
+    <include refid="Base_Column_List" />
+    from tch_class_average_score
+    where id = #{id,jdbcType=VARCHAR}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.String">
+    delete from tch_class_average_score
+    where id = #{id,jdbcType=VARCHAR}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.sztzjy.digital_credit.entity.TchClassAverageScoreExample">
+    delete from tch_class_average_score
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.sztzjy.digital_credit.entity.TchClassAverageScore">
+    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>
+  <insert id="insertSelective" parameterType="com.sztzjy.digital_credit.entity.TchClassAverageScore">
+    insert into tch_class_average_score
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
+      <if test="classId != null">
+        class_id,
+      </if>
+      <if test="className != null">
+        class_name,
+      </if>
+      <if test="createTime != null">
+        create_time,
+      </if>
+      <if test="aveScore != null">
+        ave_score,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=VARCHAR},
+      </if>
+      <if test="classId != null">
+        #{classId,jdbcType=VARCHAR},
+      </if>
+      <if test="className != null">
+        #{className,jdbcType=VARCHAR},
+      </if>
+      <if test="createTime != null">
+        #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="aveScore != null">
+        #{aveScore,jdbcType=DOUBLE},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.sztzjy.digital_credit.entity.TchClassAverageScoreExample" resultType="java.lang.Long">
+    select count(*) from tch_class_average_score
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+
+    <update id="updateByExampleSelective" parameterType="map">
+    update tch_class_average_score
+    <set>
+      <if test="record.id != null">
+        id = #{record.id,jdbcType=VARCHAR},
+      </if>
+      <if test="record.classId != null">
+        class_id = #{record.classId,jdbcType=VARCHAR},
+      </if>
+      <if test="record.className != null">
+        class_name = #{record.className,jdbcType=VARCHAR},
+      </if>
+      <if test="record.createTime != null">
+        create_time = #{record.createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="record.aveScore != null">
+        ave_score = #{record.aveScore,jdbcType=DOUBLE},
+      </if>
+    </set>
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExample" parameterType="map">
+    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}
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.sztzjy.digital_credit.entity.TchClassAverageScore">
+    update tch_class_average_score
+    <set>
+      <if test="classId != null">
+        class_id = #{classId,jdbcType=VARCHAR},
+      </if>
+      <if test="className != null">
+        class_name = #{className,jdbcType=VARCHAR},
+      </if>
+      <if test="createTime != null">
+        create_time = #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="aveScore != null">
+        ave_score = #{aveScore,jdbcType=DOUBLE},
+      </if>
+    </set>
+    where id = #{id,jdbcType=VARCHAR}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.sztzjy.digital_credit.entity.TchClassAverageScore">
+    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}
+  </update>
+
+
+
+  <select id="selectByTime" parameterType="java.lang.String" resultMap="BaseResultMap">
+    select
+    <include refid="Base_Column_List" />
+    from tch_class_average_score
+    where
+    <if test="className != null">
+      class_name = #{className,jdbcType=VARCHAR}
+    </if>
+    AND create_time >= DATE_SUB(NOW(), INTERVAL 6 MONTH)
+    order by create_time asc
+  </select>
+
+
+
+</mapper>
\ No newline at end of file