diff --git a/src/main/java/edu/situ/stlserver/controller/CoachController.java b/src/main/java/edu/situ/stlserver/controller/CoachController.java index df5d415..2f975aa 100644 --- a/src/main/java/edu/situ/stlserver/controller/CoachController.java +++ b/src/main/java/edu/situ/stlserver/controller/CoachController.java @@ -3,6 +3,7 @@ package edu.situ.stlserver.controller; import edu.situ.stlserver.model.dto.CoachAddDTO; 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.service.CoachService; import org.springframework.beans.factory.annotation.Autowired; @@ -17,6 +18,12 @@ public class CoachController { private CoachService coachService; + @GetMapping("/{id}") + public HttpResult getById(@PathVariable Integer id) + { + return HttpResult.success(coachService.getById(id)); + } + @GetMapping public HttpResult getByPage(Integer page , Integer limit , CoachQueryDTO coachQueryDTO) { @@ -37,10 +44,25 @@ public class CoachController { return HttpResult.success(); } + @DeleteMapping("/{id}") + public HttpResult delete(@PathVariable Integer id) + { + coachService.delete(id); + return HttpResult.success(); + } + @PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public HttpResult add(CoachAddDTO coachAddDTO) { coachService.add(coachAddDTO); return HttpResult.success(); } + + @PutMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + public HttpResult update(CoachUpdateDTO coachUpdateDTO) + { + coachService.update(coachUpdateDTO); + return HttpResult.success(); + } + } diff --git a/src/main/java/edu/situ/stlserver/controller/CourseController.java b/src/main/java/edu/situ/stlserver/controller/CourseController.java new file mode 100644 index 0000000..d500666 --- /dev/null +++ b/src/main/java/edu/situ/stlserver/controller/CourseController.java @@ -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(); + } +} diff --git a/src/main/java/edu/situ/stlserver/controller/MemberController.java b/src/main/java/edu/situ/stlserver/controller/MemberController.java new file mode 100644 index 0000000..ee84ea3 --- /dev/null +++ b/src/main/java/edu/situ/stlserver/controller/MemberController.java @@ -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(); + } +} diff --git a/src/main/java/edu/situ/stlserver/dao/CoachMapper.java b/src/main/java/edu/situ/stlserver/dao/CoachMapper.java index b91025d..29902eb 100644 --- a/src/main/java/edu/situ/stlserver/dao/CoachMapper.java +++ b/src/main/java/edu/situ/stlserver/dao/CoachMapper.java @@ -38,7 +38,21 @@ public interface CoachMapper { @Update(value = "UPDATE `coaches` SET `quit_date` = null WHERE `id` = #{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})") @Options(useGeneratedKeys = true, keyProperty = "id" , keyColumn = "id") 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); + } diff --git a/src/main/java/edu/situ/stlserver/dao/CourseMapper.java b/src/main/java/edu/situ/stlserver/dao/CourseMapper.java new file mode 100644 index 0000000..3ccad29 --- /dev/null +++ b/src/main/java/edu/situ/stlserver/dao/CourseMapper.java @@ -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 selectAll(); + + @Select(value = { + "" + }) + List 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); +} diff --git a/src/main/java/edu/situ/stlserver/dao/MemberMapper.java b/src/main/java/edu/situ/stlserver/dao/MemberMapper.java new file mode 100644 index 0000000..609a962 --- /dev/null +++ b/src/main/java/edu/situ/stlserver/dao/MemberMapper.java @@ -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 selectAll(); + + @Select(value = { + "" + }) + List 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); +} diff --git a/src/main/java/edu/situ/stlserver/model/dto/CoachUpdateDTO.java b/src/main/java/edu/situ/stlserver/model/dto/CoachUpdateDTO.java new file mode 100644 index 0000000..754eabd --- /dev/null +++ b/src/main/java/edu/situ/stlserver/model/dto/CoachUpdateDTO.java @@ -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; +} diff --git a/src/main/java/edu/situ/stlserver/model/dto/CourseAddDTO.java b/src/main/java/edu/situ/stlserver/model/dto/CourseAddDTO.java new file mode 100644 index 0000000..b8d22c2 --- /dev/null +++ b/src/main/java/edu/situ/stlserver/model/dto/CourseAddDTO.java @@ -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; +} diff --git a/src/main/java/edu/situ/stlserver/model/dto/CourseQueryDTO.java b/src/main/java/edu/situ/stlserver/model/dto/CourseQueryDTO.java new file mode 100644 index 0000000..14c94be --- /dev/null +++ b/src/main/java/edu/situ/stlserver/model/dto/CourseQueryDTO.java @@ -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; +} diff --git a/src/main/java/edu/situ/stlserver/model/dto/CourseUpdateDTO.java b/src/main/java/edu/situ/stlserver/model/dto/CourseUpdateDTO.java new file mode 100644 index 0000000..41451f4 --- /dev/null +++ b/src/main/java/edu/situ/stlserver/model/dto/CourseUpdateDTO.java @@ -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; +} diff --git a/src/main/java/edu/situ/stlserver/model/dto/MemberAddDTO.java b/src/main/java/edu/situ/stlserver/model/dto/MemberAddDTO.java new file mode 100644 index 0000000..a2cdf87 --- /dev/null +++ b/src/main/java/edu/situ/stlserver/model/dto/MemberAddDTO.java @@ -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; +} diff --git a/src/main/java/edu/situ/stlserver/model/dto/MemberQueryDTO.java b/src/main/java/edu/situ/stlserver/model/dto/MemberQueryDTO.java new file mode 100644 index 0000000..41e8761 --- /dev/null +++ b/src/main/java/edu/situ/stlserver/model/dto/MemberQueryDTO.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 MemberQueryDTO { + private String name; + private Integer sex; + private Integer status; +} diff --git a/src/main/java/edu/situ/stlserver/model/dto/MemberUpdateDTO.java b/src/main/java/edu/situ/stlserver/model/dto/MemberUpdateDTO.java new file mode 100644 index 0000000..658bbba --- /dev/null +++ b/src/main/java/edu/situ/stlserver/model/dto/MemberUpdateDTO.java @@ -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; +} diff --git a/src/main/java/edu/situ/stlserver/model/entity/Course.java b/src/main/java/edu/situ/stlserver/model/entity/Course.java new file mode 100644 index 0000000..7ce16d8 --- /dev/null +++ b/src/main/java/edu/situ/stlserver/model/entity/Course.java @@ -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; +} diff --git a/src/main/java/edu/situ/stlserver/model/entity/Member.java b/src/main/java/edu/situ/stlserver/model/entity/Member.java new file mode 100644 index 0000000..a639fbc --- /dev/null +++ b/src/main/java/edu/situ/stlserver/model/entity/Member.java @@ -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; +} diff --git a/src/main/java/edu/situ/stlserver/service/CoachService.java b/src/main/java/edu/situ/stlserver/service/CoachService.java index 0d6d330..3291252 100644 --- a/src/main/java/edu/situ/stlserver/service/CoachService.java +++ b/src/main/java/edu/situ/stlserver/service/CoachService.java @@ -2,6 +2,7 @@ package edu.situ.stlserver.service; import com.github.pagehelper.PageInfo; 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.dto.CoachQueryDTO; @@ -14,5 +15,8 @@ public interface CoachService { PageInfo getByPage(Integer page, Integer limit, CoachQueryDTO coachQueryDTO); void quit(Integer id); void rejoin(Integer id); + void delete(Integer id); void add(CoachAddDTO coachAddDTO); + Coach getById(Integer id); + void update(CoachUpdateDTO coachUpdateDTO); } diff --git a/src/main/java/edu/situ/stlserver/service/CourseService.java b/src/main/java/edu/situ/stlserver/service/CourseService.java new file mode 100644 index 0000000..f83c1c6 --- /dev/null +++ b/src/main/java/edu/situ/stlserver/service/CourseService.java @@ -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 getAll(); + PageInfo 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); +} diff --git a/src/main/java/edu/situ/stlserver/service/MemberService.java b/src/main/java/edu/situ/stlserver/service/MemberService.java new file mode 100644 index 0000000..a02057f --- /dev/null +++ b/src/main/java/edu/situ/stlserver/service/MemberService.java @@ -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 getAll(); + PageInfo 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); +} diff --git a/src/main/java/edu/situ/stlserver/service/impl/CoachServiceImpl.java b/src/main/java/edu/situ/stlserver/service/impl/CoachServiceImpl.java index 0a4f77c..7bf3230 100644 --- a/src/main/java/edu/situ/stlserver/service/impl/CoachServiceImpl.java +++ b/src/main/java/edu/situ/stlserver/service/impl/CoachServiceImpl.java @@ -5,6 +5,7 @@ import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import edu.situ.stlserver.dao.CoachMapper; 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.dto.CoachQueryDTO; import edu.situ.stlserver.service.CoachService; @@ -51,6 +52,15 @@ public class CoachServiceImpl implements CoachService { 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 public void add(CoachAddDTO coachAddDTO) { Coach coach = new Coach(); @@ -73,6 +83,8 @@ public class CoachServiceImpl implements CoachService { } + + private String saveAvatar(MultipartFile file) throws Exception { String originFilename = file.getOriginalFilename(); String suffix = originFilename.substring(originFilename.lastIndexOf(".")); @@ -83,4 +95,43 @@ public class CoachServiceImpl implements CoachService { 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); + } } diff --git a/src/main/java/edu/situ/stlserver/service/impl/CourseServiceImpl.java b/src/main/java/edu/situ/stlserver/service/impl/CourseServiceImpl.java new file mode 100644 index 0000000..b63b291 --- /dev/null +++ b/src/main/java/edu/situ/stlserver/service/impl/CourseServiceImpl.java @@ -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 getAll() { + return courseMapper.selectAll(); + } + + @Override + public PageInfo 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); + } +} diff --git a/src/main/java/edu/situ/stlserver/service/impl/MemberServiceImpl.java b/src/main/java/edu/situ/stlserver/service/impl/MemberServiceImpl.java new file mode 100644 index 0000000..c614a2c --- /dev/null +++ b/src/main/java/edu/situ/stlserver/service/impl/MemberServiceImpl.java @@ -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 getAll() { + return memberMapper.selectAll(); + } + + @Override + public PageInfo 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); + } +} diff --git a/src/main/resources/application-dev.yaml b/src/main/resources/application-dev.yaml index c3e088c..2efbd9f 100644 --- a/src/main/resources/application-dev.yaml +++ b/src/main/resources/application-dev.yaml @@ -29,4 +29,4 @@ upload: base-path: D:/stl-static image: coach: /images/coach/ - member: /imges/member/ + member: /images/member/ diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql new file mode 100644 index 0000000..90525f4 --- /dev/null +++ b/src/main/resources/data.sql @@ -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); diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql new file mode 100644 index 0000000..22b6b60 --- /dev/null +++ b/src/main/resources/schema.sql @@ -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;