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
package com.talentcard.server.business.admin;
 
import java.util.Map;
 
import com.talentcard.server.business.PageResult;
import com.talentcard.server.common.ApiResponse;
import com.talentcard.server.request.MerchantDisplayPolicySaveRequest;
import com.talentcard.server.request.MerchantDisplayPolicyStatusRequest;
import com.talentcard.server.service.MerchantDisplayPolicyAdminService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
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 = "后台-商户优惠政策展示配置", description = "后台维护仅展示类商户政策、联系方式、办理说明和上下架状态")
@RestController
@RequestMapping("/api/admin/display-merchant-policies")
public class DisplayMerchantPolicyAdminController {
    private final MerchantDisplayPolicyAdminService service;
 
    public DisplayMerchantPolicyAdminController(MerchantDisplayPolicyAdminService service) {
        this.service = service;
    }
 
    @Operation(summary = "查询商户优惠政策配置列表", description = "按商户、人才卡类型、商户类型、上下架状态筛选展示类商户政策")
    @GetMapping
    public ApiResponse<PageResult<Map<String, Object>>> page(
            @Parameter(description = "商户ID") @RequestParam(required = false) Long merchantId,
            @Parameter(description = "商户名称、联系电话、地址关键词") @RequestParam(required = false) String keyword,
            @Parameter(description = "商户类型") @RequestParam(required = false) String merchantType,
            @Parameter(description = "人才卡类型,例如EXCELLENT、OUTSTANDING、ELITE") @RequestParam(required = false) String cardLevel,
            @Parameter(description = "上下架状态:1上架,0下架") @RequestParam(required = false) Integer status,
            @Parameter(description = "页码") @RequestParam(defaultValue = "1") int page,
            @Parameter(description = "每页条数") @RequestParam(defaultValue = "10") int size
    ) {
        return ApiResponse.success(service.page(merchantId, keyword, merchantType, cardLevel, status, page, size));
    }
 
    @Operation(summary = "查询商户优惠政策配置详情", description = "查询单个商户的联系方式、办理说明、上下架状态及各人才卡类型政策")
    @GetMapping("/{merchantId}")
    public ApiResponse<Map<String, Object>> detail(
            @Parameter(description = "商户ID") @PathVariable Long merchantId
    ) {
        return ApiResponse.success(service.detail(merchantId));
    }
 
    @Operation(summary = "保存商户优惠政策配置", description = "维护已有商户的联系方式、办理说明、上下架状态,并按人才卡类型新增或更新优惠政策")
    @PutMapping("/{merchantId}")
    public ApiResponse<Map<String, Object>> save(
            @Parameter(description = "商户ID") @PathVariable Long merchantId,
            @Valid @RequestBody MerchantDisplayPolicySaveRequest request
    ) {
        return ApiResponse.success(service.save(merchantId, request));
    }
 
    @Operation(summary = "修改商户展示上下架状态", description = "只修改展示类商户的上架/下架状态,不影响支付订单逻辑")
    @PatchMapping("/{merchantId}/status")
    public ApiResponse<Map<String, Object>> updateStatus(
            @Parameter(description = "商户ID") @PathVariable Long merchantId,
            @Valid @RequestBody MerchantDisplayPolicyStatusRequest request
    ) {
        return ApiResponse.success(service.updateStatus(merchantId, request.status()));
    }
 
    @Operation(summary = "查询商户优惠政策浏览/咨询记录", description = "查看小程序记录的浏览或咨询事件,不生成支付订单")
    @GetMapping("/events")
    public ApiResponse<PageResult<Map<String, Object>>> events(
            @Parameter(description = "商户ID") @RequestParam(required = false) Long merchantId,
            @Parameter(description = "事件类型:VIEW浏览,CONSULT咨询") @RequestParam(required = false) String eventType,
            @Parameter(description = "人才卡类型") @RequestParam(required = false) String cardLevel,
            @Parameter(description = "商户名称或备注关键词") @RequestParam(required = false) String keyword,
            @Parameter(description = "页码") @RequestParam(defaultValue = "1") int page,
            @Parameter(description = "每页条数") @RequestParam(defaultValue = "10") int size
    ) {
        return ApiResponse.success(service.events(merchantId, eventType, cardLevel, keyword, page, size));
    }
}