个人作业第二阶段3

完成教师功能页功能总结汇表后端代码:
数据库:

CREATE TABLE summary_statistics (
    id INT PRIMARY KEY AUTO_INCREMENT,
    class_name VARCHAR(50),
    user_id INT,
    username VARCHAR(50),
    total_count INT,
    FOREIGN KEY (user_id) REFERENCES user(user_id)
);

实体类:

package com.demo.entity;

public class SummaryStatistics {
    private int id;
    private String className;
    private int userId;
    private String username;
    private int totalCount;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getClassName() {
        return className;
    }

    public void setClassName(String className) {
        this.className = className;
    }

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public int getTotalCount() {
        return totalCount;
    }

    public void setTotalCount(int totalCount) {
        this.totalCount = totalCount;
    }

    @Override
    public String toString() {
        return "SummaryStatistics{" +
                "id=" + id +
                ", className='" + className + '\'' +
                ", userId=" + userId +
                ", username='" + username + '\'' +
                ", totalCount=" + totalCount +
                '}';
    }
}

Mapper接口:


package com.demo.mapper;

import com.demo.entity.SummaryStatistics;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface SummaryStatisticsMapper {
    
    // 添加统计记录
    void add(SummaryStatistics summaryStatistics);
    
    // 更新统计记录
    void update(SummaryStatistics summaryStatistics);
    
    // 查询所有统计记录
    @Select("SELECT * FROM summary_statistics ORDER BY total_count DESC")
    List<SummaryStatistics> selectAll();
    
    // 根据用户ID查询统计记录
    @Select("SELECT * FROM summary_statistics WHERE user_id = #{userId}")
    SummaryStatistics selectByUserId(int userId);
    
    // 清空统计表
    @Delete("DELETE FROM summary_statistics")
    void clearAll();
    
    // 生成统计数据
    @Select("INSERT INTO summary_statistics (class_name, user_id, username, total_count) " +
            "SELECT '学生', u.user_id, u.username, COUNT(ds.id) " +
            "FROM user u " +
            "LEFT JOIN daily_summaries ds ON u.user_id = ds.user_id " +
            "WHERE u.role = 0 " +
            "GROUP BY u.user_id, u.username")
    void generateStatistics();
}

Mapper XML文件:

<?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.demo.mapper.SummaryStatisticsMapper">
    <insert id="add" parameterType="com.demo.entity.SummaryStatistics" useGeneratedKeys="true" keyProperty="id">
        INSERT INTO summary_statistics (
            class_name,
            user_id,
            username,
            total_count
        ) VALUES (
            #{className},
            #{userId},
            #{username},
            #{totalCount}
        )
    </insert>
    
    <update id="update" parameterType="com.demo.entity.SummaryStatistics">
        UPDATE summary_statistics
        SET class_name = #{className},
            total_count = #{totalCount}
        WHERE user_id = #{userId}
    </update>
</mapper>

Service类:

package com.demo.service;

import com.demo.entity.SummaryStatistics;
import com.demo.mapper.SummaryStatisticsMapper;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class SummaryStatisticsService {

    @Resource
    private SummaryStatisticsMapper summaryStatisticsMapper;

    public void generateStatistics() {
        // 先清空统计表
        summaryStatisticsMapper.clearAll();
        // 重新生成统计数据
        summaryStatisticsMapper.generateStatistics();
    }

    public List<SummaryStatistics> selectAll() {
        return summaryStatisticsMapper.selectAll();
    }

    public SummaryStatistics selectByUserId(int userId) {
        return summaryStatisticsMapper.selectByUserId(userId);
    }
}

Controller类:

package com.demo.controller;

import com.demo.common.Result;
import com.demo.entity.SummaryStatistics;
import com.demo.service.SummaryStatisticsService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/statistics")
public class SummaryStatisticsController {
    @Resource
    private SummaryStatisticsService summaryStatisticsService;

    @GetMapping("/generate")
    public Result generateStatistics() {
        try {
            summaryStatisticsService.generateStatistics();
            return Result.success();
        } catch (Exception e) {
            return Result.error("500", "生成统计数据失败: " + e.getMessage());
        }
    }

    @GetMapping("/selectAll")
    public Result selectAll() {
        List<SummaryStatistics> list = summaryStatisticsService.selectAll();
        return Result.success(list);
    }

    @GetMapping("/selectByUserId/{userId}")
    public Result selectByUserId(@PathVariable int userId) {
        SummaryStatistics statistics = summaryStatisticsService.selectByUserId(userId);
        return Result.success(statistics);
    }
}
posted @ 2025-04-22 21:01  vivi_vimi  阅读(4)  评论(0)    收藏  举报