From cee9efe2fcdcb239dc1e5c330d21a6758384ddb7 Mon Sep 17 00:00:00 2001 From: Administrator Date: Mon, 13 Jul 2026 15:18:02 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E5=99=A8=E6=9D=90?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=92=8C=E8=AF=BE=E7=A8=8B=E9=A2=84=E7=BA=A6?= =?UTF-8?q?=E5=90=8E=E7=AB=AF=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/EnrollmentController.java | 57 ++++++++ .../controller/EquipmentController.java | 56 ++++++++ .../situ/stlserver/dao/EnrollmentMapper.java | 56 ++++++++ .../situ/stlserver/dao/EquipmentMapper.java | 41 ++++++ .../model/dto/EnrollmentQueryDTO.java | 14 ++ .../model/dto/EquipmentQueryDTO.java | 14 ++ .../stlserver/model/entity/Enrollment.java | 20 +++ .../stlserver/model/entity/Equipment.java | 20 +++ .../stlserver/service/EnrollmentService.java | 15 ++ .../stlserver/service/EquipmentService.java | 15 ++ .../service/impl/EnrollmentServiceImpl.java | 132 ++++++++++++++++++ .../service/impl/EquipmentServiceImpl.java | 66 +++++++++ src/main/resources/data.sql | 41 ++++++ src/main/resources/schema.sql | 24 ++++ 14 files changed, 571 insertions(+) create mode 100644 src/main/java/edu/situ/stlserver/controller/EnrollmentController.java create mode 100644 src/main/java/edu/situ/stlserver/controller/EquipmentController.java create mode 100644 src/main/java/edu/situ/stlserver/dao/EnrollmentMapper.java create mode 100644 src/main/java/edu/situ/stlserver/dao/EquipmentMapper.java create mode 100644 src/main/java/edu/situ/stlserver/model/dto/EnrollmentQueryDTO.java create mode 100644 src/main/java/edu/situ/stlserver/model/dto/EquipmentQueryDTO.java create mode 100644 src/main/java/edu/situ/stlserver/model/entity/Enrollment.java create mode 100644 src/main/java/edu/situ/stlserver/model/entity/Equipment.java create mode 100644 src/main/java/edu/situ/stlserver/service/EnrollmentService.java create mode 100644 src/main/java/edu/situ/stlserver/service/EquipmentService.java create mode 100644 src/main/java/edu/situ/stlserver/service/impl/EnrollmentServiceImpl.java create mode 100644 src/main/java/edu/situ/stlserver/service/impl/EquipmentServiceImpl.java diff --git a/src/main/java/edu/situ/stlserver/controller/EnrollmentController.java b/src/main/java/edu/situ/stlserver/controller/EnrollmentController.java new file mode 100644 index 0000000..5425673 --- /dev/null +++ b/src/main/java/edu/situ/stlserver/controller/EnrollmentController.java @@ -0,0 +1,57 @@ +package edu.situ.stlserver.controller; + +import edu.situ.stlserver.model.dto.EnrollmentQueryDTO; +import edu.situ.stlserver.model.entity.Enrollment; +import edu.situ.stlserver.model.vo.HttpResult; +import edu.situ.stlserver.service.EnrollmentService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/enrollment") +public class EnrollmentController { + + @Autowired + private EnrollmentService enrollmentService; + + @GetMapping + public HttpResult getByPage(Integer page, Integer limit, EnrollmentQueryDTO queryDTO) { + return HttpResult.success(enrollmentService.getByPage(page, limit, queryDTO)); + } + + @PostMapping + public HttpResult enroll(@RequestBody Enrollment enrollment) { + enrollmentService.enroll(enrollment); + return HttpResult.success(); + } + + @PutMapping("/{id}/cancel") + public HttpResult cancel(@PathVariable Integer id) { + enrollmentService.cancel(id); + return HttpResult.success(); + } + + @PutMapping("/{id}/checkin") + public HttpResult checkin(@PathVariable Integer id) { + enrollmentService.checkin(id); + return HttpResult.success(); + } + + @PutMapping("/{id}/uncheckin") + public HttpResult uncheckin(@PathVariable Integer id) { + enrollmentService.uncheckin(id); + return HttpResult.success(); + } + + @PutMapping("/{id}/restore") + public HttpResult restore(@PathVariable Integer id) { + enrollmentService.restore(id); + return HttpResult.success(); + } + + @DeleteMapping("/{id}") + public HttpResult delete(@PathVariable Integer id) { + enrollmentService.delete(id); + return HttpResult.success(); + } +} diff --git a/src/main/java/edu/situ/stlserver/controller/EquipmentController.java b/src/main/java/edu/situ/stlserver/controller/EquipmentController.java new file mode 100644 index 0000000..e98384f --- /dev/null +++ b/src/main/java/edu/situ/stlserver/controller/EquipmentController.java @@ -0,0 +1,56 @@ +package edu.situ.stlserver.controller; + +import edu.situ.stlserver.model.dto.EquipmentQueryDTO; +import edu.situ.stlserver.model.entity.Equipment; +import edu.situ.stlserver.model.vo.HttpResult; +import edu.situ.stlserver.service.EquipmentService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/equipment") +public class EquipmentController { + + @Autowired + private EquipmentService equipmentService; + + @GetMapping + public HttpResult getByPage(Integer page, Integer limit, EquipmentQueryDTO queryDTO) { + return HttpResult.success(equipmentService.getByPage(page, limit, queryDTO)); + } + + @GetMapping("/{id}") + public HttpResult getById(@PathVariable Integer id) { + return HttpResult.success(equipmentService.getById(id)); + } + + @PostMapping + public HttpResult add(@RequestBody Equipment equipment) { + equipmentService.add(equipment); + return HttpResult.success(); + } + + @PutMapping + public HttpResult update(@RequestBody Equipment equipment) { + equipmentService.update(equipment); + return HttpResult.success(); + } + + @DeleteMapping("/{id}") + public HttpResult delete(@PathVariable Integer id) { + equipmentService.delete(id); + return HttpResult.success(); + } + + @PutMapping("/{id}/repair") + public HttpResult repair(@PathVariable Integer id) { + equipmentService.repair(id); + return HttpResult.success(); + } + + @PutMapping("/{id}/restore") + public HttpResult restore(@PathVariable Integer id) { + equipmentService.restore(id); + return HttpResult.success(); + } +} diff --git a/src/main/java/edu/situ/stlserver/dao/EnrollmentMapper.java b/src/main/java/edu/situ/stlserver/dao/EnrollmentMapper.java new file mode 100644 index 0000000..08b82da --- /dev/null +++ b/src/main/java/edu/situ/stlserver/dao/EnrollmentMapper.java @@ -0,0 +1,56 @@ +package edu.situ.stlserver.dao; + +import edu.situ.stlserver.model.entity.Enrollment; +import edu.situ.stlserver.model.dto.EnrollmentQueryDTO; +import org.apache.ibatis.annotations.*; + +import java.util.List; + +@Mapper +public interface EnrollmentMapper { + + @Select(value = { + "" + }) + List select(EnrollmentQueryDTO queryDTO); + + @Select("SELECT * FROM enrollments WHERE id = #{id}") + Enrollment selectById(Integer id); + + @Select("SELECT * FROM enrollments WHERE member_id = #{memberId} AND course_id = #{courseId} AND status = '已报名'") + Enrollment selectByMemberAndCourse(@Param("memberId") Integer memberId, @Param("courseId") Integer courseId); + + @Insert("INSERT INTO enrollments(member_id, course_id, enroll_date, status) " + + "VALUES(#{memberId}, #{courseId}, #{enrollDate}, #{status})") + @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id") + void insert(Enrollment enrollment); + + @Update("UPDATE enrollments SET status = #{status} WHERE id = #{id}") + void updateStatus(@Param("id") Integer id, @Param("status") String status); + + @Delete("DELETE FROM enrollments WHERE id = #{id}") + void delete(Integer id); + + // 更新课程报名人数 + @Update("UPDATE courses SET enrolled = enrolled + #{delta} WHERE id = #{courseId}") + void updateCourseEnrolled(@Param("courseId") Integer courseId, @Param("delta") int delta); + + // 查询课程当前报名人数 + @Select("SELECT enrolled FROM courses WHERE id = #{courseId}") + Integer selectCourseEnrolled(Integer courseId); + + // 查询课程容量 + @Select("SELECT capacity FROM courses WHERE id = #{courseId}") + Integer selectCourseCapacity(Integer courseId); +} diff --git a/src/main/java/edu/situ/stlserver/dao/EquipmentMapper.java b/src/main/java/edu/situ/stlserver/dao/EquipmentMapper.java new file mode 100644 index 0000000..39d535e --- /dev/null +++ b/src/main/java/edu/situ/stlserver/dao/EquipmentMapper.java @@ -0,0 +1,41 @@ +package edu.situ.stlserver.dao; + +import edu.situ.stlserver.model.entity.Equipment; +import edu.situ.stlserver.model.dto.EquipmentQueryDTO; +import org.apache.ibatis.annotations.*; + +import java.util.List; + +@Mapper +public interface EquipmentMapper { + + @Select(value = { + "" + }) + List select(EquipmentQueryDTO queryDTO); + + @Select("SELECT * FROM equipment WHERE id = #{id}") + Equipment selectById(Integer id); + + @Insert("INSERT INTO equipment(name, type, brand, model, purchase_date, status, location, remark) " + + "VALUES(#{name}, #{type}, #{brand}, #{model}, #{purchaseDate}, #{status}, #{location}, #{remark})") + @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id") + void insert(Equipment equipment); + + @Update("UPDATE equipment SET name=#{name}, type=#{type}, brand=#{brand}, model=#{model}, " + + "purchase_date=#{purchaseDate}, status=#{status}, location=#{location}, remark=#{remark} WHERE id=#{id}") + void update(Equipment equipment); + + @Delete("DELETE FROM equipment WHERE id = #{id}") + void delete(Integer id); + + @Update("UPDATE equipment SET status = #{status} WHERE id = #{id}") + void updateStatus(@Param("id") Integer id, @Param("status") String status); +} diff --git a/src/main/java/edu/situ/stlserver/model/dto/EnrollmentQueryDTO.java b/src/main/java/edu/situ/stlserver/model/dto/EnrollmentQueryDTO.java new file mode 100644 index 0000000..27b9991 --- /dev/null +++ b/src/main/java/edu/situ/stlserver/model/dto/EnrollmentQueryDTO.java @@ -0,0 +1,14 @@ +package edu.situ.stlserver.model.dto; + +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +@ToString +@NoArgsConstructor +@Data +public class EnrollmentQueryDTO { + private Integer memberId; + private Integer courseId; + private String status; +} diff --git a/src/main/java/edu/situ/stlserver/model/dto/EquipmentQueryDTO.java b/src/main/java/edu/situ/stlserver/model/dto/EquipmentQueryDTO.java new file mode 100644 index 0000000..cbe1151 --- /dev/null +++ b/src/main/java/edu/situ/stlserver/model/dto/EquipmentQueryDTO.java @@ -0,0 +1,14 @@ +package edu.situ.stlserver.model.dto; + +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +@ToString +@NoArgsConstructor +@Data +public class EquipmentQueryDTO { + private String name; + private String type; + private String status; +} diff --git a/src/main/java/edu/situ/stlserver/model/entity/Enrollment.java b/src/main/java/edu/situ/stlserver/model/entity/Enrollment.java new file mode 100644 index 0000000..d15baf7 --- /dev/null +++ b/src/main/java/edu/situ/stlserver/model/entity/Enrollment.java @@ -0,0 +1,20 @@ +package edu.situ.stlserver.model.entity; + +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +@ToString +@NoArgsConstructor +@Data +public class Enrollment { + private Integer id; + private Integer memberId; + private Integer courseId; + private String enrollDate; + private String status; + + // 关联查询字段 + private String memberName; + private String courseName; +} diff --git a/src/main/java/edu/situ/stlserver/model/entity/Equipment.java b/src/main/java/edu/situ/stlserver/model/entity/Equipment.java new file mode 100644 index 0000000..79a5abf --- /dev/null +++ b/src/main/java/edu/situ/stlserver/model/entity/Equipment.java @@ -0,0 +1,20 @@ +package edu.situ.stlserver.model.entity; + +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +@ToString +@NoArgsConstructor +@Data +public class Equipment { + private Integer id; + private String name; + private String type; + private String brand; + private String model; + private String purchaseDate; + private String status; + private String location; + private String remark; +} diff --git a/src/main/java/edu/situ/stlserver/service/EnrollmentService.java b/src/main/java/edu/situ/stlserver/service/EnrollmentService.java new file mode 100644 index 0000000..bb08e96 --- /dev/null +++ b/src/main/java/edu/situ/stlserver/service/EnrollmentService.java @@ -0,0 +1,15 @@ +package edu.situ.stlserver.service; + +import com.github.pagehelper.PageInfo; +import edu.situ.stlserver.model.dto.EnrollmentQueryDTO; +import edu.situ.stlserver.model.entity.Enrollment; + +public interface EnrollmentService { + PageInfo getByPage(Integer page, Integer limit, EnrollmentQueryDTO queryDTO); + void enroll(Enrollment enrollment); + void cancel(Integer id); + void checkin(Integer id); + void uncheckin(Integer id); + void restore(Integer id); + void delete(Integer id); +} diff --git a/src/main/java/edu/situ/stlserver/service/EquipmentService.java b/src/main/java/edu/situ/stlserver/service/EquipmentService.java new file mode 100644 index 0000000..06444b5 --- /dev/null +++ b/src/main/java/edu/situ/stlserver/service/EquipmentService.java @@ -0,0 +1,15 @@ +package edu.situ.stlserver.service; + +import com.github.pagehelper.PageInfo; +import edu.situ.stlserver.model.dto.EquipmentQueryDTO; +import edu.situ.stlserver.model.entity.Equipment; + +public interface EquipmentService { + PageInfo getByPage(Integer page, Integer limit, EquipmentQueryDTO queryDTO); + Equipment getById(Integer id); + void add(Equipment equipment); + void update(Equipment equipment); + void delete(Integer id); + void repair(Integer id); + void restore(Integer id); +} diff --git a/src/main/java/edu/situ/stlserver/service/impl/EnrollmentServiceImpl.java b/src/main/java/edu/situ/stlserver/service/impl/EnrollmentServiceImpl.java new file mode 100644 index 0000000..7b73fcf --- /dev/null +++ b/src/main/java/edu/situ/stlserver/service/impl/EnrollmentServiceImpl.java @@ -0,0 +1,132 @@ +package edu.situ.stlserver.service.impl; + +import cn.hutool.core.date.DateUtil; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import edu.situ.stlserver.dao.EnrollmentMapper; +import edu.situ.stlserver.model.dto.EnrollmentQueryDTO; +import edu.situ.stlserver.model.entity.Enrollment; +import edu.situ.stlserver.service.EnrollmentService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class EnrollmentServiceImpl implements EnrollmentService { + + @Autowired + private EnrollmentMapper enrollmentMapper; + + @Override + public PageInfo getByPage(Integer page, Integer limit, EnrollmentQueryDTO queryDTO) { + if (page == null) page = 1; + if (limit == null) limit = 10; + PageHelper.startPage(page, limit); + return new PageInfo<>(enrollmentMapper.select(queryDTO)); + } + + @Override + @Transactional + public void enroll(Enrollment enrollment) { + // 校验是否已报名 + Enrollment existing = enrollmentMapper.selectByMemberAndCourse(enrollment.getMemberId(), enrollment.getCourseId()); + if (existing != null) { + throw new RuntimeException("该会员已报名此课程"); + } + + // 校验课程容量 + Integer enrolled = enrollmentMapper.selectCourseEnrolled(enrollment.getCourseId()); + Integer capacity = enrollmentMapper.selectCourseCapacity(enrollment.getCourseId()); + if (enrolled != null && capacity != null && enrolled >= capacity) { + throw new RuntimeException("该课程已满员"); + } + + enrollment.setEnrollDate(DateUtil.formatDateTime(DateUtil.date())); + enrollment.setStatus("已报名"); + enrollmentMapper.insert(enrollment); + + // 更新课程报名人数 + enrollmentMapper.updateCourseEnrolled(enrollment.getCourseId(), 1); + } + + @Override + @Transactional + public void cancel(Integer id) { + Enrollment enrollment = enrollmentMapper.selectById(id); + if (enrollment == null) { + throw new RuntimeException("预约记录不存在"); + } + if ("已取消".equals(enrollment.getStatus())) { + throw new RuntimeException("该预约已取消"); + } + + enrollmentMapper.updateStatus(id, "已取消"); + + // 释放课程名额 + enrollmentMapper.updateCourseEnrolled(enrollment.getCourseId(), -1); + } + + @Override + public void checkin(Integer id) { + Enrollment enrollment = enrollmentMapper.selectById(id); + if (enrollment == null) { + throw new RuntimeException("预约记录不存在"); + } + if (!"已报名".equals(enrollment.getStatus())) { + throw new RuntimeException("只有已报名的记录才能签到"); + } + enrollmentMapper.updateStatus(id, "已签到"); + } + + @Override + public void uncheckin(Integer id) { + Enrollment enrollment = enrollmentMapper.selectById(id); + if (enrollment == null) { + throw new RuntimeException("预约记录不存在"); + } + if (!"已签到".equals(enrollment.getStatus())) { + throw new RuntimeException("只有已签到的记录才能取消签到"); + } + enrollmentMapper.updateStatus(id, "已报名"); + } + + @Override + @Transactional + public void restore(Integer id) { + Enrollment enrollment = enrollmentMapper.selectById(id); + if (enrollment == null) { + throw new RuntimeException("预约记录不存在"); + } + if (!"已取消".equals(enrollment.getStatus())) { + throw new RuntimeException("只有已取消的记录才能恢复"); + } + + // 校验课程容量 + Integer enrolled = enrollmentMapper.selectCourseEnrolled(enrollment.getCourseId()); + Integer capacity = enrollmentMapper.selectCourseCapacity(enrollment.getCourseId()); + if (enrolled != null && capacity != null && enrolled >= capacity) { + throw new RuntimeException("该课程已满员,无法恢复报名"); + } + + enrollmentMapper.updateStatus(id, "已报名"); + + // 恢复课程报名人数 + enrollmentMapper.updateCourseEnrolled(enrollment.getCourseId(), 1); + } + + @Override + @Transactional + public void delete(Integer id) { + Enrollment enrollment = enrollmentMapper.selectById(id); + if (enrollment == null) { + throw new RuntimeException("预约记录不存在"); + } + + enrollmentMapper.delete(id); + + // 如果是有效报名,释放课程名额 + if ("已报名".equals(enrollment.getStatus()) || "已签到".equals(enrollment.getStatus())) { + enrollmentMapper.updateCourseEnrolled(enrollment.getCourseId(), -1); + } + } +} diff --git a/src/main/java/edu/situ/stlserver/service/impl/EquipmentServiceImpl.java b/src/main/java/edu/situ/stlserver/service/impl/EquipmentServiceImpl.java new file mode 100644 index 0000000..e7180f0 --- /dev/null +++ b/src/main/java/edu/situ/stlserver/service/impl/EquipmentServiceImpl.java @@ -0,0 +1,66 @@ +package edu.situ.stlserver.service.impl; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import edu.situ.stlserver.dao.EquipmentMapper; +import edu.situ.stlserver.model.dto.EquipmentQueryDTO; +import edu.situ.stlserver.model.entity.Equipment; +import edu.situ.stlserver.service.EquipmentService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class EquipmentServiceImpl implements EquipmentService { + + @Autowired + private EquipmentMapper equipmentMapper; + + @Override + public PageInfo getByPage(Integer page, Integer limit, EquipmentQueryDTO queryDTO) { + if (page == null) page = 1; + if (limit == null) limit = 10; + PageHelper.startPage(page, limit); + return new PageInfo<>(equipmentMapper.select(queryDTO)); + } + + @Override + public Equipment getById(Integer id) { + return equipmentMapper.selectById(id); + } + + @Override + public void add(Equipment equipment) { + if (equipment.getStatus() == null || equipment.getStatus().isEmpty()) { + equipment.setStatus("正常"); + } + equipmentMapper.insert(equipment); + } + + @Override + public void update(Equipment equipment) { + equipmentMapper.update(equipment); + } + + @Override + public void delete(Integer id) { + equipmentMapper.delete(id); + } + + @Override + public void repair(Integer id) { + Equipment equipment = equipmentMapper.selectById(id); + if (!"正常".equals(equipment.getStatus())) { + throw new RuntimeException("只有正常状态的器材才能送修"); + } + equipmentMapper.updateStatus(id, "维修中"); + } + + @Override + public void restore(Integer id) { + Equipment equipment = equipmentMapper.selectById(id); + if (!"维修中".equals(equipment.getStatus())) { + throw new RuntimeException("只有维修中的器材才能恢复"); + } + equipmentMapper.updateStatus(id, "正常"); + } +} diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql index 175e8f5..5bcafcc 100644 --- a/src/main/resources/data.sql +++ b/src/main/resources/data.sql @@ -65,3 +65,44 @@ INSERT INTO `courses` (`name`, `type`, `coach_name`, `price`, `duration`, `statu ('空手道', '搏击', '杨丽', 279, '55分钟', '进行中', '防身技能', '2024-08-09 18:30', 16, 20), ('肚皮舞', '舞蹈', '黄勇', 189, '45分钟', '进行中', '女性专属', '2024-08-10 13:00', 22, 25), ('CrossFit', '综合', '徐静', 359, '60分钟', '进行中', '综合训练', '2024-08-11 07:30', 18, 20); + +-- 器材模拟数据 +INSERT INTO `equipment` (`name`, `type`, `brand`, `model`, `purchase_date`, `status`, `location`, `remark`) VALUES +('跑步机 T100', '有氧', 'Technogym', 'T100 Pro', '2023-06-15', '正常', '有氧区A', '高端商用跑步机'), +('椭圆机 E200', '有氧', 'Life Fitness', 'E200', '2023-06-15', '正常', '有氧区A', '低冲击有氧训练'), +('动感单车 S50', '有氧', 'Spinning', 'S50', '2023-08-20', '正常', '动感单车房', '团体课程专用'), +('划船机 R30', '有氧', 'Concept2', 'RowErg', '2024-01-10', '维修中', '有氧区B', '水阻划船机,需更换水箱'), +('史密斯机 SM100', '力量', 'Hammer Strength', 'Smith Machine', '2023-06-15', '正常', '力量区', '综合力量训练'), +('龙门架 C200', '力量', 'Life Fitness', 'Cable Motion', '2023-06-15', '正常', '力量区', '多功能缆绳训练'), +('卧推架 BP50', '力量', 'Rogue', 'BP50', '2023-09-01', '正常', '力量区', '平板卧推专用'), +('深蹲架 SQ30', '自由重量', 'Rogue', 'R-3', '2023-09-01', '正常', '自由重量区', '力量训练核心设备'), +('哑铃套装', '自由重量', 'Jordan', '5-50kg', '2023-07-10', '正常', '自由重量区', '5-50kg各一对'), +('杠铃杆 Olympic', '自由重量', 'Eleiko', 'IWF', '2023-07-10', '正常', '自由重量区', '奥林匹克标准杠铃'), +('壶铃套装', '功能训练', 'Rogue', '8-32kg', '2024-02-15', '正常', '功能训练区', '8-32kg组合'), +('战绳 Rope50', '功能训练', 'Onnit', '50ft', '2024-03-01', '正常', '功能训练区', '50英尺战绳'), +('药球 Ball10', '功能训练', 'Dynamax', '10lb', '2024-03-01', '正常', '功能训练区', '10磅药球'), +('TRX悬挂训练带', '功能训练', 'TRX', 'Pro4', '2024-04-10', '已报废', '功能训练区', '使用超过2年,已更换'), +('瑜伽垫套装', '有氧', 'Manduka', 'PRO', '2024-05-20', '正常', '瑜伽室', '20张专业瑜伽垫'); + +-- 预约模拟数据 +INSERT INTO `enrollments` (`member_id`, `course_id`, `enroll_date`, `status`) VALUES +(1, 1, '2024-08-01 10:00:00', '已报名'), +(1, 3, '2024-08-01 10:30:00', '已签到'), +(2, 2, '2024-08-01 11:00:00', '已报名'), +(2, 5, '2024-08-01 11:30:00', '已签到'), +(3, 1, '2024-08-02 09:00:00', '已签到'), +(3, 4, '2024-08-02 09:30:00', '已报名'), +(4, 7, '2024-08-02 14:00:00', '已报名'), +(4, 9, '2024-08-02 14:30:00', '已签到'), +(5, 3, '2024-08-03 10:00:00', '已取消'), +(5, 6, '2024-08-03 10:30:00', '已报名'), +(6, 2, '2024-08-03 15:00:00', '已报名'), +(6, 8, '2024-08-03 15:30:00', '已签到'), +(7, 5, '2024-08-04 09:00:00', '已报名'), +(7, 10, '2024-08-04 09:30:00', '已报名'), +(8, 1, '2024-08-04 11:00:00', '已报名'), +(8, 3, '2024-08-04 11:30:00', '已取消'), +(9, 4, '2024-08-05 14:00:00', '已报名'), +(9, 9, '2024-08-05 14:30:00', '已签到'), +(10, 7, '2024-08-05 16:00:00', '已报名'), +(10, 11, '2024-08-05 16:30:00', '已报名'); diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql index 74e3d9e..28ce409 100644 --- a/src/main/resources/schema.sql +++ b/src/main/resources/schema.sql @@ -45,3 +45,27 @@ CREATE TABLE IF NOT EXISTS `courses` ( `enrolled` INT DEFAULT 0 COMMENT '已报名人数', `capacity` INT NOT NULL COMMENT '课程容量' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +-- 器材表 +CREATE TABLE IF NOT EXISTS `equipment` ( + `id` INT AUTO_INCREMENT PRIMARY KEY, + `name` VARCHAR(100) NOT NULL COMMENT '器材名称', + `type` VARCHAR(50) NOT NULL COMMENT '器材类型:有氧/力量/自由重量/功能训练', + `brand` VARCHAR(50) DEFAULT NULL COMMENT '品牌', + `model` VARCHAR(50) DEFAULT NULL COMMENT '型号', + `purchase_date` DATE DEFAULT NULL COMMENT '购买日期', + `status` VARCHAR(20) NOT NULL DEFAULT '正常' COMMENT '状态:正常/维修中/已报废', + `location` VARCHAR(100) DEFAULT NULL COMMENT '存放位置', + `remark` TEXT DEFAULT NULL COMMENT '备注' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +-- 预约表 +CREATE TABLE IF NOT EXISTS `enrollments` ( + `id` INT AUTO_INCREMENT PRIMARY KEY, + `member_id` INT NOT NULL COMMENT '会员ID', + `course_id` INT NOT NULL COMMENT '课程ID', + `enroll_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '报名时间', + `status` VARCHAR(20) NOT NULL DEFAULT '已报名' COMMENT '状态:已报名/已签到/已取消', + FOREIGN KEY (`member_id`) REFERENCES `members`(`id`), + FOREIGN KEY (`course_id`) REFERENCES `courses`(`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;