hejianhao
2026-08-19 da724e25fc88b74ffb44954d32bc4b7a904d0646
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package com.tcm.training.admin.member.controller;
 
import com.tcm.training.admin.common.ApiResponse;
import com.tcm.training.admin.common.PageResponse;
import com.tcm.training.admin.member.service.ClinicAppService;
import com.tcm.training.admin.member.dto.ClinicBankAccountUpdateRequest;
import com.tcm.training.admin.member.vo.ClinicBoundUserItemVO;
import com.tcm.training.admin.member.vo.ClinicDetailVO;
import com.tcm.training.admin.member.vo.ClinicListItemVO;
import com.tcm.training.admin.member.vo.ClinicRegionOptionVO;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.validation.annotation.Validated;
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;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.bind.annotation.RequestBody;
import javax.validation.Valid;
 
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.List;
 
@Validated
@RestController
@RequestMapping({"/api/v1", "/api"})
public class ClinicController {
 
    private final ClinicAppService clinicAppService;
 
    public ClinicController(ClinicAppService clinicAppService) {
        this.clinicAppService = clinicAppService;
    }
 
    @GetMapping("/clinics")
    public ApiResponse<PageResponse<ClinicListItemVO>> page(
            @RequestParam(defaultValue = "1") int page,
            @RequestParam(defaultValue = "10") int pageSize,
            @RequestParam(required = false) String regionCode,
            @RequestParam(required = false) String name,
            @RequestParam(required = false) String phone,
            @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime createdFrom,
            @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime createdTo,
            @RequestParam(required = false) Integer status) {
        return ApiResponse.ok(clinicAppService.page(page, pageSize, regionCode, name, phone, createdFrom, createdTo, status));
    }
 
    @GetMapping("/clinics/clinic-import-template")
    public void downloadClinicImportTemplate(HttpServletResponse response) throws IOException {
        clinicAppService.downloadClinicImportTemplate(response);
    }
 
    @PostMapping("/clinics/agent-bindings/import")
    public ApiResponse<Void> importAgentBindings(@RequestParam("file") MultipartFile file) throws IOException {
        clinicAppService.importAgentBindings(file);
        return ApiResponse.ok(null);
    }
    @GetMapping("/clinics/export")
    public void export(HttpServletResponse response,
                       @RequestParam(required = false) String regionCode,
                       @RequestParam(required = false) String name,
                       @RequestParam(required = false) String phone,
                       @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime createdFrom,
                       @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime createdTo,
                       @RequestParam(required = false) Integer status) throws IOException {
        clinicAppService.export(regionCode, name, phone, createdFrom, createdTo, status, response);
    }
 
    @GetMapping("/clinics/regions")
    public ApiResponse<List<ClinicRegionOptionVO>> regionOptions() {
        return ApiResponse.ok(clinicAppService.regionOptions());
    }
 
    @GetMapping("/clinics/{id}")
    public ApiResponse<ClinicDetailVO> detail(@PathVariable Long id) {
        return ApiResponse.ok(clinicAppService.detail(id));
    }
 
    @PutMapping("/clinics/{id}")
    public ApiResponse<ClinicDetailVO> update(@PathVariable Long id,
                                               @Valid @RequestBody ClinicBankAccountUpdateRequest request) {
        return ApiResponse.ok(clinicAppService.updateBankAccount(id, request));
    }
    @GetMapping("/clinics/{id}/users")
    public ApiResponse<PageResponse<ClinicBoundUserItemVO>> clinicUsers(
            @PathVariable Long id,
            @RequestParam(defaultValue = "1") int page,
            @RequestParam(defaultValue = "10") int pageSize,
            @RequestParam(required = false) String nickname,
            @RequestParam(required = false) String phone,
            @RequestParam(required = false) Integer status,
            @RequestParam(required = false) Integer isMember,
            @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(clinicAppService.clinicUsers(id, page, pageSize, nickname, phone, status, isMember, registeredFrom, registeredTo));
    }
}