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.VisitorUserDetailVo; import com.sinata.appointment.dto.VisitorUserListVo; import com.sinata.appointment.dto.VisitorUserStatusPatchRequest; import com.sinata.appointment.dto.VisitorUserUpdateRequest; import com.sinata.appointment.service.VisitorUserManageApplicationService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import jakarta.validation.constraints.NotBlank; import java.time.LocalDate; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PatchMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; 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/sys/visitor-users") @RequiredArgsConstructor @Validated public class VisitorUserManageController { private final VisitorUserManageApplicationService visitorUserManageApplicationService; @Operation(summary = "分页列表") @GetMapping @SaCheckPermission("sys:visitor-users:page") public Result> page( @RequestParam(defaultValue = "1") long page, @RequestParam(defaultValue = "10") long size, @RequestParam(required = false) String userName, @RequestParam(required = false) String mobile, @RequestParam(required = false) String companyName, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate registerStartDate, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate registerEndDate, @RequestParam(required = false) Integer status) { return ResultUtil.page( visitorUserManageApplicationService.page( page, size, userName, mobile, companyName, registerStartDate, registerEndDate, status)); } @Operation(summary = "导出 Excel") @GetMapping("/export") @SaCheckPermission("sys:visitor-users:export") public ResponseEntity export( @RequestParam(required = false) String userName, @RequestParam(required = false) String mobile, @RequestParam(required = false) String companyName, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate registerStartDate, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate registerEndDate, @RequestParam(required = false) Integer status) { byte[] body = visitorUserManageApplicationService.exportExcel( userName, mobile, companyName, registerStartDate, registerEndDate, status); return ResponseEntity.ok() .contentType( MediaType.parseMediaType( "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")) .header( HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"visitor-users.xlsx\"") .body(body); } @Operation(summary = "详情(须 uuid)") @GetMapping("/{id}") @SaCheckPermission("sys:visitor-users:detail") public Result detail( @PathVariable Long id, @RequestParam @NotBlank(message = "uuid 不能为空") String uuid) { return ResultUtil.data(visitorUserManageApplicationService.detail(id, uuid)); } @Operation(summary = "编辑") @PutMapping("/{id}") @SaCheckPermission("sys:visitor-users:update") public Result update( @PathVariable Long id, @Valid @RequestBody VisitorUserUpdateRequest request) { visitorUserManageApplicationService.update(id, request); return ResultUtil.success(); } @Operation(summary = "启用/禁用") @PatchMapping("/{id}/status") @SaCheckPermission("sys:visitor-users:status") public Result status( @PathVariable Long id, @Valid @RequestBody VisitorUserStatusPatchRequest request) { visitorUserManageApplicationService.patchStatus(id, request); return ResultUtil.success(); } @Operation(summary = "删除(逻辑删除,须传 uuid)") @DeleteMapping("/{id}") @SaCheckPermission("sys:visitor-users:delete") public Result delete( @PathVariable Long id, @RequestParam @NotBlank(message = "uuid 不能为空") String uuid) { visitorUserManageApplicationService.delete(id, uuid); return ResultUtil.success(); } }