longz
2026-07-13 5882ba8863d77fdcc168b176c3ffb30e8a20556a
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
package com.sinata.appointment.controller;
 
import com.sinata.appointment.common.Result;
import com.sinata.appointment.common.ResultUtil;
import com.sinata.appointment.dto.MiniAppointmentCreateRequest;
import com.sinata.appointment.dto.MiniAppointmentCreateResultVo;
import com.sinata.appointment.dto.MiniAppointmentListVo;
import com.sinata.appointment.dto.MiniMyAppointmentDetailVo;
import com.sinata.appointment.dto.MiniMyVisitorCodeOrderVo;
import com.sinata.appointment.dto.MiniSharedAppointmentDetailVo;
import com.sinata.appointment.dto.MiniVisitRecordListVo;
import com.sinata.appointment.service.MiniAppointmentApplicationService;
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 java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
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 org.springframework.web.bind.annotation.PathVariable;
 
@Tag(name = "小程序预约")
@RestController
@RequestMapping("/api/mini/appointments")
@RequiredArgsConstructor
public class MiniAppointmentController {
 
    private final MiniAppointmentApplicationService miniAppointmentApplicationService;
 
    @Operation(summary = "小程序发起预约")
    @PostMapping
    public Result<MiniAppointmentCreateResultVo> create(@Valid @RequestBody MiniAppointmentCreateRequest request) {
        return ResultUtil.data(miniAppointmentApplicationService.create(request));
    }
 
    @Operation(summary = "小程序取消预约")
    @PostMapping("/{id}/cancel")
    public Result<Void> cancel(
            @PathVariable Long id,
            @RequestParam @NotBlank(message = "uuid 不能为空") String uuid) {
        miniAppointmentApplicationService.cancelBySubmitter(id, uuid);
        return ResultUtil.success();
    }
 
    @Operation(summary = "小程序删除预约记录")
    @PostMapping("/{id}/delete")
    public Result<Void> deleteMyRecord(
            @PathVariable Long id,
            @RequestParam @NotBlank(message = "uuid 不能为空") String uuid) {
        miniAppointmentApplicationService.deleteMyOrderRecord(id, uuid);
        return ResultUtil.success();
    }
 
    @Operation(summary = "小程序我的预约详情")
    @GetMapping("/{id}")
    public Result<MiniMyAppointmentDetailVo> detail(
            @PathVariable Long id,
            @RequestParam @NotBlank(message = "uuid 不能为空") String uuid) {
        return ResultUtil.data(miniAppointmentApplicationService.detailMyOrder(id, uuid));
    }
 
    @Operation(summary = "小程序审批人已处理预约列表")
    @GetMapping("/mine")
    public Result<List<MiniAppointmentListVo>> mine(
            @RequestParam(defaultValue = "1") long page,
            @RequestParam(defaultValue = "10") long size,
            @RequestParam(required = false) String status,
            @RequestParam(required = false) String visitorNameKeyword,
            @RequestParam(required = false) String visitedUserNameKeyword,
            @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate visitDate) {
        String keyword = visitorNameKeyword != null && !visitorNameKeyword.isBlank()
                ? visitorNameKeyword
                : visitedUserNameKeyword;
        return ResultUtil.page(
                miniAppointmentApplicationService.pageMine(
                        page, size, status, keyword, visitDate));
    }
 
    @Operation(summary = "小程序来访记录列表")
    @GetMapping("/visit-records")
    public Result<List<MiniVisitRecordListVo>> visitRecords(
            @RequestParam(defaultValue = "1") long page,
            @RequestParam(defaultValue = "10") long size,
            @RequestParam(defaultValue = "false") boolean futureOnly,
            @RequestParam(required = false) String visitorNameKeyword,
            @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate visitDate) {
        return ResultUtil.page(
                miniAppointmentApplicationService.pageVisitRecords(
                        page, size, futureOnly, visitorNameKeyword, visitDate));
    }
 
    @Operation(summary = "小程序我的预约列表")
    @GetMapping("/my-orders")
    public Result<List<MiniAppointmentListVo>> myOrders(
            @RequestParam(defaultValue = "1") long page,
            @RequestParam(defaultValue = "10") long size,
            @RequestParam(required = false) String status,
            @RequestParam(required = false) String keyword) {
        return ResultUtil.page(
                miniAppointmentApplicationService.pageMyOrders(
                        page, size, status, keyword));
    }
 
    @Operation(summary = "小程序首页我的访客码列表")
    @GetMapping("/my-visitor-codes")
    public Result<List<MiniMyVisitorCodeOrderVo>> myVisitorCodes() {
        return ResultUtil.data(miniAppointmentApplicationService.listMyVisitorCodes());
    }
 
    @Operation(summary = "小程序分享页预约详情")
    @GetMapping("/shared/detail")
    public Result<MiniSharedAppointmentDetailVo> sharedDetail(
            @RequestParam @NotBlank(message = "uuid 不能为空") String uuid) {
        return ResultUtil.data(miniAppointmentApplicationService.detailSharedOrder(uuid));
    }
 
    @Operation(summary = "小程序分享页访客码")
    @GetMapping("/shared/visitor-codes")
    public Result<MiniMyVisitorCodeOrderVo> sharedVisitorCodes(
            @RequestParam @NotBlank(message = "uuid 不能为空") String uuid) {
        return ResultUtil.data(miniAppointmentApplicationService.getSharedVisitorCodes(uuid));
    }
 
    @Operation(summary = "小程序单张分享访客码")
    @GetMapping("/shared/ticket-code")
    public Result<MiniMyVisitorCodeOrderVo> sharedTicketCode(
            @RequestParam @NotBlank(message = "ticketUuid 不能为空") String ticketUuid) {
        return ResultUtil.data(miniAppointmentApplicationService.getSharedVisitorCodeByTicketUuid(ticketUuid));
    }
}