feat: 实现团队负责人审批预约接口

This commit is contained in:
BenjaminNH 2025-06-27 22:46:56 +08:00
parent 4f1b72128b
commit 5c77f66b0a
7 changed files with 114 additions and 0 deletions

View File

@ -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;
}
}

View File

@ -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();
}
}

View File

@ -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;
}

View File

@ -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;

View File

@ -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<Approval> {
}

View File

@ -0,0 +1,7 @@
package github.benjamin.equipreservebackend.service;
import github.benjamin.equipreservebackend.dto.LeaderApprovalDTO;
public interface ApprovalService {
void addApproval(LeaderApprovalDTO dto);
}

View File

@ -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<Reservation>()
.eq(Reservation::getId, dto.getReservationId())
.set(Reservation::getStatus, dto.getIsApprove() ? ReservationStatus.PENDING_DEVICE_ADMIN : ReservationStatus.REJECTED));
}
}