package com.tcm.training.admin.member.controller; import com.tcm.training.admin.common.ApiResponse; import com.tcm.training.admin.common.PageResponse; import cn.dev33.satoken.annotation.SaCheckPermission; import com.tcm.training.admin.member.dto.UserBatchClinicUpdateRequest; import com.tcm.training.admin.member.dto.UserResetPasswordRequest; import com.tcm.training.admin.member.dto.UserStatusRequest; import com.tcm.training.admin.member.dto.UserUpdateRequest; import com.tcm.training.admin.member.service.UserAppService; import com.tcm.training.admin.member.vo.ClinicOptionVO; import com.tcm.training.admin.member.vo.UserDetailVO; import com.tcm.training.admin.member.vo.UserListItemVO; import com.tcm.training.admin.member.vo.UserStatusVO; 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.PostMapping; 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; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.io.IOException; import java.time.LocalDateTime; import java.util.List; @Validated @RestController @RequestMapping({"/api/v1", "/api"}) public class UserController { private final UserAppService userAppService; public UserController(UserAppService userAppService) { this.userAppService = userAppService; } @GetMapping("/users") @SaCheckPermission("member:user:view") public ApiResponse> page( @RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int pageSize, @RequestParam(required = false) String nickname, @RequestParam(required = false) String phone, @RequestParam(required = false) Long clinicId, @RequestParam(required = false) Integer status, @RequestParam(required = false) Integer isMember, @RequestParam(required = false) String memberStatus, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime memberExpireFrom, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime memberExpireTo, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime registeredFrom, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime registeredTo) { return ApiResponse.ok(userAppService.page( page, pageSize, nickname, phone, clinicId, status, isMember, memberStatus, memberExpireFrom, memberExpireTo, registeredFrom, registeredTo )); } @GetMapping("/users/export") @SaCheckPermission("member:user:view") public void export( HttpServletResponse response, @RequestParam(required = false) String nickname, @RequestParam(required = false) String phone, @RequestParam(required = false) Long clinicId, @RequestParam(required = false) Integer status, @RequestParam(required = false) Integer isMember, @RequestParam(required = false) String memberStatus, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime memberExpireFrom, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime memberExpireTo, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime registeredFrom, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime registeredTo) throws IOException { userAppService.export( nickname, phone, clinicId, status, isMember, memberStatus, memberExpireFrom, memberExpireTo, registeredFrom, registeredTo, response ); } @GetMapping("/users/{id}") @SaCheckPermission("member:user:view") public ApiResponse detail(@PathVariable Long id) { return ApiResponse.ok(userAppService.detail(id)); } @PutMapping("/users/batch-clinic") @SaCheckPermission("member:user:edit") public ApiResponse batchUpdateClinic(@Valid @RequestBody UserBatchClinicUpdateRequest req) { userAppService.batchUpdateClinic(req); return ApiResponse.ok(null); } @PutMapping("/users/{id}") @SaCheckPermission("member:user:edit") public ApiResponse update(@PathVariable Long id, @Valid @RequestBody UserUpdateRequest req) { return ApiResponse.ok(userAppService.update(id, req)); } @PatchMapping("/users/{id}/status") @SaCheckPermission("member:user:edit") public ApiResponse patchStatus(@PathVariable Long id, @Valid @RequestBody UserStatusRequest req) { return ApiResponse.ok(userAppService.patchStatus(id, req)); } @PostMapping("/users/{id}/reset-password") @SaCheckPermission("member:user:edit") public ApiResponse resetPassword(@PathVariable Long id, @Valid @RequestBody UserResetPasswordRequest req) { userAppService.resetPassword(id, req); return ApiResponse.ok(null); } @DeleteMapping("/users/{id}") @SaCheckPermission("member:user:delete") public ApiResponse delete(@PathVariable Long id) { userAppService.delete(id); return ApiResponse.ok(null); } @DeleteMapping("/users/{id}/wechat-binding") @SaCheckPermission("member:user:edit") public ApiResponse unbindWechat(@PathVariable Long id) { return ApiResponse.ok(userAppService.unbindWechat(id)); } @GetMapping("/clinics/options") @SaCheckPermission("member:user:view") public ApiResponse> clinicOptions() { return ApiResponse.ok(userAppService.listClinicOptions()); } }