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>> 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> detail( @Parameter(description = "商户ID") @PathVariable Long merchantId ) { return ApiResponse.success(service.detail(merchantId)); } @Operation(summary = "保存商户优惠政策配置", description = "维护已有商户的联系方式、办理说明、上下架状态,并按人才卡类型新增或更新优惠政策") @PutMapping("/{merchantId}") public ApiResponse> 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> 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>> 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)); } }