From 5c77f66b0a818aafc0e4110c4b0132f86e23812a Mon Sep 17 00:00:00 2001 From: BenjaminNH <1249376374@qq.com> Date: Fri, 27 Jun 2025 22:46:56 +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=E5=AE=A1=E6=89=B9=E9=A2=84=E7=BA=A6?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../constant/ApprovalStep.java | 17 +++++++++ .../controller/ApprovalController.java | 27 ++++++++++++++ .../dto/LeaderApprovalDTO.java | 12 +++++++ .../equipreservebackend/entity/Approval.java | 6 ++++ .../mapper/ApprovalMapper.java | 9 +++++ .../service/ApprovalService.java | 7 ++++ .../service/impl/ApprovalServiceImpl.java | 36 +++++++++++++++++++ 7 files changed, 114 insertions(+) create mode 100644 src/main/java/github/benjamin/equipreservebackend/constant/ApprovalStep.java create mode 100644 src/main/java/github/benjamin/equipreservebackend/controller/ApprovalController.java create mode 100644 src/main/java/github/benjamin/equipreservebackend/dto/LeaderApprovalDTO.java create mode 100644 src/main/java/github/benjamin/equipreservebackend/mapper/ApprovalMapper.java create mode 100644 src/main/java/github/benjamin/equipreservebackend/service/ApprovalService.java create mode 100644 src/main/java/github/benjamin/equipreservebackend/service/impl/ApprovalServiceImpl.java diff --git a/src/main/java/github/benjamin/equipreservebackend/constant/ApprovalStep.java b/src/main/java/github/benjamin/equipreservebackend/constant/ApprovalStep.java new file mode 100644 index 0000000..4842fec --- /dev/null +++ b/src/main/java/github/benjamin/equipreservebackend/constant/ApprovalStep.java @@ -0,0 +1,17 @@ +package github.benjamin.equipreservebackend.constant; + +import lombok.Getter; + +@Getter +public enum ApprovalStep { + + LEADER(1), + DEVICE_ADMIN(2); + + final Integer step; + + ApprovalStep(Integer step) { + this.step = step; + } + +} diff --git a/src/main/java/github/benjamin/equipreservebackend/controller/ApprovalController.java b/src/main/java/github/benjamin/equipreservebackend/controller/ApprovalController.java new file mode 100644 index 0000000..bac6942 --- /dev/null +++ b/src/main/java/github/benjamin/equipreservebackend/controller/ApprovalController.java @@ -0,0 +1,27 @@ +package github.benjamin.equipreservebackend.controller; + +import github.benjamin.equipreservebackend.dto.LeaderApprovalDTO; +import github.benjamin.equipreservebackend.response.ResponseResult; +import github.benjamin.equipreservebackend.service.ApprovalService; +import lombok.RequiredArgsConstructor; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/approval") +@RequiredArgsConstructor +public class ApprovalController { + + private final ApprovalService approvalService; + + @PreAuthorize("hasRole('LEADER')") + @PostMapping("/leader") + public ResponseResult addApproval(@RequestBody LeaderApprovalDTO dto) { + approvalService.addApproval(dto); + return ResponseResult.success(); + } + +} diff --git a/src/main/java/github/benjamin/equipreservebackend/dto/LeaderApprovalDTO.java b/src/main/java/github/benjamin/equipreservebackend/dto/LeaderApprovalDTO.java new file mode 100644 index 0000000..d96d8d4 --- /dev/null +++ b/src/main/java/github/benjamin/equipreservebackend/dto/LeaderApprovalDTO.java @@ -0,0 +1,12 @@ +package github.benjamin.equipreservebackend.dto; + +import lombok.Data; + +@Data +public class LeaderApprovalDTO { + + private Long leaderId; + private Long reservationId; + private Boolean isApprove; + +} diff --git a/src/main/java/github/benjamin/equipreservebackend/entity/Approval.java b/src/main/java/github/benjamin/equipreservebackend/entity/Approval.java index ea54908..9cf269a 100644 --- a/src/main/java/github/benjamin/equipreservebackend/entity/Approval.java +++ b/src/main/java/github/benjamin/equipreservebackend/entity/Approval.java @@ -1,12 +1,18 @@ package github.benjamin.equipreservebackend.entity; import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import java.time.LocalDateTime; @Data @TableName("approvals") +@NoArgsConstructor +@AllArgsConstructor +@Builder public class Approval { private Long id; diff --git a/src/main/java/github/benjamin/equipreservebackend/mapper/ApprovalMapper.java b/src/main/java/github/benjamin/equipreservebackend/mapper/ApprovalMapper.java new file mode 100644 index 0000000..59c6a2e --- /dev/null +++ b/src/main/java/github/benjamin/equipreservebackend/mapper/ApprovalMapper.java @@ -0,0 +1,9 @@ +package github.benjamin.equipreservebackend.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import github.benjamin.equipreservebackend.entity.Approval; +import org.springframework.stereotype.Repository; + +@Repository +public interface ApprovalMapper extends BaseMapper { +} diff --git a/src/main/java/github/benjamin/equipreservebackend/service/ApprovalService.java b/src/main/java/github/benjamin/equipreservebackend/service/ApprovalService.java new file mode 100644 index 0000000..7f6191e --- /dev/null +++ b/src/main/java/github/benjamin/equipreservebackend/service/ApprovalService.java @@ -0,0 +1,7 @@ +package github.benjamin.equipreservebackend.service; + +import github.benjamin.equipreservebackend.dto.LeaderApprovalDTO; + +public interface ApprovalService { + void addApproval(LeaderApprovalDTO dto); +} diff --git a/src/main/java/github/benjamin/equipreservebackend/service/impl/ApprovalServiceImpl.java b/src/main/java/github/benjamin/equipreservebackend/service/impl/ApprovalServiceImpl.java new file mode 100644 index 0000000..06aaa81 --- /dev/null +++ b/src/main/java/github/benjamin/equipreservebackend/service/impl/ApprovalServiceImpl.java @@ -0,0 +1,36 @@ +package github.benjamin.equipreservebackend.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import github.benjamin.equipreservebackend.constant.ApprovalStep; +import github.benjamin.equipreservebackend.constant.ReservationStatus; +import github.benjamin.equipreservebackend.dto.LeaderApprovalDTO; +import github.benjamin.equipreservebackend.entity.Approval; +import github.benjamin.equipreservebackend.entity.Reservation; +import github.benjamin.equipreservebackend.mapper.ApprovalMapper; +import github.benjamin.equipreservebackend.mapper.ReservationMapper; +import github.benjamin.equipreservebackend.service.ApprovalService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class ApprovalServiceImpl implements ApprovalService { + + private final ApprovalMapper approvalMapper; + + private final ReservationMapper reservationMapper; + + @Override + public void addApproval(LeaderApprovalDTO dto) { + Approval approval = Approval.builder() + .approverId(dto.getLeaderId()) + .reservationId(dto.getReservationId()) + .step(ApprovalStep.LEADER.getStep()) + .decision(dto.getIsApprove() ? 1 : 0) + .build(); + approvalMapper.insert(approval); + reservationMapper.update(new LambdaUpdateWrapper() + .eq(Reservation::getId, dto.getReservationId()) + .set(Reservation::getStatus, dto.getIsApprove() ? ReservationStatus.PENDING_DEVICE_ADMIN : ReservationStatus.REJECTED)); + } +}