From af9c2d7580f30b649b50ab299a0039f13a14c40b Mon Sep 17 00:00:00 2001 From: poppoppuppylove <431792974@qq.com> Date: Sat, 28 Sep 2024 00:22:09 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=AD=A6=E7=94=9F=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E7=9A=84=E9=83=A8=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../attendance/AttendanceApplication.java | 13 ++++ .../controller/StudentController.java | 66 +++++++++++++++++++ .../example/attendance/dto/StudentDTO.java | 14 ++++ .../attendance/dto/StudentExcelDTO.java | 13 ++++ .../example/attendance/entity/Student.java | 2 +- .../attendance/mapper/StudentMapper.java | 22 +++++++ .../attendance/service/StudentService.java | 15 +++++ .../service/impl/StudentServiceImpl.java | 52 +++++++++++++++ src/main/resources/application.properties | 7 ++ 9 files changed, 203 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/example/attendance/AttendanceApplication.java create mode 100644 src/main/java/com/example/attendance/controller/StudentController.java create mode 100644 src/main/java/com/example/attendance/dto/StudentDTO.java create mode 100644 src/main/java/com/example/attendance/dto/StudentExcelDTO.java create mode 100644 src/main/java/com/example/attendance/mapper/StudentMapper.java create mode 100644 src/main/java/com/example/attendance/service/StudentService.java create mode 100644 src/main/java/com/example/attendance/service/impl/StudentServiceImpl.java create mode 100644 src/main/resources/application.properties diff --git a/src/main/java/com/example/attendance/AttendanceApplication.java b/src/main/java/com/example/attendance/AttendanceApplication.java new file mode 100644 index 0000000..f4a855d --- /dev/null +++ b/src/main/java/com/example/attendance/AttendanceApplication.java @@ -0,0 +1,13 @@ +package com.example.attendance; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class AttendanceApplication { + + public static void main(String[] args) { + SpringApplication.run(AttendanceApplication.class, args); + } + +} diff --git a/src/main/java/com/example/attendance/controller/StudentController.java b/src/main/java/com/example/attendance/controller/StudentController.java new file mode 100644 index 0000000..54f4aa0 --- /dev/null +++ b/src/main/java/com/example/attendance/controller/StudentController.java @@ -0,0 +1,66 @@ +package com.example.attendance.controller; + +import com.example.attendance.entity.Student; +import com.example.attendance.service.StudentService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; + +@RestController +@RequestMapping("/api/students") +public class StudentController { + + @Autowired + private StudentService studentService; + + @GetMapping("/") + public ResponseEntity> getAllStudents() { + List students = studentService.getAllStudents(); + return ResponseEntity.ok(students); + } + + @GetMapping("/{id}") + public ResponseEntity getStudent(@PathVariable Long id) { + Student student = studentService.getStudentById(id); + if (student != null) { + return ResponseEntity.ok(student); + } else { + return ResponseEntity.notFound().build(); + } + } + + @PostMapping("/") + public ResponseEntity addStudent(@RequestBody Student student) { + studentService.addStudent(student); + return ResponseEntity.ok(student); + } + + @PutMapping("/{id}") + public ResponseEntity updateStudentPoints(@PathVariable Long id, @RequestParam int points) { + studentService.updateStudentPoints(id, points); + Student updatedStudent = studentService.getStudentById(id); + return ResponseEntity.ok(updatedStudent); + } + + /** + * 上传Excel文件并导入学生数据 + * @param file Excel文件 + * @return 导入结果 + */ + @PostMapping("/import") + public String importStudents(@RequestParam("file") MultipartFile file) { + if (file.isEmpty()) { + return "请上传有效的Excel文件"; + } + + try { + studentService.importStudents(file); + return "学生数据导入成功"; + } catch (Exception e) { + return "学生数据导入失败:" + e.getMessage(); + } + } +} diff --git a/src/main/java/com/example/attendance/dto/StudentDTO.java b/src/main/java/com/example/attendance/dto/StudentDTO.java new file mode 100644 index 0000000..f1b9bfa --- /dev/null +++ b/src/main/java/com/example/attendance/dto/StudentDTO.java @@ -0,0 +1,14 @@ +package com.example.attendance.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class StudentDTO { + private Long id; + private String name; + private int currentPoints; +} diff --git a/src/main/java/com/example/attendance/dto/StudentExcelDTO.java b/src/main/java/com/example/attendance/dto/StudentExcelDTO.java new file mode 100644 index 0000000..5376b9a --- /dev/null +++ b/src/main/java/com/example/attendance/dto/StudentExcelDTO.java @@ -0,0 +1,13 @@ +package com.example.attendance.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class StudentExcelDTO { + private String name; + private String studentId; +} diff --git a/src/main/java/com/example/attendance/entity/Student.java b/src/main/java/com/example/attendance/entity/Student.java index 4f21499..71330f9 100644 --- a/src/main/java/com/example/attendance/entity/Student.java +++ b/src/main/java/com/example/attendance/entity/Student.java @@ -17,4 +17,4 @@ public class Student { private boolean skipNextCall; // 是否跳过下次点名 private boolean borrowingPoints; // 是否借用积分 private boolean increasedCallChance; // 点名概率是否增加 -} +} \ No newline at end of file diff --git a/src/main/java/com/example/attendance/mapper/StudentMapper.java b/src/main/java/com/example/attendance/mapper/StudentMapper.java new file mode 100644 index 0000000..417d18b --- /dev/null +++ b/src/main/java/com/example/attendance/mapper/StudentMapper.java @@ -0,0 +1,22 @@ +package com.example.attendance.mapper; + +import com.example.attendance.entity.Student; +import org.apache.ibatis.annotations.*; + +import java.util.List; + +@Mapper +public interface StudentMapper { + + @Select("SELECT * FROM students WHERE id = #{id}") + Student getStudentById(Long id); + + @Select("SELECT * FROM students") + List getAllStudents(); + + @Insert("INSERT INTO students(name, initialPoints, currentPoints) VALUES(#{name}, #{initialPoints}, #{currentPoints})") + void insertStudent(Student student); + + @Update("UPDATE students SET currentPoints = #{currentPoints} WHERE id = #{id}") + void updateStudentPoints(@Param("id") Long id, @Param("currentPoints") int currentPoints); +} diff --git a/src/main/java/com/example/attendance/service/StudentService.java b/src/main/java/com/example/attendance/service/StudentService.java new file mode 100644 index 0000000..9d7cffb --- /dev/null +++ b/src/main/java/com/example/attendance/service/StudentService.java @@ -0,0 +1,15 @@ +package com.example.attendance.service; + +import com.example.attendance.dto.StudentExcelDTO; +import com.example.attendance.entity.Student; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; + +public interface StudentService { + void importStudents(MultipartFile file); + List getAllStudents(); + Student getStudentById(Long id); + void addStudent(Student student); + void updateStudentPoints(Long id, int points); +} diff --git a/src/main/java/com/example/attendance/service/impl/StudentServiceImpl.java b/src/main/java/com/example/attendance/service/impl/StudentServiceImpl.java new file mode 100644 index 0000000..608157d --- /dev/null +++ b/src/main/java/com/example/attendance/service/impl/StudentServiceImpl.java @@ -0,0 +1,52 @@ +package com.example.attendance.service.impl; + +import com.alibaba.excel.EasyExcel; +import com.example.attendance.dto.StudentExcelDTO; +import com.example.attendance.entity.Student; +import com.example.attendance.listener.StudentExcelListener; +import com.example.attendance.mapper.StudentMapper; +import com.example.attendance.service.StudentService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.InputStream; +import java.util.List; + +@Service +public class StudentServiceImpl implements StudentService { + + @Autowired + private StudentMapper studentMapper; + + @Override + public void importStudents(MultipartFile file) { + try (InputStream inputStream = file.getInputStream()) { + EasyExcel.read(inputStream, StudentExcelDTO.class, new StudentExcelListener(studentMapper)) + .sheet() + .doRead(); + } catch (Exception e) { + throw new RuntimeException("从Excel导入学生数据失败", e); + } + } + + @Override + public List getAllStudents() { + return studentMapper.getAllStudents(); + } + + @Override + public Student getStudentById(Long id) { + return studentMapper.getStudentById(id); + } + + @Override + public void addStudent(Student student) { + studentMapper.insertStudent(student); + } + + @Override + public void updateStudentPoints(Long id, int points) { + studentMapper.updateStudentPoints(id, points); + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..0ac666c --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1,7 @@ +spring.application.name=attendance +spring.datasource.url=jdbc:mysql://localhost:3306/roll_call_system +spring.datasource.username=root +spring.datasource.password=123456789jk +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver + +mybatis.mapper-locations=classpath:mappers/*.xml