多模块项目使用springboot框架进行业务处理

news2025/5/31 15:25:05

项目目录

1、在Result定义返回结果

package com.edu.result;

import lombok.Data;

import java.io.Serializable;

/**
 * 后端统一返回结果
 * @param <T>
 */
@Data
public class Result<T> implements Serializable {

    private Integer code; //编码:1成功,0和其它数字为失败
    private String msg; //错误信息
    private T data; //数据

    public static <T> Result<T> success() {
        Result<T> result = new Result<T>();
        result.code = 1;
        return result;
    }

    public static <T> Result<T> success(T object) {
        Result<T> result = new Result<T>();
        result.data = object;
        result.code = 1;
        return result;
    }

    public static <T> Result<T> error(String msg) {
        Result result = new Result();
        result.msg = msg;
        result.code = 0;
        return result;
    }

}

2、写实体类(entity,和表中的属性一一对应) 

package com.edu.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Class {
    private String classId;
    private int classSize;
    private String headTeacher;
    private int attendanceTimes;
    private int focus;
}

3、在(vo)中定义类,写自己想要返回的属性

package com.edu.vo;

import io.swagger.models.auth.In;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class AbsentStuVo {
    private String personName;
    private String studentId;
    private String classId;
    private Integer attendanceStatus;
    private String headTeacher;
    private String attendRate;
}

3、书写mapper层

package com.edu.mapper;

import com.edu.vo.*;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;


@Mapper
public interface StudentMapper {
    /**
     * 根据学生id显示请假列表
     * @param studentId
     * @return
     */

    @Select("select start_time, end_time, reason, leave_status, submit_time from leave_applications where student_id=#{studentId}")
    List<LeaveApplicationsVo> listLeaveApplications(String studentId);

    /**
     * 根据学生id显示迟到列表
     * @param studentId
     * @return
     */

    @Select("select  l.late_date,c.course_session,c.course_name , l.teacher,l.entry_time,l.late_duration from late_attendance l left join course c on c.course_id=l.course_id where l.student_id=#{studentId}")
    List<LateAttendanceVo> listLateAttendance(String studentId);

    /**
     *根据学生id显示旷课列表
     * @param studentId
     * @return
     */
    @Select("select  a.absence_date,a.class_period,u.course_name,a.teacher from absence_record a left join course u on u.course_id=a.course_id where a.student_id=#{studentId}")
    List<AbsenceRecordVo> listAbsenceRecord(String studentId);

    /**
     * 请假列表详情
     * @param studentId
     * @return
     */
    @Select("select l.student_id, s.student_name, l.start_time,l.end_time,l.reason,l.leave_status from leave_applications l left join student s on l.student_id=s.student_id where l.student_id=#{studentId}")
    List<LeaveApplicationsdetailVo> LeaveApplicationsdetail(String studentId);


    /**
     * 根据学生id查询该学生各科的缺勤次数
     * @param studentId
     * @return
     */
    @Select("SELECT c.course_name, IFNULL(COUNT( DISTINCT a.absent_id), 0) AS absence_count FROM course c LEFT JOIN absent_students a ON c.course_id = a.course_id AND a.student_id = #{studentId} GROUP BY c.course_name")
    List<CourseAbsenceCountVo> viewAbsenceCountsForSubjects(String studentId);

    /**
     * 根据学生id查询学生信息
     * @param studentId
     * @return
     */
    @Select("SELECT s.student_id, s.student_name, c.class_name, c.head_teacher," +
            " (pa.attendance_count /(pa.attendance_count + pa.leave_count+pa.absent_count)) * 100 AS attendance_rate  " +
            "FROM  student s JOIN  class c ON s.class_id = c.class_id  JOIN personal_attendance pa ON s.student_id = pa.student_id " +
            "WHERE s.student_id = #{studentId}")

    List<StudentDetailVO> viewStudentDetail(String studentId);

    /**
     * 申请请假
     * @param studentId 学生id
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param reason 原因
     * @return
     */
    @Insert("INSERT INTO leave_applications (student_id, start_time, end_time, reason, submit_time)" +
            "VALUES (#{studentId}, #{startTime}, #{endTime}, #{reason}, NOW())")
    Integer insertLeaveRequest(String studentId, String startTime, String endTime, String reason);
}

4、编写service层

package com.edu.service;

import com.edu.result.Result;
import com.edu.vo.*;

import java.util.List;

public interface StudentService {
    /**
     * 根据学生id显示请假列表
     * @param studentId
     * @return
     */
    List<LeaveApplicationsVo> listLeaveApplications(String studentId);

