feat: 添加会员和课程模块,支持CRUD操作
This commit is contained in:
parent
ef18b12eb1
commit
b3d8874496
24 changed files with 789 additions and 1 deletions
|
|
@ -3,6 +3,7 @@ package edu.situ.stlserver.controller;
|
||||||
|
|
||||||
import edu.situ.stlserver.model.dto.CoachAddDTO;
|
import edu.situ.stlserver.model.dto.CoachAddDTO;
|
||||||
import edu.situ.stlserver.model.dto.CoachQueryDTO;
|
import edu.situ.stlserver.model.dto.CoachQueryDTO;
|
||||||
|
import edu.situ.stlserver.model.dto.CoachUpdateDTO;
|
||||||
import edu.situ.stlserver.model.vo.HttpResult;
|
import edu.situ.stlserver.model.vo.HttpResult;
|
||||||
import edu.situ.stlserver.service.CoachService;
|
import edu.situ.stlserver.service.CoachService;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|
@ -17,6 +18,12 @@ public class CoachController {
|
||||||
private CoachService coachService;
|
private CoachService coachService;
|
||||||
|
|
||||||
|
|
||||||
|
@GetMapping("/{id}")
|
||||||
|
public HttpResult getById(@PathVariable Integer id)
|
||||||
|
{
|
||||||
|
return HttpResult.success(coachService.getById(id));
|
||||||
|
}
|
||||||
|
|
||||||
@GetMapping
|
@GetMapping
|
||||||
public HttpResult getByPage(Integer page , Integer limit , CoachQueryDTO coachQueryDTO)
|
public HttpResult getByPage(Integer page , Integer limit , CoachQueryDTO coachQueryDTO)
|
||||||
{
|
{
|
||||||
|
|
@ -37,10 +44,25 @@ public class CoachController {
|
||||||
return HttpResult.success();
|
return HttpResult.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/{id}")
|
||||||
|
public HttpResult delete(@PathVariable Integer id)
|
||||||
|
{
|
||||||
|
coachService.delete(id);
|
||||||
|
return HttpResult.success();
|
||||||
|
}
|
||||||
|
|
||||||
@PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
|
@PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
|
||||||
public HttpResult add(CoachAddDTO coachAddDTO)
|
public HttpResult add(CoachAddDTO coachAddDTO)
|
||||||
{
|
{
|
||||||
coachService.add(coachAddDTO);
|
coachService.add(coachAddDTO);
|
||||||
return HttpResult.success();
|
return HttpResult.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PutMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
|
||||||
|
public HttpResult update(CoachUpdateDTO coachUpdateDTO)
|
||||||
|
{
|
||||||
|
coachService.update(coachUpdateDTO);
|
||||||
|
return HttpResult.success();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,51 @@
|
||||||
|
package edu.situ.stlserver.controller;
|
||||||
|
|
||||||
|
import edu.situ.stlserver.model.dto.CourseAddDTO;
|
||||||
|
import edu.situ.stlserver.model.dto.CourseQueryDTO;
|
||||||
|
import edu.situ.stlserver.model.dto.CourseUpdateDTO;
|
||||||
|
import edu.situ.stlserver.model.vo.HttpResult;
|
||||||
|
import edu.situ.stlserver.service.CourseService;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/course")
|
||||||
|
public class CourseController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private CourseService courseService;
|
||||||
|
|
||||||
|
@GetMapping("/{id}")
|
||||||
|
public HttpResult getById(@PathVariable Integer id) {
|
||||||
|
return HttpResult.success(courseService.getById(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping
|
||||||
|
public HttpResult getByPage(Integer page, Integer limit, CourseQueryDTO courseQueryDTO) {
|
||||||
|
return HttpResult.success(courseService.getByPage(page, limit, courseQueryDTO));
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/{id}")
|
||||||
|
public HttpResult delete(@PathVariable Integer id) {
|
||||||
|
courseService.delete(id);
|
||||||
|
return HttpResult.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/{id}/status")
|
||||||
|
public HttpResult updateStatus(@PathVariable Integer id) {
|
||||||
|
courseService.updateStatus(id);
|
||||||
|
return HttpResult.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping
|
||||||
|
public HttpResult add(@RequestBody CourseAddDTO courseAddDTO) {
|
||||||
|
courseService.add(courseAddDTO);
|
||||||
|
return HttpResult.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping
|
||||||
|
public HttpResult update(@RequestBody CourseUpdateDTO courseUpdateDTO) {
|
||||||
|
courseService.update(courseUpdateDTO);
|
||||||
|
return HttpResult.success();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,58 @@
|
||||||
|
package edu.situ.stlserver.controller;
|
||||||
|
|
||||||
|
import edu.situ.stlserver.model.dto.MemberAddDTO;
|
||||||
|
import edu.situ.stlserver.model.dto.MemberQueryDTO;
|
||||||
|
import edu.situ.stlserver.model.dto.MemberUpdateDTO;
|
||||||
|
import edu.situ.stlserver.model.vo.HttpResult;
|
||||||
|
import edu.situ.stlserver.service.MemberService;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/member")
|
||||||
|
public class MemberController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private MemberService memberService;
|
||||||
|
|
||||||
|
@GetMapping("/{id}")
|
||||||
|
public HttpResult getById(@PathVariable Integer id) {
|
||||||
|
return HttpResult.success(memberService.getById(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping
|
||||||
|
public HttpResult getByPage(Integer page, Integer limit, MemberQueryDTO memberQueryDTO) {
|
||||||
|
return HttpResult.success(memberService.getByPage(page, limit, memberQueryDTO));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/{id}/cancel")
|
||||||
|
public HttpResult cancel(@PathVariable Integer id) {
|
||||||
|
memberService.cancel(id);
|
||||||
|
return HttpResult.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/{id}/renew")
|
||||||
|
public HttpResult renew(@PathVariable Integer id) {
|
||||||
|
memberService.renew(id);
|
||||||
|
return HttpResult.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/{id}")
|
||||||
|
public HttpResult delete(@PathVariable Integer id) {
|
||||||
|
memberService.delete(id);
|
||||||
|
return HttpResult.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
|
||||||
|
public HttpResult add(MemberAddDTO memberAddDTO) {
|
||||||
|
memberService.add(memberAddDTO);
|
||||||
|
return HttpResult.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
|
||||||
|
public HttpResult update(MemberUpdateDTO memberUpdateDTO) {
|
||||||
|
memberService.update(memberUpdateDTO);
|
||||||
|
return HttpResult.success();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -38,7 +38,21 @@ public interface CoachMapper {
|
||||||
@Update(value = "UPDATE `coaches` SET `quit_date` = null WHERE `id` = #{id}")
|
@Update(value = "UPDATE `coaches` SET `quit_date` = null WHERE `id` = #{id}")
|
||||||
void rejoin(Integer id);
|
void rejoin(Integer id);
|
||||||
|
|
||||||
|
@Delete(value = "DELETE FROM `coaches` WHERE `id` = #{id}")
|
||||||
|
void delete(Integer id);
|
||||||
|
|
||||||
@Insert(value = "INSERT INTO `coaches`(`name`, `sex`, `remark`, `avatar`) VALUES (#{name}, #{sex}, #{remark}, #{avatar})")
|
@Insert(value = "INSERT INTO `coaches`(`name`, `sex`, `remark`, `avatar`) VALUES (#{name}, #{sex}, #{remark}, #{avatar})")
|
||||||
@Options(useGeneratedKeys = true, keyProperty = "id" , keyColumn = "id")
|
@Options(useGeneratedKeys = true, keyProperty = "id" , keyColumn = "id")
|
||||||
void insert(Coach coach);
|
void insert(Coach coach);
|
||||||
|
|
||||||
|
|
||||||
|
@Select(value = "SELECT * FROM coaches WHERE id = #{id}")
|
||||||
|
Coach selectById(Integer id);
|
||||||
|
|
||||||
|
@Update(value = "UPDATE coaches SET name = #{name}, sex = #{sex}, remark = #{remark}, avatar = #{avatar} WHERE id = #{id}")
|
||||||
|
void update(Coach coach);
|
||||||
|
|
||||||
|
@Select(value = "SELECT avatar FROM coaches WHERE id = #{id}")
|
||||||
|
String selectAvatarById(Integer id);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
40
src/main/java/edu/situ/stlserver/dao/CourseMapper.java
Normal file
40
src/main/java/edu/situ/stlserver/dao/CourseMapper.java
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
package edu.situ.stlserver.dao;
|
||||||
|
|
||||||
|
import edu.situ.stlserver.model.entity.Course;
|
||||||
|
import edu.situ.stlserver.model.dto.CourseQueryDTO;
|
||||||
|
import org.apache.ibatis.annotations.*;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface CourseMapper {
|
||||||
|
@Select(value = "SELECT * FROM courses")
|
||||||
|
List<Course> selectAll();
|
||||||
|
|
||||||
|
@Select(value = {
|
||||||
|
"<script>",
|
||||||
|
"SELECT * FROM `courses`",
|
||||||
|
"<where>",
|
||||||
|
"<if test=\"name != null and name != ''\"> AND `name` LIKE CONCAT('%', #{name}, '%')</if>",
|
||||||
|
"<if test=\"status != null and status != ''\"> AND `status` = #{status}</if>",
|
||||||
|
"</where>",
|
||||||
|
"</script>"
|
||||||
|
})
|
||||||
|
List<Course> select(CourseQueryDTO courseQueryDTO);
|
||||||
|
|
||||||
|
@Insert(value = "INSERT INTO `courses`(`name`, `type`, `coach_name`, `price`, `duration`, `start_time`, `capacity`, `remark`, `status`, `enrolled`) VALUES (#{name}, #{type}, #{coachName}, #{price}, #{duration}, #{startTime}, #{capacity}, #{remark}, #{status}, #{enrolled})")
|
||||||
|
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
|
||||||
|
void insert(Course course);
|
||||||
|
|
||||||
|
@Delete(value = "DELETE FROM `courses` WHERE `id` = #{id}")
|
||||||
|
void delete(Integer id);
|
||||||
|
|
||||||
|
@Update(value = "UPDATE `courses` SET `status` = #{status} WHERE `id` = #{id}")
|
||||||
|
void updateStatus(@Param("id") Integer id, @Param("status") String status);
|
||||||
|
|
||||||
|
@Select(value = "SELECT * FROM courses WHERE id = #{id}")
|
||||||
|
Course selectById(Integer id);
|
||||||
|
|
||||||
|
@Update(value = "UPDATE courses SET name = #{name}, type = #{type}, coach_name = #{coachName}, price = #{price}, duration = #{duration}, start_time = #{startTime}, capacity = #{capacity}, remark = #{remark} WHERE id = #{id}")
|
||||||
|
void update(Course course);
|
||||||
|
}
|
||||||
52
src/main/java/edu/situ/stlserver/dao/MemberMapper.java
Normal file
52
src/main/java/edu/situ/stlserver/dao/MemberMapper.java
Normal file
|
|
@ -0,0 +1,52 @@
|
||||||
|
package edu.situ.stlserver.dao;
|
||||||
|
|
||||||
|
import edu.situ.stlserver.model.entity.Member;
|
||||||
|
import edu.situ.stlserver.model.dto.MemberQueryDTO;
|
||||||
|
import org.apache.ibatis.annotations.*;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface MemberMapper {
|
||||||
|
@Select(value = "SELECT * FROM members")
|
||||||
|
List<Member> selectAll();
|
||||||
|
|
||||||
|
@Select(value = {
|
||||||
|
"<script>",
|
||||||
|
"SELECT * FROM `members`",
|
||||||
|
"<where>",
|
||||||
|
"<if test=\"name != null and name != ''\"> AND `name` LIKE CONCAT('%', #{name}, '%')</if>",
|
||||||
|
"<if test=\"sex != null and sex != 0\"> AND `sex` = #{sex}</if>",
|
||||||
|
"<if test=\"status != null and status != 1\">",
|
||||||
|
"<choose>",
|
||||||
|
"<when test=\"status == 2\"> AND expire_date IS NULL</when>",
|
||||||
|
"<when test=\"status == 3\"> AND expire_date IS NOT NULL</when>",
|
||||||
|
"</choose>",
|
||||||
|
"</if>",
|
||||||
|
"</where>",
|
||||||
|
"</script>"
|
||||||
|
})
|
||||||
|
List<Member> select(MemberQueryDTO memberQueryDTO);
|
||||||
|
|
||||||
|
@Insert(value = "INSERT INTO `members`(`name`, `sex`, `phone`, `level`, `remark`, `avatar`, `join_date`, `remain_count`, `total_spend`) VALUES (#{name}, #{sex}, #{phone}, #{level}, #{remark}, #{avatar}, #{joinDate}, #{remainCount}, #{totalSpend})")
|
||||||
|
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
|
||||||
|
void insert(Member member);
|
||||||
|
|
||||||
|
@Update(value = "UPDATE `members` SET `expire_date` = #{expireDate} WHERE `id` = #{id}")
|
||||||
|
void cancel(@Param("id") Integer id, @Param("expireDate") String expireDate);
|
||||||
|
|
||||||
|
@Update(value = "UPDATE `members` SET `expire_date` = null WHERE `id` = #{id}")
|
||||||
|
void renew(Integer id);
|
||||||
|
|
||||||
|
@Delete(value = "DELETE FROM `members` WHERE `id` = #{id}")
|
||||||
|
void delete(Integer id);
|
||||||
|
|
||||||
|
@Select(value = "SELECT * FROM members WHERE id = #{id}")
|
||||||
|
Member selectById(Integer id);
|
||||||
|
|
||||||
|
@Select(value = "SELECT avatar FROM members WHERE id = #{id}")
|
||||||
|
String selectAvatarById(Integer id);
|
||||||
|
|
||||||
|
@Update(value = "UPDATE members SET name = #{name}, sex = #{sex}, phone = #{phone}, level = #{level}, remark = #{remark}, avatar = #{avatar} WHERE id = #{id}")
|
||||||
|
void update(Member member);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
package edu.situ.stlserver.model.dto;
|
||||||
|
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.ToString;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@ToString
|
||||||
|
public class CoachUpdateDTO {
|
||||||
|
private Integer id;
|
||||||
|
private String name;
|
||||||
|
private String avatar;
|
||||||
|
private String remark;
|
||||||
|
private Integer sex;
|
||||||
|
private MultipartFile file;
|
||||||
|
}
|
||||||
19
src/main/java/edu/situ/stlserver/model/dto/CourseAddDTO.java
Normal file
19
src/main/java/edu/situ/stlserver/model/dto/CourseAddDTO.java
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
package edu.situ.stlserver.model.dto;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class CourseAddDTO {
|
||||||
|
private String name;
|
||||||
|
private String type;
|
||||||
|
private String coachName;
|
||||||
|
private Integer price;
|
||||||
|
private String duration;
|
||||||
|
private String startTime;
|
||||||
|
private Integer capacity;
|
||||||
|
private String remark;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
package edu.situ.stlserver.model.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
@ToString
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
public class CourseQueryDTO {
|
||||||
|
private String name;
|
||||||
|
private String status;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
package edu.situ.stlserver.model.dto;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class CourseUpdateDTO {
|
||||||
|
private Integer id;
|
||||||
|
private String name;
|
||||||
|
private String type;
|
||||||
|
private String coachName;
|
||||||
|
private Integer price;
|
||||||
|
private String duration;
|
||||||
|
private String startTime;
|
||||||
|
private Integer capacity;
|
||||||
|
private String remark;
|
||||||
|
}
|
||||||
18
src/main/java/edu/situ/stlserver/model/dto/MemberAddDTO.java
Normal file
18
src/main/java/edu/situ/stlserver/model/dto/MemberAddDTO.java
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
package edu.situ.stlserver.model.dto;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class MemberAddDTO {
|
||||||
|
private String name;
|
||||||
|
private Integer sex;
|
||||||
|
private String phone;
|
||||||
|
private String level;
|
||||||
|
private String remark;
|
||||||
|
private MultipartFile file;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
package edu.situ.stlserver.model.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
@ToString
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
public class MemberQueryDTO {
|
||||||
|
private String name;
|
||||||
|
private Integer sex;
|
||||||
|
private Integer status;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
package edu.situ.stlserver.model.dto;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class MemberUpdateDTO {
|
||||||
|
private Integer id;
|
||||||
|
private String name;
|
||||||
|
private Integer sex;
|
||||||
|
private String phone;
|
||||||
|
private String level;
|
||||||
|
private String remark;
|
||||||
|
private String avatar;
|
||||||
|
private MultipartFile file;
|
||||||
|
}
|
||||||
22
src/main/java/edu/situ/stlserver/model/entity/Course.java
Normal file
22
src/main/java/edu/situ/stlserver/model/entity/Course.java
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
package edu.situ.stlserver.model.entity;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
@ToString
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
public class Course {
|
||||||
|
private Integer id;
|
||||||
|
private String name;
|
||||||
|
private String type;
|
||||||
|
private String coachName;
|
||||||
|
private Integer price;
|
||||||
|
private String duration;
|
||||||
|
private String status;
|
||||||
|
private String remark;
|
||||||
|
private String startTime;
|
||||||
|
private Integer enrolled;
|
||||||
|
private Integer capacity;
|
||||||
|
}
|
||||||
22
src/main/java/edu/situ/stlserver/model/entity/Member.java
Normal file
22
src/main/java/edu/situ/stlserver/model/entity/Member.java
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
package edu.situ.stlserver.model.entity;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
@ToString
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
public class Member {
|
||||||
|
private Integer id;
|
||||||
|
private String name;
|
||||||
|
private Integer sex;
|
||||||
|
private String avatar;
|
||||||
|
private String phone;
|
||||||
|
private String remark;
|
||||||
|
private String expireDate;
|
||||||
|
private String joinDate;
|
||||||
|
private String level;
|
||||||
|
private Integer remainCount;
|
||||||
|
private Integer totalSpend;
|
||||||
|
}
|
||||||
|
|
@ -2,6 +2,7 @@ package edu.situ.stlserver.service;
|
||||||
|
|
||||||
import com.github.pagehelper.PageInfo;
|
import com.github.pagehelper.PageInfo;
|
||||||
import edu.situ.stlserver.model.dto.CoachAddDTO;
|
import edu.situ.stlserver.model.dto.CoachAddDTO;
|
||||||
|
import edu.situ.stlserver.model.dto.CoachUpdateDTO;
|
||||||
import edu.situ.stlserver.model.entity.Coach;
|
import edu.situ.stlserver.model.entity.Coach;
|
||||||
import edu.situ.stlserver.model.dto.CoachQueryDTO;
|
import edu.situ.stlserver.model.dto.CoachQueryDTO;
|
||||||
|
|
||||||
|
|
@ -14,5 +15,8 @@ public interface CoachService {
|
||||||
PageInfo<Coach> getByPage(Integer page, Integer limit, CoachQueryDTO coachQueryDTO);
|
PageInfo<Coach> getByPage(Integer page, Integer limit, CoachQueryDTO coachQueryDTO);
|
||||||
void quit(Integer id);
|
void quit(Integer id);
|
||||||
void rejoin(Integer id);
|
void rejoin(Integer id);
|
||||||
|
void delete(Integer id);
|
||||||
void add(CoachAddDTO coachAddDTO);
|
void add(CoachAddDTO coachAddDTO);
|
||||||
|
Coach getById(Integer id);
|
||||||
|
void update(CoachUpdateDTO coachUpdateDTO);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
19
src/main/java/edu/situ/stlserver/service/CourseService.java
Normal file
19
src/main/java/edu/situ/stlserver/service/CourseService.java
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
package edu.situ.stlserver.service;
|
||||||
|
|
||||||
|
import com.github.pagehelper.PageInfo;
|
||||||
|
import edu.situ.stlserver.model.dto.CourseAddDTO;
|
||||||
|
import edu.situ.stlserver.model.dto.CourseUpdateDTO;
|
||||||
|
import edu.situ.stlserver.model.entity.Course;
|
||||||
|
import edu.situ.stlserver.model.dto.CourseQueryDTO;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface CourseService {
|
||||||
|
List<Course> getAll();
|
||||||
|
PageInfo<Course> getByPage(Integer page, Integer limit, CourseQueryDTO courseQueryDTO);
|
||||||
|
void delete(Integer id);
|
||||||
|
void updateStatus(Integer id);
|
||||||
|
void add(CourseAddDTO courseAddDTO);
|
||||||
|
Course getById(Integer id);
|
||||||
|
void update(CourseUpdateDTO courseUpdateDTO);
|
||||||
|
}
|
||||||
20
src/main/java/edu/situ/stlserver/service/MemberService.java
Normal file
20
src/main/java/edu/situ/stlserver/service/MemberService.java
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
package edu.situ.stlserver.service;
|
||||||
|
|
||||||
|
import com.github.pagehelper.PageInfo;
|
||||||
|
import edu.situ.stlserver.model.dto.MemberAddDTO;
|
||||||
|
import edu.situ.stlserver.model.dto.MemberUpdateDTO;
|
||||||
|
import edu.situ.stlserver.model.entity.Member;
|
||||||
|
import edu.situ.stlserver.model.dto.MemberQueryDTO;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface MemberService {
|
||||||
|
List<Member> getAll();
|
||||||
|
PageInfo<Member> getByPage(Integer page, Integer limit, MemberQueryDTO memberQueryDTO);
|
||||||
|
void cancel(Integer id);
|
||||||
|
void renew(Integer id);
|
||||||
|
void delete(Integer id);
|
||||||
|
void add(MemberAddDTO memberAddDTO);
|
||||||
|
Member getById(Integer id);
|
||||||
|
void update(MemberUpdateDTO memberUpdateDTO);
|
||||||
|
}
|
||||||
|
|
@ -5,6 +5,7 @@ import com.github.pagehelper.PageHelper;
|
||||||
import com.github.pagehelper.PageInfo;
|
import com.github.pagehelper.PageInfo;
|
||||||
import edu.situ.stlserver.dao.CoachMapper;
|
import edu.situ.stlserver.dao.CoachMapper;
|
||||||
import edu.situ.stlserver.model.dto.CoachAddDTO;
|
import edu.situ.stlserver.model.dto.CoachAddDTO;
|
||||||
|
import edu.situ.stlserver.model.dto.CoachUpdateDTO;
|
||||||
import edu.situ.stlserver.model.entity.Coach;
|
import edu.situ.stlserver.model.entity.Coach;
|
||||||
import edu.situ.stlserver.model.dto.CoachQueryDTO;
|
import edu.situ.stlserver.model.dto.CoachQueryDTO;
|
||||||
import edu.situ.stlserver.service.CoachService;
|
import edu.situ.stlserver.service.CoachService;
|
||||||
|
|
@ -51,6 +52,15 @@ public class CoachServiceImpl implements CoachService {
|
||||||
coachMapper.rejoin(id);
|
coachMapper.rejoin(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void delete(Integer id) {
|
||||||
|
String avatar = coachMapper.selectAvatarById(id);
|
||||||
|
if (avatar != null) {
|
||||||
|
new File(baseUploadPath + avatar).delete();
|
||||||
|
}
|
||||||
|
coachMapper.delete(id);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void add(CoachAddDTO coachAddDTO) {
|
public void add(CoachAddDTO coachAddDTO) {
|
||||||
Coach coach = new Coach();
|
Coach coach = new Coach();
|
||||||
|
|
@ -73,6 +83,8 @@ public class CoachServiceImpl implements CoachService {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private String saveAvatar(MultipartFile file) throws Exception {
|
private String saveAvatar(MultipartFile file) throws Exception {
|
||||||
String originFilename = file.getOriginalFilename();
|
String originFilename = file.getOriginalFilename();
|
||||||
String suffix = originFilename.substring(originFilename.lastIndexOf("."));
|
String suffix = originFilename.substring(originFilename.lastIndexOf("."));
|
||||||
|
|
@ -83,4 +95,43 @@ public class CoachServiceImpl implements CoachService {
|
||||||
return coachUploadPath + filename;
|
return coachUploadPath + filename;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Coach getById(Integer id) {
|
||||||
|
return coachMapper.selectById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update(CoachUpdateDTO coachUpdateDTO) {
|
||||||
|
// 将coachUpdateDTO转换为coach对象
|
||||||
|
Coach coach = new Coach();
|
||||||
|
coach.setId(coachUpdateDTO.getId());
|
||||||
|
coach.setName(coachUpdateDTO.getName());
|
||||||
|
coach.setSex(coachUpdateDTO.getSex());
|
||||||
|
coach.setRemark(coachUpdateDTO.getRemark());
|
||||||
|
// 处理avatar
|
||||||
|
String recordAvatar = coachMapper.selectAvatarById(coachUpdateDTO.getId()); // 获取教练当前记录的头像路径
|
||||||
|
if (coachUpdateDTO.getFile() != null && !coachUpdateDTO.getFile().isEmpty()) { // 情况一:用户选了新头像
|
||||||
|
// 保存新选的文件
|
||||||
|
String avatar;
|
||||||
|
try {
|
||||||
|
avatar = saveAvatar(coachUpdateDTO.getFile());
|
||||||
|
if (recordAvatar != null) { // 如果有旧文件,删除旧文件
|
||||||
|
new File(baseUploadPath + recordAvatar).delete();
|
||||||
|
}
|
||||||
|
coach.setAvatar(avatar); // 再将新文件的访问路径保存到coach对象的avatar字段中
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException("教练新头像保存失败/删除旧头像失败");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if ((coachUpdateDTO.getAvatar() == null || coachUpdateDTO.getAvatar().isEmpty()) && recordAvatar != null) { // 情况二:用户把原来的头像删除了
|
||||||
|
new File(baseUploadPath + recordAvatar).delete();
|
||||||
|
coach.setAvatar(null);
|
||||||
|
} else { // 情况三:用户没有动头像
|
||||||
|
coach.setAvatar(coachUpdateDTO.getAvatar());
|
||||||
|
coach.setAvatar(recordAvatar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 调用coachMapper的insert完成数据库的插入操作
|
||||||
|
coachMapper.update(coach);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,84 @@
|
||||||
|
package edu.situ.stlserver.service.impl;
|
||||||
|
|
||||||
|
import com.github.pagehelper.PageHelper;
|
||||||
|
import com.github.pagehelper.PageInfo;
|
||||||
|
import edu.situ.stlserver.dao.CourseMapper;
|
||||||
|
import edu.situ.stlserver.model.dto.CourseAddDTO;
|
||||||
|
import edu.situ.stlserver.model.dto.CourseUpdateDTO;
|
||||||
|
import edu.situ.stlserver.model.entity.Course;
|
||||||
|
import edu.situ.stlserver.model.dto.CourseQueryDTO;
|
||||||
|
import edu.situ.stlserver.service.CourseService;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class CourseServiceImpl implements CourseService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private CourseMapper courseMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Course> getAll() {
|
||||||
|
return courseMapper.selectAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PageInfo<Course> getByPage(Integer page, Integer limit, CourseQueryDTO courseQueryDTO) {
|
||||||
|
if (page == null) page = 1;
|
||||||
|
if (limit == null) limit = 10;
|
||||||
|
PageHelper.startPage(page, limit);
|
||||||
|
return new PageInfo<>(courseMapper.select(courseQueryDTO));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void delete(Integer id) {
|
||||||
|
courseMapper.delete(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateStatus(Integer id) {
|
||||||
|
Course course = courseMapper.selectById(id);
|
||||||
|
if (course != null) {
|
||||||
|
String newStatus = "进行中".equals(course.getStatus()) ? "已结束" : "进行中";
|
||||||
|
courseMapper.updateStatus(id, newStatus);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void add(CourseAddDTO courseAddDTO) {
|
||||||
|
Course course = new Course();
|
||||||
|
course.setName(courseAddDTO.getName());
|
||||||
|
course.setType(courseAddDTO.getType());
|
||||||
|
course.setCoachName(courseAddDTO.getCoachName());
|
||||||
|
course.setPrice(courseAddDTO.getPrice());
|
||||||
|
course.setDuration(courseAddDTO.getDuration());
|
||||||
|
course.setStartTime(courseAddDTO.getStartTime());
|
||||||
|
course.setCapacity(courseAddDTO.getCapacity());
|
||||||
|
course.setRemark(courseAddDTO.getRemark());
|
||||||
|
course.setStatus("进行中");
|
||||||
|
course.setEnrolled(0);
|
||||||
|
courseMapper.insert(course);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Course getById(Integer id) {
|
||||||
|
return courseMapper.selectById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update(CourseUpdateDTO courseUpdateDTO) {
|
||||||
|
Course course = new Course();
|
||||||
|
course.setId(courseUpdateDTO.getId());
|
||||||
|
course.setName(courseUpdateDTO.getName());
|
||||||
|
course.setType(courseUpdateDTO.getType());
|
||||||
|
course.setCoachName(courseUpdateDTO.getCoachName());
|
||||||
|
course.setPrice(courseUpdateDTO.getPrice());
|
||||||
|
course.setDuration(courseUpdateDTO.getDuration());
|
||||||
|
course.setStartTime(courseUpdateDTO.getStartTime());
|
||||||
|
course.setCapacity(courseUpdateDTO.getCapacity());
|
||||||
|
course.setRemark(courseUpdateDTO.getRemark());
|
||||||
|
courseMapper.update(course);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,135 @@
|
||||||
|
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.MemberMapper;
|
||||||
|
import edu.situ.stlserver.model.dto.MemberAddDTO;
|
||||||
|
import edu.situ.stlserver.model.dto.MemberUpdateDTO;
|
||||||
|
import edu.situ.stlserver.model.entity.Member;
|
||||||
|
import edu.situ.stlserver.model.dto.MemberQueryDTO;
|
||||||
|
import edu.situ.stlserver.service.MemberService;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class MemberServiceImpl implements MemberService {
|
||||||
|
|
||||||
|
@Value("${upload.base-path}")
|
||||||
|
private String baseUploadPath;
|
||||||
|
@Value("${upload.image.member}")
|
||||||
|
private String memberUploadPath;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private MemberMapper memberMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Member> getAll() {
|
||||||
|
return memberMapper.selectAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PageInfo<Member> getByPage(Integer page, Integer limit, MemberQueryDTO memberQueryDTO) {
|
||||||
|
if (page == null) page = 1;
|
||||||
|
if (limit == null) limit = 10;
|
||||||
|
PageHelper.startPage(page, limit);
|
||||||
|
return new PageInfo<>(memberMapper.select(memberQueryDTO));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void cancel(Integer id) {
|
||||||
|
memberMapper.cancel(id, DateUtil.today());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void renew(Integer id) {
|
||||||
|
memberMapper.renew(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void delete(Integer id) {
|
||||||
|
String avatar = memberMapper.selectAvatarById(id);
|
||||||
|
if (avatar != null) {
|
||||||
|
new File(baseUploadPath + avatar).delete();
|
||||||
|
}
|
||||||
|
memberMapper.delete(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void add(MemberAddDTO memberAddDTO) {
|
||||||
|
Member member = new Member();
|
||||||
|
member.setName(memberAddDTO.getName());
|
||||||
|
member.setSex(memberAddDTO.getSex());
|
||||||
|
member.setPhone(memberAddDTO.getPhone());
|
||||||
|
member.setLevel(memberAddDTO.getLevel());
|
||||||
|
member.setRemark(memberAddDTO.getRemark());
|
||||||
|
member.setJoinDate(DateUtil.today());
|
||||||
|
member.setRemainCount(null);
|
||||||
|
member.setTotalSpend(0);
|
||||||
|
|
||||||
|
if (memberAddDTO.getFile() != null && !memberAddDTO.getFile().isEmpty()) {
|
||||||
|
try {
|
||||||
|
String avatar = saveAvatar(memberAddDTO.getFile());
|
||||||
|
member.setAvatar(avatar);
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException("保存头像失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
memberMapper.insert(member);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String saveAvatar(MultipartFile file) throws Exception {
|
||||||
|
String originFilename = file.getOriginalFilename();
|
||||||
|
String suffix = originFilename.substring(originFilename.lastIndexOf("."));
|
||||||
|
String filename = UUID.randomUUID().toString() + suffix;
|
||||||
|
File dir = new File(baseUploadPath + memberUploadPath);
|
||||||
|
if (!dir.exists()) {
|
||||||
|
dir.mkdirs();
|
||||||
|
}
|
||||||
|
file.transferTo(new File(baseUploadPath + memberUploadPath + filename));
|
||||||
|
return memberUploadPath + filename;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Member getById(Integer id) {
|
||||||
|
return memberMapper.selectById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update(MemberUpdateDTO memberUpdateDTO) {
|
||||||
|
Member member = new Member();
|
||||||
|
member.setId(memberUpdateDTO.getId());
|
||||||
|
member.setName(memberUpdateDTO.getName());
|
||||||
|
member.setSex(memberUpdateDTO.getSex());
|
||||||
|
member.setPhone(memberUpdateDTO.getPhone());
|
||||||
|
member.setLevel(memberUpdateDTO.getLevel());
|
||||||
|
member.setRemark(memberUpdateDTO.getRemark());
|
||||||
|
|
||||||
|
String recordAvatar = memberMapper.selectAvatarById(memberUpdateDTO.getId());
|
||||||
|
if (memberUpdateDTO.getFile() != null && !memberUpdateDTO.getFile().isEmpty()) {
|
||||||
|
try {
|
||||||
|
String avatar = saveAvatar(memberUpdateDTO.getFile());
|
||||||
|
if (recordAvatar != null) {
|
||||||
|
new File(baseUploadPath + recordAvatar).delete();
|
||||||
|
}
|
||||||
|
member.setAvatar(avatar);
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException("会员新头像保存失败");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if ((memberUpdateDTO.getAvatar() == null || memberUpdateDTO.getAvatar().isEmpty()) && recordAvatar != null) {
|
||||||
|
new File(baseUploadPath + recordAvatar).delete();
|
||||||
|
member.setAvatar(null);
|
||||||
|
} else {
|
||||||
|
member.setAvatar(recordAvatar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
memberMapper.update(member);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -29,4 +29,4 @@ upload:
|
||||||
base-path: D:/stl-static
|
base-path: D:/stl-static
|
||||||
image:
|
image:
|
||||||
coach: /images/coach/
|
coach: /images/coach/
|
||||||
member: /imges/member/
|
member: /images/member/
|
||||||
|
|
|
||||||
40
src/main/resources/data.sql
Normal file
40
src/main/resources/data.sql
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
-- 会员模拟数据
|
||||||
|
INSERT INTO `members` (`name`, `sex`, `phone`, `level`, `remark`, `join_date`, `remain_count`, `total_spend`) VALUES
|
||||||
|
('张三', 1, '13800138001', '金卡', '年卡会员,喜欢瑜伽', '2024-01-15', NULL, 5999),
|
||||||
|
('李四', 2, '13800138002', '银卡', '季卡会员,减脂塑形', '2024-06-20', NULL, 2999),
|
||||||
|
('王五', 1, '13800138003', '普通', '月卡会员,增肌训练', '2024-09-10', NULL, 999),
|
||||||
|
('赵六', 2, '13800138004', '钻石', '年卡会员,产后恢复', '2023-12-01', NULL, 12999),
|
||||||
|
('钱七', 1, '13800138005', '普通', '次卡会员,游泳爱好者', '2024-03-15', 5, 1500),
|
||||||
|
('孙八', 2, '13800138006', '金卡', '年卡会员,搏击训练', '2024-02-28', NULL, 8999),
|
||||||
|
('周九', 1, '13800138007', '银卡', '季卡会员,普拉提', '2024-07-05', NULL, 3499),
|
||||||
|
('吴十', 2, '13800138008', '普通', '月卡会员,有氧舞蹈', '2024-10-12', NULL, 799),
|
||||||
|
('郑十一', 1, '13800138009', '金卡', '年卡会员,自由重量', '2024-01-20', NULL, 6999),
|
||||||
|
('冯十二', 2, '13800138010', '普通', '次卡会员,动感单车', '2024-05-18', 8, 1200),
|
||||||
|
('陈十三', 1, '13800138011', '钻石', '年卡会员,拳击训练', '2023-11-25', NULL, 15999),
|
||||||
|
('楚十四', 2, '13800138012', '银卡', '季卡会员,形体塑造', '2024-08-08', NULL, 2599),
|
||||||
|
('魏十五', 1, '13800138013', '普通', '月卡会员,康复训练', '2024-10-01', NULL, 599),
|
||||||
|
('蒋十六', 2, '13800138014', '金卡', '年卡会员,舞蹈培训', '2024-03-10', NULL, 7499),
|
||||||
|
('沈十七', 1, '13800138015', '普通', '次卡会员,攀岩爱好者', '2024-06-15', 12, 1800),
|
||||||
|
('韩十八', 2, '13800138016', '银卡', '季卡会员,有氧操', '2024-09-20', NULL, 2799),
|
||||||
|
('杨十九', 1, '13800138017', '钻石', '年卡会员,力量训练', '2024-01-05', NULL, 18999),
|
||||||
|
('朱二十', 2, '13800138018', '普通', '月卡会员,纤体瑜伽', '2024-10-15', NULL, 699),
|
||||||
|
('秦廿一', 1, '13800138019', '金卡', '年卡会员,CrossFit', '2024-02-14', NULL, 9499),
|
||||||
|
('许廿二', 2, '13800138020', '银卡', '季卡会员,空中瑜伽', '2024-07-22', NULL, 3199);
|
||||||
|
|
||||||
|
-- 课程模拟数据
|
||||||
|
INSERT INTO `courses` (`name`, `type`, `coach_name`, `price`, `duration`, `status`, `remark`, `start_time`, `enrolled`, `capacity`) VALUES
|
||||||
|
('瑜伽入门', '瑜伽', '铁娃', 199, '60分钟', '进行中', '适合零基础学员', '2024-08-01 09:00', 25, 30),
|
||||||
|
('力量训练', '力量', '小明', 299, '45分钟', '进行中', '增肌塑形专用', '2024-08-01 14:00', 18, 20),
|
||||||
|
('有氧舞蹈', '有氧', '李娜', 159, '50分钟', '进行中', '燃脂效果好', '2024-08-02 10:00', 30, 35),
|
||||||
|
('搏击操', '搏击', '王强', 259, '40分钟', '进行中', '释放压力', '2024-08-02 16:00', 15, 20),
|
||||||
|
('普拉提', '瑜伽', '刘芳', 229, '55分钟', '进行中', '改善体态', '2024-08-03 09:30', 22, 25),
|
||||||
|
('动感单车', '有氧', '陈刚', 179, '45分钟', '已结束', '高强度有氧', '2024-07-01 18:00', 30, 30),
|
||||||
|
('游泳训练', '水上', '赵敏', 349, '60分钟', '进行中', '全身运动', '2024-08-04 15:00', 12, 15),
|
||||||
|
('拳击入门', '搏击', '周涛', 289, '50分钟', '进行中', '防身健身两不误', '2024-08-05 19:00', 20, 20),
|
||||||
|
('形体塑造', '塑形', '吴雪', 199, '45分钟', '进行中', '塑造完美身材', '2024-08-06 10:30', 28, 30),
|
||||||
|
('康复训练', '康复', '孙磊', 399, '60分钟', '进行中', '运动损伤恢复', '2024-08-07 14:30', 8, 10),
|
||||||
|
('舞蹈培训', '舞蹈', '朱婷', 249, '50分钟', '已结束', '多种舞种', '2024-06-15 11:00', 25, 30),
|
||||||
|
('攀岩课程', '户外', '林浩', 329, '90分钟', '进行中', '挑战自我', '2024-08-08 16:30', 10, 12),
|
||||||
|
('空手道', '搏击', '杨丽', 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);
|
||||||
29
src/main/resources/schema.sql
Normal file
29
src/main/resources/schema.sql
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
-- 会员表
|
||||||
|
CREATE TABLE IF NOT EXISTS `members` (
|
||||||
|
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
`name` VARCHAR(50) NOT NULL,
|
||||||
|
`sex` INT NOT NULL COMMENT '1:男 2:女',
|
||||||
|
`avatar` VARCHAR(255) DEFAULT NULL,
|
||||||
|
`phone` VARCHAR(20) NOT NULL,
|
||||||
|
`remark` TEXT DEFAULT NULL,
|
||||||
|
`expire_date` DATE DEFAULT NULL COMMENT '过期日期,NULL表示有效',
|
||||||
|
`join_date` DATE NOT NULL COMMENT '入会日期',
|
||||||
|
`level` VARCHAR(20) NOT NULL DEFAULT '普通' COMMENT '会员等级:普通/银卡/金卡/钻石',
|
||||||
|
`remain_count` INT DEFAULT NULL COMMENT '剩余次数,NULL表示不限次',
|
||||||
|
`total_spend` INT DEFAULT 0 COMMENT '累计消费(元)'
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||||
|
|
||||||
|
-- 课程表
|
||||||
|
CREATE TABLE IF NOT EXISTS `courses` (
|
||||||
|
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
`name` VARCHAR(100) NOT NULL,
|
||||||
|
`type` VARCHAR(50) NOT NULL COMMENT '课程类型',
|
||||||
|
`coach_name` VARCHAR(50) NOT NULL COMMENT '授课教练',
|
||||||
|
`price` INT NOT NULL COMMENT '价格(元)',
|
||||||
|
`duration` VARCHAR(20) NOT NULL COMMENT '时长',
|
||||||
|
`status` VARCHAR(20) NOT NULL DEFAULT '进行中' COMMENT '状态:进行中/已结束',
|
||||||
|
`remark` TEXT DEFAULT NULL,
|
||||||
|
`start_time` VARCHAR(50) NOT NULL COMMENT '开课时间',
|
||||||
|
`enrolled` INT DEFAULT 0 COMMENT '已报名人数',
|
||||||
|
`capacity` INT NOT NULL COMMENT '课程容量'
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||||
Loading…
Add table
Add a link
Reference in a new issue