package com.baiyue.lastleg.appointmentplanning; import com.baiyue.common.core.api.ApiResponse; import com.baiyue.common.core.api.PageResult; import com.baiyue.common.security.AuthenticatedUser; import jakarta.validation.Valid; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/api/platform/v1/last-leg/appointment-planning/containers") public class AppointmentContainerController { private final AppointmentContainerService containers; private final AppointmentFollowupService followups; public AppointmentContainerController(AppointmentContainerService containers,AppointmentFollowupService followups) { this.containers=containers; this.followups=followups; } @GetMapping @PreAuthorize("hasAuthority('platform:appointment:list') and hasAuthority('platform:overseas-warehouse:last-mile-order:list')") public ApiResponse> page(@AuthenticationPrincipal AuthenticatedUser user, @RequestParam(defaultValue="1") int page,@RequestParam(defaultValue="20") int size,@RequestParam(required=false) String keyword) { AppointmentPlanningController.requirePlatform(user); return ApiResponse.success(containers.page(page,size,keyword)); } @GetMapping("/{containerId}") @PreAuthorize("hasAuthority('platform:appointment:list') and hasAuthority('platform:overseas-warehouse:last-mile-order:list')") public ApiResponse context(@AuthenticationPrincipal AuthenticatedUser user, @PathVariable String containerId,@RequestParam(required=false) String warehouseId) { AppointmentPlanningController.requirePlatform(user); return ApiResponse.success(containers.context(containerId,warehouseId)); } @GetMapping("/{containerId}/follow-ups") @PreAuthorize("hasAuthority('platform:appointment:list') and hasAuthority('platform:overseas-warehouse:last-mile-order:list')") public ApiResponse history(@AuthenticationPrincipal AuthenticatedUser user, @PathVariable String containerId,@RequestParam(required=false) String warehouseId, @RequestParam(defaultValue="1") int page,@RequestParam(defaultValue="20") int size) { AppointmentPlanningController.requirePlatform(user); return ApiResponse.success(followups.containerHistory(containerId,warehouseId,page,size)); } @PostMapping("/{containerId}/follow-ups") @PreAuthorize("hasAuthority('platform:appointment:list') and hasAuthority('platform:overseas-warehouse:last-mile-order:list') and hasAuthority('platform:appointment:followup')") public ApiResponse save(@AuthenticationPrincipal AuthenticatedUser user, @PathVariable String containerId,@RequestParam(required=false) String warehouseId, @Valid @RequestBody AppointmentFollowupService.Save request) { AppointmentPlanningController.requirePlatform(user); return ApiResponse.success(followups.saveContainer(containerId,warehouseId,request,user.userId().toString(),user.displayName()==null?user.username():user.displayName())); } }