    /**
     * 根据学生id显示迟到列表
     * @param studentId
     * @return
     */
    List<LateAttendanceVo> listLateAttendance(String studentId);

    /**
     * 根据学生id显示旷课列表
     * @param studentId
     * @return
     */
    List<AbsenceRecordVo> listAbsenceRecord(String studentId);

    /**
     * 请假列表详情
     * @param studentId
     * @return
     */
    List<LeaveApplicationsdetailVo> LeaveApplicationsdetail(String studentId);

    /**
     * 根据学生id查询该学生各科的缺勤次数
     * @param studentId
     * @return
     */
    List<CourseAbsenceCountVo> viewAbsenceCountsForSubjects(String studentId);

    /**
     * 根据学生id查询学生信息
     * @param studentId
     * @return
     */
    List<StudentDetailVO> viewStudentDetail(String studentId);

    /**
     * 申请请假
     * @param studentId 学生id
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param reason 原因
     * @return
     */
    Result insertLeaveRequest(String studentId, String startTime, String endTime, String reason);

}

5、编写service层逻辑

package com.edu.service.Impl;

import com.edu.mapper.StudentMapper;
import com.edu.result.Result;
import com.edu.service.StudentService;
import com.edu.vo.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
@Slf4j
public class StudentServiceImpl implements StudentService {
    @Autowired
    private StudentMapper studentMapper;

    /**
     * 根据学生id显示请假列表
     * @param studentId
     * @return
     */
    @Override
    public List<LeaveApplicationsVo> listLeaveApplications(String studentId){

        return studentMapper.listLeaveApplications(studentId);
    }

    /**
     * 根据学生id显示迟到列表
     * @param studentId
     * @return
     */
    @Override
    public  List<LateAttendanceVo> listLateAttendance(String studentId){

        return studentMapper.listLateAttendance(studentId);
    }

    /**
     * 根据学生id显示旷课列表
     * @param studentId
     * @return
     */
    @Override
    public  List<AbsenceRecordVo> listAbsenceRecord(String studentId){

        return studentMapper.listAbsenceRecord(studentId);
    }

    /**
     * 请假列表详情
     * @param studentId
     * @return
     */
    @Override
    public List<LeaveApplicationsdetailVo> LeaveApplicationsdetail(String studentId){
        return studentMapper.LeaveApplicationsdetail(studentId);
    }

    /**
     * 根据学生id查询该学生各科的缺勤次数
     * @param studentId
     * @return
     */
    @Override
    public List<CourseAbsenceCountVo> viewAbsenceCountsForSubjects(String studentId){
        return studentMapper.viewAbsenceCountsForSubjects(studentId);
    }

    /**
     * 根据学生id查询学生信息
     * @param studentId
     * @return
     */
    @Override
    public  List<StudentDetailVO> viewStudentDetail(String studentId){
        return studentMapper.viewStudentDetail(studentId);
    }

    /**
     * 申请请假
     * @param studentId 学生id
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param reason 原因
     * @return
     */
    @Override
    public Result insertLeaveRequest(String studentId, String startTime, String endTime, String reason){
        try {

            int deletedCount = studentMapper.insertLeaveRequest(studentId,startTime,endTime,reason);
            if (deletedCount == 0) {
                return Result.error("插入失败");
            } else {
                return Result.success("插入成功");
            }
        } catch (Exception e) {
            // 记录异常或进行其他处理
            return Result.error("插入时发生错误:" + e.getMessage());
        }
    }


}

6、编写控制层(controller)

package com.edu.controller;

import com.edu.result.Result;
import com.edu.service.StudentService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/attendance/student")
@Slf4j
public class StudentController {
    @Autowired
    private StudentService studentService;

    /**
     * 根据学生id显示请假列表
     * @param studentId
     * @return
     */
    @GetMapping("/listLeaveApplications")
    public Result listLeaveApplications(String studentId)  {
        return Result.success(studentService.listLeaveApplications(studentId));
    }

    /**
     * 根据学生id显示迟到列表
     * @param studentId
     * @return
     */
    @GetMapping("/listLateAttendance")
    public Result listLateAttendance(String studentId)  {
        return Result.success(studentService.listLateAttendance(studentId));
    }

    /**
     * 根据学生id显示旷课列表
     * @param studentId
     * @return
     */
    @GetMapping("/listAbsenceRecord")
    public Result listAbsenceRecord(String studentId)  {
        return Result.success(studentService.listAbsenceRecord(studentId));
    }

    /**
     * 请假列表详情
     * @param studentId
     * @return
     */
    @GetMapping("/viewLeaveApplications")
    public Result LeaveApplicationsdetail(String studentId)  {
        return Result.success(studentService.LeaveApplicationsdetail(studentId));
    }

