From 7b7076858c219fd3d15dee48f7c8d9164d6d7ff9 Mon Sep 17 00:00:00 2001 From: BenjaminNH <1249376374@qq.com> Date: Fri, 27 Jun 2025 21:59:05 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=9E=E7=8E=B0=E5=9B=A2=E9=98=9F?= =?UTF-8?q?=E8=B4=9F=E8=B4=A3=E4=BA=BA=E6=9F=A5=E8=AF=A2=E5=BE=85=E5=AE=A1?= =?UTF-8?q?=E6=89=B9=E9=A2=84=E7=BA=A6=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ReservationController.java | 11 ++++- .../service/ReservationService.java | 3 ++ .../service/impl/ReservationServiceImpl.java | 21 +++++++++- .../equipreservebackend/vo/ReservationVO.java | 42 +++++++++++++++++++ 4 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 src/main/java/github/benjamin/equipreservebackend/vo/ReservationVO.java diff --git a/src/main/java/github/benjamin/equipreservebackend/controller/ReservationController.java b/src/main/java/github/benjamin/equipreservebackend/controller/ReservationController.java index 8089dfa..694dd4f 100644 --- a/src/main/java/github/benjamin/equipreservebackend/controller/ReservationController.java +++ b/src/main/java/github/benjamin/equipreservebackend/controller/ReservationController.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import github.benjamin.equipreservebackend.entity.Reservation; import github.benjamin.equipreservebackend.response.ResponseResult; import github.benjamin.equipreservebackend.service.ReservationService; +import github.benjamin.equipreservebackend.vo.ReservationVO; import github.benjamin.equipreservebackend.vo.UserReservationVO; import lombok.RequiredArgsConstructor; import org.springframework.security.access.prepost.PreAuthorize; @@ -26,11 +27,19 @@ public class ReservationController { @PreAuthorize("hasRole('USER')") @GetMapping("/{userId}") public ResponseResult> getUserReservation(@PathVariable("userId") Long userId, - @RequestParam(defaultValue = "10") Integer page, + @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer size) { Page pageRequest = new Page<>(page, size); Page res = reservationService.getUserReservationVO(userId, pageRequest); return ResponseResult.success(res); } + @PreAuthorize("hasRole('LEADER')") + @GetMapping("/leader/{id}") + public ResponseResult> getLeaderReservation(@PathVariable("id") Long id, + @RequestParam(defaultValue = "1") Integer page, + @RequestParam(defaultValue = "10") Integer size) { + return ResponseResult.success(reservationService.getReservationVO(id, page, size)); + } + } diff --git a/src/main/java/github/benjamin/equipreservebackend/service/ReservationService.java b/src/main/java/github/benjamin/equipreservebackend/service/ReservationService.java index 88838c2..948da91 100644 --- a/src/main/java/github/benjamin/equipreservebackend/service/ReservationService.java +++ b/src/main/java/github/benjamin/equipreservebackend/service/ReservationService.java @@ -2,6 +2,7 @@ package github.benjamin.equipreservebackend.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import github.benjamin.equipreservebackend.entity.Reservation; +import github.benjamin.equipreservebackend.vo.ReservationVO; import github.benjamin.equipreservebackend.vo.TimeRangeVO; import github.benjamin.equipreservebackend.vo.UserReservationVO; @@ -16,4 +17,6 @@ public interface ReservationService { Page getUserReservationVO(Long userId, Page pageRequest); List getUnavailableTimes(Long id); + + Page getReservationVO(Long userId, Integer page, Integer size); } diff --git a/src/main/java/github/benjamin/equipreservebackend/service/impl/ReservationServiceImpl.java b/src/main/java/github/benjamin/equipreservebackend/service/impl/ReservationServiceImpl.java index bebf728..d79cebf 100644 --- a/src/main/java/github/benjamin/equipreservebackend/service/impl/ReservationServiceImpl.java +++ b/src/main/java/github/benjamin/equipreservebackend/service/impl/ReservationServiceImpl.java @@ -13,6 +13,7 @@ import github.benjamin.equipreservebackend.mapper.TeamMapper; import github.benjamin.equipreservebackend.mapper.UserMapper; import github.benjamin.equipreservebackend.service.ReservationService; import github.benjamin.equipreservebackend.utils.PageUtil; +import github.benjamin.equipreservebackend.vo.ReservationVO; import github.benjamin.equipreservebackend.vo.TimeRangeVO; import github.benjamin.equipreservebackend.vo.UserReservationVO; import lombok.RequiredArgsConstructor; @@ -20,7 +21,6 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.time.LocalDate; -import java.time.LocalDateTime; import java.util.List; import java.util.Map; import java.util.Objects; @@ -121,4 +121,23 @@ public class ReservationServiceImpl implements ReservationService { .map(r -> new TimeRangeVO(r.getStartTime(), r.getEndTime())) .toList(); } + + @Override + public Page getReservationVO(Long userId, Integer page, Integer size) { + User user = userMapper.selectById(userId); + List devices = deviceMapper.selectList(new LambdaQueryWrapper() + .eq(Device::getTeamId, user.getTeamId()) + .select()); + List deviceIds = devices.stream().map(Device::getId).toList(); + Map deviceMap = devices.stream().collect(Collectors.toMap(Device::getId, Function.identity())); + Page reservationPage = reservationMapper.selectPage(new Page<>(page, size), new LambdaQueryWrapper() + .in(Reservation::getDeviceId, deviceIds) + .eq(Reservation::getStatus, ReservationStatus.PENDING_LEADER) + .orderByDesc(Reservation::getCreatedTime)); + Page res = PageUtil.copyPage(reservationPage); + res.setRecords(reservationPage.getRecords().stream() + .map(r -> new ReservationVO(r, deviceMap.get(r.getDeviceId()))) + .toList()); + return res; + } } diff --git a/src/main/java/github/benjamin/equipreservebackend/vo/ReservationVO.java b/src/main/java/github/benjamin/equipreservebackend/vo/ReservationVO.java new file mode 100644 index 0000000..d94bbac --- /dev/null +++ b/src/main/java/github/benjamin/equipreservebackend/vo/ReservationVO.java @@ -0,0 +1,42 @@ +package github.benjamin.equipreservebackend.vo; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.StringSerializer; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import github.benjamin.equipreservebackend.entity.Device; +import github.benjamin.equipreservebackend.entity.Reservation; +import github.benjamin.equipreservebackend.entity.User; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDate; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class ReservationVO { + + @JsonSerialize(using = ToStringSerializer.class) + private Long reservationId; + private String applicantName; + private String applicantTeam; + private String applicantContact; + @JsonSerialize(using = ToStringSerializer.class) + private Long deviceId; + private String deviceName; + private LocalDate startTime; + private LocalDate endTime; + + public ReservationVO(Reservation r, Device d) { + this.reservationId = r.getId(); + this.applicantName = r.getApplicantName(); + this.applicantTeam = r.getApplicantTeam(); + this.applicantContact = r.getApplicantContact(); + this.deviceId = d.getId(); + this.deviceName = d.getName(); + this.startTime = r.getStartTime(); + this.endTime = r.getEndTime(); + } + +}