feat: 实现查询设备不可用时间,预约设备功能
This commit is contained in:
parent
44df4b564d
commit
581cc02388
@ -0,0 +1,15 @@
|
|||||||
|
package github.benjamin.equipreservebackend.config;
|
||||||
|
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
|
||||||
|
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
public class WebConfig implements WebMvcConfigurer {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addResourceHandlers(ResourceHandlerRegistry registry) {
|
||||||
|
registry.addResourceHandler("/device_image/**")
|
||||||
|
.addResourceLocations("file:" + System.getProperty("user.dir") + "/device_image/");
|
||||||
|
}
|
||||||
|
}
|
@ -4,13 +4,16 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|||||||
import github.benjamin.equipreservebackend.entity.Device;
|
import github.benjamin.equipreservebackend.entity.Device;
|
||||||
import github.benjamin.equipreservebackend.response.ResponseResult;
|
import github.benjamin.equipreservebackend.response.ResponseResult;
|
||||||
import github.benjamin.equipreservebackend.service.DeviceService;
|
import github.benjamin.equipreservebackend.service.DeviceService;
|
||||||
|
import github.benjamin.equipreservebackend.service.ReservationService;
|
||||||
import github.benjamin.equipreservebackend.vo.DeviceUserVO;
|
import github.benjamin.equipreservebackend.vo.DeviceUserVO;
|
||||||
|
import github.benjamin.equipreservebackend.vo.TimeRangeVO;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@ -19,6 +22,8 @@ public class DeviceController {
|
|||||||
|
|
||||||
private final DeviceService deviceService;
|
private final DeviceService deviceService;
|
||||||
|
|
||||||
|
private final ReservationService reservationService;
|
||||||
|
|
||||||
@PreAuthorize("hasRole('USER')")
|
@PreAuthorize("hasRole('USER')")
|
||||||
@GetMapping
|
@GetMapping
|
||||||
public ResponseResult<Page<DeviceUserVO>> getDevices(@RequestParam(defaultValue = "1") Integer page,
|
public ResponseResult<Page<DeviceUserVO>> getDevices(@RequestParam(defaultValue = "1") Integer page,
|
||||||
@ -29,6 +34,13 @@ public class DeviceController {
|
|||||||
return ResponseResult.success(res);
|
return ResponseResult.success(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PreAuthorize("hasRole('USER')")
|
||||||
|
@GetMapping ("/unavailable-times/{id}")
|
||||||
|
public ResponseResult<List<TimeRangeVO>> getUnavailableTimes(@PathVariable Long id) {
|
||||||
|
List<TimeRangeVO> res = reservationService.getUnavailableTimes(id);
|
||||||
|
return ResponseResult.success(res);
|
||||||
|
}
|
||||||
|
|
||||||
@PreAuthorize("hasRole('DEVICE_ADMIN')")
|
@PreAuthorize("hasRole('DEVICE_ADMIN')")
|
||||||
@PostMapping
|
@PostMapping
|
||||||
public ResponseResult<?> addDevice(@RequestBody Device device){
|
public ResponseResult<?> addDevice(@RequestBody Device device){
|
||||||
|
@ -0,0 +1,9 @@
|
|||||||
|
package github.benjamin.equipreservebackend.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import github.benjamin.equipreservebackend.entity.Team;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
@Repository
|
||||||
|
public interface TeamMapper extends BaseMapper<Team> {
|
||||||
|
}
|
@ -2,6 +2,7 @@ package github.benjamin.equipreservebackend.service;
|
|||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import github.benjamin.equipreservebackend.entity.Reservation;
|
import github.benjamin.equipreservebackend.entity.Reservation;
|
||||||
|
import github.benjamin.equipreservebackend.vo.TimeRangeVO;
|
||||||
import github.benjamin.equipreservebackend.vo.UserReservationVO;
|
import github.benjamin.equipreservebackend.vo.UserReservationVO;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -13,4 +14,6 @@ public interface ReservationService {
|
|||||||
void addReservation(Reservation reservation);
|
void addReservation(Reservation reservation);
|
||||||
|
|
||||||
Page<UserReservationVO> getUserReservationVO(Long userId, Page<Reservation> pageRequest);
|
Page<UserReservationVO> getUserReservationVO(Long userId, Page<Reservation> pageRequest);
|
||||||
|
|
||||||
|
List<TimeRangeVO> getUnavailableTimes(Long id);
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,4 @@
|
|||||||
|
package github.benjamin.equipreservebackend.service;
|
||||||
|
|
||||||
|
public interface TeamService {
|
||||||
|
}
|
@ -5,17 +5,21 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|||||||
import github.benjamin.equipreservebackend.constant.ReservationStatus;
|
import github.benjamin.equipreservebackend.constant.ReservationStatus;
|
||||||
import github.benjamin.equipreservebackend.entity.Device;
|
import github.benjamin.equipreservebackend.entity.Device;
|
||||||
import github.benjamin.equipreservebackend.entity.Reservation;
|
import github.benjamin.equipreservebackend.entity.Reservation;
|
||||||
|
import github.benjamin.equipreservebackend.entity.Team;
|
||||||
import github.benjamin.equipreservebackend.entity.User;
|
import github.benjamin.equipreservebackend.entity.User;
|
||||||
import github.benjamin.equipreservebackend.mapper.DeviceMapper;
|
import github.benjamin.equipreservebackend.mapper.DeviceMapper;
|
||||||
import github.benjamin.equipreservebackend.mapper.ReservationMapper;
|
import github.benjamin.equipreservebackend.mapper.ReservationMapper;
|
||||||
|
import github.benjamin.equipreservebackend.mapper.TeamMapper;
|
||||||
import github.benjamin.equipreservebackend.mapper.UserMapper;
|
import github.benjamin.equipreservebackend.mapper.UserMapper;
|
||||||
import github.benjamin.equipreservebackend.service.ReservationService;
|
import github.benjamin.equipreservebackend.service.ReservationService;
|
||||||
import github.benjamin.equipreservebackend.utils.PageUtil;
|
import github.benjamin.equipreservebackend.utils.PageUtil;
|
||||||
|
import github.benjamin.equipreservebackend.vo.TimeRangeVO;
|
||||||
import github.benjamin.equipreservebackend.vo.UserReservationVO;
|
import github.benjamin.equipreservebackend.vo.UserReservationVO;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -33,6 +37,8 @@ public class ReservationServiceImpl implements ReservationService {
|
|||||||
|
|
||||||
private final UserMapper userMapper;
|
private final UserMapper userMapper;
|
||||||
|
|
||||||
|
private final TeamMapper teamMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 未来days天内有预约的设备显示为“有预约”
|
* 未来days天内有预约的设备显示为“有预约”
|
||||||
*/
|
*/
|
||||||
@ -41,15 +47,24 @@ public class ReservationServiceImpl implements ReservationService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Reservation> getApprovedReservationsByDeviceIds(List<Long> devicesIds) {
|
public List<Reservation> getApprovedReservationsByDeviceIds(List<Long> devicesIds) {
|
||||||
LocalDateTime endTime = LocalDateTime.now().plusDays(days);
|
LocalDate now = LocalDate.now();
|
||||||
|
LocalDate endTime = now.plusDays(days);
|
||||||
return reservationMapper.selectList(new LambdaQueryWrapper<Reservation>()
|
return reservationMapper.selectList(new LambdaQueryWrapper<Reservation>()
|
||||||
.in(Reservation::getDeviceId, devicesIds)
|
.in(Reservation::getDeviceId, devicesIds)
|
||||||
.eq(Reservation::getStatus, ReservationStatus.APPROVED)
|
.eq(Reservation::getStatus, ReservationStatus.APPROVED)
|
||||||
.lt(Reservation::getEndTime, endTime));
|
.between(Reservation::getStartTime, now, endTime));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addReservation(Reservation reservation) {
|
public void addReservation(Reservation reservation) {
|
||||||
|
User user = userMapper.selectById(reservation.getUserId());
|
||||||
|
Team team = teamMapper.selectById(user.getTeamId());
|
||||||
|
Device device = deviceMapper.selectById(reservation.getDeviceId());
|
||||||
|
|
||||||
|
reservation.setApplicantName(user.getName());
|
||||||
|
reservation.setApplicantTeam(team.getName());
|
||||||
|
reservation.setApplicantContact(user.getPhone());
|
||||||
|
reservation.setDeviceAdminId(device.getDeviceAdminId());
|
||||||
reservation.setStatus(String.valueOf(ReservationStatus.PENDING_LEADER));
|
reservation.setStatus(String.valueOf(ReservationStatus.PENDING_LEADER));
|
||||||
reservationMapper.insert(reservation);
|
reservationMapper.insert(reservation);
|
||||||
}
|
}
|
||||||
@ -94,4 +109,16 @@ public class ReservationServiceImpl implements ReservationService {
|
|||||||
res.setRecords(vos);
|
res.setRecords(vos);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<TimeRangeVO> getUnavailableTimes(Long id) {
|
||||||
|
List<Reservation> reservations = reservationMapper.selectList(new LambdaQueryWrapper<Reservation>()
|
||||||
|
.eq(Reservation::getDeviceId, id)
|
||||||
|
.eq(Reservation::getStatus, "APPROVED")
|
||||||
|
.gt(Reservation::getEndTime, LocalDate.now()));
|
||||||
|
|
||||||
|
return reservations.stream()
|
||||||
|
.map(r -> new TimeRangeVO(r.getStartTime(), r.getEndTime()))
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,17 @@
|
|||||||
|
package github.benjamin.equipreservebackend.vo;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class TimeRangeVO {
|
||||||
|
|
||||||
|
private LocalDate startTime;
|
||||||
|
private LocalDate endTime;
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user