    /**
     * 根据学生id查询该学生各科的缺勤次数
     * @param studentId
     * @return
     */
    @GetMapping("/viewAbsenceCountsForSubjects")
    public Result viewAbsenceCountsForSubjects(String studentId)  {
        return Result.success(studentService.viewAbsenceCountsForSubjects(studentId));
    }

    /**
     * 根据学生id查询学生信息
     * @param studentId
     * @return
     */
    @GetMapping("/viewStudentDetail")
    public Result viewStudentDetail(String studentId)  {
        return Result.success(studentService.viewStudentDetail(studentId));
    }

    /**
     * 申请请假
     * @param studentId 学生id
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param reason 原因
     * @return
     */
    @PostMapping("/insertLeaveRequest")
    public Result insertLeaveRequest(String studentId, String startTime, String endTime, String reason)  {
        return Result.success(studentService.insertLeaveRequest(studentId,startTime,endTime,reason));
    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1592980.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大模型笔记:Prompt tuning

1 NLP模型的几个阶段 1.1 第一阶段&#xff08;在深度学习出现之前&#xff09; 通常聚焦于特征工程&#xff08;feature engineering&#xff09;利用领域知识从数据中提取好的特征 1.2 第二阶段&#xff08;在深度学习出现之后&#xff09; 特征可以从数据中习得——>…

K8s下部署grafana

1. 系统要求 最小化的软硬件要求 最小化硬件要求 磁盘空间: 1 GB内存: 750 MiB (approx 750 MB)CPU: 250m (approx 2.5 cores) 2. k8s部署grafana步骤 1) 创建名字空间 kubectl create namespace my-grafana 2) 创建yaml vim grafana.yaml yaml包含如下三个资源对象 Ob…

C++11 数据结构2 线性表的链式存储,实现,测试

线性表的链式存储 --单链表 前面我们写的线性表的顺序存储(动态数组)的案例&#xff0c;最大的缺点是插入和删除时需要移动大量元素&#xff0c;这显然需要耗费时间&#xff0c;能不能想办法解决呢&#xff1f;链表。 链表为了表示每个数据元素与其直接后继元素之间的逻辑关系…

Chatgpt掘金之旅—有爱AI商业实战篇|SEO 咨询业务|(十七)

演示站点&#xff1a; https://ai.uaai.cn 对话模块 官方论坛&#xff1a; www.jingyuai.com 京娱AI 一、AI技术创业在SEO 咨询业务有哪些机会&#xff1f; 人工智能&#xff08;AI&#xff09;技术作为当今科技创新的前沿领域&#xff0c;为创业者提供了广阔的机会和挑战。随…

JVM垃圾回收(GC)

目录 目录 1.GC 简介 1.1. 引言 1.2. 何为 GC 1.2.1. 手动 GC 1.2.2. 自动 GC 引用计数法 标记清除 2.GC入门分析 2.1.碎片整理 1)对象创建时&#xff0c;执行写入操作越来越耗时 2&#xff09;内存分配错误 2.2. 分代设想 2.3. 对象分配 对象内存分配过程 2.4. …

创建SAP替代增强的过程

发现公司的凭证增强程序里没有前人写过完全替代的增强。没有完全替代增强想要实现一些复杂一点的替代就很难实现。所以我来创建一个完全替代&#xff0c;并且把过程记录下来&#xff0c;方便以后回头查看。 因为我公司已经实施过增强了&#xff0c;下面这个从零开始实施增强的大…

编曲知识17:音高修正 节奏修正 压缩器应用 压缩数值算法

34届音高修正 节奏修正 压缩器应用 压缩数值算法独立音乐人训练营基地,七年在线教育编曲系统授课,培养了几千名独立音乐人https://app8epdhy0u9502.pc.xiaoe-tech.com/detail/l_660be2e3e4b023c02af7abbc/4?course_id=course_2XLKtQnQx9GrQHac7OPmHD9tqbv 修音 准备工作 …

软件测试过程和测试生命周期

众所周知&#xff0c;软件生命周期包括&#xff0c;需求阶段、设计阶段、设计构建阶段、测试周期阶段、最后测试、实施阶段、最后运维和维护验收。每个阶段都需要在软件开发的生命周期中从前一阶段交付。需求转化为设计&#xff0c;设计转化为开发和开发成测试&#xff0c;经过…

AD7982BRMZRL7 二进制 500kSPS 模数转换芯片 ADI

AD7982BRMZRL7是一款由Analog Devices&#xff08;亚德诺&#xff09;公司生产的18位逐次逼近型模数转换器&#xff08;ADC&#xff09;。它主要用于将模拟信号转换为数字信号&#xff0c;适用于数据采集系统、嵌入式系统、工业控制和医疗设备等领域。 AD7982BRMZRL7的主要功能…

