Compare commits
2 Commits
44df4b564d
...
121ec9b684
Author | SHA1 | Date | |
---|---|---|---|
121ec9b684 | |||
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.response.ResponseResult;
|
||||
import github.benjamin.equipreservebackend.service.DeviceService;
|
||||
import github.benjamin.equipreservebackend.service.ReservationService;
|
||||
import github.benjamin.equipreservebackend.vo.DeviceUserVO;
|
||||
import github.benjamin.equipreservebackend.vo.TimeRangeVO;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
@ -19,6 +22,8 @@ public class DeviceController {
|
||||
|
||||
private final DeviceService deviceService;
|
||||
|
||||
private final ReservationService reservationService;
|
||||
|
||||
@PreAuthorize("hasRole('USER')")
|
||||
@GetMapping
|
||||
public ResponseResult<Page<DeviceUserVO>> getDevices(@RequestParam(defaultValue = "1") Integer page,
|
||||
@ -29,6 +34,13 @@ public class DeviceController {
|
||||
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')")
|
||||
@PostMapping
|
||||
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 github.benjamin.equipreservebackend.entity.Reservation;
|
||||
import github.benjamin.equipreservebackend.vo.TimeRangeVO;
|
||||
import github.benjamin.equipreservebackend.vo.UserReservationVO;
|
||||
|
||||
import java.util.List;
|
||||
@ -13,4 +14,6 @@ public interface ReservationService {
|
||||
void addReservation(Reservation reservation);
|
||||
|
||||
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.entity.Device;
|
||||
import github.benjamin.equipreservebackend.entity.Reservation;
|
||||
import github.benjamin.equipreservebackend.entity.Team;
|
||||
import github.benjamin.equipreservebackend.entity.User;
|
||||
import github.benjamin.equipreservebackend.mapper.DeviceMapper;
|
||||
import github.benjamin.equipreservebackend.mapper.ReservationMapper;
|
||||
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.TimeRangeVO;
|
||||
import github.benjamin.equipreservebackend.vo.UserReservationVO;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
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;
|
||||
@ -33,6 +37,8 @@ public class ReservationServiceImpl implements ReservationService {
|
||||
|
||||
private final UserMapper userMapper;
|
||||
|
||||
private final TeamMapper teamMapper;
|
||||
|
||||
/**
|
||||
* 未来days天内有预约的设备显示为“有预约”
|
||||
*/
|
||||
@ -41,15 +47,24 @@ public class ReservationServiceImpl implements ReservationService {
|
||||
|
||||
@Override
|
||||
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>()
|
||||
.in(Reservation::getDeviceId, devicesIds)
|
||||
.eq(Reservation::getStatus, ReservationStatus.APPROVED)
|
||||
.lt(Reservation::getEndTime, endTime));
|
||||
.between(Reservation::getStartTime, now, endTime));
|
||||
}
|
||||
|
||||
@Override
|
||||
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));
|
||||
reservationMapper.insert(reservation);
|
||||
}
|
||||
@ -94,4 +109,16 @@ public class ReservationServiceImpl implements ReservationService {
|
||||
res.setRecords(vos);
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,9 @@
|
||||
package github.benjamin.equipreservebackend.vo;
|
||||
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
|
||||
import github.benjamin.equipreservebackend.entity.Device;
|
||||
import github.benjamin.equipreservebackend.entity.User;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@ -8,6 +11,7 @@ import lombok.NoArgsConstructor;
|
||||
@NoArgsConstructor
|
||||
public class DeviceUserVO {
|
||||
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long deviceId;
|
||||
private String name;
|
||||
private String usageRequirement;
|
||||
|
@ -1,5 +1,7 @@
|
||||
package github.benjamin.equipreservebackend.vo;
|
||||
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
|
||||
import github.benjamin.equipreservebackend.entity.Role;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
@ -10,6 +12,7 @@ import java.util.List;
|
||||
@AllArgsConstructor
|
||||
public class LoginResponse {
|
||||
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long userId;
|
||||
private String name;
|
||||
private List<String> roles;
|
||||
|
@ -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