package com.baiyue.lastleg.calendar; import com.baiyue.common.core.api.ApiResponse; import com.baiyue.common.security.AuthenticatedUser; import com.baiyue.lastleg.security.OverseasPermissions; import jakarta.validation.Valid; import org.springframework.http.HttpStatus; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; import org.springframework.web.server.ResponseStatusException; import java.util.List; @RestController @RequestMapping("/api/platform/v1/last-leg/appointment-calendar") public class WarehouseCalendarController { private final WarehouseCalendarService service; /** 装配整柜到仓日历读取服务。 */ public WarehouseCalendarController(WarehouseCalendarService service) { this.service = service; } /** 使用预约和原订单读取权限,写资格继续使用原订单编辑权限。 */ @PostMapping("/warehouse-arrivals/query") @PreAuthorize("hasAuthority('platform:appointment:list') and hasAuthority('platform:overseas-warehouse:last-mile-order:list')") public ApiResponse> calendar(@AuthenticationPrincipal AuthenticatedUser user, @Valid @RequestBody WarehouseCalendarModels.Query query) { if (user == null || !"PLATFORM".equals(user.appCode()) || user.tenantId() == null || user.tenantId() != 0L) throw new ResponseStatusException(HttpStatus.FORBIDDEN, "仅平台可读预约日历"); return ApiResponse.success(service.calendar(query, user.permissions().contains(OverseasPermissions.LAST_MILE_ORDER_EDIT))); } }