【Unity+Python】如何通过Socket进行通信

1、Unity端创建名为UnityClient.cs脚本代码(客户端)&#xff1a; 注意&#xff1a;unity的规则中类&#xff0c;名和脚本文件名需要相同。 using System.Net.Sockets; using System.Text; using UnityEngine;public class UnityClient : MonoBehaviour {TcpClient client;Netw…

校园卡和流量卡哪个好

校园卡和流量卡哪个好 由于在某运营商工作过&#xff0c;很多人都会问我&#xff0c;校园卡和纯流量卡&#xff08;也就是物联网卡&#xff09;到底坑不坑&#xff01;&#xff01; 今天给大家解答一下&#xff0c;纯流量卡&#xff0c;也就是你打任何一家运营商客服专线都查不…

JavaScript:事件循环机制(同步、异步)(单、多线程)

事件循环机制: 多进程和多线程 1. 进程&#xff1a;程序的一次执行, 它占有一片独有的内存空间 2. 线程&#xff1a; CPU的基本调度单位, 是程序执行的一个完整流程 3. 进程与线程 * 一个进程中一般至少有一个运行的线程: 主线程 * 一个进程中也可以同时运行多个线程, 我们…

[大模型] BlueLM-7B-Chat WebDemo 部署

BlueLM-7B-Chat WebDemo 部署 模型介绍 BlueLM-7B 是由 vivo AI 全球研究院自主研发的大规模预训练语言模型&#xff0c;参数规模为 70 亿。BlueLM-7B 在 C-Eval 和 CMMLU 上均取得领先结果&#xff0c;对比同尺寸开源模型中具有较强的竞争力(截止11月1号)。本次发布共包含 7…

Golang | Leetcode Golang题解之第25题K个一组翻转链表

题目&#xff1a; 题解&#xff1a; func reverseKGroup(head *ListNode, k int) *ListNode {hair : &ListNode{Next: head}pre : hairfor head ! nil {tail : prefor i : 0; i < k; i {tail tail.Nextif tail nil {return hair.Next}}nex : tail.Nexthead, tail my…

微信小程序兼容iphone适配安全区域

背景&#xff1a; 小程序页面底部在ios中会有小黑条遮挡 上代码&#xff1a; padding-bottom: constant(safe-area-inset-bottom); /* 兼容 iOS < 11.2 */ padding-bottom: env(safe-area-inset-bottom); /* 兼容 iOS > 11.2 */ 项目描述&#xff1a; 微信小程序是通过…

DonkeyDocker-v1-0渗透思路

MY_BLOG https://xyaxxya.github.io/2024/04/13/DonkeyDocker-v1-0%E6%B8%97%E9%80%8F%E6%80%9D%E8%B7%AF/ date: 2024-04-13 19:15:10 tags: 内网渗透Dockerfile categories: 内网渗透vulnhub 靶机下载地址 https://www.vulnhub.com/entry/donkeydocker-1,189/ 靶机IP&a…

补充continue,break

一&#xff0c;continue 该关键字用于立即跳出本次循环&#xff0c;继续下一次循环 二&#xff0c;break 退出循环&#xff0c;不再执行

gma 2.0.8 (2024.04.12) 更新日志

安装 gma 2.0.8 pip install gma2.0.8网盘下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1P0nmZUPMJaPEmYgixoL2QQ?pwd1pc8 提取码&#xff1a;1pc8 注意&#xff1a;此版本没有Linux版&#xff01; 编译gma的Linux虚拟机没有时间修复&#xff0c;本期Linux版继…

Redis入门到通关之String命令

文章目录 ⛄1 String 介绍⛄2 命令⛄3 对应 RedisTemplate API❄️❄️ 3.1 添加缓存❄️❄️ 3.2 设置过期时间(单独设置)❄️❄️ 3.3 获取缓存值❄️❄️ 3.4 删除key❄️❄️ 3.5 顺序递增❄️❄️ 3.6 顺序递减 ⛄4 以下是一些常用的API⛄5 应用场景 ⛄1 String 介绍 Stri…

康耐视visionpro-CogCaliperTool操作工具详细说明

CogCaliperTool]功能说明:卡尺工具,用于测量距离 ◆CogCaliperTool操作说明: ①.打开工具栏,双击或点击鼠标拖拽添加CogCaliperTool ②.添加输入图像,右键“链接到”或以连线拖拽的方式选择相应输入源 ③.拖动屏幕上的矩形框到需要测量的位置。卡尺的搜索框角度与边缘不…