package com.sinata.appointment.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import com.sinata.appointment.common.Result; import com.sinata.appointment.common.ResultUtil; import com.sinata.appointment.dto.AppointmentAdminDetailVo; import com.sinata.appointment.dto.AppointmentAdminListVo; import com.sinata.appointment.entity.AppointmentOrder; import com.sinata.appointment.service.AppointmentApplicationService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.constraints.NotBlank; import lombok.RequiredArgsConstructor; import java.time.LocalDate; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @Tag(name = "预约") @RestController @RequestMapping("/api/appointments") @RequiredArgsConstructor public class AppointmentController { private final AppointmentApplicationService appointmentApplicationService; @Operation(summary = "分页查询") @GetMapping @SaCheckPermission("appointments:page") public Result> page( @RequestParam(defaultValue = "1") long page, @RequestParam(defaultValue = "10") long size, @RequestParam(required = false) String visitedUserName, @RequestParam(required = false) Long visitedDeptId, @RequestParam(required = false) String accessArea, @RequestParam(required = false) String localUnit, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate visitDateStart, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate visitDateEnd, @RequestParam(required = false) String displayStatus, @RequestParam(required = false) String approvalStatus, @RequestParam(required = false) String visitorKeyword, @RequestParam(required = false) String visitReasonCode) { return ResultUtil.page( appointmentApplicationService.pageOrders( page, size, visitedUserName, visitedDeptId, accessArea, localUnit, visitDateStart, visitDateEnd, displayStatus, approvalStatus, visitorKeyword, visitReasonCode)); } @Operation(summary = "导出 Excel") @GetMapping("/export") @SaCheckPermission("appointments:export") public ResponseEntity export( @RequestParam(required = false) String visitedUserName, @RequestParam(required = false) Long visitedDeptId, @RequestParam(required = false) String accessArea, @RequestParam(required = false) String localUnit, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate visitDateStart, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate visitDateEnd, @RequestParam(required = false) String displayStatus, @RequestParam(required = false) String approvalStatus, @RequestParam(required = false) String visitorKeyword, @RequestParam(required = false) String visitReasonCode) { byte[] body = appointmentApplicationService.exportExcel( visitedUserName, visitedDeptId, accessArea, localUnit, visitDateStart, visitDateEnd, displayStatus, approvalStatus, visitorKeyword, visitReasonCode); return ResponseEntity.ok() .contentType( MediaType.parseMediaType( "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")) .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"appointments.xlsx\"") .body(body); } @Operation(summary = "详情含访客") @GetMapping("/{id}") @SaCheckPermission("appointments:detail") public Result detail( @PathVariable Long id, @RequestParam @NotBlank(message = "uuid 不能为空") String uuid) { return ResultUtil.data(appointmentApplicationService.detail(id, uuid)); } }